


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计报告公司人员管理系统课程:面向对象课程设计班级:11511学号:20113051102姓名:吴小蛟指导老师:清华教授2012年6月12日一、设计题目(问题)描述和要求1题目:公司人员管理系统2问题描述:某小型公司,主要有四类人员:经理、兼职技术人员、销售经理和兼职推销员。现在,需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。要求:(1)其中,人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。(2)程序对所有人员有提升级别的功能(3)月薪的计算方法是:经理拿固定月薪,兼职技术人员按工作小时数领取月薪,兼职推销员的报酬按该推销员当月销售额提成,销售
2、经理既拿固定月薪也领取销售提成。(4)能按姓名或者编号显示、查找、增加、删除和保存各类人员的信息二、系统分析与模块设计根据问题描述和要求,系统要求能够按姓名或者编号显示、查找、增加、删除和保存各类人员的信息。确定程序至少应该具备如下功能:“查询人员”、“增加人员”、“删除人员”、“数据存盘”基本模块。系统既然具有“数据存盘”功能人员数据可以保存到磁盘文件,那么也就意味着今后可以从磁盘文件读出人员数据,所以系统增加了“人员数据装入”模块,以方便用户使用、避免数据重复录入。考虑到系统实现简捷,人员数据文件采用文本文件,人员数据文件名:Person.txt。做为一个完整系统,除了具有增加人员,删除人
3、员信息模块,还应该具有修改人员相关信息的功能,所以本系统设计时考虑增加“修改人员”模块。考虑到根据编号查找人员信息功能在“删除人员”、“修改人员”等模块都使用,所以可以考虑设置为一个模块。考虑到系统要求人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。这样就要求人员编号在增加人员时自动生成(增加1)且不重复。根据这个要求,可以考虑设置一个全局量:“当前最大编号”,每增加一个人员,当前最大编号自动增1,然后新增加人员使用这个编号。为了保证系统能记忆这个编号,可以使用一个数据文件保存当前这个编号。系统每次开始运行前从文件读入这个编号,随着人员增加,编号自动增加,系统每次运行结束时将
4、这个编号写入文件。本系统将初值(没有一个用户时)设置为0。考虑到人员的许多固定信息如:经理、销售经理的固定月薪,销售经理、销售人员提成,技术人员小时工资等都是一些不需要每个人员都要输入的信息,所以可以将这些信息都保存在一个数据文件中,本系统为了方便起见,将这些信息与“最大编号”全部保存在一个文件中,并使用“基础数据设置”模块进行设置和管理。基础数据文件也采用文本文件,基础数据文件名:Base.txt。本系统还提供“查询本月经营信息”帮助计算销售总额,工资总额,并按照公式计算本月盈亏。综合考虑系统具有下面8项功能模块:增加人员,删除人员,修改人员,查询本月经营信息,基础数据设置,数据存盘,数据装
5、入。系统使用的数据文件格式如下:Base.txt:(格式:项目数据)经理固定月薪3000销售经理固定月薪1000销售经理提成1销售人员提成2技术人员小时工资20ID6Person.txt:(格式:编号,姓名,人员类别,其它数据,销售员销售额,技术人员工作小时)wang31000002 liu1wu41003 huang2tao3150000注:人员类型编号1经理;2销售经理;3销售员;4技术人员三、系统设计1. 系统总体框架使用面向对象的程序设计思想进行分析,整个系统涉及两大类信息和操作,公司,人员。所以系统主要涉及两个大类:公司类Company人员类Person。系统的总体框架就是公司类,人
6、员类的定义;主函数中定义一个公司对象,循环显示主菜单并根据用户选择调用公司类的相应方法(成员函数)。(1)公司类Compan:y考虑系统操作的人员信息的数量具有不确定性,所以考虑使用链表保存、处理人员信息。公司类包含:所有人员信息的一个不带头结点的链表(作为数据成员)及可以对人员信息进行增,删,改,查询经营信息,基础数据设置,数据存盘,数据装入等操作的相关模块(Add,Delete,Modify,Query,Set,Save,Load)作为成员函数。人员类Person:所有人员都具有的公共信息及操作可以使用人员类进行描述。由于系统具有4类人员且4类人员数据,操作有所不同,如销售员包含销售额,而
7、技术人员包含工作小时数且计算工资的方法不同,所以应当为4类人员创建相应的Person类的派生类。(3)为了使公司类可以方便处理人员信息,可以考虑将公司类确定为人员类的友元类或者人员类提供公共的方法以便公司类进行操作。为了公司类可以用共同方法操作人员类,可以将人员类的方法确定为虚函数。2. 类的层次图PersonNo,Name,Duty,Earning,next,Person(),CalcSalary(),Output()ManagerSalesSalesManagerTechnicianManager(),Amount,Amount,t,CalcSalary(),Sales(),GetAmou
8、nt(),SalesManager(),Technician(),Output。SetAmount(),SetAmount(),GetT(),SetT(),CalcSalary(),CalcSalary(),CalcSalary(),Output()Output()Output()其中:(1) Person类的No-人员编号,Name人员姓名,Duty-人员类别,Earning-工资,next-指向下一个人员的指针;Person类的CalcSalary(),Output()定义为纯虚函数分别表示要计算人员工资和输出人员信息,由于定义纯虚函数,所以Person是抽象类,具体计算工资,输出人员信息
9、由派生类完成。(2) 各个派生的类,包含本类对象特有的数据,Sales:Amount-销售员销售额,SalesManager:Amount-销售经理的总销售额(系统统计各个销售员销售额得到销售经理的总销售额),Technician:t-技术人员工作小时数。CompanyPerson*Worker,Clear(),Company(),Company(),Add(),Delete(),Modify(),Query(),Set(),Save(),Load()其中:(1)Worker就是人员链表。分别表示系统各(2)Clear()用于清除人员链表所有结点(3) Add(),Delete(),Modif
10、y(),Query(),Set(),Save(),Load()个功能模块:增加人员,删除人员,修改人员,查询本月经营信息,基础数据设置,数据存盘,数据装入。3. 系统关键算法流程图(1)主函数流程开始接受输入创建公司对象141显示菜单根据输入执行公司操作NNY结束Company:Add()Company:Delete()开始输入员工ID查找要删除结点结点存在?链表删除员工结点提示未找到结束Company:Modify(5)Company:Query()(6)Company:Save()(7)Company:Load()四、源程序清单参见附录五、系统测试CA"D:Procra*File
11、sIicrosoftVisual人员和基础数据已经装入-盼人人人本数真请么醫修查基数数退统系二瑾管自心六、小结通过程序设计,我能够基本掌握C+程序设计的方法,并且在此基础上掌握类的构造方法,明确类中构造函数、成员函数的建立以及调用,此外,并且,结合C+中字符串函数的编译系统给定的库函数,采用一定的逻辑编译,实现题目中要求的各项要求,达到基本实验目的,提高自己的C+语言使用水平。七、参考文献【1】陈维兴,林小茶.C+面向对象程序设计教程北京.清华大学出版社2010,10【2】谭浩强.C语言程序设计.北京:清华大学出版社.2010,5附录:/*本程序有关的两个数据文件:base.txt-基础数据文
12、件(必须存在,且按规定格式保存)person.txt人员信息文件(可选)*/#inelude<iostream.h>#ineludevfstream.h>#inelude<etype.h>#inelude<string.h>II全局数据,对象doubleManagerSalary;II经理固定月薪doubleSalesManagerSalary;/销售经理固定月薪doubleSalesManagerPercent;销售经理提成doubleSalesPereent;II销售人员提成doubleWagePerHour;II技术人员小时工资intID;员工标
13、识(要保证唯一)classPerson/员工类protected:intNo;/编号charName20;/姓名intDuty;/岗位doubleEarning;/收入Person*next;public:Person(charID,char*Name,intDuty)this->Duty=Duty;strcpy(this->Name,Name);this->No=ID;virtualvoidCalcSalary()=0;virtualvoidOutput()=0;friendclassCompany;classManager:publicPerson/经理类public:M
14、anager(charID,char*Name,intDuty):Person(ID,Name,Duty)voidCalcSalary()Earning=ManagerSalary;voidOutput()CalcSalary();cout<<No<<"t"<<Name<<"t经理t"<<Earning<<endl;classSalesManager:publicPerson/销售经理类private:doubleAmount;public:SalesManager(charID,c
15、har*Name,intDuty):Person(ID,Name,Duty)voidSetAmount(doubles)Amount=s;voidCalcSalary()Earning=SalesManagerSalary+Amount*SalesManagerPercent/100;voidOutput()CalcSalary();cout<<No<<"t"<<Name<<"t销售经理t"<<Earning<<endl;classTechnician:publicPerson/技术
16、员类private:doublet;public:Technician(charID,char*Name,intDuty,doubleT):Person(ID,Name,Duty)this->t=T;doubleGetT()returnt;voidSetT(doubleT)this->t=T;voidCalcSalary()Earning=WagePerHour*t;voidOutput()CalcSalary();cout<<No<<"t"<<Name<<"t技术员t"<<t<
17、;<"t"<<Earning<<endl;classSales:publicPerson/销售员类private:doubleAmount;public:Sales(charID,char*Name,intDuty,doubleAmount):Person(ID,Name,Duty)this->Amount=Amount;doubleGetAmount()returnAmount;voidSetAmount(doubleAmount)this->Amount=Amount;voidCalcSalary()Earning=SalesP
18、ercent/100*Amount;voidOutput()CalcSalary();cout<<No<<"t"<<Name<<"t销售员t"<<Amount<<"t"<<Earning<<endl;classCompany/公司类private:Person*Worker;/员工表voidClear();/清除内存中数据public:Company()Worker=0;Load();Company()Person*p;p=Worker;w
19、hile(p)p=p->next;deleteWorker;Worker=p;Worker=0;voidAdd();/增加人员voidDelete();/删除人员voidModify();/修改人员voidQuery();/查询人员voidSet();/基础数据设置voidSave();/数据存盘(包括基础数据,人员数据)voidLoad();/数据装入(包括基础数据,人员数据);voidCompany:Clear()/清除内存中人员数据(内部使用)Person*p=Worker;while(p)Worker=p->next;deletep;p=Worker;voidCompany
20、:Add()Person*p;/新结点指针intDuty;charName20;doubleAmount,T;cout<<"n*新增员工*n"/输入员工信息ID+;cin>>Duty;coutvv"输入岗位(1-经理2-销售经理3-销售员4-技术员):"cout«"输入姓名:"cin>>Name;if(Duty=3)cout«"本月销售额:"cin>>Amount;elseif(Duty=4)coutvv"本月工作小时数(0-168):&
21、quot;cin>>T;/创建新员工结点switch(Duty)case1:p=newManager(ID,Name,Duty);break;case2:p=newSalesManager(ID,Name,Duty);break;case3:p=newSales(ID,Name,Duty,Amount);break;case4:p=newTechnician(ID,Name,Duty,T);break;p->next=0;/员工结点加入链表if(Worker)/若已经存在结点Person*p2;p2=Worker;while(p2->next)/查找尾结点p2=p2-&
22、gt;next;p2->next=p;/连接else/若不存在结点(表空)Worker=p;/连接voidCompany:Delete()/删除人员intNo;cout<<"n*删除员工*n"cout<<"ID:"cin>>No;/查找要删除的结点Person*p1,*p2;p1=Worker;while(p1)if(p1->No=No)break;elsep2=p1;p1=p1->next;/删除结点if(p1!=NULL)/若找到结点,则删除if(p1=Worker)/若要删除的结点是第一个结点W
23、orker=p1->next;deletep1;else/若要删除的结点是后续结点p2->next=p1->next;deletep1;coutvv"找到并删除n"else/未找到结点cout«"未找到!n"voidCompany:Modify()intNo,Duty;charName20;doubleAmount,T;cout<<"n*修改员工*n"cout<<"ID:"cin>>No;/查找要修改的结点Person*p1,*p2;p1=Worker
24、;while(p1)if(p1->No=No)break;elsep2=p1;p1=p1->next;/修改结点if(p1!=NULL)/若找到结点p1->Output();coutvv"调整岗位(1-经理2-销售经理3-销售员4-技术员):";cin>>Duty;if(p1->Duty!=Duty)/若岗位发生变动/修改其它数据cout«"输入姓名:"cin>>Name;if(Duty=3)cout«"本月销售额:"cin>>Amount;elseif(
25、Duty=4)coutvv"本月工作小时数(0-168):"cin>>T;/创建新员工结点Person*p3;switch(Duty)case1:p3=newManager(p1->No,Name,Duty);break;case2:p3=newSalesManager(p1->No,Name,Duty);break;case3:p3=newSales(p1->No,Name,Duty,Amount);break;case4:p3=newTechnician(p1->No,Name,Duty,T);break;/员工结点替换到链表p3-&
26、gt;next=p1->next;if(p1=Worker)/若要替换的结点是第一个结点Worker=p3;else/若要删除的结点是后续结点p2->next=p3;/删除原来的员工结点deletep1;else/若岗位没有变动coutvv"输入姓名:"cin>>p1->Name;if(Duty=3)coutvv"本月销售额:"cin>>Amount;(Sales*)p1)->SetAmount(Amount);elseif(Duty=4)coutvv"本月工作小时数(0-168):"c
27、in»T;(Technician*)p1)->SetT(T);cout«"修改成功!n"else/未找到结点cout«"未找到!n"voidCompany:Query()cout<<"n*查询人员本月销售信息*n"doublesum=0;/销售额总和Person*p=Worker;while(p)if(p->Duty=3)sum+=(Sales*)p)->GetAmount();p=p->next;p=Worker;doublesum2=0;/工资总和while(p)i
28、f(p->Duty=2)(SalesManager*)p)->SetAmount(sum);p->Output();sum2+=p->Earning;p=p->next;cout«"本月盈利:"v<sum*0.20-sum2v<endl;cout<<"(按照20%利润计算)n"voidCompany:Set()cout<<"n*设置基础数据*n"cout«"经理固定月薪"<<ManagerSalaryvv"元
29、:"cin>>ManagerSalary;cout«"销售经理固定月薪"«SalesManagerSalaryvv'元:"cin>>SalesManagerSalary;cout«"销售经理提成"«SalesManagerPercentvv'%:"cin>>SalesManagerPercent;cout«"销售人员提成"«SalesPercent<<"%:"ci
30、n>>SalesPercent;cout«"技术人员小时工资"v<WagePerHourvv"(元/小时):"cin>>WagePerHour;cout«"员工标识>="vv|D<v":"cin>>ID;voidCompany:Save()/数据存盘(包括基础数据,人员数据),均采用文本文件ofstreamfPerson,fBase;charc;cout<<"n保存人员和基础数据,是否继续?Y/N:"cin&g
31、t;>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)->GetAmoun
32、t()<<"t"elseif(p->Duty=4)fPerson<<(Technician*)p)->GetT()<<"t"fPerson<<endl;p=p->next;fPerson.close();/保存基础数据fBase.open("base.txt",ios:out);fBase«"经理固定月薪t"<<ManagerSalaryvvendl;fBase«"销售经理固定月薪t"«S
33、alesManagerSalaryvvendl;fBase«"销售经理提成t"<<SalesManagerPercent<<endl;fBasevv"销售人员提成t"<<SalesPercent<<endl;fBasevv"技术人员小时工资t"v<WagePerHourv<endl;fBasevv"|Dt"vv|Dvvendl;fPerson.close();cout<<"n保存人员和基础数据已经完成.n"void
34、Company:Load()/数据装入(包括基础数据,人员数据)/基础数据装入ifstreamfBase;charbuf80;/buf用于保存数据文件中的注释字符串fBase.open("base.txt",ios:in);fBase>>buf>>ManagerSalary;/经理固定月薪fBase>>buf>>SalesManagerSalary;/销售经理固定月薪fBase>>buf>>SalesManagerPercent;/销/售经理提成/销售人员提成/技术人员小时工资/员工标识/销售人员提成/
35、技术人员小时工资/员工标识fBase>>buf>>SalesPercent;fBase>>buf>>WagePerHour;fBase>>buf>>ID;fBase.close();/清除内存人员数据Clear();/人员数据数据装入ifstreamfPerson;Person*p=Worker;intNo;charName20;intDuty;doubleAmount,T;fPerson.open("person.txt",ios:in);/读一条记录fPerson>>No>>Name>>
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 药物正确使用指导试题及答案
- 药师考试趋势变化试题及答案
- 2025-2030年中国易腐货物海上运输行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030年中国无虐待化妆品行业市场现状供需分析及投资评估规划分析研究报告
- 行政管理法律与规章试题及答案分析
- 2025-2030年中国旅游帐篷睡袋行业市场现状供需分析及投资评估规划分析研究报告
- 源于实践的2025年卫生资格考试试题及答案
- 2025-2030年中国数据中心IT基础设施第三方服务行业市场现状分析及竞争格局与投资发展研究报告
- 深入解析2025执业医师考试试题及答案
- 主管护师实力提升试题及答案
- 生理学基础题库(46道)
- GB/T 17395-2024钢管尺寸、外形、重量及允许偏差
- DB5101-T135-2021城市公园分类分级管理规范
- 小学生中医药文化知识科普传承中医文化弘扬国粹精神课件
- 2024年福建省中考历史试卷(含标准答案及解析)
- 代持存款合同协议书
- 蛋糕店产品与服务方案
- 国开《会计学概论》网核模拟测试答案
- 2023年度健康体检大数据蓝皮书-美年健康+中关村美年健康产业研究院
- ASME材料-设计许用应力
- 数字贸易学 课件 第15章 数字支付与数字货币
评论
0/150
提交评论