周其乐之父 2021-07-04 11:37 采纳率: 75%
浏览 31
已结题

帮我看看为什么删除和添加数据后文件数据没有更新呜呜呜

#include<setjmp.h>
#include
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
jmp_buf fanhuizhi; //定义一个跳跃用参数
struct yuangong //定义员工结构体
{
int gonghao; //工号
char name[10]; //名字
int gongzi; //基本工资
int butie; //补贴
int jiangjin; //奖金
int shuidian; //水电费
int fangzu; //房租
}xinxi[20];

void fanhuicaidan() //定义一个返回菜单的选择函数
{
int x;
printf("是否返回主菜单?是请按1,退出程序请按0并回车键确定:");
scanf("%d", &x);
switch (x)
{
case 1:longjmp(fanhuizhi, 0); break; //如果选1则跳跃回setjmp处
case 0:exit(0); break;
}
}

void search(yuangong xinxi[]) //(1)查找员工信息函数
{
int i,j=0,x;
int h;
begin1: //程序返回开始处
printf("请输入想要查询员工的工号:");
scanf("%d",&h);
for (i = 0; i < 10; i++) //判断是否有此工号
{
if (xinxi[i].gonghao==h) //如果找到文件中有此工号,输出信息
{
printf("\n\t\t\t┌────────────────────────────────────────────────────────────────────────────────────┐\n");
printf("\t\t\t│工号 姓名 基本工资 补贴 奖金 水电 房租 │\n");
printf("\t\t\t├────────────────────────────────────────────────────────────────────────────────────┤\n");
printf("\t\t\t│%-8d%-24s%-16d%-10d%-10d%-8d%-8d│\n",
xinxi[i].gonghao, xinxi[i].name, xinxi[i].gongzi, xinxi[i].butie, xinxi[i].jiangjin, xinxi[i].shuidian, xinxi[i].fangzu);
printf("\t\t\t└────────────────────────────────────────────────────────────────────────────────────┘\n");
j=1;
}
}

if(j==0)
{
    printf("此员工不存在\n");                                   
    goto begin1;                                                //若无此工号返回重新输入
}
fanhuicaidan();
}    

void add(yuangong xinxi[],int realmoney[]) //(2)添加员工信息函数
{ FILE *fp;
int x,i,j,k,m;
struct yuangong xinren; //定义新员工结构体
begin2: //程序返回开始处
printf("请以下次序输入新员工的信息\n");
printf("工号 姓名 基本工资 补贴 奖金 水电 房租\n");
scanf("%d%s%d%d%d%d%d",&xinren.gonghao, xinren.name, &xinren.gongzi,&xinren.butie,&xinren.jiangjin,&xinren.shuidian,&xinren.fangzu);

for (i = 0; i < 10; i++)                                        //判断输入的新员工工号是否已经存在
{
    if (xinren.gonghao == xinxi[i].gonghao)
    {
        printf("当前工号已存在,请检查后重新输入\n");
        goto begin2;                                            //如果工号已经存在,返回到开始处重新输入   
    }
}

if (xinren.gonghao < xinxi[0].gonghao)                          //小于第一个员工工号时插入到第一个位置
{
    for (i = 10; i > 0; i--)
    {
        xinxi[i] = xinxi[i - 1];
    }
    xinxi[0] = xinren;
}

if (xinren.gonghao > xinxi[9].gonghao)                          //大于最后一个员工工号时插入到最后位置
{
    xinxi[10] = xinren;
}

for (j = 0; j < 10; j++)                                        //找到新员工工号位于哪两个之间
                {
                    if (xinren.gonghao > xinxi[j].gonghao && xinren.gonghao < xinxi[j + 1].gonghao)
                    {
                        for (k = 10; k > j; k--)
                            xinxi[k] = xinxi[k - 1];
                        xinxi[j + 1] = xinren;
                    }
                }    



printf("\n\t\t\t┌────────────────────────────────────────────────────────────────────────────────────┐\n");                                 
printf("\t\t\t│工号     姓名                  基本工资        补贴       奖金     水电     房租    │\n");
printf("\t\t\t├────────────────────────────────────────────────────────────────────────────────────┤\n");
for (i = 0; i < 11; i++)
{
    printf("\t\t\t│%-8d%-24s%-16d%-10d%-10d%-8d%-8d│\n",xinxi[i].gonghao, xinxi[i].name, xinxi[i].gongzi, xinxi[i].butie, xinxi[i].jiangjin, xinxi[i].shuidian, xinxi[i].fangzu);
}
printf("\t\t\t└────────────────────────────────────────────────────────────────────────────────────┘\n");

}

void del(yuangong xinxi[]) //(3)删除员工信息函数
{
int x,i,j,k,m=0;
char name[20];
begin3: //程序返回开始处
printf("请输入要删除员工的名字:");
scanf("%s", name);
for (i = 0; i < 10; i++) //判断文件中有没有输入的名字并改变m的值
{
if (strcmp(name, xinxi[i].name) == 0)
m = 1;
}

if (m == 0)                                                              //通过m的值进行操作
{
    printf("未找到此员工,请核实后重新输入\n");
    goto begin3;                                                         //未找到员工,返回重新输入
}
else
{
    for(j=0;j<10;j++)
        if (strcmp(name, xinxi[j].name) == 0)
        {
            for (k = j; k < 9; k++)
                xinxi[k] = xinxi[k + 1];
        }
 }
printf("\n\t\t\t┌────────────────────────────────────────────────────────────────────────────────────┐\n");
printf("\t\t\t│工号     姓名                  基本工资        补贴       奖金     水电     房租    │\n");
printf("\t\t\t├────────────────────────────────────────────────────────────────────────────────────┤\n");
for (i = 0; i < 9; i++)
{
    printf("\t\t\t│%-8d%-24s%-16d%-10d%-10d%-8d%-8d│\n", xinxi[i].gonghao, xinxi[i].name, xinxi[i].gongzi, xinxi[i].butie, xinxi[i].jiangjin, xinxi[i].shuidian, xinxi[i].fangzu);
}
printf("\t\t\t└────────────────────────────────────────────────────────────────────────────────────┘\n");
}

void real(yuangong xinxi[],int realmoney[]) //(4)计算实发工资函数
{
int i,x;
printf("\n\t\t\t┌────────────────────────────────┐\n");
printf("\t\t\t│工号 姓名 实发工资 │\n");
printf("\t\t\t├────────────────────────────────┤\n");
for(i=0;i<10;i++)
printf("\t\t\t│%-9d%-12s%-11d│\n", xinxi[i].gonghao, xinxi[i].name,realmoney[i]);
printf("\t\t\t└────────────────────────────────┘\n");
printf("是否返回主菜单?是请按1,退出程序请按0并回车键确定:");
scanf("%d", &x);
switch (x)
{
case 1:longjmp(fanhuizhi, 0); break;
case 0:exit(0); break;
}
}

void rank(yuangong xinxi[], int realmoney[]) //(5)排序函数
{
int i,x, j, k, t;
struct yuangong change; //定义一个用于交换的结构体
for (i = 0; i < 9; i++) //通过冒泡法依据实发工资排序
{
for (j = 0; j < 9 - i; j++)
if (realmoney[j] > realmoney[j + 1])
{
change = xinxi[j];
xinxi[j] = xinxi[j + 1];
xinxi[j + 1] = change;
t = realmoney[j];
realmoney[j] = realmoney[j + 1];
realmoney[j + 1] = t;
}
}

    printf("\n\t\t\t┌────────────────────────────────────────────────────────────────────────────────────────────────────┐\n");
    printf("\t\t\t│工号     姓名        基本工资        补贴       奖金     水电     房租        实发工资  实发工资排名│\n");
    printf("\t\t\t├────────────────────────────────────────────────────────────────────────────────────────────────────┤\n");
    for (i = 0; i < 10; i++)
        printf("\t\t\t│%-8d%-14s%-16d%-10d%-10d%-8d%-14d%-14d%-6d│\n",
            xinxi[i].gonghao, xinxi[i].name, xinxi[i].gongzi, xinxi[i].butie, xinxi[i].jiangjin, xinxi[i].shuidian, xinxi[i].fangzu, realmoney[i], i + 1);
    printf("\t\t\t└────────────────────────────────────────────────────────────────────────────────────────────────────┘\n");
    fanhuicaidan();
    

}

void main()
{
int a,i,s=0;
int realmoney[10]; //定义一个计算实发工资的数组
FILE *fp;
system("color 30"); //更换背景为湖蓝色,字体为黑色
fp = fopen("课程设计员工信息.txt", "r");
printf("\t\t ╭ ═══════■□■□═══════ ╮\n"); //菜单界面
printf("\t\t │ 员工信息管理系统 │\n");
printf("\t\t ╰ ═══════■□■□═══════ ╯\n");
printf("\t\t ┌─────────────—──────────—-┐\n");
printf("\t\t │ 1. 查询信息 2. 添加员工 │\n");
printf("\t\t │ │\n");
printf("\t\t │ 3. 删除信息 4. 实发工资 │\n");
printf("\t\t │ │\n");
printf("\t\t │ 5. 工资排名 0. 退出程序 │\n");
printf("\t\t │ │\n");
printf("\t\t └─────────────—──────────—-┘\n");
if (setjmp(fanhuizhi)) //longjum跳到此处
{
fclose(fp);
goto begin;
}
{
for (i = 0; i < 10; i++)
fscanf(fp, "%d%s%d%d%d%d%d", &xinxi[i].gonghao, xinxi[i].name, &xinxi[i].gongzi, &xinxi[i].butie, &xinxi[i].jiangjin, &xinxi[i].shuidian, &xinxi[i].fangzu);
for (i = 0; i < 10; i++)
realmoney[i] = xinxi[i].gongzi + xinxi[i].jiangjin + xinxi[i].butie - xinxi[i].shuidian - xinxi[i].fangzu; //计算实发工资
begin:
printf("\t\t请您选择(0-5):"); //程序返回开始处
scanf("%d", &a); //序号选择
if (a >= 0 && a <= 5) //判断序号是否合法
{
switch (a)
{
case 0:exit(0); break;
case 1:search(xinxi);system("pause"); break;
case 2:add(xinxi,realmoney); fprintf(fp, "%d%s%d%d%d%d%d", &xinxi[i].gonghao, xinxi[i].name, &xinxi[i].gongzi, &xinxi[i].butie, &xinxi[i].jiangjin, &xinxi[i].shuidian, &xinxi[i].fangzu); system("pause"); break;
case 3:del(xinxi);fprintf(fp, "%d%s%d%d%d%d%d", &xinxi[i].gonghao, xinxi[i].name, &xinxi[i].gongzi, &xinxi[i].butie, &xinxi[i].jiangjin, &xinxi[i].shuidian, &xinxi[i].fangzu); system("pause"); break;
case 4:real(xinxi, realmoney); system("pause"); break;
case 5:rank(xinxi, realmoney); system("pause"); break;
}
}
else
{
printf("\t\t请输入正确的功能序号\n");
goto begin; //序号错误程序跳回输出序号处
}
}
system("pause");
}

  • 写回答

1条回答 默认 最新

  • 关注

    你的程序只是在数组里面删除了,并没有更新到文件里面。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月30日
  • 已采纳回答 12月22日

悬赏问题

  • ¥15 WPF 大屏看板表格背景图片设置
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示