性格如此ゆ 2021-12-01 11:00 采纳率: 0%
浏览 211
已结题

用c语言写物流信息管理系统的一个问题

问题遇到的现象和发生背景

主函数中建立一个主菜单,在主菜单中建立了两个子表,一个是普通用户入口,另一个是管理员入口,管理员入口中建立顺序表后,使用管理员界面的功能能都好使,但是退回到主菜单时,进入普通用户的子表中,函数不好使

问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
#define MaxSize 20
typedef struct
{
    int couriernum;//快递单号
    char state[MaxSize];//快递状态
    char addressorname[MaxSize];//发件人名字
    char addressoradd[MaxSize];//发件人地址
    int addressorpnum;//发件人电话
    int addressorpcode;//发件人邮政编码
    char addresseename[MaxSize];//收件人名字
    char addresseeadd[MaxSize];//收件人地址
    int addresseepnum;//收件人电话
    int addresseepcode;//收件人邮政编码
}inquire;//物流信息
typedef struct LNode
{
    inquire data[MaxSize];
    int length;
}SqList;
void KDDHCX(SqList *L)
{
    int i,j;
    printf("请输入您要查询的快递单号\n");
    scanf("%d",&i);
    for(j=1;j<=L->length;j++)
    {
        if(i==L->data[j-1].couriernum)
        {
            printf("快递单号为%d\n",L->data[j-1].couriernum);
            printf("快递状态为%s\n",L->data[j-1].state);
            printf("发件人名称为%s\n",L->data[j-1].addressorname);
            printf("发件人地址为%s\n",L->data[j-1].addressoradd);
            printf("发件人联系电话为%d\n",L->data[j-1].addressorpnum);
            printf("发件人邮政编码为%d\n",L->data[j-1].addressorpcode);
            printf("收件人姓名为%s\n",L->data[j-1].addresseename);
            printf("收件人地址为%s\n",L->data[j-1].addresseeadd);
            printf("收件人联系电话为%d\n",L->data[j-1].addresseepnum);
            printf("收件人邮政编码为%d\n",L->data[j-1].addresseepcode);
        }
    }
}
void DHCX(SqList *L)//感觉没必要搞这么麻烦
{
    int i,j,a,b;
    printf("您要查询的电话号码是谁的\n");
    printf("收件人请输入1\n");
    printf("发件人请输入2\n");
    scanf("%d",&i);
    if(i==1)
    {
        printf("请输入收件人的电话号码\n");
        scanf("%d",&a);
        for(j=1;j<=L->length;j++)
        {
            if(a==L->data[j-1].addresseepnum)
            {
                printf("快递单号为%d\n",L->data[j-1].couriernum);
                printf("快递状态为%s\n",L->data[j-1].state);
                printf("发件人名称为%s\n",L->data[j-1].addressorname);
                printf("发件人地址为%s\n",L->data[j-1].addressoradd);
                printf("发件人联系电话为%d\n",L->data[j-1].addressorpnum);
                printf("发件人邮政编码为%d\n",L->data[j-1].addressorpcode);
                printf("收件人姓名为%s\n",L->data[j-1].addresseename);
                printf("收件人地址为%s\n",L->data[j-1].addresseeadd);
                printf("收件人联系电话为%d\n",L->data[j-1].addresseepnum);
                printf("收件人邮政编码为%d\n",L->data[j-1].addresseepcode);
            }
        }
    }
    if(i==2)
    {
        printf("请输入发件人的电话号码\n");
        scanf("%d",&b);
        for(j=1;j<=L->length;j++)
        {
            if(a==L->data[j-1].addresseepnum)
            {
                printf("快递单号为%d\n",L->data[j-1].couriernum);
                printf("快递状态为%s\n",L->data[j-1].state);
                printf("发件人名称为%s\n",L->data[j-1].addressorname);
                printf("发件人地址为%s\n",L->data[j-1].addressoradd);
                printf("发件人联系电话为%d\n",L->data[j-1].addressorpnum);
                printf("发件人邮政编码为%d\n",L->data[j-1].addressorpcode);
                printf("收件人姓名为%s\n",L->data[j-1].addresseename);
                printf("收件人地址为%s\n",L->data[j-1].addresseeadd);
                printf("收件人联系电话为%d\n",L->data[j-1].addresseepnum);
                printf("收件人邮政编码为%d\n",L->data[j-1].addresseepcode);
            }
        }
    }
}
void menu1(SqList *L)
{
    int a;
    do{
        printf("________________________\n");
        printf("______普通用户界面______\n");
        printf("_____1.快递单号查找_____\n");
        printf("_____2.按照电话查找_____\n");//原题未有
        printf("______0.返回主菜单______\n");
        printf("________________________\n");
        printf("请输入您要进行的选项\n");
        scanf("%d",&a);
        switch(a)
        {
            case 1:
                KDDHCX(L);
                break;
            case 2:
                DHCX(L);
                break;
            case 0:
                return;
            default:
            {
                printf("输入有误,请重新输入\n");
                break;
            }
        }
    }while(1);
}
void InitList(SqList *&L)//初始化
{
    L=(SqList*)malloc(sizeof(SqList));
    L->length=0;
}
void XXLR(SqList *&L,int i)//信息录入
{
    int j;
    InitList(L);
    printf("请依次输入每个快递的信息\n");
    for(j=1;j<=i;j++)
    {
        printf("请输入快递单号\n");
        scanf("%d",&L->data[j-1].couriernum);
        printf("请输入快递状态\n");
        scanf("%s",&L->data[j-1].state);
        printf("请输入发件人姓名\n");
        scanf("%s",&L->data[j-1].addressorname);
        printf("请输入发件人地址\n");
        scanf("%s",&L->data[j-1].addressoradd);
        printf("请输入发件人联系电话\n");
        scanf("%d",&L->data[j-1].addressorpnum);
        printf("请输入发件人邮政编码\n");
        scanf("%d",&L->data[j-1].addressorpcode);
        printf("请输入收件人姓名\n");
        scanf("%s",&L->data[j-1].addresseename);
        printf("请输入收件人地址\n");
        scanf("%s",&L->data[j-1].addresseeadd);
        printf("请输入收件人联系电话\n");
        scanf("%d",&L->data[j-1].addresseepnum);
        printf("请输入收件人邮政编码\n");
        scanf("%d",&L->data[j-1].addresseepcode);
        L->length++;
    }
}
void XMCX(SqList *L)//按照姓名查找
{
    int i;
    char name[5];
    bool a;
    printf("请输入您要查询的收件人姓名\n");
    getchar();
    scanf("%s",name);
    for(i=0;i<L->length;i++)
    {
        a=false;
        if(strcmp(L->data[i].addresseename,name)==0)
        {
            printf("查询成功\n");
            printf("该收件人的快递单号是%d\n",L->data[i].couriernum);
            printf("该收件人的快递状态是%s\n",L->data[i].state);
            a=true;
        }
    }
    if(a==false)
    {
        printf("未查询到您所查询的收件人姓名\n");
    }
}
void XGZT(SqList*&L)//修改快递状态
{
    int a,j;
    char b[20];
    printf("请输入快递单号\n");
    scanf("%d",&a);
    for(j=1;j<L->length;j++)
    {
        if(a==L->data[j-1].couriernum)
        {
            printf("请输入新的快递状态:\n");
            getchar();
            scanf("%s",b);
            strcpy(L->data[j-1].state,b);
            printf("快递单号为%d\n",L->data[j-1].couriernum);
            printf("快递状态为%s\n",L->data[j-1].state);
            printf("发件人名称为%s\n",L->data[j-1].addressorname);
            printf("发件人地址为%s\n",L->data[j-1].addressoradd);
            printf("发件人联系电话为%d\n",L->data[j-1].addressorpnum);
            printf("发件人邮政编码为%d\n",L->data[j-1].addressorpcode);
            printf("收件人姓名为%s\n",L->data[j-1].addresseename);
            printf("收件人地址为%s\n",L->data[j-1].addresseeadd);
            printf("收件人联系电话为%d\n",L->data[j-1].addresseepnum);
            printf("收件人邮政编码为%d\n",L->data[j-1].addresseepcode);
            break;
        }
    }
}
void ZTXX(SqList *&L,int j)//增添信息
{
    int a;
    for(a=L->length+1;a<L->length+1+j;a++)
    {
        printf("请输入快递单号\n");
        scanf("%d",&L->data[a-1].couriernum);
        printf("请输入快递状态\n");
        scanf("%s",&L->data[a-1].state);
        printf("请输入发件人姓名\n");
        scanf("%s",&L->data[a-1].addressorname);
        printf("请输入发件人地址\n");
        scanf("%s",&L->data[a-1].addressoradd);
        printf("请输入发件人联系电话\n");
        scanf("%d",&L->data[a-1].addressorpnum);
        printf("请输入发件人邮政编码\n");
        scanf("%d",&L->data[a-1].addressorpcode);
        printf("请输入收件人姓名\n");
        scanf("%s",&L->data[a-1].addresseename);
        printf("请输入收件人地址\n");
        scanf("%s",&L->data[a-1].addresseeadd);
        printf("请输入收件人联系电话\n");
        scanf("%d",&L->data[a-1].addresseepnum);
        printf("请输入收件人邮政编码\n");
        scanf("%d",&L->data[a-1].addresseepcode);
    }
    L->length+=j;
}
void DispList(SqList *L)
{
    int i;
    for(i=0;i<L->length;i++)//使用一个for循环将每个元素输出
    {
        printf("快递单号为%d\n",L->data[i].couriernum);
                printf("快递状态为%s\n",L->data[i].state);
                printf("发件人名称为%s\n",L->data[i].addressorname);
                printf("发件人地址为%s\n",L->data[i].addressoradd);
                printf("发件人联系电话为%d\n",L->data[i].addressorpnum);
                printf("发件人邮政编码为%d\n",L->data[i].addressorpcode);
                printf("收件人姓名为%s\n",L->data[i].addresseename);
                printf("收件人地址为%s\n",L->data[i].addresseeadd);
                printf("收件人联系电话为%d\n",L->data[i].addresseepnum);
                printf("收件人邮政编码为%d\n",L->data[i].addresseepcode);
    }
}
void menu2(SqList *L)
{
    int b;
    int i,j;
    do{
        printf("________________________\n");
        printf("______管理用户界面______\n");
        printf("_______1.信息录入_______\n");
        printf("2.按照收件人名查快递状态\n");
        printf("__3.按快递单号修改状态__\n");
        printf("_____4.增添快递信息_____\n");//原题未有
        printf("5.输出现在所有的快递信息\n");
        printf("______0.返回主菜单______\n");
        printf("________________________\n");
        printf("请输入您要进行的选项\n");
        scanf("%d",&b);
        switch(b)
        {
            case 1:
                printf("请输入您要录入信息的数量\n");
                scanf("%d",&i);
                XXLR(L,i);
                break;
            case 2:
                XMCX(L);
                break;
            case 3:
                XGZT(L);
                break;
            case 4:
                printf("请输入新到达的快递件数:\n");
                scanf("%d",&j);
                ZTXX(L,j);
                break;
            case 5:
                DispList(L);
                break;
            case 0:
                return;
                break;
            default:
            {
                printf("输入有误,请重新输入\n");
                break;
            }
        }
    }while(1);
}
int main()
{
    int i;
    char a[10],b[10];
    char zhanghu[10]="200450804";
    char mima[10]="123456";
    int j=1;
    SqList *L=NULL;
    do{
        printf("________________________\n");
        printf("____物流信息管理系统____\n");
        printf("_____1.普通用户入口_____\n");
        printf("_____2.管理人员入口_____\n");
        printf("_______0.退出入口_______\n");
        printf("________________________\n");
        printf("请输入您要进行的选项\n");
        scanf("%d",&i);
        switch(i)
        {
            case 1://建立一个普通用户的界面
                menu1(L);
                break;
            case 2://管理界面(要有账户密码)
                printf("请输入账户\n");
                scanf("%s",&a);
                printf("请输入密码\n");
                scanf("%s",&b);
                if(strcmp(zhanghu,a)==0&&strcmp(mima,b)==0)
                {
                    printf("账户和密码输入正确,欢迎您管理员\n");
                    menu2(L);
                    break;
                }
                else
                {
                    printf("您输入的账户和密码不正确\n");
                    break;
                }

            case 0://退出选项
                exit(0);
                break;
            default:
            {
                printf("输入有误,请重新输入\n");
                break;
            }
        }
    }while(1);
    return 0;
}


运行结果及报错内容

没有报错,但运行时候会直接停止

img


就是即使先在管理员界面敲一个表也会像这样

我的解答思路和尝试过的方法

是不是因为从子表返回到主菜单时已经建立的表自动删除了

我想要达到的结果

解决这个问题呗

  • 写回答

1条回答 默认 最新

  • CSDN专家-Time 2021-12-01 11:11
    关注

    你都没有录入信息,你怎么查。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月1日
  • 创建了问题 12月1日

悬赏问题

  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥15 Stata 面板数据模型选择
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏