人事管理系统C源代码.docx
- 文档编号:18270167
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:37
- 大小:21.85KB
人事管理系统C源代码.docx
《人事管理系统C源代码.docx》由会员分享,可在线阅读,更多相关《人事管理系统C源代码.docx(37页珍藏版)》请在冰点文库上搜索。
人事管理系统C源代码
#include"stdio.h"
/*
标准输入输出函数库*/
#include"stdlib.h"
/*
标准函数库*/
#include"string.h"/*
字符串函数库*/
#include"conio.h"
/*
屏幕操作函数库*/
#defineHEADER1"-------------------------------RSDA-------------------
---------------------\n"
#defineHEADER2"|number|name|jbgz|jj|kk|
yfgz|sk|sfgz|\n"
#defineHEADER3"|--------|-----------|--------|--------|--------|------
--|--------|--------|\n"
#defineFORMAT
"|%-8s|%-10s|%8.2f|%8.2f|%8.2f|%8.2f|%8.2f|%8.2f|\n"
#defineDATA
p->num,p->name,p->jbgz,p->jj,p->kk,p->yfgz,p->sk,p-
>sfgz
#defineEND
"-------------------------------------------------------
---------------------
\n"
#defineN60
intsaveflag=0;
/*
是否需要存盘的标志变量*/
/*定义与职工有关的数据结构*/
typedefstructemployee/*
标记为employee*/
{
charnum[10];
/*
职工编号*/
charname[15];
/*
职工姓名*/
floatjbgz;
/*
基本工资*/
floatjj;
/*
奖金*/
floatkk;
/*
扣款*/
floatyfgz;
/*
应发工资*/
floatsk;
/*
税款*/
floatsfgz;
/*
实发工资*/
}RSDA;
voidmenu()/*
主菜单*/
{
system("cls");
/*
调用DOS命令,清屏.与clrscr()
功能相同*/
printf("
TheEmployeeManagementSystem\n");
printf("
*************************Menu********************************\n");
printf("
*1input
record
2deleterecord
*\n");
printf("
*
3searchrecord
4modifyrecord
*\n");
printf("
*
5insert
record
6count
record
*\n");
printf("
*
7sort
record
8save
record
*\n");
printf("
*
9displayrecord
0quit
system
*\n");
printf("
*************************************************************\n");
/*printf()送格式化输出至屏幕中*/
}
voidprintheader()/*格式化输出表头*/
{
printf(HEADER1);
printf(HEADER2);
printf(HEADER3);
}
voidprintdata(RSDApp)/*
格式化输出表中数据
*/
{
RSDA*p;
p=&pp;
printf(FORMAT,DATA);
}
voidDisp(RSDAtp[],intn)/*
显示数组
tp[]
中存储的记录,内容为
employee
结构中定义的内容
*/
{
inti;
if(n==0)/*表示没有职工工资记录*/
{
printf("\n=====>Notemployeerecord!
\n");
while(getchar()!
='\n')
continue;
getchar();
return;
}
printf("\n\n");
printheader();/*
i=0;
while(i { 输出表格头部*/ 逐条输出数组中存储的职工信息 */ printdata(tp[i]); i; printf(HEADER3); } while(getchar()! ='\n') continue; getchar(); } voidWrong()/*输出按键错误信息*/ { printf("\n\n\n\n\n***********Error: inputhaswrong! pressanykeytocontinue**********\n"); while(getchar()! ='\n') continue; getchar(); } voidNofind()/*输出未查找到此职工的信息*/ { printf("\n=====>Notfindthisemployeerecord! \n"); } /************************************************************* 作用: 用于定位数组中符合要求的记录,并返回保存该记录的数组元素下标值 参数: findmess[]保存要查找的具体内容;nameornum[]保存按什么在数组中查找 **************************************************************/ intLocate(RSDAtp[],intn,charfindmess[],charnameornum[]) { inti=0; if(strcmp(nameornum,"num")==0)/*按职工编号查询*/ { while(i { if(strcmp(tp[i].num,findmess)==0)/* 若找到 findmess 值的职工编号 */ returni; i; } } elseif(strcmp(nameornum,"name")==0)/*按职工姓名查询*/ { while(i { if(strcmp(tp[i].name,findmess)==0)/*若找到findmess值的姓名*/returni; i; } } return-1;/*若未找到,返回一个整数-1*/ } /*输入字符串,并进行长度验证(长度 voidstringinput(char*t,intlens,char*notice) { charn[255]; do{ printf(notice);/*显示提示信息 scanf("%s",n);/*输入字符串*/ */ if(strlen(n)>lens)printf("\nexceedtherequiredlength! \n");/* 进行长度校验,超过lens值重新输入*/ }while(strlen(n)>lens); strcpy(t,n);/*将输入的字符串复制到字符串t中*/ } /*输入数值,0<=数值)*/ floatnumberinput(char*notice) { floatt=0.00; do{ printf(notice);/* scanf("%f",&t);/* 显示提示信息*/ 输入如工资等数值型的值 */ if(t<0)printf("\nscoremust>=0! \n");/*进行数值校验*/}while(t<0); returnt; } /*增加职工工资记录*/ intAdd(RSDAtp[],intn) { charch,num[10]; inti,flag=0; system("cls"); Disp(tp,n);/*先打印出已有的职工工资信息 */ while (1)/* 一次可输入多条记录,直至输入职工编号为 0的记录结束添加操作 */ { while (1)/* 输入职工编号,保证该编号没有被使用,若输入编号为 0,则退出 添加记录操作 */ { stringinput(num,10,"inputnumber(press'0'returnmenu): ");/* 格式化 输入编号并检验*/ flag=0; if(strcmp(num,"0")==0)/*输入为0,则退出添加操作,返回主界面*/{returnn;} i=0; while(i { if(strcmp(tp[i].num,num)==0) { flag=1; break; } i; } if(flag==1)/*提示用户是否重新输入*/ {getchar(); printf("==>Thenumber%sisexisting,tryagain? (y/n): ",num);scanf("%c",&ch); if(ch=='y'||ch=='Y') continue; else returnn; } 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].jbgztp[n].jj-tp[n].kk;/*计算应发工资*/ tp[n].sk=tp[n].yfgz*0.12;/*计算税金,这里取应发工资的12%*/ tp[n].sfgz=tp[n].yfgz-tp[n].sk;/*计算实发工资*/ saveflag=1; n; } returnn; } /*按职工编号或姓名,查询记录*/ voidQur(RSDAtp[],intn) { intselect;/*1: 按编号查,2: 按姓名查,其他: 返回主界面(菜单) charsearchinput[20];/*保存用户输入的查询内容*/ intp=0; if(n<=0)/*若数组为空*/ { */ system("cls"); printf("\n=====>Noemployeerecord! \n"); getchar(); return; } system("cls"); printf("\n=====>1Searchbynumber printf("pleasechoice[1,2]: "); scanf("%d",&select); if(select==1)/*按编号查询*/ { =====>2Searchbyname\n"); stringinput(searchinput,10,"inputtheexistingemployeenumber: "); p=Locate(tp,n,searchinput,"num");/* 在数组 tp 中查找编号为 searchinput 值的元素,并返回该数组元素的下标值 if(p! =-1)/*若找到该记录*/ */ { printheader(); printdata(tp[p]); printf(END); printf("pressanykeytoreturn"); getchar(); } else Nofind(); getchar(); } elseif(select==2)/*按姓名查询*/ { stringinput(searchinput,15,"inputtheexistingemployeename: ");p=Locate(tp,n,searchinput,"name"); if(p! =-1) { printheader(); printdata(tp[p]); printf(END); printf("pressanykeytoreturn"); getchar(); } else Nofind(); getchar(); } else Wrong(); getchar(); } /*删除记录: 先找到保存该记录的数组元素的下标值,然后在数组中删除该数组元 素*/ intDel(RSDAtp[],intn) { intsel; charfindmess[20]; intp=0,i=0; if(n<=0) {system("cls"); printf("\n=====>Noemployeerecord! \n"); getchar(); returnn; } system("cls"); Disp(tp,n); printf("\n=====>1Deletebynumber=====>2Deletebyname\n");printf("pleasechoice[1,2]: "); scanf("%d",&sel); if(sel==1) { stringinput(findmess,10,"inputtheexistingemployeenumber: ");p=Locate(tp,n,findmess,"num"); getchar(); if(p! =-1) { for(i=p1;i { strcpy(tp[i-1].num,tp[i].num); strcpy(tp[i-1].name,tp[i].name); tp[i-1].jbgz=tp[i].jbgz; tp[i-1].jj=tp[i].jj; tp[i-1].kk=tp[i].kk; tp[i-1].yfgz=tp[i].yfgz; tp[i-1].jbgz=tp[i].sk; tp[i-1].sfgz=tp[i].sfgz; } printf("\n==>deletesuccess! \n"); n--; getchar(); saveflag=1; } else Nofind(); getchar(); } elseif(sel==2)/*先按姓名查询到该记录所在的数组元素的下标值*/ { stringinput(findmess,15,"inputtheexistingemployeename: ");p=Locate(tp,n,findmess,"name"); getchar(); if(p! =-1) { for(i=p1;i { strcpy(tp[i-1].num,tp[i].num); strcpy(tp[i-1].name,tp[i].name); tp[i-1].jbgz=tp[i].jbgz; tp[i-1].jj=tp[i].jj; tp[i-1].kk=tp[i].kk; tp[i-1].yfgz=tp[i].yfgz; tp[i-1].jbgz=tp[i].sk; tp[i-1].sfgz=tp[i].sfgz; } printf("\n=====>deletesuccess! \n"); n--; getchar(); saveflag=1; } else Nofind(); getchar(); } returnn; } /*修改记录: 先按输入的职工编号查询到该记录,然后提示用户修改编号之外的值,编号不能修改*/ voidModify(RSDAtp[],intn) { charfindmess[20]; intp=0; if(n<=0) {system("cls"); printf("\n=====>Noemployeerecord! \n");getchar(); return; } system("cls"); printf("modifyemployeerecorder"); Disp(tp,n); stringinput(findmess,10,"inputtheexistingemployeenumber: ");/* 输入 并检验该编号 */ p=Locate(tp,n,findmess,"num");/* 查询到该数组元素 并返回下标值 */ if(p! =-1)/*若p! =-1,表明已经找到该数组元素*/ { printf("Number: %s,\n",tp[p].num); printf("Name: %s,",tp[p].name); stringinput(tp[p].name,15,"inputnewname: "); printf("jbgz: %8.2f,",tp[p].jbgz); tp[p].jbgz=numberinput("jbgz: "); printf("jiangjin: %8.2f,",tp[p].jj); tp[p].jj=numberinput("jiangjin: "); printf("koukuan: %8.2f,",tp[p].kk); tp[p].kk=numberinput("koukuan: "); tp[n].yfgz=tp[n].jbgztp[n].jj-tp[n].kk; tp[n].sk=tp[n].yfgz*0.12; tp[n].sfgz=tp[n].yfgz-tp[n].sk; printf("\n=====>modifysuccess! \n"); getchar(); Disp(tp,n); getchar(); saveflag=1; } else {Nofind(); getchar(); } return; } /*插入记录: 按职工编号查询到要插入的数组元素的位置,然后在该编号之后插入一个新数组元素。 */ intInsert(RSDAtp[],intn) { charch,num[10],s[10];/*s[]保存插入点位置之前的编号,num[]保存输入的新记录的编号*/ RSDAnewinfo; intflag=0,i=0,kkk=0; system("cls"); Disp(tp,n); while (1) {stringinput(s,10,"pleaseinputinsertlocationaftertheNumber: ");flag=0;i=0; while(i { if(strcmp(tp[i].num,s)==0){kkk=i;flag=1;break;} i; } if(flag==1) break;/*若编号存在,则进行插入之前的新记录输入操作 else {getchar(); printf("\n=====>Thenumber%sisnotexisting,try again? (y/n): ",s); scanf("%c",&ch); if(ch=='y'||ch=='Y') {continue;} else {returnn;} */ } } /* 以下新记录的输入操作与 Add()相同*/ while (1) {stringinput(num,10,"inputnewemployeeNumber: ");i=0;flag=0; while(i { if(strcmp(tp[i].num,num)==0){flag=1;break;} i; } if(flag==1) { getchar(); printf("\n=====>Sorry,Thenumber%sisexisting,tryagain? (y/n): ",num); scanf("%c",&ch); if(ch=='y'||ch=='Y') {continue;} else {returnn;} } else break; } strcpy(newinfo.num,num);/*将字符串num复制到newinfo.num中*/ stringinput(newinfo.name,15,"Name: "); newinfo.jbgz=numberinput("jbgz: ");/*输入并检验jbgz*/ newinfo.jj=numberinput("jiangjin:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 人事管理系统 源代码