C语言程序设计 《招聘信息管理系统》
发布网友
发布时间:2022-04-19 12:54
我来回答
共1个回答
热心网友
时间:2023-07-03 04:15
#include<stdio.h>
#include<stdlib.h>
/*对于学历和工作要求都是用数字来替代*/
typedef struct worker
{
int num; //编号
char id[20]; //身份证号,过长,所以所以用字符串
char name[15]; //姓名
int degree; //学历
int job; //需要的工作
worker *next;
worker *pre;
}worker,*Lworker;
/*需求记录*/
typedef struct want
{
int n; //单位的编号
int job; //需求的岗位
int num; //需求的人数
want *next;
want *pre;
}want,*Lwant;
/*输出说明信息的函数*/
void info()
{
printf("输入说明如下:\n");
printf("学历说明:\n1:高中毕业 2:大学毕业 3:研究生 4:更高学历\n");
printf("职位说明如下:\n1:程序员 2:管理人员 3:会计 4:兽医\n");
printf("当输入求职者信息的时候,求职者编号为-1时,输入结束\n");
printf("当输入供职单位信息的时候,当供职的数量为-1的时候,输入结束\n");
}
/*输入人才信息*/
void input_worker(Lworker head)
{
int i=1;
Lworker x=head;
x->pre=NULL;
while(1)
{
printf("输入第%d个求职者的信息,顺序为编号,姓名,身份证号,需要的工作,学历\n",i);
scanf("%d",&x->num);
if(x->num==-1)
break;
getchar();//回车会被读入到gets()函数中,所以必须有一个getchar()把回车收回
gets(x->name);
gets(x->id);
scanf("%d",&x->job);
scanf("%d",&x->degree);
Lworker y=(worker *)malloc(sizeof(worker));
x->next=y;
y->pre=x;
x=y;
i++;
}
x->pre->next=NULL;
free(x);
}
/*输入求职信息*/
void input_want(Lwant head)
{
Lwant x=head;
int i=1;
x->pre=NULL;
while(1)
{
printf("第%d个供职单位的信息,顺序为编号,工作,数量\n",i);
scanf("%d",&x->n);
scanf("%d",&x->job);
scanf("%d",&x->num);
if(x->num==-1)
break;
i++;
Lwant y=(want*)malloc(sizeof(want));
x->next=y;
y->pre=x;
x=y;
}
x->pre->next=NULL;
free(x);
}
/*查询人才信息函数*/
//参数num就是员工的编号,查询是是什么工作
int find_worker(Lworker head,int num)
{
Lworker x=head;
for(;;x=x->next)
{
if(x->num==num)
{
return(x->job);
}
}
return(-1); //表示没有这个人
}
/*查询工作信息函数*/
//num就是编号
int find_want(Lwant head,int num)
{
Lwant x=head;
for(;;x=x->next)
{
if(x->n==num)
return(x->job);
}
return(-1); //表示没有这个单位的信息
}
/*修改求职者的信息*/
//参数num就是员工的编号
void change_worker(Lworker head,int num)
{
int m=0;
Lworker x=head;
for(;;x=x->next)
{
if(x->num==num)
{
break;
}
}
printf("输入要修改的内容:\n1:工作 2:学历 3:身份证号 4:姓名\n");
scanf("&d",&m);
switch(m)
{
case 1:
printf("输入更正后的工作\n");
scanf("%d",&x->job);
break;
case 2:
printf("输入更正后的学历\n");
scanf("%d",&x->degree);
break;
case 3:
printf("输入更正后的身份证号\n");
gets(x->id);
break;
case 4:
printf("输入更正后的姓名\n");
gets(x->name);
break;
}
}
/*更改用人单位信息*/
//num就是编号
void change_want(Lwant head,int num)
{
int n;
Lwant x=head;
for(;;x=x->next)
{
if(x->n==num)
break;
}
printf("输入要修改的内容\n1:工作 2:人数");
scanf("%d",&n);
switch(n)
{
case 1:
printf("输入新的工作\n");
scanf("%d",&x->job);
break;
case 2:
printf("输入新的人数\n");
scanf("%d",&x->num);
break;
}
}
/*删除求职者信息*/
Lworker del_worker(Lworker head,int num)
{
Lworker x=head;
if(head->num==num)
{
x=head->next;
x->pre=NULL;
free(head);
return(x);
}
else
{
for(;;x=x->next)
{
if(x->num==num)
{
break;
}
}
Lworker y=x->pre;
Lworker z=x->next;
if(z==NULL)
{
y->next=NULL;
free(x);
}
else
{
y->next=z;
z->pre=y;
free(x);
}
return(head);
}
}
/*删除用人单位信息*/
Lwant del_want(Lwant head,int num)
{
Lwant x=head;
if(head->n==num)
{
x=x->next;
x->pre=NULL;
free(head);
return(x);
}
else
{
for(;;x=x->next)
{
if(x->n==num)
{
break;
}
}
Lwant y=x->pre;
Lwant z=x->next;
if(z==NULL)
{
y->next=NULL;
free(x);
return(head);
}
else
{
y->next=z;
z->pre=y;
free(x);
return(head);
}
}
}
/*统计需求量最大的工作*/
void tongji_need(Lworker head,int *n)
{
int i,m=0;
for(i=1;i<5;i++)
n[i]=0;
Lworker x=head;
for(;x!=NULL;x=x->next)
{
switch(x->job)
{
case 1:
n[1]++;
break;
case 2:
n[2]++;
break;
case 3:
n[3]++;
break;
case 4:
n[4]++;
break;
}
}
}
/*统计供给量最大的工作*/
void tongji_serve(Lwant head,int *m)
{
int i;
for(i=1;i<5;i++)
m[i]=0;
Lwant x=head;
for(;x!=NULL;x=x->next)
{
switch(x->job)
{
case 1:
m[1]=m[1]+x->num;
break;
case 2:
m[2]=m[2]+x->num;
break;
case 3:
m[3]=m[3]+x->num;
break;
case 4:
m[4]=m[4]+x->num;
break;
}
}
}
void main()
{
int i;
int x,num;
info();
int n[5],m[5];
Lworker head1=(worker *)malloc(sizeof(worker));
Lwant head2=(want *)malloc(sizeof(want));
while(1)
{
printf("输入要进行的操作\n");
printf("1:输入求值人员信息 2:输入用人单位信息 3:删除求值人员信息 4:删除用人单位信息 5:修改求职人员信息 6:修改用人单位信息\n");
printf("7:查询某个求职人员信息 8:查询某个用人单位信息 9:统计需求的工作信息 10:统计提供工作的信息 0:退出\n");
printf("注意:1和2如果重复执行的话,会覆盖以前的而结果,所以不可以重复选择,只可以做一次\n");
scanf("%d",&x);
if(x==0)
break;
switch(x)
{
case 1:
input_worker(head1);
break;
case 2:
input_want(head2);
break;
case 3:
printf("输入要删除的人员的编号\n");
scanf("%d",&num);
head1=del_worker(head1,num);
break;
case 4:
printf("输入要删除的单位的编号\n");
scanf("%d",&num);
head2=del_want(head2,num);
break;
case 5:
printf("输入要修改的人员的编号\n");
scanf("%d",&num);
change_worker(head1,num);
break;
case 6:
printf("输入要修改的单位的编号\n");
scanf("%d",&num);
change_want(head2,num);
break;
case 7:
printf("输入要查询的人员的编号\n");
scanf("%d",&num);
find_worker(head1,num);
break;
case 8:
printf("输入要查询的单位的编号\n");
scanf("%d",&num);
find_want(head2,num);
break;
case 9:
tongji_need(head1,n);
for(i=1;i<5;i++)
{
printf("第%d种工作的需求量是%d\n",i,n[i]);
}
break;
case 10:
tongji_serve(head2,m);
for(i=1;i<5;i++)
{
printf("第%d种工作的提供量是%d\n",i,m[i]);
}
break;
}
}
}