1、(3)修改模块修改模块的功能是修改某职工的部分工资信息。(4)查找模块查找模块的功能就是:输出指定编号职工的工资信息;输出姓名和部门联合查询的职工工资信息。(5)统计模块统计模块的功能是:统计全企业总人数及各部门的人数;统计企业的平均工资及部门的平均工资。(6)排序模块排序的模块的功能是:对全企业的信息表按受教育年限及工资进行递增排序。(7)列表模块列表模块的功能是输出全体职工的工资信息。程序具体功能介绍:2.1.1 功能介绍现在,需要存储这些人员的人事档案信息:员工编号, 员工姓名 ,年龄 ,性别 ,部门 ,职务, 受教育年限 ,工资 ,缺勤(天) ,罚金, 个税 ,实发数。其中,人员编号唯
2、一,不能重复。添加删除功能:能根据学企业人事的变动情况,添加删除记录;查询功能:能根据编号及姓名和部门的复合查询进行查询;编辑功能(高级):根据查询对相应的记录进行修改,并存储;统计功能:能根据多种参数进行人员的统计及平均工资,统计要求同时显示被统计者的信息;排序功能:按照受教育年限、工资进行排序;保存功能:能对输入的数据进行相应的存储;2 .2 系统框图系统框架图在本设计中,将主要实现以下功能:增加记录功能,修改记录功能,删除记录功能,以及筛选记录功能等。图1 系统框架图2.2 开发环境 本系统是在Visual C+6.0平台上运行的,主要运行C及C+等语言。3 详细设计具体系统设计3.1
3、结构体及类的设计与分析 3.1.1:员工结构体的建立struct Worker_pay int num; /员工编号 string name; /员工姓名 int age; /年龄 string sex; /性别 string department; /部门 string title; /职务 int eduage; /学历(年) float wage; /工资 int day; /缺勤天数 float allowance; /扣发工资 float tax; /个人所得税 float real_wage; /实发数 Worker_pay * next; /链表结点的指针域;3.1.2:员工类的
4、建立class Workerprotected: Worker_pay * head; /链表的头结点指针public: Worker()head=NULL; /构造函数 void Display(Worker_pay *); /输出函数 Worker_pay * Find(int); /查找函数 int ListCount(); /统计员工人数函数 void AddItem(int,string,int,string,string,string,float,float); /创建链表并链表的插入 void RemoveItem(int); /删除函数 void ReplaceItem(int
5、); /修改函数 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=NULLvoid Display(Worker_pay *)输出函数Worker_pay
6、 * Find(int)查找函数int ListCount()统计员工人数函数void AddItem(int,float,float)创建链表并链表的插入void RemoveItem(int)删除函数void ReplaceItem(int)修改函数void ListL()遍历函数void Listavg(string)部门查询及统计的函数void load()读取文件void sort_data();对员工信息进行整理的函数void search(sting ,string)复合查找并输出员工信息的函数void Search(int)查找并输出某个员工信息函数void Real_wage
7、()计算函数voidRecoreinfo(int,float,float)存储函数3.1.4非成员函数的设计与分析表2 非成员函数说明表int Menu()用于显示主菜单char Exit()用于退出程序void Input(int * num,float * allowance)用于输入员工工资信息void AddNew()用于调用成员函数AddItem(int,float,float)Real_wage()和Recoreinfo(int,void DoFind()用于调用成员函数Search(int)void DoDelete()用于调用成员函数RemoveItem(int)void Do
8、Motify()用于调用成员函数ReplaceItem(int)void List()用于调用成员函数ListL()int main()主函数void findtavg()用于调用成员函数void Listavg(string)3.2:各功能模块设计:(1)、新建数据文件模块:、数据结构;看各个数据信息,员工编号(int), 员工姓名 (sting),年龄 (int),性别 (string),部门(string) ,职务(string), 受教育年限 (int),工资 (string),缺勤(天)(int) ,罚金(int), 个税 (int),实发数(int),在文件中以文本形式存放,每条记
9、录对应一个人员的信息,可以方便信息的管理;而数据读进内存中时,可以以结构体的形式,每一个结构体包含了一个人员的全部信息,多的人员的信息组成了一个结构体数组。定义见结构体及类的设计与分析(2)、追加模块:1需求分析该模块的功能是拥护需要增加新的员工记录,从键盘输入并逐条写入到原来的文件中去,其中输入号码是要防止号码重复,重复时报告错误,重新输入。为方便用户管理和查看,该模块采用的方式是用先把原来文件中的数据读入内存,保存在内存中,然后在内存中的数据后面增加新的数据,操作完成后用写的方式打开文件,用覆盖的方式写入。2流程图:略;3对应程序:void AddNew() (3)修改模块:需求分析:该模
10、块的功能是显示所有信息,考虑到记录较多,采用分屏显示,显示完所有的记录后,由用户输入需要修改的人员的号码,查找成功后,显示查找结果,并询问拥护修改人员的哪部分记录,根据用户选择修改相应的信息,然后保存修改后的结果;2流程图: Y Y N Y N 3对应的函数: void DoMotify();(4)删除模块:1需求分析:该模块的运行方式与修改模块类似,首先分屏显示所有人员的记录,显示完所有的记录后,由用户输入要删除的人员的号码,根据号码查找相应的记录并将结果显示出来,经用户确认后删除,删除的方法是将文件中的数据读入内存,赋给相应的结构体,并将结构体数组中将删除的后面的数据赋给前一个结构体,然后
11、将相应数据写入文件并保存;类似添加的流程对应函数: void DoDelete();(5)、按编号搜索:该模块的功能是按照输入的人员的编号查找对应的记录,并将其显示,查找成功以后,增加删除和修改等功能,其中删除和修改功能可以通过调用相应的函数来实现。2流程图;(6)按姓名和部门搜索。需求分析:该模块的功能是按照输入的人员的姓名和部门查找对应的记录,并将其显示,查找成功以后,增加删除和修改等功能,其中删除和修改功能可以通过调用相应的函数来实现。该模块的结构与按号码查询的结构基本相同;void DoFindbumen();(7)输出模块;该模块的功能是显示所有保存在文件中的记录。2、流程图;略vo
12、id List();(8)、排序模块;1、需求分析;该模块的功能是要求将记录按照年龄或者来院时间进行排序,总体结构是先用n=load()函数将文件中的数据调入内存,然后按照选择法排序,并将结果显示出来,然后将排序后的结果保存。 next=NULL。5 系统特色及关键技术5.1:Worker类中的成员函数void AddItem(int,(1)功能:创建存储职工工资信息的存储系统以及添加某职工的工资信息。算法思路:先定义一个结构体Worker_pay,通过从表尾插入的方法来建立链表。首先要先设立一个头指针(head)来存放链表的首地址,然后,不断用new运算符生成一个新的结点,将这个结点链入已有
13、的链表尾部;如果链表中还没有结点,则这个新结点将是首结点,否则,将新结点的地址赋给原有链表的尾结点的next指针。流程图:(3)代码:void Worker:AddItem(int num1,string name1 , ) if(!head) head=new Worker_pay; head-num=num1; next=NULL; return; Worker_pay * t=head; while(t&t-num!=num1) t=t-next; if(t) cout操作失败;员工编号为num1next) p=p- Worker_pay * p1=new Worker_pay;retu
14、rn;5.2:Worker类中的成员函数void sort_data()运用算法课本上的直接选择排序的算法,与课本的不同之处在于,本程序是用指针进行排序的,课本使用的数组。直接选择排序的比较次数与文件初始状态无关,在第i趟排序中选出最小的记录,需做n-i次比较,因此总的次数为:O(N*N),文件初始状态为正序时,移动0;最坏情况每趟排序都要交换操作,总的移动次数是3(n-1)。直接选择排序的平均时间复杂度为O(n平方)。算法中增加了一个辅助空间temp,因此辅助空间为S(n)=O(1)。直接选择排序是不稳定的。 主要代码:Worker_pay * p,*q,*small,*temp; temp
15、= new Worker_pay ; for(p=head;p-next!=NULL;p=p- small=p; for(q=p-next ;q!q=q- if(q-eduageeduage) small=q; if(small!=p) temp-eduage=p-eduage; p-eduage=small- small-eduage=temp- cout6 用户手册及测试结果6.1用户手册运行程序时,界面刚开始出现一个主菜单及提示信息,用户通过在键盘上输入来选择某个功能。当用户选择了某个功能,系统将跳转到所选择的功能界面,用户将可以根据提示信息来使用该功能,当用户通过键盘输入编号为-1时,
16、系统将返回主界面。 6.2 测试结果1,主菜单2,输入,添加,删除,修改,查询:统计排序7.总结:成功之处:此系统程序虽然简单,却集结了基本的管理功能。删除,存储,统计等功能还是较为成功的。特别是人事档案的统计管理功能,使烦琐的工作变得简单轻松。不足之处:由于我们水平和时间有限,难免有不足和差强人意的地方。尤其是对于系统应该配以保密性的设置,可是由于我知识积累不够,做不出来。还请迟老师海涵。两周的数据结构与算法课程设计结束了,在这几天的时间里,我自己独立完成了一个程序从构思结构,到编写代码,然后上机调试运行的过程,感觉自己收获很大。通过解决一个又一个的问题,熟悉了C+语言的应用。在设计过程中,
17、在编程时条理清晰是至关重要的。主函数,函数,成员函数之间的层次关系,调用关系一定要有一个全面的把握,尤其要体会类的封装性。另外很重要的一点就是一定要对链表的五种操作熟练的掌握。我理解了对于一个较大的程序,不可能一次编写出一个较大的系统,通常要采取自顶向下的设计思想,先设计主函数,再通过完善一个个的功能模块来完成程序的设计过程,在设计过程中要充分理解整个程序的设计思路,采用逐步细化的方式来完成整个程序。在编译,链接,调试的过程中一定要有耐心。因为一个程序中会有很多小的错误,甚至有的问题要几个小时才能解决。遇到问题,一定要全面分析,有时候还要向同学请教。总得来说,编程时极需要耐心的。参考文献C语言大学实用教程 电子工业出版社2、C+程序设计教程(第二版)高等教育出版社 3、C语言程序设计教程 北京大学出版社4、C语言程序设计实例精粹 电子工业出版社 5、6、陈天华编.面向对象程序设计与Visual C+6.0教程M.北京:清华大学出版社,2006
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1