Xmc明 2018-12-20 17:26 采纳率: 0%
浏览 413

C语言,新人求助,为什么我这个程序选择修改的时候不能一对一修改,一改就把以前的全修改没了!

图片说明图片说明!!

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct takeout
{
    int num;
    char name[20];
    char type;
    int  amount;
    char time[10];
    char addr[8];
}TAK;
TAK cus[20];
int i = 0, n = 0, d = 0, e = 0, f = 0;
int main()
{
    void count();
    void information();
    void scan();
    void revise();
    void lookup();
    int l;
    do
    {
        printf("****** 欢迎使用本系统 ******\n");
        printf("1--录入信息\n");
        printf("2--信息显示\n");
        printf("3--信息修改\n");
        printf("4--信息查询\n");
        printf("5--信息统计\n");
        printf("6--退出系统\n");
        printf("请根据你所选的内容输入对应的编号:");
        scanf("%d", &l);
        switch (l)
        {
        case 1:information(); ; break;
        case 2:scan(); break;
        case 3:revise(); break;
        case 4:lookup(); break;
        case 5:count(); break;
        case 6:printf("****** 谢谢使用本系统 ******\n"); break;
        default:printf("请输入合理的序号!\n");
        }
    } while (l != 6);
    system("pause");
    return 0;
}
void information()
{
    printf("请输入下单的顾客人数:");
    scanf("%d", &n);
    do
    {
        printf("*****顾客信息的添加*****\n");
        printf("订单编号:");
        scanf("\t%d", &cus[i].num);
        printf("顾客姓名:");
        scanf("\t%s", cus[i].name);
        printf("订餐种类(a,b,c):");
        scanf("\t%c", &cus[i].type);
        if (cus[i].type == 'a')
        {
            printf("订餐数量:");
            scanf("\t%d", &cus[i].amount);
            d+=cus[i].amount;
        }
        if (cus[i].type == 'b')
        {
            printf("订餐数量:");
            scanf("\t%d", &cus[i].amount);
            e+=cus[i].amount;
        }
        if (cus[i].type == 'c')
        {
            printf("订餐数量:");
            scanf("\t%d", &cus[i].amount);
            f+=cus[i].amount;
        }
            printf("送餐时间:");
            scanf("\t%s", cus[i].time);
            printf("送餐地址:");
            scanf("\t%s", cus[i].addr);
            i++;
    } while (i < n);
}
void scan()
{
    if (n == 0)
    printf("没有数据,请输入后在查看\n");
    for (i = 0; i < n; i++)
    {
        printf("\n订单编号\t顾客姓名\t订单种类\t订单数量\t送餐时间\t送餐地址\n");
        printf("\n%d\t\t%s\t\t%c\t\t%d\t\t%s\t\t%s\n", cus[i].num, cus[i].name, cus[i].type, cus[i].amount, cus[i].time, cus[i].addr);
    }
}
void revise()
{
    void alter();
    void del();
    void add();
    int k;
    do
    {
        printf("---请根据序号选择所需要的步骤---\n");
        printf("1---删除订单\n");
        printf("2---修改订单\n");
        printf("3---添加订单\n");
        printf("4---返回上一级\n");
        scanf("%d", &k);
        switch (k)
        {
        case 1:del(); break;
        case 2:alter(); break;
        case 3:add(); break;
        case 4:break;
        }
    } while (k != 4);
}
void del()
{
    int j;
    int nums;
    printf("请输入要删除的订单编号:");
    scanf("%d", &nums);
    for (i = 0; i < n; i++)
    {
        if (cus[i].num == nums)
        {
            for (j = i; j < n; j++)
                cus[j] = cus[j + 1];
            n--;
        }
        break;
    }
    printf("\n订单%d已成功删除\n", nums);
}
void lookup()
{
    int nums;
    printf("请选择想要查找的订单编号:");
    scanf("%d", &nums);
    if (nums = cus[i].num)
    {
        printf("\n订单编号\t顾客姓名\t订单种类\t订单数量\t送餐时间\t送餐地址\n");
        printf("\n%d\t\t%s\t\t%c\t\t%d\t\t%s\t\t%s\n", cus[i].num, cus[i].name, cus[i].type, cus[i].amount, cus[i].time, cus[i].addr);
    }
    else
    {
        printf("没有此订单编号,请输入其他编号\n");
    }
}
void add()
{
    printf("*** 请输入所需要添加的订单 ***\n");
    printf("订单编号:");
    scanf("\t%d", &cus[i].num);
    printf("顾客姓名:");
    scanf("\t%s", cus[i].name);
    printf("订单种类(a,b,c):");
    scanf("\t%c", &cus[i].type);
    if (cus[i].type == 'a')
    {
        printf("订餐数量:");
        scanf("\t%d", &cus[i].amount);
        d += cus[i].amount;
    }
    if (cus[i].type == 'b')
    {
        printf("订餐数量:");
        scanf("\t%d", &cus[i].amount);
        e += cus[i].amount;
    }
    if (cus[i].type == 'c')
    {
        printf("订餐数量:");
        scanf("\t%d", &cus[i].amount);
        f += cus[i].amount;
    }
    printf("送餐时间:");
    scanf("\t%s", cus[i].time);
    printf("送餐地址:");
    scanf("\t%s", cus[i].addr);
    cus[i] = cus[n+1];
}
void alter()
{
    int s, j = 0;
    int nums;
    printf("选择所需要修改的订单编号:");
    scanf("%d", &nums);
    if (cus[i].num == nums)
    {
        printf("****** 这个编号信息如下 ******\n");
        printf("\n订单编号\t顾客姓名\t订单种类\t订单数量\t送餐时间\t送餐地址\n");
        printf("\n%d\t\t%s\t\t%c\t\t%d\t\t%s\t\t%s\n", cus[i].num, cus[i].name, cus[i].type, cus[i].amount, cus[i].time, cus[i].addr);
        printf("*** 是否继续修改 ***\n");
        printf("1---继续修改\n");
        printf("2---退出修改\n");
        scanf("%d", &s);
        if (s == 1)
        {
            for (i = j; j< n; j++)
            {
                printf("订单编号:");
                scanf("\t%d", &cus[j].num);
                printf("顾客姓名:");
                scanf("\t%s", cus[j].name);
                printf("订单种类(a,b,c):");
                scanf("\t%c", &cus[j].type);
                if (cus[j].type == 'a')
                {
                    printf("订餐数量:");
                    scanf("\t%d", &cus[j].amount);
                    d += cus[j].amount;
                }
                if (cus[j].type == 'b')
                {
                    printf("订餐数量:");
                    scanf("\t%d", &cus[j].amount);
                    e += cus[j].amount;
                }
                if (cus[j].type == 'c')
                {
                    printf("订餐数量:");
                    scanf("\t%d", &cus[j].amount);
                    f += cus[j].amount;
                }
                printf("送餐时间:");
                scanf("\t%s", cus[j].time);
                printf("送餐地址:");
                scanf("\t%s", cus[j].addr);
                printf("*** 修改信息成功 ***\n");
                cus[j] = cus[i + 1];
                break;
            }
        }
    }
}
void count()
{
    int s;
    do
    {
        printf("****** 请选择所需要统计的数据 ******\n");
        printf("1---a餐的订单数量\n");
        printf("2---b餐的订单数量\n");
        printf("3---c餐的订单数量\n");
        printf("4---返回上一级\n");
        scanf("%d", &s);
        switch (s)
        {
        case 1:printf("a餐的订单数量为:%d\n", d); break;
        case 2:printf("b餐的订单数量为:%d\n", e); break;
        case 3:printf("c餐的订单数量为:%d\n", f); break;
        case 4:break;
        }
    } while (s != 4);
}


就是我修改信息后前面所输入的信息就不见了,只显示修改后一个信息。求大佬相助!

  • 写回答

2条回答 默认 最新

  • weixin_44192966 2018-12-20 09:53
    关注

    你的变量i,最开始定义是全局的,后面在alter()函数中又定义成局部的。需要改一下

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器