如何用ns流程图表示以下程序每个模块的流程


 
#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
typedef struct _employee
{
    char name[20];   //员工姓名
    char phone[12];  //员工电话
    char addr[20];   //住址
    char cardId[20]; //身份证号
    char department[20]; //部门
    char id[10];     //工号
    int workDay;     //工作天数
    char jiguan[20]; //籍贯
    float workAge;     //工龄
    char isMarrid;    //婚姻
    int age; //年龄
    char sex;  //性别
    int child;  //是否生育,0表示未生育,>0表示孩子个数
    char grade[20]; //学历
    int isIn; //公司文化活动是否签到
    float base; //基础工资
    float money; //薪资
    float sale; //销售金额
    double total; //总计
}Employee;
 
const char* g_title[] = { "员工姓名","员工电话","住址","身份证号","部门","工号","工作天数","籍贯","工龄","婚姻状况","年龄","性别","生育状况","学历","公司文化活动签到" };
 
//显示单个员工信息
void showSingle(Employee emp)
{
    printf("员工姓名:%s\n", emp.name);
    printf("员工电话:%s\n", emp.phone);
    printf("住址:%s\n", emp.addr);
    printf("身份证号:%s\n", emp.cardId);
    printf("部门:%s\n", emp.department);
    printf("工号:%s\n", emp.id);
    printf("工作天数:%d\n", emp.workDay);
    printf("工龄:%.1f\n", emp.workAge);
    printf("婚姻状况:");
    if (emp.isMarrid == 'y' || emp.isMarrid == 'Y')
        printf("已婚\n");
    else
        printf("未婚\n");
    printf("年龄:%d\n", emp.age);
    printf("性别:");
    if (emp.sex == 'F' || emp.sex == 'f')
        printf("女\n");
    else
        printf("男\n");
    printf("生育状况:");
    if (emp.child <= 0)
        printf("无\n");
    else
        printf("%d个子女\n", emp.child);
    printf("学历:%s\n", emp.grade);
    printf("公司文化活动签到:");
    if (emp.isIn == 1)
        printf("是\n");
    else if (emp.isIn == 0)
        printf("否,但已请假\n");
    else
        printf("否,未请假\n");
 
}
//显示所有员工信息
void showAll(char* name, Employee emp[], int n)
{
    int i = 0, j = 0;
    printf("单位名称:%s \t  总人数:%d\n", name, n);
    printf("------------------------------------------\n");
    for (i = 0; i < n; i++)
    {
        showSingle(emp[i]);
}
    
}
 
//查找
void search(Employee emp[], int n)
{
    int op;
    int i = 0;
    char buf[20] = { 0 };
    printf("1.根据工号查询\n");
    printf("2.根据姓名查询\n");
    printf("3.根据电话查询\n");
    printf("4.返回上一层\n");
    while (1)
    {
        scanf("%d", &op);
        if (op >= 1 && op <= 4)
            break;
    }
    switch (op)
    {
    case 1: printf("请输入工号:"); scanf("%s", buf); break;
    case 2: printf("请输入姓名:"); scanf("%s", buf); break;
    case 3: printf("请输入电话:"); scanf("%s", buf); break;
    case 4: return;
    }
    for (i = 0; i < n; i++)
    {
        if (op == 1 && strcmp(emp[i].id, buf) == 0)
        {
            showSingle(emp[i]);
            break;
        }
        else if (op == 2 && strcmp(emp[i].name, buf) == 0)
        {
            showSingle(emp[i]);
            break;
        }
        else if (op == 3 && strcmp(emp[i].phone, buf) == 0)
        {
            showSingle(emp[i]);
            break;
        }
    }
    if (i == n)
        printf("未找到符合条件的员工!!\n");
}
 
//筛选
void select(Employee emp[], int n)
{
    int i, op;
    char buf[20] = { 0 }, tmp;
    int flag = 0;
    int age;
    printf("1.通过部门筛选\n");
    printf("2.通过性别筛选\n");
    printf("3.通过年龄筛选\n");
    printf("4.通过婚姻状况筛选\n");
    printf("5.通过请假考勤\n");
    printf("6.通过学历筛选\n");
    printf("7.通过籍贯筛选\n");
    printf("8.返回上一层\n");
    while (1)
    {
        scanf("%d", &op);
        if (op >= 1 && op <= 8) 
            break;
    }
    switch (op)
    {
    case 1:
        printf("请输入部门:");
        scanf("%s", buf); 
        for (i = 0; i < n; i++)
        {
            if (strcmp(buf, emp[i].department) == 0)
            {
                flag = 1;
                showSingle(emp[i]);
            }
        }
        if (flag == 0)
            printf("未找到符合条件的员工!!\n");
        break;
    case 2:
        printf("请输入性别:");
        fflush(stdin);
        buf[0] = getchar();
        buf[0] = toupper(buf[0]);
        for (i = 0; i < n; i++)
        {
            tmp = toupper(emp[i].sex);
            if (buf[0] == tmp)
            {
                showSingle(emp[i]);
                flag = 1;
            }
        }
        if (flag == 0)
            printf("未找到符合条件的员工!!\n");
        break;
    case 3:
        printf("请输入年龄:");
        scanf("%d", &age);
        for (i = 0; i < n; i++)
        {
            if (emp[i].age == age)
            {
                showSingle(emp[i]);
                flag = 1;
            }
        }
        if (flag == 0)
            printf("未找到符合条件的员工!!\n");
        break;
    case 4:
        printf("请输入婚姻状况(Y:已婚   N:未婚 ):  ");
        rewind(stdin);
        buf[0] = getchar();
        buf[0] = toupper(buf[0]);
        for (i = 0; i < n; i++)
        {
            tmp = toupper(emp[i].isMarrid);
            if (buf[0] == tmp)
            {
                printf("------------------------------------------\n");
                showSingle(emp[i]);
                flag = 1;
            }
        }
        if (flag == 0)
            printf("未找到符合条件的员工!!\n");
        break;
    case 5:
        printf("请输入筛选条件(1.请假  2.未请假\n): ");
        scanf("%d", &age);
        for (i = 0; i < n; i++)
        {
            if (emp[i].workDay < 2)
            {
                printf("------------------------------------------\n");
                showSingle(emp[i]);
                flag = 1;
            }
        }
        if (flag == 0)
            printf("未找到符合条件的员工!!\n");
        break;
    case 6:
        printf("请输入学历:");
        scanf("%s", buf);
        for (i = 0; i < n; i++)
        {
            if (strcmp(buf, emp[i].grade) == 0)
            {
                showSingle(emp[i]);
                flag = 1;
            }
        }
        if (flag == 0)
            printf("未找到符合条件的员工!!\n");
        break;
    case 7:
        printf("请输入籍贯:");
        scanf("%s", buf);
        for (i = 0; i < n; i++)
        {
            if (strcmp(buf, emp[i].jiguan) == 0)
            {
                showSingle(emp[i]);
                flag = 1;
            }
        }
        if (flag == 0)
            printf("未找到符合条件的员工!!\n");
        break;
    case 8:
        return;
    }
}
//插入新员工
int insert(Employee emp[], int n)
{
    printf("更新该员工信息:\n");
    printf("请输入员工姓名:"); scanf("%s", emp[n].name);
    printf("请输入员工电话:"); scanf("%s", emp[n].phone);
    printf("请输入住址:"); scanf("%s", emp[n].addr);
    printf("请输入身份证号:"); scanf("%s", emp[n].cardId);
    printf("请输入部门:"); scanf("%s", emp[n].department);
    printf("请输入工号:"); scanf("%s", emp[n].id); 
    printf("请输入工作天数:"); scanf("%d", &emp[n].workDay);
    printf("请输入籍贯:"); scanf("%s", emp[n].jiguan);
    printf("请输入工龄:"); scanf("%f", &emp[n].workAge);
    printf("请输入婚姻状况(Y:已婚  N:未婚):"); rewind(stdin); emp[n].isMarrid = getchar();
    printf("请输入年龄:"); scanf("%d", &emp[n].age);
    printf("请输入性别(F:女  M:男):"); rewind(stdin); emp[n].sex = getchar();
    printf("请输入生育情况:"); scanf("%d", &emp[n].child);
    printf("请输入学历:"); scanf("%s", emp[n].grade);
    printf("公司文化活动签到(1.签到  0.未参加但请假  -1.未参加未请假):"); scanf("%d", &emp[n].isIn);
    printf("请输入员工基础薪资:"); scanf("%f", &emp[n].base);
    printf("请输入销售金额:"); scanf("%f", &emp[n].sale);
    printf("新员工信息已插入!\n");
    return (n + 1);
}
 
//删除旧员工信息
int dele(Employee emp[], int n)
{
    char buf[20] = { 0 };
    int i, flag = 0, j;
    printf("请输入要删除的员工工号:");
    scanf("%s", buf);
    for (i = 0; i < n; i++)
    {
        if (strcmp(buf, emp[i].id) == 0)
        {
            flag = 1;
            for (j = i; j < n - 1; j++)
                emp[j] = emp[j + 1];
            printf("该员工信息已删除!!\n");
            return (n - 1);
        }
    }
    if (flag == 0)
        printf("未找到符合条件的员工!!\n");
    return n;
}
 
//薪资
void caculate(Employee emp[], int n)
{
    int i = 0;
    for (i = 0; i < n; i++)
    {
        emp[i].total = emp[i].base / 22 * emp[i].workDay;
        if (strcmp(emp[i].grade, "专科") == 0)
            emp[i].total += 800;
        else if (strcmp(emp[i].grade, "本科") == 0)
            emp[i].total += 1000;
        else if (strcmp(emp[i].grade, "研究生") == 0)
            emp[i].total += 1200;
        //生育奖
        if (emp[i].child == 1)
            emp[i].total += 500;
        else if (emp[i].child == 2)
            emp[i].total += 750;
        else if (emp[i].child == 3)
            emp[i].total += 1000;
        //工龄奖
        emp[i].total += emp[i].workAge * 50;
 
        //提成
        if (emp[i].sale < 1000000)
            emp[i].total += emp[i].sale * 0.02;
        else if (emp[i].sale < 1000000)
            emp[i].total += emp[i].sale * 0.05;
        else
            emp[i].total += emp[i].sale * 0.08;
 
        //公司互动
        if (emp[i].isIn == 1)
            emp[i].total += 150;
        else if (emp[i].isIn == 0)
            emp[i].total += 100;
        
        printf("工号:%s  姓名:%s  薪资:%.2f\n", emp[i].id, emp[i].name, emp[i].total);
 
    }
 
}
 
//计算每月应缴金额
void jiaona(Employee emp[], int n)
{
    int i;
    float f1, f2;
    for (i = 0; i < n; i++)
    {
        printf("工号:%s  姓名:%s  薪资:%.2f  ", emp[i].id, emp[i].name, emp[i].total);
        f1 = emp[i].total * 0.02 + 7;
        f2 = emp[i].total * 0.05;
        printf("医保缴纳:%.2f  公积金缴纳:%.2f   实发工资:%.2f\n", f1, f2, (emp[i].total - f1 - f2));
    }
}
 
//显示销售前3名
void showBef(Employee emp[], int n)
{
    int i, j;
    Employee t;
    //根据销售额排名 
    for (i = 0; i < n - 1; i++)
    {
        for (j = 0; j < n - 1 - i; j++)
        {
            if (emp[j].sale < emp[j + 1].sale)
            {
                t = emp[j];
                emp[j] = emp[j + 1];
                emp[j + 1] = t;
            }
        }
    }
    //显示前三名
    for (i = 0; i < 3; i++)
    {
        printf("工号:%s  姓名:%s  销售额:%.2f\n", emp[i].id, emp[i].name, emp[i].sale);
    }
}
 
//写文件
void write2File(const char* filename, Employee emp[], int n)
{
    FILE* fp = fopen(filename, "w");  //打开文件,以二进制写模式打开,w表示写模式,b表示二进制模式
    int i = 0;
    for (; i < n; i++)
    {
        fprintf(fp, "%s %s %s %s ", emp[i].name, emp[i].phone, emp[i].addr, emp[i].cardId);
        fprintf(fp, "%s %s %d %s ", emp[i].department, emp[i].id, emp[i].workDay, emp[i].jiguan);
        fprintf(fp, "%f %c %d %c ", emp[i].workAge, emp[i].isMarrid, emp[i].age, emp[i].sex);
        fprintf(fp, "%d %s %d %f ", emp[i].child, emp[i].grade, emp[i].isIn, emp[i].base);
        fprintf(fp, "%f %f %f\n", emp[i].money, emp[i].sale, emp[i].total);
    }
    fclose(fp);
}
 
//读文件
int readFile(const char* filename, Employee emp[], int n)
{
    FILE* fp = fopen(filename, "r");
    if (fp == 0)
    {
        printf("文件打开失败\n");
        return n;
    }
    while (!feof(fp))  //判断文件是否读到末尾
    {
        emp[n].name[0] = '\0';
        fscanf(fp, "%s %s %s %s ", emp[n].name, emp[n].phone, emp[n].addr, emp[n].cardId);
        fscanf(fp, "%s %s %d %s ", emp[n].department, emp[n].id, &emp[n].workDay, emp[n].jiguan);
        fscanf(fp, "%f %c %d %c ", &emp[n].workAge, &emp[n].isMarrid, &emp[n].age, &emp[n].sex);
        fscanf(fp, "%d %s %d %f ", &emp[n].child, emp[n].grade, &emp[n].isIn, &emp[n].base);
        fscanf(fp, "%f %f %f\n", &emp[n].money, &emp[n].sale, &emp[n].total);
        if (emp[n].name[0]!='\0') //逐个读取员工信息,if用来判断是否读取成功
            n++;
    }
    fclose(fp);
    return n;
}
 
 
int main()
{
    int op;
    Employee emp[100];
    int n = 0;
    char name[20];
    const char* filename = "record.txt";
    //读文件1
    n = readFile(filename, emp, n);
    while (1)
    {
        system("cls");
        strcpy(name,"传媒有限公司");
        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("9.写入文件\n");
        printf("0.退出系统\n");
        scanf("%d", &op);
        switch (op)
        {
        case 1:
            n = insert(emp, n); break;
        case 2:
            n = dele(emp, n); break;
        case 3:
            search(emp, n); break;
        case 4:
            select(emp, n); break;
        case 5:
            showAll(name, emp, n); break;
        case 6:
            caculate(emp, n); break;
        case 7:
            jiaona(emp, n); break;
        case 8:
            showBef(emp, n); break;
        case 9:
            write2File(filename, emp, n); break;
        case 0:
            return 0;
        default:
            break;
        }
        system("pause");
    }
}

(1)插入功能:插入功能全是顺序执行,比较简单

img

(2)删除功能:

img

(3)查找功能:

img

(4)筛选功能:

img


(5)显示所有

img

(6)计算薪资

img

(7)计算缴纳

img

(8)前三名

img

(9)写文件

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632