独奏夜上弦^O^ 2020-12-27 11:53 采纳率: 33.3%
浏览 17
已采纳

求大佬帮忙看一下为什么这个删除函数没有实现删除功能,新手还不太会

#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[j+1]=q.stu[j];}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);
    }
}

  • 写回答

1条回答 默认 最新

  • 追逐时代的脚步 2020-12-27 12:26
    关注

    void shanchu(linklist q) 你这个是值传递,函数对他修改没啥意义。

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

报告相同问题?

悬赏问题

  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch