完整c语言工资管理系统_第1页
完整c语言工资管理系统_第2页
完整c语言工资管理系统_第3页
完整c语言工资管理系统_第4页
完整c语言工资管理系统_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、完整c语言工资管理系统#include<stdio.h>#include<stdlib.h>#include<string.h>#include<malloc.h>#include<conio.h>#define len sizeof(wor)struct workerlong kahao;/*员工工资卡号*/char name10;/*员工姓名*/int month;/月份float yfgz;/*应发工资*/float sf;/*水费*/float df;/*电费*/float sj;/*税金*/float sfgz;/*实发工资

2、*/struct worker *next;typedef struct worker wor;int num; void userid();/用户登录函数char menu(void);/主菜单wor *read(wor *head);/加载函数int save(wor *head);/保存函数void inputmenu(wor *head);/输入菜单void input(wor *head);/输入员工信息void searchmenu(wor *head);/查询菜单int numsearch(wor *pnew);/卡号查询方式函数int namesearch(wor *pnew)

3、;/姓名查询方式函数void search(wor *head);/查询功能void deletesal(wor *head);/删除员工信息wor *deletenode(wor *head, long nodenum);/找到删除节点void printsal(wor *head);/打印员工信息void totalsalmenu(wor *head);/统计工资菜单void totalsal(wor *head);/*统计员工某时间段的实发工资总和*/void deletememory(wor *head);/删除内存void order(wor *head);/排序浏览函数char m

4、enu1(void);/排序浏览菜单void modify(wor *head);/修改函数,修改完后保存信息void modifynode(wor *head);/查找节点并修改信息 /*=*/int main()/*主函数main,功能:通过调用各函数,实现员工工资信息管理系统的功能*/char ch;wor *head=null;system("color f2");printf("n");printf("n");printf("n");printf("n");printf("n

5、");printf("n");printf(" n");printf(" n");printf(" 欢 迎 进 入 系 统 n");printf(" n");printf(" n");printf(" n");printf(" n");getchar();userid();system("cls"); while(1)ch=menu();switch(ch)/*用switch语句实现功能选择*/case 1

6、:head=read(head);inputmenu(head);break;/*调用创建链表函数,添加员工工资信息,并保存到文件夹中*/case 2:head=read(head);searchmenu(head);break;/*调用信息查询函数,查询员工工资信息*/case 3: head=read(head); deletesal(head); break;/*调用删除信息函数,删除员工工资信息*/ case 4: head=read(head); printsal(head); break;/*调用显示信息资料函数*/ case 5: head=read(head); totalsa

7、lmenu(head); break;/*统计某时间段员工工资信息*/ case 6: head=read(head); order(head); break;/*按照卡号对员工进行排序浏览*/ case 7: head=read(head); modify(head); break;/修改员工工资信息 case 0: system("cls"); printf("nnnnn"); printf("ttn"); printf("tt n"); printf("tt n"); printf(&qu

8、ot;tt 感 谢 使 用 n"); printf("tt n"); printf("tt n"); printf("tt n"); printf("tt n"); printf("nnnnn"); printf("tttttttt12 软件1班n"); printf("tttttttt 蔡文豪n"); printf("tttttttt201241404120nnn"); getchar(); exit(0);/*退出系统,返

9、回主界面*/ deletememory(head); /*释放所有已分配的printf("end of program!"); break; default: printf("输入错误,请重试!n"); save(head);return 0;/*=*/char menu(void)/*函数menu,功能:主菜单选择界面*/char ch;printf(" 工资信息管理系统 n");printf("n");printf("-1 * 输入员工工资信息 *- nn");printf("t-

10、2 * 查询员工工资信息 *- nn");printf("-3 * 删除员工工资信息 *- nn");printf("t-4 * 浏览员工工资信息 *- nn");printf("-5 * 统计实发工资总额 *- nn ");printf("t-6 * 工资信息排序处理 *- n");printf("-7 * 修改员工工资信息 *- nn ");printf("t-0 * 退出工资管理系统 *- n");/*菜单选择界面*/printf("n")

11、;printf("请输入您的选择:");scanf(" %c",&ch);/*选择操作*/return ch;/*=*/void userid()int count=0;char q5="1234"char b5;char c;int i=0;part1:printf("请输入您的密码:");while(c=getch()!=13)putchar(*);bi=c;i+;printf("n");bi=0;if(strcmp(q,b)!=0)printf("密码错误,请重新输入!n

12、");getchar();count+;if(count>=3)printf("您已经三次输入用户名或密码错误,系统自动退出!n"); exit(0); /*退出系统*/goto part1;printf("n");/*=*/wor *read(wor *head)file *fp;wor *s;wor *p;int n;fp=fopen("d:1.txt","rb");/以制度方式打开一个二进制文件if(null=fp)/如果打开失败就返回-1;printf("打开文件失败!n"

13、;);head=null;return null;head=(wor *)malloc(sizeof(wor);p=head;while(!feof(fp)/为下个节点分配内存空间s=(wor *)malloc(sizeof(wor);n=fread(s,sizeof(wor),1,fp);/从文件读取数据到节点if(n<1)free(s);p->next=null;/最后一个节点为nullbreak;num+;p->next=s;/保存下个节点p=p->next;/切换至下个节点p->next=null;/最后一个节点为nullfclose(fp);return

14、 head;/*=*/int save(wor *head)file *fp;wor *p;fp=fopen("d:1.txt","wb");if(null=fp)printf("打开文件失败!n");return -1;p=head->next;dofwrite(p,len,1,fp);/把数据保存到fp指向的文件中p=p->next;while(p!=null);fflush(fp);fclose(fp);return 0;/*=*/void inputmenu(wor *head)char ch;int i=0;do

15、input(&head);printf("是否继续添加(y/n)?n");printf("请输入您的选择:");scanf(" %c",&ch);i+;while(ch=y|ch=y);printf("您添加了%d个员工信息!n",i);/*=*/void input(wor *head)wor *s;wor *p;if(*head=null)/如果表头为空,先为它分配内存*head=(wor *)malloc(len);p=*head;else/否则说明有内容,直接切换到尾节点p=*head;wh

16、ile(p->next)p=p->next;s=(wor *)malloc(len);/为这个节点分配内存printf("请输入员工工资卡号(6位):n");scanf("%ld",&s->kahao);while(s->kahao<100000|s->kahao>=1000000)printf("输入错误,请重新输入6位员工编号:");scanf("%d",&s->kahao);printf("请输入员工姓名:");scanf(&

17、quot;%s",s->name);printf("请输入您要建立的月份:");scanf("%d",&s->month);printf("请输入此人该月应发工资:");scanf("%f",&s->yfgz);printf("请输入此人该月水费:");scanf("%f",&s->sf);printf("请输入电费:");scanf("%f",&s->df);if

18、(s->yfgz<=800)s->sj=0;else if(s->yfgz>800&&s->yfgz<1400)s->sj=(s->yfgz-800)*0.05;elses->sj=(s->yfgz-1400)*0.10;s->sfgz=s->yfgz-s->sf-s->df-s->sj;p->next=s;/保存这个节点p=p->next;/切换至下一个节点p->next=null;printf("已成功添加信息!n");/*=*/void s

19、earchmenu(wor *head)char ch;dosearch(head);printf("是否继续查询(y/n)?n");printf("请输入您的选择:");scanf(" %c",&ch);while(ch=y|ch=y);/*=*/void search(wor *head)int a;wor *p=head;printf("ttt*查询菜单*n");printf("ttt* 1 按职工的编号查询 *n");printf("ttt* 2 按职工的姓名查询 *n

20、");printf("ttt* 0 退出 *n");printf("ttt*n");printf("请按数字键选择:");while(1)scanf("%d",&a);if(a>=0&&a<3);break;printf("输入错误,请重新输入:");switch(a)case 1:numsearch(p);break;case 2:namesearch(p);break;case 0:return ;break;/*=*/int numsearch

21、(wor *pnew)long n;wor *t;int found=0;printf("请输入您要查询的员工卡号:");scanf("%ld",&n);if(pnew=null)printf("没有记录员工工资信息!n");return -1;printf("查询结果:n");while(pnew)t=pnew;if(pnew->kahao=n)/查找与n相同学号的学生信息并打印到屏幕found=1;printf("卡号 姓名 月份 应发工资 水费 电费 税金 实发工资n");p

22、rintf("%-ld %-s %-d %-.2ft%-.2f %-.2f %-.2f %-.2fn",pnew->kahao,pnew->name,pnew->month,pnew->yfgz,pnew->sf,pnew->df,pnew->sj,pnew->sfgz);pnew=pnew->next;if(found!=1)printf("没有找到符合要求的员工信息!n");return -1;getch();system("cls");return 0;/*=*/int na

23、mesearch(wor *pnew)char name10;int found;wor *t;printf("请输入您要查询的员工姓名:");scanf("%s",name);if(pnew=null)printf("没有记录员工工资信息!n");return -1;printf("查询结果:n");while(pnew)t=pnew;if(strcmp(pnew->name,name)=0)/查找与n相同学号的学生信息并打印到屏幕 found=1;printf("卡号 姓名 月份 应发工资 水费

24、 电费 税金 实发工资n");printf("%-ld %-s %-d %-.2ft%-.2f %-.2f %-.2f %-.2fn",pnew->kahao,pnew->name,pnew->month,pnew->yfgz,pnew->sf,pnew->df,pnew->sj,pnew->sfgz);pnew=pnew->next;if(found!=1)printf("没有找到符合要求的员工信息!n");return -1;getch();system("cls")

25、;return 0;/*=*/void deletesal(wor *head)/*删除员工信息*/int i = 0;long nodenum;char c;doprintf("请输入您要删除的员工卡号:");scanf(" %ld", &nodenum);head=deletenode(head, nodenum); /*删除卡号为nodenum的员工信息*/ printsal(head); /*显示当前链表中的各节点信息*/printf("是否继续删除员工信息(y/n)?");scanf(" %c",

26、&c); /*%c前面有一个空格*/i+;while (c=y | c=y);printf("%ld new nodes have been deleted!n", i);save(head);printf("n");/*=*/wor *deletenode(wor *head, long nodenum)wor *p = head;wor *pr = head;if (head = null) /*链表为空,没有节点,无法删除节点*/printf("no linked table!n");return(head);/*若没找

27、到节点nodenum且未到表尾,则继续找*/while (nodenum != p->kahao && p != null)pr = p;p = p->next;if (nodenum = p->kahao) /*若找到节点nodenum,则删除该节点*/if (p = head) /*若待删除节点为首节点,则让head指向第2个节点*/ head = p->next;else /*若待删除节点不是首节点,则将前一节点的指针指向当前节点的下一节点*/ pr->next = p->next; free(p); /*释放为已删除节点分配的内存*/

28、else /*没有找到待删除节点*/printf("this node has not been found!n");return head; /*返回删除节点后的链表的头节点指针*/*=*/void printsal(wor *head)wor *p1;int j=0;if(head=null)printf("没有记录!n");return ;p1=head->next;printf("卡号 姓名 月份 应发工资 水费 电费 税金 实发工资n");doprintf("%-ld %s %d %.2ft%.2f %.2f

29、 %.2f %.2fn",p1->kahao,p1->name,p1->month,p1->yfgz,p1->sf,p1->df,p1->sj,p1->sfgz);j+;if(j%10=0)printf("nn");p1=p1->next;while(p1!=null);getch();system("cls");return ;/*=*/void totalsalmenu(wor *head)char ch;int i=0;dototalsal(head);printf("是否继

30、续统计(y/n)?n");printf("请输入您的选择:");scanf(" %c",&ch);while(ch=y|ch=y);/*=*/void totalsal(wor *head)/*统计员工某时间段的实发工资总和*/wor *p=head;int start;int end;float sum=0;long number;printf("请输入您要统计工资的员工卡号:");scanf("%ld",&number);if(head=null)printf("您输入的卡号

31、不存在!");printf("请输入您要统计工资的月份(0=<n<=m<=12):");scanf("%d %d",&start,&end);while(p!=null)if(p->kahao=number)if(p->month>=start&&p->month<=end)sum+=p->sfgz;p=p->next;printf("您要统计的月份总实发工资为%.1fnn",sum);getch();system("cls

32、");/*=*/void order(wor *head)char ch;long c;char t10;float b ;float g;float d ;float e;float f;int i;int j;wor *p1;wor *p2;loop:ch=menu1();switch(ch)case 1: /*按商品编号顺序浏览*/ 发工资n"); 匹配*/ 匹配*/ system("cls");/*清屏*/ printf("总有%d个员工的信息:n",num); printf("卡号 姓名 月份 应发工资 水费 电费

33、 税金 实p2=p1=head->next; for(i=1;i<num;i+) for(j=i+1;j<=num;j+) p2=p1; p1=p1->next; if(p2->kahao>p1->kahao)/若后面的卡号小于前面的,则交换信息 c=p2->kahao; p2->kahao=p1->kahao; p1->kahao=c; strcpy(t,p2->name);/*交换前后结点中的卡号值*/ strcpy(p2->name,p1->name); strcpy(p1->name,t); /*

34、交换前后结点中的员工姓名,使之与卡号相 i=p2->month; p2->month=p1->month; p1->month=i;/*交换前后结点中的月份,使之与卡号相匹配*/ b=p2->yfgz; p2->yfgz=p1->yfgz; p1->yfgz=b; /*交换前后结点中的应发工资,使之与卡号相 g=p2->sf; p2->sf=p1->sf; p1->sf=g; /*交换前后结点中的水费,使之与卡号相匹配*/ d=p2->df; p2->df=p1->df; p1->df=d; /*交

35、换前后结点中的电费,使之与卡号相匹配*/ e=p2->sj; p2->sj=p1->sj;p1->sj=e; /*交换前后结点中的税金,使之与卡号相匹配*/ f=p2->sfgz;p2->sfgz=p1->sfgz;p1->sfgz=f; /*交换前后结点中的实发工资,使之与卡号相匹配*/ p2=head->next;p1=head->next;/*重新使p2,p1指向链表头*/p1=head->next;doprintf("%-ld %s %d %.2ft%.2f %.2f %.2f %.2fn",p1-&

36、gt;kahao,p1->name,p1->month,p1->yfgz,p1->sf,p1->df,p1->sj,p1->sfgz);p1=p1->next;while(p1!=null);getch();system("cls");break;case 2:system("cls");/*清屏*/printf("总有%d个员工的信息:n",num);printf("卡号 姓名 月份 应发工资 水费 电费 税金 实发工资n");p2=p1=head->next

37、;for(i=1;i<num;i+)for(j=i+1;j<=num;j+)p2=p1;p1=p1->next;if(p2->sfgz<p1->sfgz)/若前面的实发工资小于后面的,则交换信息 c=p2->kahao;p2->kahao=p1->kahao;p1->kahao=c;/*交换前后结点中的卡号值*/strcpy(t,p2->name);strcpy(p2->name,p1->name);strcpy(p1->name,t); /*交换前后结点中的员工姓名,使之与卡号相匹配*/i=p2->mo

38、nth;p2->month=p1->month;p1->month=i;/*交换前后结点中的月份,使之与卡号相匹配*/ b=p2->yfgz;p2->yfgz=p1->yfgz;p1->yfgz=b; /*交换前后结点中的应发工资,使之与卡号相匹配*/g=p2->sf;p2->sf=p1->sf;p1->sf=g; /*交换前后结点中的水费,使之与卡号相匹配*/ d=p2->df;p2->df=p1->df;p1->df=d; /*交换前后结点中的电费,使之与卡号相匹配*/ e=p2->sj;p2-

39、>sj=p1->sj;p1->sj=e; /*交换前后结点中的税金,使之与卡号相匹配*/ f=p2->sfgz;p2->sfgz=p1->sfgz;p1->sfgz=f; /*交换前后结点中的实发工资,使之与卡号相匹配*/ p2=head->next;p1=head->next;/*重新使p2,p1指向链表头*/p1=head->next;doprintf("%-ld %s %d %.2ft%.2f %.2f %.2f %.2fn",p1->kahao,p1->name,p1->month,p1-

40、>yfgz,p1->sf,p1->df,p1->sj,p1->sfgz);p1=p1->next;while(p1!=null);getch();system("cls");break;case 0:system("cls");return;default :printf("输入错误!n");goto loop;/*=*/char menu1(void)/*子菜单*/char ch;printf("nnnnnn");printf("t $n");printf(

41、"t $n");printf("t $ 1 * 按卡号升序浏览n");printf("t $n");printf(" t $t 2 * 按实发工资降序浏览n");printf("t $tttttt $n");printf(" t $tt 0 * 退出t $n");printf("t tttttt $n");printf("ttttt t $n");printf("ttttttt $");printf("nt

42、tt $");printf("nnnnnnn");printf("请输入您的选择:");scanf(" %c",&ch);return ch;/*=*/void modify(wor *head)char c;int i=0;domodifynode(head);printf("继续修改请按y/y!?");printf("其他键视为不修改!n");printf("你想继续修改记录吗(y/n)?");scanf(" %c",&c);

43、i+;while (c=y | c=y);printf("%d nodes have been modifyied!n",i);/*=*/void modifynode(wor *head)wor *q=head;long d;if(q=null)printf("工资表为空请重新输入!n");return ;printf("请输入你想修改的职工的编号:");scanf("%ld",&d);while(q&&q->kahao!=d) /做比较判断/q=q->next; /没找到,指针后移继续查找/if(q=null) /指针为空,说明没有找到/printf("not found!n");return ;elseprintf("请输入修改后的职工卡号:&qu

温馨提示

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

评论

0/150

提交评论