鱼C论坛

 找回密码
 立即注册
查看: 156|回复: 0

职工工资系统的删改 怎么删除6、7两个模块

[复制链接]
发表于 2021-6-7 13:07:53 | 显示全部楼层 |阅读模式
1鱼币
本帖最后由 木令灵 于 2021-6-7 13:09 编辑

#include<stdio.h>        /*头文件,指定文件包含本程序*/
#include<string.h>       /*编译前处理内容,字符串调用*/
#include<stdlib.h>       /*文件包含定义标准库函数*/
#define NUM 999          /*定义标识符为宏,定义常量NUM的值为999*/
void enter();            /*定义参数类型,用于进入系统*/
void search_num();       /*记录员工工资的输入信息*/
void dele_num();         /*删除变量*/
void modi_num();         /*定义程序*/
void browse();           /*浏览信息*/
void count();            /*插入职工信息*/
void load();             //函数名
void add();              //增添员工信息
void menu();             //定义菜单
int n;                  /*定义员工的总数*/
struct emploee          //职工数据结构
{
    char no[5];         
    char name[8];
    char sex[3];
    int age;
    float wage1;      //员工的基本工资
    float wage2;      //员工的职务工资
    float funds;      //员工的住房公积金
    float WATERfee;   //员工的水电费
    float TAXfee;     //员工的个人所得税
    float wage3;      //员工的实发工资
}emp[NUM], newemp;
void main()
{
    menu();
}

void menu()//主界面
{
    int n, w1;

    do
    {
        system("cls");
        printf("************* 职工工资管理系统 **************\n");
        printf("*            1-----输入职工信息                     *\n");
        printf("*            2-----查询职工信息                     *\n");
        printf("*            3-----根据职工ID号修改              *\n");
        printf("*            4-----根据职工ID号删除              *\n");
        printf("*            5-----据工资统计并浏览              *\n");
        printf("*            6-----从文件载入信息                 *\n");
        printf("*            7-----浏览全部职工                    *\n");
        printf("*            8-----追加职工信息                    *\n");
        printf("*            9-----退出程序                           *\n");
        printf("***************************************************\n");
        printf("       输入您的选择(1-9):[ ]\b\b");
        scanf("%d", &n);
        if (n < 1 || n>9)                                    //对选择的数字作判断
        {
            w1 = 1;
            printf("your choice is not between 1 and 9,Please input again:");
            getchar();
        }
        else    w1 = 0;
    } while (w1 == 1);
    switch (n)
    {
    case 1:enter();    break;
    case 2:search_num();   break;
    case 3:modi_num();   break;
    case 4:dele_num();   break;
    case 5:count();    break;
    case 6:load();    break;      //保存模块
    case 7:browse();    break;      //加载模块
    case 8:add();    break;
    case 9:printf("\n×××××××谢谢,欢迎下次光临!×××××××\n\n");
    default:exit(0);  //退出系统,exit(0)函数功能是退出程序。
    }
}
/*************************输入模块**********************/
void enter()
{
    FILE* fp;
    int n, i;
    if ((fp = fopen("emp.txt", "wb")) == NULL)
    {

        printf("不能建立emp文件\n");
        exit(1);
    }
    printf("输入职工人数:");
    scanf("%d", &n);
    printf("输入格式:职工号 姓名 性别 年龄 基本工资 职务工资  公积金 水电费  税<Enter>\n");
    for (i = 0; i < n; i++)   /*  循环获取n个职工记录 */
    {
        printf("第%d个职工:", i + 1);
        scanf("%s%s%s%d%f%f%f%f%f", emp.no, emp.name, emp.sex, &emp.age,&emp.wage1, &emp.wage2, &emp.funds, &emp.WATERfee, &emp.TAXfee);
        emp.wage3 = emp.wage1 + emp.wage2 + emp.funds - emp.WATERfee - emp.TAXfee;
    }
    for (i = 0; i < n; i++)      /*将n个职工记录写入文件*/
        fwrite(&emp, sizeof(struct emploee), 1, fp);
    fclose(fp);
}
/*************************统计模块**********************/
void count()
{
    FILE* fp;
    int n, num;
    if ((fp = fopen("emp.txt", "rb")) == NULL)
    {
        printf("不能打开emp文件\n");
        exit(1);
    }
    printf("请输入工资数:");
    scanf("%d", &num);
    printf("记录号 职工号 姓名 性别 年龄 基本工资 职务工资 公积金 水电费  税  实发工资\n");
    for (n = 0; fread(&emp[n], sizeof(struct emploee), 1, fp) != 0; n++)
        if (emp[n].wage3 >= num)
            printf("%6d%6s%9s%4s%5d   %.1f   %.1f  %.1f   %.1f   %.1f   %.1f\n", n + 1, emp[n].no, emp[n].name, emp[n].sex, emp[n].age, emp[n].wage1,
                emp[n].wage2, emp[n].funds, emp[n].WATERfee, emp[n].TAXfee, emp[n].wage3);
    fclose(fp);
}
/********************删除模块*******************/

void dele_num()
{
    FILE* fp;
    int i, j, n;
    char num[5];
    if ((fp = fopen("emp.txt", "rb")) == NULL)
    {
        printf("不能打开emp文件\n");
        exit(1);
    }
    printf("删除前:\n");
    printf("记录号 职工号 姓名 性别 年龄   基本工资 职务工资 公积金  水电费   税  实发工资\n");
    for (n = 0; fread(&emp[n], sizeof(struct emploee), 1, fp); n++)
        printf("%6d%6s%9s%4s%5d   %.1f   %.1f   %.1f   %.1f   %.1f   %.1f\n", n + 1, emp[n].no, emp[n].name, emp[n].sex, emp[n].age, emp[n].wage1,
            emp[n].wage2, emp[n].funds, emp[n].WATERfee, emp[n].TAXfee, emp[n].wage3);/*n为emp文件中记录数*/
    printf("要删除的职工号:");
    scanf("%s", num);
    for (i = 0; (strcmp(emp.no, num) != 0 && i < n); i++)
        if (i >= n)
        {
            printf("\t没有%s职工号的职工\n", num);
            exit(2);
        }
    fclose(fp);
    fp = fopen("emp.dat", "w+");
    if (n == 1)  /*一个记录已经删除了*/
    {
        fclose(fp);
        exit(3);
    }
    for (j = 0; j < i; j++)
        fwrite(&emp[j], sizeof(struct emploee), 1, fp);
    for (j = i + 1; j < n; j++)
        fwrite(&emp[j], sizeof(struct emploee), 1, fp);
    printf("删除后:\n");
    fseek(fp, 0, SEEK_SET);
    printf("记录号 职工号 姓名 性别 年龄   基本工资 职务工资 公积金 水电费   税  实发工资\n");
    for (i = 0; fread(&emp, sizeof(struct emploee), 1, fp); i++)
        printf("%6d%6s%9s%4s%5d%   %.1f    %.1f   %.1f   %.1f   %.1f   %.1f\n", i + 1, emp.no, emp.name, emp.sex, emp.age, emp.wage1,
            emp.wage2, emp.funds, emp.WATERfee, emp.TAXfee, emp.wage3);
    fclose(fp);
}
/********************修改模块*******************/
void modi_num()
{
    FILE* fp;
    int i, j;
    char num[5];
    if ((fp = fopen("emp.txt", "rb+")) == NULL)
    {
        printf("不能 打开emp文件\n");
        exit(1);
    }
    printf("要修改的职工号:");
    scanf("%s", num);
    for (i = 0; fread(&emp, sizeof(struct emploee), 1, fp); i++)
        if (!strcmp(emp.no, num))break;
    if (feof(fp))
    {
        printf("\t没有%s职工号的职工\n", num);
        exit(2);
    }
    printf("记录号 职工号   姓名 性别 年龄 基本工资 职务工资  公积金  水电费   税  实发工资\n");
    printf("%6d%6s%9s%4s%5d%   %.1f   %.1f   %.1f   %.1f   %.1f   %.1f\n", i + 1, emp.no, emp.name, emp.sex, emp.age, emp.wage1,
        emp.wage2, emp.funds, emp.WATERfee, emp.TAXfee, emp.wage3);
    printf("输入格式:职工号   姓名 性别 年龄 基本工资 职务工资 公积金  水电费 税 <Enter>\n");
    printf("第%d个记录:", i + 1);
    scanf("%s%s%s%d%f%f%f%f%f", newemp.no, newemp.name, newemp.sex, &newemp.age,
        &newemp.wage1, &newemp.wage2, &newemp.funds, &newemp.WATERfee, &newemp.TAXfee);//获取新的职工记录
    newemp.wage3 = newemp.wage1 + newemp.wage2 + newemp.funds - newemp.WATERfee - newemp.TAXfee;
    fseek(fp, -(long)sizeof(struct emploee), SEEK_CUR);  //文件指针指向该修改的记录开头
    fwrite(&newemp, sizeof(struct emploee), 1, fp);  //用newemp覆盖当前记录
    printf(" 修改后:\n");
    fseek(fp, 0, SEEK_SET);        //显示修改后的文件数据
    printf("记录号 职工号   姓名 性别 年龄   基本工资 职务工资   公积金  水电费   税   实发工资\n");
    for (i = 0; fread(&emp, sizeof(struct emploee), 1, fp) != 0; i++)
        printf("%6d%6s%9s%4s%5d   %.1f   %.1f  %.1f   %.1f  %.1f   %.1f\n", i + 1, emp.no, emp.name, emp.sex, emp.age, emp.wage1,
            emp.wage2, emp.funds, emp.WATERfee, emp.TAXfee, emp.wage3);
    fclose(fp);
}
/*************************查询模块***********************/
void search_num()
{
    FILE* fp;
    int i;
    char num[5];
    if ((fp = fopen("emp.txt", "rb")) == NULL)
    {
        printf("不能打开emp文件\n");
        exit(1);
    }
    printf("要查询的职工号:");
    scanf("%s", num);
    for (i = 0; fread(&emp, sizeof(struct emploee), 1, fp); i++)
        if (!strcmp(emp.no, num)) break;
    if (feof(fp))
    {
        printf("\t查无此人\n");
        exit(2);
    }
    printf("记录号 职工号   姓名 性别 年龄   基本工资 职务工资   公积金  水电费    税   实发工资\n");
    printf("%6d%6s%9s%4s%5d  %.1f  %.1f  %.1f  %.1f   %.1f   %.1f\n", i + 1, emp.no, emp.name, emp.sex, emp.age, emp.wage1,
        emp.wage2, emp.funds, emp.WATERfee, emp.TAXfee, emp.wage3);
    fclose(fp);
}
/*******************浏览模块********************/
void browse()
{
    int i;
    FILE* fp;
    if ((fp = fopen("emp.txt", "r")) == NULL)
    {
        printf("不能打开emp文件\n");
        exit(0);
    }
    printf("记录号 职工号   姓名 性别 年龄   基本工资 职务工资   公积金  水电费   税   实发工资\n");
    for (i = 0; fread(&emp, sizeof(struct emploee), 1, fp) != 0; i++)
    {
        printf("%6d%6s%9s%4s%5d  %.1f  %.1f     %.1f    %.1f    %.1f   %.1f\n", i + 1, emp.no, emp.name, emp.sex, emp.age, emp.wage1,
            emp.wage2, emp.funds, emp.WATERfee, emp.TAXfee, emp.wage3);
    }
    fclose(fp);
}
/******************追加模块*******************/
void add()
{
    FILE* fp;
    int n, i, j;
    if ((fp = fopen("emp.txt", "ab+")) == NULL)
    {
        printf("不能打开emp文件\n");
        exit(0);
    }
    printf("要追加的职工人数:");
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        printf("输入格式:职工号   姓名 性别 年龄   基本工资 职务工资  公积金  水电费  税   <Enter>\n");
        printf("追加记录:\n");
        scanf("%s%s%s%d%f%f%f%f%f", newemp.no, newemp.name, newemp.sex, &newemp.age,
            &newemp.wage1, &newemp.wage2, &newemp.funds, &newemp.WATERfee, &newemp.TAXfee);
        newemp.wage3 = newemp.wage1 + newemp.wage2 + newemp.funds - newemp.WATERfee - newemp.TAXfee;//获取一个新的职工记录
        fwrite(&newemp, sizeof(struct emploee), 1, fp);   //将该职工记录写入文件
    }
    fclose(fp);
}

/*************************载入模块**********************/
void load()          //加载记录或可以计算记录个数的函数
{
    FILE* fp;
    int i, w;
    w = 1;
    system("cls");
    if ((fp = fopen("emp.txt", "rb")) == NULL)      //以输出打开方式,在此前的记录被覆盖
    {
        printf("\nCannot open file\n");
        w = 0;
        return;
    }
    n = 0;
    for (i = 0; !feof(fp); i++)
    {
        fread(&emp, sizeof(struct emploee), 1, fp);
        n++;
    }
    n = n - 1;
    fclose(fp);
    if (w == 1)
    {
        printf("Load file ok!");
        getchar();
        getchar();
        menu();
    }
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1

GMT+8, 2021-6-24 20:46

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表