当前位置:文档之家› 职工信息管理

职工信息管理

摘要一个好的职工信息管理程序在企业及用人单位扮演着重要的角色。

本“职工信息管理系统”用菜单方式进行选择,编写存放职工的基本信息,包含职工工号、姓名、性别、职位、年龄、工资、住址、电话等,并且要求录入职工号不重复,录入的职工号信息要求用文件形式保存,并可以对其进行浏览、查询、修改、删除等基本操作,建立职工信息管理的文件。

本程序采用C++6.0,基于控制台和基于MFC两种方法实现。

关键词:职工信息管理;文件;浏览;查询;修改;MFC工程目录1需求分析 (1)1.1编写目的 (1)1.2需求概述 (1)1.3需求说明 (1)2算法基本原理 (2)3类设计 (4)3.1类的概述 (4)3.2类的接口设计 (4)3.3类的实现 (5)4基于控制台的应用程序 (12)4.1主函数设计 (12)4.2运行结果及分析 (13)5基于MFC的应用程序 (15)5.1图形界面设计 (16)5.2程序代码设计 (16)5.3运行结果及分析 (22)结论 (27)参考文献 (28)1需求分析1.1编写目的通过对用户需求进行调查分析,写出需求分析文档作为项目设计的基本准则要求,以及系统分析员进行系统分析和测试人员进行测试时的手册。

1.2需求概述设计一个职工信息管理系统,使之能有:录入职工信息并保存浏览所有职工信息查询职工信息修改职工信息并保存添加职工信息。

1.3需求说明本系统所实现的主要功能:(1)添加新成员,实现对新加入职工信息的录入,所有的信息当中主码即职工信息编号必须填写。

(2)删除职工信息,当公司有职工因故离职时,需要删除员工信息时,释放掉它所占据的数据库空间,就可以在列表中选中所要删除的记录,然后点击删除。

如果确认删除则在弹出的消息框中点击确定即可删除所选的记录。

(3)修改员工信息,由于某种原因可能导致在记录员工信息时出现错误,需要对员工信息进行修改。

在员工信息系统主窗口中选择所要修改的成员信息进行修改,点击修改后将会弹出消息框,如果确认修改则点击确定,则修改数据成功。

(4)显示职工信息,在删除职工信息和添加职工信息成功后,点击显示按钮则可对职工信息记录进行更新,显示职工信息的最新记录。

(5)姓名检索信息,点击此按钮则可以显示出当前那一条或几条员工信息,用名字来查看员工信息。

综上本系统可以对员工信息实现科学自动的管理,其中包括显示职工基本信息,并实现信息的添加、删除、显示、及检索。

经过调试,程序性能良好。

2算法基本原理面向对象的程序设计中,有经常接触类、对象等专业名词;到底什么是类、什么是对象呢?在程序又是怎样运用呢?类是面向对象程序设计的核心,它实际是一种新的数据类型,也是实现抽象类型的工具,因为类是通过抽象数据类型的方法来实现的一种数据类型。

类是对某一类对象的抽象;而对象是某一种类的实例,因此,类和对象是密切相关的。

没有脱离对象的类,也没有不依赖于类的对象。

类是一种复杂的数据类型,它是将不同类型的数据和与这些数据相关的操作封装在一起的集合体。

这有点像C语言中的结构,唯一不同的就是结构没有定义所说的“数据相关的操作”,“数据相关的操作”就是我们平常经常看到的“方法”,因此,类具有更高的抽象性,类中的数据具有隐藏性,类还具有封装性。

类的结构(也即类的组成)是用来确定一类对象的行为的,而这些行为是通过类的内部数据结构和相关的操作来确定的。

这些行为是通过一种操作接口来描述的(也即平时我们所看到的类的成员函数),使用者只关心的是接口的功能(也就是我们只关心类的各个成员函数的功能),对它是如何实现的并不感兴趣。

而操作接口又被称为这类对象向其他对象所提供的服务。

类的定义格式一般地分为说明部分和实现部分。

说明部分是用来说明该类中的成员,包含数据成员的说明和成员函数的说明。

成员函数是用来对数据成员进行操作的,又称为“方法”。

实现部分是用来对成员函数的定义。

概括说来,说明部分将告诉使用者“干什么”,而实现部分是告诉使用者“怎么干”。

类的一般定义格式如下:class <类名>{public:<成员函数或数据成员的说明>private:<数据成员或成员函数的说明>};<各个成员函数的实现>下面简单地对上面的格式进行说明:class是定义类的关键字,<类名>是种标识符,通常用T字母开始的字符串作为类名。

一对花括号内是类的说明部分(包括前面的类头)说明该类的成员。

类的成员包含数据成员和成员函数两部分。

从访问权限上来分,类的成员又分为:公有的(public)、私有的(private)和保护的(protected)三类。

公有的成员用public来说明,公有部分往往是一些操作(即成员函数),它是提供给用户的接口功能。

这部分成员可以在程序中引用。

私有的成员用private来说明,私有部分通常是一些数据成员,这些成员是用来描述该类中的对象的属性的,用户是无法访问它们的,只有成员函数或经特殊说明的函数才可以引用它们,它们是被用来隐藏的部分。

保护类(protected)将在以后介绍。

关键字public,private和protected被称为访问权限修饰符或访问控制修饰符。

它们在类体内(即一对花括号内)出现的先后顺序无关,并且允许多次出现,用它们来说明类成图1 程序流程图本系统中主要的数据结构就是职工的信息,包含职工号、姓名、性别、工资、科室、电话等,在处理过程中各项可以作为一个职工的不同属性来进行处理。

系统的执行应从功能菜单选择开始,依据用户的选择来进行后续的处理,直到用户选择退出系统为止,其间应对用户的选择做出判断及异常处理,系统的流程图如图1所示。

3类设计3.1类的概述首先定义一个employee类,再在类中定义一些数据成员和函数成员,在类中首先定义一个结构体,结构体中包括姓名、性别、工号、电话、所在科室和工资。

然后分别定义一个具有输入功能、菜单选择功能、查询功能、排序功能、删除功能、修改功能的函数。

在主函数中应用输入功能函数,通过输入功能函数进入菜单选择函数,利用switch 语句选择要进行的项目,分别进入各种函数中进行操作,然后实现employee的各种功能。

其中对一些错误输入进行处理,以完善程序。

3.2类的接口设计class employee//定义employee类{public:struct employ{char name[10];char sex;int serial;string tele;int branchnum;float salary;}num;int input();//定义成员函数void menu_select();void search();void find();void average();void list();void change();void cancel();}stu[30],write;int input();void menu_select();void search();void find();void average();void list();void change();void cancel();3.3类的实现void employee::input()//定义input成员函数,输入信息{int i;cout<<"请输入姓名.性别(男(b))/(女(g)).工号.电话位数(12以内).所在科室.工资:";for(i=0;i<N;i++){cout<<"请输入姓名:";cin>>stu[i];cout<<"请输入性别:";cin>>stu[i].num.sex;cout<<"请输入工号:";cin>>stu[i].num.serial;cout<<"请输入电话号码:";cin>>stu[i].num.tele;cout<<"所在科室:";cin>>stu[i].num.branchnum;cout<<"请输入工资:";cin>>stu[i].num.salary;cout<<endl;}write.menu_select();}void employee::menu_select()//定义menu_select成员函数,实现菜单的选择{int m;cout<<"请选择进行的项目"<<endl;cout<<"根据工号查询信息"<<endl;cout<<"根据姓名查询信息"<<endl;cout<<"工资排序输出"<<endl;cout<<"根据工号修改职工信息"<<endl;cout<<"根据工号删除职工信息"<<endl;cout<<"请选择进行的项:";cin>>m;switch(m){case 1: write.search();break;case 2: write.find();break;case 3: write.average();break;case 4: write.list();break;case 5: write.change();break;case 6: write.cancel();break;default: {cout<<"输入有误!"<<endl;menu_select();}}}void employee::search()//定义search成员函数,实现按工号查找功能{int i,count=0;int s;char c;cout<<"请输入查找人的工号:";cin>>s;{for(i=0;i<N;i++){if(stu[i].num.serial==s){{cout<<s;cout<<"的信息为:"<<endl;cout<<"************"<<endl;cout<<"**姓名:";cout<<stu[i]<<endl;cout<<"**性别:";cout<<stu[i].num.sex<<endl;cout<<"**工号:";cout<<stu[i].num.serial;cout<<"**电话:";cout<<stu[i].num.tele<<endl;cout<<"**科室:";cout<<stu[i].num.branchnum<<endl;cout<<"**工资:";cout<<stu[i].num.salary<<endl;cout<<"************"<<endl;}cout<<"按y/Y返回主菜单!"<<endl;cin>>c;if(c=='y'||c=='Y') menu_select();}else count++;}if(count==N) {cout<<"没有此人! 请重新输入!";write.search();} }}void employee::find()//定义find成员函数,实现按姓名查找功能{int i,count=0;char k[20];char c;cout<<"请输入查找人的姓名:"<<endl;cin>>k;{for(i=0;i<N;i++){if(strcmp(stu[i],k)==0){{cout<<k;cout<<"的信息为:"<<endl;cout<<"************"<<endl;cout<<"**姓名:";cout<<stu[i]<<endl;cout<<"**性别:";cout<<stu[i].num.sex<<endl;cout<<"**工号:";cout<<stu[i].num.serial;cout<<"**电话:";cout<<stu[i].num.tele<<endl;cout<<"**科室:";cout<<stu[i].num.branchnum<<endl;cout<<"**工资:";cout<<stu[i].num.salary<<endl;cout<<"************"<<endl;}cout<<"按y/Y返回主菜单!"<<endl;cin>>c;if(c=='y'||c=='Y') menu_select();}else count++;}if(count==N) {cout<<"没有此人! 请重新输入!";write.find();}}}void employee::list()//定义list函数,实现工资的排序输出{int i,j;float temp;char c;{for(i=0;i<N;i++)for(j=0;j<N-1;j++)if(stu[j].num.salary>stu[j+1].num.salary){temp=stu[j].num.salary;stu[j].num.salary=stu[j+1].num.salary;stu[j+1].num.salary=temp ;}for(i=0;i<N;i++)cout<<stu[i].num.salary;cout<<endl;cout<<endl;}cout<<"按y/Y返回主菜单!"<<endl;cin>>c;if(c=='y'||c=='Y') write.menu_select();}void employee::average()//定义average成员函数,实现求科室平均工资的功能{int i,count1=0,count2=0;float temp1=0,temp2=0,ave1,ave2;char c;for(i=0;i<N;i++)switch(stu[i].num.branchnum){case 1:temp1+=stu[i].num.salary;count1++;break;case 2:temp2+=stu[i].num.salary;count2++;break;}ave1=temp1/count1;ave2=temp2/count2;cout<<"1科室的平均工资为:"<<ave1<<endl;cout<<"2科室的平均工资为:"<<ave2<<endl;cout<<"按y/Y返回主菜单!"<<endl;cin>>c;if(c=='y'||c=='Y') write.menu_select();}void employee::change()//定义change成员函数,实现职工信息的修改功能{int i,count=0;int s;char c;cout<<"请输入工号:";cin>>s;cout<<endl;{for(i=0;i<N;i++){if(stu[i].num.serial==s){{ cout<<"请输入修改后的姓名.性别(男(b))/(女(g)).工号.电话位数(12以内).所在科室.工资:"<<endl;cout<<"**姓名:";cin>>stu[i];cout<<"**性别:"<<endl;cin>>stu[i].num.sex;cout<<"**电话:"<<endl;cin>>stu[i].num.tele;cout<<"**科室:"<<endl;cin>>stu[i].num.branchnum;cout<<"**工资:"<<endl;cin>>stu[i].num.salary;cout<<"************"<<endl;}cout<<"按y/Y返回主菜单!"<<endl;cin>>c;if(c=='y'||c=='Y') write.menu_select();}else count++;}if(count==N) {cout<<"没有此人! 请重新输入!";change();}}}void employee::cancel()//定义cancel函数,实现删除员工信息的功能{int i,count=0;int s;char c;cout<<"请输入要删除的工号:";cin>>s;{for(i=0;i<N;i++){if(stu[i].num.serial==s){for(;i<N-1;i++){stu[i].num.serial=stu[i+1].num.serial;strcpy(stu[i],stu[i+1]);stu[i].num.sex=stu[i+1].num.sex;stu[i].num.tele=stu[i+1].num.tele;stu[i].num.branchnum=stu[i+1].num.branchnum;stu[i].num.salary=stu[i+1].num.salary;}cout<<"删除成功!";cout<<"按y/Y返回主菜单!"<<endl;cin>>c;if(c=='y'||c=='Y') write.menu_select();}else count++;}if(count==N) {cout<<"没有此人! 请重新输入!";cancel();}}}void WorkerList::save() //定义save成员函数,实现把职工信息存入文件中的功能{ if(NUM<=0){cout<<"没有职工信息存入,系统将返回主菜单"<<endl; menu();}else{ ofstream fout;fout.open("D:\\worker.txt",ios::out);cout<<"文件正在保存......请稍候!!"<<endl; cout<<"数据保存成功!!!“<<endl; fout<<"已保存员工信息如下:"<<endl;fout<<"工号\t姓名\t性别\t学历\t年龄\t工资\t地址\t电话"<<endl; for(int i=0;i<count;i++)fout<<w[i].num<<'\t'<<w[i].name<<'\t'<<w[i].sex<<'\t'<<w[i].edu<<'\t'<<w[i].age<<'\t'<<w[i ].salary<<'\t'<<w[i].address<<'\t'<<w[i].tel<<endl;cout<<"系统返回主菜单:"<<endl; menu(); fout.close(); }}4基于控制台的应用程序4.1主函数设计void main(){write.input();}在程序主函数部分,通过调用input函数实现程序的逐级调用。

相关主题