花火ios 2021-09-17 14:12 采纳率: 100%
浏览 35
已结题

顺序表修改查找输出有问题

求纠正 查找输出修改找不到数据


#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define MaxSize 100
#define ok 1;
#define error 0;
typedef struct
{
    char ID[10];
    char Name[10];
    int num;
} goods;
typedef struct
{
    goods *data; //存储物品信息的指针
    int length; //顺序表长度
} SqList;

//初始化顺序表,给顺序表分配空间
int InitList(SqList *L)
{
    L->data = (goods*)malloc(sizeof(goods[MaxSize]));
    if (!L->data)
        return error;
    L->length = 0;
    printf("初始化成功\n");
    return ok;
}

void InsertInfo(SqList *L)
{
    int i = 0;
    while (1)
    {
        if (L->length == 100)
            printf("空间已满,无法继续录入!\n");
        printf("请输入第%d位物品的信息:\n", L->length+1);
        printf("序号:");
        scanf("%s", (L->data[i].ID));
        printf("种类:");
        scanf("%s", (L->data[i].Name));
        printf("数量:");
        scanf("%d", &(L->data[i].num));
        printf("录入完毕,是否继续录入(1:继续  0:退出):");
        i++;
        L->length++;
        int choice;
        scanf("%d", &choice);
        if (choice == 0)
            break;

    }
}

void DelInfo(SqList *L)
{
    goods good;
    char Id[10];
    int i;
    printf("请输入需要删除物品信息的序号:");
    scanf("%s", Id);
    for (i = 0; i < L->length; i++)
    {
        if(strcmp(L->data[i].ID, Id) == 0)
        {
            good = L->data[i];
            for (int j = L->length; j > i; j--)
            {
                L->data[j - 1] = L->data[j];
            }
            break;
        }
    }
    if (i >= L->length)
    {
        printf("表中没有该物品!\n");
        return;
    }
    L->length--;
    printf("被删除的物品信息为:\n");
    printf("序号:%s\n", good.ID);
    printf("种类:%s\n", good.Name);
    printf("数量:%d\n", good.num);
    printf("删除成功!\n");
}

void UpdateInfo(SqList *L)
{
    char Id[10];
    int i;
    printf("请输入需要修改信息的序号:");
    scanf("%s", Id);
    for (i = 0; i < L->length; i++)
    {
        if (strcmp(L->data[i].ID, Id) == 0)
        {
            printf("请输入新的信息:\n");
            printf("序号:");
            scanf("%s", (L->data[i].ID));
            printf("种类:");
            scanf("%s", (L->data[i].Name));
            printf("数量:");
            scanf("%d", &(L->data[i].num));
            break;
        }
    }
    if (i >= L->length)
        printf("表中没有该序号!\n");
}



void SortTable(SqList *L)
{
    int i,j;
    int temp=0;
    for(i=0; i<L->length; i++)
    {
        for(j=i+1; j<L->length; j++)
        {
            if(L->data[i].ID<L->data[j].ID)
            {
                temp=i;
                L->data[i]=L->data[j];
                L->data[j]=L->data[temp];
            }
        }
    }
}
void SeacrchInfoByID(SqList *L)
{
    int i;
    char Id[10];
    printf("请输入需要查找的ID:");
    scanf("%s", Id);
    for ( i = 0; i < L->length; i++)
    {
        if (strcmp(L->data[i].ID, Id) == 0)
        {
            printf("该物品的信息:\n");
            printf("序号:%s\n", L->data[i].ID);
            printf("种类:%s\n", L->data[i].Name);
            printf("数量:%d\n", L->data[i].num);
            break;
        }

    }
    if (i >= L->length)
        printf("表中没有该物品!\n");
}

void OutputAll(SqList *L)
{
    for (int i = 0; i < L->length; i++)
    {
        printf("该物品的信息:\n");
        printf("序号:%s\n", L->data[i].ID);
        printf("种类:%s\n", L->data[i].Name);
        printf("数量:%d\n", L->data[i].num);
    }
}
void Enter(SqList *L)
{

    char Name[10];
    int i;
    printf("请输入库物品的种类:");
    scanf("%s", Name);
    for (i = 0; i < L->length; i++)
    {
        if(strcmp(L->data[i].Name, Name) != 0)
        {
            printf("请输入新的信息:\n");
            printf("序号:");
            scanf("%s", (L->data[i].ID));
            printf("种类:");
            scanf("%s", (L->data[i].Name));
            printf("数量:");
            scanf("%d", &(L->data[i].num));
                L->length++;
            break;
        }
        else
        {
            printf("该物品的信息:\n");
            printf("序号:%s\n", L->data[i].ID);
            printf("种类:%s\n", L->data[i].Name);
            printf("数量:%d\n", L->data[i].num);
            printf("请输入需要修改的数量:");
            scanf("%d", &(L->data[i].num));

        }
    }
    if (i >= L->length)
        printf("表中没有该物品!\n");

}
void Outer(SqList *L)
{


    char Name[10];
    int i;
    printf("请输出库物品的种类:");
    scanf("%s", Name);
    for (i = 0; i < L->length; i++)
    {
        if(strcmp(L->data[i].Name, Name) == 0)
        {
            printf("该物品的信息:\n");
            printf("序号:%s\n", L->data[i].ID);
            printf("种类:%s\n", L->data[i].Name);
            printf("数量:%d\n", L->data[i].num);
            printf("请输入出库后的数量:");
            scanf("%d", &(L->data[i].num));

            break;
        }
        else
        {
            printf("表中没有该物品!\n");

        }
    }
    if (i >= L->length)
        printf("表中没有该物品!\n");

}
void Statistic(SqList *L)
{
    for (int i = 0; i < L->length; i++)
    {
        printf("该物品的信息:\n");
        printf("序号:%s\n", L->data[i].ID);
        printf("种类:%s\n", L->data[i].Name);
        printf("数量:%d\n", L->data[i].num);
    }
}

//清空表,释放内存
void ClearAndFree(SqList *L)
{
    free(L->data);
    if (L->length != 0)
        L->length = 0;
    printf("释放成功!\n");
}

//菜单
void Menu()
{
    printf("\t\t\t1.创建表\t\t\t2.添加物品信息\n");
    printf("\t\t\t3.删除物品信息\t\t\t4.修改物品信息\n");
    printf("\t\t\t5.查找物品信息\t\t\t6.输出全部物品信息\n");
    printf("\t\t\t7.物品入库\t\t\t8.物品出库\n");
    printf("\t\t\t9.统计物品数量\t\t\t10.释放顺序表\n");
}
//主函数测试
int main()
{
    SqList L;
    while (1)
    {
        Menu();
        int choice;
        printf("请选择菜单:");
        scanf("%d", &choice);
        switch (choice)
        {
        case 1:
        {
            InitList(&L);
            SortTable(&L);
            break;
        }
        case 2:
        {
            InsertInfo(&L);
            SortTable(&L);
            break;
        }
        case 3:
        {
            DelInfo(&L);
            break;
        }
        case 4:
        {
            UpdateInfo(&L);
            SortTable(&L);
            break;
        }
        case 5:
        {
            SeacrchInfoByID(&L);
            break;
        }
        case 6:
        {
            OutputAll(&L);
            break;
        }
        case 7:
        {
            Enter(&L);
            break;
        }
        case 8:
        {
            Outer(&L);
            break;
        }
        case 9:
        {
            Statistic(&L);
            break;
        }

        case 10:
        {
            ClearAndFree(&L);

        }
        default:
            break;
        }
    }

}
  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2021-09-17 14:18
    关注

    你倒是说说有什么现象啊。扔出一堆代码,也不用代码块格式化,然后说有问题就完了啊。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月3日
  • 已采纳回答 9月25日
  • 修改了问题 9月17日
  • 修改了问题 9月17日
  • 展开全部

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条