#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
enum sex
{
man=0,
woman=1,
};
enum degree
{
primary = 0,
junior=1,
high=2,
college=3,
master=4,
doctor=5,
};
struct worker
{
int id;
char name[20];
sex sex;
int age;
degree degree;
int salary;
char address[50];
int tele;
struct worker* next;
};
void select();
void managersystem();
void workersystem();
void workerstats();
int stats_sex(struct worker* head);
int stats_age(struct worker* head);
int stats_degree(struct worker* head);
int stats_wage(struct worker* head);
void input(struct worker* head);
void browse(struct worker* head);
int check_degree(struct worker* head);
int check_id(struct worker* head);
int Delete(struct worker* head);
int insert(struct worker* head);
int revise_worker(struct worker* head);
int revise_salary(struct worker* head);
struct worker* head = (struct worker*)malloc(sizeof(struct worker));
int main()
{
select();
FILE* w = fopen("input.txt", "wb");
if ((w = fopen("input.txt", "wb")) == NULL)
{
printf("cannot open file\n");
exit(0);
}
struct worker* p = head;
while (p != NULL) //链表数据循环输入到文件内
{
fprintf(w, "%d ", p->id);
fprintf(w, "%s ", p->name);
fprintf(w, "%d ", p->sex);
fprintf(w, "%d ", p->age);
fprintf(w, "%d", p->degree);
fprintf(w, "%d ", p->salary);
fprintf(w, "%s ", p->address);
fprintf(w, "%d ", p->tele);
fprintf(w, "%s", "\r\n");
p = p->next;
}
fclose(w);
return 0;
}
void workerstats()
{
int e;
do
{
printf("==职工统计系统==\n");
printf("1:按性别统计职工个数\n");
printf("2:按年龄统计职工个数\n");
printf("3:按学历统计职工个数\n");
printf("4:按工资统计职工个数\n");
printf("0:返回上一级页面\n");
printf("===\n");
printf("请输入你的选择\n");
scanf("%d", &e);
switch (e)
{
case 1:stats_sex(head);
case 2:stats_age(head);
case 3:stats_degree(head);
case 4:stats_wage(head);
case 0:managersystem();
break;
default:
printf("无效的输入,请重新输入:\n");
}
} while (e != 0);
return ;
}
void managersystem()
{
int e;
do
{
printf("==经理操作==\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("请输入你的选择\n");
scanf("%d", &e);
switch (e)
{
case 1:input(head);
case 2:browse(head);
case 3:check_degree(head);
case 4:check_id(head);
case 5:Delete(head);
case 6:insert(head);
case 7:workerstats();
case 8:revise_salary(head);
case 0:
select();
break;
default:
printf("无效的选择,请重新输入:\n");
}
} while (e != 0);
return ;
}
void workersystem()
{
int e;
do
{
printf("==职工操作==\n");
printf("1:修改职工信息(性别/年龄/电话/住址)\n");
printf("2:按职工号查询职工信息\n");
printf("0:返回上级页面\n");
printf("==\n");
printf("请输入你的选择\n");
scanf("%d", &e);
switch (e)
{
case 1:revise_worker(head);
case 2:check_id(head);
case 0:
select();
break;
default:
printf("无效的选择,请重新输入:\n");
}
} while (e != 0);
return;
}
void select()
{
int e;
do
{
printf("欢迎进入职工管理系统\n");
printf("请选择进入哪个系统\n");
printf("0:经理管理系统\n");
printf("1:职工自检系统\n");
printf("2:退出\n");
printf("请输入你的选择:");
scanf("%d", &e);
switch (e)
{
case 0: managersystem();
case 1: workersystem();
case 2:exit(0);
default:
printf("无效的选择,请重新输入。\n");
} } while (e != 2);
return ;
}
int stats_sex(struct worker* head)//输入性别,统计该性别人数
{
printf("请输入你要统计人数的性别:\n");
int cnt=0;
sex sex;
scanf("%d", &sex);
struct worker* p;
p = head;
while (p != NULL)
{
if (p->sex== sex)
{
cnt++;
}
p = p->next;
}
return cnt;
}
int stats_age(struct worker *head)//输入年龄,统计小于该年龄人数
{
printf("请输入你要统计人数的年龄上限:\n");
int age;
int cnt=0;
scanf("%d", &age);
struct worker* p;
p = head;
while (p != NULL)
{
if (p->age <= age&&p->age>0)
{
cnt++;
}
p = p->next;
}
return cnt;
}
int stats_degree(struct worker *head)//输入学历,统计该学历人数
{
printf("请输入你要统计人数的学历:\n");
degree degree;
int cnt = 0;
scanf("%d", °ree);
struct worker* p;
p = head;
while (p != NULL)
{
if (p->degree==degree)
{
cnt++;
}
p = p->next;
}
return cnt;
}
int stats_wage(struct worker *head)//输入工资数,统计小于该工资数人数
{
printf("请输入你要统计人数的工资上限:\n");
int wage;
int cnt = 0;
scanf("%d", &wage);
struct worker* p;
p = head;
while (p != NULL)
{
if (p->salary <= wage && p->salary > 0)
{
cnt++;
}
p = p->next;
}
return cnt;
}
void input(struct worker *head)
{
struct worker* cur, * tail;
int id;
tail = head;
int n;
printf("请输入职工人数:\n");
scanf("%d", &n);
for(int i=0;i<n;i++)
{
printf("请输入职工号:\n");
scanf("%d", &id);
if (id==0)
{
break;
}
cur = (struct worker*)malloc(sizeof(struct worker));
cur->id = id;
printf("请输入姓名:\n");
scanf("%s", cur->name);
printf("请输入性别:\n");
scanf("%d", &cur->sex);
printf("请输入年龄:\n");
scanf("%d", &cur->age);
printf("请输入学历:\n");
scanf("%d", &cur->degree);
printf("请输入工资:\n");
scanf("%d", &cur->salary);
printf("请输入地址:\n");
scanf("%s", cur->address);
printf("请输入电话:\n");
scanf("%d", &cur->tele);
cur->next = NULL;
tail->next = cur;
tail = cur;
}
}
void browse(struct worker *head)
{
struct worker* p;
p = head;
while (p != NULL)
{
printf("%d %s %d %d %s %d", p->id, p->name, p->age, p->salary, p->address, p->tele);
switch (p->sex)
{
case 0:printf("man");
case 1:printf("woman");
}
switch (p->degree)
{
case 0:printf("primary");
case 1: printf("junior");
case 2:printf("high");
case 3:printf("college");
case 4: printf("master");
case 5: printf("doctor");
}
p = p->next;
}
}
int check_degree(struct worker* head)//通过职工学历查询职工信息
{
degree degree;
printf("请输入要查询员工的学历:\n");
scanf("%d", °ree);
int a = 0;
struct worker* p;
p = head;
while (p != NULL)
{
if (p->degree == degree)
{
a = 1;
printf("%d %s %d %d %s %d", p->id, p->name, p->age, p->salary, p->address, p->tele);
switch (p->sex)
{
case 0:printf("man");
case 1:printf("woman");
}
switch (p->degree)
{
case 0:printf("primary");
case 1: printf("junior");
case 2:printf("high");
case 3:printf("college");
case 4: printf("master");
case 5: printf("doctor");
}
}
p = p->next;
}
return a;
}
int check_id(struct worker* head)//通过职工号查询职工信息
{
int id;
printf("请输入要查询员工的职工号:\n");
scanf("%d", &id);
int a = 0;
struct worker* p;
p = head;
while (p != NULL)
{
if (p->id==id)
{
a = 1;
printf("%d %s %d %d %s %d", p->id, p->name, p->age, p->salary, p->address, p->tele);
switch (p->sex)
{
case 0:printf("man");
case 1:printf("woman");
}
switch (p->degree)
{
case 0:printf("primary");
case 1: printf("junior");
case 2:printf("high");
case 3:printf("college");
case 4: printf("master");
case 5: printf("doctor");
}
}
p = p->next;
}
return a;
}
int Delete(struct worker* head)//删除职工号相同的职工
{
int e;
printf("请输入你要删除的职工的职工号:\n");
scanf("%d", &e);
struct worker* pre=head, * tail=head;
if (tail != NULL)
{
tail = head;
if (tail->id==e)
{
head = head->next;
free(tail);
return 1;
}
else
{
while (tail != NULL)
{
if (tail->id == e)
break;
pre = tail;
tail = tail->next;
}
if (tail != NULL)
{
pre->next = tail->next;
free(tail);
return 1;
}
}
}
return 0;
}
int insert(struct worker* head)//插入职工号前一个位置
{
int e;
printf("请输入你要插入结点后员工的职工号:\n");
scanf("%d", &e);
struct worker* cur, * node = head, * pre;
cur = (struct worker*)malloc(sizeof(struct worker));
scanf("%d %s %d &d %d &d %s %d", &cur->id, cur->name,&cur->sex, &cur->age,&cur->degree, &cur->salary, cur->address, &cur->tele);
cur->next = NULL;
if (head->id == e)
{
cur->next = head;
head = cur;
return 1;
}
else
{
pre = node;
node = node->next;
while (node != NULL)
{
if (node->id == e)
break;
pre = node;
node = node->next;
}
if (node != NULL)
{
cur->next = node;
pre->next = cur;
return 1;
}
}
return 0;
}
int revise_worker(struct worker *head)//通过职工号找到修改的职工
{
int a = 0;
int id;
int age;
sex sex;
int tele;
char address[50];
printf("请输入需要修改职工的职工号:\n");
scanf("%d", &id);
struct worker* cur;
cur = head;
while (cur != NULL)
{
if (cur->id == id)
a = 1;
break;
}
printf("请输入修改之后的信息:\n");
printf("请输入性别:\n");
scanf("%d", &sex);
printf("请输入年龄:\n");
scanf("%d", &age);
printf("请输入地址:\n");
scanf("%s", address);
printf("请输入手机号:\n");
scanf("%d", &tele);
cur->sex = sex;
cur->age = age;
strcpy(cur->address, address);
cur->tele = tele;
return a;
}
int revise_salary(struct worker* head)
{
int a = 0;
int id;
int salary;
printf("请输入需要修改职工的职工号:\n");
scanf("%d", &id);
struct worker* cur;
cur = head;
while (cur != NULL)
{
if (cur->id == id)
a = 1;
break;
}
printf("请输入修改之后的信息:\n");
printf("请输入工资:\n");
scanf("%d", &salary);
cur->salary = salary;
return a;
}