用c语言编写企业人事管理信息系统.docx
《用c语言编写企业人事管理信息系统.docx》由会员分享,可在线阅读,更多相关《用c语言编写企业人事管理信息系统.docx(24页珍藏版)》请在冰豆网上搜索。
![用c语言编写企业人事管理信息系统.docx](https://file1.bdocx.com/fileroot1/2023-1/11/0293b853-efcf-44d5-ba43-4b56ef470136/0293b853-efcf-44d5-ba43-4b56ef4701361.gif)
用c语言编写企业人事管理信息系统
企业人事管理信息系统(两种方法)
方法一
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
structdate
{
intyear,month,day;
};
typedefstructmanrecord
{
intid;
charname[20];
charsex[10];
chardept[20];
structdateworktime;
structmanrecord*next;
}Elemtype;
Elemtype*init()
{
Elemtype*h;
h=(Elemtype*)malloc(sizeof(Elemtype));
if(h==NULL)
{
printf("内存空间不足!
\n");
returnNULL;
}
else
{
h->next=NULL;
returnh;
}
}
voidterm(Elemtype*h)
{
Elemtype*p,*q;
p=h;
while(p!
=NULL)
{
q=p;
p=p->next;
free(q);
}
}
Elemtype*isidExist(Elemtype*h,intid)
{
Elemtype*p;
p=h->next;
while(p!
=NULL)
if(p->id==id)
returnp;
else
p=p->next;
returnNULL;
}
voidinputStaff(Elemtype*h)
{
Elemtype*p;
intid;
while
(1)
{
printf("输入员工编号(小于等于0,则结束输入):
");
scanf("%d",&id);
if(id<=0)
{
printf("数据输入结束。
\n");
break;
}
p=(Elemtype*)malloc(sizeof(Elemtype));
if(p==NULL)
{
printf("内存空间不足,输入结束。
\n");
break;
}
p->id=id;
printf("输入姓名:
\n");
scanf("%s",p->name);
printf("输入性别:
\n");
scanf("%s",p->sex);
printf("输入部门:
\n");
scanf("%s",p->dept);
printf("输入员工工作时间:
(yyyy-mm-dd):
\n");
scanf("%d-%d-%d",&p->worktime.year,&p->worktime.month,&p->worktime.day);p->next=NULL;
h->next=p;
h=p;
}
}
voidoutputHead()
{
printf("编号\t姓名\t性别\t部门\t工作时间\n");
}
voidoutputOneStaff(Elemtype*p)
{
printf("%d\t%s\t%s\t%s\t",p->id,p->name,p->sex,p->dept);
printf("%d-%d-%d",p->worktime.year,p->worktime.month,p->worktime.day);
printf("\n");
}
voidoutputStaff(Elemtype*h)
{
Elemtype*p;
if(h->next==NULL)
{
printf("链表为空!
\n");
return;
}
outputHead();
p=h->next;
while(p!
=NULL)
{
outputOneStaff(p);
p=p->next;
}
printf("数据输出结束!
\n");
}
voidsaveStaff(Elemtype*h)
{
FILE*fp;
Elemtype*p;
if(h->next==NULL)
{
printf("无数据!
\n");
return;
}
fp=fopen("d:
\\企业人事管理信息系统\\staff.txt","w");
if(fp==NULL)
{
printf("文件打开失败!
\n");
return;
}
p=h->next;
while(p!
=NULL)
{
fprintf(fp,"\n");
fprintf(fp,"%d\t%s\t%s\t%s\t",p->id,p->name,p->sex,p->dept);
fprintf(fp,"%d-%d-%d",p->worktime.year,p->worktime.month,p->worktime.day);p=p->next;
}
fclose(fp);
printf("已成功存盘!
\n");
}
voidreadStaff(Elemtype*h)
{
intn;
FILE*fp;
Elemtype*p;
fp=fopen("d:
\\企业人事管理信息系统\\staff.txt","r");
if(fp==NULL)
{
printf("文件打开失败!
\n");
return;
}
n=0;
while(!
feof(fp))
{
p=(Elemtype*)malloc(sizeof(Elemtype));
if(p==NULL)
{
printf("内存空间不足。
\n");
break;
}
fscanf(fp,"%d\t%s\t%s\t%s\t",&p->id,p->name,p->sex,p->dept);
fscanf(fp,"%d-%d-%d",&p->worktime.year,&p->worktime.month,&p->worktime.day);n++;
p->next=NULL;
h->next=p;
h=p;
}
fclose(fp);
printf("已从文件成功读取%d条记录!
\n",n);
}
voidinsertOneStaff(Elemtype*h)
{
Elemtype*p;
p=(Elemtype*)malloc(sizeof(Elemtype));
if(p==NULL)
{
printf("内存空间不足.\n");
return;
}
printf("请输入要插入的员工信息。
\n");
do{
printf("输入员工编号:
\n");
scanf("%d",&p->id);
if(p->id<=0)
printf("编号输入错误,请重新输入。
\n");
}while(p->id<=0);
printf("输入姓名:
\n");
scanf("%s",p->name);
printf("输入性别:
\n");
scanf("%s",p->sex);
printf("输入部门:
\n");
scanf("%s",p->dept);
printf("输入员工工作时间:
(yyyy-mm-dd):
\n");
scanf("%d-%d-%d",&p->worktime.year,&p->worktime.month,&p->worktime.day);p->next=h->next;
h->next=p;
printf("已成功插入一个员工记录。
\n");
}
voiddeleteOneStaff(Elemtype*h)
{
Elemtype*p;
if(h->next==NULL)
{
printf("链表为空!
\n");
return;
}
p=h->next;
h->next=p->next;
printf("编号为(%d)的员工记录已从链表中删除。
\n",p->id);
free(p);
}
voidstraightInsertSortById(Elemtype*h)
{
Elemtype*t,*s,*u,*v;
if(h->next==NULL)
{
printf("链表中无数据!
\n");
return;
}
s=h->next->next;
h->next->next=NULL;
while(s!
=NULL)
{
t=s;
s=s->next;
u=h;
v=h->next;
while(v!
=NULL&&v->idid)
{
u=v;
v=v->next;
}
u->next=t;
t->next=v;
}
printf("已按照员工的编号进行排序。
排序后的结果为:
\n");
outputStaff(h);
}
voidsearchById(Elemtype*h,intid)
{
Elemtype*p;
p=isidExist(h,id);
if(p==NULL)
printf("查找失败!
编号为%d的员工不存在!
\n",id);
else
{
printf("查找成功!
查找结果如下:
\n");
outputHead();
outputOneStaff(p);
}
}
voidsearchByName(Elemtype*h,charname[])
{
intflag=0;
Elemtype*p;
p=h->next;
while(p!
=NULL)
{
if(strcmp(p->name,name)==0)
{
if(flag==0)
{
flag=1;
printf("查找成功!
查找结果如下:
\n");
outputHead();
}
outputOneStaff(p);
}
p=p->next;
}
if(flag==0)
printf("查找失败!
姓名为%s的员工不存在.\n",name);
}
voidsearchStaff(Elemtype*h)
{
intid;
charname[20];
intsubMenuItem=1;
while(subMenuItem!
=0)
{
printf("\n\n");
printf("********查找子菜单********\n");
printf("*1.根据员工编号查找*\n");
printf("*2.根据员工姓名查找*\n");
printf("*0.返回主菜单*\n");
printf("**************************\n");
printf("请输入所选子菜单项序号:
");
scanf("%d",&subMenuItem);
switch(subMenuItem)
{
case1:
printf("输入要查找的员工编号:
");
scanf("%d",&id);
searchById(h,id);
break;
case2:
printf("输入要查找的员工姓名:
");
scanf("%s",name);
searchByName(h,name);
break;
case0:
break;
default:
printf("输入超出范围!
\n");
break;
}
}
}
voidmain()
{
intmenuItemCode;
Elemtype*head;
head=init();
if(head==NULL)
return;
menuItemCode=1;
while(menuItemCode!
=0)
{
printf("\n\n");
printf("********人事管理信息系统**********\n");
printf("*1.输入员工信息*\n");
printf("*2.输出员工信息*\n");
printf("*3.将员工信息写入文件*\n");
printf("*4.从文件读取员信息*\n");
printf("*5.插入一个员工信息*\n");
printf("*6.删除一个员工信息*\n");
printf("*7.对员工信息进行排序*\n");
printf("*8.对员工信息进行查找*\n");
printf("*0.退出系统*\n");
printf("**********************************\n");
printf("请输入所选菜单项序号:
");
scanf("%d",&menuItemCode);
switch(menuItemCode)
{
case1:
inputStaff(head);break;
case2:
outputStaff(head);break;
case3:
saveStaff(head);break;
case4:
readStaff(head);break;
case5:
insertOneStaff(head);break;
case6:
deleteOneStaff(head);break;
case7:
straightInsertSortById(head);break;
case8:
searchStaff(head);break;
case0:
break;
default:
printf("输入超出范围!
\n");break;
}
}
term(head);
}
方法二
#include"stdio.h"
#include"string.h"
#defineMAXSIZE100
structdate
{
intyear,month,day;
};
typedefstructmanrecord
{
intid;
charname[20];
charsex[10];
chardept[20];
structdateworktime;
}Elemtype;
structsequence
{
Elemtypeelem[MAXSIZE];
intlen;
};
structsequencev;
voidinputstaff()
{
inti,n;
printf("请输入员工个数:
\n");
scanf("%d",&n);
if(n<0)
return;
for(i=0;i{
printf("输入第%d个企业人员的编号:
\n",i+1);
scanf("%d",&v.elem[i].id);
printf("输入企业人员姓名:
\n");
scanf("%s",v.elem[i].name);
printf("输入企业人员性别:
\n");
scanf("%s",v.elem[i].sex);
printf("输入企业人员部门:
\n");
scanf("%s",v.elem[i].dept);
printf("输入企业人员工作时间(yyyy-mm-dd):
\n");
scanf("%d-%d-%d",&v.elem[i].worktime.year,&v.elem[i].worktime.month,&v.elem[i].worktime.day);
}
v.len=n;
}
voidoutputstaff()
{
inti;
if(v.len==0)
{
printf("\n无数据!
\n");
return;
}
printf("编号\t姓名\t性别\t部门\t工作时间\n");
for(i=0;i{
printf("%d\t%s\t%s\t%s\t",v.elem[i].id,v.elem[i].name,v.elem[i].sex,v.elem[i].dept);printf("%d-%d-%d\n",v.elem[i].worktime.year,v.elem[i].worktime.month,v.elem[i].worktime.day);
}
}
voidsavestaff()
{
inti;
FILE*fp;
if(v.len==0)
{
printf("\n无数据!
\n");
return;
}
fp=fopen("d:
\\人事管理信息系统\\staff.txt","w");
if(fp==NULL)
{
printf("文件打失败!
\n");
return;
}
for(i=0;i{fprintf(fp,"\n");
fprintf(fp,"%d\t%s\t%s\t%s\t",v.elem[i].id,v.elem[i].name,v.elem[i].sex,v.elem[i].dept);fprintf(fp,"%d-%d-%d",v.elem[i].worktime.year,v.elem[i].worktime.month,v.elem[i].worktime.day);
}
fclose(fp);
printf("已成功存盘!
\n");
}
voidreadstaff()
{
inti;
FILE*fp;
fp=fopen("d:
\\人事管理信息系统\\staff.txt","r");
if(fp==NULL)
{
printf("文件打开失败!
\n");
return;
}
i=0;
while(!
feof(fp))
{
fscanf(fp,"%d%s%s%s",&v.elem[i].id,v.elem[i].name,v.elem[i].sex,v.elem[i].dept);fscanf(fp,"%d-%d-%d",&v.elem[i].worktime.year,&v.elem[i].worktime.month,&v.elem[i].worktime.day);
i++;
}
v.len=i;
fclose(fp);
printf("已从文件成功读取%d条记录!
\n",v.len);
}
voidinsertOneStaff()
{
Elemtypes;
inti,pos;
if(v.len==MAXSIZE)
{
printf("表已满!
\n");
return;
}
printf("请输入插入位置:
");
scanf("%d",&pos);
if(pos<0||pos>MAXSIZE)
{
printf("插入位置出错!
\n");
return;
}
printf("请输入要插入的员工记录。
\n");
printf("输入企业人员编号:
\n");
scanf("%d",&s.id);
printf("输入企业人员姓名:
\n");
scanf("%s",s.name);
printf("输入企业人员性别:
\n");
scanf("%s",s.sex);
printf("输入企业人员部门:
\n");
scanf("%s",s.dept);
printf("输入企业人员工作时间(yyyy-mm-dd):
\n");
scanf("%d-%d-%d",&s.worktime.year,&s.worktime.month,&s.worktime.day);
for(i=v.len-1;i>=pos;i--)
v.elem[i+1]=v.elem[i];
v.elem[pos]=s;
v.len=v.len+1;
printf("插入成功!
\n");
}
voiddeleteOneStaff()
{
inti,pos;
if(v.len==0)
{
printf("表空!
\n");
return;
}
printf("请输入要删除的员工记录的位置:
");
scanf("%d",&pos);
if(pos<0||pos>v.len-1)
{
printf("删除的位置出错!
\n");
return;
}
for(i=pos+1;i<=v.len-1;i++)
v.elem[i-1]=v.elem[i];
v.len=v.len-1;
printf("删除成功!
\n");
}
voidbubbleSortById()
{
inti,j,n;
Elemtypetemp;
inttag;
n=v.len;
for(tag=1,i=0;i<=n-1&&tag==1;i++)
{
tag=0;
for(j=n-1;j>i;j--)
if(v.elem[j].id{
temp=v.elem[j];
v.elem[j]=v.elem[j-1];
v.elem[j-1]=temp;
tag=1;
}
}
printf("已按照员工编号递增排序。
排序后的结果为:
\n");
outputstaff();
}
voidoutputHead()
{
printf("编号\t姓名\t性别\t部门\t工作时间\n");
}
voidoutputOneStaff(Elemtypew)
{
printf("%d\t%s\t%s\t%s\t",w.id,w.name,w.sex,w.dept);
printf("%d-%d-%d",w.worktime.year,w.worktime.month,w.worktime.day);
printf("\n");
}
intisIdExist(intid)
{
intn,i=0;
n=v.len;
while(i=id)
i++;
if(ireturni;
else
return-1;
}
voidseqSearchById(intid)
{
intpos;
pos=isIdExist(id);
if(pos!
=-1)
{
printf("查找成功!
查找结果如下:
\n");
outputHead();
outputOneStaff(v.elem[pos]);
}
else
printf("查找失败!
编号为%d的员工不存在。
\n",id);
}
voidseqSearchByName(charname[])
{
intflag=0;
intn,i;
n=v.len;
i=0;
while(i{
if(strcmp(v.elem[i].name,name)==0)
{
if(flag==0)
{
flag=1;
printf("查找成功!
查找结果如下:
\n");
outputHead();
}
outputOneStaff(v.elem[i]);
}
i++;
}
if(flag==0)
printf("查找失败!
姓名为%s的员工不存在。
\n",name);
}
voidsearchStaff()
{
intid;
charname[20];
intsubMenuItem=1;
while(subMenuItem!
=0)
{
printf("\n\n");
printf("****************