c语言学习图书管理系统,链表删除部分删除不了怎么解决

能运行但是删不了

#include "stdlib.h"
#include "conio.h"
#include "stdio.h"
#include "windows.h"
/* run this program using the console pauser or add your own getch, system("pause") or input loop */



struct readerinfo
{
    char name[20];
    char sfzid[50];
    char phonenum[30];
    char readernum[20];
    char readerpwd[20];
    struct readerinfo *next ;
};
struct readerinfo *rhead;
struct bookmanage
{
    char managepwd[20];
    char managenum[20];
    struct bookmanage *next;
};
struct bookmanage *bmhead;
struct bookinfo
{
    char booknum [10];
    char ISBN[20];
    char publisher[40];
    struct bookinfo *next;
};
struct bookinfo *bhead;
struct borrowandretuen//借还信息 
{
    char booknum[10];
    char name[10];
    char managename[20];
    char borrowdate[20];
    char retuendate[20];
    char state[10];//借阅状态(是否归还) 
    struct borrowandretuen *next;
};
struct borrowandretuen *brhead;

int login();
void menu();
void menumanager();
void menureader();
void readermmenu();

void addbook();
void addreader();
void Borrowbooks();
void rutuenbooks();
void reselfinfo();
void rederquery();
void openbooksfile();
void openreadersfile();
void openbrfile();
void modifybookinfo();
void querybookinfo();
void modifyreader();
void queryreaderinfo();  
void Deletebookinfo();



int main(int argc, char** argv) 
{
    //login();
    int flag;    
    //menu();     
    printf("请选择操作方式\n");
    scanf("%d",&flag);
    while(flag==1)
    {    
    
        int a;
        menumanager();
        printf("              请选择操作选项\n");
        scanf("%d",&a);
        switch(a)
        {
            case 0:
                exit(0);
            case 1:
                if(bhead==NULL)
                    {
                        openbooksfile();
                    }
                    addbook();
                    break;
            case 2:
                if(bhead==NULL)
                {
                    openbooksfile();
                }
                modifybookinfo();
                break;
            case 3:
                if(bhead==NULL)
                {
                    openbooksfile();
                }
                Deletebookinfo();
                break;
            case 4:
                if(bhead==NULL)
                {
                    openbooksfile();
                }
                querybookinfo();
                
                system("pause");
                break;
            case 5:
                if(brhead==NULL)
                {
                    openbrfile();
                }
                
                
                Borrowbooks();
                break;
            case 6:
                if(brhead==NULL)
                {
                    openbrfile();
                }
                rutuenbooks();
                break;
            case 8:
                system("cls");
                int c;        
                readermmenu();
                printf("请选择操作选项\n");
                scanf("%d",&c);            
                switch(c)
                {
                    case 1:
                        openreadersfile();    
                        addreader();                    
                        break;
                    case 2:
                        if(rhead==NULL)
                        {
                            openreadersfile();
                        }
                        modifyreader();
                        break;
                    
                    case 4:
                         openreadersfile();    
                         break; 
                    case 6:
                        menumanager();
                        flag=1;
                        break;
                    default:
                        break;
                }                        
            default:
                break;     
        }    
    }
    while(flag==2)
    {
        int a;
        menureader();
        printf("              请选择操作选项\n");
        scanf("%d",&a);
        switch(a)
        {
            case 0:
                exit(0);
            case 1:
                rederquery ();
                break;
            case 3:
                if(rhead==NULL)
                    {
                        openreadersfile();
                    }
                modifyreader();
                break;    
            case 4:
                if(rhead==NULL)
                    {
                        openreadersfile();
                    }
                queryreaderinfo();
                break;            
            default:
                break;     
        }    
    }        
}
int login()
{

     char uname[20];
     char tch,upassword[10];
     char password1[10]="123456";
     printf("\t\t");
     printf("请输入您的用户id:");
     printf("\t");
     scanf("%s",uname);
     fflush(stdin);
     printf("\n");
     printf("\t\t");
     printf("请输入您的登陆密码:");
     int k=0;
     while(k<10 &&((tch=getch())!='\r')){
        if(tch==8 && k>0)
        { 
              putchar('\b');  
              putchar(' ');  
              putchar('\b');  
              k--;  
         }  
         if(!isdigit(tch)&&!isalpha(tch))
                    continue;  
         putchar('*');
         upassword[k++]=tch;        
     }
     upassword[k]=0;

     fflush(stdin);
     printf("\n");
     printf("\t\t请选择身份信息,1:管理员 2:读者\n");
}
        
    

void menu()
{
    system("cls"); 
    
    printf("\n\n\n");    
    printf("       -------------------------欢迎使用图书借还信息管理系统-------------------------\n");
    printf("       |                                                                            |\n");
    printf("       |              请选择登录方式                                                |\n");
    printf("       |                          1.管理员                                          |\n"); 
    printf("       |                          2.读者                                            |\n");
    printf("       |                                                                            |\n");
    printf("       ------------------------------------------------------------------------------\n");
}
void menumanager()
{                               //管理员菜单

    system("cls"); 
    
    printf("\n\n\n");    
    printf("         ┌──────────────────欢迎使用图书借还信息管理系统--管理员────────────────────┐        \n");
    printf("         │                                                                          │        \n");
    printf("         │            请选择操作项目:                                               │        \n");
    printf("         │               1.录入图书信息      2.修改图书信息                         │        \n");
    printf("         │               3.删除图书信息      4.查询图书信息                         │        \n");
    printf("         │               5.借阅图书          6.归还图书                             │        \n");
    printf("         │               7.管理员信息管理    8.借阅证管理                           │        \n");
    printf("         │               0.退出系统                                                 │        \n");
    printf("         └──────────────────────────────────────────────────────────────────────────┘        \n");

}
void readermmenu()
{                               //管理读者信息菜单

    system("cls"); 
    
    printf("\n\n\n");    
    printf("         ┌──────────欢迎使用图书借还信息管理系统--管理员────────────┐        \n");
    printf("         │                                                          │        \n");
    printf("         │            请选择操作项目:                              │        \n");
    printf("         │               1.录入读者信息      2.修改读者信息         │        \n");
    printf("         │               3.删除读者信息      4.查询读者信息         │        \n");
    printf("         │               5.统计读者借阅信息  6.返回上一级菜单       │        \n");
    printf("         └──────────────────────────────────────────────────────────┘        \n");

}
void menureader()
{                               //读者菜单

    system("cls"); 
    
    printf("\n\n\n");    
    printf("         ┌───────────欢迎使用图书借还信息管理系统--读者─────────────┐        \n");
    printf("         │                                                          │        \n");
    printf("         │            请选择操作项目:                              │        \n");
    printf("         │               1.查询图书信息      2.查询借还书信息       │        \n");
    printf("         │               3.修改个人信息      0.退出系统             │        \n");
    printf("         └──────────────────────────────────────────────────────────┘        \n");

}

void rederquery ()
{    
    int a;
    char b[20];
    int flag=1;
    while(flag=1)
    {
        printf("请选择查询方式:1.书名查询  2.ISBN码查询\n");
        scanf("%d",&a);
        if(a=1)
        {
            printf("请输入书名\n");
            scanf("%s",&b);
            if(strcmp(bhead[a].booknum,b )==0)
            {
            printf("书名《%s》  ISBN:%s",bhead[a].booknum,bhead[a].ISBN);
            break;
            }else
            {
                printf("输入错误\n");
                break;
            }
        
        }
        if(a=2)
        {
            printf("请输入ISBN\n");
            scanf("%s",&b);
            if(strcmp(bhead[a].ISBN,b )==0)
            {
            printf("书名《%s》  ISBN:%s",bhead[a].booknum,bhead[a].ISBN);
            break;
            }else
            {
                printf("输入错误\n");
                break;
            }
        }
    }
}

void openbooksfile()
{
    struct bookinfo *qe;
    struct bookinfo *qt;
    FILE *file;
    bhead=(struct bookinfo *)malloc(sizeof(struct bookinfo));    
    bhead->next =NULL;//指针域
    file=fopen("book.txt","a+");
    if(file=NULL)
    {
        printf("文件打不开,请联系管理员\n");
        exit(1);
    }
    getc(file);
    if(file!=NULL)
    {
        if(feof(file))
        {
            printf("文件为空!\n");
    
        }
        rewind(file);
        if(file!=NULL)
        {
            qe=(struct bookinfo *)malloc(sizeof(struct bookinfo));
            qe->next=NULL;
            bhead=qe;
            while(!feof(file))
            {
                qt=(struct bookinfo *)malloc(sizeof(struct bookinfo));
                qt->next=NULL;
    
        
                fscanf(file,"%s%s%s\n",qt->booknum,qt->ISBN,qt->publisher);
                qe->next=qt;
                qe=qe->next;
            }
        }
        
    }
}
void openreadersfile()
{
    struct readerinfo *qe;
    struct readerinfo *qt;
    FILE *file;
    rhead=(struct readerinfo*)malloc(sizeof(struct readerinfo));
    rhead->next=NULL;
    file=fopen("reader.txt","a+");
    if(file=NULL)
    {
        printf("文件打不开,请联系管理员\n");
        exit(1);
    }getc(file);
    rewind(file);
    if(file!=NULL)
    {
        qe=(struct readerinfo *)malloc(sizeof(struct readerinfo));
        qe->next=NULL;
        rhead=qe;
        while(!feof(file))
        {
            qt=(struct readerinfo *)malloc(sizeof(struct readerinfo));
            qt->next=NULL;
        
            
            fscanf(file,"%s\t%s\t%s\t%s\t%s\n",qt->name,qt->sfzid,qt->phonenum,qt->readernum,qt->readerpwd);
            qe->next=qt;
            qe=qe->next;
        }
    }
}
void openbrfile()
{
    struct borrowandretuen *qe;
    struct borrowandretuen *qt;
    FILE *file;
    brhead=(struct borrowandretuen*)malloc(sizeof(struct borrowandretuen));
    brhead->next=NULL;
    file=fopen("borrowandretuen.txt","a+");
    if(file=NULL)
    {
        printf("文件打不开,请联系管理员\n");
        exit(1);
    }getc(file);
    rewind(file);
    if(file!=NULL)
    {
        qe=(struct borrowandretuen *)malloc(sizeof(struct borrowandretuen));
        qe->next=NULL;
        brhead=qe;
        while(!feof(file))
        {
            qt=(struct borrowandretuen *)malloc(sizeof(struct borrowandretuen));
            qt->next=NULL;
        
            
            fscanf(file,"%s\t%s\t%s\t%s\t%s\n",qt->booknum,qt->name,qt->borrowdate,qt->retuendate,qt->managename);
            qe->next=qt;
            qe=qe->next;
        }
    }
}
void addbook()
{    struct bookinfo *qe;
    FILE *p;//文件指针
    int flag=1;//是否继续录入书籍信息
    struct bookinfo *newNode;

    struct bookinfo *currentNode;
    p=fopen("book.txt","a+");
    if(p==NULL)
    {
        printf("文件打开失败,请联系管理员\n");
        exit(1);
    }
    if(p!=NULL)
    {        
        qe=(struct bookinfo *)malloc(sizeof(struct bookinfo));
        qe->next=NULL;
        qe=bhead;
        while(qe->next!=NULL)
        {
            qe=qe->next;
        }
        currentNode=qe;    
        while(flag==1)
        {
                        newNode=(struct bookinfo *)malloc(sizeof(struct bookinfo));
                        newNode->next=NULL;
                        system("cls");
                        printf("请输入图书编号\n");
                        scanf("%s",newNode->booknum);
                        printf("请输入图书ISBN码\n");
                        scanf("%s",newNode->ISBN);
                        printf("请输入出版社\n");
                        scanf("%s",newNode->publisher);

            
            currentNode->next =newNode;//将新结点连接到原链表的最后一个结点上去
            currentNode=newNode;//currentNode结点后移,newNode变成当前结点
            fprintf(p,"%s\t%s\t%s\n",newNode->booknum,newNode->ISBN,newNode->publisher);
            
    
            printf("\t是否继续录入图书信息?\n");
            printf("\n");
            printf("\t\t1--Yes\t0--No\n");
            scanf("%d",&flag);
        }        
    }
    fclose(p);
}
void addreader()
{    struct readerinfo *qe;
    struct readerinfo *newNode;
    FILE *p;
    int flag=1;
    

    struct readerinfo *currentNode;
    p=fopen("reader.txt","a+");
    if(p==NULL)
    {
        printf("文件打开失败,请联系管理员\n");
        exit(1);
    }
    if(p!=NULL)
    {        
        qe=(struct readerinfo *)malloc(sizeof(struct readerinfo));
        qe->next=NULL;
        qe=rhead;
        while(qe->next!=NULL)
        {
            qe=qe->next;
        }
        currentNode=qe;    
        while(flag==1)
        {
            newNode=(struct readerinfo *)malloc(sizeof(struct readerinfo));
            newNode->next=NULL;
            system("cls");
            printf("请输入读者姓名\n");
            scanf("%s",newNode->name);
            printf("请输入身份证号码\n");
            scanf("%s",newNode->sfzid);
            printf("请输入手机号码\n");
            scanf("%s",newNode->phonenum);

            
            currentNode->next =newNode;
            currentNode=newNode;
            fprintf(p,"%s\t%s\t%s\n",newNode->name,newNode->phonenum,newNode->sfzid);
            
        
            printf("\t是否继续录入读者信息?\n");
            printf("\n");
            printf("\t\t1--Yes\t0--No\n");
            scanf("%d",&flag);
        }        
    }
    fclose(p);
}
void Borrowbooks()
{    struct borrowandretuen *qe;
    FILE *p;//文件指针
    int flag=1;//是否继续录入书籍信息
    struct borrowandretuen *newNode;

    struct borrowandretuen *currentNode;
    p=fopen("borrowandretuen.txt","a+");
    if(p==NULL)
    {
        printf("文件打开失败,请联系管理员\n");
        exit(1);
    }
    if(p!=NULL)
    {        
        qe=(struct borrowandretuen *)malloc(sizeof(struct borrowandretuen));
        qe->next=NULL;
        qe=brhead;
        while(qe->next!=NULL)
        {
            qe=qe->next;
        }
        currentNode=qe;    
        while(flag==1)
        {
                        newNode=(struct borrowandretuen *)malloc(sizeof(struct borrowandretuen));
                        newNode->next=NULL;
                        system("cls");
                        printf("请输入借阅证姓名\n");
                        scanf("%s",newNode->name);
                        printf("请输入图书编码码\n");
                        scanf("%s",newNode->booknum);
                        printf("请输入借阅日期\n");
                        scanf("%s",newNode->borrowdate);
                        printf("请输入归还日期\n");
                        scanf("%s",newNode->retuendate);

            
            currentNode->next =newNode;//将新结点连接到原链表的最后一个结点上去
            currentNode=newNode;//currentNode结点后移,newNode变成当前结点
            fprintf(p,"%s\t%s\t%s\n",newNode->name,newNode->booknum,newNode->borrowdate,newNode->retuendate);
            
    
            printf("\t是否继续录入信息?\n");
            printf("\n");
            printf("\t\t1--Yes\t0--No\n");
            scanf("%d",&flag);
        }        
    }
    fclose(p);
}
void rutuenbooks()
{
    char d[20];
    struct borrowandretuen *pe; 
    int flag=1;
    FILE *p;
    p=fopen("borrowandretuen.txt","a+");
    pe=brhead->next;
    if(p!=NULL)
    {
        while(flag==1)
        {
            printf("请输入借阅者的名字\n");
            scanf("%s",d);
            if(strcmp(d,pe->name)==0)
            {
                pe=brhead;
                fprintf(p,"%s\t%s\t%s\t%s\t%s\t\n",pe->name,pe->booknum,pe->borrowdate,pe->retuendate,pe->managename,pe->state);
            }else
            {
                printf("未找到该借阅者,请确认是否名字正确\n");
                printf("\t是否重新登记?\n");
                printf("\n");
                printf("\t\t1--Yes\t0--No\n");
                scanf("%d",&flag);
            }    
        }
    }
    fclose(p);    
}
void modifybookinfo()
{    struct bookinfo *pe; 
    char c[40];
    FILE *p;
    p=fopen("book.txt","w"); 
    printf("请输入要修改的图书编号\n");
    scanf("%s",c);
    pe=bhead->next;
    while(p!=NULL)
    {
        

        if(strcmp(c,pe->booknum)==0)
        {
            printf("找到要修改的图书,请按要求录入该图书新的信息:\n");
            printf("请输入新的图书编号:\n");            
            scanf("%s",&pe->booknum);
            fflush(stdin);
            printf("请输入新的图书ISBN:\n");
            scanf("%s",&pe->ISBN);
            printf("请输入新的图书出版社:\n");
            scanf("%s",&pe->publisher);
            break;
        }else
        {
            pe=pe->next;
        }
    }
    if(p==NULL)
    {
        printf("文件无法打开\n");
        return;    
    }else
    {
        pe=bhead;
        while(pe->next!=NULL)
        {    
            fprintf(p,"%s\t%s\t%s\n",pe->next->booknum,pe->next->ISBN,pe->next->publisher);                    
            pe=pe->next;
        }    
    }
    fclose(p);    
}
void modifyreader()
{    
    struct readerinfo *pe; 
    char c[40];
    FILE *p;
    p=fopen("reader.txt","w"); 
    printf("请输入要修改的读者姓名\n");
    scanf("%s",c);
    pe=rhead->next;
    while(p!=NULL)
    {

        if(strcmp(c,pe->name)==0)
        {
            printf("找到要修改读者,请按要求输入该读者新的信息:\n");
            printf("请输入新的读者姓名:\n");            
            scanf("%s",&pe->name);
            fflush(stdin);
            printf("请输入新的读者手机号码:\n");
            scanf("%s",&pe->phonenum);
            printf("请输入新的读者身份证号码:\n");
            scanf("%s",&pe->sfzid);
            break;
        }else
        {
            pe=pe->next;
        }
    }
    if(p==NULL)
    {
        printf("文件无法打开\n");
        return;    
    }else
    {
        pe=rhead;
        while(pe->next!=NULL)
        {    
            fprintf(p,"%s\t%s\t%s\n",pe->next->name,pe->next->phonenum,pe->next->sfzid);                    
            pe=pe->next;
        }    
    }
    fclose(p);    
}

void querybookinfo()
{    char b[20];
    struct bookinfo *qe;
    qe=bhead;
    FILE *p=fopen("book.txt","r");

    if(p!=NULL)
    {
        printf("请输入要查找的图书编号\n");
        scanf("%s",b);
        while(b)
        {    if(strcmp(b,qe->booknum)==0)
            printf("\t编号\tISBN\t出版社\n");
            printf("\t%s\t%s\t%s\n",qe->booknum,qe->ISBN,qe->publisher);
            break;        
        }    
    }    
    fclose(p);    
}
void queryreaderinfo()
{    char b[20];
    struct readerinfo *qe;
    qe=rhead;
    FILE *p=fopen("reader.txt","r");

    if(p!=NULL)
    {
        printf("请输入要查找的读者\n");
        scanf("%s",b);
        while(b)
        {    
            if(strcmp(b,qe->name)==0)
            printf("\t名字\t手机号码\t身份证号码\n");
            printf("\t%s\t%s\t%s\n",qe->name,qe->phonenum,qe->sfzid);
            break;        
        }    
    }    
    fclose(p);    
}
void Deletebookinfo()
{
    struct bookinfo d;
    FILE *p;
    p=fopen("book.txt","a+");
    struct bookinfo *qe=bhead;
    struct bookinfo *qt=bhead->next;
    if(p==NULL)
    {
        printf("文件打开失败,请联系管理员\n");
        exit(1);
    }
    if(p!=NULL)
    {
        printf("请输入要删除图书的编号\n");
        scanf("%s",d.booknum);
        if(strcmp(d.booknum,qt->booknum)==0)
        {
    
            qe->next=qt->next;
            free(qt);
            qt=NULL;            
        }        
    }fclose(p);
}
    

    
    





是删除的那部分跳过了吗