程序设计职工工资管理系统

上传人:仙*** 文档编号:35122467 上传时间:2021-10-26 格式:DOC 页数:14 大小:85KB
收藏 版权申诉 举报 下载
程序设计职工工资管理系统_第1页
第1页 / 共14页
程序设计职工工资管理系统_第2页
第2页 / 共14页
程序设计职工工资管理系统_第3页
第3页 / 共14页
资源描述:

《程序设计职工工资管理系统》由会员分享,可在线阅读,更多相关《程序设计职工工资管理系统(14页珍藏版)》请在装配图网上搜索。

1、#include stdio.h #include stdlib.h #include string.h int shoudsave=0; char dir15; struct member char num5;/编号 char name15; char sex1; float spercent; float zpercent; float xpercent; float jiangjin; float totle; float ave; ; /一个结构体 typedef struct node struct member data;/指向结构体的结构体 struct node *next;

2、Node,*Link; void explain() printf(=关于此程序的操作说明=n); printf(=1:员工每旬应该完成量为33.3个百分点,输入只输数字部分。n); printf(=2:员工每月应该完成量完成量为100个百分点。n); printf(=3:员工奖金按其超额总应该完成量(即百分之百)的多少计算。n); printf(=4:奖金=(总完成比-1)*1000。n); printf(=5:员工底金为1000元。n); printf(=6:逻辑删除资料必须在已经保存了先前记录的基础上方可进行。n); printf(=7:进行逻辑删除资料后如果保存即变为物理删除。n);

3、printf(=8:本程序在c+环境中完成,程序文件扩展名为.c。n); void menu() /菜单 printf(*); printf(t1获取说明信息ttttt 2输入员工资料n); printf(t3删除员工资料ttttt 4查询员工资料n); printf(t5修改员工资料ttttt 6显示员工资料n); printf(t7统计员工业绩ttttt 8排序员工实发工资n); printf(t9保存员工资料ttttt10逻辑删除员工资料n); printf(t0退出系统n); printf(*n); void printc() / 本函数用于输出中文 printf(编号 姓名 性别 总

4、完成比 旬平均 基本工资 奖金 工资总额 n); void printe(Node *p)/本函数用于输出英文 printf(%-5s%-10s%-4s%6.1f %6.1f %6.1f %6.1f %6.1fn,p-data.num,p-data.name,p-data.sex,p-data.totle,p-data.ave,1000.0,p-data.jiangjin,1000+p-data.jiangjin); void printstart() printf(-n); void Wrong() /如果错误 printf(n=提示:输入错误!n); void Nofind() /如果没找

5、到 printf(n=提示:没有找到该员工!n); Node* Locate(Link l,char findmess,char nameornum) /该函数用于定位连表中符合要求的接点,并返回该指针 Node *r; if(strcmp(nameornum,num)=0) /按编号查询 r=l-next; while(r!=NULL) if(strcmp(r-data.num,findmess)=0) return r; r=r-next; else if(strcmp(nameornum,name)=0) /按姓名查询 r=l-next; while(r!=NULL) if(strcmp

6、(r-data.name,findmess)=0) return r; r=r-next; return 0; void Add(Link l) /增加员工 Node *p,*r,*s; char num10; r=l; s=l-next; while(r-next!=NULL) r=r-next; /将指针置于最末尾 /while(1) printf(请你输入编号(以0返回上一级菜单:); fflush(stdin); gets(num); if(strcmp(num,0)=0)return;/比较判断是否返回 /break; while(s) if(strcmp(s-data.num,nu

7、m)=0) /比较判断是否重复 printf(=提示:编号为%s的员工已经存在,若要修改请你选择4 修改!n,num); printstart(); printc(); printe(s); printstart(); printf(n); return; s=s-next; p=(Node *)malloc(sizeof(Node); /开辟一个指定大小的存储空间 strcpy(p-data.num,num); printf(请您输入姓名:); scanf(%s,p-data.name); getchar(); printf(请您输入性别(m/f):); scanf(%s,p-data.se

8、x); getchar(); printf(请您输入上旬完成(百分比):); scanf(%f,&p-data.spercent); getchar(); printf(请您输入中旬完成(百分比):); scanf(%f,&p-data.zpercent); getchar(); printf(请您输入下旬完成(百分比):); scanf(%f,&p-data.xpercent); getchar(); p-data.totle=p-data.spercent+p-data.zpercent+p-data.xpercent; p-data.ave=p-data.totle / 3; if(p-

9、data.totledata.jiangjin=(p-data.totle-100)*10; /信息输入已经完成 p-next=NULL; r-next=p; r=p; shoudsave=1; void Search(Link l) /查询员工 int sel; char findmess20; Node *p; if(!l-next) printf(n=提示:没有资料可以查询!n); return; printf(n=1按编号查找n=2按姓名查找n=3返回上一级菜单n); scanf(%d,&sel); if(sel=3) if(sel=1)/编号 printf(请您输入要查找的编号:);

10、 scanf(%s,findmess); p=Locate(l,findmess,num); /定位链表中符合要求的节点 if(p) printf(ttt查找结果(完成单位:个百分比)n); printstart(); printc(); printe(p); printstart(); else Nofind(); else if(sel=2) /姓名 printf(请您输入要查找的姓名:); scanf(%s,findmess); p=Locate(l,findmess,name); /定位链表中符合要求的节点 if(p) printf(tttt查找结果n); printstart();

11、printc(); printe(p); printstart(); else Nofind(); else Wrong(); void Del(Link l) /物理删除 int sel; Node *p,*r; char findmess20; if(!l-next) printf(n=提示:没有资料可以删除!n); return; printf(n=1按编号删除n=2按姓名删除n=3返回上一级菜单n); scanf(%d,&sel); if(sel=3) if(sel=1) printf(请你输入要删除的编号:); scanf(%s,findmess); p=Locate(l,findm

12、ess,num); /定位链表中符合要求的节点 if(p) r=l; while(r-next!=p) r=r-next; r-next=p-next; free(p); printf(n=提示:该员工已经成功删除!n); shoudsave=1; else Nofind(); else if(sel=2) printf(请你输入要删除的姓名:); scanf(%s,findmess); p=Locate(l,findmess,name);/定位链表中符合要求的节点 if(p) r=l; while(r-next!=p) r=r-next; r-next=p-next; free(p); pr

13、intf(n=提示:该员工已经成功删除!n); shoudsave=1; else Nofind(); else Wrong(); void Ndel(Link l) /逻辑删除 int sel; Node *p,*r; char findmess20; if(shoudsave=1) printf(n=提示:请您先保存已输入的记录,再进行逻辑删除。要物理删除请按3。n); return; if(!l-next) printf(n=提示:没有资料可以删除!n); return; printf(n=1按编号删除n=2按姓名删除n=3返回上一级菜单n); scanf(%d,&sel); if(se

14、l=3) if(sel=1) printf(请你输入要删除的编号:); scanf(%s,findmess); p=Locate(l,findmess,num);/定位链表中符合要求的节点 if(p) r=l; while(r-next!=p) r=r-next; r-next=p-next; free(p); printf(n=提示:该员工已经成功删除!n); shoudsave=0; else Nofind(); else if(sel=2) printf(请你输入要删除的姓名:); scanf(%s,findmess); p=Locate(l,findmess,name); /定位链表中

15、符合要求的节点 if(p) r=l; while(r-next!=p) r=r-next; r-next=p-next; free(p); printf(n=提示:该员工已经成功删除!n); shoudsave=0; else Nofind(); else Wrong(); void Modify(Link l) /修改员工资料 int choose; Node *p; char findmess20; if(!l-next) printf(n=提示:没有资料可以修改!n); return; printf(请你输入要修改的员工编号(以0返回上一级菜单):); scanf(%s,findmess

16、); if(strcmp(findmess,0)=0) return; p=Locate(l,findmess,num); /定位链表中符合要求的节点 if(p) printf(=1:修改员工编号;n); printf(=2:修改员工姓名;n); printf(=3:修改员工性别;n); printf(=4:修改员工上旬完成百分比;n); printf(=5:修改员工中旬完成百分比;n); printf(=6:修改员工下旬完成百分比;n); printf(n-请你输入要修改的员工条目:); scanf(%d,&choose); switch(choose) case 1: printf(请你输

17、入新编号(原来是%s):,p-data.num); scanf(%s,p-data.num); break; case 2: printf(请你输入新姓名(原来是%s):,p-data.name); scanf(%s,p-data.name); getchar(); break; case 3: printf(请你输入新性别(原来是%s):,p-data.sex); scanf(%s,p-data.sex); break; case 4: printf(请你输入新的上旬完成百分比(原来是%5.2f ):,p-data.spercent); scanf(%f,&p-data.spercent);

18、 getchar(); p-data.totle=p-data.spercent+p-data.zpercent+p-data.xpercent; p-data.ave=p-data.totle / 3; if(p-data.totledata.jiangjin=(p-data.totle-100)*10; break; case 5: printf(请你输入新的中旬完成百分比(原来是%5.2f ):,p-data.zpercent); scanf(%f,&p-data.zpercent); getchar(); p-data.totle=p-data.spercent+p-data.zper

19、cent+p-data.xpercent; p-data.ave=p-data.totle / 3; if(p-data.totledata.jiangjin=(p-data.totle-100)*10; break; case 6: printf(请你输入新的下旬完成百分比(原来是%5.2f ):,p-data.xpercent); p-data.totle=p-data.spercent+p-data.zpercent+p-data.xpercent; p-data.ave=p-data.totle / 3; if(p-data.totledata.jiangjin=(p-data.tot

20、le-100)*10; break; default: Wrong();return; printf(n=提示:资料修改成功!n); shoudsave=1; else Nofind(); void Disp(Link l) /显示员工资料 int count=0; Node *p; p=l-next; if(!p) printf(n=提示:没有资料可以显示!n); return; printf(ttt显示结果(完成单位:个百分比)n); printstart(); printc(); printf(n); while(p) printe(p); p=p-next; printstart();

21、 printf(n); void Tongji(Link l) /统计员工资料 Node *pz,*px,*ps,*pt,*pa,*pj; /用于指向分数最高的接点 Node *r=l-next; if(!r) printf(n=提示:没有资料可以统计!n); return ; ps=pz=px=pt=pa=pj=r; while(r!=NULL) if(r-data.spercent=ps-data.spercent) ps=r; if(r-data.zpercent=pz-data.zpercent) pz=r; if(r-data.xpercent=px-data.xpercent) p

22、x=r; if(r-data.totle=pt-data.totle) pt=r; if(r-data.ave=pa-data.ave) pa=r; if(r-data.jiangjin=pa-data.jiangjin) pj=r; r=r-next; printf(-统计结果-n); printf(月总完成最高者:t%s %5.2f个百分比n,pt-data.name,pt-data.totle); printf(平均完成最高者:t%s %5.2f个百分比n,pa-data.name,pa-data.ave); printf(上旬完成最高者:t%s %5.2f个百分比n,ps-data.n

23、ame,ps-data.spercent); printf(中旬完成最高者:t%s %5.2f个百分比n,pz-data.name,pz-data.zpercent); printf(下旬完成最高者:t%s %5.2f个百分比n,px-data.name,px-data.xpercent); printf( 奖金最高者:t%s %5.2f元n,pj-data.name,pj-data.jiangjin); printstart(); void Sort(Link l)/按员工实发工资(即其完成额大小)排序 int m; Link ll; Node *p,*rr,*s; ll=(Link)mal

24、loc(sizeof(Node); /用于做新的链表 ll-next=NULL; if(l-next=NULL) printf(n=提示:没有资料可以排序!n); return ; p=l-next; while(p) s=(Node*)malloc(sizeof(Node); /新建接点用于保存信息 s-data=p-data; s-next=NULL; rr=ll; while(rr-next!=NULL & rr-next-data.totle=p-data.totle) rr=rr-next; if(rr-next=NULL) rr-next=s; else s-next=rr-nex

25、t; rr-next=s; p=p-next; free(l); l-next=ll-next; printf(n=提示:排序已经完成!n); for(m=1;rr-next!=NULL;m+) rr=rr-next; printf(n第%d名,m); printf(n编号:%s,rr-data.num);printf( 姓名:%s,rr-data.name); printf( 性别:%s,rr-data.sex); printf( 工资总额:%5.2f+1000n,rr-data.ave); void Save(Link l) /保存已经输入的员工资料 FILE* fp; Node *p;

26、int flag=1,count=0; fp=fopen(dir,wb); if(fp=NULL) printf(n=提示:重新打开文件时发生错误!n); exit(1); p=l-next; while(p) if(fwrite(p,sizeof(Node),1,fp)=1) p=p-next; count+; else flag=0; break; if(flag) printf(n=提示:文件保存成功.(有%d条记录已经保存.)n,count); shoudsave=0; fclose(fp); void main() /主函数Main Link l;/连表 FILE *fp; /文件指

27、针 int sel; char ch; char jian; int count=0; /char mima10; Node *p,*r; printf(ttt员工工资管理系统ntttt-电子1班nttttt孙大光n); l=(Node*)malloc(sizeof(Node); l-next=NULL; r=l; fp=fopen(C:member1,rb);/打开文件夹 if(fp=NULL) printf(n=提示:文件还不存在,是否创建?(y/n)n); scanf(%c,&jian); if(jian=y|jian=Y) printf(输入路径:); scanf(%s,dir); f

28、p=fopen(dir,wb); else exit(0); if(fp)printf(n=提示:文件已经打开,正在导入记录.n); printf(n=提示:记录导入完毕,共导入%d条记录.n,0); else while(!feof(fp) p=(Node*)malloc(sizeof(Node); /开辟一个指定大小的存储空间 if(fread(p,sizeof(Node),1,fp) /将文件的内容放入接点中 p-next=NULL; r-next=p; r=p; /将该接点挂入连中 count+; fclose(fp); /关闭文件 printf(n=提示:记录导入完毕,共导入%d条记

29、录.n,count); while(1) menu(); printf(请你选择操作:); scanf(%d,&sel); if(sel=0) if(shoudsave=1) getchar(); printf(n=提示:资料已经改动,是否将改动保存到文件中(y/n)?n); scanf(%c,&ch); if(ch=y|ch=Y) Save(l); printf(n= 您已经退出系统,谢谢您的使用,再见!n); break; switch(sel) case 1:explain();break; /操作说明 case 2:Add(l);break; /增加员工资料 case 3:Del(l);break;/删除员工资料 case 4:Search(l);break;/查询员工资料 case 5:Modify(l);break;/修改员工资料 case 6:Disp(l);break;/显示员工资料 case 7:Tongji(l);break;/统计员工资料 case 8:Sort(l);break;/排序员工资料 case 9:Save(l);break;/保存员工资料 case 10:Ndel(l);break;/逻辑删除员工资料 default: Wrong();getchar();break;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!