图书管理系统

#include <stdio.h>
#include <windows.h>
typedef struct User_data//用户
{
    char ID[20]; //账号
    char key[10];  //密码
    int flag;  //身份
    struct User_data *next;
}User;
typedef struct Reader_manage//读者
{
    char ID[20];
    char name[20];
    char address[20];
    char phone[15];
    int num; //可借书数
    int count;//已借书数
    struct Reader_manage *next;
}Reader;
typedef struct Book_manage//图书
{
    int num;//记录号
    int book_num;//书号
    char book_name[20];//书名
    char artist[20];//作者
    char press[20];//出版社
    int collect;//藏书量
    int lend;//借出量
    int p1;//指针1
    int p2;//指针2
    int p3;//指针3
    //struct Book_manage *next;
}Book;
typedef struct title//书名
{
    char title[20];
    int titleHead;
    int length;
}Title;
typedef struct author//作者
{
    char author[20];
    int authorHead;
    int length;
}Author;
typedef struct press//出版社
{
    char press[20];
    int pressHead;
    int length;
}Press;
typedef struct Lend_Return//借还书
{
    char ID[20];
    int book_num;
    char Lend[20];
    char Return[20];
    char remark[20];
    struct Lend_Return *next;
}LR;
//登录系统
void menu_1()  //主菜单
{
    printf("***************************************\n");
    printf("*        欢迎使用图书管理系统         *\n");
    printf("*        <1>登录                      *\n");
    printf("*        <2>注册                      *\n");
    printf("*        <3>退出                      *\n");
    printf("***************************************\n");
}
void menu_2()
{
    printf("***************************************\n");
    printf("*        登录方式                     *\n");
    printf("*        <1>图书管理员登录            *\n");
    printf("*        <2>系统管理员登录            *\n");
    printf("*        <3>读者登录                  *\n");
    printf("***************************************\n");
}
void menu_3()  //图书管理员所需菜单
{
    printf("***************************************\n");
    printf("*        <1>用户密码修改              *\n");
    printf("*        <2>读者管理                  *\n");
    printf("*        <3>图书管理                  *\n");
    printf("*        <4>图书流通管理              *\n");
    printf("*        <5>退出系统                  *\n");
    printf("***************************************\n");
}
void menu_4()  //系统管理员所需菜单
{
    printf("***************************************\n");
    printf("*        <1>用户管理                  *\n");
    printf("*        <2>图书信息查询              *\n");
    printf("*        <3>图书汇总统计              *\n");
    printf("*        <4>退出系统                  *\n");
    printf("***************************************\n");
}
void menu_5()  //普通读者所需菜单
{
    printf("***************************************\n");
    printf("*        <1>用户密码修改              *\n");//用户管理子系统下
    printf("*        <2>图书信息查询              *\n");//图书管理子系统下
    printf("*        <3>图书汇总统计              *\n");
    printf("*        <4>退出系统                  *\n");
    printf("***************************************\n");
}
void menu_6()  //用户管理子系统菜单
{
    printf("***************************************\n");
    printf("*        <1>用户信息输入              *\n");
    printf("*        <2>用户信息修改              *\n");
    printf("*        <3>用户信息删除              *\n");
    printf("*        <4>用户信息显示              *\n");
    printf("*        <5>用户密码修改              *\n");
    printf("*        <6>返回主菜单                *\n");
    printf("***************************************\n");
}
void menu_7()//读者管理子系统菜单
{
    printf("***************************************\n");
    printf("*        <1>读者信息输入              *\n");
    printf("*        <2>读者信息修改              *\n");
    printf("*        <3>读者信息删除              *\n");
    printf("*        <4>读者信息查询              *\n");
    printf("*        <5>读者信息显示              *\n");
    printf("*        <6>返回主菜单                *\n");
    printf("***************************************\n");
}
void menu_8()//图书管理子系统菜单
{
    printf("***************************************\n");
    printf("*        <1>图书信息输入              *\n");
    printf("*        <2>图书信息修改              *\n");
    printf("*        <3>图书信息查询              *\n");
    printf("*        <4>图书汇总统计              *\n");
    printf("*        <5>返回主菜单                *\n");
    printf("***************************************\n");
}
void menu_9()//图书信息查询菜单
{
    printf("***************************************\n");
    printf("*        <1>按书号查询                *\n");
    printf("*        <2>按书名查询                *\n");
    printf("*        <3>按作者查询                *\n");
    printf("*        <4>按出版社查询              *\n");
    printf("*        <5>返回主菜单                *\n");
    printf("***************************************\n");
}
void menu_10()
{
    printf("***************************************\n");
    printf("*        <1>借书处理                  *\n");
    printf("*        <2>还书处理                  *\n");
    printf("*        <3>返回主菜单                *\n");
    printf("***************************************\n");
}
/********************************函数声明******************************/
void land(); //登录
void Register();  //注册
User* link_1(); //建立链表-用户信息文件
void User_Manage();  //用户管理
void User_Mes_Input(User *head); //用户信息输入
void User_Mes_Change(User *head); //用户信息修改
void User_Mes_Delete(User *head); //用户信息删除
void User_Mes_Show(User *head); //用户信息显示
void User_Key_Change(User *head); //用户密码修改
Reader* link_2();//建立链表-读者信息文件
void Reader_Manage();//读者管理
void Reader_Mes_Input(Reader *head); //读者信息输入
void Reader_Mes_Change(Reader *head); //读者信息修改
void Reader_Mes_Delete(Reader *head); //读者信息删除
void Reader_Mes_Search(Reader *head); //读者信息查询
void Reader_Mes_Show(Reader *head); //读者信息显示
void Book_Manage(int len[],Book b[],Title t[],Author a[],Press p[]);//图书管理
void input(int len[],Book b[],Title t[],Author a[],Press p[]);//将文件信息读到数组中
void output(int len[],Book b[],Title t[],Author a[],Press p[]);//将数组中数据写到外存文件
void mysort(int len[],Book b[]);//插入排序
void Book_Mes_Input(int len[],Book b[],Title t[],Author a[],Press p[]); //图书信息输入
void Book_Mes_Change(int len[],Book b[]); //图书信息修改
void Book_Mes_Search(int len[],Book b[],Title t[],Author a[],Press p[]); //图书信息查询
void Summary(int len[],Book b[],Title t[],Author a[],Press p[]);//汇总统计
LR* link_3();//建立链表-借还书信息文件
void LR_Manage(int len[],Book b[],Title t[],Author a[],Press p[]);//图书流通管理
void Lend(LR *head,int len[],Book b[],Title t[],Author a[],Press p[]);//借书
void Return(LR *head,int len[],Book b[],Title t[],Author a[],Press p[]);//还书
/*******************************登录、注册*****************************/
void land() //登录
{
    User *head=link_1();
    char ID[20],id[20];
    char key[10],key1[10];
    int c,x,ch;
    int len[4]={0,0,0,0};
    Book b[20];
    Title t[20];
    Author a[20];
    Press p[20];
    system("cls");
    menu_2();
    printf("请选择登录方式:");
    scanf("%d",&x);
    FILE *fp;
    if((fp=fopen("D:\\用户信息文件.txt","r"))==NULL)
    {
        printf("文件打开错误!\n");
        exit(0);
    }
    int i;
    printf("温馨提示:您只有三次登陆机会,三次后系统将自动退出!\n");
    for(i=1;i<=3;i++)
    {
        rewind(fp);
        printf("请输入用户名:\n");
        scanf("%s",ID);
        printf("请输入密码:\n");
        scanf("%s",key);
        while(!feof(fp))
        {
            fscanf(fp,"%s%s %d",id,key1,&c);
            if(strcmp(ID,id)==0)
            {
                if(strcmp(key,key1)==0)
                {
                    system("cls");
                    fclose(fp);
                    if(x==1&&x==c)  //图书管理员
                    {
                        while(1)
                        {
                            menu_3();
                            printf("请输入您的选择:");
                            scanf("%d",&ch);
                            if(ch==1)
                                User_Key_Change(head);  //用户管理系统-用户信息修改
                            if(ch==2)
                                Reader_Manage();//读者管理
                            if(ch==3)
                                Book_Manage(len,b,t,a,p);//图书管理
                            if(ch==4)
                                LR_Manage(len,b,t,a,p);//图书流通管理
                            if(ch==5)
                                return ;
                        }
                    }
                    if(x==2&&x==c) //系统管理员
                    {
                        while(1)
                        {
                            input(len,b,t,a,p);
                            menu_4();
                            printf("请输入您的选择:");
                            scanf("%d",&ch);
                            if(ch==1)
                                User_Manage();//用户管理
                            if(ch==2)
                                Book_Mes_Search(len,b,t,a,p);
                            if(ch==3)
                                Summary(len,b,t,a,p);
                            if(ch==4)
                                return ;
                            output(len,b,t,a,p);
                        }
                    }
                    if(x==3&&x==c)//普通读者
                    {
                        while(1)
                        {
                            input(len,b,t,a,p);
                            menu_5();
                            printf("请输入您的选择:");
                            scanf("%d",&ch);
                            if(ch==1)
                                User_Key_Change(head); //用户管理系统-用户信息修改
                            if(ch==2)
                                Book_Mes_Search(len,b,t,a,p);
                            if(ch==3)
                                Summary(len,b,t,a,p);
                            if(ch==4)
                                return ;
                            output(len,b,t,a,p);
                        }
                    }
                }
            }
        }
        if(i<=2)
            printf("账号或密码错误!请重新输入!\n");
        else
            printf("您已输入三次,系统自动退出!\n");
    }
    fclose(fp);
}
void Register()  //注册
{
    User *head=link_1();
    char a[20];
    char b[10],c[10];
    FILE *fp;
    User *p=NULL,*q=head,*t=head;
    while(q!=NULL)
    {
        p=q;
        q=q->next;
    }
    q=(User*)malloc(sizeof(User));
    q->next=NULL;
    printf("开始注册用户:\n");
    while(1)
    {
        printf("请输入用户名:");
        scanf("%s",a);
        while(t!=NULL)
        {
            if(strcmp(a,t->ID)==0)
            {
                printf("该用户已存在,请重新输入账号!\n");
                break;
            }
            t=t->next;
        }
        if(t==NULL)
        {
            strcpy(q->ID,a);
            while(1)
            {
                printf("请输入密码:\n");
                scanf("%s",b);
                printf("请再次输入密码:\n");
                scanf("%s",c);
                if(strcmp(b,c)==0)
                {
                    strcpy(q->key,c);
                    printf("请输入用户身份:\n1.图书管理员\n2.系统管理员\n3.普通读者\n");
                    scanf("%d",&q->flag);
                    p->next=q;
                    if((fp=fopen("D:\\用户信息文件.txt","w"))==NULL)
                    {
                        printf ("文件打开失败!\n");
                        exit(0);
                    }
                    p=head;
                    while(p!=NULL)
                    {
                        fprintf(fp,"%s %s %d\n",p->ID,p->key,p->flag);
                        p=p->next;
                    }
                    printf("注册成功,请重新登陆!\n");
                    fclose(fp);
                    free(p);
                    free(q);
                    free(t);
                    return;
                }
                else
                    printf("两次密码输入不一致,请重新输入!\n");
            }
        }
    }
}
//图书管理信息系统
/******************************用户管理子系统*****************************/
User* link_1()
{
    FILE *fp;
 User *head=NULL,*p=NULL,*t=NULL;
 if((fp=fopen("D:\\用户信息文件.txt","r"))==NULL)
 {
  printf ("文件打开失败!\n");
  exit(0);
 }
 if((p=(User*)malloc(sizeof(User)))==NULL)
        exit(0);
 fscanf(fp,"%s%s%d\n",p->ID,p->key,&p->flag);
 p->next=NULL;
 head=p;
 while(!feof(fp))
    {
  t=p;
  if((p=(User*)malloc(sizeof(User)))==NULL)
            exit(0);
  fscanf(fp,"%s%s%d\n",p->ID,p->key,&p->flag);
        p->next=NULL;
  t->next=p;
 }
 fclose (fp);
 return head;
}
void User_Manage()  //用户管理主菜单
{
    int ch;
    User *head=link_1();
    system("cls");
    while(1)
    {
        menu_6();
        printf("请输入您的选择:");
        scanf("%d",&ch);
        if(ch==1)
        {
            User_Mes_Input(head);
            system("cls");
        }
        if(ch==2)
        {
            User_Mes_Change(head);
            system("cls");
        }
        if(ch==3)
        {
            User_Mes_Delete(head);
            system("cls");
        }
        if(ch==4)
            User_Mes_Show(head);
        if(ch==5)
        {
            User_Key_Change(head);
            system("cls");
        }
        if(ch==6)
        {
            system("cls");
            break;
        }
    }
}
void User_Mes_Input(User *head)  //用户信息输入
{
    char a[20];
    char b[10],c[10];
    FILE *fp;
    User *p=NULL,*q=head,*t=head;
    while(q!=NULL)
    {
        p=q;
        q=q->next;
    }
    q=(User*)malloc(sizeof(User));
    q->next=NULL;
    while(1)
    {
        printf("请输入用户名:");
        scanf("%s",a);
        while(t!=NULL)
        {
            if(strcmp(a,t->ID)==0)
            {
                printf("该用户已存在,请重新输入账号!\n");
                break;
            }
            t=t->next;
        }
        if(t==NULL)
        {
            strcpy(q->ID,a);
            while(1)
            {
                printf("请输入密码:\n");
                scanf("%s",b);
                printf("请再次输入密码:\n");
                scanf("%s",c);
                if(strcmp(b,c)==0)
                {
                    strcpy(q->key,c);
                    printf("请输入用户身份:\n1.图书管理员\n2.系统管理员\n3.普通读者\n");
                    scanf("%d",&q->flag);
                    p->next=q;
                    if((fp=fopen("D:\\用户信息文件.txt","w"))==NULL)
                    {
                        printf ("文件打开失败!\n");
                        exit(0);
                    }
                    p=head;
                    while(p!=NULL)
                    {
                        fprintf(fp,"%s %s %d\n",p->ID,p->key,p->flag);
                        p=p->next;
                    }
                    printf("用户信息输入成功!\n");
                    fclose(fp);
                    free(p);
                    free(q);
                    free(t);
                    return;
                }
                else
                    printf("密码错误,请重新输入!\n");
            }
        }
    }
}
void User_Mes_Change(User *head)  //用户信息修改
{
    char id[20];
    char b[20];
    int ch;
    FILE *fp;
    User *p=head;
    while(1)
    {
        p=head;
        printf("请输入要修改的用户ID:");
        scanf("%s",id);
        while(p!=NULL)
        {
            if(strcmp(p->ID,id)==0)
            {
                printf("请输入您要修改的信息:\n1.ID\n2.密码\n3.身份\n");
                scanf("%d",&ch);
                if(ch==1)
                {
                    printf("请输入修改后的ID:");
                    scanf("%s",p->ID);
                }
                if(ch==2)
                {
                    printf("请输入原密码:");
                    scanf("%s",b);
                    if(strcmp(b,p->key)==0)
                    {
                        printf("请输入修改后密码:");
                        scanf("%s",p->key);
                    }
                    else
                    {
                        while(1)
                        {
                            printf("原密码错误,请重新输入原密码:");
                            scanf("%s",b);
                            if(strcmp(b,p->key)==0)
                                break;
                        }
                        printf("请输入修改后密码:");
                        scanf("%s",p->key);
                    }
                }
                if(ch==3)
                {
                    printf("请输入修改后用户身份:\n1.图书管理员\n2.系统管理员\n3.普通用户\n");
                    scanf("%d",&p->flag);
                }
                if((fp=fopen("D:\\用户信息文件.txt","w"))==NULL)
                {
                    printf("文件打开错误!\n");
                    exit(0);
                }
                p=head;
                while(p!=NULL)
                {
                    fprintf(fp,"%s %s %d\n",p->ID,p->key,p->flag);
                    p=p->next;
                }
                fclose(fp);
                free(p);
                printf("修改成功!\n");
                return ;
            }
            p=p->next;
        }
        printf("该账号不存在!\n");
    }
}
void User_Mes_Delete(User *head)  //用户信息删除
{
    User *p=head,*q=NULL;
    char id[20];
    int ch;
    FILE *fp;
    while(1)
    {
        p=head;
        printf("请输入需要删除的用户的ID:");
        scanf("%s",id);
        while(p!=NULL)
        {
            if(strcmp(id,p->ID)==0)
            {
                printf("%s  %s  %d\n",p->ID,p->key,p->flag);
                printf("确认删除该用户的信息吗?\n1.确认\n2.取消\n");
                scanf("%d",&ch);
                if(ch==1)
                {
                    if(p==head)
                        head=p->next;
                    else
                        q->next=p->next;
                    free(p);
                    p=head;
                    if((fp=fopen("D:\\用户信息文件.txt","w"))==NULL)
                    {
                        printf("文件打开错误!\n");
                        exit(0);
                    }
                    while(p!=NULL)
                    {
                        fprintf(fp,"%s %s %d\n",p->ID,p->key,p->flag);
                        p=p->next;
                    }
                    printf("删除成功!\n");
                    fclose(fp);
                    free(p);
                    free(q);
                    return ;
                }
                if(ch==2)
                {
                    free(p);
                    free(q);
                    return ;
                }
            }
            q=p;
            p=p->next;
        }
        printf("该用户不存在,请重新输入!\n");
    }
}
void User_Mes_Show(User *head)  //用户信息显示
{
    User *p=head;
    while(p!=NULL)
    {
        printf("%-10s%-10s%-5d\n",p->ID,p->key,p->flag);
        p=p->next;
    }
    free(p);
}
void User_Key_Change(User *head)  //用户密码修改
{
    char a[20];
    char b[10],c[10],d[10];
    FILE *fp;
    User *p=head,*q=NULL;
    while(1)
    {
        p=head;
        printf("请输入需要修改的用户名:");
        scanf("%s",a);
        while(p!=NULL)
        {
            if(strcmp(a,p->ID)==0)
            {
                while(1)
                {
                    printf("请输入原密码:");
                    scanf("%s",b);
                    if(strcmp(b,p->key)==0)
                    {
                        while(1)
                        {
                            printf("请输入修改后的密码:");
                            scanf("%s",c);
                            printf("请再次输入密码:");
                            scanf("%s",d);
                            if(strcmp(c,d)==0)
                            {
                                strcpy(p->key,d);
                                if((fp=fopen("D:\\用户信息文件.txt","w"))==NULL)
                                {
                                    printf("文件打开错误!\n");
                                    exit(0);
                                }
                                q=head;
                                while(q!=NULL)
                                {
                                    fprintf(fp,"%s %s %d\n",q->ID,q->key,q->flag);
                                    q=q->next;
                                }
                                fclose(fp);
                                free(p);
                                free(q);
                                printf("密码修改成功!\n");
                                return ;
                            }
                            else
                                printf("两次密码不一致,请重新输入!\n");
                        }
                    }
                    else
                        printf("原密码输入错误,请重新输入!\n");
                }
            }
            p=p->next;
        }
        printf("该用户不存在,请重新输入!\n");
    }
}
/******************************读者管理子系统*****************************/
Reader* link_2()//建立链表-读者信息文件
{
    FILE *fp;
 Reader *head=NULL,*p=NULL,*t=NULL;
 if((fp=fopen("D:\\读者信息文件.txt","r"))==NULL)
 {
  printf ("文件打开失败!\n");
  exit(0);
 }
 if((p=(Reader*)malloc(sizeof(Reader)))==NULL)
        exit(0);
 fscanf(fp,"%s%s%s%s%d%d\n",p->ID,p->name,p->address,p->phone,&p->num,&p->count);
 p->next=NULL;
 head=p;
 while(!feof(fp))
    {
  t=p;
  if((p=(Reader*)malloc(sizeof(Reader)))==NULL)
            exit(0);
  fscanf(fp,"%s%s%s%s%d%d\n",p->ID,p->name,p->address,p->phone,&p->num,&p->count);
        p->next=NULL;
  t->next=p;
 }
 return head;
}
void Reader_Manage()//读者管理
{
    int ch;
    system("cls");
    while(1)
    {
        Reader *head=link_2();
        menu_7();
        printf("请输入您的选择:");
        scanf("%d",&ch);
        if(ch==1)
        {
            Reader_Mes_Input(head);
            system("cls");
        }
        if(ch==2)
        {
            Reader_Mes_Change(head);
            system("cls");
        }
        if(ch==3)
        {
            Reader_Mes_Delete(head);
            system("cls");
        }
        if(ch==4)
            Reader_Mes_Search(head);
        if(ch==5)
            Reader_Mes_Show(head);
        if(ch==6)
        {
            system("cls");
            break;
        }
    }
}
void Reader_Mes_Input(Reader *head) //读者信息输入
{
    char a[20];
    FILE *fp;
    Reader *p=NULL,*q=head,*t=head;
    while(q!=NULL)
    {
        p=q;
        q=q->next;
    }
    q=(Reader*)malloc(sizeof(Reader));
    q->next=NULL;
    while(1)
    {
        printf("请输入用户名:");
        scanf("%s",a);
        while(t!=NULL)
        {
            if(strcmp(a,t->ID)==0)
            {
                printf("该用户已存在,请重新输入账号!\n");
                break;
            }
            t=t->next;
        }
        if(t==NULL)
        {
            strcpy(q->ID,a);
            printf("请输入读者名:");
            scanf("%s",q->name);
            printf("请输入单位名称:");
            scanf("%s",q->address);
            printf("请输入联系方式:");
            scanf("%s",q->phone);
            printf("请输入可借书数:");
            scanf("%d",&q->num);
            printf("请输入已借书数:");
            scanf("%d",&q->count);
            p->next=q;
            if((fp=fopen("D:\\读者信息文件.txt","w"))==NULL)
            {
                printf ("文件打开失败!\n");
                exit(0);
            }
            p=head;
            while(p!=NULL)
            {
                fprintf(fp,"%s %s %s %s %d %d\n",p->ID,p->name,p->address,p->phone,p->num,p->count);
                p=p->next;
            }
            printf("读者信息输入成功!\n");
            free(p);
            free(q);
            free(t);
            fclose(fp);
            return;
        }
    }
}
void Reader_Mes_Change(Reader *head) //读者信息修改
{
    Reader *p=head;
    char id[20];
    int ch;
    FILE *fp;
    while(1)
    {
        p=head;
        printf("请输入需要修改的读者账号:");
        scanf("%s",id);
        while(p!=NULL)
        {
            if(strcmp(id,p->ID)==0)
            {
                printf("请输入需要修改的内容:\n1.账号\n2.姓名\n3.单位地址\n4.手机号码\n5.可借书数\n6.已借书数\n");
                scanf("%d",&ch);
                if(ch==1)
                {
                    printf("输入修改后的账号:");
                    scanf("%s",p->ID);
                }
                if(ch==2)
                {
                    printf("输入修改后的姓名:");
                    scanf("%s",p->name);
                }
                if(ch==3)
                {
                    printf("输入修改后的单位地址:");
                    scanf("%s",p->address);
                }
                if(ch==4)
                {
                    printf("输入修改后的手机号码:");
                    scanf("%s",p->phone);
                }
                if(ch==5)
                {
                    printf("输入修改后的可借书数(5/10):");
                    scanf("%d",&p->num);
                }
                if(ch==6)
                {
                    printf("输入修改后的已借书数:");
                    scanf("%d",&p->count);
                }
                p=head;
                if((fp=fopen("D:\\读者信息文件.txt","w"))==NULL)
                {
                    printf("文件打开错误!\n");
                    exit(0);
                }
                while(p!=NULL)
                {
                    fprintf(fp,"%s %s %s %s %d %d\n",p->ID,p->name,p->address,p->phone,p->num,p->count);
                    p=p->next;
                }
                printf("修改成功!\n");
                fclose(fp);
                free(p);
                return ;
            }
            p=p->next;
        }
        printf("该账号不存在,请重新输入!\n");
    }
}
void Reader_Mes_Delete(Reader *head) //读者信息删除
{
    Reader *p=head,*q=NULL;
    char id[20];
    int ch;
    FILE *fp;
    while(1)
    {
        p=head;
        printf("请输入需要删除的读者ID:");
        scanf("%s",id);
        while(p!=NULL)
        {
            if(strcmp(id,p->ID)==0)
            {
                printf("%s %s %s %s %d %d\n",p->ID,p->name,p->address,p->phone,p->num,p->count);
                printf("确认删除该用户的信息吗?\n1.确认\n2.取消\n");
                scanf("%d",&ch);
                if(ch==1)
                {
                    if(p==head)
                        head=p->next;
                    else
                        q->next=p->next;
                    free(p);
                    p=head;
                    if((fp=fopen("D:\\读者信息文件.txt","w"))==NULL)
                    {
                        printf("文件打开错误!\n");
                        exit(0);
                    }
                    while(p!=NULL)
                    {
                        fprintf(fp,"%s %s %s %s %d %d\n",p->ID,p->name,p->address,p->phone,p->num,p->count);
                        p=p->next;
                    }
                    printf("删除成功!\n");
                    free(p);
                    free(q);
                    fclose(fp);
                    return ;
                }
                if(ch==2)
                    return ;
            }
            q=p;
            p=p->next;
        }
        printf("该账号不存在,请重新输入!\n");
    }
}
void Reader_Mes_Search(Reader *head) //读者信息查询
{
    Reader *p=head;
    char id[20],myname[20],myphone[15];
    FILE *fp;
    int ch;
    printf("请输入查询方式:\n1.读者号\n2.读者姓名\n3.手机号码\n");
    scanf("%d",&ch);
    while(1)
    {
        if(ch==1)
        {
            p=head;
            printf("请输入需要查询的读者的账号:");
            scanf("%s",id);
            while(p!=NULL)
            {
                if(strcmp(id,p->ID)==0)
                {
                    printf("已查询,该读者的信息为:\n");
                    printf("%s %s %s %s %d %d\n",p->ID,p->name,p->address,p->phone,p->num,p->count);
                    free(p);
                    return;
                }
                p=p->next;
            }
            printf("该读者不存在,请重新输入!\n");
        }
        if(ch==2)
        {
            p=head;
            printf("请输入需要查询的读者姓名:");
            scanf("%s",myname);
            while(p!=NULL)
            {
                if(strcmp(myname,p->name)==0)
                {
                    printf("已查询,该读者的信息为:\n");
                    printf("%s %s %s %s %d %d\n",p->ID,p->name,p->address,p->phone,p->num,p->count);
                    free(p);
                    return;
                }
                p=p->next;
            }
            printf("该读者不存在,请重新输入!\n");
        }
        if(ch==3)
        {
            p=head;
            printf("请输入需要查询的读者手机号码:");
            scanf("%s",myphone);
            while(p!=NULL)
            {
                if(strcmp(myphone,p->phone)==0)
                {
                    printf("已查询,该读者的信息为:\n");
                    printf("%s %s %s %s %d %d\n",p->ID,p->name,p->address,p->phone,p->num,p->count);
                    free(p);
                    return;
                }
                p=p->next;
            }
            printf("该读者不存在,请重新输入!\n");
        }
    }
}
void Reader_Mes_Show(Reader *head) //读者信息显示
{
    Reader *p=head,*q=NULL;
    FILE *fp;
    Reader *t;
    char myID[20];
    char myname[20];
    char myaddress[20];
    char myphone[15];
    int mynum; //可借书数
    int mycount;//已借书数
    for(p=head;p->next!=NULL;p=p->next)
    {
        t=p;
        for(q=p->next;q!=NULL;q=q->next)
        {
            if(strcmp(t->name,q->name)>0)
            {
                t=q;
            }
            if(p!=t)
            {
                strcpy(myID,p->ID);
                strcpy(myname,p->name);
                strcpy(myaddress,p->address);
                strcpy(myphone,p->phone);
                mynum=p->num;
                mycount=p->count;
                strcpy(p->ID,t->ID);
                strcpy(p->name,t->name);
                strcpy(p->address,t->address);
                strcpy(p->phone,t->phone);
                p->num=t->num;
                p->count=t->count;
                strcpy(t->ID,myID);
                strcpy(t->name,myname);
                strcpy(t->address,myaddress);
                strcpy(t->phone,myphone);
                t->num=mynum;
                t->count=mycount;
            }
        }
    }
    p=head;
    if((fp=fopen("D:\\读者信息文件.txt","w"))==NULL)
    {
        printf("文件打开错误!\n");
        exit(0);
    }
    while(p!=NULL)
    {
        fprintf(fp,"%s %s %s %s %d %d\n",p->ID,p->name,p->address,p->phone,p->num,p->count);
        p=p->next;
    }
    p=head;
    while(p!=NULL)
    {
        printf("%10s%10s%12s%15s%5d%5d\n",p->ID,p->name,p->address,p->phone,p->num,p->count);
        p=p->next;
    }
    fclose(fp);
    free(p);
    free(q);
    free(t);
}
/******************************图书管理子系统*****************************/
void input(int len[],Book b[],Title t[],Author a[],Press p[])//将文件信息读到数组中
{
    FILE *fp;
    int i;
    if((fp=fopen("D:\\图书主文件.txt","r"))==NULL)//读取图书主文件信息
    {
        printf("文件打开失败!1\n");
        exit(0);
    }
    for(i=0;!feof(fp);i++)
    {
        fscanf(fp,"%d%d%s%s%s%d%d%d%d%d\n",&b[i].num,&b[i].book_num,b[i].book_name,b[i].artist,b[i].press,&b[i].collect,&b[i].lend,&b[i].p1,&b[i].p2,&b[i].p3);
    }
    len[0]=i;
    fclose(fp);
    if((fp=fopen("D:\\书名次关键字索引表.txt","r"))==NULL)//读取书名次关键字索引表
    {
        printf("文件打开失败!2\n");
        exit(0);
    }
    for(i=0;!feof(fp);i++)
    {
        fscanf(fp,"%s%d%d\n",t[i].title,&t[i].titleHead,&t[i].length);
    }
    len[1]=i;
    fclose(fp);
    if((fp=fopen("D:\\作者次关键字索引表.txt","r"))==NULL)//读取作者次关键字索引表
    {
        printf("文件打开失败!3\n");
        exit(0);
    }
    for(i=0;!feof(fp);i++)
    {
        fscanf(fp,"%s%d%d\n",a[i].author,&a[i].authorHead,&a[i].length);
    }
    len[2]=i;
    fclose(fp);
    if((fp=fopen("D:\\出版社次关键字索引表.txt","r"))==NULL)//读取出版社次关键字索引表
    {
        printf("文件打开失败!4\n");
        exit(0);
    }
    for(i=0;!feof(fp);i++)
    {
        fscanf(fp,"%s%d%d\n",p[i].press,&p[i].pressHead,&p[i].length);
    }
    len[3]=i;
    fclose(fp);
}
void output(int len[],Book b[],Title t[],Author a[],Press p[])//将数组中数据写到外存文件
{
    FILE *fp;
    int i;
    if((fp=fopen("D:\\图书主文件.txt","w"))==NULL)
    {
        printf("文件打开失败!\n");
        exit(0);
    }
    for(i=0;i<len[0];i++)
    {
        fprintf(fp,"%d %d %s %s %s %d %d %d %d %d\n",b[i].num,b[i].book_num,b[i].book_name,b[i].artist,b[i].press,b[i].collect,b[i].lend,b[i].p1,b[i].p2,b[i].p3);
    }
    fclose(fp);
    if((fp=fopen("D:\\书名次关键字索引表.txt","w"))==NULL)
    {
        printf("文件打开失败!\n");
        exit(0);
    }
    for(i=0;i<len[1];i++)
    {
        fprintf(fp,"%s %d %d\n",t[i].title,t[i].titleHead,t[i].length);
    }
    fclose(fp);
    if((fp=fopen("D:\\作者次关键字索引表.txt","w"))==NULL)
    {
        printf("文件打开失败!\n");
        exit(0);
    }
    for(i=0;i<len[2];i++)
    {
        fprintf(fp,"%s %d %d\n",a[i].author,a[i].authorHead,a[i].length);
    }
    fclose(fp);
    if((fp=fopen("D:\\出版社次关键字索引表.txt","w"))==NULL)
    {
        printf("文件打开失败!\n");
        exit(0);
    }
    for(i=0;i<len[3];i++)
    {
        fprintf(fp,"%s %d %d\n",p[i].press,p[i].pressHead,p[i].length);
    }
    fclose(fp);
}
void Book_Manage(int len[],Book b[],Title t[],Author a[],Press p[])//图书管理
{
    int ch;
    system("cls");
    input(len,b,t,a,p);
    while(1)
    {
        menu_8();
        mysort(len,b);
        printf("请输入您的选择:");
        scanf("%d",&ch);
        if(ch==1)
        {
            Book_Mes_Input(len,b,t,a,p);
            system("cls");
        }
        if(ch==2)
        {
            Book_Mes_Change(len,b);
            system("cls");
        }
        if(ch==3)
            Book_Mes_Search(len,b,t,a,p);
        if(ch==4)
            Summary(len,b,t,a,p);
        if(ch==5)
        {
            system("cls");
            break;
        }
        output(len,b,t,a,p);
    }
}
void mysort(int len[],Book b[])//插入排序
{
    int i,j;
    Book temp;
    for(i=1;i<len[0];i++)
    {
        j=i-1;
        temp=b[i];
        while(j>=0&&(temp.book_num<b[j].book_num))
        {
            b[j+1]=b[j];
            j--;
        }
        b[j+1]=temp;
    }
}
void Book_Mes_Input(int len[],Book b[],Title t[],Author a[],Press p[]) //图书信息输入
{
    int i,j=0;
    Book temp;
    printf("请输入:\n");
    printf("书号:");
    scanf("%d",&temp.book_num);
    printf("书名:");
    scanf("%s",temp.book_name);
    printf("作者:");
    scanf("%s",temp.artist);
    printf("出版社:");
    scanf("%s",temp.press);
    printf("藏书量:");
    scanf("%d",&temp.collect);
    printf("借出数:");
    scanf("%d",&temp.lend);
    if(len[0]==0)
    {
        b[0].num=1;
        b[0].book_num=temp.book_num;
        strcpy(b[0].book_name,temp.book_name);
        strcpy(b[0].artist,temp.artist);
        strcpy(b[0].press,temp.press);
        b[0].collect=temp.collect;
        b[0].lend=temp.lend;
        b[0].p1=0;
        b[0].p2=0;
        b[0].p3=0;
        strcpy(t[0].title,b[0].book_name);//书名次关键字索引表
        t[0].titleHead=1;
        t[0].length=1;
        strcpy(a[0].author,b[0].artist);//作者次关键字索引表
        a[0].authorHead=1;
        a[0].length=1;
        strcpy(p[0].press,b[0].press);//出版社次关键字索引表
        p[0].pressHead=1;
        p[0].length=1;
    }
    else
    {
        while(1)
        {
            for(i=0;i<len[0];i++)
            {
                if(temp.book_num==b[i].book_num||strcmp(temp.book_name,b[i].book_name)==0&&strcmp(temp.artist,b[i].artist)==0&&strcmp(temp.press,b[i].press)==0)
                {
                    printf("该图书信息已存在,请重新输入!\n");
                    printf("请输入:\n");
                    printf("书号:");
                    scanf("%d",&temp.book_num);
                    printf("书名:");
                    scanf("%s",temp.book_name);
                    printf("作者:");
                    scanf("%s",temp.artist);
                    printf("出版社:");
                    scanf("%s",temp.press);
                    printf("藏书量:");
                    scanf("%d",&temp.collect);
                    printf("借出数:");
                    scanf("%d",&temp.lend);
                    break;
                }
            }
            if(i==len[0])
            {
                b[len[0]].num=len[0]+1;
                temp.num=b[len[0]].num;
                b[len[0]].book_num=temp.book_num;
                strcpy(b[len[0]].book_name,temp.book_name);
                strcpy(b[len[0]].artist,temp.artist);
                strcpy(b[len[0]].press,temp.press);
                b[len[0]].collect=temp.collect;
                b[len[0]].lend=temp.lend;
                //len[0]++;
                break;
            }
        }
        /*
        b[len[0]].num=len[0]+1;
        temp.num=b[len[0]].num;
        b[len[0]].book_num=temp.book_num;
        strcpy(b[len[0]].book_name,temp.book_name);
        strcpy(b[len[0]].artist,temp.artist);
        strcpy(b[len[0]].press,temp.press);
        b[len[0]].collect=temp.collect;
        b[len[0]].lend=temp.lend;*/
        for(i=0;i<len[1];i++)//书名次关键字索引表
        {
            if(strcmp(temp.book_name,t[i].title)==0)
            {
                b[len[0]].p1=t[i].titleHead;
                t[i].titleHead=b[len[0]].num;
                t[i].length=t[i].length+1;
                break;
            }
        }
        if(i==len[1])//没有找到相同的,重新建立一个
        {
            b[len[0]].p1=0;
            strcpy(t[len[1]].title,temp.book_name);
            t[len[1]].titleHead=temp.num;
            t[len[1]].length=1;
            len[1]++;
        }
        for(i=0;i<len[2];i++)//作者名次关键字索引表
        {
            if(strcmp(temp.artist,a[i].author)==0)
            {
                b[len[0]].p2=a[i].authorHead;
                a[i].authorHead=temp.num;
                a[i].length++;
                break;
            }
        }
        if(i==len[2])
        {
            b[len[0]].p2=0;
            strcpy(a[len[2]].author,temp.artist);
            a[len[2]].authorHead=temp.num;
            a[len[2]].length=1;
            len[2]++;
        }
        for(i=0;i<len[3];i++)//出版社次关键字索引表
        {
            if(strcmp(temp.press,p[i].press)==0)
            {
                b[len[0]].p3=p[i].pressHead;
                p[i].pressHead=temp.num;
                p[i].length++;
                break;
            }
        }
        if(i==len[3])
        {
            b[len[0]].p3=0;
            strcpy(p[len[3]].press,temp.press);
            p[len[3]].pressHead=temp.num;
            p[len[3]].length=1;
            len[3]++;
        }
    }
    len[0]++;
   // mysort(len,b);
}
void Book_Mes_Change(int len[],Book b[]) //图书信息修改
{
    int i,ch;
    int num;
    int x,y;
    while(1)
    {
        printf("请输入需要修改信息的图书的书号:");//无法通过查找书名等方式来修改,只能查找书号
        scanf("%d",&num);
        for(i=0;i<len[0];i++)
        {
            if(num==b[i].book_num)
            {
                printf("请输入需要修改的内容:\n");
                printf("1.藏书量\n2.借出数\n");
                scanf("%d",&ch);
                if(ch==1)
                {
                    printf("请输入修改后的藏书量:");
                    scanf("%d",&x);
                    b[i].collect=x;
                    return ;
                }
                if(ch==2)
                {
                    printf("请输入修改后的借出量:");
                    scanf("%d",&y);
                    b[i].lend=y;
                    return ;
                }
            }
        }
        printf("该图书不存在,请重新输入!\n");
    }
}
void Book_Mes_Search(int len[],Book b[],Title t[],Author a[],Press p[]) //图书信息查询
{
    int ch,i,j,k,m,x;
    int shuhao;
    char shuming[20],zuozhe[20],chubanshe[20];
    system("cls");
    while(1)
    {
        menu_9();
        printf("请输入您的选择:");
        scanf("%d",&ch);
        if(ch==1)//书号
        {
            printf("请输入需要查询的书号:");
            scanf("%d",&shuhao);
            int low=0,high=len[0]-1,mid;
            while(low<=high)
            {
                mid=(low+high)/2;
                //printf("%d\n",mid);
                if(shuhao==b[mid].book_num)
                {
                    printf("您所查找的信息如下:\n");
                    printf("%4d%6d%10s%8s%12s%4d%4d%4d%4d%4d\n",b[mid].num,b[mid].book_num,b[mid].book_name,b[mid].artist,b[mid].press,b[mid].collect,b[mid].lend,b[mid].p1,b[mid].p2,b[mid].p3);
                    return ;
                }
                else if(shuhao>b[mid].book_num)
                    low=mid+1;
                else
                    high=mid-1;
            }
            printf("未找到该图书信息!\n");
        }
        if(ch==2)//书名
        {
            printf("请输入需要查询的书名:");
            scanf("%s",shuming);
            for(i=0;i<len[1];i++)
            {
                if(strcmp(shuming,t[i].title)==0)
                {
                    j=t[i].titleHead;
                    for(m=0;m<len[0];m++)
                    {
                         if(j==b[m].num)
                         {
                            printf("%4d%6d%10s%8s%12s%4d%4d%4d%4d%4d\n",b[m].num,b[m].book_num,b[m].book_name,b[m].artist,b[m].press,b[m].collect,b[m].lend,b[m].p1,b[m].p2,b[m].p3);
                            x=m;
                         }
                    }
                    if(t[i].length>1)
                    {
                        for(k=0;k<t[i].length-1;k++)
                        {
                            j=b[x].p1;
                            for(m=0;m<len[0];m++)
                            {
                                if(j==b[m].num)
                                {
                                    printf("%4d%6d%10s%8s%12s%4d%4d%4d%4d%4d\n",b[m].num,b[m].book_num,b[m].book_name,b[m].artist,b[m].press,b[m].collect,b[m].lend,b[m].p1,b[m].p2,b[m].p3);
                                    x=m;
                                }
                            }
                        }
                        return ;
                    }
                }
            }
            printf("未找到该图书信息!\n");
        }
        if(ch==3)//作者
        {
            printf("请输入需要查询的作者:");
            scanf("%s",zuozhe);
            for(i=0;i<len[2];i++)
            {
                if(strcmp(zuozhe,a[i].author)==0)
                {
                    j=a[i].authorHead;
                    for(m=0;m<len[0];m++)
                    {
                         if(j==b[m].num)
                         {
                            printf("%4d%6d%10s%8s%12s%4d%4d%4d%4d%4d\n",b[m].num,b[m].book_num,b[m].book_name,b[m].artist,b[m].press,b[m].collect,b[m].lend,b[m].p1,b[m].p2,b[m].p3);
                            x=m;
                         }
                    }
                    if(a[i].length>1)
                    {
                        for(k=0;k<a[i].length-1;k++)
                        {
                            j=b[x].p2;
                            for(m=0;m<len[0];m++)
                            {
                                if(j==b[m].num)
                                {
                                    printf("%4d%6d%10s%8s%12s%4d%4d%4d%4d%4d\n",b[m].num,b[m].book_num,b[m].book_name,b[m].artist,b[m].press,b[m].collect,b[m].lend,b[m].p1,b[m].p2,b[m].p3);
                                    x=m;
                                }
                            }
                        }
                        return ;
                    }
                }
            }
            printf("未找到该图书信息!\n");
        }
        if(ch==4)//出版社
        {
            printf("请输入需要查询的出版社:");
            scanf("%s",chubanshe);
            for(i=0;i<len[2];i++)
            {
                if(strcmp(chubanshe,p[i].press)==0)
                {
                    j=p[i].pressHead;
                    for(m=0;m<len[0];m++)
                    {
                         if(j==b[m].num)
                         {
                            printf("%4d%6d%10s%8s%12s%4d%4d%4d%4d%4d\n",b[m].num,b[m].book_num,b[m].book_name,b[m].artist,b[m].press,b[m].collect,b[m].lend,b[m].p1,b[m].p2,b[m].p3);
                            x=m;
                         }
                    }
                    if(p[i].length>1)
                    {
                        for(k=0;k<p[i].length-1;k++)
                        {
                            j=b[x].p3;
                            for(m=0;m<len[0];m++)
                            {
                                if(j==b[m].num)
                                {
                                    printf("%4d%6d%10s%8s%12s%4d%4d%4d%4d%4d\n",b[m].num,b[m].book_num,b[m].book_name,b[m].artist,b[m].press,b[m].collect,b[m].lend,b[m].p1,b[m].p2,b[m].p3);
                                    x=m;
                                }
                            }
                        }
                        return ;
                    }
                }
            }
            printf("未找到该图书信息!\n");
        }
        if(ch==5)
            return;
    }
}
void Summary(int len[],Book b[],Title t[],Author a[],Press p[])//汇总统计
{
    int i,ch;
    printf("请选择汇总方式:\n1.图书汇总\n2.书名汇总\n3.作者汇总\n4.出版社汇总\n请输入:");
    scanf("%d",&ch);
    if(ch==1)
    {
        printf("***********************图书汇总*******************************\n");
        for(i=0;i<len[0];i++)
            printf("%4d%6d%10s%8s%12s%4d%4d%4d%4d%4d\n",b[i].num,b[i].book_num,b[i].book_name,b[i].artist,b[i].press,b[i].collect,b[i].lend,b[i].p1,b[i].p2,b[i].p3);
        printf("**************************************************************\n");
    }
    if(ch==2)
    {
        printf("********书名汇总********\n");
        for(int i=0;i<len[1];i++)
            printf("%10s%4d%4d\n",t[i].title,t[i].titleHead,t[i].length);
        printf("************************\n");
    }
    if(ch==3)
    {
        printf("********作者汇总********\n");
        for(int i=0;i<len[2];i++)
            printf("%10s%4d%4d\n",a[i].author,a[i].authorHead,a[i].length);
        printf("************************\n");
    }
    if(ch==4)
    {
        printf("********出版社汇总******\n");
        for(int i=0;i<len[3];i++)
            printf("%10s%4d%4d\n",p[i].press,p[i].pressHead,p[i].length);
        printf("************************\n");
    }
}
/******************************图书流通管理子系统*************************/
LR* link_3()//建立链表-借还书信息文件
{
    FILE *fp;
 LR *head=NULL,*p=NULL,*t=NULL;
 if((fp=fopen("D:\\借还书信息文件.txt","r"))==NULL)
 {
  printf ("文件打开失败!\n");
  exit(0);
 }
 if((p=(LR*)malloc(sizeof(LR)))==NULL)
        exit(0);
 fscanf(fp,"%s%d%s%s%s\n",p->ID,&p->book_num,p->Lend,p->Return,p->remark);
 p->next=NULL;
 head=p;
 while(!feof(fp))
    {
  t=p;
  if((p=(LR*)malloc(sizeof(LR)))==NULL)
            exit(0);
  fscanf(fp,"%s%d%s%s%s\n",p->ID,&p->book_num,p->Lend,p->Return,p->remark);
        p->next=NULL;
  t->next=p;
 }
 fclose (fp);
 return head;
}
void LR_Manage(int len[],Book b[],Title t[],Author a[],Press p[])//图书流通管理
{
    int ch;
    LR *head=link_3();
    system("cls");
    while(1)
    {
        menu_10();
        printf("请输入您的选择:");
        scanf("%d",&ch);
        if(ch==1)
            Lend(head,len,b,t,a,p);
        if(ch==2)
            Return(head,len,b,t,a,p);
        if(ch==3)
        {
            system("cls");
            break;
        }
    }
}
void Lend(LR *head,int len[],Book b[],Title t[],Author a[],Press p[])//借书
{
    FILE *fp;
    Reader *head1=link_2();
    Reader *p1=head1,*w;
    LR *q=head,*t1=NULL,*m=NULL;
    char id[20];
    int shuhao,i;
    if((fp=fopen("D:\\读者信息文件.txt","r"))==NULL)
 {
  printf ("文件打开失败!\n");
  exit(0);
 }
    p1=head1;
    printf("请输入读者账号:");
    scanf("%s",id);
    while(p1!=NULL)
    {
        if(strcmp(id,p1->ID)==0)
        {
            if(p1->count<p1->num)
            {
                printf("请输入书号:");
                scanf("%d",&shuhao);
                input(len,b,t,a,p);
                for(i=0;i<len[0];i++)
                {
                    if(shuhao==b[i].book_num)
                    {
                        if(b[i].collect>b[i].lend)
                        {
                            b[i].lend+=1;
                            p1->count+=1;
                            if((fp=fopen("D:\\读者信息文件.txt","w"))==NULL)
                            {
                                printf ("文件打开失败!\n");
                                exit(0);
                            }
                            w=head1;
                            while(w!=NULL)
                            {
                                fprintf(fp,"%s %s %s %s %d %d\n",w->ID,w->name,w->address,w->phone,w->num,w->count);
                                w=w->next;
                            }
                            fclose(fp);
                            t1=(LR *)malloc(sizeof(LR));
                            strcpy(t1->ID,id);
                            t1->book_num=shuhao;
                            printf("请输入借书日期:\n(温馨提示:借阅书籍需在一个月内归还,否则将进行相应罚款!)\n");
                            scanf("%s",t1->Lend);
                            strcpy(t1->Return,"未还书");
                            strcpy(t1->remark,"无");
                            while(q!=NULL)
                            {
                                m=q;
                                q=q->next;
                            }
                            m->next=t1;
                            t1->next=NULL;
                            if((fp=fopen("D:\\借还书信息文件.txt","w"))==NULL)
                            {
                                printf ("文件打开失败!\n");
                                exit(0);
                            }
                            m=head;
                            while(m!=NULL)
                            {
                                fprintf(fp,"%s %d %s %s %s\n",m->ID,m->book_num,m->Lend,m->Return,m->remark);
                                m=m->next;
                            }
                            printf("借书成功!\n");
                            output(len,b,t,a,p);
                            fclose(fp);
                            free(p1);
                            free(q);
                            free(m);
                            free(t1);
                            free(w);
                            return ;
                        }
                        else
                        {
                            printf("该书籍已全部借出!\n");
                            return ;
                        }
                    }
                }
                if(i==len[0])
                {
                    printf("未找到该书籍!\n");
                    return;
                }
            }
            else
            {
                printf("该读者所借书数已超出限额,无法借书!\n");
                return ;
            }
        }
        p1=p1->next;
    }
    if(p1==NULL)
        printf("该读者不存在!\n");
    fclose(fp);
}
void Return(LR *head,int len[],Book b[],Title t[],Author a[],Press p[])//还书
{
    FILE *fp,*fp1;
    Reader *head1=link_2();
    head=link_3();
    Reader *p1=head1,*w=NULL;
    LR *q=head,*m=NULL;
    char id[20],date[20];
    int shuhao,i;
    if((fp=fopen("D:\\读者信息文件.txt","r"))==NULL)
 {
  printf ("文件打开失败!\n");
  exit(0);
 }
    p1=head1;
    printf("请输入读者账号:");
    scanf("%s",id);
    while(p1!=NULL)
    {
        if(strcmp(id,p1->ID)==0)
        {
            printf("请输入书号:");
            scanf("%d",&shuhao);
            while(q!=NULL)
            {
                if(strcmp(id,q->ID)==0&&shuhao==q->book_num)
                {
                    printf("已查询到该信息:\n");
                    printf("%s %d %s %s %s\n",q->ID,q->book_num,q->Lend,q->Return,q->remark);
                    printf("请判断该读者是否在规定时间内还书:\n1.是\n2.不是\n请输入您的选择:");
                    int ch;
                    scanf("%d",&ch);
                    if(ch==1)
                    {
                        input(len,b,t,a,p);
                        for(i=0;i<len[0];i++)
                        {
                            if(shuhao==b[i].book_num)
                            {
                                if((fp=fopen("D:\\读者信息文件.txt","w"))==NULL)
                                {
                                    printf ("文件打开失败!1\n");
                                    exit(0);
                                }
                                p1->count=p1->count-1;
                                w=head1;
                                while(w!=NULL)
                                {
                                    fprintf(fp,"%s %s %s %s %d %d\n",w->ID,w->name,w->address,w->phone,w->num,w->count);
                                    w=w->next;
                                }
                                fclose(fp);
                                b[i].lend=b[i].lend-1;
                                output(len,b,t,a,p);
                                printf ("请输入还书日期:");
                                scanf("%s",date);
                                //printf("%s\n",q->Return);
                                strcpy(q->Return,date);
                                strcpy(q->remark,"无");
                                //printf("%s\n",q->Lend);
                                //printf("%s\n",q->Return);
                                //printf("%s\n",q->remark);
                                if((fp1=fopen("D:\\借还书信息文件.txt","w"))==NULL)
                                {
                                    printf ("文件打开失败!2\n");
                                    exit(0);
                                }
                                m=head;
                                while(m!=NULL)
                                {
                                    fprintf(fp1,"%s %d %s %s %s\n",m->ID,m->book_num,m->Lend,m->Return,m->remark);
                                    m=m->next;
                                }
                                printf("还书成功!\n");
                                fclose(fp1);
                                free(p1);
                                free(q);
                                free(m);
                                free(w);
                                return;
                            }
                        }
                        if(i==len[0])
                        {
                            printf("在读者文件中该书号不合法!\n");
                            return ;
                        }
                    }
                    if(ch==2)
                    {
                        strcpy(q->remark,"过期未还");
                        if((fp1=fopen("D:\\借还书信息文件.txt","w"))==NULL)
                        {
                            printf ("文件打开失败!2\n");
                            exit(0);
                        }
                        m=head;
                        while(m!=NULL)
                        {
                            fprintf(fp1,"%s %d %s %s %s\n",m->ID,m->book_num,m->Lend,m->Return,m->remark);
                            m=m->next;
                        }
                        printf("操作完毕!\n");
                        fclose(fp);
                        free(p1);
                        free(q);
                        free(m);
                        free(w);
                        return;
                    }
                }
                q=q->next;
            }
            if(q==NULL)
            {
                printf("在借还书文件中该书号不合法!\n");
                return ;
            }
        }
        p1=p1->next;
    }
    if(p1==NULL)
        printf("该读者不存在!\n");
    fclose(fp);
}
//主函数
int main()
{
    while(1)
    {
        system("cls");
        menu_1();
        printf("请输入您的选择:");
        int ch;
        scanf("%d",&ch);
        if(ch==1) //登录
            land();
        if(ch==2)   //  注册
            Register();
        if(ch==3)  // 退出
            return 0;
    }
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值