课程设计人事信息管理系统.docx
《课程设计人事信息管理系统.docx》由会员分享,可在线阅读,更多相关《课程设计人事信息管理系统.docx(18页珍藏版)》请在冰豆网上搜索。
![课程设计人事信息管理系统.docx](https://file1.bdocx.com/fileroot1/2022-11/23/0b1ccf67-1fbc-422a-8ed2-1519d6ccb7c8/0b1ccf67-1fbc-422a-8ed2-1519d6ccb7c81.gif)
课程设计人事信息管理系统
湖南科技学院
课程设计报告
课程名称:
计算机高级语言(C++)课程设计
课程设计题目:
人事信息管理系统
系:
数学系
专业:
信息与计算科学
年级、班:
信计0801
姓名:
XXX
学号:
200805002128
指导教师:
XXX
职称:
讲师
200X年XX月XX日
目录
1.需求分析--------------------------------------------------------------2
2.概要设计--------------------------------------------------------------2
3.程序实现思路--------------------------------------------------------4
4.设计总结--------------------------------------------------------------6
5.参考文献--------------------------------------------------------------7
6.源代码-----------------------------------------------------------------7
1
一、需求分析
本课程设计要求设计一个人事信息管理系统,主要功能有:
①建立职工信息数据,包括职工号、姓名、性别、工资、出生时间、参加工作时间和年龄(必须计算得到)。
②实现数据录入、数据删除、数据修改、数据浏览和数据查询等功能。
③用文件保存数据
二、概要设计
(一)抽象数据类型定义表
序号
成员名
数据类型
含义
1
sno
int
编号
2
name
string
姓名
3
birthday
int
出生时间
4
Adate
int
参工时间
5
salary
double
工资
6
sex
string
性别
7
age
int
参工年龄
8
flag
bool
记录修改标志
9
sm[100]
Staff
记录数组
2
(二)主程序的流程
3
(三)各程序模块的功能
voidStaffClear(SList&slist);//清空职工记录
voidStaffInsert(SList&slist);//插入职工记录
voidStaffDelete(SList&slist);//删除职工记录
voidStaffFind(SList&slist);//查找某编号的职工记录
voidStaffView(SList&slist);//显示所有职工的记录
voidStaffInit(SList&slist);//初始化职工数据
voidStaffXG(SList&slist);//修改职工数据
voidStaffSave(SList&slist);//将数据保存到文件
intSearch(SList&slist,intsno);//查找编号为sno的职工,返回记录元素的下标
voidExit(SList&slist);//退出程序
三、程序实现思路
(1)设计菜单实现功能
①建立职工信息数据,包括职工号、姓名、性别、工资、出生时间、参加工作时间和年龄(必须计算得到)。
②实现数据录入、数据删除、数据修改、数据浏览和数据查询等功能。
③用文件保存数据
4
(2)设计类与对象
structStaff
{
intsno;//编号
intage;
intbirthday,Adate;
doublesalary;
stringsex;
stringname;//姓名
};
structSList
{
intcount;//职工人数
boolflag;//记录修改标志,false-没改变,true-已改变
Staffsm[100];//记录数组
};
voidStaffClear(SList&slist);//清空职工记录
voidStaffInsert(SList&slist);//插入职工记录
voidStaffDelete(SList&slist);//删除职工记录
voidStaffFind(SList&slist);//查找某编号的职工记录
voidStaffView(SList&slist);//显示所有职工的记录
voidStaffInit(SList&slist);//初始化职工数据
voidStaffXG(SList&slist);//修改职工数据
voidStaffSave(SList&slist);//将数据保存到文件
intSearch(SList&slist,intsno);//查找编号为sno的职工,返回记录元素的下标
voidExit(SList&slist);//退出程序
(3)通过类的调用实现功能设计
case'1':
StaffInsert(slist);
break;
case'2':
StaffView(slist);
break;
case'3':
StaffFind(slist);
break;
5
case'4':
StaffXG(slist);
break;
case'5':
StaffDelete(slist);
break;
case'6':
StaffSave(slist);
break;
case'7':
StaffClear(slist);
break;
case'0':
Exit(slist);
break;
default:
cout<<"输入错误!
";
四、设计总结
经过了几周的摸索与探讨,终于在老师和同学的帮助下完成了这次的课程设计,又完成了一次挑战,从中学到了很多。
知道了只要坚持就会有收获,只要付出就会成功。
对我而言,这次课程设计并不是那么容易完成的,不过我还是努力的去做,遇到不懂的就问同学、查资料等等,终于有了这次的成果,虽然不是很完美,但却还是很欣慰的。
此次课程设计使我更好的理解了所学过的知识,进一步学习和了解了对程序的设计和编写,从中体会到了面向对象程序设计的便利。
懂得了在进行编写程序之前,要有明确的目标和整体的设计思想,对整个程序的框架结构的思考是十分重要和关键的。
另外还需注意细节,往往被我们所忽视的细节部分成了是否成功的关键。
从中我也发现了自己还有许多的不足之处,比如说书本上的知识
6
都不是很熟悉,也没有仔细的去看,很多细节部分也没注意,导致在编程过程中出现了许多的差错。
虽然这次编程中还有参考程序,使编程难度下降了很多,但我依然花费了不少时间,这让我感到很不满意。
同时也感到自己在这门课程上下的功夫还不足。
下定决心以后要好好学习,尽努力自己最大的把该门课程学好。
五、参考文献
1)谭浩强《C++程序设计》清华出版社2007,5
六、源代码
人事信息管理系统程序
staff.h
#ifndefSTAFF_H_INCLUDED
#defineSTAFF_H_INCLUDED
usingnamespacestd;
structStaff
{
intsno;//编号
intage;
intbirthday,Adate;
doublesalary;
stringsex;
stringname;//姓名
};
7
{
intcount;//职工人数
boolflag;//记录修改标志,false-没改变,true-已改变
Staffsm[100];//记录数组
};
voidStaffClear(SList&slist);//清空职工记录
voidStaffInsert(SList&slist);//插入职工记录
voidStaffDelete(SList&slist);//删除职工记录
voidStaffFind(SList&slist);//查找某编号的职工记录
voidStaffView(SList&slist);//显示所有职工的记录
voidStaffInit(SList&slist);//初始化职工数据
voidStaffXG(SList&slist);//修改职工数据
voidStaffSave(SList&slist);//将数据保存到文件
intSearch(SList&slist,intsno);//查找编号为sno的职工,返回记录元素的下标
voidExit(SList&slist);//退出程序
#endif//STAFF_H_INCLUDED
Menu.h
#ifndefMENU_H_INCLUDED
#defineMENU_H_INCLUDED
#include"staff.h"
voidShowMenu();
voidShowTip();
8
voidDoMenu(charn,SList&slist);
#endif//MENU_H_INCLUDED
Staff.cpp
#include
#include
#include
#include"staff.h"
voidStaffInit(SList&slist)//初始化职工数据
{
ifstreaminfile("data.txt");
slist.count=0;//职工改变标志置false
if(!
infile)
cerr<<"错误:
数据文件不能打开!
\n";
else
{
infile>>slist.count;//读入职工人数
for(inti=0;iinfile>>slist.sm[i].sno>>slist.sm[i].name>>slist.sm[i].sex>>slist.sm[i].salary>>slist.sm[i].birthday>>slist.sm[i].Adate>>slist.sm[i].age;
}
infile.close();//关闭文件
}
voidStaffClear(SList&slist)//清空职工记录
9
{
slist.count=0;//职工人数清0
slist.flag=true;//数据已修改
}
voidStaffInsert(SList&slist)//插入职工记录
{
intsno=0,n=-1,birthday=0,Adate=0;
doublesalary=0;
stringname,sex;
cin.sync();//清空输入缓冲区
cout<<"请输入编号:
";
cin>>sno;
cout<<"请输入姓名:
";
cin>>name;
cout<<"请输入性别:
";
cin>>sex;
cout<<"请输入职工工资:
";
cin>>salary;
cout<<"请输入出生年龄:
";
cin>>birthday;
cout<<"请输入参工时间:
";
cin>>Adate;
if(sno<0)
{
cout<<"输入的编号有误,插入记录失败!
"<return;//结束函数
}
else
10
{
n=Search(slist,sno);//查找编号为sno的职工
if(n!
=-1)//已有该编号
{
cout<<"该编号已存在,插入记录失败!
"<return;
}
else//该编号不存在,执行数据插入操作
{
slist.sm[slist.count].sno=sno;
slist.sm[slist.count].name=name;
slist.sm[slist.count].sex=sex;
slist.sm[slist.count].salary=salary;
slist.sm[slist.count].birthday=birthday;
slist.sm[slist.count].Adate=Adate;
slist.sm[slist.count].age=Adate/10000-birthday/10000;
slist.count++;
slist.flag=true;//数据已修改
cout<<"成功插入一个职工信息!
"<}
}
}
intSearch(SList&slist,intsno)//查找编号为sno的职工,返回记录元素的下标
{
for(inti=0;iif(slist.sm[i].sno==sno)
returni;
return-1;
11
}
voidStaffDelete(SList&slist)//删除职工记录
{
intsno=-1,n=-1;
cout<<"请输入要删除的职工的编号:
";
cin.sync();//清空输入缓冲区
cin>>sno;
n=Search(slist,sno);
if(n!
=-1)//找到该编号的记录,执行删除操作
{
for(inti=n;islist.sm[i]=slist.sm[i+1];
slist.flag=true;//数据已修改
slist.count--;//职工人数减1
cout<<"已成功删除该职工信息!
"<}
else
cout<<"没有找到该职工的编号!
"<}
voidStaffFind(SList&slist)//查找某编号的职工记录
{
intsno=-1,n=-1;
if(slist.count==0)
cout<<"没有职工记录!
"<else
{
12
cout<<"请输入要查找的编号:
";
cin.sync();//清空输入缓冲区
cin>>sno;
n=Search(slist,sno);//找该编号的记录元素的下标
if(n!
=-1)//找到,输出职工信息
{
cout<cout<}
else
cout<<"没有找到编号为"<"<}
}
voidStaffView(SList&slist)//显示所有职工的记录
{
Stafftemp;
if(slist.count!
=0)//职工数不为0则执行排序操作
for(inti=0;ifor(intj=i;j{
if(slist.sm[j].sno>slist.sm[j+1].sno)
{
13
temp=slist.sm[j];
slist.sm[j]=slist.sm[j+1];
slist.sm[j+1]=temp;
}
}
cout<<"共有职工"<cout<for(inti=0;icout<}
voidStaffSave(SList&slist)//将数据保存到文件
{
ofstreamoutfile("data.txt");//创建文件输出流
if(!
outfile)
cerr<<"错误:
数据文件不能打开!
\n";
else
{
outfile<for(inti=0;ioutfile<14
slist.flag=false;//数据修改标志置false
cout<<"保存成功!
"<}
}
voidStaffXG(SList&slist)
{
intsno=0,n=-1,birthday=0,Adate=0;
doublesalary=0;
stringname,sex;
cin.sync();//清空输入缓冲区
cout<<"请输入你要修改的职工编号:
";
cin.sync();//清空输入缓冲区
cin>>sno;
if(sno<0)
{
cout<<"输入的编号有误,插入记录失败!
"<return;//结束函数
}
n=Search(slist,sno);//查找编号为sno的职工
if(n!
=-1)//已有该编号
{
cout<<"请输入姓名:
";
cin>>name;
cout<<"请输入性别:
";
cin>>sex;
cout<<"请输入职工工资:
";
cin>>salary;
cout<<"请输入出生年龄:
";
cin>>birthday;
15
cout<<"请输入参工年龄:
";
cin>>Adate;
slist.sm[n].name=name;
slist.sm[n].sex=sex;
slist.sm[n].salary=salary;
slist.sm[n].birthday=birthday;
slist.sm[n].Adate=Adate;
slist.sm[n].age=Adate/10000-birthday/10000;
slist.flag=true;//数据已修改
cout<<"成功修改一个职工信息!
"<}
}
voidExit(SList&slist)//退出程序
{
charch='Y';
if(slist.flag)//判断数据是否修改
{
cout<<"数据已经改变,是否保存?
(y/n):
";
cin.sync();//清空输入缓冲区
cin>>ch;
if(ch=='y'||ch=='Y')
StaffSave(slist);
}
cout<<"已安全退出,";
system("pause");//程序暂停,按任一键继续
16
exit(0);//退出程序
}
Menu.cpp
#include
#include"menu.h"
usingnamespacestd;
voidShowMenu()
{
cout<<"|------------------------------------------------|"<cout<<"|职工信息管理系统|"<cout<<"|------------------------------------------------|"<cout<<"|1.数据录入|"<cout<<"|2.数据浏览|"<cout<<"|3.数据查询|"<cout<<"|4.数据修改|"<cout<<"|5.数据删除|"<cout<<"|6.数据保存|"<cout<<"|7.数据初始化|"<cout<<"|0.安全地退出本系统|"<cout<<"|------------------------------------------------|"<}
voidShowTip()
{
cout<17
cout<<"-------------------操作完成---------------------"<cout<<"-----------------选择0-7继续-------------------"<cout<<"请选择:
";
}
voidDoMenu(charn,SList&slist)
{
switch(n)
{
case'1':
StaffInsert(slist);
break;
case'2':
StaffView(slist);
break;
case'3':
StaffFind(slist);
break;
case'4':
StaffXG(slist);
break;
case'5':
StaffD