1、人事管理系统C源代码#include stdio.h /*标准输入输出函数库*/#include stdlib.h /*标准函数库*/#include string.h /*字符串函数库*/#include conio.h /*屏幕操作函数库*/#define HEADER1 -RSDA- n#define HEADER2 | number| name | jbgz | jj | kk | yfgz | sk | sfgz | n#define HEADER3 |-|-|-|-|-|-|-|-| n#define FORMAT |%-8s|%-10s |%8.2f|%8.2f|%8.2f|%8
2、.2f|%8.2f|%8.2f| n#define DATA p-num,p-name,p-jbgz,p-jj,p-kk,p-yfgz,p-sk,p-sfgz#define END - n#define N 60int saveflag=0; /*是否需要存盘的标志变量*/*定义与职工有关的数据结构*/typedef struct employee /*标记为employee*/char num10; /*职工编号*/char name15; /*职工姓名*/float jbgz; /*基本工资*/float jj; /*奖金*/float kk; /*扣款*/float yfgz; /*应发
3、工资*/float sk; /*税款*/float sfgz; /*实发工资*/RSDA;void menu() /*主菜单*/system(cls); /*调用DOS命令,清屏.与clrscr()功能相同*/ printf( The Employee Management System n);printf( *Menu*n);printf( * 1 input record 2 delete record *n);printf( * 3 search record 4 modify record *n);printf( * 5 insert record 6 count record *n)
4、;printf( * 7 sort record 8 save record *n);printf( * 9 display record 0 quit system *n);printf( *n);/*printf()送格式化输出至屏幕中*/void printheader() /*格式化输出表头*/ printf(HEADER1); printf(HEADER2); printf(HEADER3);void printdata(RSDA pp) /*格式化输出表中数据*/ RSDA* p; p=&pp; printf(FORMAT,DATA);void Disp(RSDA tp,int n
5、) /*显示数组tp中存储的记录,内容为employee结构中定义的内容*/int i;if(n=0) /*表示没有职工工资记录*/ printf(n=Not employee record!n); while(getchar()!=n) continue; getchar(); return;printf(nn);printheader(); /*输出表格头部*/i=0;while(iNot find this employee record!n);/*作用:用于定位数组中符合要求的记录,并返回保存该记录的数组元素下标值参数:findmess保存要查找的具体内容; nameornum保存按什
6、么在数组中查找*/int Locate(RSDA tp,int n,char findmess,char nameornum) int i=0; if(strcmp(nameornum,num)=0) /*按职工编号查询*/ while(in) if(strcmp(tpi.num,findmess)=0) /*若找到findmess值的职工编号*/ return i; i ; else if(strcmp(nameornum,name)=0) /*按职工姓名查询*/ while(in) if(strcmp(tpi.name,findmess)=0) /*若找到findmess值的姓名*/ re
7、turn i; i ; return -1; /*若未找到,返回一个整数-1*/*输入字符串,并进行长度验证(长度lens) printf(n exceed the required length! n); /*进行长度校验,超过lens值重新输入*/ while(strlen(n)lens); strcpy(t,n); /*将输入的字符串复制到字符串t中*/*输入数值,0数值)*/float numberinput(char *notice) float t=0.00; do printf(notice); /*显示提示信息*/ scanf(%f,&t); /*输入如工资等数值型的值*/ i
8、f(t=0! n); /*进行数值校验*/ while(t0); return t; /*增加职工工资记录*/int Add(RSDA tp,int n) char ch,num10; int i,flag=0; system(cls); Disp(tp,n); /*先打印出已有的职工工资信息*/ while(1) /*一次可输入多条记录,直至输入职工编号为0的记录结束添加操作*/ while(1) /*输入职工编号,保证该编号没有被使用,若输入编号为0,则退出添加记录操作*/ stringinput(num,10,input number(press 0return menu):); /*格
9、式化输入编号并检验*/ flag=0; if(strcmp(num,0)=0) /*输入为0,则退出添加操作,返回主界面*/ return n; i=0; while(iThe number %s is existing,try again?(y/n):,num); scanf(%c,&ch); if(ch=y|ch=Y) continue; else return n; else break; strcpy(tpn.num,num); /*将字符串num复制到tpn.num中*/ stringinput(tpn.name,15,Name:); tpn.jbgz=numberinput(jbg
10、z:); /*输入并检验基本工资*/ tpn.jj=numberinput(jiangjin:); /*输入并检验奖金*/ tpn.kk=numberinput(koukuan:); /*输入并检验扣款*/ tpn.yfgz=tpn.jbgz tpn.jj-tpn.kk; /*计算应发工资*/ tpn.sk=tpn.yfgz*0.12; /*计算税金,这里取应发工资的12%*/ tpn.sfgz=tpn.yfgz-tpn.sk; /*计算实发工资*/ saveflag=1; n ; return n;/*按职工编号或姓名,查询记录*/void Qur(RSDA tp,int n) int se
11、lect; /*1:按编号查,2:按姓名查,其他:返回主界面(菜单)*/ char searchinput20; /*保存用户输入的查询内容*/ int p=0; if(nNo employee record!n); getchar(); return; system(cls); printf(n =1 Search by number =2 Search by namen); printf( please choice1,2:); scanf(%d,&select); if(select=1) /*按编号查询*/ stringinput(searchinput,10,input the ex
12、isting employee number:); p=Locate(tp,n,searchinput,num);/*在数组tp中查找编号为searchinput值的元素,并返回该数组元素的下标值*/ if(p!=-1) /*若找到该记录*/ printheader(); printdata(tpp); printf(END); printf(press any key to return); getchar(); else Nofind(); getchar();else if(select=2) /*按姓名查询*/ stringinput(searchinput,15,input the
13、existing employee name:); p=Locate(tp,n,searchinput,name); if(p!=-1) printheader(); printdata(tpp); printf(END); printf(press any key to return); getchar(); else Nofind(); getchar();else Wrong(); getchar(); /*删除记录:先找到保存该记录的数组元素的下标值,然后在数组中删除该数组元素*/int Del(RSDA tp,int n)int sel;char findmess20;int p=0
14、,i=0;if(nNo employee record!n); getchar(); return n;system(cls);Disp(tp,n);printf(n =1 Delete by number =2 Delete by namen);printf( please choice1,2:);scanf(%d,&sel);if(sel=1) stringinput(findmess,10,input the existing employee number:); p=Locate(tp,n,findmess,num); getchar(); if(p!=-1) for(i=p 1;id
15、elete success!n); n-; getchar(); saveflag=1; else Nofind(); getchar(); else if(sel=2) /*先按姓名查询到该记录所在的数组元素的下标值*/ stringinput(findmess,15,input the existing employee name:); p=Locate(tp,n,findmess,name); getchar(); if(p!=-1) for(i=p 1;idelete success!n); n-; getchar(); saveflag=1; else Nofind(); getch
16、ar(); return n;/*修改记录:先按输入的职工编号查询到该记录,然后提示用户修改编号之外的值,编号不能修改*/void Modify(RSDA tp,int n) char findmess20; int p=0; if(nNo employee record!n); getchar(); return ; system(cls); printf(modify employee recorder); Disp(tp,n); stringinput(findmess,10,input the existing employee number:); /*输入并检验该编号*/ p=Loc
17、ate(tp,n,findmess,num); /*查询到该数组元素,并返回下标值*/ if(p!=-1) /*若p!=1,表明已经找到该数组元素*/ printf(Number:%s,n,tpp.num); printf(Name:%s,tpp.name); stringinput(tpp.name,15,input new name:); printf(jbgz:%8.2f,tpp.jbgz); tpp.jbgz=numberinput(jbgz:); printf(jiangjin:%8.2f,tpp.jj); tpp.jj=numberinput(jiangjin:); printf(
18、koukuan:%8.2f,tpp.kk); tpp.kk=numberinput(koukuan:); tpn.yfgz=tpn.jbgz tpn.jj-tpn.kk; tpn.sk=tpn.yfgz*0.12; tpn.sfgz=tpn.yfgz-tpn.sk; printf(n=modify success!n); getchar(); Disp(tp,n); getchar(); saveflag=1; else Nofind(); getchar(); return ;/*插入记录:按职工编号查询到要插入的数组元素的位置,然后在该编号之后插入一个新数组元素。*/int Insert(
19、RSDA tp,int n) char ch,num10,s10; /*s保存插入点位置之前的编号,num保存输入的新记录的编号*/ RSDA newinfo; int flag=0,i=0,kkk=0; system(cls); Disp(tp,n); while(1) stringinput(s,10,please input insert location after the Number:); flag=0;i=0; while(iThe number %s is not existing,try again?(y/n):,s); scanf(%c,&ch); if(ch=y|ch=Y
20、) continue; else return n; /*以下新记录的输入操作与Add()相同*/ while(1) stringinput(num,10,input new employee Number:); i=0;flag=0; while(iSorry,The number %s is existing,try again?(y/n):,num); scanf(%c,&ch); if(ch=y|ch=Y) continue; else return n; else break; strcpy(newinfo.num,num); /*将字符串num复制到newinfo.num中*/ s
21、tringinput(newinfo.name,15,Name:); newinfo.jbgz=numberinput(jbgz:); /*输入并检验jbgz*/ newinfo.jj=numberinput(jiangjin:); /*输入并检验jiangjin*/ newinfo.kk=numberinput(koukuan:); /*输入并检验koukuan*/ newinfo.yfgz=newinfo.jbgz newinfo.jj-newinfo.kk; /*计算yfgz*/ newinfo.sk=newinfo.yfgz*0.12; /*计算sk*/ newinfo.sfgz=ne
22、winfo.yfgz-newinfo.sk; saveflag=1; /*在main()有对该全局变量的判断,若为1,则进行存盘操作*/ for(i=n-1;ikkk;i-) /*从最后一个组织元素开始往向移动一个元素的位置*/ strcpy(tpi 1.num,tpi.num); strcpy(tpi 1.name,tpi.name); tpi 1.jbgz=tpi.jbgz; tpi 1.jj=tpi.jj; tpi 1.kk=tpi.kk; tpi 1.yfgz=tpi.yfgz; tpi 1.sk=tpi.sk; tpi 1.sfgz=tpi.sfgz; strcpy(tpkkk 1.num,new
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1