高等院校人员管理系统_第1页
高等院校人员管理系统_第2页
高等院校人员管理系统_第3页
高等院校人员管理系统_第4页
高等院校人员管理系统_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、中国农业大学面向对象程序设计课程设计报告(2015/2016学年 第二学期)高等院校人员管理系统专 业 计算机 学 生 姓 名 张三 班 级 学 号 0000000000 指 导 教 师 康 丽 指 导 单 位 计算机工程系 日 期 2016年 6月 1系统设计内容和要求本系统要完成一个高等院校的人员信息管理系统,能够实现学校中各类人员的信息录入、查询、修改、删除、统计、保存、显示等操作。假设高校中有三类人员:授课教师、行政人员、行政人员兼职教师(既上课又完成行政人员的工作)。2需求分析系统具体实现的功能如下:1) 从文件中加载员工信息:系统可以实现把存储在文件person.txt中的学校人员

2、基本信息加载到系统中,可以避免数据的重复录入。2) 增加学校员工信息:系统可以实现键盘录入新员工信息,员工信息包括员工编号、类型、姓名、性别、年龄、政治面貌、学历、工资等。如果目前学校无员工,则直接录入员工信息;如果有员工,则自动生成新员工的编号(增加1)。学校人员分为授课教师、行政人员、行政人员兼职教师三类,各类员工的工资计算方法如下:授课教师工资=基本工资+课时费(30*学时数)行政人员工资=基本工资+行政补贴行政人员兼职教师工资=基本工资+行政补贴+课时费(20*学时数)3)查询学校员工信息:系统可以实现按“编号”或“姓名”查询员工,并输出相关信息。 4)修改学校员工信息:系统可以实现对

3、录入的员工信息重新进行编辑、修改,分别修改员工的姓名、性别、年龄、政治面貌、学历和工资信息。5)删除学校员工信息:系统可以实现当员工离开学校时删除相关信息。6)统计学校员工信息:系统可以统计学校中的党员人数和女员工人数。7)学校员工信息存盘:系统可以实现把员工基本信息存储到磁盘文件person.txt中,方便用户以后读取数据,避免重复录入。8)显示所有员工信息:系统可以输出学校所有员工的信息,包括员工编号、姓名、性别、年龄、政治面貌、学历、工资、人员类型等。9)系统界面采用文本菜单方式,交互性好,系统界面如图1所示:图1 高等院校人员管理系统界面图 3概要设计系统数据存盘文件person.tx

4、t的格式如下:编号 姓名 性别 年龄 政治面貌 学历 工资 员工类型1000张莉女 32党员 博士7500 11001白飞女 28群众 硕士2500 21002孟丹男 40党员 博士10500 3其中员工类型为1表示授课教师,2表示行政人员,3表示行政人员兼职教师(1) 类定义 系统使用类来组织管理数据,共包括五个类,分别是学校类school、员工类person、任课教师类teacher、行政人员类staff、行政人员兼职教师类staffteacher。员工类person用来描述学校内各类人员具有的公共属性及操作,由于学校里授课教师、行政人员、行政人员兼职教师这三类人员工资的计算方法不同,表现

5、出多态性,因此以person类为基类,分别派生出授课教师类teacher、行政人员类staff,再以teacher类和staff类为基类,派生出行政人员兼职教师类staffteacher。由于学校里人员总数允许变动、不确定,因此学校类school采用链表保存所有人员信息,并用共同的方法操作所有人员,类school与类person之间是类的聚合关系,上述类关系用UML标识如图2所示:学校类school员工类person授课教师类teacher行政人员类staff行政人员兼职教师类staffteacher图2 高等院校人员管理系统类关系的UML图l 员工类person。类属性包括编号(no)、姓名

6、(name)、性别(sex)、年龄(age)、政治面貌(party)、学历(study)、工资(pay)、员工类型(type)、指向下一个员工的指针(mynext),实现对员工类的描述。成员函数包括提取员工编号(getnum)、提取姓名(getname)、提取性别(getsex)、提取年龄(getage)、设置年龄(getagee)、提取政治面貌(getparty)、提取学历(getstudy)、提取员工类型(gettype)、提取工资(getpay)、设置工资(getpayy)、提取指向下一个员工指针(getnext)、设置指向下一个员工指针(setnext)、输出员工信息(output)等

7、。 l 授课教师类teacher。类属性包括职称(teachpos)、每小时课时费(coursefee)、课时数(coursenum) 。成员函数包括提取工资(getpay)。l 行政人员类staff。类属性包括职务级别(pos)、行政补贴(stafffee)。成员函数包括提取工资(getpay)。l 行政人员兼职教师类staffteacher。成员函数包括提取工资(getpay)。l 学校类school。类属性包括指向学校中第一位员工的指针(myfirst)。成员函数包括从文件中加载员工信息(load)、增加员工信息(add、input、insert)、按编号查询员工信息(findnum)、

8、 按姓名查询员工信息(findname)、修改员工信息(modify)、删除员工信息(deleteperson)、统计员工信息(count)、员工信息存盘(save)、显示学校所有员工信息(showall)等 。在基于UML的可视化建模工具Rational Rose中高等院校人员管理系统各类关系的UML图形标识如图3所示:图3 Rational Rose中系统类关系的UML图(2)系统主要功能模块流程图 加载员工信息增加员工信息查询员工信息修改员工信息删除员工信息统计员工信息员工信息存盘信息显示员工信息退出系统创建学校对象显示系统操作菜单根据输入执行不同操作开始图4 主函数main的流程图1)

9、主函数main的流程图(见图4) 2)从文件中加载员工信息school:load流程图(见图5) 3)增加员工信息 school:add、school:input、school:insert流程图(见图6)4)按编号或姓名查询员工信息school:findnum、school:findname流程图(见图7)5)修改员工信息school:modify流程图(见图8)6)删除员工信息school:deleteperson流程图(见图9) 7)统计员工信息school:count流程图(见图10)8)员工信息存盘school:save流程图(见图11)NYYN开始输入待修改员工的编号遍历学校员工链

10、表学校是否有员工输出无此员工有待修改员工吗修改此员工信息(姓名、性别、年龄、政治面貌、学历、工资)图8 修改员工信息流程图NY结束开始员工编号自动加1学校目前是否有员工?(add)根据员工的类型调用相应派生类的成员函数getpay计算员工工资学校员工链表中加入新创建员工结点(insert)键盘输入新员工编号键盘输入新员工基本信息(类型、姓名、性别、年龄、政治面貌、学历)(input)图6 增加员工信息流程图NYYN结束开始打开学校员工数据文件person.txt读取一条员工记录文件读取失败或文件结束文件未读到尾学校员工链表中加入新结点关闭文件图5 从文件中加载员工信息流程图NYYN开始输入待查

11、员工的编号和姓名遍历学校员工链表学校是否有员工输出无此员工是否有待查员工输出此员工信息output图7 按编号或姓名查询员工信息流程图12开始统计计数器初始化amount=0遍历学校员工链表统计员工党员人数输入统计的选项输出学校中党员人数amount遍历学校员工链表统计女员工人数输出学校中女员工人数amount图10 统计员工信息流程图NYYN开始输入待删除员工的编号遍历学校员工链表学校是否有员工输出无此员工有待删除员工吗删除链表中此员工结点并修改学校员工链表图9 删除员工信息流程图 结束开始打开学校员工数据文件person.txt遍历学校员工链表,将人员结点信息写入到文件person.txt

12、中关闭文件图11员工信息存盘流程图 (3)详细设计 整个程序包含5个文件:school.h、school.cpp是学校类的类定义文件和类实现文件;person.h、person.cpp是员工类及其派生类的类定义文件和类实现文件;main.cpp是主函数文件。1)员工类person的定义(person.h)#include<iostream>#include<string>#include<fstream> /包含文件流对象文件#include<iomanip>using namespace std;class person /员工类的定义 pro

13、tected: int no; /编号 char name20; /姓名 char sex10; /性别 int age; /年龄 char party20; /政治面貌 char study30; /学历 float pay; /工资 int type; /员工类型,1:授课教师 2:行政人员 3:表示行政人员兼职教师 person *mynext; /指向下一个员工的指针 public: person(); /员工类无参构造函数的定义person(int pnum,char pname,char psex,int page,char pparty,char pstudy,float ppa

14、y,int ntype);/员工类有参构造函数的定义person(int pnum,char pname,char psex,int page,char pparty,char pstudy,float ppay,int ntype,person *next); /员工类有参构造函数的定义 int getnum(); /提取员工编号函数的定义 char *getname() ; /提取员工姓名函数的定义 char *getsex() ; /提取员工性别函数的定义 int getage() ; /提取员工年龄函数的定义 void getagee(int as); /设置员工年龄函数的定义 cha

15、r *getparty() ; /提取员工政治面貌函数的定义 char *getstudy(); /提取员工学历函数的定义 virtual float getpay(); /计算员工工资函数的定义 void getpayy(float temp); /设置员工工资函数的定义int gettype(); /提取员工类型函数的定义 person *getnext(); /提取指向下一个员工指针函数的定义void setnext(person *next); /设置指向下一个员工指针函数的定义 void output(); /输出员工信息函数的定义; 2) 员工类person的实现(person.c

16、pp)#include"person.h"person:person() /员工类无参构造函数 no=0; strcpy(name,""); strcpy(sex,""); age=0; strcpy(party,""); strcpy(study,""); pay=0.0; type=0; mynext=NULL; person:person(int pnum,char pname,char psex,int page,char pparty,char pstudy,float ppay,in

17、t ptype) /员工类有参构造函数 no=pnum; strcpy(name,pname); strcpy(sex,psex); age=page; strcpy(party,pparty); strcpy(study,pstudy); pay=ppay; type=ptype; mynext=NULL; person:person(int pnum,char pname,char psex,int page,char pparty,char pstudy,float ppay,int ptype,person *next) /员工类有参构造函数 no=pnum; strcpy(name,

18、pname); strcpy(sex,psex); age=page; strcpy(party,pparty); strcpy(study,pstudy); pay=ppay; type=ptype; mynext=next; int person:getnum() return no; char * person:getname() return name; char * person:getsex() return sex; char * person:getparty() return party; char * person:getstudy() return study; int

19、person:getage() return age; void person:getagee(int as) age=as; float person:getpay() return pay; void person:getpayy(float temp) pay=temp; int person:gettype() return type; void person:setnext(person *next) mynext=next; person *person:getnext() return mynext; void person:output() cout<<"

20、编号:"<<no<<"姓名:"<<name<<endl; cout<<"性别:"<<sex<<"年龄:"<<age<<endl; cout<<"政治面貌:"<<party<<"学历:"<<study<<endl; cout<<"工资:"<<pay<<"人员

21、类型:"<<type<<endl; 3) 授课教师类teacher的定义(person.h)class teacher: virtual public person /授课教师类的定义 protected:char teachpos20; /职称float coursefee; /每节课的课时费float coursenum; /学时数public:teacher(); /教师类无参构造函数的定义float getpay(); /计算教师工资函数的定义 ;4) 授课教师类teacher的实现(person.cpp)teacher:teacher() /教师类无

22、参构造函数的实现 cout<<"请输入授课教师的职称:" cin>>teachpos;coursefee=30.0;cout<<"请输入授课教师完成的学时数:" cin>>coursenum;float teacher:getpay() /计算工资函数的实现 if(strcmp(teachpos,"教授")=0) pay=1600; if(strcmp(teachpos,"副教授")=0) pay=1200; if(strcpy(teachpos,"讲师&q

23、uot;)=0) pay=800; pay=pay+coursefee*coursenum; return pay; 5) 行政人员类staff的定义(person.h)class staff:virtual public person /行政人员类的定义 protected: char pos20; /行政职务 float stafffee; /行政补贴public: staff(); /行政人员类无参构造函数的定义 float getpay(); /计算行政人员工资函数的定义;6) 行政人员类staff的实现(person.cpp)staff:staff() /行政人员类无参构造函数的实现

24、 cout<<"请输入行政人员的职务级别:" cin>>pos; cout<<"请输入行政人员的补贴:"cin>>stafffee;float staff:getpay() /计算工资函数的实现 if(strcmp(pos,"处级")=0) pay=2500; if(strcmp(pos,"科级")=0) pay=2000; if(strcmp(pos,"科员")=0) pay=1500; pay=pay+stafffee;return pay;

25、7) 行政人员兼职教师类staffteacher的定义(person.h)class staffteacher:public staff,public teacher /行政人员兼职教师类的定义 public:staffteacher(); /类无参构造函数的定义 float getpay(); /计算工资函数的定义;8) 行政人员兼职教师类staffteacher的实现(person.cpp)staffteacher:staffteacher() /类无参构造函数的实现 coursefee=20.0; float staffteacher:getpay() /计算工资函数的实现 if(str

26、cmp(pos,"处级")=0) if(strcmp(teachpos,"教授")=0) pay=2000; else if(strcmp(teachpos,"副教授")=0)pay=1800; else pay=1600; if(strcmp(pos,"科级")=0) if(strcmp(teachpos,"教授")=0) pay=1800; else if(strcmp(teachpos,"副教授")=0)pay=1600; else pay=1400; if(strcm

27、p(pos,"科员")=0) if(strcmp(teachpos,"教授")=0) pay=1600; else if(strcmp(teachpos,"副教授")=0)pay=1400; else pay=1200; pay=pay+coursenum*coursefee+stafffee; return pay; 9) 学校类school的定义(school.h)#include"person.h"class school private: person *myfirst; /指向学校人员链表中结点的指针pu

28、blic:school(); /school类无参构造函数的定义school(int nnum,char nname,char nsex,int nage,char nparty,char nstudy,float npay,int ntype); /school类带参数构造函数的定义school(); /school类析构函数的定义 void load(); /从文件中加载员工信息void add(); /增加员工信息 void input(int number); /键盘输入新员工基本信息 void insert(int nnum,char nname,char nsex,int nage

29、,char nparty,char nstudy,float npay,int ntype); /学校员工链表中插入新员工结点 bool findnum(); /按编号查询员工信息 bool findname( ); /按姓名查询员工信息 bool modify(); /修改员工信息 bool deleteperson( ); /删除员工信息 void count(); /统计员工信息 void save(); /员工信息存盘 void showall(); /显示学校所有员工信息;10)学校类school的实现(school.cpp)#include"school.h"s

30、chool:school ( ) /school类无参构造函数的实现 myfirst=NULL; school:school(int nnum,char nname,char nsex,int nage,char nparty,char nstudy,float npay,int ntype) /school类带参数构造函数的实现 myfirst=new person(nnum,nname,nsex,nage,nparty,nstudy,npay,ntype); school:school( ) /school类析构函数的实现 person *next=myfirst,*temp; while

31、(next!=NULL) temp=next; next=next->getnext(); delete temp; myfirst=NULL; void school:load() /从文件中加载员工信息 int nnum,nage,ntype; char nname20,nsex20,nparty20,nstudy20; float npay; ifstream fin("person.txt",ios:in); while(fin.good() fin>>nnum>>nname>>nsex>>nage>>

32、;nparty>>nstudy>>npay>>ntype; if(!(fin.eof() insert(nnum,nname,nsex,nage,nparty,nstudy,npay,ntype); fin.close(); cout<<endl<<"存储在文件中的学校人员信息已加载到系统中"<<endl;void school:add() /增加新员工 int tmpnum,number1,number2; person *p=myfirst; if(p=NULL) cout<<"

33、;目前学校无员工,请输入新员工的编号:" cin>>tmpnum; input(tmpnum); else if(p->getnext()=NULL) number1=p->getnum()+1; input(number1); else while(p->getnext()!=NULL) p=p->getnext(); number2=p->getnum()+1; input(number2); void school:input(int number) /键盘输入新员工基本信息 int nage,ntype; float npay; ch

34、ar nname20,nsex20,nparty20,nstudy20; cout<<"请选择是任课教师(输入1),行政人员(输入2)还是行政人员兼职教师(输入3):"<<endl; cin>>ntype; cout<<"请输入编号为"<<number<<"的员工信息"<<endl; cout<<"输入姓名:"<<endl; cin>>nname; cout<<"输入性别:&

35、quot;<<endl; cin>>nsex; cout<<"输入年龄:"<<endl; cin>>nage; cout<<"输入政治面貌:群众还是党员?"<<endl; cin>>nparty; cout<<"输入学历:小学,初中,高中,专科,本科,硕士,博士:"<<endl; cin>>nstudy; cout<<"下面计算工资:"<<endl; if(nt

36、ype=1) teacher t1; npay=t1.getpay(); else if(ntype=2) staff s1; npay=s1.getpay(); else if(ntype=3) cout<<"请输入行政人员兼职教师的工资信息:" staffteacher st1; npay=st1.getpay(); insert(number,nname,nsex,nage,nparty,nstudy,npay,ntype); void school:insert(int nnum,char nname,char nsex,int nage,char np

37、arty,char nstudy,float npay,int ntype) /学校员工链表中插入新员工结点 person *p=myfirst; if(p=NULL) myfirst=new person(nnum,nname,nsex,nage,nparty,nstudy,npay,ntype); else while(p->getnext()!=NULL) p=p->getnext(); p->setnext(new person(nnum,nname,nsex,nage,nparty,nstudy,npay,ntype,p->getnext(); bool sc

38、hool:findnum() /按编号查询员工信息 int id; person *ahead=myfirst; person *follow=ahead; cout<<"请输入员工的编号:"<<endl; cin>>id; if(ahead=NULL) cout<<"本校暂无员工信息!"<<endl; return false; else while(ahead!=NULL) if(ahead->getnum()=id) ahead->output(); return true;

39、else follow=ahead; ahead=ahead->getnext(); cout<<"本校无此员工信息!"<<endl; return false; bool school:findname( ) /按姓名查询员工信息 char tmpname20; person *ahead=myfirst; person *follow=ahead; cout<<"请输入员工的姓名:" cin>>tmpname; if(ahead=NULL) cout<<"本校暂无员工信息!&

40、quot;<<endl; return false; else while(ahead!=NULL) if(strcmp(ahead->getname(),tmpname)=0) ahead->output(); return true; else follow=ahead; ahead=ahead->getnext(); cout<<"本校无此员工信息!"<<endl; return false; bool school:modify() /修改员工信息 int number; person *ahead=myfirs

41、t; person *follow=ahead; cout<<"请输入要修改的学校员工编号:" cin>>number; if(ahead=NULL) cout<<"本校无员工!"<<endl; return false; else while(ahead!=NULL) if(ahead->getnum()=number) ahead->output(); while(1) int i; float tmpnumber; char temp30; cout<<"请选择要修改

42、的员工信息:"<<endl; cout<<"1:姓名 2:性别 3:年龄 4:政治面貌 5:学历 6:工资 "<<endl; cout<<" 请选择(16)中的选项:" cin>>i; switch(i) case 1: cout<<"输入修改姓名:"cin>>temp;strcpy(ahead->getname(),temp); ; break; case 2: cout<<"输入修改性别:" cin&

43、gt;>temp;strcpy(ahead->getsex(),temp); ;break; case 3: cout<<"输入修改年龄:" cin>>tmpnumber;ahead->getagee(tmpnumber); ;break; case 4: cout<<"输入修改政治面貌:" cin>>temp;strcpy(ahead->getparty(),temp); ;break; case 5: cout<<"输入修改学历:" cin>

44、>temp;strcpy(ahead->getstudy(),temp);break; case 6: cout<<"输入修改工资:" cin>>tmpnumber;ahead->getpayy(tmpnumber);break; return true; else ahead=ahead->getnext(); follow=ahead; cout<<"本校没有此工作编号的员工!"<<endl; return false; bool school:deleteperson( ) /

45、删除员工信息 int i; person *ahead=myfirst; person *follow=ahead; cout<<"请输入要删除学校人员的工作编号:" cin>>i; if(ahead=NULL) cout<<"无员工可以删除" return false; else if(ahead->getnum()=i) myfirst=myfirst->getnext(); cout<<"工作编号为"<<i<<"的学校员工已被删除了!&

46、quot;<<endl; delete ahead; return true; else ahead=ahead->getnext(); while(ahead!=NULL) if(ahead->getnum()=i) follow->setnext(ahead->getnext(); cout<<"编号为"<<i<<"的成员以被删除n" delete ahead; return true; follow=ahead; ahead=ahead->getnext(); cout&

47、lt;<"要删除的学校员工不存在,无法删除!"<<endl; return false; void school:count( ) /统计员工信息 int i,amount=0; cout<<" *"<<'n' <<" * *"<<'n' <<" * 1.统计学校职工中的党员人数 *"<<'n' <<" * *"<<'n'

48、; <<" * 2.统计学校中女职工人数 *"<<'n' <<" * *"<<'n' <<" *"<<'n' <<"请您选择上面的选项:"<<endl; cin>>i; person *ahead=myfirst; person *follow=ahead; if(ahead=NULL) cout<<"学校无人员信息"<&l

49、t;endl; else switch(i) case 1: while(ahead!=NULL) if (strcmp(ahead->getparty(),"党员")=0) ahead=ahead->getnext(); amount+; else ahead=ahead->getnext(); cout<<"学校中的党员人数:"<<amount<<endl; ; break; case 2: while(ahead!=NULL) if (strcmp(ahead->getsex(),&quo

50、t;女")=0) ahead=ahead->getnext(); amount+; else ahead=ahead->getnext(); cout<<"学校中的女员工人数:"<<amount<<endl; ; break; void school:save() /员工信息存盘 ofstream fout("person.txt",ios:out); person *p=myfirst; while(p) fout<<p->getnum()<<"t&quo

51、t;<<p->getname()<<"t"<<p->getsex()<<"t"<<p->getage()<<"t" <<p->getparty()<<"t"<<p->getstudy()<<"t"<<p->getpay()<<"t"<<p->gettype()<<endl; p=p->getnext(); fout.close(); cout<<"保存数据已经完成"<<endl;void school:showall( ) /显示学校所有员工信息 person *ahead=myfirst; cout<<setw(8)<<"编号"<<setw(8)<<"姓名"<<setw(8)<<"性别"<<setw(8)<<"年

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论