独奏夜上弦^O^ 2020-12-27 19:30 采纳率: 33.3%
浏览 22

救救我吧,这个删除函数为啥修改不了数据,最好帮我看看怎么改,才刚学C不太懂

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<string.h>
#define maxsize 20
typedef struct
{
    char number[15];//职工号//
    char name[10];//姓名// 
    double basic;//基本工资//
    double post;//职务工资//
    double allow;//津贴//
    double insure1;//医保//
    double insure2;//养老保险// 
    double insure3;//失业保险//
    double pub;//公积金//
    double wages,shui,total;//应发工资,税,实发工资// 
}list;
typedef struct
{
    list stu[maxsize];//职工数// 
    int len;
}linklist;
//以上为定义结构体// 

double f(double x)
{    double m;
    if(x<=3500)
     return(0);
    else if(x<=5000)
    {m=(x-3500)*0.03;
     return(m);
    }
    else if(x<=8000)
    {m=(x-3500)*0.03+(x-5000)*0.1;
     return(m);
    }
    else if(x<=12500)
    {m=(x-3500)*0.03+(x-5000)*0.1+(x-8000)*0.2;
     return(m);
    }
    else if(x<=38500)
    {m=(x-3500)*0.03+(x-5000)*0.1+(x-8000)*0.2+(x-12500)*0.25;
     return(m);
    }
    else if(x<=58500)
    {m=(x-3500)*0.03+(x-5000)*0.1+(x-8000)*0.2+(x-12500)*0.25+(x-38500)*0.3;
     return(m); 
    }
    else if(x<=83500)
    {m=(x-3500)*0.03+(x-5000)*0.1+(x-8000)*0.2+(x-12500)*0.25+(x-38500)*0.3+(x-58500)*0.35;
     return(m);
    }
    else if(x>83500)
    {m=(x-3500)*0.03+(x-5000)*0.1+(x-8000)*0.2+(x-12500)*0.25+(x-38500)*0.3+(x-58500)*0.35+(x-83500)*0.45;
     return(m);
    }
}

void insert(linklist &q,int &n)//输入函数// 
{
    int i=0;
    int j;
    for(i=0;i<n;i++)
    {
        printf("请输入第%d个职工的数据 职工号 姓名 基本工资 职务工资 津贴 医疗保险 养老保险 失业保险 公积金 \n",i+1);
        scanf("%s",&q.stu[i].number);
         for(j=0;j<i;j++)
         {
             if(strcmp(q.stu[i].number,q.stu[j].number)==0)
             {printf("该职工号已输入过,请重新输入"); 
              scanf("%s",&q.stu[i].number);
            }
         }
        scanf("%s",&q.stu[i].name);
        scanf("%lf",&q.stu[i].basic);
        scanf("%lf",&q.stu[i].post);
        scanf("%lf",&q.stu[i].allow);
        scanf("%lf",&q.stu[i].insure1);
        scanf("%lf",&q.stu[i].insure2);
        scanf("%lf",&q.stu[i].insure3);
        scanf("%lf",&q.stu[i].pub);//数据输入//
        q.stu[i].wages=q.stu[i].basic+q.stu[i].post+q.stu[i].allow;
        q.stu[i].shui=f(q.stu[i].wages-q.stu[i].insure1-q.stu[i].insure2-q.stu[i].insure3-q.stu[i].pub);
        q.stu[i].total=q.stu[i].wages-q.stu[i].insure1-q.stu[i].insure2-q.stu[i].insure3-q.stu[i].pub-q.stu[i].shui;
    }
}

void shanchu(linklist &q)
{   
    char a[15];
    list b;
    int i,j,n;
again:
    printf("请输入您想删除的员工职工号\n");
    scanf("%s",&a);
    for(j=0;j<q.len;j++)
    {
        if(strcmp(a,q.stu[j].number)==0)
        {
            printf("请确认您要删除的是否为该员工\n");
            printf("职工号:%s 姓名:%s",q.stu[j].number,q.stu[j].name);
            printf("若是,请输入1,将为您删除,若不是,请输入2,将重新输入职工号\n");
            scanf("%d",&n);
            switch(n)
            {
                case 1:for(;j<q.len;j++)
                        {
                            q.stu[i]=q.stu[i+1];
                        }break;
                case 2:goto again;break;
            }
        }
    }
}


main()
{  
    linklist q;
    q.len=4;
    int i,j;
    insert(q,q.len);
    shanchu(q);
    q.len=q.len-1;
    for(i=0;i<q.len;i++)
    {
        printf("%s %s %.2lf %.2lf %.2lf %.2lf %.2lf %.2lf %.2lf %.2lf %.2lf %.2lf\n",q.stu[i].number,q.stu[i].name,q.stu[i].basic,q.stu[i].post,q.stu[i].allow,q.stu[i].insure1,q.stu[i].insure2,q.stu[i].insure3,q.stu[i].pub,q.stu[i].wages,q.stu[i].shui,q.stu[i].total);
    }
}

  • 写回答

5条回答 默认 最新

  • SFAfreshman 2020-12-27 19:49
    关注
     case 1:for(;j<q.len;j++)
                            {
                                q.stu[i]=q.stu[i+1];
                            }break;

    这里的循环用的是j,stu的下标用的是i

    粗看一下感觉这个地方不太对劲

    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料