求纠正 查找输出修改找不到数据
#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;
}
}
}