人事管理系统C源代码.docx

上传人:b****8 文档编号:9782035 上传时间:2023-02-06 格式:DOCX 页数:26 大小:20.10KB
下载 相关 举报
人事管理系统C源代码.docx_第1页
第1页 / 共26页
人事管理系统C源代码.docx_第2页
第2页 / 共26页
人事管理系统C源代码.docx_第3页
第3页 / 共26页
人事管理系统C源代码.docx_第4页
第4页 / 共26页
人事管理系统C源代码.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

人事管理系统C源代码.docx

《人事管理系统C源代码.docx》由会员分享,可在线阅读,更多相关《人事管理系统C源代码.docx(26页珍藏版)》请在冰豆网上搜索。

人事管理系统C源代码.docx

人事管理系统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"

#defineDATAp->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("*1inputrecord2deleterecord*\n");

printf("*3searchrecord4modifyrecord*\n");

printf("*5insertrecord6countrecord*\n");

printf("*7sortrecord8saverecord*\n");

printf("*9displayrecord0quitsystem*\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=====>2Searchbyname\n");

printf("pleasechoice[1,2]:

");

scanf("%d",&select);

if(select==1)/*按编号查询*/

{

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,tryagain?

(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:

");/*输入并检验jiangjin*/

newinfo.kk=numberinput("koukuan:

");/*输入并检验koukuan*/

newinfo.yfgz=newinfo.jbgznewinfo.jj-newinfo.kk;/*计算yfgz*/

newinfo.sk=newinfo.yfgz*0.12;/*计算sk*/

newinfo.sfgz=newinfo.yfgz-newinfo.sk;

saveflag=1;/*在main()有对该全局变量的判断,若为1,则进行存盘操作*/

for(i=n-1;i>kkk;i--)/*从最后一个组织元素开始往向移动一个元素的位置*/

{strcpy(tp[i1].num,tp[i].num);

strcpy(tp[i1].name,tp[i].name);

tp[i1].jbgz=tp[i].jbgz;

tp[i1].jj=tp[i].jj;

tp[i1].kk=tp[i].kk;

tp[i1].yfgz=tp[i].yfgz;

tp[i1].sk=tp[i].sk;

tp[i1].sfgz=tp[i].sfgz;

}

strcpy(tp[kkk1].num,new

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

当前位置:首页 > 工程科技 > 机械仪表

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1