c++课程设计--人员管理系统公司.doc_第1页
c++课程设计--人员管理系统公司.doc_第2页
c++课程设计--人员管理系统公司.doc_第3页
c++课程设计--人员管理系统公司.doc_第4页
c++课程设计--人员管理系统公司.doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计报告 课程设计题目: 人员管理系统公司 学生姓名:曾宏诚班 级:10210301学 号:1021030102专 业:信息管理与信息系统指导教师:黄国辉2011年11月10日目录第一章 绪论3第二章 需求分析4第三章 总体设计5第四章 详细设计(个人负责的模块)6第五章 程序代码(个人负责的部分)8第六章 系统程序结果11第七章 课程设计总结13第九章 参考文献14 第一章 绪 论本章简单介绍公司员工管理系统的有关基础理论知识,这是深入了解后续内容的必要准备。1公司员工管理系统概述1.1 管理信息系统的概念管理信息系统(Management Information Systems,简称MIS),是一个不断发展的新型学科,MIS的定义随着计算机技术和通信技术的进步也在不断更新,在现阶段普遍认为MIS 是人为或计算机设备以及其他信息处理手段组成并用于管理信息的系统。包括以下几个基本概念:(1) MIS的对象就是信息。信息是经过加工的对决策者有价值的数据。信息的主要特征是来源分散,数量庞大。信息来源于生产第一线、社会环境、市场以及行政管理等部门。信息具有时间性。(2) 系统是由相互联系、相互作用的若干要素按一定的规则组成并具有一定功能的整体。 系统由输入、处理、输出、反馈、控制等五个基本要素组成。(3) 管理信息由信息的采集、信息的传递、信息的储存、信息的加工、信息的维护和信息的使用等五个方面组成。 MIS包括计算机、网络通信设备等硬件成分,也包括操作系统、应用软件包等软件成分,并随着计算机技术和通信技术的迅速发展还会出现更多的内容。1.2 课题背景该项目开发的软件为公司员工信息管理系统软件,是鉴于目前公司对员工的管理越来越来要求高,员工信息呈爆炸性增长的前提下,公司对员工信息管理的自动化与准确化的要求日益强烈的背景下构思出来的。 目前社会上信息管理系统发展飞快,各个企事业单位都引入了信息管理软件来管理自己日益增长的各种信息,商业化的员工信息管理软件也不少.但本系统完全独立开发,力求使系统功能简洁明了,但功能齐全且易于操作1.3 目的背景与意义员工信息管理系统是一个公司不可缺少的部分。一个功能齐全、简单易用的信息管理系统不但能有效地减轻公司相关工作人员的工作负担,它的内容对于公司的决策者和管理者来说都至关重要。所以员工信息管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案、统计和查询数据,这种管理方式存在着许多缺点,如:效率低、保密性差,人工的大量浪费;另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少困难。随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着来越重要的作用。作为计算机应用的一部分,使用计算机对学校的各类信息进行管理,具有手工管理所无法比拟的优点.例如:检索迅速、查询方便、效率高、可靠性好、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高员工信息管理的效率,也是一个单位科学化、正规化管理,与世界接轨的重要条件。1.4 程序开发的目标 建立员工信息管理系统,采用计算机对员工信息进行管理,进一步提高管理效益和现代化水平。帮助广大公司提高工作效率,实现员工信息管理工作流程的系统化、规范化和自动化。 第二章 需求分析随着信息时代的到来,各行各业都需要对信息进行有效快速的处理,当然公司的员工管理尤其需要。有一个好的管理系统,是任何一个公司对其业务进行分析及平时日常管理的必要条件。在进行管理得方法和手段方面,最有效得工具就是电脑管理了。传统的人力管理存在着许多无法避免的问题,针对这些问题需要设计出运用计算机管理的信息系统。系统实现员工管理的信息记录和存储,进行全面自动管理,大幅度提高了信息管理得效率,使得公司对员工的管理更为轻松。本应用程序实现的是Visual C+的功能,用户进入该程序后,可以在用户界面进行有效的操作。用户开始登录界面后,可以在文本框中输入信息,在此过程中,可以对员工进行查询、修改、增加、删除等操作,若系统处理后,根据自己的需要,用户可以对其进行保存。开发工具:Microsoft Visual C+ 6.0第三章 总体设计1. 系统总体框架使用面向对象的程序设计思想进行分析,整个系统涉及两大类信息和操作,公司,人员。所以系统主要涉及两个大类:公司类Company、人员类Person。系统的总体框架就是公司类,人员类的定义;主函数中定义一个公司对象,循环显示主菜单并根据用户选择调用公司类的相应方法(成员函数)。(1)公司类Company:考虑系统操作的人员信息的数量具有不确定性,所以考虑使用链表保存、处理人员信息。公司类包含:所有人员信息的一个不带头结点的链表(作为数据成员)及可以对人员信息进行增,删,改,查询经营信息,基础数据设置,数据存盘,数据装入等操作的相关模块(Add,Delete,Modify,Query,Set,Save,Load)作为成员函数。(2)人员类Person:所有人员都具有的公共信息及操作可以使用人员类进行描述。由于系统具有4类人员且4类人员数据,操作有所不同,如销售员包含销售额,而技术人员包含工作小时数且计算工资的方法不同,所以应当为4类人员创建相应的Person类的派生类。(3)为了使公司类可以方便处理人员信息,可以考虑将公司类确定为人员类的友元类或者人员类提供公共的方法以便公司类进行操作。为了公司类可以用共同方法操作人员类,可以将人员类的方法确定为虚函数。2. 类的层次图Person No,Name,Duty,Earning,next,Person(),CalcSalary(),Output()Manager Sales SalesManager Technician Manager(), Amount, Amount, t,CalcSalary(), Sales(),GetAmount(), SalesManager(), Technician(),Output() SetAmount(), SetAmount(), GetT(),SetT(),CalcSalary(), CalcSalary(), CalcSalary(),Output() Output() Output()其中:(1)Person 类的No-人员编号,Name-人员姓名,Duty-人员类别,Earning-工资,next-指向下一个人员的指针;Person 类的CalcSalary(),Output()定义为纯虚函数分别表示要计算人员工资和输出人员信息,由于定义纯虚函数,所以Person是抽象类,具体计算工资,输出人员信息由派生类完成。(2)各个派生的类,包含本类对象特有的数据,Sales:Amount-销售员销售额,SalesManager:Amount-销售经理的总销售额(系统统计各个销售员销售额得到销售经理的总销售额),Technician:t-技术人员工作小时数。Company Person *Worker,Clear(),Company(),Company(),Add(),Delete(),Modify(),Query(),Set(),Save(),Load()其中:(1)Worker就是人员链表。(2)Clear()用于清除人员链表所有结点。(3)Add(),Delete(),Modify(),Query(),Set(),Save(),Load()分别表示系统各个功能模块:增加人员,删除人员,修改人员,查询本月经营信息,基础数据设置,数据存盘,数据装入。第四章 详细设计(个人负责模块)我主要负责增加函数模块。1、录入函数(1)主函数流程(2) Company:Add()第五章 程序代码(个人负责的部分)我主要负责的代码部分有录入函数、显示函数和清空函数,如下:1、 录入函数代码:#include #include #include #include /全局数据,对象double ManagerSalary; /经理固定月薪double SalesManagerSalary; /销售经理固定月薪double SalesManagerPercent; /销售经理提成double SalesPercent; /销售人员提成double WagePerHour; /技术人员小时工资int ID; /员工标识(要保证唯一)class Person /员工类protected: int No; /编号 char Name20; /姓名 int Duty; /岗位 double Earning; /收入 Person *next;public: Person(char ID,char *Name,int Duty) this-Duty=Duty; strcpy(this-Name,Name); this-No=ID; virtual void CalcSalary()=0; virtual void Output()=0; friend class Company;class Manager:public Person /经理类public: Manager(char ID,char *Name,int Duty):Person(ID,Name,Duty) void CalcSalary()Earning=ManagerSalary; void Output() CalcSalary(); coutNotNamet经理tEarningendl; ;class SalesManager:public Person /销售经理类private: double Amount;public: SalesManager(char ID,char *Name,int Duty):Person(ID,Name,Duty) void SetAmount(double s) Amount=s; void CalcSalary() Earning=SalesManagerSalary+Amount*SalesManagerPercent/100; void Output() CalcSalary(); coutNotNamet销售经理tEarningt=T; double GetT() return t; void SetT(double T) this-t=T; void CalcSalary() Earning=WagePerHour*t; void Output() CalcSalary(); coutNotNamet技术员tttEarningAmount=Amount; double GetAmount() return Amount; void SetAmount(double Amount) this-Amount=Amount; void CalcSalary() Earning=SalesPercent/100*Amount; void Output() CalcSalary(); coutNotNamet销售员tAmounttEarningnext; delete Worker; Worker=p; Worker=0; void Add(); /增加人员 void Delete(); /删除人员 void Modify(); /修改人员 void Query(); /查询人员 void Set(); /基础数据设置 void Save(); /数据存盘(包括基础数据,人员数据) void Load(); /数据装入(包括基础数据,人员数据); void Company:Clear() /清除内存中人员数据(内部使用) Person* p=Worker; while(p) Worker=p-next; delete p; p=Worker; void Company:Add() Person *p; /新结点指针 int Duty; char Name20; double Amount,T; coutn* 新增员工 *n; /输入员工信息 ID+; coutDuty; coutName; if(Duty=3) coutAmount; else if(Duty=4) coutT; /创建新员工结点 switch(Duty) case 1:p=new Manager(ID,Name,Duty); break; case 2:p=new SalesManager(ID,Name,Duty); break; case 3:p=new Sales(ID,Name,Duty,Amount); break; case 4:p=new Technician(ID,Name,Duty,T); break; p-next=0; /员工结点加入链表 if(Worker) /若已经存在结点 Person *p2; p2=Worker; while(p2-next) /查找尾结点 p2=p2-next; p2-next=p; /连接 else /若不存在结点(表空) Worker=p; /连接 else if(Duty=4) coutT; void main() char c; Company a; do coutn* 公司人员管理系统 *n; coutc; switch(c) case 1: a.Add(); break; while(c!=8);第六章 系统程序结果 第七章 课程设计总结 通过完成本次面向对象程序设计的任务,使我熟练和掌握了这学期所学的有关visual c+中的一些主要知识点和应用点,如类的定义,类的实现,对象的定义,类的继承等等。可以所学有所学,所有所用,不至于自己所学知识由于没有经历可用过程,而放弃对它的兴趣。 面向对象程序设计作为一门软件设计的课程,具有极强的实践性,使我加强了灵活应用理论知识的能力及面向对象程序设计技能。 此次,应用程序的设计和创建,经历了平时在课堂中和考试中,决不会有的重重难题和问题。而这些问题,又都是课本上很少提到的、更深一层的知识领域和应用领域。这些问题,并不是我们平时只靠课本,就可以轻易解决的。所以,锻炼了我们面对难题,自己思索,自己探索,自己查资料发现问题、解决问题的独断能力。 当然,此次任务的完成,也体现出同学之间的团结精神。所遇种种难以解决的问题,大家都会把它当作共同遇到的问题,在一起共同探讨,共同发挥自己所学和所知,投入式的互相帮助和解决困难。 “实践是检验真理的唯一标准”。没有实践,就不会发现和深刻体会它的真实所在。只有通过检验的真理,在自己的心里,才会认可它的真实性。面向对象程序设计的完成,使我们懂得了真理的重要性,理论和实际的相结合,才能真正把握所学和所掌握的知识。 理论的拥有并不能代表我们的实力和能力,一切的事件和其成功都是理论和实践的结合。总之,我们学习和掌握的知识,只有通过实际应用,才能真正的理解和掌握,才能更好的去应用。 第八章 源代码 /*本程序有关的两个数据文件:base.txt基础数据文件(必须存在,且按规定格式保存)person.txt人员信息文件(可选)*/#include #include #include #include /全局数据,对象double ManagerSalary; /经理固定月薪double SalesManagerSalary; /销售经理固定月薪double SalesManagerPercent; /销售经理提成double SalesPercent; /销售人员提成double WagePerHour; /技术人员小时工资int ID; /员工标识(要保证唯一)class Person /员工类protected: int No; /编号 char Name20; /姓名 int Duty; /岗位 double Earning; /收入 Person *next;public: Person(char ID,char *Name,int Duty) this-Duty=Duty; strcpy(this-Name,Name); this-No=ID; virtual void CalcSalary()=0; virtual void Output()=0; friend class Company;class Manager:public Person /经理类public: Manager(char ID,char *Name,int Duty):Person(ID,Name,Duty) void CalcSalary()Earning=ManagerSalary; void Output() CalcSalary(); coutNotNamet经理tEarningendl; ;class SalesManager:public Person /销售经理类private: double Amount;public: SalesManager(char ID,char *Name,int Duty):Person(ID,Name,Duty) void SetAmount(double s) Amount=s; void CalcSalary() Earning=SalesManagerSalary+Amount*SalesManagerPercent/100; void Output() CalcSalary(); coutNotNamet销售经理tEarningt=T; double GetT() return t; void SetT(double T) this-t=T; void CalcSalary() Earning=WagePerHour*t; void Output() CalcSalary(); coutNotNamet技术员tttEarningAmount=Amount; double GetAmount() return Amount; void SetAmount(double Amount) this-Amount=Amount; void CalcSalary() Earning=SalesPercent/100*Amount; void Output() CalcSalary(); coutNotNamet销售员tAmounttEarningnext; delete Worker; Worker=p; Worker=0; void Add(); /增加人员 void Delete(); /删除人员 void Modify(); /修改人员 void Query(); /查询人员 void Set(); /基础数据设置 void Save(); /数据存盘(包括基础数据,人员数据) void Load(); /数据装入(包括基础数据,人员数据); void Company:Clear() /清除内存中人员数据(内部使用) Person* p=Worker; while(p) Worker=p-next; delete p; p=Worker; void Company:Add() Person *p; /新结点指针 int Duty; char Name20; double Amount,T; coutn* 新增员工 *n; /输入员工信息 ID+; coutDuty; coutName; if(Duty=3) coutAmount; else if(Duty=4) coutT; /创建新员工结点 switch(Duty) case 1:p=new Manager(ID,Name,Duty); break; case 2:p=new SalesManager(ID,Name,Duty); break; case 3:p=new Sales(ID,Name,Duty,Amount); break; case 4:p=new Technician(ID,Name,Duty,T); break; p-next=0; /员工结点加入链表 if(Worker) /若已经存在结点 Person *p2; p2=Worker; while(p2-next) /查找尾结点 p2=p2-next; p2-next=p; /连接 else /若不存在结点(表空) Worker=p; /连接 void Company:Delete() /删除人员 int No; coutn* 删除员工 *n; coutNo; /查找要删除的结点 Person *p1,*p2; p1=Worker; while(p1) if(p1-No=No) break; else p2=p1; p1=p1-next; /删除结点 if(p1!=NULL)/若找到结点,则删除 if(p1=Worker) /若要删除的结点是第一个结点 Worker=p1-next; delete p1; else /若要删除的结点是后续结点 p2-next=p1-next; delete p1; cout找到并删除n; else /未找到结点 cout未找到!n;void Company:Modify() int No,Duty; char Name20; double Amount,T; coutn* 修改员工 *n; coutNo; /查找要修改的结点 Person *p1,*p2; p1=Worker; while(p1) if(p1-No=No) break; else p2=p1; p1=p1-next; /修改结点 if(p1!=NULL)/若找到结点 p1-Output(); coutDuty; if(p1-Duty!=Duty) /若岗位发生变动 /修改其它数据 coutName; if(Duty=3) coutAmount; else if(Duty=4) coutT; /创建新员工结点 Person *p3; switch(Duty) case 1:p3=new Manager(p1-No,Name,Duty); break; case 2:p3=new SalesManager(p1-No,Name,Duty); break; case 3:p3=new Sales(p1-No,Name,Duty,Amount); break; case 4:p3=new Technician(p1-No,Name,Duty,T); break; /员工结点替换到链表 p3-next=p1-next; if(p1=Worker) /若要替换的结点是第一个结点 Worker=p3; else /若要删除的结点是后续结点 p2-next=p3; /删除原来的员工结点 delete p1; else /若岗位没有变动 coutp1-Name; if(Duty=3) coutAmount; (Sales *)p1)-SetAmount(Amount); else if(Duty=4) coutT; (Technician *)p1)-SetT(T); cout修改成功!n; else /未找到结点 cout未找到!n;void Company:Query() coutDuty=3)sum+=(Sales *)p)-GetAmount(); p=p-next; p=Worker; double sum2=0; /工资总和 while(p) if(p-Duty=2)(SalesManager *)p)-SetAmount(sum); p-Output(); sum2+=p-Earning; p=p-next; cout本月盈利:sum*0.20-sum2endl; cout(按照20利润计算)n;void Company:Set() coutn* 设置基础数据 *n; cout经理固定月薪ManagerSalaryManagerSalary; cout销售经理固定月薪SalesManagerSalarySalesManagerSalary; cout销售经理提成SalesManagerPercentSalesManagerPercent; cout销售人员提成SalesPercentSalesPercent; cout技术人员小时工资WagePerHourWagePerHour; cout=IDID;void Company:Save() /数据存盘(包括基础数据,人员数据),均采用文本文件 ofstream fPerson,fBase; char c; coutc; if(toupper(c)!=Y)return; /保存人员编号、姓名、岗位 fPerson.open(person.txt,ios:out); Person *p=Worker; while(p) fPersonNotNametDutyDuty=3) fPersonGetAmount()Duty=4) fPersonGetT()t; fPersonnext; fPerson.close(); /保存基础数据 fBase.open(base.txt,ios:out); fBase经理固定月薪tManagerSalaryendl; fBase销售经理固定月薪tSalesManagerSalaryendl; fBase销售经理提成tSalesManagerPercentendl; fBase销售人员提成tSalesPercentendl; fBase技术人员小时工资tWagePerHourendl; fBaseIDtIDendl; fPerson.close(); coutbufManagerSalary; /经理固定月薪 fBasebufSalesManagerSalary; /销售经理固定月薪 fBasebufSalesManagerPercent; /销售经理提成 fBasebufSalesPercent; /销售人员提成 fBasebufWagePerHour; /技术人员小时工资 fBasebufID; /员工标识 fBase.close(); /清除内存人员数据 Clear(); /人员数据数据装入 ifstream fPerson; Person *p=Worker; int No; char Name20; int Duty; double Amount,T; fPerson.open(person.txt,ios:in); /读一条记录 fPersonNoNameDuty; if(Duty=3)fPersonAmount; else if(Duty=4)fPersonT; while(fPerson.good() /创建员工结点 switch(Duty) case 1:p=new Manager(No,Name,Duty); break; case 2:p=new SalesManager(No,Name,Duty); break; case 3:p=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论