c语言数据结构链表图书管理系统,可以运行,但是实现不了

img

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
typedef struct{
int n;
char *name;
float price;
}STD;

typedef struct Lnode{

STD data;
struct Lnode *next;

}LNode,*LinkList;

int initLinkList(LinkList *L)//初始化
{

*L = (LNode*)malloc(sizeof(LNode));
if(*L==NULL){
    
    return 0;
}
(*L)->next = NULL;

}
int createLinkList(LinkList *L){
int n=0;
STD x;
LinkList p,r=*L;
char yn;
do{
printf("请输入书籍编号,名字,价格\n");
scanf("%d%s%f",&x.n,&x.name,&x.price);
getchar();
p = (LinkList)malloc(sizeof(LNode));
p->data = x;
p->next = NULL;
r->next = p;
r=p;

    printf("是否继续输入,是按y,不是任意");    
    yn = getchar();
}while(yn=='y'||yn=='Y');

}
int insert(LinkList L,int i,STD x)//插入
{
LinkList p=L,s;
int pos =0;

    while(p!=NULL && pos<i-1) {
        p = p->next;
        pos++;
    }
    if(p==NULL || pos>i-1) {
        printf("插入位置有误\n");
    }
    s = (LinkList)malloc(sizeof(LNode));
    s->data = x;
    s->next= p->next;
    p->next= s;
    return 1;
    printf("插入成功\n") ; 

}

int deleteLinkList(LinkList L,int i,STD d)//删除
{
LinkList p=L,q;
int pos = 0;
while(p!=NULL&&pos<i-1){
p = p->next;
pos = pos+1;
}
while(p==NULL||pos<i-1){
printf("删除位置不合理");
return 0;
}
q = p->next;
p->next= q->next;
q->next->data= q->data;
free(q);
printf("删除成功");
}
int dispLinkList(LinkList L){
LinkList p = L->next;
if(p==NULL){
printf("没有数据");
}
while(p!=NULL){
printf("%d %s %f",p->data.n,p->data.name,p->data.price);
p=p->next;
}
return 1;
}
int getLinkList(LinkList L,char *a){
LinkList p= L->next;
int j=1;
while(p){
if(strcmp(p->data.name,a)){
p=p->next;
j++;
}
else return j;
}
if(p==NULL){
return 0;
}
}
int menu(){
int a;

    printf("图书管理系统\n");
printf("1.创建   2.插入   3.删除\n");
printf("4.显示     5.查找   6.退出\n");
printf("请输入编号:");
scanf("%d",&a);
getchar(); 
    return a;

}
int main(){
STD t;
LinkList n;
int a,m,b,d=1;
char *c;
while(1){
m = menu();
switch(m){
case 0 :initLinkList(&n) ; printf("初始化成功");break;

int createLinkList(LinkList *L) 函数做了修改,主函数里做了修改,其他函数未做调试,修改处见注释,供参考:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
typedef struct {
    int n;
    char* name;
    float price;
}STD;

typedef struct Lnode {
    STD    data;
    struct Lnode* next;
}LNode, * LinkList;

int initLinkList(LinkList* L)   //初始化
{
    (*L) = (LNode*)malloc(sizeof(LNode));
    if ((*L) == NULL) 
        return 0;
    (*L)->next = NULL;
    printf("初始化成功\n\n");
}
void  createLinkList(LinkList L) {  //int createLinkList(LinkList* L) 修改
    int n = 0;
    STD x;
    x.name = (char*)malloc(sizeof(char) * 32); //修改
    LinkList p, r = L;
    char yn = 0;
    do {
        memset(x.name, 0, 32);                   //修改
        printf("请输入书籍编号,名字,价格\n");
        scanf("%d%s%f", &x.n, x.name, &x.price); //修改
        //scanf("%d%s%f", &x.n, &x.name, &x.price);
        getchar();
        p = (LinkList)malloc(sizeof(LNode));
        p->data.name = (char*)malloc(sizeof(char) * 32); //修改
        p->data.n = x.n;                 //修改
        strcpy(p->data.name, x.name);   //修改
        p->data.price = x.price;         //修改
        //p->data = x;                  //修改
        p->next = NULL;
        r->next = p;
        r = p;

        printf("是否继续输入,是按y,不是任意");
        yn = getchar();
    } while (yn == 'y' || yn == 'Y');
}
int insert(LinkList L, int i, STD x)//插入
{
    LinkList p = L, s;
    int pos = 0;

    while (p != NULL && pos < i - 1) {
        p = p->next;
        pos++;
    }
    if (p == NULL || pos > i - 1) {
        printf("插入位置有误\n");
    }
    s = (LinkList)malloc(sizeof(LNode));
    s->data = x;
    s->next = p->next;
    p->next = s;
    return 1;
    printf("插入成功\n");
}

int deleteLinkList(LinkList L, int i, STD d)//删除
{
    LinkList p = L, q;
    int pos = 0;
    while (p != NULL && pos < i - 1) {
        p = p->next;
        pos = pos + 1;
    }
    while (p == NULL || pos < i - 1) {
        printf("删除位置不合理");
        return 0;
    }
    q = p->next;
    p->next = q->next;
    q->next->data = q->data;
    free(q);
    printf("删除成功");
}
int dispLinkList(LinkList L) {
    LinkList p = L->next;
    if (p == NULL) {
        printf("没有数据");
    }
    while (p != NULL) {
        printf("%d %s %f\n", p->data.n, p->data.name, p->data.price);
        p = p->next;
    }
    return 1;
}
int getLinkList(LinkList L, char* a) {
    LinkList p = L->next;
    int j = 1;
    while (p) {
        if (strcmp(p->data.name, a)) {
            p = p->next;
            j++;
        }
        else return j;
    }
    if (p == NULL) {
        return 0;
    }
}
int menu() {
    int a;
    printf("\n图书管理系统\n");
    printf("1.创建     2.插入   3.删除\n");
    printf("4.显示     5.查找   6.退出\n");
    printf("请输入编号:");
    scanf("%d", &a);
    getchar();
    return a;
}
int main() {
    STD t;
    LinkList n;
    int a, m, b, d = 1;
    char* c;
    initLinkList(&n);   //修改
    while (d) {           //修改
        m = menu();
        switch (m) {
        //case 0:initLinkList(&n); printf("初始化成功\n"); break;  修改
        case 1:createLinkList(n); break;  //修改
        case 4:dispLinkList(n); break;    //修改
        case 6:d = 0; break;               //修改
        }
    }
    return 0;
}