课程设计报告课程:面向对象程序设计班级: 14计11班姓名:**学号: ********* 教师:***江苏师范大学计算机科学与技术学院课程设计名称:高校人事管理系统1.设计内容:某高校主要人员有:在职人员(行政人员、教师、一般员工)、退休人员、返聘人员和临时工。
现在,需要存储这些人员的人事档案信息:编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间。
1)、添加删除功能:能根据学院人事的变动情况,添加删除记录;2)、查询功能:能根据编号和姓名进行查询;3)、编辑功能:根据查询对相应的记录进行修改,并存储;4)、统计功能:能根据多种参数进行人员的统计(在职人数、党员人数、女工人数、高学历高职称人数);5)、保存功能:能对输入的数据进行相应的存储,要求重载插入和提取符以完成数据的保存和打开。
6)、人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。
2.设计目的与要求:2.1设计目的1、达到熟练掌握C++语言的基本知识和技能;2、基本掌握面向对象程序设计的基本思路和方法;3、能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
2.2设计要求1、要求利用面向对象的方法以及C++的编程思想来完成系统的设计;2、要求在设计的过程中,建立清晰的类层次;3、在系统的设计中,至少要用到面向对象的一种机制。
3.系统分析与设计3.1 关键技术1、文件的使用:主要利用了写文件,读文件将人事信息存入文件中;用追加方法把新增的人事信息存入文件中;用清空文件(ios::trunc),读文件(ios::in),写文件(ios::out||ios::app)对人事信息进行删除和修改等。
2、类的设计:类:class personnelArchiveInfo;数据成员:职工的编号、姓名、性别、年龄、职务、政治面貌、最高学历、任职时间、来校时间。
3、函数的设计:函数desplaymenu(菜单函数)、insert_per(输入人事信息)save_per(将人事信息保存到文件) 、read_per(读文件)、save_add(保存添加的信息)、add_per(添加新的人事信息)、del_per(用编号查找人事信息并删除)、search_No(用编号查询人事信息)、search_name(用姓名查询人事信息)、revise_per(用编号查找人事信息并修改)、save_revise(保存修改后的信息)、sortarray_age(用年龄将人事信息排序)、sum_sex(统计女工人数)。
3.2基本功能要求(1)功能选择可以用菜单来实现例如:1、输入人事信息2、添加新的人事信息3、用编号查找人事信息并删除4、用编号查询人事信息5、用姓名查询人事信息6、用编号查找人事信息并修改7、用年龄将人事信息排序8、计算女工人数 0、退出用户通过输入不同的数字进入不同的菜单,在对其进行相应的操作。
4.系统总体设计(确定程序功能模块)本程序的功能结构如1所示:图1程序功能结构图1、输入人事信息保存信息人事管理系统2、 添 加 新 的 人 事 信 息3、 删 除 人 事 信 息4、 用 编 号 查 询 信 息5、 用 姓 名 查 询 信息6、 修 改 人 事 信 息7、 根 据 年 龄 大小排 序0、 退出 程 序8、 统 计 女 工 人 数5、源程序代码#include<iostream>#include<fstream>#include <string>using namespace std;#define n 3 //要保存在文件中的人事信息数class personnelArchiveInfo //类{public:void desplaymenu(); //菜单函数void insert_per(); //输入人事信息void save_per(); //将人事信息保存到文件void read_per(); //读文件void save_add(); //保存添加的信息void add_per(); //添加新的人事信息void del_per(); //用编号查找人事信息并删除void search_No(); //用编号查询人事信息void search_name(); //用姓名查询人事信息void revise_per(); //用编号查找人事信息并修改void save_revise(); //保存修改后的信息void sortarray_age(); //用年龄将人事信息排序void sum_sex(); //统计女工人数char No[10]; //编号char Name[10]; //姓名char sex[10]; //性别int age; //年龄char job[10]; //职务char politic[10]; //政治面貌char edu_level[10]; //最高学历char period[10]; //任职时间char start_time[10]; //来院时间}p[n],b;//函数的声明void desplaymenu(); //菜单函数void insert_per(); //输入人事信息void save_per(); //将人事信息保存到文件void read_per(); //读文件void save_add(); //保存添加的信息void add_per(); //添加新的人事信息void del_per(); //用编号查找人事信息并删除void search_No(); //用编号查询人事信息void search_name(); //用姓名查询人事信息void revise_per(); //用编号查找人事信息并修改void save_revise(); //保存修改后的信息void sortarray_age(); //用年龄将人事信息排序void sum_sex(); //统计女工人数int main() //主函数{cout<<"*****可以进行的操作菜单*****"<<endl;cout<<"*************************************************"<<endl; desplaymenu();return 0;}void desplaymenu() //菜单函数{int a;cout<<"---1、输入人事信息---"<<endl;cout<<"---2、添加新的人事信息---"<<endl;cout<<"---3、用编号查找人事信息并删除---"<<endl;cout<<"---4、用编号查询人事信息---"<<endl;cout<<"---5、用姓名查询人事信息---"<<endl;cout<<"---6、用编号查找人事信息并修改---"<<endl;cout<<"---7、用年龄将人事信息排序---"<<endl;cout<<"---8、计算女工人数---"<<endl;cout<<"---0、退出---"<<endl;cout<<"-----输入要进行的操作序号(0-8)-----"<<endl;cin>>a;if(a==0)cout<<"停止运行程序!"<<endl;else{switch(a){case 1:cout<<" 输入人事信息"<<endl;insert_per(); //输入人事信息save_per(); //在文件中保存输入的人事信息break;case 2:cout<<" 添加新的人事信息"<<endl;add_per(); //添加新的人事信息save_add(); //在文件中保存新人事信息break;case 3:cout<<" 用编号查找人事信息并删除"<<endl;del_per(); //删除人事信息break;case 4:cout<<" 用编号查询人事信息"<<endl;search_No(); //用编号查找人事信息break;case 5:cout<<" 用姓名查询人事信息"<<endl;search_name(); //用姓名查找人事信息break;case 6:cout<<" 用编号查找人事信息并修改"<<endl;revise_per(); //修改人事信息save_revise(); //保存修改后的人事信息break;case 7:cout<<" 用年龄将人事信息排序"<<endl;sortarray_age(); //以年龄大小排序save_per(); //将以年龄排序后的人事信息保存到文件break;case 8:cout<<" 统计女工人数"<<endl;sum_sex(); //统计女工人数break;default:cout<<" 输入的数字不在范围内"<<endl;cout<<"请重新输入"<<endl;break;}desplaymenu(); //递归函数的调用}}void insert_per() //输入人事信息{for(int i=0;i<n;i++){cout<<"编号: ";cin>>p[i].No;cout<<"姓名: ";cin>>p[i].Name;cout<<"性别: ";cin>>p[i].sex;cout<<"年龄: ";cin>>p[i].age;cout<<"职务: ";cin>>p[i].job;cout<<"政治面貌: ";cin>>p[i].politic;cout<<"最高学历: ";cin>>p[i].edu_level;cout<<"任职时间: ";cin>>p[i].period;cout<<"来院时间: ";cin>>p[i].start_time;}cout<<"保存人事信息于文件"<<endl;}void save_per() //在文件"人事档案.txt'里保存人事信息{ofstream outfile("人事档案.txt",ios::out|ios::app); //建立进行写入的"人事档案.txt"文件if(!outfile) //没有创建成功cerr<<"创建失败"<<endl;else{for(int i=0;i<n;i++){outfile<<p[i].No;outfile<<p[i].Name;outfile<<p[i].sex;outfile<<p[i].age;outfile<<p[i].job;outfile<<p[i].politic;outfile<<p[i].edu_level;outfile<<p[i].period;outfile<<p[i].start_time;}outfile.close();}}void read_per() //读出文件里的人事信息{ifstream infile("人事档案.txt",ios::in);if(!infile)cerr<<"文件读取失败!"<<endl;else{for(int i=0;i<n;i++)infile>>p[i].No>>p[i].Name>>p[i].sex>>p[i].age>>p[i].job>>p[i].politic>>p[i].edu_ level>>p[i].period>>p[i].start_time;infile.close();}void add_per() //添加新的人事信息{cout<<"输入新的人事信息"<<endl;cout<<"编号: ";cin>>b.No;cout<<"姓名: ";cin>>;cout<<"性别: ";cin>>b.sex;cout<<"年龄: ";cin>>b.age;cout<<"职务: ";cin>>b.job;cout<<"政治面貌: ";cin>>b.politic;cout<<"最高学历: ";cin>>_level;cout<<"任职时间: ";cin>>b.period;cout<<"来院时间: ";cin>>b.start_time;cout<<"把新的人事信息保存在文件里"<<endl;}void save_add() //保存新人事信息{ofstream outfile("人事档案.txt",ios::app); //打开文件夹用追加的方式写入新人事信息if(!outfile)cerr<<"打开文件失败"<<endl;else{outfile<<b.No;outfile<<;outfile<<b.sex;outfile<<b.age;outfile<<b.job;outfile<<b.politic;outfile<<_level;outfile<<b.period;outfile<<b.start_time;outfile.close();}void del_per() //删除人事信息{read_per();int j;char c;cout<<"查找你要删除的人事信息"<<endl;char No[10];cout<<"输入你要查找的人事信息的编号"<<endl;cin>>No;for(int i=0;i<n;i++)if(strcmp(No,p[i].No)==0) break;if(i<n){cout<<"编号为"<<No<<"的人事信息"<<endl;cout<<"编号:"<<p[i].No<<endl;cout<<"姓名:"<<p[i].Name<<endl;cout<<"性别:"<<p[i].sex<<endl;cout<<"年龄:"<<p[i].age<<endl;cout<<"职务:"<<p[i].job<<endl;cout<<"政治面貌:"<<p[i].politic<<endl;cout<<"最高学历:"<<p[i].edu_level<<endl;cout<<"任职时间:"<<p[i].period<<endl;cout<<"来院时间:"<<p[i].start_time<<endl;}elsecout<<"查无此人!\n";cout<<"确定要删除该人事信息(Y(是) or N(否)):";cin>>c;if(c=='Y'){for(int i=0;i<n;i++)if(strcmp(No,p[i].No)==0) break;j=i;ofstream outfile("人事档案.txt",ios::trunc); //把文件里的人事信息全部清除if(!outfile)cerr<<"打开失败!"<<endl;else{for(i=0;i<n;i++) //把其他的人事信息重新输入到文件里{if(i==j) continue;outfile<<p[i].No;outfile<<p[i].Name;outfile<<p[i].sex;outfile<<p[i].age;outfile<<p[i].job;outfile<<p[i].politic;outfile<<p[i].edu_level;outfile<<p[i].period;outfile<<p[i].start_time;}outfile.close();}cout<<"你已经成功删除编号为"<<No<<"的人事信息"<<endl; }elsecout<<"你已经放弃删除该信息!"<<endl;}void search_No() //用编号查找人事信息{read_per();char No[10];cout<<"输入你要查找人事信息的编号"<<endl;cin>>No;for(int i=0;i<n;i++)if(strcmp(No,p[i].No)==0) break;if(i<n){cout<<"编号为"<<No<<"的人事信息"<<endl;cout<<"编号:"<<p[i].No<<endl;cout<<"姓名:"<<p[i].Name<<endl;cout<<"性别:"<<p[i].sex<<endl;cout<<"年龄:"<<p[i].age<<endl;cout<<"职务:"<<p[i].job<<endl;cout<<"政治面貌:"<<p[i].politic<<endl;cout<<"最高学历:"<<p[i].edu_level<<endl;cout<<"任职时间:"<<p[i].period<<endl;cout<<"来院时间:"<<p[i].start_time<<endl;}elsecout<<"查无此人!\n";}void search_name() //用姓名查找人事信息{read_per();char name[10];cout<<"输入你要查找人的姓名"<<endl;for(int i=0;i<n;i++)if(strcmp(name,p[i].Name)==0) break;if(i<n){cout<<"姓名为"<<name<<"的人事信息"<<endl;cout<<"编号:"<<p[i].No<<endl;cout<<"姓名:"<<p[i].Name<<endl;cout<<"性别:"<<p[i].sex<<endl;cout<<"年龄:"<<p[i].age<<endl;cout<<"职务:"<<p[i].job<<endl;cout<<"政治面貌:"<<p[i].politic<<endl;cout<<"最高学历:"<<p[i].edu_level<<endl;cout<<"任职时间:"<<p[i].period<<endl;cout<<"来院时间:"<<p[i].start_time<<endl;}elsecout<<"查无此人!\n";}void revise_per() //修改职工信息{read_per();char No[10];cout<<"输入你要修改的人事信息的编号:";cin>>No;for(int i=0;i<n;i++)if(strcmp(No,p[i].No)==0){cout<<"要修改的编号为"<<No<<"的人事信息"<<endl; cout<<"编号:"<<p[i].No<<endl;cout<<"姓名:"<<p[i].Name<<endl;cout<<"性别:"<<p[i].sex<<endl;cout<<"年龄:"<<p[i].age<<endl;cout<<"职务:"<<p[i].job<<endl;cout<<"政治面貌:"<<p[i].politic<<endl;cout<<"最高学历:"<<p[i].edu_level<<endl;cout<<"任职时间:"<<p[i].period<<endl;cout<<"来院时间:"<<p[i].start_time<<endl;cout<<"输入修改后的人事信息"<<endl;cout<<"编号: ";cin>>p[i].No;cout<<"姓名: ";cin>>p[i].Name;cout<<"性别: ";cout<<"年龄: ";cin>>p[i].age;cout<<"职务: ";cin>>p[i].job;cout<<"政治面貌: ";cin>>p[i].politic;cout<<"最高学历: ";cin>>p[i].edu_level;cout<<"任职时间: ";cin>>p[i].period;cout<<"来院时间: ";cin>>p[i].start_time;}cout<<"保存修改后的信息"<<endl;}void save_revise() //保存修改后的人事信息{read_per();ofstream outfile("人事档案.txt",ios::trunc); //把文件里的人事信息全部清除if(!outfile)cerr<<"打开失败"<<endl;else{for(int i=0;i<n;i++){outfile<<p[i].No;outfile<<p[i].Name;outfile<<p[i].sex;outfile<<p[i].age;outfile<<p[i].job;outfile<<p[i].politic;outfile<<p[i].edu_level;outfile<<p[i].period;outfile<<p[i].start_time;}outfile.close();}}void sortarray_age() //用年龄大小对人事信息进行排序{ read_per();for(int i=0;i<n-1;i++)for(int j=i+1;j<n;j++){ if(p[i].age>p[j].age){ b.age=p[i].age;p[i].age=p[j].age;p[j].age=b.age;}}cout<<"将排序后的人事信息保存到文件"<<endl;ofstream outfile("人事档案.txt",ios::trunc); //把文件里的信息全部清除if(!outfile)cerr<<"打开失败!"<<endl;else{ for(int k=0;k<n;k++) //把排序后的人事信息保存到文件{ outfile<<p[k].No;outfile<<p[k].Name;outfile<<p[k].sex;outfile<<p[k].age;outfile<<p[k].job;outfile<<p[k].politic;outfile<<p[k].edu_level;outfile<<p[k].period;outfile<<p[k].start_time;}outfile.close();}}void sum_sex() //统计女工人数{read_per();int sum=0;for(int i=0;i<n;i++)if((char)p[i].sex=='女')sum++;cout<<"女工人数为:"<<sum<<endl;}6、运行结果(1)、菜单界面(2)、输入信息界面图2-2信息输入(3)、添加信息界面图2-3信息添加(4)、删除信息界面图2-4信息删除(5)、用编号查询信息界面图2-5编号查询信息(6)、用姓名查询信息界面图2-6姓名查询信息(7)、修改信息界面图2-7修改信息(8)、根据年龄大小将人事信息排序图2-8信息排序(9)、统计女工人数图2-9统计人数(10)、退出界面图2-10退出程序7、设计体会学习C++主要要是课上认真听老师讲课下总结。