图书管理系统(问题:运行时只能存一个)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
int id;
char name[20];
float price;
} BK;

typedef struct {
BK *data;
int listSize;
int length;
} Sqlist;

int initSqlist(Sqlist *L, int max) {
L->data = (BK *)malloc(max * sizeof(BK));
if (L->data == NULL) {
printf("空间申请失败!\n");
exit(0);
}
L->listSize = max;
L->length = 0;
return 1;
}

int insertSqlist(Sqlist *L, int i, BK x) {
int k;
if (i < 1 || i > L->length + 1) {
printf("插入位置异常!\n");
return 0;
}
if (L->length = L->listSize) {
printf("容量不够!\n");
return 0;
}
for (k = L->length - 1; k >= i - 1; k--)
L->data[k + 1] = L->data[k];
L->data[i - 1] = x;
L->length = L->length + 1;
return 1;
}

int deleteSqlis(Sqlist *L, int i, BK *x) {
int k;
if (L->length == 0) {
printf("没有数据,不能删除!\n");
return 0;
}
if (i <= 0 || i > L->length) {
printf("位置异常,不能删除!\n");
return 0;
}
*x = L->data[i - 1];
for (k = i; k < L->length; k++)
L->data[k - 1] = L->data[k];
L->length = L->length - 1;
return 1;
}

int dispSqlist(Sqlist L) {
if (L.length == 0) {
printf("没有数据!\n");
return 0;
}
for (int i = 0; i < L.length; i++)
printf("%10d%10s%5.2f\n");
return 1;
}

int locationSqlist(Sqlist L, char *newid) {
int i;
if (L.length == 0) {
printf("没有找到数据!\n");
return 0;
}
for (i = 0; i < L.length; i++)
if (L.data[i].id, newid == 0)
return i + 1;
return 0;
}

void createSqlist(Sqlist *L, int maxsize) {
int n = 0;
BK x;
char yn;
initSqlist(L, maxsize);
do {
printf("请输入第%d本书的编号,书名和价格,用空格隔开:", n + 1);
scanf("%d%s%f", x.id, x.name, x.price);
insertSqlist(L, ++n, x);
printf("继续输入吗?Y/N:");
scanf("%c", &yn);
} while (yn == 'Y' || yn == 'y');
}

main() {
Sqlist L;
int maxsize = 100;
createSqlist(&L, maxsize);
}

修改处见注释,供参考:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
    int   id;
    char  name[20];
    float price;
}BK;

typedef struct {
    BK *data;
    int listSize;
    int length;
} Sqlist;

int initSqlist(Sqlist *L, int max) {
    L->data = (BK *)malloc(max * sizeof(BK));
    if (L->data == NULL) {
        printf("空间申请失败!\n");
        exit(0);
    }
    L->listSize = max;
    L->length = 0;
    return 1;
}

int insertSqlist(Sqlist *L, int i, BK x) {
    int k;
    if (i < 1 || i > L->length + 1) {
        printf("插入位置异常!\n");
        return 0;
    }
    if (L->length == L->listSize) { //if (L->length = L->listSize) 修改
        printf("容量不够!\n");
        return 0;
    }
    for (k = L->length - 1; k >= i - 1; k--)
        L->data[k + 1] = L->data[k];
    L->data[i - 1] = x;
    L->length = L->length + 1;
    return 1;
}

int deleteSqlis(Sqlist *L, int i, BK *x) {
    int k;
    if (L->length == 0) {
        printf("没有数据,不能删除!\n");
        return 0;
    }
    if (i < 1 || i > L->length) {  //if (i <= 0 || i > L->length) 修改
        printf("位置异常,不能删除!\n");
        return 0;
    }
    *x = L->data[i - 1];
    for (k = i; k < L->length; k++)
         L->data[k - 1] = L->data[k];
    L->length = L->length - 1;
    return 1;
}

int dispSqlist(Sqlist L) {
    if (L.length == 0) {
        printf("没有数据!\n");
        return 0;
    }
    for (int i = 0; i < L.length; i++)
         printf("%-10d%-20s%5.2f\n",L.data[i].id,L.data[i].name,L.data[i].price);
         //printf("%10d%10s%5.2f\n" ); 修改
    return 1;
}

int locationSqlist(Sqlist L, int newid) { //修改  char *newid
    int i;
    if (L.length == 0) {
        printf("没有数据!\n");
        return -1; // 修改
    }
    for (i = 0; i < L.length; i++)
         if (L.data[i].id == newid) // 修改
             return i;     //i + 1;
    if (i == L.length) //修改
         return -1;    // 修改
}

void createSqlist(Sqlist *L){   //, int maxsize) {
    int n = 0;
    BK x;
    char yn;
    //initSqlist(&L, maxsize); 修改
    do {
         printf("请输入第%d本书的编号,书名和价格,用空格隔开:", n + 1);
         scanf("%d%s%f", &x.id, x.name, &x.price); //修改
         //scanf("%d%s%f", x.id, x.name, x.price);
         getchar();              //修改
         insertSqlist(L, ++n, x);
         printf("继续输入吗?Y/N:");
         scanf("%c", &yn);
    } while (yn == 'Y' || yn == 'y');
}

main() {
    Sqlist L;
    int maxsize = 100,index = -1; //修改
    BK x;  //修改
    initSqlist(&L, maxsize);  //修改
    createSqlist(&L); //createSqlist(&L, maxsize); 修改
    dispSqlist(L);    //修改

    index = locationSqlist(L, 2); //修改
    if (index >= 0)
        printf("%-10d%-20s%5.2f\n",L.data[index].id,L.data[index].name,L.data[index].price);
    else
        printf("没有找到数据!\n");

    deleteSqlis(&L, 1, &x); //修改
    printf("%-10d%-20s%5.2f\n",x.id,x.name,x.price);//修改
    dispSqlist(L);
   
}