




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include #include #include #include #include #include using namespace std;#define NULL 0#define LEN sizeof(struct student) int const N=20;void Menu(); void Pass();int n=0; /定义一个全局变量统计职工人数 /-定义一个职工信息的结构体struct student char nameN; /用来存放姓名char sexN; /用来存放性别long id; /用来存放编号float paid3; /用来存放工资int total; /用来存放总工资struct student *next;/-职工类class Information public:Information() ; /构造函数. Information() ; /析构函数. student *creat(); /建立链表void output(student *head); /显示职工信息int count(student *head); /定义函数count()统计职工总数student *insert(student*head); /指针函数*insert()用来添加职工信息.student *cancel(student *head,long id); /指针函数*cancel()用来删除职工信息.student *find(student *head,long id); /指针函数*find()用来查找职工信息.student *modify(student *head,long id); /指针函数*modife()用来修改职工的信息.void paixu(student *head); /定义paixu()函数将职工的总额从大到小排列并输出void average(student *head); /定义职工工资平均值的函数void save(student *head); /保存文件信息student *Read(); /读取文件信息private:student *p1,*p2,*p3,*head,st; ;Information:Information() cout *n;cout -n; cout *nn; Information:Information() cout n;cout n;cout 本系统管理员 n;cout n;cout n;cout -n; cout n;cout n;cout 欢迎下次使用 n;cout n;cout n;cout 再见 n;cout n;cout建立链表信息student *Information:creat(void) /定义一个指向struct student的结构体指针函数*creat()用来录入职工信息. char chN;n=0; /用来存放职工姓名 p1=p2=(student *)malloc(LEN);/调用malloc()函数用来开辟一个新的存储单元 cout -endl;coutch;head=NULL; /给指针head赋初值while (strcmp(ch,#)!=0) /调用字符比较函数strcmp()用来判断是否继续输入p1=(student *)malloc(LEN); /调用malloc()函数用来开辟一个新的存储单元strcpy(p1-name,ch); /将循环结构前面输入的姓名复制到结构体名为p1的数组name中coutp1-sex;coutp1-id;while(p1-id)id)100000) /判断输入的编号是否有效(100000个)cout0p1-id; coutp1-paid0;while(p1-paid0)paid0)100000) /判断输入的分数是否有效(=0 =100000)cout0p1-paid0; coutp1-paid1;while(p1-paid1)paid1)100000) /判断输入的分数是否有效(=0 =100000)cout0p1-paid1; coutp1-paid2;while(p1-paid2)paid2)100000) /判断输入的分数是否有效(=0 =100000)cout0p1-paid2; p1-total=p1-paid0+p1-paid1+p1-paid2; /计算总额 if(n=0)head=p1; /如果是输入第一组职工信息就将指针p1赋给指针headelse p2-next=p1; /否则将p1赋给p2所指结构体的next指针p2=p1; /将指针p1赋给指针p2n+; /将职工人数n的值加1coutch; /将输入的姓名存放到字符数组ch中p2-next=NULL; /将p2所指结构体的next指针重新赋空值return (head);/将输入的第一组职工信息返回/-定义output()函数将职工的信息从头指针所指内容开始输出void Information:output(student *head) system(cls);if(head=NULL) cout 这是一个空表,请先输入员工信息!n;elsecout-n;cout *职工工资信息表*n;cout-n; cout|编 号| |姓 名| |性别| |基本工资| |加班工资| |其他奖金| |总额|n;cout-n; p1=head; /将头指针赋给p docoutsetw(6)idsetw(10)namesetw(10)sexsetw(10)paid0setw(10)paid1setw(12)paid2setw(12)totalendl;coutnext; /将下一组职工信息的next指针赋给pwhile(p1!=NULL); /若指针p非空则继续,目的是把所有的职工信息都传给指针p然后输出./-统计职工人数的函数int Information:count(struct student *head) /定义函数count()统计职工总数if(head=NULL)return(0); /若指针head为空返回值为0else return(1+count(head-next); /函数的递归调用/-添加职工的成绩的函数student *Information:insert( student *head) /插入新结点定义一个指向struct student的结构体指针函数*insert()用来添加职工信息.system(cls);coutt-nendl;p1=(student *)malloc(LEN); /使p1指向插入的新结点coutp1-id;while(p1-id)id)100000)cout0p1-id; /将输入的编号存放到p1所指结构体的数组id中 coutp1-name; /将输入的姓名存放到结构体名为p1的数组name中coutp1-sex; coutp1-paid0;while(p1-paid0)paid0)100000)cout0p1-paid0; /将输入的基本工资存放到p1所指结构体的数组paid中coutp1-paid1;while(p1-paid1)paid1)100000)cout0p1-paid1; /将输入的加班工资存放到p1所指结构体的数组paid中coutp1-paid2;while(p1-paid2)paid2)100000)cout0p1-paid2; /将输入的其他奖金存放到p1所指结构体的数组paid中 p1-total=p1-paid0+p1-paid1+p1-paid2;/计算总分 p2=head; /将头指针赋给p2if(head=NULL) /若没调用次函数以前的头指针head为空head=p1;p1-next=NULL; /则将p1赋给头指针head并将p1所指结构体成员指针next赋空值else while(p1-idp2-id)&(p2-next!=NULL)p3=p2; /p3指向原p2指向的结点p2=p2-next; /p2后移一个结点if(p1-idid)if(head=p2)p1-next=head;head=p1; /插入到第一个结点之前else p3-next=p1;p1-next=p2; /插入到p3所指结点之后elsep2-next=p1;p1-next=NULL; /插入到尾结点之后n+; /将职工人数加1coutt-删除职工信息student *Information:cancel(student *head,long id) /定义一个指向struct student的结构体指针函数*delete()用来删除考生信息. system(cls);if(head=NULL) /若调用次函数以前的头指针head为空 return(head);elsep1=head; /否则将头指针赋给p1while(id!=p1-id&p1-next!=NULL) /寻找要删除的结点当p1所指的职工编号不是输入的职工编号并且p1所指的next指针不为空p2=p1;p1=p1-next; /p2指向原p1指向的结点p1后移一个结点if(id=p1-id) /如果输入的职工编号是p1所指的职工编号/结点找到后删除if(p1=head) head=p1-next; /如果head指针和p1指针相等则将下一个结点赋给指针head else p2-next=p1-next; /否则将p1所指结点赋给p2所指结点将要删除的职工信息跳过去cout 删除编号为id的职工n;n-; /将职工人数减1 return(head); /将头指针返回/*修改职工数据*/student *Information:modify(student *head,long id)system(cls);coutt-nid&p1-next!=NULL)/寻找结点当p1所指的职工编号不是输入的职工编号并且p1所指的next指针不为空p1=p1-next; /p2指向原p1指向的结点p1后移一个结点 if(id=p1-id) /如果要查找的职工编号是p1所指的职工编号cout你需要修改的员工信息如下:n;cout-n;cout|编 号| |姓 名| |性别| |基本工资| |加班工资| |其他奖金| |总额|n;cout-n;coutsetw(6)idsetw(10)namesetw(10)sexsetw(10)paid0setw(10)paid1setw(12)paid2setw(12)totalendl;cout-n;coutp1-id;while(p1-id)id)100000)cout0p1-id; /将输入的编号存放到p1所指结构体的数组id中 coutp1-name; /将输入的姓名存放到结构体名为p1的数组name中coutp1-sex; coutp1-paid0;while(p1-paid0)paid0)100000)cout0p1-paid0; /将输入的基本工资存放到p1所指结构体的数组paid中coutp1-paid1;while(p1-paid1)paid1)100000)cout0p1-paid1; /将输入的加班工资存放到p1所指结构体的数组paid中coutp1-paid2;while(p1-paid2)paid2)100000)cout0p1-paid2; /将输入的其他奖金存放到p1所指结构体的数组paid中 p1-total=p1-paid0+p1-paid1+p1-paid2; /计算总分 else cout 需要修改的信息中没有编号为id查找职工信息student *Information:find(student *head,long id) /定义一个指向struct student的结构体指针函数*find()用来查找职工信息.system(cls);if(head=NULL) /若调用次函数以前的头指针head为空coutid&p1-next!=NULL)/寻找结点当p1所指的职工编号不是输入的职工编号并且p1所指的next指针不为空p1=p1-next; /p2指向原p1指向的结点p1后移一个结点if(id=p1-id) /如果要查找的职工编号是p1所指的职工编号cout-n;cout|编 号| |姓 名| |性别| |基本工资| |加班工资| |其他奖金| |总额|n;cout-n;coutsetw(6)idsetw(10)namesetw(10)sexsetw(10)paid0setw(10)paid1setw(12)paid2setw(12)totalendl;cout-n;else cout信息中没有编号为id的员工.n; /结点没找到return(head);/-定义paixu()函数将职工的工资总额从大到小排列并输出void Information:paixu(student *head) system(cls);int i,k,m=0,j;student *pN;/定义一个指向struct student的结构体指针数组p if(head!=NULL)/如果头指针是空则继续 m=count(head);cout-n;cout *员工工资统计表*n;cout-n;cout|编号| |姓名| |性别| |基本工资| |加班工资| |其他奖金| |总额| |名次|n;cout-n;p1=head;for(k=0;knext;for(k=0;km-1;k+) /选择排序法for(j=k+1;jtotaltotal)p2=pk;pk=pj;pj=p2; /从大到小排列的指针 for(i=0;im;i+)coutsetw(6)idsetw(8)namesetw(9)sexsetw(10)paid0setw(10)paid1setw(10)paid2setw(10)totalsetw(10)i+1endl;cout求各工资的平均值的函数void Information:average(student *head)int k,m;float arg1=0,arg2=0,arg3=0;if(head=NULL)/如果头指针是空则继续cout 这是一个空表,请先输入员工信息!n;elsem=count(head);p1=head;for(k=0;kpaid0;arg2+=p1-paid1;arg3+=p1-paid2;p1=p1-next;arg1/=m;arg2/=m;arg3/=m;cout *各项工资的平均值*n;cout-n;couttt基本工资的平均值: setw(4)arg1ntt加班工资的平均值: setw(4)arg2ntt奖金的平均值: setw(4)arg3n;cout保存函数.void Information:save(student *head) system(cls); ofstream out(data.txt,ios:out); outcount(head)endl; while(head!=NULL) outnamet idtt sext paid0t paid1t paid2t totalnext; /读取文件的信息student *Information:Read() system(cls); int i=0; p1=p2=( student *)malloc(LEN); head=NULL; ifstream in(data.txt,ios:in); ini; if(i=0)cout data 文件中的数据为空,请先输入数据!endl; return 0; else coutn原文件已保存的信息如下:n; cout endl; cout|姓 名| |编 号| |性别| |基本工资| |加班工资| |其他奖金| |总额|n; cout 0;i-) p1=(student *)malloc(LEN); st.idst.sex st.paid0st.paid1st.paid2st.total; strcpy(p1-name,); p1-id=st.id; strcpy(p1-sex,st.sex); p1-paid0=st.paid0; p1-paid1=st.paid1; p1-paid2=st.paid2; p1-total=st.total; if(n=0)head=p1; /如果是输入第一组职工信息就将指针p1赋给指针head else p2-next=p1; /否则将p1赋给p2所指结构体的next指针 p2=p1; /将指针p1赋给指针p2 n+; /将n的值加1 /显示读入数据 cout namet id t sex t paid0 t paid1 t paid2 t totalendl; cout endl;cout 数据已经成功读取完毕!nnnext=NULL;in.close(); return (head); /-菜单void Menu() Information person; student *head=NULL; int choice; long i; head=person.Read(); do couttendl; coutt endl; coutt _ _ _ 欢迎进入员工信息统计管理 _ _ _ endl; coutt endl; couttendl; coutt endl; coutt 相关操作选项 endl; coutt endl; couttendl; coutt endl; coutt endl; coutt 1. 员工数据输入 endl; coutt endl; coutt 2. 显示员工工资 endl; coutt endl; coutt 3. 排序统计工资 endl; coutt endl; coutt 4. 查找员工工资 endl; coutt endl; coutt 5. 增加员工工资 endl; coutt endl; coutt 6. 删除员工工资 endl; coutt endl; coutt 7. 修改员工信息 endl; coutt endl; coutt 8. 成功保存信息 endl; coutt endl; coutt 9. 安全退出系统 endl; coutt endl; couttnendl; coutchoice; while(choice9) coutchoice; /head=person.Read(); switch(choice) case 1: head=person.creat(); break; case 2: /head=person.Read(); person.output(head); break; case 3: /head=person.Read(); person.paixu(head); person.average(head); cout 参加工作的员工人数为:person.count(head)人nn; break; case 4: /head=person.Read(); couti; while(i100000) couti; person.find(head,i); break; case 5: /head=person.Rea
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江省温州市瑞安市集云实验校2026届中考数学对点突破模拟试卷含解析
- 2026届河北省保定市满城县中考联考英语试卷含答案
- 重市庆南开中学2026届中考物理适应性模拟试题含解析
- 2025年租赁合同样本:房屋租赁协议
- 驾校教练聘用劳动协议
- 2024年年健康服务项目资金申请报告代可行性研究报告
- 量化投资策略在2025年生物制药市场绩效评估报告
- 智慧公交系统2025年智能充电桩布局与充电服务评估报告
- 2025年农业面源污染治理农业面源污染治理技术培训师资培训报告
- 工业互联网平台边缘计算硬件架构2025年边缘计算与工业互联网平台智能化升级报告
- 北京市朝阳区2024-2025学年高一下学期期末语文试题(含答案)
- 安徽高危人员管理办法
- 牙外伤护理配合课件
- 2025年辅警招聘考试试题及参考答案
- 新高一家长会课件
- 腹部血管超声诊断
- 2025年湖南省高考物理真题
- 2025年吉林省中考数学试卷真题(含答案详解)
- 医学美容技术专业教学标准(高等职业教育专科)2025修订
- 党课课件含讲稿:以作风建设新成效激发干事创业新作为
- JG/T 396-2012外墙用非承重纤维增强水泥板
评论
0/150
提交评论