资源描述
面向对象设计方法C++
课 程 设 计
设计题目
高校人事管理系统
成员姓名
专业班级
11计算机科与技术2班
指导教师
信息工程学 院 计算机科学与技术 系
2023年 5 月 日
面向对象设计方法C++课程设计任务分派
院(系):信息工程学院 教研室:软件教研室
课程设计题目
高校人事管理系统
课 程 设 计目的
(1)规定学生达成纯熟掌握C++语言的基本知识和技能;
(2)基本掌握面向对象程序设计的基本思绪和方法;
(3)可以运用所学的基本知识和技能,解决简朴的面向对象程序设计问题。
(4)训练用系统的观点和软件开发一般规范进行软件开发,并在此过程中培养严谨的科学态度和良好的工作作风。初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。
(5)纯熟掌握C++中类及类模板在程序中的应用,并纯熟了解类中函数的调用。
小组成员及任务分派
姓名
学号
承担任务
是否组长
目录
第一章 需求分析 1
第二章 总体设计 2
2.1系统功能模块 2
2.2类之间的关系 2
第三章 各功能模块实现 3
3.1模块实现及代码 3
3.2运营结果 15
第四章 系统调试 18
第五章 总结与体会 18
参考文献 20
附录 21
第一章 需求分析
高校人事管理,高校在有职人员(行政人员、教师、一般员工)、退休人员、返聘人员和临时工。现在,需要存储这些人员的人事档案信息:编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间。
规定:
1) 添加删除功能:能根据学院人事的变动情况,添加删除记录;
2) 查询功能:能根据编号和姓名进行查询;
3) 编辑功能(高级):根据查询对相应的记录进行修改,并存储;
4) 记录功能:能根据多种参数进行人员的记录(在职人数、党员人数、女工人数、高学历高职称人数);
5) 保存功能:能对输入的数据进行相应的存储,规定重载插入和提取符以完毕数据的保存和打开。
6) 人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加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. 在建立全局变量时,无法正常使用,后添加extern才实现功能的使用。
通过对程序的调试,发现很多问题只有通过调试以后才干被找到和发现,才干更好的美化和优化,是程序看起来更完美,让使用者更放心
第五章 总结与体会
通过本次课程设计,让我对C++这门学科对有了进一步的结识,纯熟掌握了类及类模板的应用。以前对该课程的恐惊感都以消失,任何事情没有做不到只有愿不乐意去做。
刚开始接到该题,心中的确充满困惑。但是在图书馆和网上找了一些资料看了后,便觉得思绪就在眼前了,之前但是就是由于对该课程的恐惊而产生了一定的心里影响而已。
之后凭借那闪现在眼前的点点思绪,慢慢在琢磨,终于想出了大体的程序内容。然后一个一个函数的思考,一步一步的编写,调试,做起来也就越来越顺手了。通过我的反复思考,程序中的错误得到顺利解决。函数功能也得到了进一步的完善。
并且在本次课程设计的过程中,让我进一步结识到了团队的力量,只有团结才干发挥出一个集体的力量。一个人的力量真的好有限,即使个人能力再强,做一个大点的项目,也会力不从心。只有分工协作才干将事办得越快越好。通过这次课程设计,会为我们以后进入社会提供一定的经验。
我们相信在此后的学习真的我们会更加努力,积累经验。使自己在编程等各方面得到提高。
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。
回顾起本次课程设计,至今我仍感慨颇多,的确,自从拿到题目到完毕整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,并且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才干真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中碰到问题,这毕竟独立做的,难免会碰到过各种各样的问题,同时在设计的过程中发现了自己的局限性之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
同时,对给过我帮助的所有同学和各位指导老师再次表达忠心的感谢!。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才干真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。编写的过程也是我们发现错误的过程,毕竟我们自己专业知识掌握的不够,在设计中走了很多弯路,刚开始是主线无从下手,不知道要干嘛,假如平时课余时间多加强对这些专业知识的学习,那么在这次课程设计中将会少走很多的弯路。
虽然程序完毕了,但我感觉里面也许尚有很多不完善的地方,通过这次动手设计吧我还是希望自己以后办事的时候要认真,仔细,考虑周全。这段时间里,我又学到了更多C++ 程序类知识,同时我也被提醒以后办事的时候要认真,仔细,考虑周全。
参考文献
[1]郑莉、傅仕星编,《C++面向对象程序设计》,清华大学出版社,2023年9月出版
[2]谭浩强编,《C++面向对象程序设计》,清华大学出版社,2023年7月出版
[3]李师贤等译,《C++精髓》,机械工业出版社,2023年8月出版
[4]Davis Chapman,《学用Visual c++ 6.0》,清华大学出版社,2023年7月出版
[5]郑莉、傅仕星编,《C++语言面向对象程序设计习题与实验指导》,清华大学出版社,2023年9月出版。
附录
源程序:
//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;
};
/////////////////////////////////////
class casuallaborer:public personnel,public cometime//临时工类
{
public:
setcasuallaborer();//临时工初始化
casuallaborerprint();//临时工信息打印
char *getname()//获取姓名
{
return name;
}
char *getsex()//获取性别
{
return sex;
}
};
///////////////////////////////////////////////////////////
class incumbency:public personnel,public cometime //在职人员类
{
public:
setincumbency();//在职人员初始化
incumbencyprint();//在职人员信息打印
incumbency()
{
number=0;
}
setnumber(int number1)
{
number=number1;
}
char *getname2()//获取姓名
{
return name;
}
int getnumber2()//获取编号
{
return number;
}
char *getparty2()//获取政治面貌
{
return party;
}
char *getstudy2()//获取最高学历
{
return study;
}
char *getpos2()//获取职务
{
return pos;
}
char *getsex()//获取性别
{
return sex;
}
protected:
int number;//编号
char party[20];//政治面貌
char study[30]; //最高学历
char pos[20];//职务
};
/////////////////////////////////////////////
class retiree:public incumbency,public retiretime//退休人员类
{
public:
retireeprint();//退休人员信息打印
setretiree();//退休人员初始化
int getnumber3()//获取编号
{
return number;
}
char *getname3()//获取姓名
{
return name;
}
char *getparty3()//获取政治面貌
{
return party;
}
char *getstudy3()//获取最高学历
{
return study;
}
char *getpos3()//获取职务
{
return pos;
}
char *getsex()
{
return sex;
}
};
////////////////////////////////////////////////////////
class returne
展开阅读全文