




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.#i nclude #in elude #in elude #i nclude #i nclude #in clude using n ames pace std;#defi ne NULL 0#defi ne LEN sizeof(struct stude nt) int const N=20;void Men u(); void Pass();int n=0;/-/定义一个全局变量统计职工人数定义一个职工信息的结构体struct stude ntchar n ameN;char sexN; long id;float paid3;int total;/用来存放姓名/用来存放性别/用来存放
2、编号/用来存放工资/用来存放总工资struct stude nt *n ext; ;职工类class In formatio n public:In formatio n();I nformatio n(); stude nt *creat();/构造函数.析构函数./建立链表void out pu t(stude nt *head); int coun t(stude nt *head); stude nt *in sert(stude nt*head);显示职工信息/定义函数count()统计职工总数 /指针函数*insert()用来添加职工信息.stude nt *ca ncel(stu
3、de nt *head,l ong id);stude nt *fin d(stude nt *head,l ong id);stude nt *modify(stude nt *head,l ong id);void p aixu(stude nt *head);出指针函数*cancel()用来删除职工信息.指针函数*find()用来查找职工信息. 指针函数*modife()用来修改职工的信息./定义Paixu()函数将职工的总额从大到小排列并输void average(stude nt *head); void save(stude nt *head); stude nt *Read();
4、p rivate:/定义职工工资平均值的函数/保存文件信息/读取文件信息stude nt *p 1,* p2,* p3,*head,st; ;In formatio n:l nformatio n() coutn;coutn;cout nn;In formatio n:l nformatio n() cout crncraMiiiiMiiiiiiimiiiiiiMiiimh; cout n;本系统cout n;cout n;coutn;coutn;cout n;cout n;欢迎下cout n;cout n;cout n;cout n;cout n;cout建立链表信息stude nt *ln
5、 formati on:creat(void)/定义一个指向 struct student的结构体指针函数*creat()用来录入职工信息. char chN; n=0;/用来存放职工姓名endl;p1= p2=(student *)malloc(LEN);/调用malloc()函数用来开辟一个新的存储单元 coutcout ch;head=NULL;给指针head赋初值while (strcm p( ch,#)!=0)strcm p()用来判断是否继续输入调用malloc()函数用来开辟一个新的存储单元将循环结构前面输入的姓名复制到结构体名为p1的数调用字符比较函数p1=(stude nt
6、*)malloc(LEN);strc py(p1-n ame,ch);组name中coutp 1-sex;coutp 1-id;/判断输入的编号是否有效(100000个)while( p1-id)id)100000)(01000000):;coutp 1-id;coutp1-p aid0;/判断输入的分数是否有效(=0while( p1- paid0) paid0)100000)0100000):;coutp1-p aid0;coutp1-p aid1;/判断输入的分数是否有效(=0while( p1- paid1) paid1)100000)0100000):;coutp1-p aid1;c
7、outp1-p aid2;/判断输入的分数是否有效(=0while( p1- paid2) paid2)100000)0100000):;coutp1-p aid2;p1-total=p1- paid0+p1- paid1+p1- paid2; if(n=0)head=p1;else p2-n ext=p1;p2=p1;n+;cout ch;p2- next=NULL; II/计算总额II如果是输入第一组职工信息就将指针p1赋给指针head/否则将p1赋给p2所指结构体的next指针将指针p1赋给指针p2II将职工人数n的值加1将输入的姓名存放到字符数组ch中将p2所指结构体的next指针重新
8、赋空值return (head);II将输入的第一组职工信息返回II定义output()函数将职工的信息从头指针所指内容开始输出void In formati on :out pu t(stude nt *head)system(cls);if(head=NULL) cout这是一个空表,请先输入员工信息!n;elsecoutcout *职工工资信息表*n;coutcoutI 编号 I coutrr;n;姓名I 性别I I基本工资II加班工资II其他奖金|n;总额|n;P仁head;将头指针赋给pdo coutsetw(6) id setw(10) n ame setw(10) sex set
9、w(10) paidO setw(10) paid1 setw(12) paid2 setw(12) totale ndl; coutn ext;while( p1!=NULL);出.将下一组职工信息的II若指针P非空则继续n;next指针赋给P,目的是把所有的职工信息都传给指针 P然后输II统计职工人数的函数int In formati on:co un t(struct stude nt *head) II定义函数COUnt()统计职工总数if(head=NULL)return(O);else retur n(1+co un t(head-n ext);/若指针head为空返回值为0/函数
10、的递归调用/添加职工的成绩的函数stude nt *ln formati on:i nsert( stude nt *head)插入新结点定义一个指向struct student的结构体指针函数*insert()用来添加职工信息.system(cls);coutt 请输入新增员工信息 n e ndl;p1=(student *)malloc(LEN);使 p1 指向插入的新结点coutp 1-id;while( p1-id)id)100000)将输入的编号存放到p1所指结构体的数组id中cout0p 1-id;将输入的姓名存放到结构体名为p1的数组name中coutp1-n ame;coutp
11、 1-sex;coutp1-p aid0;while( p1- paid0) paid0)100000)cout0p 1-paid0;将输入的基本工资存放到p1所指结构体的数组paid中coutp1-p aid1;while( p1- paid1) paid1)100000)cout0p 1-paid1;将输入的加班工资存放到p1所指结构体的数组paid中coutp1-p aid2;while( p1- paid2) paid2)100000)cout0p 1-paid2;/将输入的其他奖金存放到p1所指结构体的数组paid中p1-total=p1- paid0+p1- paid1+p1- p
12、aid2;/计算总分p2=head;/将头指针赋给 p2if(head=NULL)若没调用次函数以前的头指针head为空head=p1;p 1- next=NULL;/则将p1赋给头指针head并将p1所指结构体成员指针 next赋空值else while( p1-id p2-id)&(p 2- next!=NULL)p3=p2;/p3指向原p2指向的结点p2=p2-n ext;/p2后移一个结点if(p 1-idid)if(head=p2)p1-n ext=head;head=p1;插入到第一个结点之前elsep3-n ext=p1;p1-n ext=p2;/插入到p3所指结点之后else
13、p2-n ext=p1;p1- next=NULL;插入到尾结点之后n+; /将职工人数加1endl;coutt retur n (head);/删除职工信息stude nt *ln formati on:ca ncel(stude nt *head,l ong id)/ 定义一个指向 struct stude nt 的结构体指针函数*delete()用来删除考生信息.若调用次函数以前的头指针head为空system(cls);if(head=NULL)return(head);elseP1=head;while(id!=p1-id&p 1- next!=NULL)的职工编号并且否则将头指针赋
14、给p1/寻找要删除的结点当p1所指的职工编号不是输入 p2=p1; p1=p1-n ext;if(id=p 1-id)if(p 1=head) head=p1-n ext; elsep2-n ext=p1-n ext;跳过去/p2指向原p1指向的结点p1后移一个结点/如果输入的职工编号是p1所指的职工编号结点找到后删除如果head指针和p1指针相等则将下一个结点赋给指针head否则将p1所指结点赋给p2所指结点将要删除的职工信息cout删除编号为id的职工n;将职工人数减1n-;retur n( head);将头指针返回p1所指的next指针不为空/*彳修改耳口工数 */stude nt *l
15、n formati on:modify(stude nt *head,l ong id)system(cls);nendl;couttp1=(student *)malloc(LEN); / 使 p1 指向输入的结点P仁head;/否则将头指针赋给 p1while(id!=p1-id&p 1- next!=NULL)寻找结点当p1所指的职工编号不是输入的职工编号并且p1所指的next指针不为空p2指向原p1指向的结点p1后移一个结点p1=p1-n ext;/如果要查找的职工编号是p1所指的职工编号if(id=p 1-id)cout你需要修改的员工信息如下:n;coutn;cout|编号II姓名
16、I性别II基本工资II加班工资II其他奖金I 总额|n;coutn;coutsetw(6) idsetw(10) n amesetw(10) sexsetw(10) paidOsetw(10) paid1setw(12) paid2setw(12)totale ndl;n;coutcoutp 1-id;while( p1-id)id)100000)将输入的编号存放到p1所指结构体的数组id中cout0p 1-id;将输入的姓名存放到结构体名为p1的数组name中coutp1-n ame;coutp 1-sex;coutp1-p aid0;while( p1- paid0) paid0)1000
17、00)cout0p 1- paid0;将输入的基本工资存放到p1所指结构体的数组coutp1-p aid1;while( p1- paid1) paid1)100000)cout0p 1- paid1;将输入的加班工资存放到p1所指结构体的数组coutp1-p aid2;while( p1- paid2) paid2)100000)cout0p 1- paid2;将输入的其他奖金存放到p1所指结构体的数组p1-total=p1- paid0+p1- paid1+p1- paid2;/ 计算总分elsecout需要修改的信息中没有编号为id查找职工信息stude nt *ln formati o
18、n:fi nd(stude nt *head,lo ng id)/定义一个指向struct student的结构体指针函数*find()用来查找职工信息.system(cls);if(head=NULL)coutid&p 1- next!=NULL)/寻找结点当p1=p1-n ext;if(id=p 1-id)coutcout| 编号 Icout若调用次函数以前的头指针head为空p1所指的职工编号不是输入的职工编号并且p1所指的next指针不为空Ilp2指向原p1指向的结点p1后移一个结点如果要查找的职工编号是p1所指的职工编号n;姓名I 性别II基本工资II加班工资II其他奖金|n;总额|
19、n;coutsetw(6) idsetw(10) n amesetw(10) sexsetw(10) paid0setw(10) paid1setw(12) paid2setw(12)totale ndl;n;coutelsecout信息中没有编号为id的员工.n; /结点没找到 return(head);II定义Paixu()函数将职工的工资总额从大到小排列并输出void In formati on: paixu(stude nt *head)system(cls);int i,k,m=0,j;student *pN;/定义一个指向 struct student的结构体指针数组pif(hea
20、d!=NULL)/如果头指针是空则继续 m=co un t(head);n;coutcout *员工工资统计表*n;coutn;cout|编号I I姓名I 性别II基本工资I I加班工资I I其他奖金I I总额II名次|n;n;coutp1=head;for(k=0;kn ext;for(k=0;km-1;k+) / 选择排序法for(j=k+1;jtotal total)p2=pk;pk=pj;pj=p2; /从大到小排列的指针for(i=0;im;i+)coutsetw(6) idsetw(8) n amesetw(9) sexsetw(10) paid0setw(10) paid1set
21、w(10) paid2setw(10) totalsetw(10)i+1e ndl;n;cout求各工资的平均值的函数void In formatio n:average(stude nt *head) int k,m;float arg1=0,arg2=0,arg3=0;if(head=NULL)/如果头指针是空则继续cout这是一个空表,请先输入员工信息!n;elsem=co un t(head);p1=head;for(k=0;kp aid0;arg2+=p1- paid1;arg3+=p1- paid2;p1=p1-n ext;arg1/=m;arg2/=m;arg3/=m;cout
22、*各项工资的平均值*n;coutcouttt 基本工资的平均值:setw(4)arg1 ntt 加班工资的平均值:setw(4)arg2 rrtt 奖金的平均值:setw(4)arg3n; cout保存函数.void In formati on:save(stude nt *head) system(cls);ofstream out(data.txt,ios:out); outco un t(head)e ndl; while(head!=NULL) outn amet/idtt sext paidOt paid1t paid2t totaln ext;/读取文件的信息stude nt *l
23、n formati on:Read()system(cls);int i=0;p 仁 p2=( stude nt *)malloc(LEN);head=NULL;ifstream in (data.txt,ios:i n);in i;if(i=0)cout data文件中的数据为空,请先输入数据!endl; return 0;else coutn原文件已保存的信息如下:n;coute ndl;coutI姓名II编号IIn;I性别I I基本工资I I加班工资II其他奖金II总额coutO;i-)p 1=(stude nt *)malloc(LEN);in st. namest.idst.sexs
24、t .p aid0st .p aid1st .p aid2st.total; strc py(p1-n ame,st. name);p 1-id=st.id;strc py(p 1-sex,st.sex);p1- paidO=st. paid0;p1- paid1=st. paid1;p1- paid2=st. paid2;p 1-total=st.total;if(n=0)head=p1; else p2-n ext =p1;p2=p1;n+;显示读入数据cout nametid tsex t paid0 t paid1 t paid2 ttotale ndl;II如果是输入第一组职工信息就
25、将指针p1赋给指针head否则将p1赋给p2所指结构体的next指针将指针p1赋给指针p2将n的值加1coute ndl;cout数据已经成功读取完毕!nn next=NULL;in .close();return (head);菜单void Menu()In formati on person; stude nt *head=NULL; int choice;long i;head=person .Read();docoutt探couttcoutt欢迎进入员工信息统计管理coutte ndl;e ndl;e ndl;e ndl;探coutte ndl;coutt相关操作选项e ndl;cou
26、tte ndl;coutt探e ndl;coutt 探endl;coutt endl;coutt 1.员工数据输入endl;coutt 探探e ndl;coutt 探2.显示员工工资探endl;coutt 探探e ndl;coutt 探3.排序统计工资探endl;coutt 探探e ndl;coutt 4.查找员工工资endl;coutt endl;coutt 5.增加员工工资endl;coutt endl;coutt 6.删除员工工资endl;coutt endl;coutt 探7.修改员工信息探endl;coutt 探探e ndl;coutte ndl;coutt 8.成功保存信息cout
27、t coutt 9.安全退出系统coutt 探coutt探cout choice;海endl;探endl;探endl;% endl;nendl;while(choice9)cout choice;/head=person .Read();switch(choice)case 1:head=person .creat(); break;case 2:/head=person .Read();person.outpu t(head);break;case 3:/head=person .Read();person.p aixu(head); person, average(head);cout参加工作的员工人数为:person.count(head)人nn; break;case
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度黑龙江省高校教师资格证之高等教育心理学考前冲刺试卷A卷含答案
- 提升技巧:2024年CPMM试题及答案
- 解剖学试题及答案(头部)
- 专题03 主观题答题技巧总述(怎么办)-2025年中考道德与法治答题技巧与模板构建
- 经典散文知识点测试题及答案
- 科学下册期末检测卷答案1-6年级下册
- 二零二五年度海域使用权转让及海洋科技创新合作合同
- 2025年度虚拟现实(VR)内容制作解除合同书
- 二零二五年度个人房屋租赁与物业管理责任协议
- 二零二五年度拆除承重墙施工期间安全保障与应急预案合同
- 《购货合同》(Sales Contract) 中英文样本
- 机械图号编写规则
- 部编版四年级下册道德与法治 第5课 合理消费 教学课件
- 2022《输液导管相关静脉血栓形成中国专家共识》
- 普通话培训课程变调、轻声、儿化
- 10kV共箱封闭铜母线桥采购合同
- 密集烤房生物质颗粒成型燃料燃烧机技术
- CAD进阶练习100题
- 枫香精油(征求意见稿)
- 高压配电设备技术标(范本)要点
- 智能垃圾桶设计方案55264
评论
0/150
提交评论