《高校人事管理系统 (c).doc》由会员分享,可在线阅读,更多相关《高校人事管理系统 (c).doc(71页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、一、设计内容与设计要求1.课程设计目的:面向对象程序设计课程设计是集中实践性环节之一,是学习完面向对象程序设计课程后进行的一次全面的综合练习。要求学生达到熟练掌握C+语言的基本知识和技能;基本掌握面向对象程序设计的思想和方法;能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题,从而提高动手编程解决实际问题的能力。1)公司库存管理系统2)高校学籍管理系统3)高校工资管理系统4)高校人事管理系统5)通讯录程序设计6)学生成绩管理系统7) 图书管理系统8)文本编辑器的设计与实现9)学生考勤管理系统10)公司人员管理系统3设计要求: 设计课题题目:每位同学根据自己学号除以9所得的余数加一选择
2、相应题号的课题。换题者不记成绩。(课题10只做为参考课题) 根据自己对应的课题完成以下主要工作:完成系统需求分析:包括系统设计目的与意义;系统功能需求(系统流程图);输入输出的要求。完成系统总体设计:包括系统功能分析;系统功能模块划分与设计(系统功能模块图)。完成系统详细设计:包括数据库需求分析;数据库概念结构设计(ER图);数据库逻辑结构设计;类层次图;界面设计与各功能模块实现。系统调试:调试出现的主要问题,编译语法错误及修改,重点是运行逻辑问题修改和调整。使用说明书及编程体会:说明如何使用你编写的程序,详细列出每一步的操作步骤。关键源程序(带注释) 按规定格式完成课程设计报告,将其打印稿(
3、A4纸)上交给老师存档。 不得抄袭他人程序、课程设计报告,每个人应体现自己的个性设计。二、进度安排第 18 周 星期一 8:0012:00 星期二 8:0012:00 星期四 8:0012:00第 19 周 星期一 8:0012:00 星期二 14:3018:30 星期三 8:0012:00三、参考书籍1.C程序设计课程设计 刘振安编著 TP312C5632.C+ Builder和Delphi课程设计与系统开发案例 伍俊良 清华大学出版社 7-302-06072-X 3.Visual C+课程设计案例精编 严华峰 中国水利水电出版社 7-5084-2007-1 2004 4.Visual C+
4、课程设计与系统开发案例 伍俊良 清华大学出版社 7-302-05968-3 2002(编程平台不限,vc+, c+ Builder等等。)课题4:高校人事管理系统 (一)、课程设计题目:高校人事管理系统(二)、目的与要求: 1、目的: (1)要求学生达到熟练掌握C+语言的基本知识和技能; (2)基本掌握面向对象程序设计的基本思路和方法; (3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。 2、基本要求: (1)要求利用面向对象的方法以及C+的编程思想来完成系统的设计; (2)要求在设计的过程中,建立清晰的类层次; (3)在系统中至少要定义四个类,每个类中要有各自的属性和方法;
5、 (4)在系统的设计中,至少要用到面向对象的一种机制。 3、创新要求: 在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。 4、写出设计说明书 (三)、设计方法和基本原理: 1、问题描述(功能要求): 某高校,主要人员有:在职人员(行政人员、教师、一般员工)、退休人员、返聘人员和临时工。现在,需要存储这些人员的人事档案信息:编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间。要求: (1)添加删除功能:能根据学院人事的变动情况,添加删除记录;(2)查询功能:能根据编号和姓名进行查询;(3)编辑功能(高级):根据查询对相应的记录进行修改,并存储;(4)统计功
6、能:能根据多种参数进行人员的统计(在职人数、党员人数、女工人数、高学历高职称人数);(5)保存功能:能对输入的数据进行相应的存储,要求重载插入和提取符以完成数据的保存和打开。(6)人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。2、问题的解决方案: 根据系统功能要求,可以将问题解决分为以下步骤: (1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;(2)分析系统中的各个实体及它们之间的关系包括属性和行为; (3)根据问题描述,设计系统的类层次; (4)完成类层次中各个类的描述(包括属性和方法); (5)完成类中各个成员函数的定义; (6)完成系统的应用模块; (
7、7)功能调试; (8)完成系统总结报告以及系统使用说明书。目 录1.系统需求分析12.总体设计23.详细设计34.系统调试45.结果分析46.总结71. 系统需求分析题目需求:(1)添加删除功能:能根据学院人事的变动情况,添加删除记录;(2)查询功能:能根据编号和姓名进行查询;(3)编辑功能(高级):根据查询对相应的记录进行修改,并存储;(4)统计功能:能根据多种参数进行人员的统计(在职人数、党员人数、女工人数、高学历高职称人数);(5)保存功能:能对输入的数据进行相应的存储,要求重载插入和提取符以完成数据的保存和打开。(6)人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。系
8、统设计目标:(1) 系统能根据用户输入菜单的选项进行执行 。(2) 能对基本错误进行判断,并要求用重新输入。(3) 能够把输入的数据保存到txt文件中,下次能够使用。(4) 有较好的人性化,不至于用户不知道做什么。 系统实现功能: (1)删除功能:能根据用户输入姓名与编号进行删除。 (2)查询功能:能根据用户输入姓名、编号、职位、来校时间、离校时间。 (3)编辑功能:能根据查询的数据进行修改。 (4)统计功能:能根据多种参数进行人员统计。 (5)保持功能:能对输入的数据进行存储在文件中。 (6)识别错误功能:能对基本错误进行判断,并要求用户重新输入。 (7)人员编号在生成人员信息时自动生成。2
9、. 总体设计 系统功能模块划分 3. 详细设计 UML : TimeToSchoolTimeLeaveSchoolTime WorkerTime People -numbert: int -Work: work; -ToSchoolTime: toSchoolTime -LeaveSchoolTime : leaveSchoolTime -WorkTime: workerTime -judgeLeaveSchol: char +Worker(j=N:char) +Worker() + getNum(): int + getWork(): Work + getToSchoolTime(): To
10、SchoolTime + getLeaveSchoolTime(): LeaveSchoolTime + getWorkTime(): WorkTime + getJudgeLeaveSchool(): char +setNum(n : int &): void +setWork(w : Work & ): void +setToSchoolTime(t:ToScholTime & ): void +setLeaveSchoolTime(l :LeaveSchoolTime & ): void +setWorkTime(w : WorkTime & ): void +setJudgeLeave
11、School( j: char & ): void + input(): void + operator (out:ostream, worker:const Worker & ): ostream + operator (input:istream, worker:const Worker &): istream Work4. 系统调试 1. 问题1:VC+ 6.0 对友元函数支持不是很好,通过查资料得知解决方法。 2. 问题2:逻辑错误,通过分析解决。 3. 问题3:txt文件读入到动态数组中去,会读错,读不出,多读入一个,通过询问 老师同学解决。 4. 问题4:vector容器中成员函数
12、的使用,通过查书解决。5. 结果分析 1. 输入信息1:按姓名查询2: 按编号查询3:按来校时间查询4: 按离校时间查询5: 按职工职位查询3: 删除信息 1:按姓名删除 2: 按编号删除 4:编辑信息 3:增加职工5: 统计信息 6: 输出信息0: 退出系统 独到的设计:1. 有基本的纠错功能,并能提示用户重新输入。2. 除了按姓名、编号搜索还能按来小时间、离校时间、职位进行搜索。3. 编辑功能能够分别对姓名、编号、性别、修改。4. 较好的使用继承、派生,符合基本思维。5. 较好的使用类的组合。6. 函数命名、类的命名、数据的命名能够见明思意,较好的符合命名规则。不足之处:1. 源代码过多,
13、仅仅使用了容器vector,没有使用STL迭代器、算法等。2. 基类没有很好的抽象。3. 主函数调用的函数没有封装在一个类中,仅仅包含在一个头文件中。4. 文件的操作没有很好的掌握。5. 数据输出,没有按格式对齐混乱。6. 函数过长,函数做的事情不止一件。7. 类中包含的成员过多。8. 不够人性话,用户界面不够美观。9. 对于一些错误不能有效的终止。(总结自己独到的设计特点和不足之处。)6. 总结通过一周的课程设计,我学到了很多东西,1 系统分析,类层次之间的关系非常重要,只有架构好总体,才能设计出好的系统2 建立了一套完整的系统模型,先从整体入手,再细分。而不是一开始就着急编写,那样系统只会
14、非常混乱。3. 函数、类的命名。基本上能够见名思意。4. .文件的操作本来是一片模糊,通过实践操作,已经理解对文件的操作,原来很简单。 5. 通过与同学讨论,知道要擅长使用STL来解决实际问题,而不是自己去编写函数。懂得利用C+中定义的对象解决问题。对于面向对象设计又有了更深的理解。6. 类之间的设计中符合人的思维逻辑。7. 通过一些书籍,知道在设计中要遵守的规则,程序中统一的输出格式。8. 知道一些基本的优化规则,如 函数只能做一件事、越小越好、基类要足够的抽象,最好使用组合而不是继承,减少依赖性等等。9. 在程序设计中要与别人合作,把自己的糟粕去掉,吸取别人程序中的精华,与其他同学讨论。1
15、0. 编写中要先写好一个功能后马上调试,及时发现问题,及时解决问题,而不是系统写完后再慢慢调试,那样问题会很多,调好这里后那里又出现问题,我们初学者还有很多细节不会注意,这种方法有助于我更快的编写出系统,减少编写时间,把更多的时间留下来完善程序。总之,通过这次的课程设计,让我真正了解到C语言中的类模块真正魅力和无穷的功能 ,感到STL的强大,希望尽快掌握STL的知识来解决实际问题。通过对文件的操作领略到编程的神奇,感到非常的方便。这个学期的对C+的学习,仅仅是叩开了C+这扇大门,里面还有很多知识我所不知道的,而此次的课程设计更加激发了我对C语言学习的浓厚兴趣 。这个假期会进一步加强这个学期所学
16、,也会进一步学习C+。计算机与通信学院课程设计评分表课程名称: 面向对象程序设计 项 目评 价设计方案的合理性与创造性设计与调试结果设计说明书的质量答辩陈述与回答问题情况课程设计周表现情况综合成绩 教师签名: 日 期: 附源代码:#ifndef TIME_H#define TIME_Hclass Timepublic:Time(int y=1900, int m=1, int d=1);virtual Time();int getYear() const;int getMonth() const;int getDay() const;void setYear(int y);void setMo
17、nth(int m);void setDay(int d);bool judgeLeapYear();protected:int year;int month;int day;#endif#includeusing namespace std;#includeTime.hTime:Time(int y, int m, int d):year(y),month(m),day(d)Time:Time()int Time:getYear() constreturn year;int Time:getMonth() constreturn month;int Time:getDay() constre
18、turn day;void Time:setYear(int y)year=y;void Time:setMonth(int m)month=m;void Time:setDay(int d)day=d;bool Time:judgeLeapYear()bool flag=true;flag=(year%4=0) & (year%100!=0) | (year%400=0);return flag;#ifndef TOSCHOOLTIME_H#define TOSCHOOLTIME_H#includeTime.hclass ToSchoolTime:public Timepublic:ToSc
19、hoolTime(int y=1900, int m=1, int d=1);virtual ToSchoolTime(); bool judgeYear();void inputYear();bool judgeMonth();void inputMonth();int judgeMonthDay();bool judgeDay();void inputDay();void inputToSchoolTime();friend ostream & operator (ostream &out, const ToSchoolTime &t)out ;outt.year-t.month-(ist
20、ream &input, ToSchoolTime &t)char c1,c2;inputt.yearc1t.monthc2t.day;return input;private:int oneMonthDay;#endif#includeusing namespace std;#includeToSchoolTime.h#includeTime.hToSchoolTime:ToSchoolTime(int y, int m, int d):Time(y,m,d)oneMonthDay=30;ToSchoolTime:ToSchoolTime()bool ToSchoolTime:judgeYe
21、ar()const int startYear=1990;bool flag=true;if(year startYear)flag=false;coutt输入有误,起始年份大于来校年份:startYear yearendl;return flag;void ToSchoolTime:inputYear()bool flag=false;while( !flag )coutyear;flag=judgeYear(); coutendl;bool ToSchoolTime:judgeMonth()bool flag=true;const int startMonth=1;const int en
22、dMonth=12;if(month 12)flag=false;coutt输入有误,一年中没有month月份endl;return flag; void ToSchoolTime:inputMonth()bool flag=false;while( !flag )coutmonth;flag=judgeMonth();coutendl;int ToSchoolTime:judgeMonthDay()if(month=2)bool flagYear=false;flagYear=judgeLeapYear();if(flagYear)oneMonthDay=29;elseoneMonthDay
23、=28;else if(month8)if(month%2=0)oneMonthDay=30;elseoneMonthDay=31;elseif(month%2=0)oneMonthDay=31;elseoneMonthDay=30;return oneMonthDay;bool ToSchoolTime:judgeDay()bool flag=true;const int startDay=1;const int endDay=oneMonthDay;if(day oneMonthDay)flag=false;coutt输入有误,month月份没有day这一天endl;return flag
24、;void ToSchoolTime:inputDay()oneMonthDay=judgeMonthDay();bool flag=false;while( !flag )cout # 来校日 #(1 oneMonthDayday;flag=judgeDay();coutendl;void ToSchoolTime:inputToSchoolTime()inputYear();inputMonth();inputDay();#ifndef LEAVESCHOOLTIME_H#define LEAVESCHOOLTIME_H#includeTime.h#includeToSchoolTime.
25、hclass LeaveSchoolTime:public Timepublic:LeaveSchoolTime(int year=2010, int month=1, int day=1);virtual LeaveSchoolTime();int getOneMonthDay() const;void inputYear(const int &toSchoolYear);int judgeLeaveSchoolYear(const int &toSchoolYear); /判断输入年份是否小于来校年份 int judgeLeaveSchoolMonth(const int &toSchoo
26、lMonth); /当来校年份与离校年份相等时,判断输入月份是否小于来校月int judgeLeaveSchoolDay(const int &toSchoolDay);void inputMonth(const int &toSchoolYear, const int &toSchoolMonth);intjudgeMonthDay(); /判断一个月有多少天. bool judgeDayOveroneMonthDay();void inputDay(const int &toSchoolYear, const int &toSchoolMonth, const int &toSchoolD
27、ay);void inputLeaveSchoolTime(const ToSchoolTime &toSchoolTime);friend ostream & operator (ostream &out, const LeaveSchoolTime &l) /友元函数重载 (istream &input,LeaveSchoolTime &l) /友元函数重载 用来输入 LeaveSchoolTime类char c1,c2;inputl.yearc1l.monthc2l.day;return input;private:int oneMonthDay;#endifL#includeusing
28、 namespace std;#includeLeaveSchoolTime.h#includeToSchoolTime.h#includeTime.hLeaveSchoolTime:LeaveSchoolTime(int year, int month, int day):Time(year,month,day)oneMonthDay=judgeMonthDay(); /调用函数。LeaveSchoolTime:LeaveSchoolTime()int LeaveSchoolTime:getOneMonthDay() constreturn oneMonthDay;int LeaveScho
29、olTime:judgeLeaveSchoolYear(const int &toSchoolYear)int flag=1;if(toSchoolYear = year)flag=0; if(toSchoolYear year) flag=-1;coutt输入有误,来校年份大于离校年份: toSchoolYear yearendl;return flag;void LeaveSchoolTime:inputYear(const int &toSchoolYear)int flag=-1;while(flag = -1)cout # 该职工离校的年份 #(toSchoolYearyear;fl
30、ag=judgeLeaveSchoolYear(toSchoolYear);cout month)flag=-1;return flag;void LeaveSchoolTime:inputMonth(const int &toSchoolYear, const int &toSchoolMonth) int flagYear=judgeLeaveSchoolYear(toSchoolYear);if(flagYear = 0)int flagMonth=-1;while(flagMonth = -1)cout # 离校月份 #(toSchoolMonthmonth;flagMonth=jud
31、geLeaveSchoolMonth(toSchoolMonth);elsecoutmonth;coutendl;int LeaveSchoolTime:judgeMonthDay()oneMonthDay=30;if(month=2)bool flagYear=false;flagYear=judgeLeapYear();if(flagYear)oneMonthDay=29;elseoneMonthDay=28;else if(month day)flag=-1;coutt输入有误,来校日大于离校日:toSchoolDay dayendl;cout oneMonthDay)flag=fals
32、e;coutt输入有误:day oneMonthDay;coutendl;return flag;void LeaveSchoolTime:inputDay(const int &toSchoolYear, const int &toSchoolMonth, const int &toSchoolDay)oneMonthDay=judgeMonthDay();int flagYear=judgeLeaveSchoolYear(toSchoolYear);int flagMonth=judgeLeaveSchoolMonth(toSchoolMonth); if(flagYear = 0 & f
33、lagMonth = 0)bool flagOveroneMonthDay=false;while(!flagOveroneMonthDay)int flagDay=-1;while(flagDay = -1)cout # 该职工离校日 #(toSchoolDay oneMonthDayday;flagDay=judgeLeaveSchoolDay(toSchoolDay);flagOveroneMonthDay=judgeDayOveroneMonthDay();elsebool flagOveroneMonthDay=false;while(!flagOveroneMonthDay)cou
34、t # 该职工离校日 #(1 oneMonthDayday;flagOveroneMonthDay=judgeDayOveroneMonthDay(); coutendl;void LeaveSchoolTime:inputLeaveSchoolTime(const ToSchoolTime &toSchoolTime)inputYear(toSchoolTime.getYear();inputMonth(toSchoolTime.getYear(), toSchoolTime.getMonth();inputDay(toSchoolTime.getYear(),toSchoolTime.ge
35、tMonth(), toSchoolTime.getDay();#includeusing namespace std;#ifndef WORKTIME_H#define WORKTIME_H#includeTime.h#includeToSchoolTime.h#includeLeaveSchoolTime.hclass WorkTime:public Timepublic:WorkTime();virtual WorkTime();void calculateWorkTimeYear(const int &toSchoolYear, const int &leaveSchoolYear); /计算在职年份void calculateWorkTimeMonth(const int &toSchoolMonth, const int &leaveSchoolMonth); /计算在职月份void calculateWorkTimeDay(const int &toSchoolDay, const int &leaveSchoolDay); /计算在职天数void
限制150内