C++课程设计报告
题目:学校人事管理系统
班级: 软件1202
姓名:
指导教师: 章永龙
成绩:
2013年12月
一、任务描述
本次任务要求完成一个学校人事管理系统。具体需求为:某高校,主要人员有:在职人员(行政人员、教师、一般员工)、退休人员、返聘人员和临时工。现在,需要存储这些人员的人事档案信息:编号、姓名、性别、年龄、职务、职
称、政治面貌、最高学历、任职时间、来院时间。具体要求如下:
(一)系统以菜单方式工作,要求界面清晰,便于操作。
(二)可以录入每个员工的信息,并以对象数组形式保存信息。
(三)能够查看员工的信息,并以编号为升序方式显示,包括以下四种查看方式:
1.在职员工信息查看;
2.退休员工信息查看;
3.返聘人员信息查看;
4.临时工信息查看。
(四)可以实现员工信息查询功能,包括以下两种查询方式:
1.按员工编号查询;
2.按员工姓名查询。
(五)能根据学院人事的变动情况,添加或删除员工记录。
(六)能根据查询对相应的记录进行修改员工信息,并存储。
(七)能根据多种参数进行人员的统计(在职人数、党员人数、女工人数、高学历高职称人数),并输出统计结果。
二、系统概要设计
(一)模块整体设计图
(二)函数功能介绍
1.员工类(放置员工信息)
(1)无参构造函数CStaff()
功能:为数据成员置初值;
(2)带参构造函数CStaff(int nu,char ty[],char na[],char s[],int a,char j[],char p[],char st[],char e[],int t,char c[])
功能:用参数为数据成员置初值;
(3)设置员工信息函数void setstaff(int nu,char ty[],char na[],char
s[],int a,char j[],char p[],char st[],char e[],int t,char c[])
功能:用参数给数据成员赋值;
(4)赋值运算符重载函数void setstaff(int nu,char ty[],char na[],char s[],int a,char j[],char p[],char st[],char e[],int t,char c[])
功能:重载运算符=,方便对象之间的直接赋值;
(5)显示员工信息函数void showstaff()
功能:显示员工信息;
2.学校类(是员工类的友元类,对员工类进行操作)
(1)无参构造函数School()
功能:为数据成员置初值;
(2)员工信息录入函数void luru()
功能:录入员工信息并存入对象数组中;
(3)统计并显示结果函数void tongji(School &s)
功能:根据多种参数进行人员统计并显示统计结果;
(4)统计人员信息函数void tongji1()
功能:根据多种参数进行人员统计;
(5)增加员工信息函数void add()
功能:根据学院人事的变动情况,添加相应员工记录;
(6)主查询界面函数void search(School &s)
功能:构造查询界面,并调用其他查询界面函数;
(7)按编号查询界面函数void searchmenu1(School &s)
功能:构造编号查询界面,并调用编号查询函数;
(8)按姓名查询界面函数void searchmenu2(School &s)
功能:构造姓名查询界面,并调用姓名查询函数;
(9)删除员工信息函数void del(School &s)
功能:根据学院人事的变动情况,删除相应员工记录;
(10)修改员工信息函数void modify(School &s)
功能:根据查询对相应的记录进行修改,并存储;
(11)排序函数void sort()
功能:对员工按编号进行升序排序;
(12)查看员工信息主界面函数void print(School &s)
功能:构造查看员工信息主界面,并调用其他查看员工信息界面函数;(13)查看在职员工信息主界面函数void print1(School &s)
功能:构造查看在职员工信息主界面,并调用其他查看员工信息函数;(14)查看行政人员信息函数void print2(School &s)
功能:按编号升序显示行政人员信息;
(15)查看教师信息函数void print3(School &s)
功能:按编号升序显示教师信息;
(16)查看一般员工信息函数void print4(School &s)
功能:按编号升序显示一般员工信息;
(17)查看退休人员函数void print5(School &s)
功能:按编号升序显示退休人员信息;
(18)查看返聘人员函数void print6(School &s)
功能:按编号升序显示返聘人员信息;
(19)查看临时工信息函数void print7(School &s)
功能:按编号升序显示临时工信息;
3.其它界面函数
(1)主界面函数int menu
功能:构造系统界面;
(2)员工信息查看界面函数int menu1()
功能:构造员工信息查看界面;
(3)人员统计信息查看界面函数void menu2(int znum,int dnum,int wnum,int gxnum,int gznum,int gnum)
功能:构造人员统计信息查看界面;
(4)在职员工信息查看界面函数int menu3()
功能:构造在职员工信息查看界面;
(5)查询员工信息界面函数int menu4()
功能:构造查询员工信息界面;
4.主函数void main()
功能:创建学校类的对象并调用其成员函数。
三、系统详细设计
(一)数据结构设计
1.本系统创建了一个学校类的对象s,通过调用s的成员函数来完成对员工信息增加、删除、修改、查询和统计的操作
2.本系统采用对象数组保存录入的员工信息,其中对象数组sta[Max]为学校类的数据成员,而sta[Max]本身为员工类的对象数组,为了方便调用sta[Max]的数据成员而不破坏员工类的封装性,故将学校类设为员工类的友元类。
(二)模块接口设计:
1.员工类各成员函数原型
CStaff(); /*无参构造函数*/
CStaff(int nu,char ty[],char na[],char s[],int a,char j[],char p[],char st[],char e[],int t,char c[]); /*带参构造函数*/
void setstaff(int nu,char ty[],char na[],char s[],int a,char j[],char p[],char st[],char e[],int t,char c[]); /*设置员工信息函数*/ CStaff &operator =(CStaff &s); /*赋值运算符重载函数*/
void showstaff(); /*显示员工信息函数*/
2.学校类
School(); /*无参构造函数*/
void luru(); /*员工信息录入函数*/
void tongji(School &s); /*统计并显示结果函数*/
void tongji1(); /*统计人员信息函数*/
void add(); /*增加员工信息函数*/
void search(School &s); /*查找界面函数*/
void searchmenu1(School &s); /*按编号查找界面函数*/
void searchmenu2(School &s); /*按姓名查找界面函数*/
int search1(int x); /*按编号查询函数*/
int search2(char na[]); /*按姓名查询函数*/
void del(School &s); /*删除员工信息函数*/
void modify(School &s); /*修改员工信息函数*/
void sort(); /*排序函数*/
void print(School &s); /*查看员工信息主界面函数*/ void print1(School &s); /*查看在职员工信息主界面函数*/ void print2(School &s); /*查看行政人员信息函数*/
void print3(School &s); /*查看教师信息函数*/
void print4(School &s); /*查看一般员工信息函数*/
void print5(School &s); /*查看退休人员函数*/
void print6(School &s); /*查看返聘人员函数*/
void print7(School &s); /*查看临时工信息函数*/
void tongji(School &s); /*统计并显示结果函数*/
void tongji1(); /*统计人员信息函数*/
int menu () /*主界面函数*/ int menu1(); /*员工信息查看界面*/
void menu2(int znum,int dnum,int wnum,int gxnum,int gznum,int gnum); /*人员统计信息查看界面*/ int menu3(); /*在职员工信息查看界面*/ int menu4(); /*查询员工信息界面*/
4.系统界面切换的实现
利用清屏函数system("cls")实现屏幕切换,在从本界面返回上一界面时,根据提示输入即可,例如:
cout<<"输入任意键返回主菜单"<
则输入输入任意键都能返回上一界面,在main ()函数中用do-while 语句实现各函数的循环调用,以使各功能能够重复实现,直至用户退出系统为止。
(三)盒图: 1.主函数盒图:
x!=8 add() del(s)
modify (s)
search (s)
tongji (s)
print (s)
x=5 x=6 x=7 x=2
x=3
x=4 x=1
lurn() x=menu()
getchar() getchar()
3.查询员工信息界面函数
输入x 输出”请输入您想选择的操作:(1-8)”
输出”8.退出”
输出”7.查看员工信息”
输出”6.统计员工信息” 输出”5.查询员工信息” 输出”4.修改员工信息” 输出”3.删除员工信息” 输出”2.增加员工信息” 输出”1.员工信息录入” 输出” 欢迎进入高校人事管理系统 ”
return x
输出"1.按编号查询" 输入x 输出"请输入您想选择的操作:(1-4)"
输出"4.返回上一菜单"
输出"2.按姓名查询" 输出"查询员工信息" return x
tongji1()
menu2(znum,dnum,wnum,gxnum,gznum,gnum)
8.修改函数盒图
四、系统实现
(一)主界面
(二)录入界面
(三)增加员工信息界面
(四)删除员工信息界面
(五)查询界面
按编号查询界面
(六)统计员工信息界面
(七)查看界面
员工信息查看主界面
在职员工信息查看主界面
行政人员信息查看界面
教师信息查看界面
一般员工信息查看界面
退休员工信息查看界面
返聘人员信息查看界面
临时工信息查看界面
五、系统调试
在调试过程中我遇到的问题以及我的采取措施有:
(一)在调试的过程中,我在写员工类的字符串数据成员用的是指针变量,一刚开始用构造函数初始化时,没有给它们开辟空间,导致我在做其它函数的时候老是出现堆栈溢出等问题,后来我意识到了这个问题,用new给这些字符指针变量动态开辟空间后,将问题解决。
(二)一刚开始,由于我想快点把系统功能做出来,所以做的界面比较丑,在进行后期界面处理时,发现如果直接用cout< (三)在写修改员工信息函数时,开始时我采用的是输入一个员工编号就要修改他的所有信息,后来一个组员说,如果可以选择修改的内容会更人性化一点,在这样做的时候,我忘记要把原有的数据先赋给变量,导致除了要修改的内容,其他就是空指针赋给对象,所以每次运行时总会出错,将原有的数据先赋给变量后才解决这个问题。 六、系统进一步扩充 (一)未能使用文件保存数据,每次打开后,前面的信息就会丢失,给调试也带来很大不便。 (二)界面美化程度还有待提高。 (三)在进入每一个子界面后,只能逐级返回,而不能一下子退出系统。 七、体会 由于上个学期做过C语言的课程设计,所以这次做C++课程设计的时候感觉难度不是很大,只用了一天半的时间就将系统所有功能的代码都编写出来了,剩下的只是后期界面处理工作,可能由于是C++是从C语言发展而来但C++又是面向对象的程序语言,所以在编写程序时由于建立了一个个对象而使得程序思路比较清晰。通过本次课程设计,我进一步理解了C++是面向对象的程序语言,对类和对象的概念也有了更深刻的理解。 本次课程设计由于是小组合作的,在明确的分工与默契的配合下,相对于上个学期的C语言课程设计,个人的工作量大大减少,我们小组三天就完成了整个课程设计,包括程序的编写和报告的完成。通过这次课程设计,我体会到了合作的重要性,我相信我们小组的每个人都会受益于这次课程设计,在以后的工作中我们也能与别人很好的合作,共同完成任务! 附录关键代码 1)赋值运算符重载 CStaff &CStaff::operator =(CStaff &s) {num=s.num; type=new char[M]; name=new char[M]; job=new char[M]; pos=new char[M]; status=new char[M]; edubac=new char[M]; cometime=new char[M]; strcpy(type,s.type); strcpy(name,https://www.wendangku.net/doc/838978919.html,); strcpy(sex,s.sex); age=s.age; strcpy(job,s.job); strcpy(pos,s.pos); strcpy(status,s.status); strcpy(edubac,https://www.wendangku.net/doc/838978919.html,bac); time=s.time; strcpy(cometime,https://www.wendangku.net/doc/838978919.html,etime); return *this; } 2)录入、增加信息 for(i=0;;i++) {cout<<"编号:"; cin>>nu; if(nu==-1) break;//判断编号是否为-1 cout<<"姓名:"; cin>>na; cout<<"性别:"; cin>>s; cout<<"年龄:"; cin>>a; cout<<"职工类型[行政人员,教师,一般员工,退休人员,返聘人员,临时工]:"; cin>>ty; cout<<"职务[无,科级,处级,地级]:"; cin>>j; cout<<"职称[无,初级,中级,高级]:"; cin>>p; cout<<"政治面貌[群众,中共党员,民主党派]:"; cin>>st; cout<<"最高学历[小学,初中,高中,大专,本科,硕士,博士]:"; cin>>e; cout<<"来院时间:"; cin>>c; cout<<"任职时间:"; cin>>t; cout< sta[i].setstaff(nu,ty,na,s,a,j,p,st,e,t,c);//将用户输入信息存入数据库中 n++; }