资源描述
面向对象设计方法C++课程设计
设计题目
高校人事管理系统
组员姓名
组员学号
1142151229/03/17/34/19/09
专业班级
11计算机科与技术2班
指导教师
李春梅
信息工程学 院 计算机科学与技术 系
2013年 5 月 26 日
面向对象设计方法C++课程设计任务分配
院(系):信息工程学院 教研室:软件教研室
课程设计题目
高校人事管理系统
课 程 设 计目的
(1)要求学生达到熟练掌握C++语言的基本知识和技能;
(2)基本掌握面向对象程序设计的基本思路和方法;
(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
(4)训练用系统的观点和软件开发一般规范进行软件开发,并在此过程中培养严谨的科学态度和良好的工作作风。初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。
(5)熟练掌握C++中类及类模板在程序中的应用,并熟练了解类中函数的调用。
小组成员及任务分配
姓名
学号
承担任务
是否组长
1142151229
类的构建等及运行调试
是
1142151217
删除功能实现
否
1142151203
统计功能实现及封面设计
否
1142151234
添加功能实现
否
1142151219
编辑功能实现
否
1142151209
查询功能实现
否
目录
第一章 需求分析 1
第二章 总体设计 2
2.1系统功能模块 2
2.2类之间的关系 2
第三章 各功能模块实现 3
3.1模块实现及代码 3
3.2运行结果 15
第四章 系统调试 18
第五章 总结与体会 18
参考文献 20
附录 21
课程设计任务书
课 程 名 称 高校人事管理
二 级 学 院 信息工程学院
专 业 班 级 11级计科本(2)班
起 止 日 期 2013年5月20日
指 导 教 师 李 春 梅
1.课程设计目的及意义
目的意义:
(1)掌握面向对象程序设计的基本思路和方法;
(2)了解系统开发的需求分析、类层次设计、模块分解、编码测试、模块组装与整体调试的全过程;
(3)进一步熟悉C++中类的概念、类的封装、继承的实现方式;
(4)学会分析简单的实际问题,并能利用所学的知识建立系统的逻辑结构,学会简单的调试技巧和方法。逐步熟悉面向对象程序设计的方法,养成良好的编程习惯。
2.课程设计任务及成果提交形式(包括课程设计说明书、图纸、实物样品等要求)
(1) 分析课程设计题目的要求
(2) 写出详细设计说明
(3) 编写程序代码,调试程序使其能正确运行
(4) 设计完成的软件要便于操作和使用
(5) 设计完成后提交课程设计报告及测试记录
3.主要参考文献
[1]郑莉、傅仕星编,《C++面向对象程序设计》,清华大学出版社,2003年9月出版
[2]谭浩强编,《C++面向对象程序设计》,清华大学出版社,2005年7月出版
[3]李师贤等译,《C++精髓》,机械工业出版社,2002年8月出版
[4]Davis Chapman,《学用Visual c++ 6.0》,清华大学出版社,2001年7月出版
[5]郑莉、傅仕星编,《C++语言面向对象程序设计习题与实验指导》,清华大学出版社,2003年9月出版。
4.课程设计进度安排
起 止 日 期
工 作 内 容
2013年5月18日-5月20日
分析设计准备阶段: 功能模块分析、控制模块分析、 绘制必要的流程图
2013年5月20日-5月24日
代码设计
2013年5月24日-5月25日
编程调试阶段
2013年5月25日-5月26日
总结报告和书写说明书阶段:编写程序设计说明书
考核
5.成绩考核办法
(1)根据平时上机考勤、表现和进度,教师将每天点名和检查( 10% )
(2)完成基本功能( 30% )。
(3)学生的动手能力,创新能力( 10% )。
(4)总结报告( 50% ) :包括系统设计要求,设计思路,系统功能模块图,系统流程图,
类的层次图(包括类成员列表),调试过程,关键程序代码,总结,参考书目。
系审查意见:
系主任签字:
年 月 日
教学单位意见:
教学单位负责人签字:
年 月 日
第一章 需求分析
高校人事管理,高校在有职人员(行政人员、教师、一般员工)、退休人员、返聘人员和临时工。现在,需要存储这些人员的人事档案信息:编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间。
要求:
1) 添加删除功能:能根据学院人事的变动情况,添加删除记录;
2) 查询功能:能根据编号和姓名进行查询;
3) 编辑功能(高级):根据查询对相应的记录进行修改,并存储;
4) 统计功能:能根据多种参数进行人员的统计(在职人数、党员人数、女工人数、高学历高职称人数);
5) 保存功能:能对输入的数据进行相应的存储,要求重载插入和提取符以完成数据的保存和打开。
6) 人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。
第二章 总体设计
2.1系统功能模块
输出选择
退出操作
统计功能
编辑功能
添加功能
删除功能
查询功能
按编号查找
按姓名查找
图2.1系统功能模块
2.2类之间的关系
定义了8个类,分别为人员类(personnel类),临时工类(casuallaborer类),进入时间类(cometime类),在职人员类(incumbency类),退休时间类(retiretime类),退休人员类(retiree类),返聘时间类(retime类),返聘人员类(returnee类)等。同时又定义一个school类,在里面实现数据的添加、删除、修改、查找、显示和退出。
Public:
setcasuallaborer();
casuallaborerprint();
Protected:
int number;
char party[20];
char study[30];
char pos[20];
Public: setincumbency();
incumbencyprint();
incumbency();
Protected:
int day;
int year;
int month:
Public:
setretiretime( );
retiretimeprint( );
Protected:
int month;
int year;
int day;
Public:
setretime( );
retimeprint( );
Public:
setreturnee();
returneeprint();
9=jhn
Public:
retireeprint();
setretiree();
Protected:
int month;
int year;
int day;
Public:
cometime( );
setcometime( );
人员类
Protected:
char name[20];
char sex[10];
int age;
Public:
setpersonnel( );
personnelprint();
进入时间类
临时工类
退休时间类
返聘时间类
在职员工类
退休人员类
返聘人员类
第三章 各功能模块实现
3.1 模块实现及代码
删除功能:
#include"1.h"
school::dele()
{
extern int I,J,K,Z;
int i;
int number;
int a;
system("cls");
A: cout<<"★★★★★★★★★welcome★★★★★★★★★★"<<endl;
cout<<"\t* 【1】按编号删除 *"<<endl;
cout<<"\t* 【0】返回 *\n ";
cout<<"〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓从0-1中选择功能项:";
cin>>a;
switch(a)
{
case 1:cout<<"请输入要删除的编号:";
cin>>number;
for(i=0;i<J;i++)
if(incumb[i].getnumber2()-number==0)
{
cout<<incumb[i].incumbencyprint()<<"被删除"<<endl;
for(i;i<J;i++)
incumb[i]=incumb[i+1];
J--;
}
for(i=0;i<K;i++)
if(reti[i].getnumber3()-number==0)
{
cout<<reti[i].retireeprint()<<"被删除"<<endl;
for(i;i<K;i++)
reti[i]=reti[i+1];
K--;
}
for(i=0;i<Z;i++)
if(retur[i].getnumber4()-number==0)
{
cout<<retur[i].returneeprint()<<"被删除:"<<endl;
for(i;i<Z;i++)
retur[i]=retur[i+1];
Z--;
}goto A;
case 0:break;
}
}
添加功能:
#include"1.h"
school::add()
{
int a;
extern int I,J,K,Z;
A: cout<<"★★★★★★★★★welcome★★★★★★★★★★"<<endl;
cout<<"\t* 【1】添加临时工信息 *"<<endl;
cout<<"\t* 【2】添加在职员工信息 *"<<endl;
cout<<"\t* 【3】添加退休人员信息 *"<<endl;
cout<<"\t* 【4】添加人员的信息 *"<<endl;
cout<<"\t* 【0】返回 *\n ";
cout<<"〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓从0-4中选择功能项:";
B:cin>>a;
switch(a)
{
case 1:{
casuall[I]. setcasuallaborer();
I++;
}goto B;
case 2:{
incumb[J].setincumbency();
J++;
}
goto B;
case 3:{
reti[K].setretiree();
K++;
}
goto B;
case 4:{
retur[Z].setreturnee();
Z++;
}
goto B;
case 0:break;
default:cout<<"选择有误,请重新选择!";goto A;
}
}
统计功能:
#include"1.h"
school::tongji()
{
extern int I,J,K,Z;
int a;
int i=0;
system("cls");
A:int j=0;
cout<<"★★★★★★★★★welcome★★★★★★★★★★"<<endl;
cout<<"\t* 【1】在职人员数统计 *"<<endl;
cout<<"\t* 【2】党员人数统计 *"<<endl;
cout<<"\t* 【3】女工人数统计 * "<<endl;
cout<<"\t* 【4】博士生人数统计 *"<<endl;
cout<<"\t* 【0】返回 *"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓从0-4中选择功能项:";
cin>>a;
switch(a)
{
case 1:for(i=0;i<J;i++)
incumb[i].incumbencyprint();
for(i=0;i<Z;i++)
retur[i].returneeprint();
j=J+Z;
cout<<"在职人数为:"<<j<<endl;goto A;
case 2:for(i=0;i<J;i++)
if(strcmp(incumb[i].getparty2(),"党员")==0)
{
incumb[i].incumbencyprint();
j++;
}
for(i=0;i<K;i++)
if(strcmp(reti[i].getparty2(),"党员")==0)
{
reti[i].retireeprint();
j++;
}
for(i=0;i<Z;i++)
if(strcmp(retur[i].getparty2(),"党员")==0)
{
retur[i].retimeprint();
j++;
}
cout<<"党员人数为:"<<j<<endl;goto A;
case 3:for(i=0;i<I;i++)
if(strcmp(casuall[i].getsex(),"女")==0)
{
casuall[i].casuallaborerprint();
j++;
}
for(i=0;i<J;i++)
if(strcmp(incumb[i].getsex(),"女")==0)
{
incumb[i].incumbencyprint();
j++;
}
for(i=0;i<K;i++)
if(strcmp(reti[i].getsex(),"女")==0)
{
reti[i].retireeprint();
j++;
}
for(i=0;i<Z;i++)
if(strcmp(retur[i].getsex(),"女")==0)
{
retur[i].retimeprint();
j++;
}
cout<<"女员人数为:"<<j<<endl;goto A;
case 4: for(i=0;i<J;i++)
if(strcmp(incumb[i].getstudy2(),"博士生")==0)
{
incumb[i].incumbencyprint();
j++;
}
for(i=0;i<K;i++)
if(strcmp(reti[i].getstudy3(),"博士生")==0)
{
reti[i].retireeprint();
j++;
}
for(i=0;i<Z;i++)
if(strcmp(retur[i].getstudy4(),"博士生")==0)
{
retur[i].retimeprint();
j++;
}
cout<<"博士生人数为:"<<j<<endl;goto A;
default:cout<<"选择有误,请重新选择:";goto A;
case 0:break;
}
}
编辑功能:
#include"1.h"
school::push()
{
extern int I,J,K,Z;
int e;
B:system("cls");
cout<<"★★★★★★★★★welcome★★★★★★★★★★"<<endl;
cout<<"\t* 【1】录入临时工信息 *"<<endl;
cout<<"\t* 【2】录入在职员工信息 *"<<endl;
cout<<"\t* 【3】录入退休人员信息 *"<<endl;
cout<<"\t* 【4】录入返聘人员的信息 *"<<endl;
cout<<"\t* 【0】返回 *\n ";
cout<<"〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓从0-4中选择功能项:";
A:cin>>e;
switch(e)
{
case 1:{
casuall[I]. setcasuallaborer();
I++;
}goto B;
case 2:{
incumb[J].setincumbency();
J++;
}
goto B;
case 3:{
reti[K].setretiree();
K++;
}
goto B;
case 4:{
retur[Z].setreturnee();
Z++;
}
goto B;
case 0:break;
default:cout<<"选择有误,请重新选择!";goto A;
}
}
查询功能:
#include"1.h"
void chose()
{ cout<<"★★★★★★★★★welcome★★★★★★★★★★"<<endl;
cout<<"\t* 【1】姓名查找 *"<<endl;
cout<<"\t* 【2】编号查找 *"<<endl;
cout<<"\t* 【0】返回 *\n ";
cout<<"〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓从0-2中选择功能项:";
}
school::find()
{
int a;
int i;
extern int I,J,K,Z;
char name[20];
int number;
E: int j=0;
system("cls");
cout<<"★★★★★★★★★welcome★★★★★★★★★★"<<endl;
cout<<"\t* 【1】模糊查找 *"<<endl;
cout<<"\t* 【2】在职员工中查找 *"<<endl;
cout<<"\t* 【3】退休人员中查找 *"<<endl;
cout<<"\t* 【4】返聘人员中查找 *"<<endl;
cout<<"\t* 【0】返回 *\n ";
cout<<"〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓从0-4中选择功能项:";
cin>>a;
switch(a)
{
case 1:chose();
A:cin>>a;
switch(a)
{
case 1:cout<<"请输入要查找人的姓名:";
cin>>name;
for(i=0;i<I;i++)
if(strcmp(casuall[i].getname(),name)==0)
{
j++;
incumb[i].incumbencyprint();
}
for(i=0;i<J;i++)
if(strcmp(incumb[i].getname2(),name)==0)
{
j++;
incumb[i].incumbencyprint();
}
for(i=0;i<K;i++)
if(strcmp(reti[i].getname3(),name)==0)
{
j++;
reti[i].retireeprint();
}
for(i=0;i<Z;i++)
if(strcmp(retur[i].getname4(),name)==0)
{
j++;
retur[i].returneeprint();
}
if(j==0)
cout<<"没有找到该人:"<<endl;
goto A;
case 2:cout<<"请输入要查找人的编号:";
cin>>number;
for(i=0;i<J;i++)
if(incumb[i].getnumber2()-number==0)
{ j++;
incumb[i].incumbencyprint();
}
for(i=0;i<K;i++)
if(reti[i].getnumber3()-number==0)
{
j++;
reti[i].retireeprint();
}
for(i=0;i<Z;i++)
if(retur[i].getnumber4()-number==0)
{
j++;
retur[i].returneeprint();
}
if(j==0)
cout<<"没有此编号的人";
goto A;
case 0:goto E;
}
case 2: chose();
B: cin>>a;
switch(a)
{
case 1:cout<<"请输入要查找人的姓名:";
cin>>name;
for(i=0;i<J;i++)
if(strcmp(incumb[i].getname2(),name)==0)
{
j++;
incumb[i].incumbencyprint();
}
if(j==0)
cout<<"没有找到该人:"<<endl;
goto B;
case 2:cout<<"请输入要查找人的编号:";
cin>>number;
for(i=0;i<J;i++)
if(incumb[i].getnumber2()-number==0)
{
j++;
incumb[i].incumbencyprint();
}
if(j==0)
cout<<"没有此编号的人";
goto B;
default:cout<<"输入有误,请重新输入:";goto B;
case 0:goto E;
}
case 3:chose();
C:cin>>a;
switch(a)
{
case 1:cout<<"请输入要查找人的姓名:";
cin>>name;
for(i=0;i<K;i++)
if(strcmp(reti[i].getname3(),name)==0)
{
j++;
reti[i].retireeprint();
}
if(j==0)
cout<<"没有找到该人:"<<endl;
goto C;
case 2:cout<<"请输入要查找人的编号:";
cin>>number;
for(i=0;i<K;i++)
if(reti[i].getnumber3()-number==0)
{
j++;
reti[i].retireeprint();
}
if(j==0)
cout<<"没有此编号的人";
goto C;
default:cout<<"输入有误,请重新输入:";goto C;
case 0:goto E;
}
case 4:chose();
D:cin>>a;
switch(a)
{
case 1:cout<<"请输入要查找人的姓名:";
cin>>name;
for(i=0;i<Z;i++)
if(strcmp(retur[i].getname4(),name)==0)
{
j++;
retur[i].returneeprint();
}
if(j==0)
cout<<"没有找到该人:"<<endl;
goto D;
case 2:cout<<"请输入要查找人的编号:";
cin>>number;
for(i=0;i<Z;i++)
if(retur[i].getnumber4()-number==0)
{
j++;
retur[i].returneeprint();
}
if(j==0)
cout<<"没有此编号的人";
goto D;
default:cout<<"输入有误,请重新输入:";goto D;
case 0:goto E;
}
case 0:break;
default:cout<<"输入有误,请重新输入:";goto E;
}
}
3.2 运行结果
1.开始菜单界面:
图3.1开始菜单界面
2.添加人员信息界面:
图3.2添加人员信息界面
3.统计人员信息界面:
图3.3统计人员信息界面
4.人员信息查找界面:
图3.4人员信息查找界面
5.人员信息删除界面:
图3.5人员信息删除界面
6.人员修改界面:
图3.6人员修改界面
第四章 系统调试
系统调试:
在建立全局变量时,无法正常使用,后添加extern才实现功能的使用。
通过对程序的调试,发现很多问题只有通过调试以后才能被找到和发现,才能更好的美化和优化,是程序看起来更完美,让使用者更放心
第五章 总结与体会
通过本次课程设计,让我对C++这门学科对有了进一步的认识,熟练掌握了类及类模板的应用。以前对该课程的恐惧感都以消失,任何事情没有做不到只有愿不愿意去做。
并且在本次课程设计的过程中,让我进一步认识到了团队的力量,只有团结才能发挥出一个集体的力量。一个人的力量真的好有限,即使个人能力再强,做一个大点的项目,也会力不从心。只有分工协作才能将事办得越快越好。通过这次课程设计,会为我们以后进入社会提供一定的经验。
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。
回顾起此次课程设计,至今我仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。编写的过程也是我们发现错误的过程,毕竟我们自己专业知识掌握的不够,在设计中走了很多弯路,刚开始是根本无从下手,不知道要干嘛,如果平时课余时间多加强对这些专业知识的学习,那么在这次课程设计中将会少走很多的弯路。
参考文献
[1]郑莉、傅仕星编,《C++面向对象程序设计》,清华大学出版社,2003年9月出版
[2]谭浩强编,《C++面向对象程序设计》,清华大学出版社,2005年7月出版
[3]李师贤等译,《C++精髓》,机械工业出版社,2002年8月出版
[4]Davis Chapman,《学用Visual c++ 6.0》,清华大学出版社,2001年7月出版
[5]郑莉、傅仕星编,《C++语言面向对象程序设计习题与实验指导》,清华大学出版社,2003年9月出版。
[6]严蔚敏,吴伟民.《数据结构(C语言版)》.清华大学出版社.
[7]严蔚敏,吴伟民.《数据结构题集(C语言版)》.清华大学出版社.
[8]《DATA STRUCTURE WITH C++》. William Ford,William Topp .清华大学出版社(影印版).附录
源程序:
//1.h
#include<iostream>
#include<string.h>
using namespace std;
class personnel //人员类
{
public:
setpersonnel();
personnelprint();//人员打印
char *getname1()//获取名字
{
return name;
}
char *getsex()//获取性别
{
return sex;
}
protected:
char name[20];
char sex[10];
int age;
};
///////////////////////////////////////////////
class cometime//进入时间类
{
public:
cometime()
{
year=0;
}
setcometime();
cometimeprint();//进入时间打印
protected:
int year;
int month;
int day;
};
/////////////////////////////////
class retime//返聘时间类
{
public:
setretime();
retimeprint();//返聘时间打印
protected:
int year;
int month;
int day;
};
//////////////////////////////////////////////
class retiretime//退休时间类
{
public:
setretiretime();
retiretimeprint();//退休时间打印
protected:
int year;
int month;
int day;
};
展开阅读全文