#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef enum workpost WOP;
typedef struct empolyee EMP;
enum workpost { manager = 1, technician, salesperson, salesmanager };
struct empolyee
{
int num; //工号
char name[20];//姓名
char sex[3];//性别
char department[20];//部门
int age;//年龄
float salary;//当月工资
WOP wop;// 职位
union
{
int worktime;//技术员需要工作时间
int amount;//销售员需要销售额
}work;
struct empolyee *next;//指向下一个链表
};
void menu_head(char *head)//打印菜单首部
{
system("cls");
printf("\n -------------------| 员工工资管理系统 |-------------------\n\n");
printf("\n ---------------------| %s |---------------------\n", head);
}
void menu_workpost()//岗位选择菜单
{
printf("\n ---------------------| 请选择岗位 |-----------------------\n");
printf(" ==========================================================\n");
printf(" || ||\n");
printf(" || - 1 - 经理 - 2 - 技术员 ||\n");
printf(" || ||\n");
printf(" || - 3 - 销售员 - 4 - 销售经理 ||\n");
printf(" || ||\n");
printf(" || - 0 - 退出 ||\n");
printf(" || ||\n");
printf(" ==========================================================\n\n");
printf(" --请输入您的选择:");
}
void menu_condition()//选择条件菜单
{
printf("\n --请选择条件\n\n");
printf(" ==========================================================\n");
printf(" || ||\n");
printf(" || - 1 - 职工号 - 2 - 姓名 - 0 - 退出 ||\n");
printf(" || ||\n");
printf(" ==========================================================\n");
printf("\n --请输入您的选择:");
}
void pause()//停止功能
{
printf("\n 所有数据显示完毕!按任意键返回...");
getchar();
getchar();
}
void print_emp_h()//打印员工信息首部
{
printf("\n =======================| 员工信息 |=======================\n\n");
printf(" ==========================================================\n\n");
printf(" ||职工号|姓名|性别|部门|年龄|当月工资|岗位|工作时间/销售额||\n");
}
void print_emp(EMP *p)//打印员工信息
{
if (p == NULL) printf(" 无数据!");
printf(" || %-5d%-7s%-3s%-7s%-4d%-9.2f", p->num, p->name, p->sex, p->department, p->age, p->salary);
switch (p->wop)//workpost
{
case manager:printf("%-6s ||\n", "经理"); break;
case technician:printf("%-12s", "技术员"); printf("%-8d||\n", p->work.worktime); break;
case salesperson:printf("%-12s", "销售员"); printf("%-8d||\n", p->work.amount); break;
case salesmanager:printf("%-8s ||\n", "销售经理");
}
}
void sex_choice(EMP *p)//添加或修改员工性别
{
int sel;
while (1)
{
printf(" --请选择性别(1 - 男性 2 - 女性):");
scanf("%d", &sel);
if (sel == 1)
{
strcpy(p->sex, "男"); break;
}
else if (sel == 2)
{
strcpy(p->sex, "女"); break;
}
else printf(" 输入有误!请重新输入!\n");
}
}
int clean_inf()//恢复出厂设置
{
FILE *fp = NULL;
int sel1;
system("cls");
printf(" -------------------| 员工工资管理系统 |-------------------\n");
printf(" ---------------------| 恢复出厂设置 |---------------------\n");
printf("\n --恢复出厂设置会清除员工数据信息,是否继续?\n");
printf(" ==========================================================\n");
printf(" || ||\n");
printf(" || - 1 - 是 - 2 - 否 ||\n");
printf(" || ||\n");
printf(" ==========================================================\n");
printf("\n --请输入您的选择:");
scanf("%d", &sel1);
if (sel1 == 1)
{
printf("\n --正在清除员工信息,请稍后...\n");
if ((fp = fopen("employee.txt", "wb")) == NULL)//以“可写”的方式打开文件,清空当前文件夹下的employee.txt文件
{
printf("\n --错误:无法读取员工数据文件\n");
exit(0);
}
printf("\n --清除员工信息成功!\n");
fclose(fp);
}
return sel1;
}
void count_smsalary(EMP *head, EMP *p) //计算该员工的部门经理的工资;
{
EMP *p1 = NULL, *p2 = NULL;
int tamount = 0;
p2 = head;
while (!((strcmp(p2->department, p->department) == 0) && (p2->wop == salesmanager)) && (p2->next != NULL)) p2 = p2->next;//直到(同部门、是经理)&&(不为空)
if ((p2->wop == salesmanager) && (strcmp(p2->department, p->department) == 0)) //(同部门、是经理)&&(不为空)
{
p1 = p2;//p1指向该部门的经理
p2 = head;//p2重新找该部门的销售员
while (p2 != NULL)
{
if ((p2->wop == salesperson) && (strcmp(p->department, p2->department) == 0))
tamount += p2->work.amount;
p2 = p2->next; //计算该部门所有销售员销售总额
}
if(p1->wop==salesmanager)
p1->salary = (float)(5000 + tamount / 200);//0.5%->5/1000->1/200;计算该部门销售经理的工资
}
}
void count_emp(EMP *head, int sel)//统计计算所有员工按部门,全部的工资max,min,ave
{
EMP *p = NULL;
char department[20];
float max=0, min=0, ave=0;
int count=0;
switch (sel)
{
case 1://计算部门平均、最低台、最高工资信息
{
printf("\n --请输入部门:");
scanf("%s", department);
p = head;
while (p != NULL)
{
if (strcmp(p->department, department)==0)
{
max = min = p->salary;//初始化
break;//找出其部门第一个
}
p = p->next;
}
p = head;//重新开始,计算max,min,ave
while (p != NULL)
{
if (strcmp(p->department, department) == 0)
{
if (p->salary > max) max = p->salary;
if (p->salary < min) min = p->salary;
ave += p->salary;
count++;
}
p = p->next;
}
ave /= count;//ave = ave / count;
printf("\n --%s部门平均、最低台、最高工资信息如下:\n\n", department);
printf(" ==========================================================\n");
printf(" || ||\n");
printf(" || 平均工资:%-8.2f ||\n",ave);
printf(" || 最高工资:%-8.2f ||\n", max);
printf(" || 最低工资:%-8.2f ||\n",min);
printf(" || ||\n");
printf(" ==========================================================\n");
pause();
}break;//break出case1
case 2://计算部门超过平均工资员工信息如下
{
printf("\n --请输入部门:");
scanf("%s", department);
p = head;
while (p != NULL)//先计算平均数
{
if (strcmp(p->department, department) == 0);
{
ave += p->salary;
count++;
}
p = p->next;
}
ave /= count;
count = 0;
printf("\n --%s部门超过平均工资员工信息如下:\n", department);
print_emp_h();
p = head;
while (p != NULL)
{
if ((strcmp(p->department, department) == 0) && (p->salary > ave))
{
count++;
print_emp(p);
}
p = p->next;
}
printf("\n 共%d人\n", count);
pause();
}break;//break出case2
case 3://计算所有员工平均、最低、最高工资信息
{
p = head;
max = min = p->salary;
while (p != NULL)
{
if (p->salary > max) max = p->salary;
if (p->salary < min) min = p->salary;
ave += p->salary;
count++;
p = p->next;
}
ave /= count;
printf("\n --所有员工平均、最低、最高工资信息如下:\n");
printf(" ==========================================================\n");
printf(" || ||\n");
printf(" || 平均工资:%-8.2f ||\n", ave);
printf(" || 最高工资:%-8.2f ||\n", max);
printf(" || 最低工资:%-8.2f ||\n", min);
printf(" || ||\n");
printf(" ==========================================================\n");
pause();
}break;
case 4://计算所有超过平均工资员工信息
{
p = head;
while (p != NULL)
{
count++;
ave += p->salary;
p = p->next;
}
ave /= count;
count = 0;
printf("\n --超过平均工资员工信息如下:\n");
print_emp_h();
p = head;
while (p != NULL)
{
if(p->salary > ave)
{
count++;
print_emp(p);
}
p = p->next;
}
printf("\n 共%d人\n", count);
pause();
}break;
}
}
void sort_emp(EMP *head, int sel)//排序
{
int count, sel1;
float max, min, max1;
int minnum, maxnum, minnum1;
EMP *p=NULL, *p1=NULL;
p = head;
switch (sel)
{
case 1://全部员工根据工资由大到小排序
{
p = head;
max = min = p->salary;
while (p != NULL)
{
if (p->salary > max) max = p->salary;
if (p->salary < min) min = p->salary;
p = p->next;
}
max1 = max + 1;//保存最大值
printf("\n --全体员工信息排序:\n");
print_emp_h();
while (1)//1循环
{
max = min;
p = head;
while (p != NULL)
{
if ((p->salary>max) && (p->salary < max1)) max = p->salary;
p = p->next;
}
p = head;
count = 0;
while (p != NULL)//2循环2
{
if (p->salary == max)
{
p1 = p;
count++;//找出最大值的员工个数,方便检查是否个数为1;
}
p = p->next;
}
if (count == 1) print_emp(p1);//只有一个员工时直接输出
else//多个员工排序,找出他们的工号输出
{
maxnum = minnum = p1->num;//此时的p1是有最大值的最后一位员工
p = head;
while (p != NULL)
{
if ((p->salary == max) && (p->num > maxnum)) maxnum = p->num;//找出最大值中最前最后的员工
if ((p->salary == max) && (p->num < minnum)) minnum = p->num;
p = p->next;
}
minnum1 = minnum - 1;
while (1)
{
minnum = maxnum;
p = head;
while (p != NULL)
{
if ((p->salary == max) && (p->num <= minnum) && (p->num>minnum1))
{
minnum = p->num;
p1 = p;
}
p = p->next;
}
print_emp(p1);
minnum1 = minnum;
if (minnum == maxnum) break;
}
}
max1 = max;
if (max == min) break;
}
pause();
}break;
case 2://按岗位排序
{
menu_workpost();
scanf("%d", &sel1);
if(sel1==0)break;
if(sel1 != 0 && sel1 != 1 && sel1 != 2 && sel1 != 3 && sel1 != 4)
{
printf("\n --选择有误!请按任意键返回上一层菜单! ");getchar(); getchar();break;
}
switch (sel1)
{
case 1:printf("\n --经理员工信息排序:\n"); break;
case 2:printf("\n --技术员员工信息排序:\n"); break;
case 3:printf("\n --销售员员工信息排序:\n"); break;
case 4:printf("\n --销售经理员工信息排序:\n"); break;
}
p = head;
max = min = p->salary;
while (p != NULL)
{
if ((p->salary > max) && (p->wop == WOP(sel1))) max = p->salary;
if ((p->salary < min) && (p->wop== WOP(sel1))) min = p->salary;
p = p->next;
}
max1 = max + 1;
printf("\n --全体员工信息排序:\n");
print_emp_h();
while (1)
{
max = min;
p = head;
while (p != NULL)
{
if ((p->salary>max) && (p->salary < max1)&&(p->wop==WOP(sel1))) max = p->salary;
p = p->next;
}
p = head;
count = 0;
while (p != NULL)
{
if ((p->salary == max) && (p->wop == WOP(sel1)))
{
p1 = p;
count++;
}
p = p->next;
}
if (count == 1) print_emp(p1);
else
{
maxnum = minnum = p1->num;
p = head;
while (p != NULL)
{
if ((p->salary == max) && (p->num > maxnum) && (p->wop == WOP(sel1))) maxnum = p->num;
if ((p->salary == max) && (p->num < minnum) && (p->wop == WOP(sel1))) minnum = p->num;
p = p->next;
}
minnum1 = minnum - 1;
while (1)
{
minnum = maxnum;
p = head;
while (p != NULL)
{
if ((p->salary == max) && (p->num <= minnum) && (p->num>minnum1) && (p->wop == WOP(sel1)))
{
minnum = p->num;
p1 = p;
}
p = p->next;
}
print_emp(p1);
minnum1 = minnum;
if (minnum == maxnum) break;
}
}
max1 = max;
if (max == min) break;
}
pause();
}
}
}
void inquiry_emp(EMP *head, int sel)//浏览员工信息
{
int sel1,sel2, count, page, npage=1,num;
char department[20], name[20];
EMP *p;
switch (sel)
{
case 1://按照工号
{
printf("\n --全体员工信息表:\n");
count = 0;
p = head;
while (p != NULL)//计算有多少个员工
{
count++;
p = p->next;
}
page = count / 10;//共多少页
if ((count - page * 10)>0) page += 1;//看是否整十, 如56/10=5,56>50,所以要加一页
npage = 1;//numpage设定为第一页
while (1)
{
count = 0;
p = head;
while (p != NULL)
{
if (count == (npage - 1) * 10) break;//如果是0 ,就不用数了
count++;
p = p->next;
}
p = head;
print_emp_h();//应该写在下面的while里面第二行
while (p != NULL)
{
print_emp(p);
count++;
if (count == npage * 10) break;
p = p->next;//分页后没有改变成员信息
}
printf(" ==========================================================\n");
printf(" || 当前页数:第%d页 共%d页 ||\n", npage, page);
printf(" ==========================================================\n");
printf(" || 1 - 首页 2 - 上一页 3 - 下一页 4 - 尾页 0 -退出 ||\n");
printf(" ==========================================================\n");
printf("\n --请输入您的选择:");
scanf("%d", &sel1);
if (sel1 == 0) break;
switch (sel1)
{
case 1:npage = 1; break;
case 2:if (npage == 1); else npage -= 1; break;
case 3:if (npage == page); else npage += 1; break;
case 4:npage = page; break;
}
}
}break;
case 2://按照部门
{
printf("\n --请输入部门名:");
scanf("%s", department);
p = head;
printf("\n --%s部门的员工信息表:\n",department);
print_emp_h();
while (p != NULL)
{
if (strcmp(p->department, department) == 0) print_emp(p);
p = p->next;
}
pause();
}break;
case 3://按照岗位
{
while (1)
{
menu_workpost();
scanf("%d", &sel1);
p = head;
if (sel1 == 0) break;
switch (sel1)
{
case 1:
printf("\n --经理的员工信息表:\n");
print_emp_h();
while (p != NULL)
{
if (p->wop == manager) print_emp(p);
p = p->next;
}
break;
case 2:
printf("\n --技术员的员工信息表:\n");
print_emp_h();
while (p != NULL)
{
if (p->wop == technician) print_emp(p);
p = p->next;
}
break;
case 3:
printf("\n --销售员的员工信息表:\n");
print_emp_h();
while (p != NULL)
{
if (p->wop == salesperson) print_emp(p);
p = p->next;
}
break;
case 4:
printf("\n --技术员的员工信息表:\n");
print_emp_h();
while (p != NULL)
{
if (p->wop == salesmanager) print_emp(p);
p = p->next;
}
break;
default:printf("\n --选择有误!"); getchar();getchar();
}
pause();
}
}break;
case 4://按照已知条件
{
menu_condition();
scanf("%d", &sel1);
p = head;
switch (sel1)
{
case 1:
{
printf("\n --请输入员工号:");
scanf("%d", &num);
while ((p->num != num) && (p != NULL)) p = p->next;
if (p->num != num)
{
printf("\n 无该员工号!\n");
sel1 = 0;
}
}break;
case 2:
{
printf("\n --请输入姓名:");
scanf("%s", name);
while ((strcmp(p->name, name) != 0) && (p != NULL)) p = p->next;
if (strcmp(p->name, name) != 0)
{
printf("\n 无该员工姓名!\n");
sel1 = 0;
}
}break;
}
if (sel1)
{
printf("\n 已找到该员工信息!\n");
printf("\n --该员工信息如下:");
print_emp_h();
print_emp(p);
pause();
}
}break;
}
}
EMP *del_emp(EMP *head, int sel)//删除
{
int num, sel1;
char name[20];
EMP *p = head, *p1 = NULL;
switch (sel)
{
case 1:
{
printf("\n --请输入员工号:");
scanf("%d", &num);
while ((p->num != num) && (p != NULL))//不是所找工号&&不为空(直到找到是所找的员工)
{
p1 = p;
p = p->next;//因为找到员工号或空而跳出
}
if (p->num != num)
{
printf("\n 无该员工号!\n");
sel1 = 0;//sel1返回0
}
}break;
case 2:
{
printf("\n --请输入姓名:");
scanf("%s", name);
while ((strcmp(p->name, name) != 0) && (p != NULL))
{
p1 = p;
p = p->next;
}
if (strcmp(p->name, name) != 0)
{
printf("\n 无该员工姓名!\n");
sel1 = 0;//sel1返回0
}
}break;
}
if (sel)//如果有这个员工
{
pause();
printf("\n 已找到该员工信息!\n");
printf("\n --该员工信息如下:");
print_emp_h();
print_emp(p);
printf(" -----------------------| 是否删除 |-----------------------\n");
printf(" ==========================================================\n");
printf(" || ||\n");
printf(" || - 1 - 是 - 2 - 否 ||\n");
printf(" || ||\n");
printf(" ==========================================================\n");
printf("\n --请输入您的选择:");
scanf("%d", &sel1);
if (sel1 == 1)
{
if (head == p) head = p->next;
else p1->next = p->next;//p1是p的上一个
free(p);//删除p
}
printf("\n 删除成功!\n");
}
return head;//
}
EMP *edit_emp(EMP *head, int sel)//修改员工信息
{
int num, sel1 = 1;
char name[20];
EMP *p = NULL;
switch (sel)
{
case 1:
{
printf("\n --请输入员工号:");
scanf("%d", &num);
p = head;
while ((p->num != num) && (p->next != NULL)) p = p->next;
if (p->num != num)
{
printf("\n 无该员工号!\n");
sel1 = 0;
}
}break;
case 2:
{
printf("\n --请输入姓名:");
scanf("%s", name);
p = head;
while ((strcmp(p->name, name) != 0) && (p->next != NULL)) p = p->next;
if (strcmp(p->name, name) != 0)
{
printf("\n 无该员工姓名!\n");
sel1 = 0;
}
}break;
}
if (sel1)
{
printf("\n 已找到该员工信息!\n");
printf("\n --该员工信息如下:");
print_emp_h();
print_emp(p);
printf("\n --请选择要修改的信息:\n");
printf("\n ----------------------| 请选择内容 |----------------------\n");
printf(" ==========================================================\n");
printf(" || ||\n");
printf(" || - 1 - 姓名 - 2 - 性别 - 3 - 部门 ||\n");
printf(" || ||\n");
printf(" || - 4 - 岗位 - 5 - 年龄 - 0 - 取消操作 ||\n");
printf(" || ||\n");
if (p->wop == technician)
{
printf(" || - 6 - 工作时间 ||\n");
printf(" || ||\n");
}
if (p->wop == salesperson)
{
printf(" || - 6 - 销售额 ||\n");
printf(" || ||\n");
}
printf(" ==========================================================\n");
printf("\n --请输入您的选择:");
scanf("%d", &sel);
switch (sel)
{
case 1:
printf("\n --请输入姓名:");
scanf("%s", p->name);
break;
case 2:
sex_choice(p);
break;
case 3:
printf("\n --请输入部门:");
scanf("%s", p->department);
break;
case 4:
{
menu_workpost();
scanf("%d", &sel);
switch (sel)
{
p->wop = manager;
p->salary = 8000;
break;
case 2:
p->wop= technician;
printf("\n --已更改成技术员,是否输入工作时间?( 1 - 是 2 - 否 ):");
scanf("%d", &sel);
if (sel == 1)
{
printf("\n --请输入工作时间:");
scanf("%d", &p->work.worktime);
p->salary = (float)p->work.worktime * 100;
}
break;
case 3:
p->wop = salesperson;
printf("\n --已更改成销售员,是否输入销售额?( 1 - 是 2 - 否 ):");
scanf("%d", &sel);
if (sel == 1)
{
printf("\n --请输入销售额:");
scanf("%d", &p->work.amount);
p->salary = (float)p->work.amount*(float)0.04;
}
count_smsalary(head, p);
break;
case 4:
p->wop = salesmanager;
count_smsalary(head, p);
break;
}
}break;
case 5:
printf("\n --请输入年龄:");
scanf("%d", &p->age);
break;
case 6:
{
if (p->wop == technician)
{
printf("\n --请输入工作时间:");
scanf("%d", &p->work.worktime);
p->salary = (float)p->work.worktime * 100;
}
if (p->wop == salesperson)
{
printf("\n --请输入销售额:");
scanf("%d", &p->work.amount);
p->salary = (float)p->work.amount*(float)0.04;
}
}break;
case 0:break;
default:printf("\n --选择有误!"); getchar();getchar();
}
}
if (sel1) printf("\n --修改成功!");
return head;//
}
EMP *add_emp(EMP *head, int sel)//添加员工
{
EMP *n = NULL, *p = NULL;
if ((n = (EMP*)malloc(sizeof(EMP))) == NULL)
{
printf("\n 不能分配内存空间!\n");
exit(0);
}
n->next = NULL;
printf(" --请输入员工信息数据:\n");
printf(" --请输入姓名:");
scanf("%s", n->name);
sex_choice(n);
printf(" --请输入部门:");
scanf("%s", n->department);
printf(" --请输入年龄:");
scanf("%d", &n->age);
if (sel == 1)
{
n->wop = manager;
n->salary = 8000;
}
else if (sel == 2)
{
n->wop = technician;
printf(" --请输入工作时间:");
scanf("%d", &n->work.worktime);
n->salary = (float)n->work.worktime * 100;
}
else if (sel == 3)
{
n->wop = salesperson;
printf(" --请输入销售额:");
scanf("%d", &n->work.amount);
n->salary = (float)n->work.amount*(float)0.04;
count_smsalary(head, n);
}
else
{
n->wop = salesmanager;
count_smsalary(head, n);
}
if (head == NULL)
{
n->num = 1;
head = n;
}
else
{
p = head;
while (p->next != NULL) p = p->next;
n->num = p->num + 1;
p->next = n;
}
printf(" 添加成功!\n");
return head;
}
EMP *load_inf(EMP *head)//打开文件数据
{
FILE *fp;
EMP *s = NULL, *p = NULL;
int length, count, sel;
printf(" -------------------| 员工工资管理系统 |-------------------\n");
printf("\n --正在读取信息,请稍后…\n");
printf("\n --正在打开本员工数据文件\n");
if ((fp = fopen("employee.txt", "rb")) == NULL)//打开文件
{
printf("\n --错误:无法打开员工文件数据,是否新建数据文件?\n");
printf("\n --1 - 是 2 - 否,退出程序\n");
printf("\n --请输入您的选择:");
scanf("%d", &sel);
if (sel == 1)
if ((fp = fopen("employee.txt", "wb")) == NULL)//将文件设置为wb打开就是新建文件
{
printf("\n --错误:无法新建员工数据文件\n");
exit(0);
}
else printf("\n --已为您新建员工数据文件!\n");
else exit(0);
}
count = 0;
printf("\n --正在读取员工数据文件信息\n");
fseek(fp, 0, 2);
length = ftell(fp);
fseek(fp, 0, 0);
while (ftell(fp) != length)
{
if ((s = (EMP*)malloc(sizeof(EMP))) == NULL)
{
printf("\n --无法分配内存空间!\n");
fclose(fp);
}
if (fread(s, sizeof(EMP), 1, fp) != 1)
{
free(s);
break;
}
if (head == NULL)
head = p = s;
else
{
p->next = s;
p = s;
}
count++;
}
fclose(fp);
printf("\n --已读取%d名员工信息!\n", count);
printf("\n --数据加载成功!按任意键继续...");
getchar();
return head;
}
void save_inf(EMP *head)//保存信息
{
FILE *fp;
EMP *p;
int sel1 = 1;
system("cls");
printf(" -------------------| 员工工资管理系统 |-------------------\n");
printf("\n --正在保存信息,请稍后...\n");
printf("\n --正在保存员工信息\n");
if ((fp = fopen("employee.txt", "wb")) == NULL)
{
printf("\n --错误:无法读取本科生数据文件\n");
exit(0);
}
p = head;
while (p != NULL)
{
if (fwrite(p, sizeof(EMP), 1, fp) != 1)
{
printf(" --错误:写入本科生学生数据出错!\n");
sel1 = 0;
fclose(fp);
}
p = p->next;
}
printf("\n --保存员工信息成功\n");
fclose(fp);
if (sel1) printf("\n 保存数据成功!\n");
}
void main()
{
int sel, sel1;
EMP *head = NULL, *p = NULL;//定义两个员工类指针
head = load_inf(head);//
while (1)
{
p = head;
while (p != NULL)
{
if (p->wop == salesmanager) count_smsalary(head, p);
p = p->next;
}
sel1 = 1;
system("cls");
printf(" -------------------| 员工工资管理系统 |-------------------\n");
printf(" ==========================================================\n");
printf(" || ||\n");
printf(" || - 1 - 添加员工信息 - 2 - 修改员工信息 ||\n");
printf(" || ||\n");
printf(" || - 3 - 删除员工信息 - 4 - 查询员工信息 ||\n");
printf(" || ||\n");
printf(" || - 5 - 员工信息排序 - 6 - 员工工资统计 ||\n");
printf(" || ||\n");
printf(" || - 7 - 恢复出厂设置 - 8 - 保存信息 ||\n");
printf(" || ||\n");
printf(" || - 0 - 退出程序 ||\n");
printf(" || ||\n");
printf(" ==========================================================\n\n");
printf("\n --请输入您的选择:");
scanf("%d", &sel);
if (sel == 0)
{
save_inf(head);
printf(" 按任意键退出...\n");
getchar();
break;
}
switch (sel)
{
case 1:
while (sel1)
{
menu_head("添加员工信息");
menu_workpost();
scanf("%d", &sel1);
switch (sel1)
{
case 1:case 2:case 3:case 4:head = add_emp(head, sel1); getchar(); getchar(); break;
case 0:break;
default:printf("\n --选择有误!"); getchar();getchar();
}
}break;
case 2:
while (sel1)
{
menu_head("修改员工信息");
menu_condition();
scanf("%d", &sel1);
switch (sel1)
{
case 1:case 2:head = edit_emp(head, sel1); getchar(); getchar(); break;
case 0:break;
default:printf("\n --选择有误!"); getchar();getchar();
}
}break;
case 3:
while (sel1)
{
menu_head("删除员工信息");
menu_condition();
scanf("%d", &sel1);
switch (sel1)
{
case 1:case 2:head = del_emp(head, sel1); getchar(); getchar(); break;
case 0:break;
default:printf("\n --选择有误!"); getchar();getchar();
}
}break;
case 4:
while (sel1)
{
menu_head("查询员工信息");
printf("\n --请选择功能\n\n");
printf(" ==========================================================\n");
printf(" || ||\n");
printf(" || - 1 - 全部员工 - 2 - 按部门显示 ||\n");
printf(" || ||\n");
printf(" || - 3 - 按岗位显示 - 4 - 职工号/姓名查询 ||\n");
printf(" || ||\n");
printf(" || - 0 - 退出 ||\n");
printf(" || ||\n");
printf(" ==========================================================\n");
printf("\n --请输入您的选择:");
scanf("%d", &sel1);
switch (sel1)
{
case 1:case 2:case 3:case 4:inquiry_emp(head, sel1); break;
case 0:break;
default:printf("\n --选择有误!"); getchar();getchar();
}
}break;
case 5:
while (sel1)
{
menu_head("员工信息排序");
printf("\n --请选择功能\n\n");
printf(" ==========================================================\n");
printf(" || ||\n");
printf(" || - 1 - 全部员工 - 2 - 按岗位显示 ||\n");
printf(" || ||\n");
printf(" || - 0 - 退出 ||\n");
printf(" || ||\n");
printf(" ==========================================================\n");
printf("\n --请输入您的选择:");
scanf("%d", &sel1);
switch (sel1)
{
case 1:case 2:sort_emp(head, sel1); break;
case 0:break;
default:printf("\n --选择有误!"); getchar();getchar();
}
}break;
case 6:
while (sel1)
{
menu_head("员工工资统计");
printf("\n --请选择功能\n\n");
printf(" ==========================================================\n");
printf(" || ||\n");
printf(" || - 1 - 部门平均、最低、最高工资 ||\n");
printf(" || ||\n");
printf(" || - 2 - 部门超出平均工资员工信息 ||\n");
printf(" || ||\n");
printf(" || - 3 - 所有员工平均、最低、最高工资 ||\n");
printf(" || ||\n");
printf(" || - 4 - 部门超出平均工资员工信息 ||\n");
printf(" || ||\n");
printf(" || - 0 - 退出 ||\n");
printf(" || ||\n");
printf(" ==========================================================\n");
printf("\n --请输入您的选择:");
scanf("%d", &sel1);
switch (sel1)
{
case 1:case 2:case 3:case 4:count_emp(head, sel1); break;
case 0:break;
default:printf("\n --选择有误!"); getchar();getchar();
}
}break;
case 7:
if (clean_inf() == 1)
{
head = NULL;
}
printf(" 按任意键继续...");
getchar();
getchar();
break;
case 8:
save_inf(head);
printf(" 按任意键继续...");
getchar();
getchar();
break;
case 0:save_inf(head); break;
default:printf("\n --选择有误!"); getchar(); getchar(); break;
}
}
}
首先,先在h5里面写入window.android.getJs('参数')然后,我们在安卓端进行常规的操作 WebSettings settings = webView.getSettings(); webView.setWebChromeClient(new WebChromeClient()); settings.setJavaSc..._android 掉h5
版权声明:本文为博主【小北】原创文章,如要转载请评论回复。个人前端公众号:前端你别闹,JS前端实用开发QQ群 :147250970 欢迎加入~!再来更新一篇面试题 早前我更新过一篇 《前端面试题》,据反馈,确实帮助到了不少去面试的新人或者换工作的菜鸟他们留言或者直接赞赏表示感谢,还有问答案的,不过我想说:我就是不给你答案,自有原因
在每个Node上都会运行一个kube-proxy服务进程,这个进程可以看做service的透明代理和负载均衡器。其核心功能是将某个service的访问请求转发到后端的某个Pod上。对每一个TCP类型的service,kube-proxy都会在本地Node上建立一个socketserver来负责接收请求,然后均匀发送到后端某个Pod端口上。这个过程默认采用Round Robin负载均衡算法。此外,s..._kubectl proxy 后台运行
Octorber 21stTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1500 Accepted Submission(s): 977Problem DescriptionHDU's 50th birthday, on Octor...
override:方法重写 overload:方法重载overlode可以改变返回值类型,只看参数列表方法重写:子类中出现了和父类中方法声明一模一样的方法。与返回值类型有关,返回值类型时一致的(或者是子父类)的方法重载:本类中出现的方法名一样,参数列表不同的方法。与返回值类型无关。子类对象调用方法的时候:先找子类本身再找父类。...
目录目录1、概念1.1、前提2、评价指标(性能度量)2.1、分类评价指标2.1.1 值指标-Accuracy、Precision、Recall、F值2.1.2 相关曲线-P-R曲线、ROC曲线及AUC值2.2、回归评价指标1、概念性能度量(评价)指标,主分为两大类: 1)分类评价指标(classification...
在开启新线程之前,将servletRequestAttributes设置为子线程共享ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();//设置子线程共RequestContextHolder.setRequestAttributes(servletRequestAttributes,true);如果非we_no thread-bound
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档红帽认证第一课前言一、Linux系统安装二、安装步骤1.创建虚拟机2.安装RHEL 8.X操作系统总结前言一、Linux系统安装二、安装步骤1.创建虚拟机Step 1:安装VMwareWorkstation Pro 16Step 2 : 打开VMwareWorkstation Pro 16Step 3 :点击创建新的虚拟机 ,选择自定义配置。Step 4 :硬件兼容性保证移植虚拟机时,其余电脑可以使用该虚拟机。一般选._connect to red hat
要一张全屏的空白的图(纯白色的)以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!要一张全屏的空白的图(纯白色的)如果大小不行就告诉我你Q我给你发原图要一张全部空白的图我做了张。。:hiphotos.baidu./200612272152/pic/item/ffe52fd0cb498396a1ec9c42.jpg进去了别以..._一张全屏白色代码
在前一篇文章“Nginx upstream原理分析【1】新连接的处理过程”中我们介绍了一个连接从accept到ngx_http_core_run_phases过程处理所发生的事情,后面剩下的就是FCGI的相关处理了,留在这里进行介绍。0、写在前面的话ngx_http_core_run_phases函数会不断调用cmcf->phase_engine.handlers上面的checker,从而调_nginx upstream 原理
作者:公元1874 来源:网易娱乐 《大话西游》这部电影,国内八十年代后的同志基本就没有不知道的。影评之类的这十年来也有无数高手写过,正好籍着香港推出《大话西游》的修复版DVD,于是我就不谈电影,专门说些
整体系统架构 系统按照鞋厂运作流程开发﹐具有较强的行业特性﹐其贯穿了所有的业务流程﹐使各部门之间各种信息能准确、及时的传递和共享﹐系统优化了生产与物料计划,加强了对生产过程的控制与管理,生产成本得到了及时准确的核算,缩短了成品的交货周期,从而降低了营运成本,大大提高了企业的核心竞争力。 从营运方面来看﹐从市场测﹐样品开发﹐订单管理﹐投入生产﹐出货增值准备﹐物流管理﹐账款分