求调试,程序长 - -解决方法

求调试,程序长 - -!!
主要帮忙调试一下开辟空间的部分

C/C++ code
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define N 10//会员姓名长度
#define LEN sizeof(struct member)
#define LENBOOK sizeof(struct book)
#define MEMBER 100//会员人数
#define BOOK 1000//图书数量
struct book//图书信息结构体
{
    char bookname[N];//图书名字
    char bookto[N];//图书借阅的会员姓名
    struct book *next;
};
struct book * book_increase(int k)//开辟图书空间  主要帮忙调试一下这个函数
{
    static struct book *head,*p1,*p2,*p;
    static int i=1;
    if(k==1)
    {
        i++;
        if(i==1)
        {
            head=p1=p=(struct book *)malloc(LENBOOK);
        p1->next=0;
        return p1;
        }
        else 
        {
        p2=p1;
        p1=(struct book *)malloc(LENBOOK);
        p2->next=p1;
        p1->next=0;
        return p1;
        }
        
    }
    else
    if(k==2) return p;
    else return 0;

}
int book_input()//录入图书名
{
    struct book *p;
    do
    {
    p=book_increase(1);
    printf("输入书名(程序没有约束书名的唯一性):\n");
    scanf("%s",p->bookname);
    printf("按Y继续,按任意键返回上一级菜单\n");
    getchar();
    }
    while(getchar()=='y'||getchar()=='Y');
    return 1;
}
int book_select()//查询图书信息
{
    struct book *p;
    char t[N];
    int k;
    printf("输入要查询的图书名:\n");
    scanf("%s",t);
    do
    {
        p=book_increase(2);
        while(p->next!=0)
        {
            if(!strcmp(p->bookname,t))
            {
                printf("%s",p->bookname);
                /*在结构体内添加相应的信息,在此显示*/
                printf("%s",p->bookto);
                k=0;
            }
            else k=1;
            p=p->next;
        }
        if(k=1) printf("没有此书的相关信息!\n");
        printf("按Y继续,按任意键返回上一级菜单\n");
        getchar();
    }
    while(getchar()=='y'||getchar()=='Y');
    return 1;
}
int book_del()
{
    struct book *p,*p1,*p2,*pf;
    char t[N];
    int k=1;
    printf("输入要删除的书名:\n");
    scanf("%s",t);
    do
    {
        p=book_increase(2);
        while(p->next!=0)
        {
        if(k==1&&!strcmp(p->bookname,t))
        {
            p1=p;
            free(p);
            p=p1->next;
        }
        if(k==2) p2=p;
        if(k!=1&&!strcmp(p->bookname,t))
        {
            p2->next=p1->next;
            pf=p1;
            p1=p1->next;
            free(pf);
        }
        p1=p1->next;
        p2=p2->next;
        }
    printf("按Y继续,按任意键返回上一级菜单\n");
    getchar();
    }
    while(getchar()=='y'||getchar()=='Y');
    return 1;
}
int book_to()//图书借阅
{
    struct book *p;
    char t[N];
    printf("输入要借阅的图书名\n");
    scanf("%s",t);
    do
    {
        p=book_increase(2);
        while(p->next!=0)
        {
            if(!strcmp(p->bookname,t))
            {
                scanf("%s",p->bookto);
                /*在此检查会员的合法性*/
                break;
            }
            p=p->next;
        }
        printf("按Y继续,按任意键返回上一级菜单\n");
    getchar();
    }
    while(getchar()=='y'||getchar()=='Y');
    return 1;
}
int book_meun()
{
    int k,m;
    printf("1:录入图书信息\n");
    printf("2:查询图书信息\n");
    printf("3:删除图书信息\n");
    printf("4:图书借阅信息\n");
    printf("5:返回主菜单\n");
    scanf("%d",&k);
    switch(k)
    {
    case 1:m=book_input();break;
    case 2:m=book_select();break;
    case 3:m=book_del();break;
    case 4:m=book_to();break;
    case 5:m=2;break;
    }
    return m;
}
void main()
{
    int k,m;
    do
    {
        printf("1:图书\n");
        printf("2:会员\n");
        printf("3:退出系统\n");
        scanf("%d",&k);
        if(k==1)
            m=book_meun();
        else if(k==3)
            m=0;    
        else printf("输入有误\n");
    }
    while(m!=0);
}



不吝赐教