资源描述
课 程 设 计 报 告
课程名称 面向对象程序设计
课题名称 高校人事管理系统
专 业 通信工程
班 级 通信1101
学 号 030201
姓 名
指引教师
12 月 22 日
湖南工程学院
课 程 设 计 任 务 书
课程名称 面向对象程序设计
课 题 高校人事管理系统
专业班级 通信工程
学生姓名
学 号
指引教师
审 批
任务书下达日期 年 12 月 22 日
任务完毕日期 年 1 月 6 日
一、设计内容与设计规定
1.课程设计目:
面向对象程序设计课程设计是集中实践性环节之一,是学习完《面向对象程序设计》课程后进行一次全面综合练习。规定学生达到纯熟掌握C++语言基本知识和技能;基本掌握面向对象程序设计思想和办法;可以运用所学基本知识和技能,解决简朴面向对象程序设计问题,从而提高动手编程解决实际问题能力。
2.课题题目
⑴公司库存管理系统
⑵高校学籍管理系统
⑶高校工资管理系统
⑷高校人事管理系统
⑸文献加密管理系统
3.设计规定:
⑴设计课题题目:第5个课题是扩展课题,有能力完毕同窗可以选取。别的每位同窗依照自己学号除以4所得余数加一选取相应题号课题。换题者不记成绩。
⑵依照自己相应课题完毕如下重要工作:①完毕系统需求分析:涉及系统设计目与意义;系统功能需求(系统流程图);输入输出规定。②完毕系统总体设计:涉及系统功能分析;系统功能模块划分与设计(系统功能模块图)。③完毕系统详细设计:涉及数据库需求分析;类层次图;界面设计与各功能模块实现。④系统调试:调试浮现重要问题,编译语法错误及修改,重点是运营逻辑问题修改和调节。⑤使用阐明书及编程体会:阐明如何使用你编写程序,详细列出每一步操作环节。⑥核心源程序(带注释)
⑶按规定格式完毕课程设计报告,将其打印稿(A4纸)上交给教师存档。
⑷不得抄袭她人程序、课程设计报告,每个人应体现自己个性设计
二、进度安排
第 17 周 星期四 14时:00分——18时:00分
星期五 19时:分——21时:00分
第 18 周 星期三 19时:00分——21时:00分
星期四 19时:00分——21时:00分
三. 实验内容
课题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. 总体设计 2
3. 详细设计 3
3.1 功能提示 4
3.2 添加人员功能 5
3.3 查询功能 7
3.4 记录功能 9
3.5 编辑功能 10
4. 系统调试 11
5. 成果分析 12
6. 总结 13
7. 附录 14
1. 系统需求分析
课题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)完毕系统总结报告以及系统使用阐明书。
2. 总体设计
1.系统功能分析
(1)资料维护:系统维护涉及对各种表记录修改、删除、添加等操作。
(2)资料维护:对数据表中信息进行浏览。
(3)系统查询:可以按职工编号、姓名等有关信息进行详细或模糊查询。
(4)报表记录:涉及记录职工编号、职工姓名、职工性别、所在部门、职工年龄、工作日期、基本工资、职称、职务和简历等字段。
(5)其他操作:系统封面、人性化提示信息。
2.系统功能模块划分与设计
系统功能模块划分:数据查找与浏览、数据修改、报表显示和系统封面构成。
系统各个功能大体框架如下:
开始
管理系统主页面
分别输入要输入人员信息
添加完最后一项之后
选取要修改人员信息
修改完之后
选取要删除人员信息
删除之后
图2.1 系统运营构造框图
3. 详细设计
功能选取界面
退出
显示所有信息
添加人员信息
删除人员信息
查询人员信息
编辑人员信息
记录人员数量
图3.1 系统功能构造框图
3.1
当咱们运营程序时,会浮现如下功能选取提示界面,代码已经附上。
图3.2 主页面图
某些代码如下:
{
person pjk;
int c;
cout<<endl;
cout<<"---------------------高校人事管理系统-----------------------------"<<endl;
cout<<"* *"<<endl;
cout<<"* 1--添加人员信息并保存 *"<<endl;
cout<<"* 2--删除人员信息 *"<<endl;
cout<<"* 3--修改人员信息 *"<<endl;
cout<<"* 4--查询人员信息 *"<<endl;
cout<<"* 5--记录人员信息 *"<<endl;
cout<<"* 6--显示所有信息 *"<<endl;
cout<<"* 7--退出 *"<<endl;
cout<<"------------------------------------------------------------------"<<endl;
cout<<" 请选取(1-7): "<<endl;
cin>>c;
switch(c)
{
case 1:pjk.tjry();menu();break;
case 2:pjk.shancu();menu();break;
case 6:pjk.output();menu();break;
case 7:exit(1);break;
}
}
void main()
{
menu();
}
3.2
按提示输入序号,当输入1时,会浮现要操纵者输入有关信息。
图3.3 添加人员图
该图执行代码如下,新增人员模块,实现新人员信息添加功能:
void person::tjry() //
{
int v,l=1;
char type2[20];char name2[20];char sex2[10];char age2[10];char zhiwu2[20];
char zhichen2[20];char zzmm2[20];char zgxl2[20];char rzsj2[20];char lysj2[30];
cout<<"请输入要添加人数"<<endl;
cin>>k;
p[1].getbianhao()=pp[k1].getbianhao();
v=bianhao;
for(int i=v+1;i<=v+k;i++)
{
cout<<"请输入第"<<l<<"个人信息"<<endl;
cout<<"人员类型";cin>>type2;
cout<<"姓名:";cin>>name2;
cout<<"性别:";cin>>sex2;
cout<<"年龄:";cin>>age2;
cout<<"职务:"; cin>>zhiwu2;
cout<<"职称:"; cin>>zhichen2;
cout<<"政治面貌:";cin>>zzmm2;
cout<<"最高学历:"; cin>>zgxl2;
cout<<"任职时间:"; cin>>rzsj2;
cout<<"来院时间:"; cin>>lysj2;
p[i].setperson(type2,name2,sex2,age2,zhiwu2,zhichen2,zzmm2,zgxl2,rzsj2,lysj2);
l++;
}
}
3.3
图3.4 查询功能图
执行代码如下:
人员查询模块,本模块提供查询方式涉及按编号和姓名2种,以便顾客查询。
void person::find() //
{
cout<<"1:按编号查询--2:按姓名查询-请选取(1-2)"<<endl;
int m;
cin>>m;
while(m<1||m>2)
{
cout<<"请重新输入(1-2)"<<endl;cin>>m;
}
switch(m)
{
case 1:
{
.
.
.
while(!filem.eof())
{
filem>>pp[k].getnum();
filem>>pp[k].gettype();
filem>>pp[k].getname();
filem>>pp[k].getsex();
filem>>pp[k].getage();
if(strcmp(pp[k].getnum(),n)==0)
{
.
.
.
.
.
<<setw(10)<<"来院时间"<<endl;
while(!filem.eof())
{
filem>>pp[k].getnum();
.
.
.
if(strcmp(pp[k].getname(),nname)==0)
{
cout<<pp[k].getnum()<<setw(9)<<pp[k].gettype()<<setw(5)<<pp[k].getname()
<<setw(5)<<pp[k].getsex()<<setw(5)<<pp[k].getage()
<<setw(5)<<pp[k].getzhiwu()<<setw(5)<<pp[k].getzhichen()
<<setw(9)<<pp[k].getzzmm()<<setw(10)<<pp[k].getzgxl()
<<setw(10)<<pp[k].getrzsj()<<setw(10)<<pp[k].getlysj()<<endl;break;}
k++;
if(filem.eof())
{
cout<<endl;
cout<<" 警告:没有要查找人!!!!!!!!!!";}
}
filem.close();
}
break;
}
}
3.4
图3.5 记录功能图
代码如下:
人数记录模块,实现总人数记录功能。
void person::tongji() //
{
int a=0;int b=0;int c=0;int d=0;
int k=1;
ifstream filem("添加人员.txt",ios_base::in);
while(!filem.eof())
{
filem>>pp[k].getnum();
filem>>pp[k].gettype();
.
.
.
filem>>pp[k].getzzmm();
filem>>pp[k].getzgxl();
c++;
if(strcmp(pp[k].getzgxl(),"boshi")==0)
d++;
k++;
}
filem.close();
cout<<"在职人数"<<setw(12)<<"党员人数"<<setw(12)<<"女工人数"<<setw(12)<<"高学历人数"<<endl;
cout<<a<<setw(12)<<b<<setw(12)<<c<<setw(12)<<d<<endl;
}
3.5
修改运营成果。
图3.6 修改功能图
该运营成果代码在此略掉,已在附录中补上。
4. 系统调试
1. 程序代码编写过程中,缺省分号,中括号不成对等基本格式错误,系统提示错误,此时做有关修改添加即可。
如:
图4.1 缺少分号报错图
2. 缺少返回类型,如
图4.2 缺返回类型报错图
3.在函数调用时,出先函数未知错误,因素是函数调用在声明前,所有要在函数调用迈进行声明。
程序运营界面:
图4.3 程序提示界面图
图4.4 添加人员功能图
4.error C2065:'setw' :undeclared identifier
在找预编译头文献途径时出错,c++中setw(n)设立域宽不能调用,要加上头文献
#include<iomanip>
5.error C:unknown character '0xa3'
不结识字符'0xa3'。(普通是中文或中文标点符号)。
6.error C2057:expected constant expression
但愿是常量表达式。(普通出当前switch语句case分支中)。
7.error C2143:syntax error:missing ':' before '{'
句法错误:“{”前缺少“;”。
5. 成果分析
本程序能实现人员信息以.txt格式保存,使用到指针为实时开辟空间提供了以便。基本实现了题目规定各个功能模块,运营界面提示做一目了然,为使用者提供了以便。本程序局限性之处就是功能显示界面不够完美,显示有点拥挤感觉。
一种程序员精心设计程序很难为其她程序所用。界面比较单一,功能相对较少,只能逐个增长信息,不能批量增长。本代码较好实现了人员添加保存,删除,查询等功能。
6. 总结
本次课程设计让我初步体会到C++面向对象设计特性,该语言能编写建立对象,QQ应当就使用到了C++。
通过这次课程设计自己动手编写了人事管理系统在编写过程中遇到了许多问题在解决问题同步对类、单链表、文献等进一步加深了理解强化了在上课学知识对自己提高很大。人事管理系统是典型信息管理系统涉及东西诸多涉及添加人员查询人员资料删除成员资料等。这次设计选用Win-TC通过努力较好完毕了自己设计同步理解到自己局限性因此咱们还要通过不断学习不断提高自己。总之,通过这次课程设计,我收获颇丰,相信会为自己后来学习和工作带来很大好处。最重要还是激发了我编程兴趣和热情,让我从一种只懂理论变成了能做某些小型程序,让我对编程更加热爱了。整体地评价这次课程设计,我以为收获很大,正如上面所说那样,通过课程设计,既复习了此前旧知识,又学到了某些新知识;设计增强了咱们用所学知识去解决详细问题能力,进一步培养了咱们独立思考问题和解决问题能力。特别是学会了在Visual C++ 集成开发环境中如何调试程序办法。固然,教师悉心指引和同窗协助也是不可忽视,在此感谢本次课程设计中所有辅导教师对我关怀和协助,诚心诚意感谢她们对我勉励与辅导,是她们在我迷茫时候给了我些许提示,激发了我编程灵感;尚有,我在此也十分感谢本次课程设计中同窗们对我协助。
7. 附录
程序源代码如下:
#include<iostream>
#include<fstream>
#include<cstring>
#include<iomanip>
using namespace std;
int k;
class person
{
private:
char num[10];
char type[20];
char name[20];
char sex[10];
char age[10];
char zhiwu[20];
char zhichen[20];
char zzmm[20];
char zgxl[20];
char rzsj[20];
char lysj[30];
static int bianhao;
public:
void setperson(char *type1,char *name1,char *sex1,char *age1,char *zhiwu1,
char *zhichen1,char *zzmm1,char *zgxl1,char *rzsj1,char *lysj1);
static int& getbianhao() {return bianhao;}
char * gettype() { return type;}
char * getname() {return name;}
char * getsex() {return sex;}
char * getage() {return age;}
char * getzhiwu() {return zhiwu;}
char * getzhichen() {return zhichen;}
char * getzzmm() {return zzmm;}
char * getzgxl() {return zgxl;}
char * getrzsj() {return rzsj;}
char * getlysj() {return lysj;}
char * getnum() {return num;}
void tjry();
void find();
void output();
void shancu();
void xiugai();
void tongji();
};
person p[100];
person pp[100];
int k1;
int person::bianhao=0;
void person::setperson(char *type1,
char *name1,
char *sex1,
char *age1,
char *zhiwu1,
char *zhichen1,
char *zzmm1,
char *zgxl1,
char *rzsj1,
char *lysj1
)
{
int static j=1;
strcpy(type,type1);
strcpy(name,name1);
strcpy(sex,sex1);
strcpy(age,age1);
strcpy(zhiwu,zhiwu1);
strcpy(zhichen,zhichen1);
strcpy(zzmm,zzmm1);
strcpy(zgxl,zgxl1);
strcpy(rzsj,rzsj1);
strcpy(lysj,lysj1);
bianhao++;
ofstream file("添加人员.txt",ios_base::app);
file<<p[j].getbianhao()<<endl;
file<<p[j].gettype()<<endl;
file<<p[j].getname()<<endl;
file<<p[j].getsex()<<endl;
file<<p[j].getage()<<endl;
file<<p[j].getzhiwu()<<endl;
file<<p[j].getzhichen()<<endl;
file<<p[j].getzzmm()<<endl;
file<<p[j].getzgxl()<<endl;
file<<p[j].getrzsj()<<endl;
file<<p[j].getlysj()<<endl;
j++;
file.close();
}
void person::tongji() //
{
int a=0;int b=0;int c=0;int d=0;
int k=1;
ifstream filem("添加人员.txt",ios_base::in);
while(!filem.eof())
{
filem>>pp[k].getnum();
filem>>pp[k].gettype();
filem>>pp[k].getname();
filem>>pp[k].getsex();
filem>>pp[k].getage();
filem>>pp[k].getzhiwu();
filem>>pp[k].getzhichen();
filem>>pp[k].getzzmm();
filem>>pp[k].getzgxl();
filem>>pp[k].getrzsj();
filem>>pp[k].getlysj();
if(strcmp(pp[k].gettype(),"行政人员")==0||strcmp(pp[k].gettype(),"教师")==0||
strcmp(pp[k].gettype(),"普通员工")==0)
a++;
if(strcmp(pp[k].getzzmm(),"党员")==0)
b++;
if(strcmp(pp[k].getsex(),"nv")==0)
c++;
if(strcmp(pp[k].getzgxl(),"boshi")==0)
d++;
k++;
}
filem.close();
cout<<"在职人数"<<setw(12)<<"党员人数"<<setw(12)<<"女工人数"<<setw(12)<<"高学历人数"<<endl;
cout<<a<<setw(12)<<b<<setw(12)<<c<<setw(12)<<d<<endl;
}
void person::xiugai() //
{
int k=1;
ifstream filem("添加人员.txt",ios_base::in);
while(!filem.eof())
{
filem>>pp[k].getnum();
filem>>pp[k].gettype();
filem>>pp[k].getname();
filem>>pp[k].getsex();
filem>>pp[k].getage();
filem>>pp[k].getzhiwu();
filem>>pp[k].getzhichen();
filem>>pp[k].getzzmm();
filem>>pp[k].getzgxl();
filem>>pp[k].getrzsj();
filem>>pp[k].getlysj();
k++;
}
filem.close();
cout<<"请输入要修改人编号:"<<endl;
int x,y;
cin>>x;
cout<<"请输入编号为"<<x<<"人需要修改项目代号:"<<endl;
cout<<"1:编号-2:人员类型-3:姓名-4:性别-5:年龄-6:职务-7:职称-8:政治面貌-9:最高学历-10:任职时间-11:来院时间"<<endl;
cin>>y;
switch(y)
{
case 1:
{cout<<"请输入新编号";cin>>pp[x].getnum() ;}
break;
case 2:
{cout<<"请输入新人员类型";cin>>pp[x].gettype();}
break;
case 3:
{cout<<"请输入新姓名";cin>>pp[x].getname();}
break;
case 4:
{cout<<"请输入新性别";cin>>pp[x].getsex();}
break;
case 5:
{cout<<"请输入新年龄";cin>>pp[x].getage();}
break;
case 6:
{cout<<"请输入新职务";cin>>pp[x].getzhiwu();}
break;
case 7:
{cout<<"请输入新职称";cin>>pp[x].getzhichen();}
break;
case 8:
{cout<<"请输入新政治面貌";cin>>pp[x].getzzmm();}
break;
case 9:
{cout<<"请输入新最高学历";cin>>pp[x].getzgxl();}
break;
case 10:
{cout<<"请输入新任职时间";cin>>pp[x].getrzsj();}
break;
case 11:
{cout<<"请输入新来院时间";cin>>pp[x].getlysj();}
break;
}
ofstream file1("添加人员.txt",ios_base::trunc);
for(k=1;k<=bianhao;k++)
{
file1<<pp[k].getnum()<<endl;
file1<<pp[k].gettype()<<endl;
file1<<pp[k].getname()<<endl;
file1<<pp[k].getsex()<<endl;
file1<<pp[k].getage()<<endl;
file1<<pp[k].getzhiwu()<<endl;
file1<<pp[k].getzhichen()<<endl;
file1<<pp[k].getzzmm()<<endl;
file1<<pp[k].getzgxl()<<endl;
file1<<pp[k].getrzsj()<<endl;
file1<<pp[k].getlysj()<<endl;
}
file1.close();
cout<<"修改并保存完毕"<<endl;
}
void person::shancu() //
{
int z;
ifstream filem("添加人员.txt",ios_base::in);
int k=1;
while(!filem.eof())
{
filem>>pp[k].getnum();
filem>>pp[k].gettype();
filem>>pp[k].getname();
filem>>pp[k].getsex();
filem>>pp[k].getage();
filem>>pp[k].getzhiwu();
filem>>pp[k].getzhichen();
filem>>pp[k].getzzmm();
filem>>pp[k].getzgxl();
filem>>pp[k].getrzsj();
filem>>pp[k].getlysj();
k++;
}
filem.close();
cout<<"请输入要被删除信息人编号:"<<endl;
cin>>z;
while(z<1||z>bianhao)
{
cout<<"没有找到你要删除人,请重新输入:"<<endl;cin>>z;}
for(k=1;k<=bianhao;k++)
{
if(z==k)
continue;
ofstream file2("添加人员.txt",ios_base::trunc);
file2<<pp[k].getnum()<<endl;
file2<<pp[k].gettype()<<endl;
file2<<pp[k].getname()<<endl;
file2<<pp[k].getsex()<<endl;
file2<<pp[k].getage()<<endl;
file2<<pp[k].getzhiwu()<<endl;
file2<<pp[k].getzhichen()<<endl;
file2<<pp[k].getzzmm()<<endl;
file2<<pp[k].getzgxl()<<endl;
file2<<pp[k].getrzsj()<<endl;
file2<<pp[k
展开阅读全文