#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(" ||
C语言课程设计员工工资管理系统
最新推荐文章于 2022-06-13 08:00:00 发布