


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一、设计题目(问题)描述和要求1 题目:人事管理系统2 问题描述: 某小型公司,主要有四类人员:经理、兼职技术人员、销售经理和兼职推销 员。现在,需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并 显示全部信息。要求:( 1) 其中,人员编号在生成人员信息时同时生成, 每输入一个人员信息编号顺 序加 1。( 2) 程序对所有人员有提升级别的功能( 3) 月薪的计算方法是: 经理拿固定月薪, 兼职技术人员按工作小时数领取月 薪,兼职推销员的报酬按该推销员当月销售额提成 , 销售经理既拿固定月 薪也领取销售提成。( 4) 能按姓名或者编号显示、查找、增加、删除和保存各类人员的信息二、系统
2、分析与模块设计 根据问题描述和要求,系统要求能够按姓名或者编号显示、查找、增加、删 除和保存各类人员的信息。确定程序至少应该具备如下功能: “查询人员”、“增 加人员”、“删除人员”、“数据存盘”基本模块。系统既然具有“数据存盘”功能人员数据可以保存到磁盘文件,那么也就 意味着今后可以从磁盘文件读出人员数据, 所以系统增加了 “人员数据装入” 模 块,以方便用户使用、避免数据重复录入。考虑到系统实现简捷,人员数据文件 采用文本文件,人员数据文件名: Person.txt 。做为一个完整系统,除了具有增加人员,删除人员信息模块,还应该具有修 改人员相关信息的功能,所以本系统设计时考虑增加“修改人
3、员”模块。考虑到根据编号查找人员信息功能在“删除人员” 、“修改人员”等模块都使 用,所以可以考虑设置为一个模块。考虑到系统要求人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加 1。这样就要求人员编号在增加人员时自动生成 ( 增加 1)且不重复。 根据这个要求,可以考虑设置一个全局量: “当前最大编号”,每增加一个人员, 当前最大编号自动增 1,然后新增加人员使用这个编号。为了保证系统能记忆这 个编号,可以使用一个数据文件保存当前这个编号。 系统每次开始运行前从文件 读入这个编号, 随着人员增加, 编号自动增加, 系统每次运行结束时将这个编号 写入文件。本系统将初值 ( 没有一个
4、用户时 )设置为 0。考虑到人员的许多固定信息如:经理、销售经理的固定月薪,销售经理、销 售人员提成, 技术人员小时工资等都是一些不需要每个人员都要输入的信息, 所 以可以将这些信息都保存在一个数据文件中, 本系统为了方便起见, 将这些信息 与“最大编号”全部保存在一个文件中,并使用“基础数据设置”模块进行设置 和管理。基础数据文件也采用文本文件,基础数据文件名: Base.txt 。本系统还提供“查询本月经营信息”帮助计算销售总额,工资总额,并按照 公式计算本月盈亏。综合考虑系统具有下面 8 项功能模块:增加人员,删除人员,修改人员,查 询本月经营信息,基础数据设置,数据存盘,数据装入。系统
5、使用的数据文件格式如下:Base.txt: (格式:项目 数据 ) 经理固定月薪 3000 销售经理固定月薪 1000 销售经理提成 1 销售人员提成 2 技术人员小时工资 20ID 6Person.txt:(格式:编号,姓名,人员类别,其它数据,销售员销售额,技术人员工作小时)2 wang 31000003 liu 14 wu 4 1005 huang 26 tao 3150000注:人员类型编号 1经理; 2销售经理; 3销售员; 4技术人员三、系统设计1. 系统总体框架使用面向对象的程序设计思想进行分析,整个系统涉及两大类信息和操作,公司,人员。所以系统主要涉及两个大类:公司类 Comp
6、any人员类Person。系统的总体框架就是公司类,人员类的定义;主函数中定义一个公司对象,循环显 示主菜单并根据用户选择调用公司类的相应方法 (成员函数)。公司类Company考虑系统操作的人员信息的数量具有不确定性,所以考虑 使用链表保存、处理人员信息。公司类包含:所有人员信息的一个不带头结点的 链表(作为数据成员)及可以对人员信息进行增,删,改,查询经营信息,基础 数据设置,数据存盘,数据装入等操作的相关模块 (Add,Delete,Modify,Query,Set,Save,Load)作为成员函数。人员类Person :所有人员都具有的公共信息及操作可以使用人员类进行描 述。由于系统具
7、有4类人员且4类人员数据,操作有所不同,如销售员包含销售 额,而技术人员包含工作小时数且计算工资的方法不同,所以应当为4类人员创建相应的Person类的派生类。(3)为了使公司类可以方便处理人员信息,可以考虑将公司类确定为人员类的友 元类或者人员类提供公共的方法以便公司类进行操作。为了公司类可以用共同方法操作人员类,可以将人员类的方法确定为虚函数。2. 类的层次图Person No,Name,Duty,Earni ng, next,Perso n( ),CalcSalary(),Output() Ma nager(), Amou nt,Amou nt, t,CalcSalary(), Sale
8、s(),GetAmou nt(), SalesMa nager(),Tech nicia n(),Output()SetAmou nt(),SetAmou nt(),GetT(),SetT(),CalcSalary(), CalcSalary(), CalcSalary(),Output() Output() Output()Tech ni cia n其中:(1) Person类的No-人员编号,Name人员姓名,Duty-人员类别,Earning-工 资,next-指向下一个人员的指针;Person类的CalcSalary() ,Output()定义为 纯虚函数分别表示要计算人员工资和输出人
9、员信息,由于定义纯虚函数,所以Person是抽象类,具体计算工资,输出人员信息由派生类完成。(2) 各个派生的类,包含本类对象特有的数据,Sales:Amount-销售员销售额,SalesManager:Amount-销售经理的总销售额(系统统计各个销售员销售额得到 销售经理的总销售额),Technician:t-技术人员工作小时数。Compa nyPerson *Worker,Clear(),Compa ny(),Compa ny(),Add(),Delete(),Modify(),Query(),Set(),Save(),Load()其中:(1) Worker就是人员链表。(2) Clea
10、r()用于清除人员链表所有结点。(3) Add(),Delete(),Modify(),Query(),Set(),Save(),Load()分别表示系统各个功能模块:增加人员,删除人员,修改人员,查询本月经营信息,基础数据设置,数据存盘,数据装入。3. 系统关键算法流程图(1)主函数流程开始创建公司对象显示菜单 接受输入根据输入执行公司操作 Compa ny:Add() Compa ny:Delete()开始I输入员工ID查找要删除结点匚、.结点存在?二q F片链表删除员工结点提示未找到1结束 Compa ny:Modify(5) Compa ny:Query()遍历统计销售额遍历统计工资总
11、额计算盈亏打印本月经营信息结束(6)Compa ny:Save()(7) Compa ny:Load()四、源程序清单参见附录五、系统测试(列出各功能具体的输入数据及对应的输出结果,说明其是否符合设计要 求)六、小结(设计过程心得体会)附录:/*本程序有关的两个数据文件:base.txt-基础数据文件(必须存在,且按规定格式保存)person .txt人员信息文件(可选)*/ #include <iostream.h>#include <fstream.h>#include <ctype.h>#include <string.h> /全局数据,对
12、象double ManagerSalary;/经理固定月薪double SalesManagerSalary; /销售经理固定月薪double SalesManagerPercent; 销/ 售经理提成 double SalesPercent;/销售人员提成 class Person /员工类double WagePerHour;int ID;/技术人员小时工资/员工标识(要保证唯一 )protected:int No; /编号char Name20; /姓名int Duty;/岗位double Earning; /收入Person *next;public:Person(char ID,ch
13、ar *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(
14、)CalcSalary(); 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()Ear
15、ning=SalesManagerSalary+Amount*SalesManagerPercent/100;void Output()CalcSalary(); cout<<No<<"t"<<Name<<"t 销售经理 t"<<Earning<<endl;class Technician:public Person /技术员类private:double t;public:Technician(char ID,char *Name,int Duty,double T):Person
16、(ID,Name,Duty) this->t=T;double GetT()return t;void SetT(double T)this->t=T;void CalcSalary()Earning=WagePerHour*t;void Output() CalcSalary(); cout<<No<<"t"<<Name<<"t 技术员 t"<<t<<"t"<<Earning<<endl;class Sales:public
17、Person / 销售员类private:double Amount;public:Sales(char ID,char *Name,int Duty,double Amount):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(); cou
18、t<<No<<"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;
19、 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()Per
20、son *p; /新结点指针int Duty;char Name20;double Amount,T;cout<<"n* 新增员工 *n"/输入员工信息ID+;cin>>Duty;coutvv"输入岗位(1-经理2-销售经理3-销售员4-技术员):" cout«"输入姓名:"cin>>Name;if(Duty=3)cout«"本月销售额:"cin>>Amount;else if(Duty=4)coutvv"本月工作小时数(0-168):&
21、quot;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=Worker;while(p2->next
22、) /查找尾结点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;else p2=p1; p1=p1->next;/删除结点 if(p1!=NULL)/
23、若找到结点,则删除 if(p1=Worker) /若要删除的结点是第一个结点 Worker=p1->next; delete p1;else / 若要删除的结点是后续结点 p2->next=p1->next; delete p1; coutvv"找到并删除n"else /未找到结点 cout«"未找到!n"void Company:Modify()int No,Duty;char Name20;double Amount,T;cout<<"n* 修改员工 *n" cout<<&quo
24、t;ID:" cin>>No;/查找要修改的结点Person *p1,*p2; p1=Worker; while(p1)if(p1->No=No)break;elsep2=p1; p1=p1->next;/修改结点 if(p1!=NULL)/ 若找到结点 cin>>Duty;p1->Output();coutvv"调整岗位(1-经理2-销售经理3-销售员4-技术员):" if(p1->Duty!=Duty)/若岗位发生变动 /修改其它数据cout«"输入姓名:"cin>>Na
25、me; if(Duty=3)cout«"本月销售额:"cin>>Amount;else if(Duty=4)coutvv"本月工作小时数(0-168):" cin>>T;/创建新员工结点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,A
26、mount); 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 / 若岗位没有变动coutvv"输入姓名:";cin>>p1->Name;if(Duty=3)cout«"本月销售额:"cin
27、187;Amount; (Sales *)p1)->SetAmount(Amount);else if(Duty=4)cout«"本月工作小时数(0-168):"cin»T; (Technician *)p1)->SetT(T);cout«"修改成功!n"else /未找到结点cout«"未找到!n"void Company:Query()cout<<"n* 查询人员本月销售信息 *n"double sum=0; /销售额总和Person *p=Wor
28、ker;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«"本月盈利:"v<sum*0.20-sum2v<endl;coutvv"(按照20%利润计算)n"
29、;void Company:Set()cout<<"n* 设置基础数据 *n"cout«"经理固定月薪"<<ManagerSalaryvv"元:" cin>>ManagerSalary;cout«"销售经理固定月薪"«SalesManagerSalaryvv'元:" cin>>SalesManagerSalary;coutvv"销售经理提成"vvSalesManagerPercent<<%
30、 :" cin>>SalesManagerPercent;coutvv"销售人员提成"vvSalesPercent<<"%:" cin>>SalesPercent;coutvv"技术人员小时工资"v<WagePerHourvv"(元/小时):" cin>>WagePerHour;coutvv"员工标识>="vv|Dvv":"cin>>ID;void Company:Save() /数据存盘 (包
31、括基础数据,人员数据 ),均采用文本文件ofstream fPerson,fBase;char c;coutvv"n 保存人员和基础数据 ,是否继续 ?Y/N:"cin>>c;if(toupper(c)!='Y')return;/保存人员编号、姓名、岗位fPerson.open("person.txt",ios:out);Person *p=Worker;while(p)fPersonvvp->Novv"t"vvp->Namevv"t"vvp->Dutyvv"
32、t"if(p->Duty=3) fPerson<<(Sales*)p)->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"v
33、<ManagerSalaryvvendl;fBase«"销售经理固定月薪 t"<<SalesManagerSalaryvvendl; fBase«"销售经理提成 t"<<SalesManagerPercent<<endl; fBasevv"销售人员提成 t"<<SalesPercent<<endl;fBasevv"技术人员小时工资 t"v<WagePerHourv<endl; fBasevv"IDt"
34、;vvIDvvendl;fPerson.close();coutvv"n 保存人员和基础数据已经完成 .n" void Company:Load() /数据装入 (包括基础数据,人员数据 ) /基础数据装入ifstream fBase;char buf80; /buf 用于保存数据文件中的注释字符串fBase.open("base.txt",ios:in);fBase>>buf>>ManagerSalary;/经理固定月薪fBase>>buf>>SalesManagerSalary; /销售经理固定月薪 f
35、Base>>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>>Name>>Duty; if(Duty=3)fPerson>>Amount;else if(Du
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025重庆市奉节县事业单位面向服务期满且考核合格“三支一扶”人员招聘工作人员26人笔试模拟试题及答案解析
- 2026中国邮政储蓄银行望江县支行校园招聘笔试备考试题及答案解析
- 2025河南郑州惠济区卫生健康系统卫生专业人才引进及特岗全科医生、特招医学院校毕业生引进41人笔试模拟试题及答案解析
- 2026华能(苏州工业园区)发电有限责任公司应届高校毕业生招聘(江苏)笔试模拟试题及答案解析
- 2025年高级经济师考试(高级经济实务运输经济)综合试题及答案
- 2025年及未来5年中国工业汽轮机行业市场深度研究及投资规划建议报告
- 2025河南洛阳洛龙区下半年公益性岗位招聘42人笔试备考试题及答案解析
- 2025山东大学澳国立联合理学院非事业编制岗位招聘2人笔试备考试题及答案解析
- 2025广西防城港市外事办公室公开招聘编外聘用人员1人笔试备考试题及答案解析
- 2025年及未来5年中国节能灯制品行业市场调研及未来发展趋势预测报告
- (2025秋新版)外研版八年级英语上册全册教案
- GB/T 45870.1-2025弹簧测量和试验参数第1部分:冷成形圆柱螺旋压缩弹簧
- 数据备份课件
- 银行集团管理办法
- 人行国内证管理办法
- 电厂钢结构安装方案(3篇)
- 部编版六年级下册语文小升初《词语积累与运用》专项检测卷 含答案
- 残运会应急预案管理办法
- T/SFABA 2-2016食品安全团体标准食品配料焙烤食品预拌粉
- 村集体合作入股协议书
- A-Level化学(A2)2024-2025年有机合成与分析化学深度学习试题
评论
0/150
提交评论