(2) 菜单实现以下功能(每一个功能是一个函数):①计算每个职工的扣税;基本工资+津贴的值:小于1500元,扣税为0;小于2000元,扣税为(基本工资+津贴-1500)5%;大于2000元的,扣税为(基本工资+津贴-1500)5%+(基本工资+津贴-2000)*10%
②计算职工的实发工资;
③显示各职工工资信息;
④新增一个职工工资信息;
⑤按工号/姓名(二级菜单)修改一个职工工资信息;(注:有该职工记录,修改职工基本工资和津贴,重新计算捐税和实发工资,并显示修改后的职工信息;否则显示“无此人,不能修改”)⑥按工号/姓名(二级菜单)查询职工工资信息,查询到该职工,显示职工信息,否则显示“查无此人”。
可以选择性的根据工号或者姓名进行修改。
逻辑查询的时候,用或条件。
按工号/姓名查询:
1、工号查询
2、姓名查询
运行结果及代码如下:
一级菜单
二级菜单:修改信息
二级菜单:查询
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXNMB 20
typedef struct _employee
{
int id; //工号
char name[20]; //姓名
float gz; //基本工资
float jintie; //津贴
}Employee;
//一级菜单
int firstMenu()
{
int op;
system("cls"); //清屏
printf("------------职工工资管理系统-------------\n");
printf("1.添加员工\n");
printf("2.计算所有员工的实发工资并显示所有职工的工资\n");
printf("3.修改职工信息\n"); //进入后有二级菜单
printf("4.查询\n");//进入后有二级菜单
printf("0.退出系统\n");
printf("请选择:");
while (1)
{
scanf("%d", &op);
if (op >= 0 && op <= 4)
break;
else
printf("请输入0~4之间的值:");
}
return op;
}
//二级菜单
int secondMenu()
{
int op;
system("cls");
printf("1.按员工工号\n");
printf("2.按员工姓名\n");
printf("3.返回上一级目录\n"); //进入后有二级菜单
printf("请选择:");
while (1)
{
scanf("%d", &op);
if (op >= 1 && op <= 3)
break;
else
printf("请输入1~3之间的值:");
}
return op;
}
//计算职工的扣税金额
float getKourui(Employee e)
{
float shuijin = 0;
float total = e.gz + e.jintie; //薪酬总金额
if (total < 1500)
shuijin = 0;
else if (total <= 2000)
shuijin = (total - 1500) * 0.05;
else
shuijin = (total - 1500) * 0.05 + (total - 2000) * 0.1;
return shuijin;
}
//题目要求功能2:计算员工的实发工资
float getShifagz(Employee e)
{
return (e.gz + e.jintie - getKourui(e));
}
//题目要求功能4:添加职工
void addEmp(Employee a[], int* nmb)
{
system("cls");
printf("请输入员工编号:");
scanf("%d", &a[*nmb].id);
printf("请输入员工姓名:");
scanf("%s", a[*nmb].name);
printf("请输入员工基本工资:");
scanf("%f", &a[*nmb].gz);
printf("请输入员工津贴:");
scanf("%f", &a[*nmb].jintie);
*nmb += 1;
printf("添加成功!\n");
}
//题目要求功能1:显示各员工的工资信息
void showAll(Employee a[], int nmb)
{
int i;
system("cls");
printf("各职工工资信息如下:\n");
printf("____________________________________________\n");
printf("工 号 姓 名 基本工资 津 贴 扣税金额 实发工资\n");
for (i = 0; i < nmb; i++)
{
printf("%-8d %-10s %-7.2f %-7.2f %-6.2f %-7.2f\n", a[i].id,a[i].name,a[i].gz,a[i].jintie,getKourui(a[i]),getShifagz(a[i]));
}
}
//修改职工信息
void modInfo(Employee a[], int nmb)
{
int op;
int id,index=-1,i;
char name[20];
while (1)
{
op = secondMenu();
switch (op)
{
case 1: //按工号修改
printf("请输入员工工号:");
scanf("%d", &id);
for (i = 0; i < nmb; i++)
{
if (a[i].id == id)
{
index = i;
break;
}
}
break;
case 2: //按姓名修改
printf("请输入姓名:");
scanf("%s", name);
for (i = 0; i < nmb; i++)
{
if (strcmp(a[i].name, name) == 0)
{
index = i;
break;
}
}
break;
case 3: //返回上一级
return;
}
if (index == -1)
printf("无此人,不能修改\n");
else
{
//修改信息
printf("请输入员工编号:");
scanf("%d", &a[index].id);
printf("请输入员工姓名:");
scanf("%s", a[index].name);
printf("请输入员工基本工资:");
scanf("%f", &a[index].gz);
printf("请输入员工津贴:");
scanf("%f", &a[index].jintie);
printf("修改成功\n");
}
system("pause");
}
}
//查询信息
void search(Employee a[], int nmb)
{
int op;
int id, index = -1, i;
char name[20];
while (1)
{
op = secondMenu();
switch (op)
{
case 1: //按工号修改
printf("请输入员工工号:");
scanf("%d", &id);
for (i = 0; i < nmb; i++)
{
if (a[i].id == id)
{
index = i;
break;
}
}
break;
case 2: //按姓名修改
printf("请输入姓名:");
scanf("%s", name);
for (i = 0; i < nmb; i++)
{
if (strcmp(a[i].name, name) == 0)
{
index = i;
break;
}
}
break;
case 3: //返回上一级
return;
}
//显示职工信息
if (index != -1)
{
printf("工 号 姓 名 基本工资 津 贴 扣税金额 实发工资\n");
printf("%-8d %-10s %-7.2f %-7.2f %-6.2f %-7.2f\n", a[index].id, a[index].name, a[index].gz, a[index].jintie, getKourui(a[index]), getShifagz(a[index]));
}
else
printf("查无此人\n");
system("pause");
}
}
int main()
{
int op;
Employee a[MAXNMB];
int nmb = 0; //实际员工数量
while (1)
{
op = firstMenu();
switch(op)
{
case 0: return 0;
case 1: addEmp(a, &nmb); break;
case 2: showAll(a, nmb); break;
case 3: modInfo(a, nmb); break;
case 4:search(a, nmb); break;
}
system("pause");
}
return 0;
}