请问这个顺序表写的图书信息管理系统怎么修改,目前调试出来问题在insert
//////////////////////////////////////////////////////////////////////////
//(1)编译预处理命令
#include "stdio.h"
#include "stdlib.h"//分配内存
#include "conio.h"
#include "string.h"
//////////////////////////////////////////////////////////////////////////
//(2)自定义数据类型(typedef)
//先定义图书数据的数据类型
typedef struct {
int no;//number
char name[32];//name
float price;//price
}STD;
//再定义顺序表数据类型:
typedef struct {
STD *data; //data是一个指向STD类型的指针变量
int listSize;//表容量
int length;//实际数据个数
}SQList;
//////////////////////////////////////////////////////////////////////////
//(3)各个函数的声明
int menu();
int initSqList(SQList *L,int max);//初始化
int dispSqList(SQList L);
int insertSqList(SQList *L, int i, STD x);
int deleteSqList(SQList *L, int i, STD *x);
int locateSqList(SQList L, STD x);
int updateSqList(SQList L, int i, STD x);
int createSqList(SQList *L,int max,STD x);
//////////////////////////////////////////////////////////////////////////
//(4)主函数的定义
int main()
{
int t=1,n, maxSize;// float fs=.0f;有时候不做这个浮点初始化操作程序会报错
SQList L;STD s;
while(t){
n=menu( );//显示主菜单
switch(n){
//初始化图书数据
case 1:
printf("请输入需要创建的图书数量:");
scanf("%d",&maxSize);
initSqList(&L, maxSize);
break;
//插入图书数据
case 2:
printf("请输入需要插入图书的编号、书名、价格,用空格隔开:\n");
scanf("%d%s%f",&s.no,s.name, &s.price);
int pos;
printf("请输入插入位置:\n");
scanf("%d",&pos);
insertSqList(&L,pos,s);
break;
//删除图书数据
case 3:
printf("请输入删除图书书名:\n");
scanf("%s",s.name);
pos=locateSqList(L,s);
if(pos==L.length+1)
printf("不存在该图书数据\n");
else
{
deleteSqList(&L, pos, &s);
printf("删除的图书数据为:%d %10s %7.2f\n", s.no,s.name, s.price);
}
break;
//显示图书数据
case 4:
dispSqList(L);
break;
//更新图书数据
case 5:
printf("请输入需要修改的图书编号、名称、价格,用空格隔开:\n");
scanf("%d%s%f",&s.no,s.name,&s.price);
n=locateSqList(L,s);
updateSqList(L,n,s);
break;
case 6:
createSqList(&L,maxSize,s);
break;
//退出
case 0:
t = 0;
break;
//错误处理
default:
printf("输入有误!\n");
}
}
}
//////////////////////////////////////////////////////////////////////////
//(5)各个函数的定义
int menu(){
int n;
//system("cls");//清屏
printf("****welcome to book management system****\n");
printf(" 1、initialize 2、insert\n");
printf(" 3、delete 4、display\n");
printf(" 5、update 6、create\n");
printf(" 7、exit\n");
printf("*****************************************\n");
printf("choose function(0-6):");
scanf("%d",&n);
return n;
}
//初始化操作:1.分配内存 2.给结构体变量赋值(length,listsize)
int initSqList(SQList *L,int max){
L->data=(STD*)malloc(max*sizeof(STD));
if(L->data=NULL){
printf("申请内存失败!");
exit(0);
}
L->listSize=max;
L->length=0;
return 1;
}
int dispSqList(SQList L){
if(L.data=0){
printf("没有信息!");
}
printf("编号 书名 价格\n ");
printf("%d",L.length);
for(int i=0;i<L.length;i++){
printf("%d %s %f\n",L.data[i].no,L.data[i].name,L.data[i].price);
}
return 1;
}
int insertSqList(SQList *L, int i, STD x){
if(i<1){
printf("1error");
return 0;
}
if(L->length>=L->listSize){
printf("2error");
return 0;
}
if(L->length=0){
L->data[L->length]=x;
++L->length;
return 1;
}
printf("%d",L->length);
/*else {
for(int k=L->length;k>=i-1;k--){
L->data[k+1]=L->data[k];
}
L->data[i-1]=x;
++L->length;
return 1;
}*/
}
int deleteSqList(SQList *L, int i, STD *x){
if(i<1||i>L->length)return 0;
if(L->listSize>=L->length)return 0;
*x=L->data[i-1];
for(int k=i-1;k<L->length;k++){
L->data[k]=L->data[k+1];
}
L->length=L->length-1;
return 1;
}
int locateSqList(SQList L, STD x){
if(L.length==0)return 0;
for(int i=0;i<L.length-1;i++){
if(strcmp(L.data[i].name,x.name)==0&&L.data[i].no==x.no&&L.data[i].price==x.price)return i+1;
}
}
int updateSqList(SQList L, int i, STD x){
if(i<1||i>L.length-1)return 0;
if(L.length==0)return 0;
L.data[i-1]=x;
return 1;
}
int createSqList(SQList *L,int maxSize,STD x){
int n=0;
char c;
initSqList(L, maxSize);
for(int i=0;i<maxSize;){
printf("input %d\n",i+1);
scanf("%d%s%f",&x.no,x.name,&x.price);
getchar();
insertSqList(L,++i,x);
}
return 1;
}