免费预览已结束,剩余23页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VC+课程设计5.1工资管理院系:自动化学院班级:09101902姓名:刘凯强学号:0910190231一 实验内容:工资管理1.1 程序功能介绍:这是一个员工工资管理程序。工资管理的数据文件中存储有员工姓名和工资,该程序可以录入、显示、修改、删除、查找员工姓名和工资。1.2 程序设计要求:(1) 用类的形式改写程序,将程序中工资数据用链表的形式存放,定义一个链表类,封装主要的操作函数。(2) 显示、修改、删除数据项时大小写通用。(3) 工资数据按工资值的大小进行排序存放。(4) 修改、删除数据前增加提示信息,用户确认后才能进一步操作,否则操作取消(5) 增加程序的文件输入输出功能,在执行程序中首先将工资数据从文件中读出再进行管理,在程序结束时能将工资数据保存在原文件中。二 源程序结构流程框图与说明开始输入密码密码是否正确否是是否为NN新增工资记录是否为LYY查看工资记录是否为FY按姓名查询工资是否为DY按姓名删除工资是否为EY按姓名修改工资NNNN结束三 基本数据结构类:class CList /定义链表类protected:CNode *pHead; /链表头结点指针public:CList()pHead=0; /赋值CList()DeleteList(); /析构函数void AddNode(CNode *pnode); /在首部添加结点CNode *DeleteNode(CNode *); /删除一个指定的结点,返回该结点的指针CNode *LookUp(CSalary &); /查找一个指定的数据,返回该数据所在结点在链表中的指针,若没找到返回0void ShowList(); /打印整个链表void DeleteList(); /删除整个链表CNode *GetListHead()return pHead; /返回链表首结点CNode *GetListNextNode(CNode *); /返回链表指定结点的下一个结点void Insert(CNode *); /按工资的顺序插入一个结点;class CNode /定义结点类private:CSalary * pData; /用于指向数据类的指针,这是每个数据的不同部分CNode *pNext; /指向链表的指针public:CNode()pData=0;pNext=0; /结点类构造函数CNode(CNode &node) /用于拷贝的构造函数pData=node.pData; /私有成员的互相赋值pNext=node.pNext; /私有成员的互相赋值void InputData(CSalary *pSal)pData=pSal; /输入数据void ShowNode()pData-Show();CSalary *GetData()return pData; /返回工资地址friend class CList; /定义链表类为友元类;class CSalary /定义数据类private:char szName20; /存放姓名double dlSalary; /工资public:CSalary() strcpy(szName,0);dlSalary=0.0; /数据初始化CSalary(char *name,double salary) /构造函数重载strcpy(szName,name);dlSalary=salary; /赋值void SetSalary(char *,double); /置工资与姓名double GetSal()return dlSalary; /返回工资int Compare(CSalary &); /比较姓名,供查找用,比较结果为1,0void Show(); /显示工资;成员函数: void AddNode(CNode *pnode); /在首部添加结点Node *DeleteNode(CNode *); /删除一个指定的结点,返回该结点的指针CNode *LookUp(CSalary &); /查找一个指定的数据,返回该数据所在结点在链表中的指针,若没找到返回0void ShowList(); /打印整个链表void DeleteList(); /删除整个链表CNode *GetListHead()return pHead; /返回链表首结点CNode *GetListNextNode(CNode *); /返回链表指定结点的下一个结点void Insert(CNode *); /按工资的顺序插入一个结点void AddSalary(CList &SalaryList) /将记录添加到链表中,链表是唯一的void DeleteData(CList &list)/根据姓名找到要删除的结点,再进行删除结点操作void LookUpData(CList &list) /寻找所要找的姓名的结点int OpenFile(CList&list)/打开文件并建立有序链表对文件中的数据进行排序,最后输出void main(void)/主函数void Outfun(void)/输出主菜单int SaveFile(CList & List)/输入结点,保存文件void SetNewData(CList &list)/修改工资数据void ShowSalary(CList &list)/输出链表中的数据,显示员工的工资数据四程序设计思想数据管理类程序的数据用链表的形式存储,将链表定义成一个类,将结点视为类中的数据成员,也即将结点视为一个整体,涉及结点的插入、输出、删除等操作。将结点也定义成一个类,涉及结点数据的输入和输出、复制等。在结点中,涉及较多的是具体数据的形式,所以将具体的数据形式定义成数据类型的指针,所有针对数据的操作都转换为对指针的操作,在数据类再具体实现。结点的操作也像链表一样通用。将数据具体形式定义成一个类,涉及数据的输入、输出、比较等。那么,针对不同的数据管理,只要改动这部分就可以了。这样,就实现程序的结构化。四 关于程序的思考1. 输入密码的时候是不是可以把输入的字符都显示为“*”。2. 还要想想和其他函数间的关系,有的函数可以调用,那就很方便,少编一些代码,还会减少出错的几率。3. 整个过程中对类的封装性进行了充分了解,特别是在调试的时候,对象成员的调用、参数的传递、函数的衔接遇到了不少麻烦。链表部分还是不太清楚。4. 要输入数字的地方输入字母会出现错误。五 附源程序#include#include#include#includevoid Menu(void) cout*n; cout* 欢迎使用工资管理程序 *n;cout* *n;cout* 请选择以下功能 *n;cout* *n;cout* a:新增工资记录 *n;cout* l:查看工资记录 *n; cout* f:按姓名查询工资 *n;cout* d:按姓名删除工资 *n;cout* e:按姓名修改工资 *n;cout* q:退出系统 *n;cout*n;cout 0910190231 刘凯强 n;coutn;cout请输入功能代码:;/数据类:class CSalary /定义数据类private:char szName20; /存放姓名double dlSalary; /工资public:CSalary() strcpy(szName,0);dlSalary=0.0; /数据初始化CSalary(char *name,double salary) /构造函数重载strcpy(szName,name);dlSalary=salary; /赋值void SetSalary(char *,double); /置工资与姓名double GetSal()return dlSalary; /返回工资int Compare(CSalary &); /比较姓名,供查找用,比较结果为1,0void Show(); /显示工资;void CSalary:SetSalary(char *name,double salary=0.0)strcpy(szName,name); dlSalary=salary; int CSalary:Compare(CSalary &Salary)CSalary sal1,sal2; strcpy(sal1.szName,szName); strcpy(sal2.szName,Salary.szName); strlwr(sal1.szName); strlwr(sal2.szName); if (strcmp(sal1.szName,sal2.szName)=0 ) Salary.dlSalary=dlSalary; return 1;else return 0;void CSalary:Show()cout姓名: szNamen工资: dlSalaryShow();CSalary *GetData()return pData; /返回工资地址friend class CList; /定义链表类为友元类;/链表类class CList /定义链表类protected:CNode *pHead; /链表头结点指针public:CList()pHead=0; /赋值CList()DeleteList(); /析构函数void AddNode(CNode *pnode); /在首部添加结点CNode *DeleteNode(CNode *); /删除一个指定的结点,返回该结点的指针CNode *LookUp(CSalary &); /查找一个指定的数据,返回该数据所在结点在链表中的指针,若没找到返回0void ShowList(); /打印整个链表void DeleteList(); /删除整个链表CNode *GetListHead()return pHead; /返回链表首结点CNode *GetListNextNode(CNode *); /返回链表指定结点的下一个结点void Insert(CNode *); /按工资的顺序插入一个结点;CNode *CList:DeleteNode(CNode *node) CNode *pnode,*p1,*p2; pnode=pHead; if(pHead=node) p1=pHead; pHead=pHead-pNext; delete p1-pData;delete p1; elsep2=p1=pHead; while(p2!=node&p2-pNext!=0) p1=p2; p2=p2-pNext; if(p2=node) p1-pNext=p2-pNext; delete p2-pData;delete p2; else coutpData-Compare(salary)return pnode;pnode=pnode-pNext;return 0; void CList:ShowList()CNode *plist; plist=pHead; if(plist=0) cout没有数据,请先添加数据!n; coutShowNode(); plist=plist-pNext; void CList:DeleteList()CNode *P1,*P2; P2=pHead; while(P2)delete P2-pData; P1=P2; P2=P2-pNext; delete P1;CNode * CList:GetListNextNode(CNode *pnode)return pnode-pNext; /返回链表指定结点的下一个结点void CList:Insert(CNode*node)CNode *p1,*p2; if(pHead=0) pHead=node; node-pNext=0; return;if(pHead-pData-GetSal()=node-pData-GetSal() node-pNext=pHead; pHead=node; return;p2=p1=pHead; while(p2-pNext&p2-pData-GetSal()pData-GetSal() p1=p2; p2=p2-pNext; if(p2-pData-GetSal()pData-GetSal() p2-pNext=node; node-pNext=0; else node-pNext=p2; p1-pNext=node; return;int OpenFile(CList&list)ifstream file(EMP.txt,ios:binary,ios:nocreate); /以二进制读取方式打开已存在文件EMP.txtif(!file) /打开文件发生错误,程序退出cout 打开失败!n;return 0;CNode *pnode; /定义一个结点类的对象指针CSalary *salary; /定义一个数据类的对象long curpos, length; /记录文件长度的变量curpos=file.tellg(); /文件指针当前位置(头文件)file.seekg(0L,ios:end); /将文件指针移到文件尾length=file.tellg(); /文件指针当前位置(文件尾),length为文件长度file.seekg(0L,ios:beg); /文件指针移到文件头long num=length/sizeof(*salary); /数据个数for(long l=0;lInputData(salary); /结点赋值list.Insert(pnode); /把结点插入链表file.close(); /关闭文件return 1;int SaveFile(CList & List)ofstream file(EMP.txt,ios:binary); /以二进制写入方式打开文件EMP.txtif(!file) coutGetData(); /取出结点类指针file.write(char*)salary,sizeof(*salary); /写入数据salarypnode=List.GetListNextNode(pnode); /取下一个结点,形成循环file.close(); cout文件已保存!n;return 1;void AddSalary(CList &SalaryList) CNode *pNode; CSalary *pSal; char szName20; double dlPlaceSalary; cout添加工资记录n;coutn;cout姓名(输入0结束): ;cin.getline(szName,20); while(strcmp(szName,0) coutdlPlaceSalary; cin.ignore(); pSal=new CSalary; pSal-SetSalary(szName,dlPlaceSalary); pNode=new CNode; pNode-InputData(pSal); SalaryList.Insert(pNode); cout姓名(输入0结束): ;cin.getline(szName,20); coutn;void ShowSalary(CList &list)cout显示工资记录n; list.ShowList(); void LookUpData(CList &list) cout根据姓名查找工资n;char szName20; coutShowNode(); else cout您要找的人不存在n; cout请输入姓名(输入0结束): ; cin.getline(szName,20); void DeleteData(CList &list) cout根据姓名删除工资n; char name20; cout请输入要删除人的姓名(输入0结束): ; cin.getline(name,20); while(strcmp(name,0) CNode *pNode; CSalary pSal; char a; pSal.SetSalary(name,0); pNode=list.LookUp(pSal); couta; cin.get(); /跳过回车键 if(a=Y|a=y)&pNode=0) cout您要找的人不存在n; if(a=Y|a=y)&pNode!=0) list.DeleteNode(pNode); pNode=list.GetListNextNode(pNode); cout数据已删除!n; cout请输入姓名(输入0结束): ; cin.getline(name,20); void SetNewData(CList &list) cout根据姓名修改工资n;char name20; char a; coutSetSalary(name,0); pNode=list.LookUp(*pSal); couta; cin.get(); /跳过回车键 if(a=Y|a=y)&pNode=0)cout您要找的人不存在n; if(a=Y|a=y)&pNode!=0) list.DeleteNode(pNode); coutdlsal; cin.ignore(); /跳过回车键 pSal-SetSalary(name,dlsal); pNode-InputData(pSal); li
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年企业运营专员招聘面试题库及参考答案
- 2025年艺术品交易顾问招聘面试题库及参考答案
- 2025年广告文案撰写专员招聘面试题库及参考答案
- 2025年社交活动策划专员招聘面试参考题库及答案
- 2025年登记员招聘面试参考题库及答案
- 2025年产品质量检测员招聘面试参考题库及答案
- 2025年校招生招聘面试参考题库及答案
- 2025年市场拓展经理招聘面试题库及参考答案
- 2025年化妆品招商专员招聘面试参考题库及答案
- 2025年信息系统项目经理招聘面试参考题库及答案
- 2025至2030中国大豆浓缩蛋白行业市场深度研究与战略咨询分析报告
- 2025年国家开放大学(电大)《品牌传播策略与执行》期末考试复习试题及答案解析
- 2025年神经科脑卒中急性期病情评估模拟考试试题及答案解析
- YY/T 0310-2025X射线计算机体层摄影设备通用技术条件
- 中外合资企业组织文化构建研究-以S公司为例
- DB32T 5192-2025工业园区碳排放核算指南
- 口腔设备基础知识培训课件
- 剪辑调色基础知识培训课件
- 动漫五官教学课件图片
- 康复治疗技术就业
- 企业对外宣传课件
评论
0/150
提交评论