当前位置:
文档之家› C-员工工资管理系统的源代码
C-员工工资管理系统的源代码
/*职工编号*/ char name[15]; /*职工姓名*/ float jbgz; /*基本工资*/ float jj; /*奖金*/ float kk; /*扣款*/ float yfgz; /*应发工资*/ float sk; /*税款*/ float sfgz; /*实发工资*/ }ZGGZ; void menu() /*主菜单*/ { system("cls"); /*调用DOS命令,清屏.与clrscr()功能相同*/ textcolor(10); /*在文本模式中选择新的字符颜色*/ gotoxy(10,5); /*在文本窗口中设置光标*/ cprintf(" The Employee' Salary Management System \n"); gotoxy(10,8); cprintf("**********************Menu*****************************\n"); gotoxy(10,9); cprintf(" * 1 input record 2 delete record *\n"); gotoxy(10,10); cprintf(" * 3 search record 4 modify record *\n"); gotoxy(10,11); cprintf(" * 5 insert record 6 count record *\n"); gotoxy(10,12); cprintf(" * 7 sort reord 8 save record *\n"); gotoxy(10,13); cprintf(" * 9 display record 0 quit system *\n"); gotoxy(10,14); cprintf("********************************************************\n"); /*cprintf()送格式化输出至文本窗口屏幕中*/ }
{ printf("\n\n\n\n\n*******Error:input has wrong! press any key to continue*******\n"); getchar(); } void Nofind() /*输出未查找此职工的信息*/ { printf("\n=====>Not find this employee record!\n"); } /* 作用:用于定位数组中符合要求的记录,并返回保存该记录的数组元 素下标值 ,参数:findmess[]保存要查找的具体内容; nameornum[] 保存按什么在数组中查找; */ int Locate(ZGGZ tp[],int n,char findmess[],char nameornum[]) { int i=0; if(strcmp(nameornum,"num")==0) /*按职工编号查询*/ { while(i<n) { if(strcmp(tp[i].num,findmess)==0) /*若找到findmess值的 职工编号*/ return i; i++; } }else if(strcmp(nameornum,"name")==0) /*按职工姓名查询*/ { while(i<n) { if(strcmp(tp[i].name,findmess)==0) /*若找到findmess 值的姓名*/ return i; i++; } }
return -1; /*若未找到,返回一个整数-1*/ } /*输入字符串,并进行长度验证(长度<lens)*/ void stringinput(char *t,int lens,char *notice) { char n[255]; do{ printf(notice); /*显示提示信息*/ scanf("%s",n); /*输入字符串*/ if(strlen(n)>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); /*输入如工资等数值型的值*/ if(t<0) printf("\n score must >=0! \n"); /*进行数值校验*/ }while(t<0); return t; } /*增加职工工资记录*/ int Add(ZGGZ tp[],int n) { char ch,num[10]; int i,flag=0; system("cls"); Disp(tp,n); /*先打印出已有的职工工资信息*/ while(1) /*一次可输入多条记录,直至输入职工编号为0的记录才结束 添加操作*/
{ while(1) /*输入职工编号保证该编号没有被使用,若输入编号为0,则 退出添加记录操作*/ { stringinput(num,10,"input number(press '0'return menu):"); /*格 式化输入编号并检验*/ flag=0; if(strcmp(num,"0")==0) /*输入为0,则退出添加操作,返回主界面 */ { return n; } i=0; while(i<n) /*查询该编号是否已经存在,若存在则要求重新输入一个未 被占用的编号*/ { if(strcmp(tp[i].num,num)==0) { flag=1; break; } i++; } if(flag==1) /*提示用户是否重新输入*/ { getchar(); printf("==>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(tp[n].num,num); /*将字符串num拷贝到tp[n].num中*/ stringinput(tp[n].name,15,"Name:"); tp[n].jbgz=numberinput("jbgz:"); /*输入并检验基本工资*/ tp[n].jj=numberinput("jiangjin:"); /*输入并检验奖金*/ tp[n].kk=numberinput("koukuan:"); /*输入并检验扣款*/ tp[n].yfgz=tp[n].jbgz+tp[n].jj-tp[n].kk; /*计算应发工资*/ tp[n].sk=tp[n].yfgz*0.12; /*计算税金,这里取应发工资的百分之一十 二*/ tp[n].sfgz=tp[n].yfgz-tp[n].sk; /*计算实发工资*/ saveflag=1; n++; } return n; } /*按职工编号或姓名,查询记录*/ void Qur(ZGGZ tp[],int n) { int select; /*1:按编号查,2:按姓名查,其他:返回主界面(菜 单)*/ char searchinput[20]; /*保存用户输入的查询内容*/ int p=0; if(n<=0) /*若数组为空*/ { system("cls"); printf("\n=====>No employee record!\n"); getchar(); return; } system("cls"); printf("\n =====>1 Search by number =====>2 Search by name\n"); printf(" please choice[1,2]:"); scanf("%d",&select);
void printheader() /*格式化输出表头*/ { printf(HEADER1); printf(HEADER2); printf(HEADER3); } void printdata(ZGGZ pp) /*格式化输出表中数据*/ { ZGGZ* p; p=&pp; printf(FORMAT,DATA); } void Disp(ZGGZ tp[],int n) /*显示数组tp[]中存储的记录,内容为employee结构中定义的 内容*/ { int i; if(n==0) /*表示没有职工工资记录*/ { printf("\n=====>Not employee record!\n"); getchar(); return; } printf("\n\n"); printheader(); /*输出表格头部*/ i=0; while(i<n) /*逐条输出数组中存储的职工信息*/ { printdata(tp[i]); i++; printf(HEADER3); } getchar(); } Void Wrong() /*输出按键错误信息*/
/*这是我开始做课程设计时写的*/ #include "stdio.h" /*标准输入输出函数库*/ #include "stdlib.h" /*标准函数库*/ #include "string.h" /*字符串函数库*/ #include "conio.h" /*屏幕操作函数库*/ #define HEADER1 " -------------------------------ZGGZ--------------------------------------- \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.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 60 int saveflag=0; /*是否需要存盘的标志变量*/ /*定义与职工有关 的数据结构*/ typedef struct employee /*标记为employee*/