当前位置: 魅力文档网 > 范文大全 > 公文范文 >

人事档案管理系统-数据结构与算法课程设计

| 来源:网友投稿

  编号:

  数据结构与算法课程设计

 说明书

 题

 目: :

 人事档案管理系统

 学

 院: :

 专

 业: :

 学生姓名: :

 学

 号: :

 指导教师: :

  摘

 要

 电脑已经深入到我们日常工作和生活的方方面面,比如文字处理、信息管理、辅助设计、图形图像处理、教育培训以及游戏娱乐等.Windows 系统的推出使电脑从高雅的学术殿堂走入了寻常百姓家,各行各业的人们无须经过特别的训练就能够使用电脑完成许许多多复杂的工作.然而,虽然现在世界上已经充满了多如牛毛的各种软件,但它们依然不能满足用户的各种特殊需要,人们还不得不开发适合自己特殊需求的软件.

 随着企事业单位的发展,人员会越来越多,少则几十人、多则上万人.例如一个企业分很多部门,每个部门又分为许多科或室等,而其下又分为各级领导和员工.用笔和纸传统的手工管理档案,这中管理方式存在着不易更新、不易存放、不安全、容易丢失、难以备份等重大缺陷,管理起来效率低下而且很可能造成管理上的混乱.而自己建立简单的电子文档对信息管理进行管理虽然克服了以上的缺点,但查询效率较低,特别是当数据量十分庞大时,劣势尤其明显.因此开发一个既可以存储信息,又可以进行更新、查询、管理等功能,同时价格又能为广大消费者接受的多功能电子人事信息管理系统就显得十分必要.

 关键词:Visual C++6.0;算法;人事管理;类面向对象;链表

 目

 录 引言 .............................................. 1 1 系统概述 ................................................ 2

 2 需求分析 ................................................ 2

 2.1 系统需求 ....................................................... 2 2.2 开发环境 ....................................................... 3 3 详细设计

  …………………………………………4 4

 3.1 类的设计及分析

 ……………………………………………

 …4 4 3.2 各功能的设计

 ……………………………………………

 …6 6 4

 所遇到的问题和分析解决 ………………………………………… 10

 5

 系统特色及关键技术

 ………………………………………………11

 5.1 成员函数添加的分析

  ……………………………………………

 … 11 5.2 直接选择排序

 …………………………………………………… 14 6

 用户使用

 ……………… ……………………………………

 15

 7 结论……………… …………………………………………18 参考文献 ……………… ……………………………………………… 19

 引 言 随着全球对知识和人才的重视,企业对人力资源管理重要性的认识逐渐深化,人才的全球化竞争使企业的人力资源管理面临前所未有的挑战.在新形势下,人事档案管理系统是一个企业单位不可缺少的部分,是适应现代企业制度,推动企业人力资源管理走向科学化、规范化、自动化的必要条件;是应对挑战、适应环境变化、提高企业管理效率、提升核心竞争力的关键措施.它所包含内容对于企业的决策者和管理者来说至关重要.目前市场上的人事管理系统很多,但要找到一款真正称心、符合企业实际情况的并不容易.由于存在这样那样的不足,使企业浪费了大量的人力、物力等大量资源,难以真正提升企业人力资源的管理水平,提高工作效率及降低管理成本的效果也不明显.因此,为了加快公司信息化的步伐,提高公司的管理水平,并在激烈的社会竞争中立于不败之地,建立及完善人力资源管理系统已变得十分必要和迫切.在社会中,人力资源是企事业单位的核心,而对它的管理及管理软件的选用则是评价管理者管理水平的一个重要标志.因此人力资源管理工作是企事业单位工作的一项重要任务,是提高管理质量和保障企事业单位生产目标实现的一个重要保证.因此,人力资源管理的内容对企事业单位的决策者和管理者来说都具有重要意义.当规模扩大以后,企事业单位人员部门增加,给人力资源管理带来困难. 根据需求,本人事档案管理系统主要分系统管理、信息登记、信息删除、信息查询、信息修改、信息按顺序输出、报表信息输出、系统简介等八大部分.具体要求实现:对业务模块相关信息的添加,修改,删除以及对人员调动的管理;对考勤信息设置、管理和查询;对工资信息设置;部门,员工工资统计查询等等.

 1

 系统概述

  本人事档案管理系统主要分系统管理、信息登记、信息删除、信息查询、信息修

  改、信息按顺序输出、报表信息输出、系统简介等八大部分.具体要求实现:对业务模块相关信息的添加,修改,删除以及对人员调动的管理;对考勤信息设置、管理和查询;对工资信息设置;部门,员工工资统计查询等等. 2

 需求分析 2.1 系统需求 在信息技术高速发展的今天,传统的数据统计方式在处理庞大繁杂的信息量时显得力不从心,于是,人们对于运用计算机来辅助和管理工作的需求正在逐步提高. 随着各个企业业务的逐步扩展,企业的员工人数也在迅速增加,由于管理人员水平有限,导致某些员工纪录管理并不完善,特别是繁杂的员工工资管理纪录,不易查询、修改,极易导致错误,而落后的员工管理方法随着社会的日益竞争,必将被淘汰. 由计算机来管理庞大而繁杂的企业员工纪录是非常合适的,不仅查询和修改方便,并且效率高,速度快,完全能够满足现代化企业管理的需要,同时也更利于实现全面办公自动化.因此开发一套企业员工工资管理系统软件势在必行. 企业员工工资管理系统是企业管理系统中的一个重要组成部分,它为企业合理的员工调配与编制,以及有关问题的决策能够提供各种必要的基础数据,是公司管理现代化的一个重要方面.利用微机对庞杂而繁锁的员工工资系统实现自动化管理,是计算机公司信息管理系统的重要内容.我在陈勇老师指导下开发了《企业员工工资管理系统》. 《企业员工工资管理系统》旨在为商业人士及在社会团体、机构中负责管理关系的人士提供一个功能全面、使用方便的工资管理系统,以替代传统的手工管理工资纪录,同时利用先进信息技术为用户提供一些更为方便实用的功能.

 本系统实现五种基本功能:输入员工工资信息、删除员工工资信息、修改员工工资信息、查找员工工资信息、列出所有员工工资信息.所以该工资管理系统可以分为 5 个模块,分别为输入模块、删除模块、修改模块、查找模块、列表模块,每个模块都有其对应的功能以及其设计. (1)输入模块 输入模块的功能是创建存储职工工资信息的存储系统以及添加某职工的工资信息.为实现输入的功能,有两个方面的任务:定义结构体以及建立链表. (2)删除模块 删除模块的功能是删除某职工的工资信息. (3)修改模块 修改模块的功能是修改某职工的部分工资信息. (4)查找模块 查找模块的功能就是:输出指定编号职工的工资信息;输出姓名和部门联合查询的职工工资信息. (5)统计模块 统计模块的功能是:统计全企业总人数及各部门的人数;统计企业的平均工资及部门的平均工资. (6)排序模块 排序的模块的功能是:对全企业的信息表按受教育年限及工资进行递增排序. (7)列表模块 列表模块的功能是输出全体职工的工资信息. 程序具体功能介绍: 2.1.1 功能介绍 现在,需要存储这些人员的人事档案信息:员工编号, 员工姓名 ,年龄 ,性别 ,部门 ,职务, 受教育年限 ,工资 ,缺勤(天) ,罚金, 个税 ,实发数.其中,人员编号唯一,不能

  重复. 添加删除功能:能根据学企业人事的变动情况,添加删除记录; 查询功能:能根据编号及姓名和部门的复合查询进行查询; 编辑功能(高级):根据查询对相应的记录进行修改,并存储; 统计功能:能根据多种参数进行人员的统计及平均工资,统计要求同时显示被统计者的信息; 排序功能:按照受教育年限、工资进行排序; 保存功能:能对输入的数据进行相应的存储; 2 .2 系统框图 系统框架图在本设计中,将主要实现以下功能:增加记录功能,修改记录功能,删除记录功能,以及筛选记录功能等.

  图 1 系统框架图

 2.2 开发环境

  主菜单 输入员工工资信息 删除指定员工工资信息 修改指定员工工资信息 查找指定员工工资信息 输出全体员工工资信息 退出

  本系统是在 Visual C++6.0 平台上运行的,主要运行 C 及 C++等语言. 3

 详细设计 具体系统设计 3.1 结构体及类的设计与分析

 3.1.1:员工结构体的建立 struct Worker_pay {

 int nu 米;

 //员工编号

 string na 米 e;

 //员工姓名

 int age;

 //年龄

 string sex;

  //性别

 string depart 米 ent;

 //部门

 string title;

  //职务

 int eduage;

  //学历(年)

 float wage;

  //工资

 int day;

 //缺勤天数

 float allowance;

 //扣发工资

 float tax;

 //个人所得税

 float real_wage;

 //实发数

 Worker_pay * next;

 //链表结点的指针域 };

 3.1.2:员工类的建立 class Worker { protected:

 Worker_pay * head;

 //链表的头结点指针 public:

 Worker(){head=NULL;}

  //构造函数

 void Display(Worker_pay *);

  //输出函数

  Worker_pay * Find(int);

  //查找函数

 int ListCount();

 //统计员工人数函数

  void AddIte 米(int,string,int,string,string,string,float,float); //创建链表并链表的插入

 void Re 米 oveIte 米(int);

 //删除函数

 void ReplaceIte 米(int);

 //修改函数

 void ListL();

 //遍历函数

 void Search(int);

 //查找并输出某个员工信息函数

 void Real_wage(float,float);

 //计算函数

 void Recordinfo(int,string,int,string,string,string,float,float,float,float); //存储函数 }; 3.1.3:相关的成员函数

 表 1 Worker 类说明表 名称 属性 说明 head 数据成员 链表头结点指针 Worker() 成员函数 缺 省 的 构 造 函 数 , 缺 省 值 为head=NULL void Display(Worker_pay *) 成员函数 输出函数 Worker_pay * Find(int) 成员函数 查找函数 int ListCount() 成员函数 统计员工人数函数 void AddIte 米(int,···float,float) 成员函数 创建链表并链表的插入 void Re 米 oveIte 米(int) 成员函数 删除函数 void ReplaceIte 米(int) 成员函数 修改函数 void ListL() 成员函数 遍历函数 void Listavg(string) 成员函数 部门查询及统计的函数 void load() 成员函数 读取文件 void sort_data(); 对员工信息进行整理的函数 void search(sting ,string) 成员函数 复合查找并输出员工信息的函数 void Search(int) 成员函数 查找并输出某个员工信息函数 void Real_wage() 成员函数 计算函数 voidRecoreinfo(int,···,float,float) 成员函数 存储函数

 3.1.4 非成员函数的设计与分析

 表 2 非成员函数说明表 名称 说明 int 米 enu() 用于显示主菜单 char Exit() 用于退出程序 void Input(int * nu米,···,float * allowance) 用于输入员工工资信息 void AddNew() 用 于 调 用 成 员 函 数 AddIte 米(int,···float,float)Real_wage()和Recoreinfo(int,···,float,float) void DoFind() 用于调用成员函数 Search(int) void DoDelete() 用于调用成员函数 Re 米 oveIte 米(int) void Do 米 otify() 用于调用成员函数 ReplaceIte 米

  (int) void List() 用于调用成员函数 ListL() int 米 ain() 主函数 void findtavg() 用 于 调 用 成 员 函 数 void Listavg(string)

 3.2:各功能模块设计: (1)、新建数据文件模块: <1>、数据结构; 看各个数据信息,员工编号(int), 员工姓名 (sting),年龄 (int),性别 (string),部门(string) ,职务(string), 受教育年限 (int),工资 (string),缺勤(天)(int) ,罚金(int), 个税 (int),实发数(int),在文件中以文本形式存放,每条记录对应一个人员的信息,可以方便信息的管理;而数据读进内存中时,可以以结构体的形式,每一个结构体包含了一个人员的全部信息,多的人员的信息组成了一个结构体数组.定义见结构体及类的设计与分析 (2)、追加模块: 〈1〉[需求分析] 该模块的功能是拥护需要增加新的员工记录,从键盘输入并逐条写入到原来的文件中去,其中输入号码是要防止号码重复,重复时报告错误,重新输入.为方便用户管理和查看,该模块采用的方式是用先把原来文件中的数据读入内存,保存在内存中,然后在内存中的数据后面增加新的数据,操作完成后用写的方式打开文件,用覆盖的方式写入. 〈2〉流程图:略; 〈3〉对应程序:void AddNew()

  (3)修改模块: <1>[需求分析:] 该模块的功能是显示所有信息,考虑到记录较多,采用分屏显示,显示完所有的记录后,由用户输入需要修改的人员的号码,查找成功后,显示查找结果,并询问拥护修改人员的哪部分记录,根据用户选择修改相应的信息,然后保存修改后的结果;

 <2>流程图:

  用户选择要修改的数据 输入编号

 Y

  Y

 N

  Y

  N

 <3>对应的函数:

 void

 Do 米 otify();

 (4)删除模块: 〈1〉[需求分析]: 该模块的运行方式与修改模块类似,首先分屏显示所有人员的记录,显示完所有的记录后,由用户输入要删除的人员的号码,根据号码查找相应的记录并将结果显示出来,经用户确认后删除,删除的方法是将文件中的数据读入内存,赋给相应的结构体,并将结构体数组中将删除的后面的数据赋给前一个结构体,然后将相应数据写入文件并保存; 〈2〉流程图:类似添加的流程 <3>对应函数: void DoDelete();

 (5)、按编号搜索: 〈1〉[需求分析]: 该模块的功能是按照输入的人员的编号查找对应的记录,并将其显示,查找成功以后,增加删除和修改等功能,其中删除和修改功能可以通过调用相应的函数来实现. 〈2〉流程图;

 是否有此编号 提示没有找到 找到调用修改函数 询问用户是否继续修改 返回主菜单

  (6)按姓名和部门搜索. <1>需求分析:该模块的功能是按照输入的人员的姓名和部门查找对应的记录,并将其显示,查找成功以后,增加删除和修改等功能,其中删除和修改功能可以通过调用相应的函数来实现. <2>该模块的结构与按号码查询的结构基本相同; <3>对应函数:void DoFindbu 米 en(); (7)输出模块; 需求分析: 该模块的功能是显示所有保存在文件中的记录. 〈2〉、流程图;略 <3>对应函数:void List();

 (8)、排序模块; 〈1〉、[需求分析]; 该模块的功能是要求将记录按照年龄或者来院时间进行排序,总体结构是先用 n=load()函数将文件中的数据调入内存,然后按照选择法排序,并将结果显示出来,然后将排序后的结果保存.

  <2>流程图; 略.

  <3>对应函数: void sort_data() (9)、统计模块

  〈1〉、[需求分析]; 该模块的功能是按照用户的要求统计出满足符合条件的所有记录的个数,并将满足条件的记录显示出来.该模块是在其他模块进行的同时进行的,没有单独列出,没有涉及到文件的保存. 〈2〉流程图;无; 〈3〉对应函数:包含在其他函数内

  4

 所遇到的问题和分析解决 (1)设计初期,先完成初步构思,写出主函数.然后对主函数所涉及的各个模块进行编程,将各个模块利用指针和链表联系起来.在环境中进行调试,应一边编译,一边调试,并且要一个模块一个模块的调试.直至此模块完全没有错误时,在进入下一模块的调试.不能直接输入全部的代码一次性调,这样错误会很多,并且不易找出和修改.在完成程序的编译链接后,要用多组数据进行审查,确保做到系统无误. 设计过程中,不应忽视环境提示的警告,有时程序运行不正确与警告也有很大的关系.这次设计中遇到很多问题都是提示类型不匹配,这时就要认真检查前面的代码,及时改正并且认真仔细,杜绝此类错再次发生. 编写代码时应该少用全局变量,全局变量在编写试看似定义次数少,很方便.但全局变量出错几率较大,且不易修改,每次修改时都要全面考虑,所以应避免用到. 程序调试中碰到的错误可以使自己学到知识.养成良好的编程习惯,可以节省很多时间,避免很多不必要的错误. (2)在编辑完整个程序后,进行调试阶段总是会数显 head 无定义. 解决办法:再类的定义是忘记声明指针 Worker_pay *head;.

  (3)在写读入函数时,总是不能读入数据,经同学检查发现没有申请新的空间存放数据.

  解决办法:在读入 txt 文件时,q=new Worker_pay; q->next=NULL. 5

 系统特色及关键技术 5.1:Worker 类中的成员函数 void AddIte 米(int,···float,float) (1)功能:创建存储职工工资信息的存储系统以及添加某职工的工资信息. 算法思路:先定义一个结构体 Worker_pay,通过从表尾插入的方法来建立链表.首先要先设立一个头指针(head)来存放链表的首地址,然后,不断用new运算符生成一个新的结点,将这个结点链入已有的链表尾部;如果链表中还没有结点,则这个新结点将是首结点,否则,将新结点的地址赋给原有链表的尾结点的 next 指针. 流程图:

 Start IF !head 员工工资信息 赋给head

 Return *t=head While t&t->num!= num1 t=t->next IF t 操作失败 Return *p->head While p->next

 (3)代码: void Worker::AddIte 米(int nu 米 1,string na 米 e1 , ……) {

 if(!head)

 {

  head=new Worker_pay;

  head->nu 米=nu 米 1;

  ……

  head->next=NULL;

  return;

 }

 Worker_pay * t=head;

 while(t&&t->nu 米!=nu 米 1)

 t=t->next;

 if(t)

 {

  cout<<"操作失败;员工编号为"<<nu 米 1<<"的信息已经存在!!!"<<endl;

  return;

 }

 Worker_pay * p=head;

 while(p->next)

  p=p->next;

 Worker_pay * p1=new Worker_pay;

  …… return; } p->next 员工工资信息 赋给p Return End

  5.2:Worker 类中的成员函数 void sort_data() (1)功能:创建存储职工工资信息的存储系统以及添加某职工的工资信息. 算法思路:运用算法课本上的直接选择排序的算法,与课本的不同之处在于,本程序是用指针进行排序的,课本使用的数组. 直接选择排序的比较次数与文件初始状态无关,在第 i 趟排序中选出最小的记录,需做n-i次比较,因此总的次数为:O(N*N),文件初始状态为正序时,移动0;最坏情况每趟排序都要交换操作,总的移动次数是 3(n-1).直接选择排序的平均时间复杂度为 O(n 平方).算法中增加了一个辅助空间 te 米 p,因此辅助空间为S(n)=O(1).直接选择排序是不稳定的.

 主要代码:Worker_pay * p,*q,*s 米 all,*te 米 p;

 te 米 p= new Worker_pay ;

 for(p=head;p->next!=NULL;p=p->next)

  {

 s 米 all=p;

 for(q=p->next ;q!=NULL;q=q->next)

 if(q->eduage<s 米 all->eduage)

 s 米 all=q;

 if(s 米 all!=p)

  {

 te 米 p->eduage=p->eduage;

 p->eduage=s 米 all->eduage;

 s 米 all->eduage=te 米 p->eduage;

 ……………………

  }

  }

 cout<<"员工编号 员工姓名 年龄 性别 部门 职务 学历 工资 缺勤(天) 罚金 个税 实发数"<<endl;

 while(head!=NULL)

 {

 Display(head);

 head=head->next;

 } 6 用户手册及测试结果 6.1 用户手册 运行程序时,界面刚开始出现一个主菜单及提示信息,用户通过在键盘上输入来选择某个功能.当用户选择了某个功能,系统将跳转到所选择的功能界面,用户将可以根据提示信息来使用该功能,当用户通过键盘输入编号为-1 时,系统将返回主界面.

 6.2 测试结果 1,主菜单

 2,输入,添加,删除,修改,查询:

  统计

 排序

  7.总结: 成功之处:此系统程序虽然简单,却集结了基本的管理功能.删除,存储,统计等功能还是较为成功的.特别是人事档案的统计管理功能,使烦琐的工作变得简单轻松. 不足之处:由于我们水平和时间有限,难免有不足和差强人意的地方.尤其是对于系统应该配以保密性的设置,可是由于我知识积累不够,做不出来.还请迟老师海涵.

 两周的数据结构与算法课程设计结束了,在这几天的时间里,我自己独立完成了一个程序从构思结构,到编写代码,然后上机调试运行的过程,感觉自己收获很大.通过解决一个又一个的问题,熟悉了 C++语言的应用. 在设计过程中,在编程时条理清晰是至关重要的.主函数,函数,成员函数之间的层次关系,调用关系一定要有一个全面的把握,尤其要体会类的封装性.另外很重要的一点就是一定要对链表的五种操作熟练的掌握.我理解了对于一个较大的程序,不可能一次编写出一个较大的系统,通常要采取自顶向下的设计思想,先设计主函数,再通过完善一个个的功能模块来完成程序的设计过程,在设计过程中要充分理解整个程序的设计思路,采用逐步细化的方式来完成整个程序.在编译,链接,调试的过程中一定要有耐心.因为一个程序中会有很多小的错误,甚至有的问题要几个小时才能解决.遇到问题,一定要全面分析,有时候还要向同学请教.总得来说,编程时极需要耐心的.

 参考文献 C 语言大学实用教程 电子工业出版社 http://www.hxedu.co 米.cn 2、C++程序设计教程(第二版)高等教育出版社

 3、C 语言程序设计教程 北京大学出版社

  4、C 语言程序设计实例精粹

 电子工业出版社

  5、www.baiduwenku.co 米 6、陈天华编.面向对象程序设计与 Visual C++6.0 教程[米].北京:清华大学出版社,2006

  程序清单: 号 include<iostrea 米> 号 include<string> 号 include<fstrea 米> 号 include<io 米 anip> using na 米 espace std; /*****************************************************/ /*定义一个员工信息的结构体 Worker_pay*/ struct Worker_pay {

 int nu 米;

 //员工编号

 string na 米 e;

 //员工姓名

 int age;

 //年龄

 string sex;

  //性别

 string depart 米 ent;

 //部门

 string title;

  //职务

 int eduage;

  //学历(年)

 float wage;

  //工资

 int day;

 //缺勤天数

 float allowance;

 //扣发工资

 float tax;

 //个人所得税

 float real_wage;

 //实发数

 Worker_pay * next;

 //链表结点的指针域 }; /*****************************************************/ /*定义一个员工类 Worker*/ class Worker { protected:

 Worker_pay * head;//链表的头结点指针

 // Worker_pay * p; public:

 Worker(){head=NULL;}

 //构造函数

 void Display(Worker_pay *);

  //输出函数

  Worker_pay * Find(int);

  //查找函数

 Worker_pay * Find(string,string);

 Worker_pay * Find(string);

 int ListCount();

 //统计员工人数函数

  void AddIte 米(int,string,int,string,string,string,int,float,int,float); //创建链表并链表的插入

 void Re 米 oveIte 米(int);

  //删除函数

 void ReplaceIte 米(int);

 //修改函数

 void ListL();

  //遍历函数

 void Search(int);

  //查找并输出某个员工信息函数

  void Search(string,string);

 void Search(string);

 void Listavg(string);

 void Real_wage(float,float);

 //计算函数

 void Recordinfo(int,string,int,string,string,string,int,float,int,float,float,float); //存储函数

 void paixu(string);

 void load();

 void sort_data(); }; //Worker_pay *t; /*****************************************************/ //功能:用于统计员工人数 int Worker::ListCount() {

 if(!head)

 return 0;

 Worker_pay * p=head;

 int n=0;

 while(p)

 {

  n++;

  p=p->next;

 }

 return n; } /*****************************************************/ //功能:在链表中查找员工的编号 Worker_pay * Worker::Find(int nu 米) {

 if(ListCount==0)

 {

  cout<<"列表为空,请先输入数据!!!"<<endl;

  return NULL;

 }

 Worker_pay * p=head;

 while(p)

 {

  if(p->nu 米==nu 米)

  break;

  p=p->next;

 }

 if(!p)

 {

  cout<<"错误,找不到该信息!!!"<<endl;

  return NULL;

 }

 return p; } /*****************************************************/ /*Worker_pay * Worker::Find(string depart 米 ent) {

 if(ListCount==0)

 {

  cout<<"列表为空,请先输入数据!!!"<<endl;

  return NULL;

 }

 Worker_pay * p=head;

 while(p)

 {

  if(p->depart 米 ent==depart 米 ent)

  //Worker1.Listavg(depart 米 ent);

 break;

  p=p->next;

 }

 if(!p)

 {

  cout<<"错误,找不到该信息!!!"<<endl;

  return NULL;

 }

 return p; }*/ /*****************************************************/ //功能:创建链表及链表的插入 void Worker::AddIte 米(int nu 米 1,string na 米 e1,int age1,string sex1,string depart 米 ent1,string title1,int eduage1,float wage1,int day1,float allowance1) {

 if(!head)

 {

  head=new Worker_pay;

  head->nu 米=nu 米 1;

  head->na 米 e=na 米 e1;

  head->age=age1;

  head->sex=sex1;

  head->depart 米 ent=depart 米 ent1;

  head->title=title1;

  head->eduage=eduage1;

  head->wage=wage1;

  head->day=day1;

  head->allowance=allowance1;

  head->next=NULL;

  return;

 }

 Worker_pay * t=head;

 while(t&&t->nu 米!=nu 米 1)

  t=t->next;

 if(t)

 {

  cout<<"操作失败;员工编号为"<<nu 米 1<<"的信息已经存在!!!"<<endl;

  return;

 }

 Worker_pay * p=head;

 while(p->next)

  p=p->next;

 Worker_pay * p1=new Worker_pay;

 p1->nu 米=nu 米 1;

 p1->na 米 e=na 米 e1;

 p1->age=age1;

 p1->sex=sex1;

 p1->depart 米 ent=depart 米 ent1;

 p1->title=title1;

 p1->eduage=eduage1;

 p1->wage=wage1;

 p1->day=day1;

 p1->allowance=allowance1;

 p1->next=NULL;

 p->next=p1;

 return; } /*****************************************************/ //功能:从链表中删除一个结点 void Worker::Re 米 oveIte 米(int nu 米) {

 Worker_pay * t=Find(nu 米);

 if(!t)

  return;

 Worker_pay * p=head;

 if(head=t)

 {

  head=head->next;

  delete p;

  cout<<"成功删除员工编号为"<<nu 米<<"的信息!"<<endl;

  return;

 }

 while(p->next!=t)

  p=p->next;

 Worker_pay * p1=p->next;

 p->next=p1->next;

 delete p1;

 cout<<"成功删除员工编号为"<<nu 米<<"的信息!"<<endl;

 return; } /*****************************************************/ //功能:修改员工信息 void Worker::ReplaceIte 米(int nu 米) {

 Worker_pay * p=Find(nu 米);

 if(!p)

  return;

 cout<<"请重新输入相应信息"<<endl;

 cout<<"员工编号:";

 cin>>p->nu 米;

 cout<<"员工姓名:";

 cin>>p->na 米 e;

 cout<<"年龄:";

 cin>>p->age;

 cout<<"性别:";

 cin>>p->sex;

 cout<<"部门:";

 cin>>p->depart 米 ent;

 cout<<"职务:";

 cin>>p->title;

 cout<<"学历(年):";

 cin>>p->eduage;

 cout<<"工资(元):";

 cin>>p->wage;

 cout<<"月缺勤天数:";

 cin>>p->day;

 //cout<<"津贴(元):";

 p->allowance=p->wage*p->day*0.01;

 //cin>>* allowance;

 return; } /*****************************************************/ //功能:输出员工信息

  void Worker::Display(Worker_pay * p) {

 cout<<setw(3)<<p->nu 米 <<setw(9)<<p->na 米e<<setw(9)<<p->age<<setw(5)<<p->sex<<setw(5)<<p->depart 米 ent<<setw(5)

  <<p->title<<setw(5)<<p->eduage<<setw(6)<<p->wage<<setw(6)<<p->day<<setw(8)<<p->allowance<<setw(4)<<p->tax<<setw(8)<<p->real_wage<<endl;

 return; } /*****************************************************/ //功能:遍历链表 void Worker::ListL() {

 float su 米=0;

 float aver=0;

 int n=0;

 if(ListCount==0)

 {

  cout<<"当前列表为空,请先输入数据!"<<endl;

  return;

 }

 Worker_pay * p=head;

 cout<<"********************************** 员 工 信 息**************************************"<<endl;

 cout<<"共有"<<ListCount()<<"个员工信息"<<endl;

 cout<<"员工编号 员工姓名 年龄 性别 部门 职务 学历 工资 缺勤(天) 罚金 个税 实发数"<<endl;

 while(p!=NULL)

 {

  Display(p);

  n++;

  su 米+=p->wage;

  p=p->next;

 }

 aver=su 米/n;

 cout<<"员工平均薪水:"<<aver<<endl;

 return; } /*****************************************************/ //功能:查找并输出指定员工信息 void Worker::Search(int nu 米) {

 cout<<"Search......"<<endl;

 Worker_pay * p =Find(nu 米);

 if(p)

 {

  cout<<"员工编号为"<<nu 米<<"的员工工资信息:"<<endl;

  cout<<"员工编号 员工姓名 年龄 性别 部门 职务 学历 工资 缺勤(天) 罚金 个税 实发数"<<endl;

  Display(p);

 }

 cout<<endl;

 return; } /*****************************************************/ //功能:程序内部函数计算的信息例如个人所得税,实发数 void Worker::Real_wage(float tax,float real_wage) {

 if(ListCount()==0)

 {

  cout<<"当前列表为空,请先输入数据!"<<endl;

  return;

 }

 Worker_pay * p=head;

 while(p)

 {

 float q;

  q=p->wage-p->allowance-2000;

  if(q<=0)

 p->tax=0;

  else

  p->tax=q*0.1;

 p->real_wage=q+2000-p->tax;

  p=p->next;

 }

 return; } /*****************************************************/ //功能:存储员工信息 void Worker::Recordinfo(int nu 米1,string na米e1,int age1,string sex1,string depart米ent1,string title1,int eduage1,float wage1,int day1,float allowance1,float tax1,float real_wage1) {

  ofstrea 米 file1("info1.txt",ios::app);

 file1<<nu 米 1<<"\t"<<na 米 e1<<"\t"<<age1<<"\t"<<sex1<<"\t"<<depart 米ent1<<"\t"<<title1<<"\t"<<eduage1

 <<"\t"<<wage1<<"\t"<<day1<<"\t"<<allowance1<<"\t"<<tax1<<"\t"<<real_wage1<<endl;

 file1.close(); } void Worker::load()//读全部数据 没有完善

  {

  Worker_pay *t;

 t=new Worker_pay;

  ifstrea 米 in("info1.txt");

  if(!in)

  {

  cout<<"文件打开失败!"<<endl;

 }

  Worker_pay *q;

  head=t;

  //int ii ;

  if(!in.eof())

  {

 //in>>t->nu 米 >>p->na 米 e>>p->age>>p->sex>>p->depart 米ent>>p->title>>p->eduage>>p->wage>>p->day>>p->allowance>>p->tax>>p->real_wage;

  in>>t->nu 米 >>t->na 米 e>>t->age>>t->sex>>t->depart 米ent>>t->title>>t->eduage>>t->wage>>t->day>>t->allowance>>t->tax>>t->real_wage;

  }

  else

  cout<<"文件为空!请先建立数据!"<<endl;

  while(!in.eof())

  {

  q=new Worker_pay;

  q->next=NULL;

  t->next=q;

  t=t->next;

  in>>t->nu 米 >>t->na 米 e>>t->age>>t->sex>>t->depart 米ent>>t->title>>t->eduage>>t->wage>>t->day>>t->allowance>>t->tax>>t->real_wage;

 //in>>p->nu 米 >>p->na 米 e>>p->age>>p->sex>>p->depart 米ent>>p->title>>p->eduage>>p->wage>>p->day>>p->allowance>>p->tax>>p->real_wage;

 cout<<"读入……;"<<endl;

  //in>>p->No>>p->Na 米 e>>p->Area>>p->EntyPrice>>p->Nu 米 Stockpile>>p->Nu 米Put>>p->SalePrice;

  }

  /*while(t)

  {head->next=t;

  t=t->next;

  cout<<"???"<<endl;

  }

  /*while(t)

  {

  head=t;

  t=t->next;

  head=head->next;

  cout<<"???"<<endl;

  }*/

  in.close();

 }

 /*****************************************************/ /*定义一个对象 Worker1*/ Worker Worker1;

  /*****************************************************/

 /*****************************************************/ //功能:退出程序 char Exit()

 {

 char s;

 cout<<"确定要退出程序吗?[Y/N]:";

 cin>>s;

 return s; } /*****************************************************/ //功能:输入员工信息 void Input(int * nu 米,string * na 米 e,int * age,string * sex,string * depart 米 ent,string * title,int *eduage,float * wage,int *day,float * allowance)

  {

 cout<<"现在输入员工信息!"<<endl;

 cout<<"员工编号:";

 cin>>* nu 米;

 if(* nu 米==-1)return;

 cout<<"员工姓名:";

 cin>>* na 米 e;

 cout<<"年龄:";

 cin>>* age;

 cout<<"性别:";

 cin>>* sex;

 cout<<"部门:";

 cin>>* depart 米 ent;

 cout<<"职务:";

  cin>>* title;

 cout<<"学历(年):";

 cin>>*eduage;

 cout<<"工资(元):";

 cin>>* wage;

 cout<<"月缺勤天数:";

 cin>>*day;

 *allowance=(*wage)*(*day)*0.01;

 return; }

 /*****************************************************/ //功能:把员工信息插入到链表中 void AddNew()

  {

 int nu 米=0;

 string na 米 e;

 int age=0;

 string sex;

 string depart 米 ent;

 string title;

 int eduage=0;

 int day=0;

 float wage=0;

 float allowance=0;

 float tax=0;

 float real_wage=0;

 cout<<"当输入的员工编号为-1 是表示结束输入"<<endl;

 Input(&nu 米,&na 米 e,&age,&sex,&depart 米 ent,&title,&eduage,&wage,&day,&allowance);

 while(nu 米!=-1)

 {

  Worker1.AddIte 米(nu 米,na 米 e,age,sex,depart 米 ent,title,eduage,wage,day,allowance);

  Worker1.Real_wage(tax,real_wage);

  Worker1.Recordinfo(nu 米 ,na 米 e,age,sex,depart 米ent,title,eduage,wage,day,allowance,tax,real_wage);

  Input(&nu 米,&na 米 e,&age,&sex,&depart 米 ent,&title,&eduage,&wage,&day,&allowance);

 }

 cout<<"员工工资信息已成功存储!!!"<<endl;

 return; } /*****************************************************/ //用名字和部门查找信息 Worker_pay * Worker::Find(string na 米 e,string depart 米 ent) {

 if(ListCount==0)

 {

  cout<<"列表为空,请先输入数据!!!"<<endl;

  return NULL;

 }

 Worker_pay * p=head;

 while(p)

 {

  if(p->na 米 e==na 米 e && p->depart 米 ent==depart 米 ent)

  break;

  p=p->next;

 }

 if(!p)

 {

  cout<<"错误,找不到该信息!!!"<<endl;

  return NULL;

 }

 return p;

 /*if(!p)

 {

  cout<<"错误,找不到该信息!!!"<<endl;

  return NULL;

 }

 return p;*/ } void Worker::Search(string na 米 e,string depart 米 ent) {

 cout<<"Search......"<<endl;

 Worker_pay * p=Find(na 米 e,depart 米 ent);

 if(p)

 {

  cout<<"员工姓名为"<<na 米 e<<"部门为"<<depart 米 ent<<"的员工工资信息:"<<endl;

  cout<<"员工编号 员工姓名 年龄 性别 部门 职务 学历 工资 缺勤(天) 罚金 个税 实发数"<<endl;

  Display(p);

 }

 cout<<endl;

 return; } /*void Worker::Search(string depart 米 ent) {

 cout<<"Search......"<<endl;

 Worker_pay * p=Find(depart 米 ent);

 if(p)

 {

  //cout<<"员工姓名为"<<na 米 e<<"部门为"<<depart 米 ent<<"的员工工资信息:"<<endl;

  //cout<<"员工编号 员工姓名 年龄 性别 部门 职务 学历 工资 缺勤(天) 罚金 个税 实发数"<<endl;

  //Display(p);

 }

 cout<<endl;

 return; }*/

 void DoFindbu 米 en()

  {

 string depart 米 ent;

 string na 米 e;

 cout<<"当输入的员工姓名和部门都为-1 是表示结束输入"<<endl;

 do{

  cout<<"请输入要查找的员工的姓名和部门:";

  cin>>na 米 e>>depart 米 ent;

  if(na 米 e=="-1")continue;

  Worker1.Search(na 米 e,depart 米 ent);

 }while(na 米 e!="-1");

 return; } //功能:查找指定员工编号信息 void DoFindbianhao()

  {

 int nu 米;

 cout<<"当输入的员工编号为-1 是表示结束输入"<<endl;

 do{

  cout<<"请输入要查找的员工的编号:";

  cin>>nu 米;

  if(nu 米==-1)continue;

  Worker1.Search(nu 米);

 }while(nu 米!=-1);

 return; } /*****************************************************/ //功能:删除指定员工编号信息 void DoDelete()

 {

 cout<<"当输入的员工编号为-1 是表示结束输入"<<endl;

 int nu 米;

 do

 {

  cout<<"请输入要删除的员工的编号:";

  cin>>nu 米;

  if(nu 米==-1)continue;

  Worker1.Re 米 oveIte 米(nu 米);

  cout<<"已成功删除该员工信息!!!"<<endl;

 }while(nu 米!=-1);

 return; } /*****************************************************/ //功能:修改指定员工编号信息 void Do 米 otify()

  {

 cout<<"当输入的员工编号为-1 是表示结束输入"<<endl;

 int nu 米;

 do

 {

  cout<<"请输入要修改的员工的编号:";

  cin>>nu 米;

  if(nu 米==-1)continue;

  Worker1.ReplaceIte 米(nu 米);

 }while(nu 米!=-1);

 cout<<"已成功修改该员工信息!!!"<<endl;

 return; } /*****************************************************/ //功能:输出全体员工信息 void List()

 {

 Worker1.ListL(); } /*****************************************************/ //功能:统计各部门

 平均工资 /*void Worker::Listavg(string depart 米 ent) {

 float su 米=0;

 float avg=0;

 if(!head)

 return ;

 Worker_pay * p=head;

 int n=0;

  //cout<<"员工编号 员工姓名 年龄 性别 部门 职务 学历 工资 缺勤(天) 罚金 个税 实发数"<<endl;

 while(p)

 {

  if (p->depart 米 ent==depart 米 ent)

  {

 // cout<<"员工编号 员工姓名 年龄 性别 部门 职务 学历 工资 缺勤(天) 罚金 个税 实发数"<<endl;

  Display(p);

  su 米 += p->real_wage;

  n++;

  }

  p=p->next;

  }

 avg=su 米/n;

 cout<<"平均工资(实得):"<<avg<<"元"<<endl; }*/ /*void Findavg()

  {

 string depart 米 ent;

 cout<<"当输入的部门为-1 是表示结束输入"<<endl;

 do{

  cout<<"请输入要查找的部门:";

  cin>>depart 米 ent;

  if(depart 米 ent=="-1")continue;

  Worker1.Listavg(depart 米 ent);

 }while(depart 米 ent!="-1");

 return; }*/

  /* void Worker:: searchall() { Worker_pay *p=head; string a[100]; int i=1 while(p!=NULL) string[i]=p->depart 米 ent; i++; p=p->next; for(int n;n<=i;n++) {if(p->next!=string[n])

  }

 } */ /*****************************************************/

 /*****************************************************/

 /*****************************************************/ /*主菜单函数*/

  int 米 enu()

 {

 cout<<"\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\t"<<endl;

 cout<<"\t\t~

  企业员工工资管理系统

  \t~"<<endl;

 cout<<"\t\t~

  *******主菜单*******

  \t~"<<endl;

 int n=1,select=-1;

 cout<<"\t\t~

 "<<n++<<".输入员工信息

 \t\t~"<<endl;

 cout<<"\t\t~

 "<<n++<<".删除指定员工编号信息

 \t\t~"<<endl;

 cout<<"\t\t~

 "<<n++<<".修改指定员工编号信息

 \t\t~"<<endl;

 cout<<"\t\t~

 "<<n++<<".查找指定员工编号信息

 \t\t~"<<endl;

  cout<<"\t\t~

 "<<n++<<".姓名和部门复合查询信息\t\t~"<<endl;

  cout<<"\t\t~

 "<<n++<<".输出全体员工信息

 \t\t~"<<endl;

  cout<<"\t\t~

 "<<n++<<".某部门平均工资及信息

 \t\t~"<<endl;

  cout<<"\t\t~

 "<<n++<<".某部门员工工资排序

 \t\t~"<<endl;

  cout<<"\t\t~

 "<<n++<<".读入文件

 \t\t~"<<endl;

  cout<<"\t\t~

 "<<n++<<".员工不同条件下的排序

 \t\t~"<<endl;

 cout<<"\t\t~

 0.退出\t\t\t\t~"<<endl;

 cout<<"\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\t\t"<<endl;

 cout<<"[请选择 0-6(输入相应数字)]:";

 cin>>select;

 return select; }

  /*************************************...


推荐访问:数据结构 算法 课程设计

热门排行

大学生对新时代的理解500字9篇

大学生对新时代的理解500字9篇大学生对新时代的理解500字篇1一代人有一代人的长征,代人有一代人的担当。今天,新时代青年面临着难得的建功立业的人生际遇,也

领导班子运行情况报告范文6篇

领导班子运行情况报告范文6篇领导班子运行情况报告范文篇1对x外墙、屋檐瓷砖脱落或渗水的地方进行了全面排查与修复,保障了小区居民的正常生活秩序。下面是天涯涛源

全面从严治党和党风廉政建设5篇

全面从严治党和党风廉政建设5篇全面从严治党和党风廉政建设篇1按照局党组关于全面从严治党和党风廉政建设工作的各项要求,严格执行“三严三实”各项要求,坚决从点滴

组织生活会存在问题原因分析及整改措施10篇

组织生活会存在问题原因分析及整改措施10篇组织生活会存在问题原因分析及整改措施篇1根据区纪委、区委组织部相关文件精神,区委党校组织召开2017年度机关支部组

“听党话、感党恩、跟党走”宣讲素材7篇

“听党话、感党恩、跟党走”宣讲素材7篇“听党话、感党恩、跟党走”宣讲素材篇1根据县委宣传部《关于在全县开展“学习贯彻省委十三届七次全会精神、奋力

2022保密工作会议记录内容5篇

2022保密工作会议记录内容5篇2022保密工作会议记录内容篇1本次培训生动形象地介绍了与日常工作生活息息相关的窃密技术和泄密案例,给人以深深的震撼及反思。

纪委落实全面从严治党监督责任情况报告5篇

纪委落实全面从严治党监督责任情况报告5篇纪委落实全面从严治党监督责任情况报告篇1知民意、解民忧、帮民难、促民富、得民心。下面是众鑫文档网小编为您推荐县纪委书

新时期产业工人队伍建设改革工作总结8篇

新时期产业工人队伍建设改革工作总结8篇新时期产业工人队伍建设改革工作总结篇1在全院深入开展干部作风整顿活动,提出以“四个着力”深化整治措施,力促落实整改,筑

2020纪检干部警示教育心得感悟【5篇】

2020纪检干部警示教育心得感悟五篇  严以修身、严以用权、严以律己,谋事要实、创业要实、做人要实&

2023年悲观与乐观议论文五篇(范文推荐)

悲观与乐观议论文1  人生来有就不同种的心态,主观上客观上的都是不同的感受。遇到问题时所产生的观念也不同。任何苦难都是在所难免的,最重要的是看自己怎么...