《C++公司人员信息管理系统-课程设计报告.pdf》由会员分享,可在线阅读,更多相关《C++公司人员信息管理系统-课程设计报告.pdf(73页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 第 0 页 目 录 1 系统需求分析 1 2 总体设计 2 3 详细设计及实现 5 4 系统调试 67 5 结论 73 6 心得体会 71 7 参考书目 75 知行合一 行胜于言 第 1 页 1 系统需求分析 1.1 系统设计的目的与意义:现在的公司人员数量及职位种类较多,各样的人事管理活动也比较频繁,因此需要设计一个公司人员信息管理系统来对公司员工信息进行管理。1。2 系统功能需求:本系统有五个类:基类:employee、派生类:manager、technician、salesman、salesmanager,储存经理、技术人员、销售人员、销售经理信息。(1)添加功能 程序能够任意添加上述
2、四类人员的记录,可提供选择界面供用户选择所要添加的人员类别,要求人员的编号要唯一,如果添加了重复编号的记录时,则提示用户数据添加重复并取消添加。(2)查询功能 可根据编号、姓名等信息对已添加的记录进行查询.如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。(3)显示功能 可显示当前系统中所有记录。(4)修改功能 可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。(5)删除功能 对已添加的人员记录进行删除.如果当前系统中没有相应的人员记录,则提示“记录为空!”并返回操作;否则输入要删除的人员的编号或姓名,根据所输入的信息删除该人员记录,如果没有找到该人员信息,则提示相应的
3、记录不存在。(6)统计功能 能根据多种参数进行人员的统计。例如:统计四类人员数量以及总数,统计男、女员工的数量,统计平均工资、最高工资、最低工资等。(7)保存功能 将当前系统中各类人员记录存入文件中。(8)读取功能 将保存在文件中的人员信息读入到当前系统中,以供用户使用。知行合一 行胜于言 第 2 页 2 总体设计 2.1 系统功能分析:系统通过调用函数来实现信息添加、信息查询、信息显示、信息修改、信息删除、以及数据读取保存文件等功能.add()函数用于录入信息;search()函数用来查询信息;show()函数用来显示信息;alter()函数用来修改信息;del()函数用来删除信息;stat
4、()函数用来统计信息 read()函数用于将文件中的数据读取到内存中;save()函数用于将内存中的信息存入文件内;主函数 main()用于调用这些函数。2.2 系统功能模块划分与设计:系统定义了 manger 类、technician 类、salesman 类、salesmanger 类这四个类,定义了 add()、search()、show()、alter()、del()、stat()、read()、save()、input()、output()等函数来实现系统所需功能。2.3 系统功能模块图:公司人员信息管理系经理信息管理 技术人员信息管理 销售人员信息管理 销售经理信息管理 经理信息添
5、加 经理信息查询 经理信息显示 经理信息修改 经理信息删除 经理信息统计 技术人员信息添加 技术人员信息查询 技术人员信息显示 技术人员信息修改 技术人员信息删除 技术人员信息统计 销售人员信息添加 销售人员信息查询 销售人员信息显示 销售人员信息修改 销售人员信息删除 销售人员信息统计 销售经理信息添加 销售经理信息查询 销售经理信息显示 销售经理信息修改 销售经理信息删除 销售经理信息统计 知行合一 行胜于言 第 3 页 2.4 类的设计(1)employee 类(抽象类)的设计 图 3.1 employee类 (2)经理类的设计 图 3。2 经理类 manager void add();
6、void search();void show();void alter();void del();void stat();void save();void read();void input();employee virtual void add()=0;virtual void search()=0;virtual void show()=0;virtual void alter()=0;virtual void del()=0;virtual void stat()=0;virtual void save()=0;virtual void read()=0;virtual void in
7、put()=0;virtual void output()=0;string number;string name;string sex;知行合一 行胜于言 第 4 页(3)技术人员类的设计 图 3。3 技术人员类 (4)销售人员类的设计 图 3.4 销售人员类 salesman void add();void search();void show();void alter();void del();void stat();void save();void read();void input();void output();float sale;float rate;technician vo
8、id add();void search();void show();void alter();void del();void stat();void save();void read();void input();void output();float work_time;float time_salary;知行合一 行胜于言 第 5 页(5)成绩类的设计 图 3.5 销售经理类 (6)各个类的关系描述 3 详细设计及实现 3。1employee 类(抽象类)的实现#includestring using namespace std;class employee public:employe
9、e(void);salesmanager void add();void search();void show();void alter();void del();void stat();void save();void read();void input();void output();float sala;employee manager salesman technician salesmanager 知行合一 行胜于言 第 6 页 employee(void);virtual void add()=0;virtual void search()=0;virtual void show(
10、)=0;virtual void alter()=0;virtual void del()=0;virtual void stat()=0;virtual void save()=0;virtual void read()=0;virtual void input()=0;virtual void output()=0;protected:string number;string name;string sex;string department;string rank;float salary;3。2 经理类的实现 manager.h#include employee.h class man
11、ager:virtual public employee public:manager(void);manager(void);void add();void search();void show();void alter();void del();void stat();void save();知行合一 行胜于言 第 7 页 void read();void input();void output();manager。cpp#include”StdAfx.h”include manager.h includeiostream includefstream include using name
12、space std;const int MAX=100;manager MMAX;int static top1=0;manager:manager(void)manager:manager(void)void manager:input()coutnumber;cout”输入姓名:”endl;cinname;cout输入性别:”sex;coutdepartment;cout”输入级别:endl;cinrank;cout输入固定月薪:salary;void manager:output()cout numbert”name”t”sextdepartment ”trankt”salaryendl
13、;void manager::read()知行合一 行胜于言 第 8 页 top1=0;system(cls”);ifstream inflie(经理。txt,ios::in);if(!inflie)cout”打开失败!Mi.numberMi.nameMi.sexMi.departmentMi.rankMi.salary)i+;top1=i;inflie。close();void manager::save()ofstream outflie(”经理。txt”,ios::out);if(!outflie)cout打开失败!”endl;return;int i;for(i=0;itop1;i+)
14、outflieMi.numbert”Mi.nametMi.sext”Mi。department”t”Mi.ranktMi.salaryendl;cout=MAX)cout人员已满endl;知行合一 行胜于言 第 9 页 return;cout”输入要添加的编号:”n;for(int i=0;itop1;i+)if(n=Mi。number)cout该编号的人员已存在endl;return;manager m;cout请再次输入新添加人员的信息”endl;m。input();couta;if(a=1)Mtop1=m;top1=top1+1;save();else cout放弃添加”endl;ret
15、urn;void manager:search()system(”cls”);read();if(top1=0)cout当前系统没有储存记录!”endl;return;int choice;coutnum;for(int i=0;itop1;i+)if(Mi。number=num)cout编号”t”姓名”t性别”t”部门t”级别t月薪”endl;Mi。output();return;cout查无此人!endl;;break;case 2:cout”请输入要查找的姓名name;for(int i=0;itop1;i+)if(Mi.name=name)cout”编号t姓名t”性别”t”部门”t”级
16、别”t”月薪endl;Mi.output();cout查无此人!endl;;break;case 0:break;default:cout 输入错误!请输入 03 的数字endl;system(pause”);search();break;void manager::show()system(cls”);知行合一 行胜于言 第 11 页 read();if(top1=0)cout无数据!”endl;return;cout编号t”姓名”t”性别”t”部门”t”级别”t月薪endl;for(int i=0;itop1;i+)Mi。output();void manager:alter()syste
17、m(cls);read();if(top1=0)cout”当前系统没有储存记录”endl;return;string num;cout请输入要修改的经理编号:”num;for(int i=0;itop1;i+)if(Mi.number=num)cout”编号t”姓名t性别”t”部门t”级别”t月薪endl;Mi。output();cout请选择修改范围:1、全部修改 2、修改编号 3、修改姓名 4、修改性别”endl;cout”5、修改部门 6、修改级别 7、修改月薪”endl;cout 0、退出修改endl;int choice;cinchoice;switch(choice)case 1:
18、cout”输入修改后的编号:n;for(int j=0;jtop1;j+)if(n=Mj。number)cout该编号的人员已存在”endl;return;cout”输入修改后的姓名:”na;cout输入修改后的性别:s;cout”输入修改后的部门:”d;cout输入修改后的级别:r;coutsa;cout”是否确认修改?1、是 2、否a;if(a=1)Mi.number=n;Mi。name=na;Mi。sex=s;Mi.department=d;Mi.rank=r;Mi。salary=sa;else cout放弃修改endl;return;save();;break;case 2:知行合一
19、行胜于言 第 13 页 cout”请输入修改后的编号”n;for(int i=0;itop1;i+)if(n=Mi。number)cout该编号的人员已存在endl;return;cout”是否确认修改?1、是 2、否”endl;int a;cina;if(a=1)Mi。number=n;else cout”放弃修改endl;return;save();break;case 3:cout请输入修改后的姓名na;Mi。name=na;cout”是否确认修改?1、是 2、否a;if(a=1)Mi.name=na;else cout放弃修改endl;return;save();;break;case
20、 4:cout”请输入修改后的性别s;Mi.sex=s;cout”是否确认修改?1、是 2、否”endl;int a;cina;if(a=1)Mi。sex=s;else cout放弃修改”endl;return;save();break;case 5:cout”请输入修改后的部门d;Mi。department=d;couta;if(a=1)Mi。department=d;else cout”放弃修改endl;return;save();break;case 6:cout请输入修改后级别r;Mi。rank=r;cout”是否确认修改?1、是 2、否”a;if(a=1)Mi。rank=r;else
21、 知行合一 行胜于言 第 15 页 cout”放弃修改endl;return;save();;break;case 7:cout”请输入修改后的月薪sa;Mi.salary=sa;cout”是否确认修改?1、是 2、否”a;if(a=1)Mi。salary=sa;else cout”放弃修改”endl;return;save();;break;case 0:cout退出修改”endl;return;break;default:cout”无此选项!请输入 07 的数字endl;system(”pause”);break;cout”修改完成endl;return;cout”查无此人endl;voi
22、d manager:del()system(cls);read();if(top1=0)cout”当前系统没有储存记录”endl;return;知行合一 行胜于言 第 16 页 int choice;cout”请删除查找方式:1、按编号删除 2、按姓名删除 0、退出”endl;cinchoice;switch(choice)case 1:cout请输入所要删除人员的编号:num;for(int i=0;itop1;i+)if(Mi.number=num)cout”编号”t”姓名t”性别”t”部门”t级别t”月薪endl;Mi。output();coutchoice;switch(choice)
23、case 1:for(int j=i;jtop1;j+)Mj=Mj+1;cout删除成功!endl;top1=top1-1;save();break;case 2:return;default:cout”没有此选项!endl;return;cout无此人!”endl;system(”pause”);del();break;case 2:cout请输入所要删除人员的姓名:endl;string name;cinname;for(int i=0;itop1;i+)if(Mi。name=name)知行合一 行胜于言 第 17 页 cout编号t”姓名”t”性别”t”部门”t”级别”t”月薪endl;
24、Mi.output();cout是否确认删除?1、是 2、否choice;switch(choice)case 1:for(int j=i;jtop1;j+)Mj=Mj+1;cout”删除成功!”endl;top1=top1-1;save();break;case 2:return;default:cout没有此选项!”endl;return;cout无此人!”endl;break;case 0:break;default:cout输入错误!请输入 03 的数字endl;system(pause);del();break;save();void manager:stat()system(cls
25、”);read();int choice;cout1、人数统计 2、性别统计 3、平均工资 4、最高工资 5、最低工资 0、退出endl;cout”请输入所要执行的编号:endl;cinchoice;switch(choice)case 1:cout经理的人数为:top1endl;system(pause);stat();break;case 2:知行合一 行胜于言 第 18 页 int a=0,b=0;string Y=男;string X=”女”;for(int i=0;itop1;i+)if(Mi.sex=Y)a+;if(Mi.sex=X)b+;cout男性人数:”aendl;cout女
26、性人数:”bendl;system(pause”);stat();break;case 3:float ave_salary=0;float all_salary=0;for(int i=0;itop1;i+)all_salary=Mi。salary+all_salary;ave_salary=all_salary/top1;cout平均工资:”ave_salary;;system(”pause);stat();break;case 4:float max_salary=0;for(int i=0;iMi+1.salary)max_salary=Mi。salary;Mi+1.salary=ma
27、x_salary;else max_salary=Mi+1.salary;cout最高工资:”max_salary;system(pause);stat();break;case 5:float min_salary=0;知行合一 行胜于言 第 19 页 for(int i=0;itop1-1;i+)if(Mi。salaryMi+1.salary)min_salary=Mi。salary;Mi+1.salary=min_salary;else min_salary=Mi+1。salary;cout最低工资:min_salary;;system(pause);stat();break;case
28、0:break;default:cout”无此选项!请输入 05 的数字”endl;system(”pause”);stat();break;3。3 技术人员类的实现 technician。h include”employee.h class technician:public employee public:technician(void);technician(void);void add();void search();void show();void alter();void del();void stat();void save();void read();void input();
29、void output();protected:float work_time;float time_salary;;technician.cpp 知行合一 行胜于言 第 20 页 include StdAfx.h#include”technician.h includeiostream#includefstream include includeiomanip using namespace std;const int MAX=100;technician TMAX;int static top2=0;technician:technician(void)technician::techni
30、cian(void)void technician:input()cout”请输入输入编号:number;cout”请输入输入姓名:”name;cout”请输入输入性别:sex;cout请输入输入部门:department;cout”请输入输入级别:”endl;cinrank;cout请输入输入工时:endl;cinwork_time;cout”请输入输入时薪:”time_salary;salary=time_salary*work_time;void technician::output()coutnumber”t”nametsex”t”department”trankt”work_time
31、”t”time_salary”t”salaryendl;void technician::read()top2=0;system(”cls”);知行合一 行胜于言 第 21 页 ifstream inflie(技术人员。txt,ios:in);if(!inflie)cout T i。number T i。name T i。sex T i.department Ti。rankTi。work_timeTi。time_salaryTi。salary)i+;top2=i;inflie.close();void technician:save()ofstream outflie(”技术人员.txt”,i
32、os::out);if(!outflie)cout打开失败!”endl;return;int i;for(i=0;itop2;i+)outflieTi。number”tTi。nametTi.sex”tTi.departmentt”Ti。rank”t”Ti。work_time”tTi。time_salaryt”Ti.salaryendl;cout”保存成功!endl;outflie.close();void technician:add()system(cls);read();if(top2=MAX)cout”人员已满”endl;return;知行合一 行胜于言 第 22 页 cout”输入要添
33、加的编号:”n;for(int i=0;itop2;i+)if(n=Ti.number)cout”该编号的人员已存在”endl;return;technician t;cout”请再次输入新添加人员的信息endl;t.input();couta;if(a=1)Ttop2=t;top2=top2+1;save();else cout放弃添加”endl;return;void technician::search()system(cls);read();if(top2=0)cout”当前系统没有储存记录!”endl;return;int choice;cout”请选择查找方式:1、按编号查找 2、
34、按姓名查找 0、退出choice;switch(choice)case 1:知行合一 行胜于言 第 23 页 cout请输入要查找的编号:num;for(int i=0;itop2;i+)if(Ti.number=num)cout”编号”t”姓名”t性别”t部门”t”级别”t”工时”t”时薪”t”月薪”endl;Ti。output();return;cout”查无此人!”endl;break;case 2:cout”请输入要查找的姓名endl;string name;cinname;for(int i=0;itop2;i+)if(Ti.name=name)cout编号”t”姓名t”性别t”部门
35、”t”级别”t”工时”t时薪”t月薪endl;Ti。output();return;cout”查无此人!endl;break;case 0:break;default:cout ”输 入 错 误!请 输 入 03 的 数 字 endl;system(pause”);search();break;void technician::show()system(”cls);read();if(top2=0)知行合一 行胜于言 第 24 页 cout无数据!”endl;return;cout”编号”t”姓名t”性别t部门”t”级别t”工时t”时薪”t”月薪endl;for(int i=0;itop2;i
36、+)Ti。output();void technician::alter()system(cls”);read();if(top2=0)cout”当前系统没有储存记录endl;return;string num;coutnum;for(int i=0;itop2;i+)if(Ti。number=num)cout编号”t姓名”t”性别”t”部门t”级别”t”工时”t”时薪t月薪”endl;Ti.output();cout请选择修改范围:1、全部修改 2、修改编号 3、修改姓名 4、修改性别endl;cout 5、修改部门 6、修改级别 7、修改工时 8、修改时薪”endl;cout”0、退出修改
37、choice;switch(choice)case 1:cout输入修改后的编号:”n;for(int j=0;jtop2;j+)知行合一 行胜于言 第 25 页 if(n=Tj.number)cout该编号的人员已存在”endl;return;cout输入修改后的姓名:endl;string na;cinna;cout”输入修改后的性别:”s;cout输入修改后的部门:”d;cout输入修改后的级别:r;cout”输入修改后的工时:”wt;coutts;cout是否确认修改?1、是 2、否a;if(a=1)Ti.number=n;Ti.name=na;Ti.sex=s;Ti。departme
38、nt=d;Ti.rank=r;Ti.work_time=wt;Ti。time_salary=ts;Ti.salary=wt*ts;else cout”放弃修改”endl;return;save();知行合一 行胜于言 第 26 页;break;case 2:cout”请输入修改后的编号endl;string n;cinn;for(int i=0;itop2;i+)if(n=Ti.number)cout”该编号的人员已存在”endl;return;cout”是否确认修改?1、是 2、否”a;if(a=1)Ti.number=n;else cout”放弃修改”endl;return;save();
39、break;case 3:coutna;Ti.name=na;couta;if(a=1)Ti。name=na;else cout放弃修改”endl;return;save();break;case 4:知行合一 行胜于言 第 27 页 cout”请输入修改后的性别”s;Ti.sex=s;cout是否确认修改?1、是 2、否”endl;int a;cina;if(a=1)Ti。sex=s;else coutd;Ti。department=d;cout是否确认修改?1、是 2、否a;if(a=1)Ti。department=d;else cout”放弃修改”endl;return;save();;
40、break;case 6:cout请输入修改后级别r;Ti。rank=r;cout”是否确认修改?1、是 2、否a;知行合一 行胜于言 第 28 页 if(a=1)Ti。rank=r;else cout”放弃修改”endl;return;save();break;case 7:cout”请输入修改后的工时wt;Ti。work_time=wt;cout是否确认修改?1、是 2、否”endl;int a;cina;if(a=1)Ti.work_time=wt;Ti。salary=Ti。time_salary*wt;else cout”放弃修改”endl;return;save();;break;c
41、ase 8:cout”请输入修改后的时薪ts;Ti.time_salary=ts;couta;if(a=1)Ti.time_salary=ts;Ti.salary=Ti.work_timets;知行合一 行胜于言 第 29 页 else cout”放弃修改endl;return;save();;break;case 0:cout退出修改endl;return;break;default:cout ”无 此 选 项!请 输 入 0 8 的 数 字 endl;system(”pause);break;cout”修改完成endl;return;cout查无此人endl;void technician
42、::del()system(”cls”);read();if(top2=0)cout”当前系统没有储存记录endl;return;int choice;cout”请删除查找方式:1、按编号删除 2、按姓名删除 0、退出choice;switch(choice)case 1:cout”请输入所要删除人员的编号:num;for(int i=0;itop2;i+)if(Ti。number=num)cout编号t”姓名”t”性别”t”部门t”级别”t”工时”t时薪”t”月薪”choice;switch(choice)case 1:for(int j=i;jtop2;j+)Tj=Tj+1;cout”删除
43、成功!endl;top2=top21;save();break;case 2:return;default:cout没有此选项!endl;return;cout”无此人!”endl;system(pause”);de l();break;case 2:cout请输入所要删除人员的姓名:”name;for(int i=0;itop2;i+)if(Ti。name=name)cout”编号”t姓名t”性别”t”部门”t”级别”t”工时”t”时薪”t”月薪endl;Ti。output();cout”是否确认删除?1、是 2、否choice;switch(choice)case 1:for(int j=
44、i;jtop2;j+)Tj=Tj+1;cout删除成功!”endl;top2=top21;save();break;case 2:break;知行合一 行胜于言 第 31 页 default:cout没有此选项!endl;return;cout”无此人!endl;system(”pause”);del();break;case 0:break;default:cout”输入错误!请输入 03 的数字”endl;system(pause);del();break;save();void technician::stat()system(”cls);read();int choice;cout1、
45、人数统计 2、性别统计 3、平均工资 4、最高工资 5、最低工资 0、退出”endl;cout请输入所要执行的编号:endl;cinchoice;switch(choice)case 1:cout技术人员的人数为:”top2endl;system(”pause);stat();break;case 2:int a=0,b=0;string Y=男;string X=女;for(int i=0;itop2;i+)if(Ti.sex=Y)a+;if(Ti。sex=X)b+;cout男性人数:aendl;cout女性人数:bendl;system(pause”);stat();break;case
46、3:float ave_salary=0;知行合一 行胜于言 第 32 页 float all_salary=0;for(int i=0;itop2;i+)all_salary=Ti。salary+all_salary;ave_salary=all_salary/top2;cout平均工资:”ave_salary;;system(”pause);stat();break;case 4:float max_salary=0;for(int i=0;itop21;i+)if(Ti.salaryTi+1。salary)max_salary=Ti。salary;Ti+1.salary=max_sala
47、ry;else max_salary=Ti+1。salary;cout”最高工资:”max_salary;;system(”pause);stat();break;case 5:float min_salary=0;for(int i=0;itop2-1;i+)if(Ti。salaryTi+1。salary)min_salary=Ti。salary;Ti+1.salary=min_salary;else min_salary=Ti+1。salary;cout”最低工资:”min_salary;system(pause);stat();break;case 0:break;default:cou
48、t”无此选项!请输入 05 的数字endl;system(pause);stat();break;知行合一 行胜于言 第 33 页 3。4 销售人员类的实现 salesman。h#include employee。h”class salesman:virtual public employee public:salesman(void);salesman(void);void add();void search();void show();void alter();void del();void stat();void save();void read();void input();void
49、output();protected:float sale;float rate;salesman。cpp#include”StdAfx。h#include salesman.h include#includeiomanip using namespace std;const int MAX=100;salesman SMAX;int static top3=0;salesman:salesman(void)salesman::salesman(void)知行合一 行胜于言 第 34 页 void salesman:input()cout输入编号:”endl;cinnumber;cout输入姓
50、名:”name;cout输入性别:”sex;cout”输入部门:”endl;cindepartment;cout”输入级别:”endl;cinrank;coutsale;cout请以小数形式输入提成率:rate;salary=salerate;void salesman::output()coutnumbert”name”t”sextdepartment”trankt”sale ”rate”salaryendl;void salesman:read()top3=0;system(cls”);ifstream inflie(销售人员.txt”,ios::in);if(!inflie)cout打开