菜单,二级菜单是啥意思?要怎么实现呢

(2) 菜单实现以下功能(每一个功能是一个函数):①计算每个职工的扣税;基本工资+津贴的值:小于1500元,扣税为0;小于2000元,扣税为(基本工资+津贴-1500)5%;大于2000元的,扣税为(基本工资+津贴-1500)5%+(基本工资+津贴-2000)*10%
②计算职工的实发工资;
③显示各职工工资信息;
④新增一个职工工资信息;
⑤按工号/姓名(二级菜单)修改一个职工工资信息;(注:有该职工记录,修改职工基本工资和津贴,重新计算捐税和实发工资,并显示修改后的职工信息;否则显示“无此人,不能修改”)⑥按工号/姓名(二级菜单)查询职工工资信息,查询到该职工,显示职工信息,否则显示“查无此人”。

可以选择性的根据工号或者姓名进行修改。
逻辑查询的时候,用或条件。

按工号/姓名查询:
1、工号查询
2、姓名查询

运行结果及代码如下:
一级菜单

img


添加员工信息

img


计算实发工资并显示所有员工信息

img

二级菜单:修改信息

img

二级菜单:查询

img

代码:

#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;
}