求助:数据结构中顺序表编程问题·
要编一个简略的仓库信息管理 包含货品编号 名称 数量 用顺序表实现 我很纠结啊~~~~~~~~~这是我的程序 但运行后 入库操作总有问题 哪位能帮忙看下·能解决的我将万分感激
#include"stdio.h" //包含头文件声明
#include"malloc.h"
#include"string.h"
#define MAXSIZE 100
typedef struct //数据类型定义
{
int number,amount;
char name[20];
}datatype;
typedef struct //顺序表类型定义
{
datatype data[MAXSIZE];
int last;
}SqList;
void menu(); //函数原型声明
SqList *Init_SqList();
void Input(SqList *L);
void Output(SqList *L);
int Locate_SqList(SqList *L,datatype element);
int Insert_SqList(SqList *L,int i,datatype element);
int Delete_SqList(SqList *L,int i);
void Ruku(SqList *L,datatype element);
void Chuku(SqList *L,datatype element);
main() //主函数
{
int i,sel;
SqList *L;
datatype element;
menu();
printf("输入您的选择,按0退出:\n");
scanf("%d",&sel);
while(sel) /*当sel不为0*/
{ switch(sel)
{
case 1: L=Init_SqList();
Input(L);
break;
case 2: printf("请输入您要添加的货品信息:\n");
printf("请依次输入产品货号,名称,数量,以空格键隔开:\n");
scanf("%d%s%d",&element.number,element.name,&element.amount);
Ruku(L,element);
Output(L);
break;
case 3: printf("请输入您要删除的货品信息:\n");
printf("请依次输入产品货号,名称,以空格键隔开:\n");
scanf("%d%s",&element.number,element.name);
Chuku(L,element);
Output(L);
break;
case 4: printf("请输入您要查询的货品名称:\n");
scanf("%s",element.name);
i=Locate_SqList(L,element);
if(i==0)
printf("您要查找的货品信息不存在!\n");
else
{
printf("您要查找的货品信息如下:\n");
printf("货品编号 名称 数量\n");
printf("%d%10s%10d",L->data[i-1].number,L->data[i-1].name,L->data[i-1].amount);
}
break;
case 5: Output(L);
break;
}
menu();
printf("输入您的选择,按0退出:\n");
scanf("%d",&sel);
}
}
void menu() //菜单输出
{
printf("\n 仓库货品信息管理系统 by bluemeteor \n");
printf("\n----主菜单----\n");
printf("(1) 初始化及信息录入...\n");
printf("(2) 货品入库(amount正增负减)...\n");
printf("(3) 删除货品信息...\n");
printf("(4) 查询货品信息...\n");
printf("(5) 显示货品信息... \n");
printf("(0) 退出系统...\n");
}
SqList *Init_SqList() //初始化...
{
SqList *L;
L=(SqList*)malloc(sizeof(SqList));
L->last=-1;
return L;
}
void Input(SqList *L) //信息录入...
{
int n,i;
printf("请输入要输入的货品种数:\n");
scanf("%d",&n);
printf("请依次输入产品货号,名称,数量,以空格键隔开:\n");
for(i=0;i<n;i++)
{scanf("%d%s%d",&L->data[i].number,L->data[i].name,&L->data[i].amount);}
L->last=n-1;
}
void Output(SqList *L) //显示货品信息...
{
int i;
for(i=0;i<=L->last;i++)
{
printf("%d%10s%10d\n",L->data[i].number,L->data[i].name,L->data[i].amount);
}
}
int Locate_SqList(SqList *L,datatype element) //查询货品信息...
{
int i=0;
if(L->last<0)
{printf("顺序表为空表,无法进行查找操作!\n");return(-1);}
while(i<=L->last&&L->data[i].number!=element.number&&strcmp(L->data[i].name,element.name)!=0)
i++;
if(i>L->last)
return(0);
else return(i+1);
}
int Insert_SqList(SqList *L,int i,datatype element) //插入函数
{
int j;
if(L->last==MAXSIZE-1)
{printf("表满无法插入新元素!\n");return(-1);}
if(i<1||i>L->last+1)
{printf("插入位置错误!\n");return(0);}
for(j=L->last;j>=i-1;j--)
{
L->data[j+1].number=L->data[j].number;
L->data[j+1].amount=L->data[j].amount;
strcpy(L->data[j+1].name,L->data[j].name);
}
L->data[i-1].number=element.number;
L->data[i-1].amount=element.amount;
strcpy(L->data[i-1].name,element.name);
L->last++;
return(1);
}
void Ruku(SqList *L,datatype element) //货品入库(amount正增负减)...
{
int i,j;
i=Locate_SqList(L,element);//调用查找函数
if(i==0)
{
while(i<=L->last&&L->data[i].number<element.number)
i++;
j=Insert_SqList(L,i+1,element);//调用插入函数
}
else L->data[i-1].amount+=element.amount;
}
int Delete_SqList(SqList *L,int i) //删除函数
{
int j;
if(L->last<0)
{printf("顺序表为空表,无法进行删除操作!\n");return(-1);}
if(i<1||i>L->last+1)
{printf("删除位置有误!\n");return(0);}
for(j=i;j<=L->last;j++)
L->data[j-1]=L->data[j];
L->last--;
return(1);
}
void Chuku(SqList *L,datatype element) //删除货品信息...
{
int i;
i=Locate_SqList(L,element);//调用查找函数
Delete_SqList(L,i);//调用删除函数
}