南京理工大学c++课程设计,工资管理

上传人:第*** 文档编号:61592885 上传时间:2018-12-05 格式:DOC 页数:20 大小:76.50KB
返回 下载 相关 举报
南京理工大学c++课程设计,工资管理_第1页
第1页 / 共20页
南京理工大学c++课程设计,工资管理_第2页
第2页 / 共20页
南京理工大学c++课程设计,工资管理_第3页
第3页 / 共20页
南京理工大学c++课程设计,工资管理_第4页
第4页 / 共20页
南京理工大学c++课程设计,工资管理_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《南京理工大学c++课程设计,工资管理》由会员分享,可在线阅读,更多相关《南京理工大学c++课程设计,工资管理(20页珍藏版)》请在金锄头文库上搜索。

1、C+课程设计报告姓名 王镇窑 学号 913104680120 班级 9131046801 任课教师 钱芸生 时间 2014.4 实验题目 工资管理 评定难易级别 A 实验报告成绩 一 题目名称:工资管理二 难度等级:A级三 课程设计要求:1. 用类的形式改写程序,将程序中工资数据用链表的形式存放,定义一个链表类,封装主要操作函数。2. 显示,修改,删除数据项时大小写通用。3. 工资数据按工资值的大小进行排序存放。4. 修改、删除数据前增加提示信息,用户确认后才能进一步操作,否则操作取消。5. 增加程序的文件输入输出功能,在执行程序中首先将工资数据从文件中读出再进行管理,在程序结束时能将工资数据

2、保存在原文件中。四.程序结构框图功能示意图:开始程序,打开文件,把文件中数据读出写入内存中。文件不存在,则提示。按0结束程序,将修改后的链表数据从内存中存到文件里。退出程序。5.根据姓名修改工资记录。4.根据姓名删除工资记录。3.根据姓名查询工资记录。2.显示工资记录。主菜单1.添加工资记录。返回主菜单返回主菜单开始程序主函数具体流程:建立一个链表类对象运行函数将文件中的数据写入内存中,如果不存在文件输出提示输出主菜单内容从键盘提取字符判断字符是不是0不是0是调用链表类函数实现添加工资记录的功能。判断是不是1调用链表类函数把整个链表打印出来。不是1是0是判断是不是2调用链表类函数,键盘输入姓名

3、查找出相应的结点,并打印出来。不是2是判断是不是3不是3调用链表类函数,键盘输入姓名查找出相应的结点,修改上一节点的next指针删除结点。是判断是不是4不是4调用链表类函数,键盘输入姓名查找出相应的结点,重新输入工资,赋值给相应的数据类。 是判断是不是5调用链表类函数将数据从内存转存到文件中。结束程序五程序设计思想整个程序是我和吴龙生同学合作完成,我们先完成了主函数的编写,再把程序各个功能的实现交由类函数实现。一共有1.添加工资记录。2.显示工资记录。3.根据姓名查询工资记录。4.根据姓名删除工资记录。5.根据姓名修改工资记录,再加上从文件写入内存,从内存写入文件,七个主要功能函数,我们把这些

4、函数分工编写,再整合整个程序。用类改编程序,我们建立了一个数据类(用于存放姓名和工资),一个结点类(存放数据类指针和下一个结点的指针),一个链表类(存放链表的头指针和结点的个数,同时封装了对链表操作的所有函数)。虽然各个程序有不同的具体要求,但链表的操作大同小异,所不同的只是结点那部分的数据类型不同。所以根据这一特点,可以将链表定义成一个类,涉及结点数据的输入、输出、复制等。在结点中涉及较多的是具体数据的形式,所以将具体的数据形式定义成数据类型的指针,所有针对数据的操作都转换为对指针的操作,在数据类中再具体实现。这样,结点的操作也可以像链表一样通用。最后,再将数据具体形式定义成一个类,涉及数据

5、的输入格式、输出形式、比较内容的大小等。那么,针对不同的数据管理,只要改动这部分就可以了。这样就实现程序的结构化了!主函数,开始运行先建立一个链表类类对象,将文件中的数据读到内存中。然后再输出整个主菜单,键入相应的命令执行相应的链表类函数实现功能。最后再把修改后的链表中的数据写入文件中,退出。六程序重要功能的实现方法1.添加工作记录,工资数据按工资值的大小进行排序存放。主菜单中添加工资记录的功能会先调用链表类Clist的成员函数voidAddRecord()。该函数会生成一个数据类成员和一个结点类成员,通过键盘输入员工的姓名和工资,并把数据赋值给数据类成员把数据类成员的指针赋给结点类成员,然后

6、再调用Clist的成员函数voidinlist(CNode*node0),并把新生成的结点类指针传递过去,该函数会在原有链表中通过工资数据的比较,按工资大小顺序给该结点找到位置并插入到原有的链表中(如果链表不存在即运行该函数时头指针值为0,则该结点就赋值给链表类成员的头指针,作为链表中的唯一结点存在。)由于一开始每一个结点都是由小到大插入的,所以该链表最终工资数据一定是按工资值的大小进行排序存放的。链表类的增加工资记录的函数:voidAddRecord()CNode*pnode;CSalary*psal;charname020;doublesalary0;coutname0;while(str

7、cmp(name0,0)coutsalary0;cin.ignore();psal=newCSalary;psal-SetSalary(name0,salary0);pnode=newCNode;pnode-InputDate(psal);inlist(pnode);coutname0;coutendlpnext;if(node0-pdata-getsalary()pdata-getsalary()node0-pnext=phead;phead=node0;elsefor(inti=0;ipdata-getsalary()p0-pdata-getsalary()&(node0-pdata-ge

8、tsalary()pdata-getsalary()p0-pnext=node0,node0-pnext=p1;p0=p0-pnext,p1=p0-pnext;if(node0-pdata-getsalary()p0-pdata-getsalary()p0-pnext=node0,node0-pnext=0;n+;2.显示工资记录。主菜单中显示工资的功能会先调用链表类Clist的成员函数voidShowList(),该函数会通过循环语句,调用每一个结点对应的结点类函数voidShowNode()函数,调用结点对应数据类成员的数据类函数voidshow()把员工的姓名和工资数据打印在显示屏上。链

9、表类的打印工资记录的函数voidShowList()/打印工资记录的类函数CNode*p1;p1=phead;inti=0;for(;iShowNode();p1=p1-pnext;结点类的显示函数voidShowNode()pdata-show();数据类的显示函数voidshow()cout姓名:nameendl工资:salaryendl;3.根据姓名查询工资记录。主菜单中根据姓名查询工资的功能是调用链表类的函数voidFindRecord()来实现,该函数通过循环语句查找所有节点,对每一节点会执行数据类的函数intcompare(charaa),该函数的功能是把字符串aa和类成员字符串n

10、ame进行比较如果两个字符串相同会返回1,否则返回0,在比较的时候会把name和aa中所有字符转换为小写字母进行比较,以实现大小写通用的功能。如果返回值为1时,链表类函数就会执行数据类函数的voidshow()函数,把该结点的工资记录打印出来,直至比较完所有结点。所以该功能可以打印出链表中所有同名(大小写通用)的工资记录。链表类的按照姓名查找工资记录的类函数:voidFindRecord()/按照姓名查找工资记录的类函数。cout请输入要查找的姓名cc;strlwr(cc);CNode*p1;p1=phead;inti=0,ss=0;for(;ipdata-compare(cc)p1-Show

11、Node();ss+;p1=p1-pnext;if(ss=0)cout未查找到该员工数据!endl;elsecout共查找到ss位员工的数据,如上所示。;数据类的比较函数:intcompare(charaa)chardd20;strcpy(dd,name);strlwr(dd);intbb=strcmp(aa,dd);if(bb=0)bb=1;elsebb=0;returnbb;4.根据姓名查找并删除工资记录。主菜单中根据姓名查找并删除工资记录的功能是调用链表类中的函数void DeleteRecord()实现的。该函数在执行查询功能时与函数voidFindRecord()基本差不多也是大小写

12、通用,但是为了方便删除结点,也是为了可以应付同名或者姓名大小写不同但是字母一样的情况出现(例如Mike,和mike),该函数建立了一个结点类的指针数组,每找到一个结点会把该结点的上一节点的指针保存在数组中(因为要更改上一结点的next指针,所以要保存上一指针),如果是头指针则把0赋给数组。接着把查询结果都打印出来,由用户选择要删除哪个用户数据。用户选择后会输出确认删除的语句,用户确认后开始删除。如果数组成员为0,则修改头指针为下一结点,如果是正常指针则修改该指针指向的next指针为下下个结点指针。链表类中按照姓名查找并删除工资记录的函数void DeleteRecord()/按照姓名查找并删除工资记录的类函数。cout请输入要查找的姓名cc;strlwr(cc); CNode *p1,*p0,*o5;p0=0;p1=phead;int i=0,ss=0;for(;ipdata-compare(cc)cout第ss+1ShowNode();ss+;p0=p1;p1=p1-pnext;if(ss=0)cout未查找到该员工数据!endl;elsecout共查找到ss位员工的数据,如上所示。要删除哪位员工的数据?endl;int kk;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号