收藏 分享(赏)

程序设计-职工工资管理系统.doc

上传人:dzzj200808 文档编号:5666255 上传时间:2019-03-11 格式:DOC 页数:14 大小:85KB
下载 相关 举报
程序设计-职工工资管理系统.doc_第1页
第1页 / 共14页
程序设计-职工工资管理系统.doc_第2页
第2页 / 共14页
程序设计-职工工资管理系统.doc_第3页
第3页 / 共14页
程序设计-职工工资管理系统.doc_第4页
第4页 / 共14页
程序设计-职工工资管理系统.doc_第5页
第5页 / 共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

2、*next; 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“); pri

3、ntf(“=7:进行逻辑删除资料后如果保存即变为物理 删除。n “); 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 退

4、出系统n“); printf(“*n“); void printc() / 本函数用于输出中文 printf(“编号 姓名 性别 总完成比 旬平均 基本工资 奖金 工资总额 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() pr

5、intf(“-n“); void Wrong() /如果错误 printf(“n=提示:输入错误 !n“); void Nofind() /如果没找到 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-nex

6、t; else if(strcmp(nameornum,“name“)=0) /按姓名查询 r=l-next; while(r!=NULL) if(strcmp(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

7、(num); if(strcmp(num,“0“)=0)return;/比较判断是否返回 /break; while(s) if(strcmp(s-data.num,num)=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);

8、printf(“请您输入姓名:“); scanf(“%s“,p-data.name); getchar(); printf(“请您输入性别(m/f):“); scanf(“%s“,p-data.sex); getchar(); printf(“请您输入上旬完成(百分比):“); scanf(“%f“, getchar(); printf(“请您输入中旬完成(百分比):“); scanf(“%f“, getchar(); printf(“请您输入下旬完成(百分比):“); scanf(“%f“, getchar(); p-data.totle=p-data.spercent+p-data.zpe

9、rcent+p-data.xpercent; p-data.ave=p-data.totle / 3; if(p-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 返回上一级菜

10、单n“); scanf(“%d“, if(sel=3) if(sel=1)/编号 printf(“请您输入要查找的编号:“); 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=Loca

11、te(l,findmess,“name“); /定位链表中符合要求的节点 if(p) printf(“tttt 查找结果n“); printstart(); 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(“%

12、d“, if(sel=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=1; else Nofind(); else if(sel=2) printf(“请你输入要删除的姓名:“); scanf(“%s“,findmess); p=Locate(l

13、,findmess,“name“);/定位链表中符合要求的节点 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 Wrong(); void Ndel(Link l) /逻辑删除 int sel; Node *p,*r; char findmess20; if(shoudsave=1) printf(“n=提示:请您先保 存已输入的记录,再进行逻辑删除。要物理删除请按 3。n“); return; i

14、f(!l-next) printf(“n=提示:没有资料可以删除!n“); return; printf(“n=1 按编号删除n=2 按姓名删除 n=3返回上一级菜单n“);scanf(“%d“, if(sel=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“); shoud

15、save=0; 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); printf(“n=提示:该员工已经成 功删除!n“); shoudsave=0; else Nofind(); else Wrong(); void Modify(Link l) /修改员工资料 int choose; N

16、ode *p; char findmess20; if(!l-next) printf(“n=提示:没有资料可以修改!n“); return; printf(“请你输入要修改的员工编号(以 0 返回上一级菜单):“); scanf(“%s“,findmess); if(strcmp(findmess,“0“)=0) return; p=Locate(l,findmess,“num“); /定位链表中符合要求的节点 if(p) printf(“=1:修改员工编号;n“); printf(“=2:修改员工姓名;n“); printf(“=3:修改员工性别;n“) ; printf(“=4:修改员工

17、上旬完成百分比;n“); printf(“=5:修改员工中旬完成百分比;n“); printf(“=6:修改员工下旬完成百分比;n“); printf(“n-请你输入要修改的员工条目:“); scanf(“%d“, switch(choose) case 1: printf(“请你输入新编号(原来是%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: p

18、rintf(“请你输入新性别(原来是%s):“,p -data.sex); scanf(“%s“,p-data.sex); break; case 4: printf(“请你输入新的上旬完成百分比(原来是 %5.2f ):“,p-data.spercent); scanf(“%f“, 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; bre

19、ak; case 5: printf(“请你输入新的中旬完成百分比(原来是 %5.2f ):“,p-data.zpercent); scanf(“%f“, 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 6: printf(“请你输入新的下旬完 成百分比(原来是 %5.2f ):“,p-data.xpercent)

20、; 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; default: Wrong();return; printf(“n=提示:资料修改成功!n“); shoudsave=1; else Nofind(); void Disp(Link l) /显示员工资料 int count=0; Node *p; p=l-next; if(!p) print

21、f(“n=提示:没有资料可以 显示!n“); return; printf(“ttt 显示结果(完成单位: 个百分比) n“); printstart(); printc(); printf(“n“); while(p) printe(p); p=p-next; printstart(); 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=p

22、t=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) px=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“); p

23、rintf(“月总完成最高者: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-dat a.name,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-

24、data.xpercent); printf(“ 奖金最高者:t%s %5.2f 元n“,p j-data.name,pj-data.jiangjin); printstart(); void Sort(Link l)/按员工实发工资(即其完成额大小)排序 int m; Link ll; Node *p,*rr,*s; ll=(Link)malloc(sizeof(Node); /用于做新的链表 ll-next=NULL; if(l-next=NULL) printf(“n=提示:没有资料 可以排序!n“); return ; p=l-next; while(p) s=(Node*)mallo

25、c(sizeof(Node); /新建接点用于保存信息 s-data=p-data; s-next=NULL; rr=ll; while(rr-next!=NULL if(rr-next=NULL) rr-next=s; else s-next=rr-next; 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

26、(“ 姓名:%s“ ,rr-data.name); printf(“ 性别:%s“,rr-data.sex ); printf(“ 工资总额:%5. 2f+1000n“,rr-data.ave); void Save(Link l) /保存已经输入的员工资料 FILE* fp; Node *p; 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-nex

27、t; count+; else flag=0; break; if(flag) printf(“n=提示:文件保存 成功.(有%d 条记录 已经保存.)n“, count); shoudsave=0; fclose(fp); void main() /主函数Main Link l;/连表 FILE *fp; /文件指针 int sel; char ch; char jian; int count=0; /char mima10; Node *p,*r; printf(“ttt 员工工资管理 系统ntttt- -电子1 班 nttttt 孙大光n“); l=(Node*)malloc(sizeo

28、f(Node); l-next=NULL; r=l; fp=fopen(“C:member1“,“rb“);/打开文件夹 if(fp=NULL) printf(“n=提示:文件还不存在,是否创建?(y/n)n“); scanf(“%c“, if(jian=y|jian=Y) printf(“输入路径:“ ); scanf(“%s“,dir); fp=fopen(dir,“wb“); else exit(0); if(fp)printf(“n=提示:文件已经打开,正在导入记录n“) ; printf(“n=提示:记录导入完毕,共导入%d条记录. n“,0); else while(!feof(f

29、p) 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条记录. n“,count); while(1) menu(); printf(“请你选择操作:“); scanf(“%d“, if(sel=0) if(shoudsave=1) getchar(); printf(“n=提示:资料已经改动

30、,是否将改动保存到文件中(y/n)?n“) ; scanf(“%c“, 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;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报