资源描述
《C++程序设计》课程设计报告
34
2020年5月29日
文档仅供参考
<C++程序设计>课程设计报告
高校教职工人事管理系统
年级/专业/班:
学 生 姓 名:
学 号:
指 导 教 师:
开 题 时 间: 年 09 月 06 日
完 成 时 间: 年 09 月 28 日
目 录
一、引言 1
二、设计目的与任务 1
1、本课程设计的目的 1
2、本课程设计的任务 1
三、设计方案 1
1、总体设计 1
2、详细设计 2
3、程序清单 5
4、程序调试与体会 14
5、运行过程截图 14
四、结论 17
五、致谢 17
六、参考文献 17
<C++程序设计语言>课程设计
——高校教职工人事管理系统
一、引言
随着人们生活水平的提高,计算机发展异常迅速。如今,计算机已经深入到我们社会的各个领域,计算机的使用也已不再局限于科学计算,它已进入人类社会的各个领域并发挥着越来越重要的作用。经过计算机对各类问题求解已经成为一种高效、快捷的方式。本课程设计就是用C++研究两点距离的求解的问题,实现对两点距离的问题求解,和实现类模板的应用以及函数的调用。
二、设计目的与任务
1、本课程设计的目的
1)经过课程设计更进一步理解C++的基础知识和面向对象的思想。
2)训练用系统的观点和软件开发一般规范进行软件开发,并在此过程中培养严谨的科学态度和良好的工作作风。初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。
3)熟练掌握C++中类及类模板在程序中的应用,并熟练了解类中函数的调用。
2、本课程设计的任务
使用类实现编写一个高校教职工人事管理系统 ,能够实现教职工信息增加、删除、修改、查找,能够统计在职人员、中共党员、女教职工、高职称、高学历的人数,信息的输入输出能够重载输入与输出操作符,而且要求有错误提示功能,例如输入日期,输入错误提示重新输入。
三、设计方案
1、总体设计
(1)定义员工(Person)类,其中包括编号、职工分类("行政人员","教师","一般员工","退休人员","返聘人员","临时工")、性别、年龄,职务("无","科级","处级","地级");、职称("无","初级","中级","高级");、政治面貌("群众","中共党员","民主党派")、学历("中专","大专","大学","硕士","博士")。
(2)实现下面的功能
a、设计菜单实现功能选择;
b、输入功能:输入员工的信息,并保存到文件中;
c、删除资料:能够根据编号删除员工的资料;
d、修改功能:能够根据编号来修改员工的资料;
e、查询功能:能够根据编号来查看员工的资料;
f、统计功能:能够统计在职人员、中共党员、女教职工、高职称、高学历的人数。
g、错误提示功能:如果输入的资料不合法,将会提示错误,并给予指导。
2、详细设计
类 Person
char no[100]; //编号
char duty[30]; //职工分类
char sex[10]; //性别
int age; //年龄
char position[30]; //职务
char zhicheng[30]; //职称
char political[30]; //政治面貌
char record[30]; //学历
void add(); //增加信息
void delet(); //删除信息
void change(); //修改信息
void find(); //查找信息
void push(Person pp); //给类赋值
下面程序流程图中的判断框必须用菱形表示,请修改
(1) Person::add()
(2) Person::delete()
(3) Person::change()
(4).Person::find()
3、程序清单
/*
改程序需要在D盘加入文本名为 ”subject.txt” 文本档案作为资料的库存。
文本档案资料内容如下:
09408201 行政人员 男 35 处级 高级 中共党员 大学
09408202 教师 女 30 处级 高级 中共党员 大学
09408203 临时工 女 20 无 高级 群众 中专
09408204 临时工 男 22 处级 初级 中共党员 博士
09408205 返聘人员 男 30 科级 高级 中共党员 大专
09408206 教师 女 40 科级 初级 中共党员 硕士
09408207 退休人员 女 68 处级 中级 民主党派 大学
09408208 一般员工 男 27 地级 高级 群众 大学
09408209 教师 男 22 处级 高级 中共党员 博士
09408210 退休人员 男 62 地级 初级 民主党派 硕士
09408211 返聘人员 女 40 无 中级 中共党员 硕士
09408212 一般员工 男 38 处级 中级 群众 大学
09408213 教师 男 46 处级 无 中共党员 博士
09408214 教师 男 27 无 高级 民主党派 大学
09408215 教师 男 18 处级 高级 中共党员 大学
*/
//下面程序开始
#include <iostream>
#include <cstring>
using namespace std;
const int N=1000;
int t=0;
int on=0; //统计在职人员人数
int dang=0; //统计中共党员人数
int nv=0; //统计女性职工人数
int gaozhi=0; //统计高职称人数
int gaoli=0; //统计高学历人数
class Person
{ public:
char sex[10]; //性别
char duty[30]; //职工分类
int age; //年龄
char political[30]; //政治面貌
char record[30]; //学历
char position[30]; //职务
char zhicheng[30]; //职称
char no[100]; //编号
void add(); //增加信息
void delet(); //删除信息
void change(); //修改信息
void find(); //查找信息
void push(Person pp);//给列成员赋值
};
Person p[N];
void Person::push(Person pp)
{
strcpy(no,pp.no);
strcpy(sex,pp.sex);
strcpy(position,pp.position);
strcpy(zhicheng,pp.zhicheng);
strcpy(political,pp.political);
strcpy(record,pp.record);
strcpy(duty,pp.duty);
age=pp.age;
if(strcmp(duty,"退休人员")) on++;
if(strcmp(sex,"女")==0) nv++;
if(strcmp(zhicheng,"高级")==0) gaozhi++;
if(strcmp(political,"中共党员")==0) dang++;
if(strcmp(record,"硕士")==0||strcmp(record,"博士")==0) gaoli++;
}
void tip()
{ cout<<"输入ENTER返回子菜单!"<<endl;
getchar();
getchar();
system("cls");
}
void tip1()
{ cout<<"输入ENTER返回主菜单!"<<endl;
getchar();
getchar();
system("cls");
}
void Load() //经过文本输入数据
{ Person S;
FILE *fp1;
bool f=1;
fp1=fopen("d:\\subject.txt","r");if(fp1==NULL) f=0;
while(f&&!feof(fp1))
{ fscanf(fp1,"%s%s%s%d%s%s%s%s",S.no,S.duty,S.sex,&S.age,S.position,S.zhicheng,S.political,S.record);
p[t++].push(S);
}
fclose(fp1);
}
void Person::add() //录入信息
{
cout<<" 现在录入编号为 "<<no<<" 的档案:"<<endl;
A1:
cout<<"输入员工的职工分类: ";
cin>>duty;
if (strcmp(duty,"行政人员")&&strcmp(duty,"教师")&&
strcmp(duty,"一般员工")&&strcmp(duty,"退休人员")&&
strcmp(duty,"返聘人员")&&strcmp(duty,"临时工"))
{cout<<"--(请输入正确的职工分类,例如:行政人员,教师,一般员工,退休人员,返聘人员,临时工)"<<endl; goto A1;}
if(strcmp(duty,"退休人员")) on++;
A2:
cout<<"输入员工的性别: ";
cin>>sex;
if(strcmp(sex,"男")&&strcmp(sex,"女"))
{cout<<"--(请输入正确的性别,例如:男,女)"<<endl; goto A2;}
if(strcmp(sex,"女")==0) nv++;
A3:
cout<<"输入员工的年龄: ";
cin>>age;
if(age<=0) {cout<<"--(请输入正确的年龄,例如:18等)"<<endl; goto A3;}
A4:
cout<<"输入员工的职务: ";
cin>>position;
if (strcmp(position,"无")&&strcmp(position,"科级")&&
strcmp(position,"处级")&&strcmp(position,"地级"))
{cout<<"--(请输入正确的职务,例如:无,科级,处级,地级)"<<endl; goto A4;}
A5:
cout<<"输入员工的职称: ";
cin>>zhicheng;
if(strcmp(zhicheng,"无")&&strcmp(zhicheng,"初级")&&
strcmp(zhicheng,"中级")&&strcmp(zhicheng,"高级"))
{cout<<"--(请输入正确的职称,例如:无,初级,中级,高级)"<<endl; goto A5;}
if(strcmp(zhicheng,"高级")==0) gaozhi++;
A6:
cout<<"输入员工的政治面貌: ";
cin>>political;
if (strcmp(political,"群众")&&strcmp(political,"中共党员")&&
strcmp(political,"民主党派"))
{cout<<"--(请输入正确的政治面貌,例如:群众,中共党员,民主党派)"<<endl; goto A6;}
if(strcmp(political,"中共党员")==0) dang++;
A7:
cout<<"输入与员工的学历: ";
cin>>record;
if (strcmp(record,"中专")&&strcmp(record,"大专")&&
strcmp(record,"大学")&&strcmp(record,"硕士")
&&strcmp(record,"博士"))
{cout<<"--(请输入正确的学历,例如:中专,大专,大学,硕士,博士)"<<endl; goto A7;}
if(strcmp(record,"硕士")==0||strcmp(record,"博士")==0) gaoli++;
cout<<" 编号为 "<<no<<" 的档案录入结束"<<endl<<endl;
t++;
tip1();
}
void Person::delet() //删除信息
{
no[0]='-';
if(strcmp(duty,"退休人员")) on--;
if(strcmp(sex,"女")==0) nv--;
if(strcmp(zhicheng,"高级")==0) gaozhi--;
if(strcmp(political,"中共党员")==0) dang--;
if(strcmp(record,"硕士")==0||strcmp(record,"博士")==0) gaoli--;
cout<<"删除员工信息成功!"<<endl<<endl;
tip1();
}
void Person::change() //修改信息
{ int n,flag=1;
do{
A:
cout<<" ***子菜单:修改资料***"<<endl
<<" 修改哪些信息?"<<endl
<<"1(编号) 2(职工分类) 3(性别) 4(年龄) 5(职务) 6(职称) 7(政治面貌) 8(学历) 9(退回主菜单)"<<endl
<<" 输入数字1-9进行修改或退出:";
cin>>n;
if(n<1||n>9) {cout<<"sorry,您输入的信息有误,请重新输入!"<<endl;goto A; }
switch(n)
{ case 1:
cout<<"输入正确的员工编号:";
cin>>no;
cout<<"员工编号修改成功"<<endl<<endl;
tip();
break;
case 2:
B1:
cout<<"输入正确的员工的职工分类: ";
if(strcmp(duty,"退休人员")) on--;
cin>>duty;
if (strcmp(duty,"行政人员")&&strcmp(duty,"教师")&&
strcmp(duty,"一般员工")&&strcmp(duty,"退休人员")&&
strcmp(duty,"返聘人员")&&strcmp(duty,"临时工"))
{cout<<"(请输入正确的职工分类,例如:行政人员,教师,一般员工,退休人员,返聘人员,临时工)"<<endl; goto B1;}
if(strcmp(duty,"退休人员")) on++;
cout<<"员工职工分类修改成功"<<endl<<endl;
tip();
break;
case 3:
B2:
cout<<"输入正确的员工的性别: ";
if(strcmp(sex,"女")==0) nv--;
cin>>sex;
if (strcmp(sex,"男")&&strcmp(sex,"女"))
{cout<<"(请输入正确的性别,例如:男,女)"<<endl; goto B2;}
if(strcmp(sex,"女")==0) nv++;
cout<<"员工性别修改成功"<<endl<<endl;
tip();
break;
case 4:
B3:
cout<<"输入正确的员工的年龄: ";
cin>>age;
if(age<=0)
{cout<<"(请输入正确的年龄,例如:18等)"<<endl; goto B3;}
cout<<"员工年龄修改成功"<<endl<<endl;
tip();
break;
case 5:
B4:
cout<<"输入正确的员工的职务: ";
cin>>position;
if (strcmp(position,"无")&&strcmp(position,"科级")&&
strcmp(position,"处级")&&strcmp(position,"地级"))
{cout<<"(请输入正确的职务,例如:无,科级,处级,地级)"<<endl; goto B4;}
cout<<"员工职务修改成功"<<endl<<endl;
tip();
break;
case 6:
B5:
cout<<"输入正确的员工的职称: ";
if (strcmp(zhicheng,"高级")==0) gaozhi--;
cin>>zhicheng;
if (strcmp(zhicheng,"无")&&strcmp(zhicheng,"初级")&&
strcmp(zhicheng,"中级")&&strcmp(zhicheng,"高级"))
{cout<<"(请输入正确的职称,例如:无,初级,中级,高级)"<<endl; goto B5;}
cout<<"员工职称修改成功"<<endl<<endl;
if(strcmp(zhicheng,"高级")==0) gaozhi++;
tip();
break;
case 7:
B6:
cout<<"输入正确的员工的政治面貌: ";
if(strcmp(political,"中共党员")==0) dang--;
cin>>political;
if (strcmp(political,"群众")&&strcmp(political,"中共党员")&&
strcmp(political,"民主党派"))
{cout<<"(请输入正确的政治面貌,例如:群众,中共党员,民主党派)"<<endl; goto B6;}
if(strcmp(political,"中共党员")==0) dang++;
cout<<"员工政治面貌修改成功"<<endl<<endl;
tip();
break;
case 8:
B7:
cout<<"输入正确的员工的学历: ";
if (strcmp(record,"硕士")==0||strcmp(record,"博士")==0) gaoli--;
cin>>record;
if (strcmp(record,"中专")&&strcmp(record,"大专")&&
strcmp(record,"大学")&&strcmp(record,"硕士")
&&strcmp(record,"博士"))
{cout<<"(请输入正确的学历,例如:中专,大专,大学,硕士,博士)"<<endl; goto B7;}
if (strcmp(record,"硕士")==0||strcmp(record,"博士")==0) gaoli++;
cout<<"员工学历修改成功"<<endl<<endl;
tip();
break;
case 9:
tip1();
flag=0;
break;
}
}while(flag);
}
void Person::find() //查找信息(输出信息)
{
cout<<"员工的编号: ";
cout<<no<<endl;
cout<<"员工的职工分类: ";
cout<<duty<<endl;
cout<<"员工的性别: ";
cout<<sex<<endl;
cout<<"员工的年龄: ";
cout<<age<<endl;
cout<<"员工的职务: ";
cout<<position<<endl;
cout<<"员工的职称: ";
cout<<zhicheng<<endl;
cout<<"员工的政治面貌: ";
cout<<political<<endl;
cout<<"员工的学历: ";
cout<<record<<endl<<endl;
tip1();
}
int main()
{
Load();
int n , i,flag1=1;
char num[100];
do
{ A:
cout<<" ***************"<<endl
<<" 主菜单"<<endl
<<" ***************"<<endl
<<"(1)增加资料(2)删除资料(3)修改资料(4)查找资料(5)查看统计"
<<"(6)退出"<<endl
<<"请选择1-6进行操作: ";
cin>>n;
system("cls");
if(n<1||n>9) {cout<<"sorry,您输入的信息有误."<<endl;tip1();goto A; }
switch(n)
{ case 1:
C:cout<<"输入要增加的员工的编号:";
cin>>num;
for(i=0;i<t;i++) if(strcmp(p[i].no,num)==0) break;
if (i!=t)
{cout<<"Sorry,您要增加的员工编号已存在,请重新输入!"<<endl<<endl;goto C;}
strcpy(p[t].no,num);
cout<<endl;
p[t].add();
break;
case 2:
cout<<"输入要删除的员工的编号:";
cin>>num;
for(i=0;i<t;i++)
{ if (strcmp(p[i].no,num)==0)
{ p[i].delet();
break;
}
}
cout<<endl;
if(i==t) {cout<<"sorry,您输入的员工编号有误。"<<endl;tip1();}
break;
case 3:
cout<<"输入要修改的员工的编号:";
cin>>num;
cout<<endl;
for(i=0;i<t;i++)
{ if (strcmp(p[i].no,num)==0)
{ p[i].change();
break;
}
}
if(i==t) {cout<<"sorry,您输入的员工编号有误。"<<endl;tip1();}
break;
case 4:
cout<<"输入要查看的员工的编号: ";
cin>>num;
cout<<endl;
for(i=0;i<t;i++)
{ if(strcmp(p[i].no,num)==0)
{ p[i].find();
break;
}
}
if (i==t) {cout<<"sorry,您输入的员工编号有误。"<<endl;tip1();}
break;
case 5:
cout<<"在职人员人数为:"<<on<<endl;
cout<<"中共党员人数为:"<<dang<<endl;
cout<<"女教职工人数为:"<<nv<<endl;
cout<<"高职称人数为:"<<gaozhi<<endl;
cout<<"搞学历人数为:"<<gaoli<<endl;
cout<<"(说明:1.在职人员不包括退休人员。" <<endl;
cout<<" 2.高学历包括硕士及博士。)" <<endl<<endl;
tip1();
break;
case 6:
flag1=0;
cout<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<" 感谢您的使用,谢谢!! "<<endl<<endl<<endl<<endl<<endl;
break;
}
}
while(flag1);
system("pause");
}
4、程序调试与体会
经过对程序的调试,发现很多问题只有经过调试以后才能被找到和发现,才能更好的美化和优化,是程序看起来更完美,让使用者更放心。
5、运行过程截图
下面是我们程序的一些演示以及部分运行结果:
(1).首先是程序执行的主菜单:
(2).执行1-5的指令后都会出现如下界面,要求输入员工的编号,因为该程序是基于从编号入手的:
(3)当执行1号命令增加资料,并输入员工编号后要求输入与员工的资料:
(4).当输入内容不合要求时会提示输入错误,而且提示合法的输入内容:
(5).当输入的编号已存在是会提示该编号已存在:
(6).当执行删除资料、查找资料、修改资料后,如果输入的编号后有误,会提示编号不存在:
(7).当执行修改资料,并输入正确的编号后,会出现该目录下的子菜单:
(8).当执行子菜单下的指令,并修改成功后会提示修改完成(当然这里修改时如果输入不合题目要求同样会提示错误,并提示正确的输入内容,参照(4)):
(9).当执行查找资料,并输入正确的编号后,会输出该编号员工的资料:
(10).当执行查看统计后会出现如下界面:
四、结论
经过本次课程设计,让我对C++这门学科对有了进一步的认识,熟练掌握了类及类模板的应用。以前对该课程的恐惧感都以消失,任何事情没有做不到只有愿不愿意去做。
刚开始接到该题,心中确实充满困惑。不过在图书馆和网上找了一些资料看了后,便觉得思路就在眼前了,之前不过就是由于对该课程的恐惧而产生了一定的心里影响而已。
之后凭借那闪现在眼前的点点思路,慢慢在琢磨,终于想出了大致的程序内容。然后一个一个函数的思考,一步一步的编写,调试,做起来也就越来越顺手了。经过我的重复思考,程序中的错误得到顺利解决。函数功能也得到了进一步的完善。
而且在本次课程设计的过程中,让我进一步认识到了团队的力量,只有团结才能发挥出一个集体的力量。一个人的力量真的好有限,即使个人能力再强,做一个大点的项目,也会力不从心。只有分工协作才能将事办得越快越好。经过这次课程设计,会为我们以后进入社会提供一定的经验。
我们相信在今后的学习真的我们会更加努力,积累经验。使自己在编程等各方面得到提高。
五、致谢
这次的课程设计对我们来说是一次尝试与挑战的过程。在这里,我们由衷地感谢帮助、支持和鼓励我们完成课程设计的老师和一起奋斗过的伙伴。首先我们要感谢学校给我们提供这样一个一起学习和研究的机会,让我们把理论知识应用到实际中来。其次我们要感谢我们的指导老师羊四清老师,在进行课程设计的这段时间里她对我们的指导和帮助,为我们课程设计的顺利完成指明了方向,也给了我们锻炼和提高的机会。根据老师的指导,在设计中我们基本能按照规范的方法和步骤进行,开始对实现高校教职工人事管理系统问题进行讨论,并查阅有关资料,最后确定设计方案,然后设计并制作。在实践过程中我们深刻的认识到类在C++中的重要性。在此我们向您们致以最诚挚的谢意!
六、参考文献
[1]张基温编著.C++程序设计基础.北京:高等教育出版社,1996
[2]宛延闺.c++语言和面向对象程序设计.北京:清华大学出版社,1999
[3]钱能主编.c++程序设计教程.北京:清华大学出版社,1999
[4]张龙祥编著.UML与系统分析设计.北京:人民邮电出版社,
[5] 张海藩,牟永敏.面向对象程序设计实用教程.北京:清华大学出版社,
[6] 揣锦华.c++程序设计语言.西安:西安电子科技大学出版社,
课程设计任务书及成绩评定
课题名称:
完 成 者:
1、设计的目的与要求:
2、 设计进度及完成情况
日 期
内 容
9.15
分析问题,找出所要解决问题的关键
9.17-9.18
总体设计,找出解决方案
9.19-9.20
详细设计,列出解决步骤
9.21-9.24
程序编码
9.25
程序调试,修改加以完善
展开阅读全文