高等院校人员管理系统设计.docx
- 文档编号:4061167
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:25
- 大小:127.58KB
高等院校人员管理系统设计.docx
《高等院校人员管理系统设计.docx》由会员分享,可在线阅读,更多相关《高等院校人员管理系统设计.docx(25页珍藏版)》请在冰豆网上搜索。
高等院校人员管理系统设计
中国农业大学
面向对象程序设计
课程设计报告
(2015/2016学年第二学期)
高等院校人员管理系统
专业计算机
学生姓名三
班级学号0000000000
指导教师康丽
指导单位计算机工程系
日期2016年6月
1.系统设计容和要求
本系统要完成一个高等院校的人员信息管理系统,能够实现学校中各类人员的信息录入、查询、修改、删除、统计、保存、显示等操作。
假设高校中有三类人员:
授课教师、行政人员、行政人员兼职教师(既上课又完成行政人员的工作)。
2.需求分析
系统具体实现的功能如下:
1)从文件中加载员工信息:
系统可以实现把存储在文件person.txt中的学校人员基本信息加载到系统中,可以避免数据的重复录入。
2)增加学校员工信息:
系统可以实现键盘录入新员工信息,员工信息包括员工编号、类型、、性别、年龄、政治面貌、学历、工资等。
如果目前学校无员工,则直接录入员工信息;如果有员工,则自动生成新员工的编号(增加1)。
学校人员分为授课教师、行政人员、行政人员兼职教师三类,各类员工的工资计算方法如下:
授课教师工资=基本工资+课时费(30*学时数)
行政人员工资=基本工资+行政补贴
行政人员兼职教师工资=基本工资+行政补贴+课时费(20*学时数)
3)查询学校员工信息:
系统可以实现按“编号”或“”查询员工,并输出相关信息。
4)修改学校员工信息:
系统可以实现对录入的员工信息重新进行编辑、修改,分别修改员工的、性别、年龄、政治面貌、学历和工资信息。
5)删除学校员工信息:
系统可以实现当员工离开学校时删除相关信息。
6)统计学校员工信息:
系统可以统计学校中的党员人数和女员工人数。
7)学校员工信息存盘:
系统可以实现把员工基本信息存储到磁盘文件person.txt中,方便用户以后读取数据,避免重复录入。
8)显示所有员工信息:
系统可以输出学校所有员工的信息,包括员工编号、、性别、年龄、政治面貌、学历、工资、人员类型等。
9)系统界面采用文本菜单方式,交互性好,系统界面如图1所示:
图1高等院校人员管理系统界面图
3.概要设计
系统数据存盘文件person.txt的格式如下:
编号性别年龄政治面貌学历工资员工类型
1000莉女32党员博士75001
1001白飞女28群众硕士25002
1002孟丹男40党员博士105003
其中员工类型为1表示授课教师,2表示行政人员,3表示行政人员兼职教师
(1)类定义
系统使用类来组织管理数据,共包括五个类,分别是学校类school、员工类person、任课教师类teacher、行政人员类staff、行政人员兼职教师类staffteacher。
员工类person用来描述学校各类人员具有的公共属性及操作,由于学校里授课教师、行政人员、行政人员兼职教师这三类人员工资的计算方法不同,表现出多态性,因此以person类为基类,分别派生出授课教师类teacher、行政人员类staff,再以teacher类和staff类为基类,派生出行政人员兼职教师类staffteacher。
由于学校里人员总数允许变动、不确定,因此学校类school采用链表保存所有人员信息,并用共同的方法操作所有人员,类school与类person之间是类的聚合关系,上述类关系用UML标识如图2所示:
学校类school
员工类person
授课教师类teacher
行政人员类staff
行政人员兼职教师类staffteacher
图2高等院校人员管理系统类关系的UML图
●员工类person。
类属性包括编号(no)、(name)、性别(sex)、年龄(age)、政治面貌(party)、学历(study)、工资(pay)、员工类型(type)、指向下一个员工的指针(mynext),实现对员工类的描述。
成员函数包括提取员工编号(getnum)、提取(getname)、提取性别(getsex)、提取年龄(getage)、设置年龄(getagee)、提取政治面貌(getparty)、提取学历(getstudy)、提取员工类型(gettype)、提取工资(getpay)、设置工资(getpayy)、提取指向下一个员工指针(getnext)、设置指向下一个员工指针(setnext)、输出员工信息(output)等。
●授课教师类teacher。
类属性包括职称(teachpos)、每小时课时费(coursefee)、课时数(coursenum)。
成员函数包括提取工资(getpay)。
●行政人员类staff。
类属性包括职务级别(pos)、行政补贴(stafffee)。
成员函数包括提取工资(getpay)。
●行政人员兼职教师类staffteacher。
成员函数包括提取工资(getpay)。
●学校类school。
类属性包括指向学校中第一位员工的指针(myfirst)。
成员函数包括从文件中加载员工信息(load)、增加员工信息(add、input、insert)、按编号查询员工信息(findnum)、按查询员工信息(findname)、修改员工信息(modify)、删除员工信息(deleteperson)、统计员工信息(count)、员工信息存盘(save)、显示学校所有员工信息(showall)等。
在基于UML的可视化建模工具RationalRose中高等院校人员管理系统各类关系的UML图形标识如图3所示:
图3RationalRose中系统类关系的UML图
(2)系统主要功能模块流程图
1)主函数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)
N
Y
Y
N
开始
输入待查员工的编号和姓名
遍历学校员工链表
学校是否有员工
输出无此员工
是否有待查员工
输出此员工信息output
图7按编号或姓名查询员工信息流程图
(3)详细设计
整个程序包含5个文件:
school.h、school.cpp是学校类的类定义文件和类实现文件;person.h、person.cpp是员工类及其派生类的类定义文件和类实现文件;main.cpp是主函数文件。
1)员工类person的定义(person.h)
#include
#include
#include
#include
usingnamespacestd;
classperson//员工类的定义
{protected:
intno;//编号
charname[20];//
charsex[10];//性别
intage;//年龄
charparty[20];//政治面貌
charstudy[30];//学历
floatpay;//工资
inttype;//员工类型,1:
授课教师2:
行政人员3:
表示行政人员兼职教师
person*mynext;//指向下一个员工的指针
public:
person();//员工类无参构造函数的定义
person(intpnum,charpname[],charpsex[],intpage,charpparty[],
charpstudy[],floatppay,intntype);//员工类有参构造函数的定义
person(intpnum,charpname[],charpsex[],intpage,charpparty[],
charpstudy[],floatppay,intntype,person*next);//员工类有参构造函数的定义
intgetnum();//提取员工编号函数的定义
char*getname();//提取员工函数的定义
char*getsex();//提取员工性别函数的定义
intgetage();//提取员工年龄函数的定义
voidgetagee(intas);//设置员工年龄函数的定义
char*getparty();//提取员工政治面貌函数的定义
char*getstudy();//提取员工学历函数的定义
virtualfloatgetpay();//计算员工工资函数的定义
voidgetpayy(floattemp);//设置员工工资函数的定义
intgettype();//提取员工类型函数的定义
person*getnext();//提取指向下一个员工指针函数的定义
voidsetnext(person*next);//设置指向下一个员工指针函数的定义
voidoutput();//输出员工信息函数的定义
};
2)员工类person的实现(person.cpp)
#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(intpnum,charpname[],charpsex[],intpage,charpparty[],charpstudy[],floatppay,intptype)//员工类有参构造函数
{no=pnum;
strcpy(name,pname);
strcpy(sex,psex);
age=page;
strcpy(party,pparty);
strcpy(study,pstudy);
pay=ppay;
type=ptype;
mynext=NULL;}
person:
:
person(intpnum,charpname[],charpsex[],intpage,charpparty[],charpstudy[],floatppay,intptype,person*next)//员工类有参构造函数
{no=pnum;
strcpy(name,pname);
strcpy(sex,psex);
age=page;
strcpy(party,pparty);
strcpy(study,pstudy);
pay=ppay;
type=ptype;
mynext=next;}
intperson:
:
getnum(){returnno;}
char*person:
:
getname(){returnname;}
char*person:
:
getsex(){returnsex;}
char*person:
:
getparty(){returnparty;}
char*person:
:
getstudy(){returnstudy;}
intperson:
:
getage(){returnage;}
voidperson:
:
getagee(intas){age=as;}
floatperson:
:
getpay(){returnpay;}
voidperson:
:
getpayy(floattemp){pay=temp;}
intperson:
:
gettype(){returntype;}
voidperson:
:
setnext(person*next){mynext=next;}
person*person:
:
getnext(){returnmynext;}
voidperson:
:
output()
{cout<<"编号:
"< "< cout<<"性别: "< "< cout<<"政治面貌: "< "< cout<<"工资: "< "< 3)授课教师类teacher的定义(person.h) classteacher: virtualpublicperson//授课教师类的定义 {protected: charteachpos[20];//职称 floatcoursefee;//每节课的课时费 floatcoursenum;//学时数 public: teacher();//教师类无参构造函数的定义 floatgetpay();//计算教师工资函数的定义 }; 4)授课教师类teacher的实现(person.cpp) teacher: : teacher()//教师类无参构造函数的实现 {cout<<"请输入授课教师的职称: "; cin>>teachpos; coursefee=30.0; cout<<"请输入授课教师完成的学时数: "; cin>>coursenum;} floatteacher: : getpay()//计算工资函数的实现 {if(strcmp(teachpos,"教授")==0) pay=1600; if(strcmp(teachpos,"副教授")==0) pay=1200; if(strcpy(teachpos,"讲师")==0) pay=800; pay=pay+coursefee*coursenum; returnpay;} 5)行政人员类staff的定义(person.h) classstaff: virtualpublicperson//行政人员类的定义 {protected: charpos[20];//行政职务 floatstafffee;//行政补贴 public: staff();//行政人员类无参构造函数的定义 floatgetpay();//计算行政人员工资函数的定义 }; 6)行政人员类staff的实现(person.cpp) staff: : staff()//行政人员类无参构造函数的实现 {cout<<"请输入行政人员的职务级别: "; cin>>pos; cout<<"请输入行政人员的补贴: "; cin>>stafffee;} floatstaff: : getpay()//计算工资函数的实现 {if(strcmp(pos,"处级")==0) pay=2500; if(strcmp(pos,"科级")==0) pay=2000; if(strcmp(pos,"科员")==0) pay=1500; pay=pay+stafffee; returnpay;} 7)行政人员兼职教师类staffteacher的定义(person.h) classstaffteacher: publicstaff,publicteacher//行政人员兼职教师类的定义 {public: staffteacher();//类无参构造函数的定义 floatgetpay();//计算工资函数的定义 }; 8)行政人员兼职教师类staffteacher的实现(person.cpp) staffteacher: : staffteacher()//类无参构造函数的实现 {coursefee=20.0;} floatstaffteacher: : getpay()//计算工资函数的实现 {if(strcmp(pos,"处级")==0) {if(strcmp(teachpos,"教授")==0) pay=2000; elseif(strcmp(teachpos,"副教授")==0) pay=1800; else pay=1600;} if(strcmp(pos,"科级")==0) {if(strcmp(teachpos,"教授")==0) pay=1800; elseif(strcmp(teachpos,"副教授")==0) pay=1600; else pay=1400;} if(strcmp(pos,"科员")==0) {if(strcmp(teachpos,"教授")==0) pay=1600; elseif(strcmp(teachpos,"副教授")==0) pay=1400; else pay=1200;} pay=pay+coursenum*coursefee+stafffee; returnpay;} 9)学校类school的定义(school.h) #include"person.h" classschool {private: person*myfirst;//指向学校人员链表中结点的指针 public: school();//school类无参构造函数的定义 school(intnnum,charnname[],charnsex[],intnage,charnparty[],charnstudy[],floatnpay,intntype); //school类带参数构造函数的定义 ~school();//school类析构函数的定义 voidload();//从文件中加载员工信息 voidadd();//增加员工信息 voidinput(intnumber);//键盘输入新员工基本信息 voidinsert(intnnum,charnname[],charnsex[],intnage,charnparty[],charnstudy[],floatnpay,intntype); //学校员工链表中插入新员工结点 boolfindnum();//按编号查询员工信息 boolfindname();//按查询员工信息 boolmodify();//修改员工信息 booldeleteperson();//删除员工信息 voidcount();//统计员工信息 voidsave();//员工信息存盘 voidshowall();//显示学校所有员工信息 }; 10)学校类school的实现(school.cpp) #include"school.h" school: : school()//school类无参构造函数的实现 {myfirst=NULL;} school: : school(intnnum,charnname[],charnsex[],intnage,charnparty[],charnstudy[],floatnpay,intntype)//school类带参数构造函数的实现 {myfirst=newperson(nnum,nname,nsex,nage,nparty,nstudy,npay,ntype);} school: : ~school()//school类析构函数的实现 {person*next=myfirst,*temp; while(next! =NULL) {temp=next; next=next->getnext(); deletetemp;} myfirst=NULL;} voidschool: : load()//从文件中加载员工信息 {intnnum,nage,ntype; charnname[20],nsex[20],nparty[20],nstudy[20]; floatnpay; ifstreamfin("person.txt",ios: : in); while(fin.good()) {fin>>nnum>>nname>>nsex>>nage>>nparty>>nstudy>>npay>>ntype; if(! (fin.eof())) insert(nnum,nname,nsex,nage,nparty,nstudy,npay,ntype);} fin.close(); cout< } voidschool: : add()//增加新员工 {inttmpnum,number1,number2; person*p=myfirst; if(p==NULL) {cout<<"目前学校无员工,请输入新员工的编号: "; 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);} } } voidschool: : input(intnumber)//键盘输入新员工基本信息 {intnage,ntype; floatnpay; charnname[20],nsex[20],nparty[20],nstudy[20]; cout<<"请选择是任课教师(输入1),行政人员(输入2)还是行政人员兼职教师(输入3): "< cin>>ntype; cout<<"请输入编号为"< cout<<"输入: "< cin>>nname; cout<<"输入性别: "< cin>>nsex; cout<<"输入年龄: "< cin>>nage; cout<<"输入政治面貌: 群众还是党员? "< cin>>nparty; cout<<"输入学历: 小学,初中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高等院校 人员 管理 系统 设计