C++人事管理系统论文
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
十、人事管理
1、需求分析
人事档案信息采用文件存储,因而要提供文件的输入输出操作;根据学院人事的变动情况,添加删除记录,因而要提供文件的添加删除操作;根据编号和姓名进项查询,所以要提供文件的查找操作;高级编辑功能,就是提供文件的修改操作;统计功能要提供统计操作;排序功能要提供用排序算法对文件记录的排序;另外还要提供键盘式选择菜单以实现功能选择。
2、总体设计
整体设计为数据输入模块、数据添加模块、数据删除模块、数据查询模块、数据修改模块、数据统计模块、数据排序模块。
3、详细设计
数据结构采用结构体:
Struct personnelArchiveInfo
{
Char No[10]; //编号
Char name[10]; //姓名
Int sex; //性别
Int age; //年龄
Char job[10]; //职务
Char post[10]; //职称
Char politic[10]; //政治面貌
Char edu_level[10]; //最高学历
Char period[10]; //任职时间
Char start_time[10]; //来院时间
}PAInfo;
(1)数据输入模块
把员工信息写入人事档案文件。
(2)数据添加模块
用追加的方式把新增员工信息写入人事档案文件。
(3)数据删除模块
根据人员编号查找要删除的人员,从文件中读一条记录,查看编号是否要删除,如果是,则舍弃,不再写入文件;否则重新写入文件。
(4)数据查询模块
把编号和姓名作为查询字段,用基本查找算法查找人事档案文件,把符合查找要求的记录输出。
(5)数据修改模块
查找要修改的记录,修改之。
先读记录,若是要修改的记录,则修改信息,把修改后的信息写入文件;否则直接写入文件。
(6)数据排序模块
通过菜单选择年龄或者来院时间,把数据从文件中读出来,任意选择一种排序算法对记录进行排序,输出排序结果。
(7)数据统计模块
通过菜单选择统计字段:在职人数、党员人数、女工人数、高学历人数、高职称人数。
例如选择党员人数,则统计运算伪码如下:
Count=0; //记录在职人数
While(文件未读完)
{
读一条记录;
If(政治面貌是党员)
{
Count++;
输出该条记录;
}
其他字段的统计运算与次类似。
1、前言
1.1相关知识
(1)函数
函数从本质上讲是一段通用程序,用它可以帮助我们节约很多编程的时间,一个聪明的编程者在编写程序前往往总是先找自己所编写的程序中有多少是可以用函数来代替的。
而学习函数的方法是比较简单的,只有两个字“牢记”,即:牢记函数的功能,牢记函数的用途以及如何输入输出。
有些同学认为,程序语言中的函数没有多大用处,其实这并不正确,
(2)结构
结构是由用户定义的数据类型,它的成员可以是任何类型,既可以是C++的基本数据类型,如整型、浮点型等,也可以是复杂的数据类型,如数组、指针及其他结构。
结构的关键字是“struct”。
我的程序中就运用了结构,并且是结构指针数组。
想要学好结构就要多加练习,多写程序,这样才能熟练掌握结构。
(3)文件
包括在头文件<fstream.h>中。
主要利用了写文件,读文件将人事信息存入文件中;用追加方法把新增的人事信息存入文件中;用清空文件(ios::trunc),读文件(ios::in),写文件(ios::out||ios::app)对人事信息进行删除和修改等。
1.2系统设计的目的及意义
(1)、目的
检测自己对本学期知识的掌握以及对本学期知识的灵活运用,自主学习文件的读写及对文件的其他操作。
联系对结构体的运用及对结构体数组的运用,从而使自己更熟悉结构体。
(2)、意义
使自己能够更熟练的运用结构体,并增强了自己对知识的熟练程度,也是自己对结构体有了更深的理解,从而对C++有了更深一步的了解
2、需求分析
2.1题目
题目主题是设计一个人事管理系统。
利用C++的相关知识设计一个程序完成此功能。
2.2题目分析
人事档案信息采用文件存储,因而要提供文件的输入输出操作;根据学院人事的变动情况,添加删除记录,因而要提供文件的添加删除操作;根据编号和姓名进项查询,所以要提供文件的查找操作;高级编辑功能,就是提供文件的修改操作;统计功能要提供统计操作;排序功能要提供用排序算法对文件记录的排序;另外还要提供键盘式选择菜单以实现功能选择。
2.3功能与效果
通过此程序能实现职工信息的输入,保存,添加,删除,查询,修改,排序,统计等。
2.4软硬件
软件:VC++6.0
硬件:windows,及相关硬件设备。
3整体设计
3.1模块分析
(1)菜单模块
用键盘式选择菜单以实现功能选择,从而进行想要进行的操作来实现其功能。
(2)数据输入模块
用键盘式输入人事信息并把人事信息写入人事档案文件。
(3)数据添加模块
用追加的方式把新增的人事信息写入人事档案文件。
(4)数据删除模块
根据人事信息编号查找要删除的人事信息,从文件中读一条记录,查看编号是否删除,如果是,则舍弃,不再写入文件;否则重新写入文件。
(5)数据查询模块(编号)
把编号作为查询字段,用基本查找算法查找人事档案文件,把符合查找要求的记录输出。
(6)数据查询模块(姓名)
把姓名作为查询字段,用基本查找算法查找人事档案文件,把符合查找要求的记录输出。
(7)数据修改模块
查找要修改的记录,修改之。
先读记录,若是要修改的记录,则修改信息,把修改后的信息写入文件;否则直接写入文件。
(8)数据排序模块
通过菜单选择年龄或者来院时间,把数据从文件中读出来,任意选择一种排序算法对记录进行排序,输出排序结果。
(9)数据统计模块
通过菜单选择统计字段:在职人数、党员人数、女工人数、高学历人数、高职称人数。
(0)结束程序模块
通过菜单选择退出来结束整个程序的操作。
3.2数据存储方式
用结构数组和文件存储数据。
3.3 程序流程图
图1-1 流程图
4详细设计
4.1具体函数
Void desplaymenu() //菜单函数
void insert_per() //信息输入函数
void save_per() //保存信息函数
void read_per() //读文件函数
void add_per() //添加信息函数
void save_add() //保存添加信息的函数void del_per() //删除信息函数
void search_No() //用编号查找信息函数
void search_name() //用姓名查找信息函数
void revise_per() // 修改信息函数
void save_revise() //保存修改后信息的函数
void sortarray_age() //根据年龄大小排序的函数
void sum_sex() //统计女工人数的函数
int main() //主函数
4.2具体程序
见附录
5调试与测试
5.1调试方法
将已经编好的程序放在VC++6.0的环境中进行调试与测试,发现程序中的错误,在提示的情况下进行改正。
5.2运行的主要功能界面及分析
(1)、菜单界面
图2-1菜单(2)、输入信息界面
图2-2 信息输入(3)、添加信息界面
图2-3 信息添加(4)、删除信息界面
图2-4 信息删除(5)、用编号查询信息界面
2-5 编号查询信息(6)、用姓名查询信息界面
2-6姓名查询信息(7)、修改信息界面
图2-7修改信息(8)、根据年龄大小将人事信息排序
图2-8 信息排序(9)、统计女工人数
图2-9 统计人数
(10)、退出界面
图2-10 退出程序
(11)、程序运行分析
测试是将在屏幕上出来有关人事档案需要填写的东西,输入需要填写的信息,然后逐步操作添加信息,删除信息,查询信息,修改信息等操作来实现程序的功能。
5.3测试中的问题
注意声明函数时,各函数之间的调用关系。
6总结
6.1程序的效果描述
该程序主要实现人事管理的功能。
利用14个函数的组合组成程序,然后通过该程序输入人事信息,然后利用各个函数的调用,实现信息输入,信息添加,信息查询,信息删除,信息修改等功能。
6.2优点与不足
优点:使用结构使程序的输入输出更简洁
使用函数可以使程序更简便;
不足:输入的内容比较多;
用文件储存信息不能用结构输入;
读取文件中的信息也不能用结构读取;
程序比较大,各部分之间的关系繁琐;
6.3个人体会
学习C++要切忌浮躁,要明白欲速则不达。
如果想要学好C++就要多看多写,而最关键的是要上课听老师分析。
通过一个学期的学习,我更了解计算机编程了,同时也更喜欢计算机了。
并且我也知道了如何学好C++,学C++靠的不是上课的那点儿时间,而是课前的预习工作及课后的复习工作,还有对写程序的及时练习,练习写程序不仅是对知识的复习也是对知识的熟练从而也能更深刻的理解程序,理解C++。
我们学习C++不仅要看课本,更重要的是看学习资料,从而使掌握的知识更广阔。
只有拥有丰富
的知识以及掌握对编程的熟练度,才能对程序灵活书写。
C++是比C语言更高级的一门语言,我们也可以通过学习C语言来学习C++,这样就可以减少学习中遇到的困难。
想要学好C++,让我们一起努力吧。
参考文献:
《C++程序设计》王挺周会平贾丽丽徐锡山编著
《C++语言例题习题及实验指导》王春玲编著
附录
#include<iostream>
#include<fstream>
#include <string>
#include<iomanip>
using namespace std;
#define n 3 //要保存在文件中的人事信息数//结构
struct personnelArchiveInfo
{
char No[10]; //编号
char Name[10]; //姓名
char sex[10]; //性别
int age; //年龄
char job[10]; //职务
char politic[10]; //政治面貌
char edu_level[10]; //最高学历
char period[10]; //任职时间
char start_time[10]; //来院时间
}p[n],b;
//函数的声明
void desplaymenu(); //菜单函数
void insert_per(); //输入人事信息
void save_per(); //将人事信息保存到文件
void read_per(); //读文件
void save_add(); //保存添加的信息
void add_per(); //添加新的人事信息
void del_per(); //用编号查找人事信息并删除
void search_No(); //用编号查询人事信息
void search_name(); //用姓名查询人事信息
void revise_per(); //用编号查找人事信息并修改
void save_revise(); //保存修改后的信息
void sortarray_age(); //用年龄将人事信息排序
void sum_sex(); //统计女工人数
int main() //主函数
{
cout<<"*****可以进行的操作菜单*****"<<endl;
cout<<"*************************************************"<<endl;
desplaymenu(); //
return 0;
}
void desplaymenu() //菜单函数{
int a;
cout<<"---1、输入人事信息---"<<endl;
cout<<"---2、添加新的人事信息---"<<endl;
cout<<"---3、用编号查找人事信息并删除---"<<endl;
cout<<"---4、用编号查询人事信息---"<<endl;
cout<<"---5、用姓名查询人事信息---"<<endl;
cout<<"---6、用编号查找人事信息并修改---"<<endl;
cout<<"---7、用年龄将人事信息排序---"<<endl;
cout<<"---8、计算女工人数---"<<endl;
cout<<"---0、退出---"<<endl;
cout<<"-----输入要进行的操作序号(0-8)-----"<<endl;
cin>>a;
if(a==0)
cout<<"停止运行程序!"<<endl;
else
{
switch(a)
{
case 1:
cout<<" 输入人事信息"<<endl;
insert_per(); //输入人事信息
save_per(); //在文件中保存输入的人事信息
break;
case 2:
cout<<" 添加新的人事信息"<<endl;
add_per(); //添加新的人事信息
save_add(); //在文件中保存新人事信息
break;
case 3:
cout<<" 用编号查找人事信息并删除"<<endl;
del_per(); //删除人事信息
break;
case 4:
cout<<" 用编号查询人事信息"<<endl;
search_No(); //用编号查找人事信息
break;
case 5:
cout<<" 用姓名查询人事信息"<<endl;
search_name(); //用姓名查找人事信息
break;
case 6:
cout<<" 用编号查找人事信息并修改"<<endl;
revise_per(); //修改人事信息
save_revise(); //保存修改后的人事信息
break;
case 7:
cout<<" 用年龄将人事信息排序"<<endl;
sortarray_age(); //以年龄大小排序
save_per(); //将以年龄排序后的人事信息保存到文件
break;
case 8:
cout<<" 统计女工人数"<<endl;
sum_sex(); //统计女工人数
break;
default:
cout<<" 输入的数字不在范围内"<<endl;
cout<<"请重新输入"<<endl;
break;
}
desplaymenu(); //递归函数的调用
}
}
void insert_per() //输入人事信息
{
for(int i=0;i<n;i++)
{
cout<<"编号: ";
cin>>p[i].No;
cout<<"姓名: ";
cin>>p[i].Name;
cout<<"性别: ";
cin>>p[i].sex;
cout<<"年龄: ";
cin>>p[i].age;
cout<<"职务: ";
cin>>p[i].job;
cout<<"政治面貌: ";
cin>>p[i].politic;
cout<<"最高学历: ";
cin>>p[i].edu_level;
cout<<"任职时间: ";
cin>>p[i].period;
cout<<"来院时间: ";
cin>>p[i].start_time;
}
cout<<"保存人事信息于文件"<<endl;
}
void save_per() //在文件"人事档案.txt'里保存人事信息{
ofstream outfile("人事档案.txt",ios::out|ios::app); //建立进行写入的"人事档案.txt"文件
if(!outfile) //没有创建成功cerr<<"创建失败"<<endl;
else
{
for(int i=0;i<n;i++)
{
outfile<<setw(10)<<p[i].No;
outfile<<setw(10)<<p[i].Name;
outfile<<setw(10)<<p[i].sex;
outfile<<setw(10)<<p[i].age;
outfile<<setw(10)<<p[i].job;
outfile<<setw(10)<<p[i].politic;
outfile<<setw(10)<<p[i].edu_level;
outfile<<setw(10)<<p[i].period;
outfile<<setw(10)<<p[i].start_time;
}
outfile.close();
}
}
void read_per() //读出文件里的人事信息{
ifstream infile("人事档案.txt",ios::in);
if(!infile)
cerr<<"文件读取失败!"<<endl;
else
{
for(int i=0;i<n;i++)
infile>>p[i].No>>p[i].Name>>p[i].sex>>p[i].age>>p[i].job>>p[i].politic>>p[i ].edu_level>>p[i].period>>p[i].start_time;
infile.close();
}
}
void add_per() //添加新的人事信息{
cout<<"输入新的人事信息"<<endl;
cout<<"编号: ";
cin>>b.No;
cout<<"姓名: ";
cin>>;
cout<<"性别: ";
cin>>b.sex;
cout<<"年龄: ";
cin>>b.age;
cout<<"职务: ";
cin>>b.job;
cout<<"政治面貌: ";
cin>>b.politic;
cout<<"最高学历: ";
cin>>_level;
cout<<"任职时间: ";
cin>>b.period;
cout<<"来院时间: ";
cin>>b.start_time;
cout<<"把新的人事信息保存在文件里"<<endl;
}
void save_add() //保存新人事信息{
ofstream outfile("人事档案.txt",ios::app); //打开文件夹用追加的方式写入新人事信息
if(!outfile) cerr<<"打开文件失败"<<endl;
else
{
outfile<<setw(10)<<b.No;
outfile<<setw(10)<<;
outfile<<setw(10)<<b.sex;
outfile<<setw(10)<<b.age;
outfile<<setw(10)<<b.job;
outfile<<setw(10)<<b.politic;
outfile<<setw(10)<<_level;
outfile<<setw(10)<<b.period;
outfile<<setw(10)<<b.start_time;
outfile.close();
}
}
void del_per() //删除人事信息{
read_per();
int j;
char c;
cout<<"查找你要删除的人事信息"<<endl;
char no[10];
cout<<"输入你要查找的人事信息的编号"<<endl;
cin>>no;
for(int i=0;i<n;i++)
if(strcmp(no,p[i].No)==0) break;
if(i<n)
{
cout<<"编号为"<<no<<"的人事信息"<<endl;
cout<<"编号:"<<p[i].No<<endl;
cout<<"姓名:"<<p[i].Name<<endl;
cout<<"性别:"<<p[i].sex<<endl;
cout<<"年龄:"<<p[i].age<<endl;
cout<<"职务:"<<p[i].job<<endl;
cout<<"政治面貌:"<<p[i].politic<<endl;
cout<<"最高学历:"<<p[i].edu_level<<endl;
cout<<"任职时间:"<<p[i].period<<endl;
cout<<"来院时间:"<<p[i].start_time<<endl;
}
else
cout<<"查无此人!\n";
cout<<"确定要删除该人事信息(Y(是) or N(否)):";
cin>>c;
if(c=='Y')
{
for(int i=0;i<n;i++)
if(strcmp(no,p[i].No)==0) break;
j=i;
ofstream outfile("人事档案.txt",ios::trunc); //把文件里的人事信息全部清除
if(!outfile)
cerr<<"打开失败!"<<endl;
else
{
for(i=0;i<n;i++) //把其他的人事信息重新输入到文件里
{
if(i==j) continue;
outfile<<setw(10)<<p[i].No;
outfile<<setw(10)<<p[i].Name;
outfile<<setw(10)<<p[i].sex;
outfile<<setw(10)<<p[i].age;
outfile<<setw(10)<<p[i].job;
outfile<<setw(10)<<p[i].politic;
outfile<<setw(10)<<p[i].edu_level;
outfile<<setw(10)<<p[i].period;
outfile<<setw(10)<<p[i].start_time;
}
outfile.close();
}
cout<<"你已经成功删除编号为"<<no<<"的人事信息"<<endl;
}
else
cout<<"你已经放弃删除该信息!"<<endl;
}
void search_No() //用编号查找人事信息{
read_per();
char no[10];
cout<<"输入你要查找人事信息的编号"<<endl;
cin>>no;
for(int i=0;i<n;i++)
if(strcmp(no,p[i].No)==0) break;
if(i<n)
{
cout<<"编号为"<<no<<"的人事信息"<<endl;
cout<<"编号:"<<p[i].No<<endl;
cout<<"姓名:"<<p[i].Name<<endl;
cout<<"性别:"<<p[i].sex<<endl;
cout<<"年龄:"<<p[i].age<<endl;
cout<<"职务:"<<p[i].job<<endl;
cout<<"政治面貌:"<<p[i].politic<<endl;
cout<<"最高学历:"<<p[i].edu_level<<endl;
cout<<"任职时间:"<<p[i].period<<endl;
cout<<"来院时间:"<<p[i].start_time<<endl;
}
else
cout<<"查无此人!\n";
}
void search_name() //用姓名查找人事信息{
read_per();
char name[10];
cout<<"输入你要查找人的姓名"<<endl;
cin>>name;
for(int i=0;i<n;i++)
if(strcmp(name,p[i].Name)==0) break;
if(i<n)
{
cout<<"姓名为"<<name<<"的人事信息"<<endl;
cout<<"编号:"<<p[i].No<<endl;
cout<<"姓名:"<<p[i].Name<<endl;
cout<<"性别:"<<p[i].sex<<endl;
cout<<"年龄:"<<p[i].age<<endl;
cout<<"职务:"<<p[i].job<<endl;
cout<<"政治面貌:"<<p[i].politic<<endl;
cout<<"最高学历:"<<p[i].edu_level<<endl;
cout<<"任职时间:"<<p[i].period<<endl;
cout<<"来院时间:"<<p[i].start_time<<endl;
}
else
cout<<"查无此人!\n";
}
void revise_per() //修改职工信息
{
read_per();
char no[10];
cout<<"输入你要修改的人事信息的编号:";
cin>>no;
for(int i=0;i<n;i++)
if(strcmp(no,p[i].No)==0)
{
cout<<"要修改的编号为"<<no<<"的人事信息"<<endl;
cout<<"编号:"<<p[i].No<<endl;
cout<<"姓名:"<<p[i].Name<<endl;
cout<<"性别:"<<p[i].sex<<endl;
cout<<"年龄:"<<p[i].age<<endl;
cout<<"职务:"<<p[i].job<<endl;
cout<<"政治面貌:"<<p[i].politic<<endl;
cout<<"最高学历:"<<p[i].edu_level<<endl;
cout<<"任职时间:"<<p[i].period<<endl;
cout<<"来院时间:"<<p[i].start_time<<endl;
cout<<"输入修改后的人事信息"<<endl;
cout<<"编号: ";
cin>>p[i].No;
cout<<"姓名: ";
cin>>p[i].Name;
cout<<"性别: ";
cin>>p[i].sex;
cout<<"年龄: ";
cin>>p[i].age;
cout<<"职务: ";
cin>>p[i].job;
cout<<"政治面貌: ";
cin>>p[i].politic;
cout<<"最高学历: ";
cin>>p[i].edu_level;
cout<<"任职时间: ";
cin>>p[i].period;
cout<<"来院时间: ";
cin>>p[i].start_time;
}
cout<<"保存修改后的信息"<<endl;
}
void save_revise() //保存修改后的人事信息{
read_per();
ofstream outfile("人事档案.txt",ios::trunc); //把文件里的人事信息全部清除
if(!outfile)
cerr<<"打开失败"<<endl;
else
{
for(int i=0;i<n;i++)
{
outfile<<setw(10)<<p[i].No;
outfile<<setw(10)<<p[i].Name;
outfile<<setw(10)<<p[i].sex;
outfile<<setw(10)<<p[i].age;
outfile<<setw(10)<<p[i].job;
outfile<<setw(10)<<p[i].politic;
outfile<<setw(10)<<p[i].edu_level;
outfile<<setw(10)<<p[i].period;
outfile<<setw(10)<<p[i].start_time;
}
outfile.close();
}
}
void sortarray_age() //用年龄大小对人事信息进行排序{
read_per();
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
{
if(p[i].age>p[j].age)
{
b.age=p[i].age;
p[i].age=p[j].age;
p[j].age=b.age;
}
}
cout<<"将排序后的人事信息保存到文件"<<endl;
ofstream outfile("人事档案.txt",ios::trunc); //把文件里的信息全部清除if(!outfile)
cerr<<"打开失败!"<<endl;
else
{
for(int k=0;k<n;k++) //把排序后的人事信息保存到文件
{
outfile<<setw(10)<<p[k].No;
outfile<<setw(10)<<p[k].Name;
outfile<<setw(10)<<p[k].sex;
outfile<<setw(10)<<p[k].age;
outfile<<setw(10)<<p[k].job;
outfile<<setw(10)<<p[k].politic;
outfile<<setw(10)<<p[k].edu_level;
outfile<<setw(10)<<p[k].period;
outfile<<setw(10)<<p[k].start_time;
}
outfile.close();
}
}
void sum_sex() //统计女工人数
{
read_per();
int sum=0;
for(int i=0;i<n;i++)
if(p[i].sex=='女')
sum++;
cout<<"女工人数为:"<<sum<<endl;
}。