高校人事管理系统 C++文档格式.docx
《高校人事管理系统 C++文档格式.docx》由会员分享,可在线阅读,更多相关《高校人事管理系统 C++文档格式.docx(67页珍藏版)》请在冰豆网上搜索。
00
星期二8:
星期四8:
第19周星期一8:
星期二14:
30——18:
30
星期三8:
三、参考书籍
1.《C++程序设计课程设计》刘振安编著TP312C563
2.《C++Builder和Delphi课程设计与系统开发案例》伍俊良清华大学出版社7-302-06072-X
3.VisualC++课程设计案例精编严华峰中国水利水电出版社7-5084-2007-12004
4.VisualC++课程设计与系统开发案例伍俊良清华大学出版社7-302-05968-32002
(编程平台不限,vc++,c++Builder等等。
)
课题4:
高校人事管理系统
(一)、课程设计题目:
高校人事管理系统
(二)、目的与要求:
1、目的:
(1)要求学生达到熟练掌握C++语言的基本知识和技能;
(2)基本掌握面向对象程序设计的基本思路和方法;
(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
2、基本要求:
(1)要求利用面向对象的方法以及C++的编程思想来完成系统的设计;
(2)要求在设计的过程中,建立清晰的类层次;
(3)在系统中至少要定义四个类,每个类中要有各自的属性和方法;
(4)在系统的设计中,至少要用到面向对象的一种机制。
3、创新要求:
在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。
4、写出设计说明书
(三)、设计方法和基本原理:
1、问题描述(功能要求):
某高校,主要人员有:
在职人员(行政人员、教师、一般员工)、退休人员、返聘人员和临时工。
现在,需要存储这些人员的人事档案信息:
编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间。
要求:
(1)添加删除功能:
能根据学院人事的变动情况,添加删除记录;
(2)查询功能:
能根据编号和姓名进行查询;
(3)编辑功能(高级):
根据查询对相应的记录进行修改,并存储;
(4)统计功能:
能根据多种参数进行人员的统计(在职人数、党员人数、女工人数、高学历高职称人数);
(5)保存功能:
能对输入的数据进行相应的存储,要求重载插入和提取符以完成数据的保存和打开。
(6)人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。
2、问题的解决方案:
根据系统功能要求,可以将问题解决分为以下步骤:
(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
(2)分析系统中的各个实体及它们之间的关系包括属性和行为;
(3)根据问题描述,设计系统的类层次;
(4)完成类层次中各个类的描述(包括属性和方法);
(5)完成类中各个成员函数的定义;
(6)完成系统的应用模块;
(7)功能调试;
(8)完成系统总结报告以及系统使用说明书。
1.系统需求分析
题目需求:
系统设计目标:
(1)系统能根据用户输入菜单的选项进行执行。
(2)能对基本错误进行判断,并要求用重新输入。
(3)能够把输入的数据保存到txt文件中,下次能够使用。
(4)有较好的人性化,不至于用户不知道做什么。
系统实现功能:
(1)删除功能:
能根据用户输入姓名与编号进行删除。
(2)查询功能:
能根据用户输入姓名、编号、职位、来校时间、离校时间。
(3)编辑功能:
能根据查询的数据进行修改。
(4)统计功能:
能根据多种参数进行人员统计。
(5)保持功能:
能对输入的数据进行存储在文件中。
(6)识别错误功能:
能对基本错误进行判断,并要求用户重新输入。
(7)人员编号在生成人员信息时自动生成。
2.总体设计
系统功能模块划分
3.详细设计
UML:
4.系统调试
1.问题1:
VC++6.0对友元函数支持不是很好,通过查资料得知解决方法。
2.问题2:
逻辑错误,通过分析解决。
3.问题3:
txt文件读入到动态数组中去,会读错,读不出,多读入一个,通过询问
老师同学解决。
4.问题4:
vector容器中成员函数的使用,通过查书解决。
5.结果分析
1.输入信息
2.查询信息
1:
按姓名查询
2:
按编号查询
3:
按来校时间查询
4:
按离校时间查询
5:
按职工职位查询
3:
删除信息
1:
按姓名删除
2:
按编号删除
4:
编辑信息
3:
增加职工
统计信息
6:
输出信息
0:
退出系统
独到的设计:
1.有基本的纠错功能,并能提示用户重新输入。
2.除了按姓名、编号搜索还能按来小时间、离校时间、职位进行搜索。
3.编辑功能能够分别对姓名、编号、性别、修改。
4.较好的使用继承、派生,符合基本思维。
5.较好的使用类的组合。
6.函数命名、类的命名、数据的命名能够见明思意,较好的符合命名规则。
不足之处:
1.源代码过多,仅仅使用了容器vector,没有使用STL迭代器、算法等。
2.基类没有很好的抽象。
3.主函数调用的函数没有封装在一个类中,仅仅包含在一个头文件中。
4.文件的操作没有很好的掌握。
5.数据输出,没有按格式对齐混乱。
6.函数过长,函数做的事情不止一件。
7.类中包含的成员过多。
8.不够人性话,用户界面不够美观。
9.对于一些错误不能有效的终止。
(总结自己独到的设计特点和不足之处。
6.总结
通过一周的课程设计,我学到了很多东西,
1.系统分析,类层次之间的关系非常重要,只有架构好总体,才能设计出好的系统
2.建立了一套完整的系统模型,先从整体入手,再细分。
而不是一开始就着急编写,那样系统只会非常混乱。
3.函数、类的命名。
基本上能够见名思意。
4..文件的操作本来是一片模糊,通过实践操作,已经理解对文件的操作,原来很简单。
5.通过与同学讨论,知道要擅长使用STL来解决实际问题,而不是自己去编写函数。
懂得利用C++中定义的对象解决问题。
对于面向对象设计又有了更深的理解。
6.类之间的设计中符合人的思维逻辑。
7.通过一些书籍,知道在设计中要遵守的规则,程序中统一的输出格式。
8.知道一些基本的优化规则,如函数只能做一件事、越小越好、基类要足够的抽象,最好使用组合而不是继承,减少依赖性等等。
9.在程序设计中要与别人合作,把自己的糟粕去掉,吸取别人程序中的精华,与其他同学讨论。
10.编写中要先写好一个功能后马上调试,及时发现问题,及时解决问题,而不是系统写完后再慢慢调试,那样问题会很多,调好这里后那里又出现问题,我们初学者还有很多细节不会注意,这种方法有助于我更快的编写出系统,减少编写时间,把更多的时间留下来完善程序。
总之,通过这次的课程设计,让我真正了解到C++语言中的类模块真正魅力和无穷的功能,感到STL的强大,希望尽快掌握STL的知识来解决实际问题。
通过对文件的操作领略到编程的神奇,感到非常的方便。
这个学期的对C++的学习,仅仅是叩开了C++这扇大门,里面还有很多知识我所不知道的,而此次的课程设计更加激发了我对C++语言学习的浓厚兴趣。
这个假期会进一步加强这个学期所学,也会进一步学习C++。
计算机与通信学院课程设计评分表
课程名称:
面向对象程序设计
项目
评价
设计方案的合理性与创造性
设计与调试结果
设计说明书的质量
答辩陈述与回答问题情况
课程设计周表现情况
综合成绩
教师签名:
日期:
附源代码:
Time.h
#ifndefTIME_H
#defineTIME_H
classTime
{
public:
Time(inty=1900,intm=1,intd=1);
virtual~Time();
intgetYear()const;
intgetMonth()const;
intgetDay()const;
voidsetYear(inty);
voidsetMonth(intm);
voidsetDay(intd);
booljudgeLeapYear();
protected:
intyear;
intmonth;
intday;
};
#endif
Time.cpp
#include<
iostream>
usingnamespacestd;
#include"
Time.h"
Time:
:
Time(inty,intm,intd):
year(y),month(m),day(d)
}
~Time()
{}
intTime:
getYear()const
{returnyear;
getMonth()const
{returnmonth;
getDay()const
{returnday;
voidTime:
setYear(inty)
{year=y;
setMonth(intm)
{month=m;
setDay(intd)
{day=d;
boolTime:
judgeLeapYear()
boolflag=true;
flag=((year%4==0)&
&
(year%100!
=0)||(year%400==0));
returnflag;
ToSchoolTime.h
#ifndefTOSCHOOLTIME_H
#defineTOSCHOOLTIME_H
classToSchoolTime:
publicTime
ToSchoolTime(inty=1900,intm=1,intd=1);
virtual~ToSchoolTime();
booljudgeYear();
voidinputYear();
booljudgeMonth();
voidinputMonth();
intjudgeMonthDay();
booljudgeDay();
voidinputDay();
voidinputToSchoolTime();
friendostream&
operator<
<
(ostream&
out,constToSchoolTime&
t)
{
out<
"
"
;
t.year<
-"
t.month<
t.day;
returnout;
}
friendistream&
operator>
>
(istream&
input,ToSchoolTime&
charc1,c2;
input>
t.year>
c1>
t.month>
c2>
returninput;
private:
intoneMonthDay;
ToSchoolTime.cpp
ToSchoolTime.h"
ToSchoolTime:
ToSchoolTime(inty,intm,intd):
Time(y,m,d)
{oneMonthDay=30;
~ToSchoolTime()
boolToSchoolTime:
judgeYear()
{constintstartYear=1990;
if(year<
startYear)
flag=false;
cout<
\t输入有误,起始年份大于来校年份:
startYear<
>
year<
endl;
voidToSchoolTime:
inputYear()
boolflag=false;
while(!
flag)
cout<
###来校年份###(1990~?
):
cin>
year;
flag=judgeYear();
}
cout<
judgeMonth()
constintstartMonth=1;
constintendMonth=12;
if(month<
1||month>
12)
\t输入有误,一年中没有"
month<
月份"
}
inputMonth()
###来校月份###(1~12):
cin>
month;
flag=judgeMonth();
intToSchoolTime:
judgeMonthDay()
if(month==2)
boolflagYear=false;
flagYear=judgeLeapYear();
if(flagYear)
{oneMonthDay=29;
else
{oneMonthDay=28;
elseif(month<
8)
if(month%2==0)
{oneMonthDay=30;
else{oneMonthDay=31;
else
{oneMonthDay=31;
}returnoneMonthDay;
judgeDay()
constintstartDay=1;
constintendDay=oneMonthDay;
if(day<
startDay||day>
oneMonthDay)
\t输入有误,"
月份没有"
day<
这一天"
inputDay()
{oneMonthDay=judgeMonthDay();
###来校日###(1~"
oneMonthDay<
day;
flag=judgeDay();
inputToSchoolTime()
{inputYear();
inputMonth();
inputDay();
LeaveSchoolTime.h
#ifndefLEAVESCHOOLTIME_H
#defineLEAVESCHOOLTIME_H
classLeaveSchoolTime:
LeaveSchoolTime(intyear=2010,intmonth=1,intday=1);
virtual~LeaveSchoolTime();
intgetOneMonthDay()const;
voidinputYear(constint&
toSchoolYear);
intjudgeLeaveSchoolYear(constint&
//判断输入年份是否小于来校年份
intjudgeLeaveSchoolMonth(constint&
toSchoolMonth);
//当来校年份与离校年份相等时,判断输入月份是否小于来校月
intjudgeLeaveSchoolDay(constint&
toSchoolDay);
voidinputMonth(constint&
toSchoolYear,constint&
intjudgeMonthDay();
//判断一个月有多少天.
booljudgeDayOveroneMonthDay();
voidinputDay(constint&
toSchoolMonth,constint&
voidinputLeaveSchoolTime(constToSchoolTime&
toSchoolTime);
out,constLeaveSchoolTime&
l)//友元函数重载<
用来输出
LeaveSchoolTime类
l.year<
l.month<
l.day;
input,LeaveSchoolTime&
l)//友元函数重载>
用来输入
LeaveSchoolTime类
l.year>
l.month>
LeaveSchool.cpp
LeaveSchoolTime.h"
LeaveSchoolTime:
LeaveSchoolTime(intyear,intmonth,intday):
Time(year,month,day)
{oneMonthDay=judgeMonthDay();
}//调用函数。
~LeaveSchoolTime()
intLeaveSchoolTime:
getOneMonthDay()const
{returnoneMonthDay;
judgeLeaveSchoolYear(constint&
toSchoolYear)
{intflag=1;
if(toSchoolYear==year)
{flag=0;
if(toSchoolYear>
year)
flag=-1;
\t输入有误,来校年份大于离校年份:
toSchoolYear<
voidLeaveSchoolTime:
inputYear(constint&
intflag=-1;
while(flag==-1)
###该职工离校的年份###("
~?
flag=judgeLeaveSchoolYear(toSchoolYear);
judgeLeaveSchoolMonth(constint&
toSchoolMonth)
intflag=1;
if(toSchoolMon