c“加”“加”公司管理系统课程设计_第1页
c“加”“加”公司管理系统课程设计_第2页
c“加”“加”公司管理系统课程设计_第3页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、课程设计报告公司人员管理系统课 程 :面向对象课程设计 班 级 : 11511 学 号 : 20113051102 姓 名 :吴小蛟 指导老师 :清华教授2012年 6 月12日设计题目(问题)描述和要求1题目:公司人员管理系统2 问题描述:某小型公司,主要有四类人员:经理、兼职技术人员、销售 经理和兼职推销员。现在,需要存储这些人员的姓名、编号、级 别、当月薪水,计算月薪总额并显示全部信息。要求:( 1) 其中,人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加 1。( 2) 程序对所有人员有提升级别的功能(3) 月薪的计算方法是:经理拿固定月薪,兼职技术人员按工 作小时数领取月

2、薪,兼职推销员的报酬按该推销员当月销 售额提成 , 销售经理既拿固定月薪也领取销售提成。( 4) 能按姓名或者编号显示、查找、增加、删除和保存各类人员的信息二、 系统分析与模块设计根据问题描述和要求,系统要求能够按姓名或者编号显示、 查找、增加、删除和保存各类人员的信息。确定程序至少应该具 备如下功能:“查询人员”、“增加人员”、“删除人员”、“数据存 盘”基本模块。系统既然具有“数据存盘”功能人员数据可以保存到磁盘 文件,那么也就意味着今后可以从磁盘文件读出人员数据, 所以 系统增加了“人员数据装入”模块,以方便用户使用、避免数据 重复录入。考虑到系统实现简捷,人员数据文件采用文本文件, 人

3、员数据文件名: Person.txt 。做为一个完整系统, 除了具有增加人员, 删除人员信息模块, 还应该具有修改人员相关信息的功能, 所以本系统设计时考虑增 加“修改人员”模块。考虑到根据编号查找人员信息功能在“删除人员” 、“修改人 员”等模块都使用,所以可以考虑设置为一个模块。考虑到系统要求人员编号在生成人员信息时同时生成,每输 入一个人员信息编号顺序加 1。这样就要求人员编号在增加人员 时自动生成 (增加 1) 且不重复。根据这个要求,可以考虑设置一 个全局量:“当前最大编号” ,每增加一个人员,当前最大编号自 动增 1,然后新增加人员使用这个编号。为了保证系统能记忆这 个编号, 可以

4、使用一个数据文件保存当前这个编号。 系统每次开 始运行前从文件读入这个编号,随着人员增加,编号自动增加, 系统每次运行结束时将这个编号写入文件。本系统将初值 ( 没有 一个用户时 ) 设置为 0。考虑到人员的许多固定信息如: 经理、 销售经理的固定月薪, 销售经理、 销售人员提成, 技术人员小时工资等都是一些不需要 每个人员都要输入的信息, 所以可以将这些信息都保存在一个数 据文件中,本系统为了方便起见,将这些信息与“最大编号”全 部保存在一个文件中,并使用“基础数据设置”模块进行设置和 管理。基础数据文件也采用文本文件,基础数据文件名:Base.txt本系统还提供“查询本月经营信息”帮助计算

5、销售总额,工 资总额,并按照公式计算本月盈亏。综合考虑系统具有下面 8项功能模块: 增加人员,删除人员, 修改人员,查询本月经营信息,基础数据设置,数据存盘,数据 装入。系统使用的数据文件格式如下: Base.txt :( 格式:项目 数据 ) 经理固定月薪 3000 销售经理固定月薪 1000 销售经理提成 1 销售人员提成 2 技术人员小时工资 20 ID 6Person.txt :(格式:编号 , 姓名 , 人员类别 , 其它数据 , 销售员销 售额 ,技术人员工作小时)2 wang 3 1000003 liu 14 wu 4 1005 huang 26 tao 3 150000注:人员

6、类型编号 1经理; 2销售经理; 3销售员; 4技 术人员三、 系统设计1. 系统总体框架使用面向对象的程序设计思想进行分析,整个系统涉及两大 类信息和操作,公司,人员。所以系统主要涉及两个大类:公司 类Company人员类Person。系统的总体框架就是公司类,人员 类的定义; 主函数中定义一个公司对象, 循环显示主菜单并根据 用户选择调用公司类的相应方法 ( 成员函数 )。(1)公司类Company考虑系统操作的人员信息的数量具有不确 定性,所以考虑使用链表保存、处理人员信息。公司类包含:所 有人员信息的一个不带头结点的链表 (作为数据成员) 及可以对 人员信息进行增,删,改,查询经营信息

7、,基础数据设置,数据 存 盘 , 数 据 装 入 等 操 作 的 相 关 模 块 (Add,Delete,Modify,Query,Set,Save,Load) 作为成员函数。人员类Person :所有人员都具有的公共信息及操作可以使用 人员类进行描述。 由于系统具有 4 类人员且 4 类人员数据, 操作 有所不同, 如销售员包含销售额, 而技术人员包含工作小时数且 计算工资的方法不同,所以应当为 4 类人员创建相应的 Person 类的派生类。(3) 为了使公司类可以方便处理人员信息,可以考虑将公司类确 定为人员类的友元类或者人员类提供公共的方法以便公司类进行操作。为了公司类可以用共同方法操

8、作人员类,可以将人员类的方法确定为虚函数。2. 类的层次图Pers on No,Name,Duty,Earning,next,Person(),CalcSalaryMan agerTech ni cia n Man ager(), t,CalcSalary(),Tech ni cia n(),Output。 GetT(),SetT(),CalcSalary(),SalesAmount,Sales(),GetAmou nt(),SetAmou nt(),CalcSalary(),SalesMa nagerAmount,SalesMa nager(),SetAmou nt(),CalcSalary

9、(),Output()Output()Output()其中:(1) Person类的No-人员编号,Name人员姓名,Duty-人员类 别, Earning- 工资, next- 指向下一个人员的指针 ;Person 类的 CalcSalary() , Output() 定义为纯虚函数分别表示要计算人员工 资和输出人员信息 , 由于定义纯虚函数,所以 Person 是抽象类, 具体计算工资,输出人员信息由派生类完成。( 2)各个派生的类, 包含本类对象特有的数据, Sales:Amount- 销售员销售额, SalesManager:Amount- 销售经理的总销售额 (系 统统计各个销售员销

10、售额得到销售经理的总销售额), Technician:t- 技术人员工作小时数。CompanyPerson *Worker,Clear(),Company(),Company(),Add(),Delete(),Modify(), Query(),Set(),Save(),Load()其中:( 1 ) Worker 就是人员链表。( 2) Clear() 用于清除人员链表所有结点。( 3) Add(),Delete(),Modify(),Query(),Set(),Save(),Load() 分别表示系统各个功能模块 : 增加人员,删除人员,修改人员, 查询本月经营信息,基础数据设置,数据存盘,

11、数据装入。3. 系统关键算法流程图(1)主函数流程开始创建公司对象显示菜单 接受输入根据输入执行公司操作 Compa ny:Add()输入数据,创建员工对象结点员工结点加入链表结束 Compa ny:Delete() Compa ny:Modify(5) Compa ny:Query()(6)Compa ny:Save()(7) Compa ny:Load()四、源程序清单参见附录五、系统测试*D:XProgra* FiLsAIicrosoft Visual人员和基础数据己经装入-统系m 二管曽呂KP鱼入話 对人人人本数羹=诣 阳加除改询础据雷 么福修杳墓数数退 W - -六、m平员项要小结

12、在此通过上上掌握类的 求定的到基数实采七、参考文献【1】陈维兴,林小茶.C+面向对象程序设计教程.北京.清华大学出版社2010, 10【2】谭浩强.C语言程序设计.北京:清华大学出版社.2010,附录:/*本程序有关的两个数据文件:base.txt 基础数据文件(必须存在,且按规定格式保存)person.txt 人员信息文件(可选)*/#include <iostream.h>#include <fstream.h>#include <ctype.h>#include <string.h>经理固定月薪 销售经理固定月薪 销售经理提成 销售人员提成

13、 技术人员小时工资 员工标识 ( 要保证唯一 )/ 全局数据,对象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,in

14、t 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,intDuty):Person(ID,Name,Duty)void CalcSalary()Earning=ManagerSalary;void Output()CalcSalary(

15、);cout<<No<<"t"<<Name<<"t 经理 t"<<Earning<<endl;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=SalesMan

16、agerSalary+Amount*SalesManagerPercent/1 00;void Output()CalcSalary();cout<<No<<"t"<<Name<<"t销售经理t"<<Earning<<endl;class Technician:public Person / 技术员类 private: double t;public:Duty,doubleTechnician(char ID,char *Name,int T):Person(ID,Name,Duty

17、)this->t=T;double GetT()return t;void SetT(double T)this->t=T;术员Duty,doublevoid CalcSalary()Earning=WagePerHour*t;void Output()CalcSalary();cout<<No<<"t"<<Name<<"t 技t"<<t<<"t"<<Earning<<endl;class Sales:public Person

18、 / 销售员类private:double Amount;public:Sales(char ID,char *Name,intAmount):Person(ID,Name,Duty)this->Amount=Amount;double GetAmount()return Amount;void SetAmount(double Amount)this->Amount=Amount;void CalcSalary()Earning=SalesPercent/100*Amount;void Output()CalcSalary();cout<<No<<&quo

19、t;t"<<Name<<"t 销 售 员 t"<<Amount<<"t"<<Earning<<endl;class Company / 公司类 private:Person *Worker; / 员工表 void Clear(); /清除内存中数据public:Company()Worker=0;Load();Company()Person *p;p=Worker;while(p)p=p->next;delete Worker;Worker=p;Worker=0;vo

20、id 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; / 新结点指针

21、int Duty;char Name20;double Amount,T;cout<<"n* 新增员工 *n"/ 输入员工信息ID+;cout<<" 输入岗位 (1- 经理 2-销售经理 3-销售员 4-技术员 ):" cin>>Duty;cout<<" 输入姓名 :" cin>>Name;if(Duty=3)cout<<" 本月销售额 :" cin>>Amount;else if(Duty=4)cout<<"

22、 本月工作小时数 (0-168):"cin>>T;/ 创建新员工结点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=W

23、orker;while(p2->next) / 查找尾结点p2=p2->next;p2->next=p; / 连接else / 若不存在结点 ( 表空)Worker=p; / 连接删除人员void Company:Delete() /int No;cout<<"n* 删除员工 *n cout<<"ID:" cin>>No;/ 查找要删除的结点Person *p1,*p2; p1=Worker;while(p1)if(p1->No=No)break;elsep2=p1;p1=p1->next;/ 删除

24、结点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;cout<<"n* 修改员工

25、*n" cout<<"ID:" cin>>No;/ 查找要修改的结点Person *p1,*p2; p1=Worker; while(p1) if(p1->No=No)break;else p2=p1; p1=p1->next;/ 修改结点 if(p1!=NULL)/ 若找到结点p1->Output();4- 技术cout<<" 调整岗位 (1- 经理 2- 销售经理 3- 销售员 员 ):" cin>>Duty;if(p1->Duty!=Duty) / 若岗位发生变动/

26、修改其它数据cout<<" 输入姓名 :" cin>>Name; if(Duty=3)cout<<" 本月销售额 :" cin>>Amount;else if(Duty=4)cout<<" 本月工作小时数 (0-168):" cin>>T;/ 创建新员工结点Person *p3;switch(Duty)case 1:p3=new Manager(p1->No,Name,Duty); break;case2:p3=newSalesManager(p1->

27、No,Name,Duty);break;case3:p3=newSales(p1->No,Name,Duty,Amount);break;case4:p3=newTechnician(p1->No,Name,Duty,T);break;/ 员工结点替换到链表p3->next=p1->next;if(p1=Worker) / 若要替换的结点是第一个结点Worker=p3;else / 若要删除的结点是后续结点p2->next=p3;/ 删除原来的员工结点delete p1;else / 若岗位没有变动cout<<" 输入姓名 :" c

28、in>>p1->Name;if(Duty=3)cout<<" 本 月 销 售 额 :"cin>>Amount; (Sales *)p1)->SetAmount(Amount);else if(Duty=4)cout<<" 本 月 工 作 小 时 数 (0-168):"cin>>T; (Technician *)p1)->SetT(T);cout<<" 修改成功 !n"else / 未找到结点cout<<" 未找到 !n&qu

29、ot;void Company:Query()double sum=0; / 销售额总和Person *p=Worker;while(p)if(p->Duty=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<<" 本月盈利 :

30、"<<sum*0.20-sum2<<endl; cout<<"( 按照 20利润计算 )n"void Company:Set()cout<<"n* 设置基础数据 *n"cout<<" 经理固定月薪 "<<ManagerSalary<<" 元 :" cin>>ManagerSalary;cout<<" 销 售 经 理 固 定 月 薪 "<<SalesManagerSal

31、ary<<" 元:"cin>>SalesManagerSalary;cout<<" 销售经理提成 "<<SalesManagerPercent<<" :" cin>>SalesManagerPercent;cout<<" 销售人员提成 "<<SalesPercent<<" :" cin>>SalesPercent;cout<<" 技 术 人 员 小 时 工

32、 资 "<<WagePerHour<<"( 元 / 小 时):"cin>>WagePerHour;cout<<" 员工标识 >="<<ID<<":"cin>>ID;void Company:Save() / 数据存盘 ( 包括基础数据,人员数据 ), 均采用文本文件ofstream fPerson,fBase;char c;cout<<"n 保 存 人 员 和 基 础 数 据 , 是 否 继 续 ?Y/N:&quo

33、t; cin>>c;if(toupper(c)!='Y')return;/ 保存人员编号、姓名、岗位 fPerson.open("person.txt",ios:out);Person *p=Worker;while(p) fPerson<<p->No<<"t"<<p->Name<<"t"<<p->Duty<<"t" if(p->Duty=3)fPerson<<(Sales*)p)

34、->GetAmount()<<"t"else if(p->Duty=4)fPerson<<(Technician *)p)->GetT()<<"t"fPerson<<endl;p=p->next;fPerson.close();/ 保存基础数据fBase.open("base.txt",ios:out);fBase<<" 经理固定月薪 t"<<ManagerSalary<<endl;fBase<<

35、" 销 售 经 理 固 定 月 薪 t"<<SalesManagerSalary<<endl;fBase<<" 销售经理提成 t"<<SalesManagerPercent<<endl; fBase<<" 销售人员提成 t"<<SalesPercent<<endl;fBase<<" 技术人员小时工资 t"<<WagePerHour<<endl; fBase<<"I

36、Dt"<<ID<<endl;fPerson.close();cout<<"n 保存人员和基础数据已经完成 .n"void Company:Load() / 数据装入 ( 包括基础数据,人员数据 )/ 基础数据装入ifstream fBase;char buf80; /buf用于保存数据文件中的注释字符串fBase.open("base.txt",ios:in);经理固定月薪fBase>>buf>>ManagerSalary; /fBase>>buf>>Sales

37、ManagerSalary; /销售经理固定月薪fBase>>buf>>SalesManagerPercent; /销售经理提成fBase>>buf>>SalesPercent; /销售人员提成fBase>>buf>>WagePerHour; /技术人员小时工资fBase>>buf>>ID; /员工标识fBase.close();/ 清除内存人员数据Clear();/ 人员数据数据装入ifstream fPerson;Person *p=Worker;int No; char Name20; int Duty; double Amount,T;fPerson.open("person.txt",ios:in); / 读一条记录 fPerson>>No>

温馨提示

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

评论

0/150

提交评论