请问这个程序为什么在初始化以后不能继续执行了

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

typedef struct
{
    char bname[100];
    char bno[100];
}BOOK;

typedef struct
{
    BOOK *elem;
    int len;
    int listsize;
}LIST;

int Init(LIST *q,int maxsize);//空表
void input(LIST *q,int k);//连续输入在表头
int Insert(LIST *q, int pre,BOOK x);//任意位置插入
int del(LIST *q,int pre);//任意位置删除
int find(LIST *q,char bname[100]);//按照书名查找
int FIND(LIST *q,int i);//按照位置查找
void output(LIST *q);//输出

void main()
{
    int k,n,p1,p2,p3,maxsize;
    BOOK x;
    LIST *L=NULL;
    char name[100];
    scanf("%d",&n);
switch(n)
    {
        case 1:printf("请输入最大容量:");
               scanf("%d",&maxsize);
               Init(L,maxsize);
        case 2:printf("请输入输入本数:");
               scanf("%d",&k);
               input(L,k);
        case 3:printf("请输入插入位置:");
               scanf("%d",p1);
               printf("请输入一本书的信息:");
               gets(x.bname);
               gets(x.bno);
               Insert(L,p1,x);
        case 4:printf("请输入删除的位置:");
               scanf("%d",&p2);
               del(L,p2);
        case 5:printf("请输入书名:");
               gets(name);
               find(L,name);
        case 6:printf("请输入查找位置:");
               scanf("%d",p3);
               FIND(L,p3);
        case 7:output(L);
    }
}


int Init(LIST *q,int maxsize)
{
    q->elem=(BOOK*)malloc(maxsize* sizeof(BOOK));
    if(q->elem==NULL)
    {
        printf("error!");
        return 0;
    }
    q->listsize=maxsize;
    q->len=0;
    return 1;

}

int Insert(LIST *q, int pre,BOOK x)
{
    int i;
    if(pre<=0||pre>q->len)
        return 0;
    else if(q->len==q->listsize)
    {
        printf("full");
    }
    else
    {
        for(i=q->listsize;i>=pre;i--)
            q->elem[i]=q->elem[i-1];
    }
    q->elem[pre-1]=x;
    (q->len)+=1;
    return 1;

}

int del(LIST *q,int pre)
{
    int i;
    if(pre<=0||pre>q->len-1||q->len<=0)
        return 0;
    else
    {
        for(i=pre;i<q->len;i++)
        {
            q->elem[i]=q->elem[i+1];
        }
        q->len--;
        return 1;
    }   
}

int find(LIST *q,char bname[100])
{
    int i;
    for(i=0;(!strcmp(q->elem->bname,bname))||i<=q->len-1;i++,q->elem++)
    {
        if(i>q->len-1)
            return 0;
        else
        {
            puts(bname);
            puts(q->elem->bno);
            return 1;
        }
    }
}

int FIND(LIST *q,int i)
{
    i-=1;
    if(i>=0&&i<q->len)
    {
        puts(q->elem[i].bname);
        puts(q->elem[i].bno);
        return 1;
    }
    else
        return 0;
}

void output(LIST *q)
{
    int i;
    for(i=0;i<=q->len-1;i++)
    {
        puts(q->elem[i].bname);
        puts(q->elem[i].bno);
        printf("\n");
    }

}

void input(LIST *q,int k)
{
    int i;
    if(k==0)
    {
        printf("empty\n");  
    }
    else
    {
        printf("sum=%d",k);
        for(i=0;i<k;i++)
        scanf("%s%s%f",q->elem[i].bno,q->elem[i].bname);
        q->len=k;
    }
}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^