数据结构实训——图书管理系统

源代码分享:http://download.csdn.net/detail/qlwangcong518/9690056

头文件——Library.cpp

/***********************************************************
* 版权所有 (C)2015,WangCong
*
* 文件名称: Library.h
* 文件标识:无
* 内容摘要:函数文件
* 其它说明:各个模块函数
* 当前版本: V5.0
* 作 者:王聪
* 完成日期: 20151224
*
* 修改记录1:
* 修改日期 :20151205
* 版本号: V1.0
* 修改人: 王聪
* 修改内容:创建
*
* 修改记录2:
* 修改日期: 20151215
* 版本号: V2.0
* 修改人: 王聪
* 修改内容:模块建立1
*
* 修改记录3:
* 修改日期: 20151216
* 版本号: V2.1
* 修改人: 王聪
* 修改内容:模块建立2
*
* 修改记录4:
* 修改日期: 20151220
* 版本号: V3.0
* 修改人: 王聪
* 修改内容:模块建立3
*
* 修改记录5:
* 修改日期: 20151221
* 版本号: V4.0
* 修改人: 王聪
* 修改内容:整理函数
*
* 修改记录6:
* 修改日期: 20151224
* 版本号: V5.0
* 修改人: 王聪
* 修改内容:界面整合
**********************************************************/

#ifndef MY_H_FILE
#define MY_H_FILE

#include <iostream>
using namespace std;
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fstream>
#include <iomanip>
#include <time.h>
#define MAX    100
#define MAX1   2                 //本科生最大借阅量
#define MAX2   5                 //研究生最大借阅量
#define MAX3   10                //教师最大借阅量
#define MAX4   100               //管理员最大借阅量
#define MaxSize 100              //100条记录

typedef char InfoType[10];
typedef struct          //记录类型
{
    int key;        //关键字项

} RecType;              //排序的记录类型定义
//书的结构体
typedef struct book
{
    float price;                //图书单价
    int membernum;              //借书人编号
    char name[80];              //图书名
    long num;                   //图书编号
    char writername[20];        //作者姓名
    char publish[40];           //出版社名称
    int yes;                    //判断书是否存在或者已经借出,1存在,0借出
    struct book *next;          //结点指针
} Book,*BookList;
//借书时间结构体
typedef struct Time
{
    int	year;
    int	month;
    int	day;
} data;
//读者借的书的结构体
typedef struct BorrowBook
{
    long num;                   //借的书的编号
    struct Time time;           //借书时间
    struct Time borrowtime;     //借书期限
} BBook;
//读者的结构体
typedef struct member
{
    char name[20];              //读者姓名
    char sex;                   //读者性别,男m,女f
    long num;                   //读者编号
    int style;                  //读者类型,1:本科生;2:研究生;3:教师;4:管理员;
    int max;                    //读者借书数目,初始为0
    int yes;                    //读者是否借书,1是,0否
    BBook t[MAX];               //读者借的书的数组
    struct member *next;        //结点指针
} Member,*MemberList;
//界面
void Face();
void FaceBook();
void FaceBookSearh();
void FaceDu();
void FaceDuSearh();
//初试化
Book *Init_B();                             //初试化图书链表
int BookAdd(BookList &);                    //建立一个带头结点的链表用来存储图书信息
//查询图书方式
int BookSearch(BookList &);                 //图书查询菜单
int Search_BookNum(BookList &);             //按编号查询
int Search_BookName(BookList &);            //按书名查询
int Search_BookWritername(BookList &);      //按作者名查询
int Search_Publish(BookList &);             //按出版社查询
int Search_AllB(BookList &);                //查询所有图书信息
//删除图书
int BookDel(BookList &);                    //以图书编号作为主键进行删除
//修改图书信息
int BookChange(BookList &);
//图书借阅
int Member_Y(MemberList &,long);            //判断是否是读者,1是,0否。只有读者才有权限借书
int BookBorrow(BookList &,MemberList &);    //借阅时以编号作为主键
//增加读者
Member *Init_M();                           //初试化读者链表
int MemberAdd(MemberList &);                //建立一个带头结点的链表用来存储读者信息
//修改读者信息
int MemberChange(MemberList &);
//查询读者
int MemberSearch(MemberList &);
int Search_MemberName(MemberList &);            //按姓名查询
int Search_MemberNum(MemberList &);            //按编号查询
int Search_MemberSex(MemberList &);      //按性别查询
int Search_AllM(MemberList &);         //查询所有读者信息
//还书
int BookReturn(BookList &,MemberList &);    //还书时以编号作为主键
//删除读者
int MemberDel(MemberList &);                       //以读者编号作为主键进行删除
//借书信息
int BorrowInfo(MemberList &);
//到期书催还
int LimitTimeInfo(BookList &,MemberList &);
//排序函数
int BookPai(BookList &);
void ShellSort(RecType [],int);
//全局变量声明
extern RecType R[MaxSize];
extern int xer;
extern int X[100];

#endif
各功能函数——Library.cpp

/***********************************************************
* 版权所有 (C)2015,WangCong
*
* 文件名称: Library.cpp
* 文件标识:无
* 内容摘要:函数文件
* 其它说明:各个模块函数
* 当前版本: V5.0
* 作 者:王聪
* 完成日期: 20151224
*
* 修改记录1:
* 修改日期 :20151205
* 版本号: V1.0
* 修改人: 王聪
* 修改内容:创建
*
* 修改记录2:
* 修改日期: 20151215
* 版本号: V2.0
* 修改人: 王聪
* 修改内容:模块建立1
*
* 修改记录3:
* 修改日期: 20151216
* 版本号: V2.1
* 修改人: 王聪
* 修改内容:模块建立2
*
* 修改记录4:
* 修改日期: 20151220
* 版本号: V3.0
* 修改人: 王聪
* 修改内容:模块建立3
*
* 修改记录5:
* 修改日期: 20151221
* 版本号: V4.0
* 修改人: 王聪
* 修改内容:整理函数
*
* 修改记录6:
* 修改日期: 20151224
* 版本号: V5.0
* 修改人: 王聪
* 修改内容:界面整合
**********************************************************/

#include "Library.h"

/*********************************************************
* 功能描述:图书编号排序
* 输入参数:无
* 输出参数:无
* 返回值  :无
* 其它说明:希尔排序算法
************************************************************/
void ShellSort(RecType R[],int n)   //希尔排序算法
{
    int i,j,gap;
    RecType tmp;
    gap=n/2;                //增量置初值
    while (gap>0)
    {
        for (i=gap; i<n; i++) //对所有相隔gap位置的所有元素组进行排序
        {
            tmp=R[i];
            j=i-gap;
            while (j>=0 && tmp.key<R[j].key)//对相隔gap位置的元素组进行排序
            {
                R[j+gap]=R[j];
                j=j-gap;
            }
            R[j+gap]=tmp;
            j=j-gap;
        }
        gap=gap/2;  //减小增量
    }
}
/*********************************************************
* 功能描述:查询图书
* 输入参数:n-要查询的书名
* 输出参数:要查询书的信息
* 返回值  :(1)
* 其它说明:按书名查询
************************************************************/
int Search_BookName(BookList &H)            //按书名查询
{
    Book *p;
    p=H->next;
    char n[80];
    int flag=0;
    cout<<"                           ○输入要查询的书名:";
    cin>>n;
    for(; p!=NULL; p=p->next)
    {
        if(strcmp(p->name,n)==0)
        {
            if(flag==0)
                cout<<endl<<"书名       编号        单价        作者        出版社        是否借出"<<endl;
            cout<<" "<<p->name<<"  "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish;
            if(p->yes==1)
                cout<<setw(15)<<"否"<<endl;
            else
                cout<<setw(15)<<"是"<<endl;
            flag=1;
            continue;
        }
    }
    cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
    if(p==NULL&&flag==0)
    {
        cout<<"                          ※没有相关信息!※"<<endl;
        cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
    }
    return 1;
}
/*********************************************************
* 功能描述:初试化图书链表
* 输入参数:无
* 输出参数:无
* 返回值  :图书链表
* 其它说明:无
************************************************************/
//增加图书
Book *Init_B()                  //初试化图书链表
{
    Book *H;
    H=(Book *)malloc(sizeof(Book));
    if(!H) exit(1);
    H->next=NULL;
    return H;
}
/*********************************************************
* 功能描述:新建图书
* 输入参数:X[xer]-图书编号
* 输出参数:是否成功增加
* 返回值  :(1)
* 其它说明:无
************************************************************/
int BookAdd(BookList &H)        //建立一个带头结点的链表用来存储图书信息
{
    int i=0;                    //统计要增加的图书量
    Book *p,*q,*s;
    p=(Book *)malloc(sizeof(Book));
    if(!p) exit(1);
    if(H->next==NULL)
    {
        cout<<"                        ○输入图书编号:";
        cin>>p->num;
        X[xer]=p->num;
        if(p->num==0)           //退出"增加图书"
        {
            cout<<"                                                   共计"<<i<<"本图书入库!"<<endl;
            cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
            return 1;
        }
        cout<<"                        ○输入书名:";
        cin>>p->name;
        for(s=H->next; s!=NULL; s=s->next)
            if(s->num==p->num)
            {
                cout<<"                     ≮一个编号对应一本书!≯";
                cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
                return 1;
            }
        cout<<"                        ○输入图书价格:";
        cin>>p->price;
        cout<<"                        ○输入作者姓名:";
        cin>>p->writername;
        cout<<"                        ○输入出版社名称:";
        cin>>p->publish;
        p->yes=1;              //1表示没有借出
        p->next=NULL;
        H->next=p;
        q=p;
        ++i;
        cout<<endl<< X[xer];
        xer++;
    }



    else
    {
        q=H;
        while(q->next!=NULL)
            q=q->next;
        p->num=1;                      //进入循环的条件
        p->next=NULL;
    }
    while(p->num!=0)                   //以图书编号作为判断链表是否结束
    {
        p=(Book *)malloc(sizeof(Book));
        if(!p) exit(1);
        cout<<"                        ○输入图书编号:";
        cin>>p->num;
        //希尔数组的加入
        X[xer]=p->num;
        if(p->num==0)                  //退出"增加图书"
        {
            cout<<"                                                    共计"<<i<<"本图书入库!"<<endl;
            cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
            break;
        }
        cout<<"                        ○输入书名:";
        cin>>p->name;
        cout<<"                        ○输入图书价格:";
        cin>>p->price;
        cout<<"                        ○输入作者姓名:";
        cin>>p->writername;
        cout<<"                        ○输入出版社名称:";
        cin>>p->publish;
        p->yes=1;                      //1表示没有借出
        p->next=NULL;
        q->next=p;
        q=p;
        ++i;
        //希尔数组的加入

        cout<<endl<< X[xer];
        xer++;
    }
    return 1;
}
/*********************************************************
* 功能描述:查询图书
* 输入参数:n-书的编号
* 输出参数:查询的相应信息
* 返回值  :(1)
* 其它说明:按编号查询
************************************************************/
//查询图书方式
int Search_BookNum(BookList &H)             //按编号查询
{
    Book *p;
    p=H->next;
    long n;
    int flag=0;
    cout<<"                        ○输入要查询的书的编号:";
    cin>>n;
    for(; p!=NULL; p=p->next)
    {
        if(n==p->num)
        {
            if(flag==0)
                cout<<endl<<"书名       编号        单价        作者        出版社        是否借出"<<endl;
            cout<<" "<<p->name<<"  "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish;
            if(p->yes==1)
                cout<<setw(15)<<"否"<<endl;
            else
                cout<<setw(15)<<"是"<<endl;
            flag=1;
            continue;
        }
    }
    cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
    if(p==NULL&&flag==0)
    {
        cout<<"                        ※没有相关信息※!"<<endl;
        cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
    }
    return 1;
}
/*********************************************************
* 功能描述:查询图书
* 输入参数:n-书的作者名
* 输出参数:查询的相应信息
* 返回值  :(1)
* 其它说明:按作者名查询
************************************************************/
int Search_BookWritername(BookList &H)      //按作者名查询
{
    Book *p;
    p=H->next;
    int flag=0;
    char n[30];
    cout<<"                        ○输入要查询的书的作者名:";
    cin>>n;
    for(; p!=NULL; p=p->next)
    {
        if(strcmp(p->writername,n)==0)
        {
            if(flag==0)
                cout<<endl<<"书名       编号        单价        作者        出版社        是否借出"<<endl;
            cout<<" "<<p->name<<"  "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish;
            if(p->yes==1)
                cout<<setw(15)<<"否"<<endl;
            else
                cout<<setw(15)<<"是"<<endl;
            flag=1;
            continue;
        }
    }
    cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
    if(p==NULL&&flag==0)
    {
        cout<<"                         ※没有相关信息!※"<<endl;
        cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
    }
    return 1;
}
/*********************************************************
* 功能描述:查询图书
* 输入参数:n-书的出版社
* 输出参数:查询的相应信息
* 返回值  :(1)
* 其它说明:按出版社查询
************************************************************/
int Search_Publish(BookList &H)             //按出版社查询
{
    Book *p;
    p=H->next;
    int flag=0;
    char n[50];
    cout<<"                           ○输入要查询的书的出版社名称:";
    cin>>n;
    for(; p!=NULL; p=p->next)
    {
        if(strcmp(p->publish,n)==0)
        {
            if(flag==0)
                cout<<endl<<"书名       编号        单价        作者        出版社        是否借出"<<endl;
            cout<<" "<<p->name<<"  "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish;
            if(p->yes==1)
                cout<<setw(15)<<"否"<<endl;
            else
                cout<<setw(15)<<"是"<<endl;
            flag=1;
            continue;
        }
    }
    cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
    if(p==NULL&&flag==0)
    {
        cout<<"                         ※没有相关信息!※"<<endl;
        cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
    }
    return 1;
}
/*********************************************************
* 功能描述:查询图书
* 输入参数:无
* 输出参数:图书信息
* 返回值  :(1)
* 其它说明:显示所有信息
************************************************************/
int Search_AllB(BookList &H)               //查询所有图书信息
{
    Book *p;
    p=H->next;
    int i=0,flag=0;
    for(; p!=NULL; p=p->next)
    {
        if(flag==0)
            cout<<endl<<"书名       编号        单价        作者        出版社        是否借出"<<endl;
        cout<<" "<<p->name<<"  "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish;
        if(p->yes==1)
            cout<<setw(15)<<"否"<<endl;
        else
            cout<<setw(15)<<"是"<<endl;
        flag=1;
        i++;
    }
    cout<<"                                                         共计"<<i<<"本书。"<<endl;
    cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
    return 1;
}
/*********************************************************
* 功能描述:查询图书选择模块
* 输入参数:0~9(对应相应功能)
* 输出参数:相应界面
* 返回值  :(1)
* 其它说明:0是退出
************************************************************/
int BookSearch(BookList &H)
{
    int m;
    while(m!=0)
    {
        FaceBookSearh();
        cin>>m;
        cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
        switch(m)
        {
        case 1:
            Search_BookName(H);
            break;        //按书名查询
        case 2:
            Search_BookNum(H);
            break;         //按编号查询
        case 3:
            Search_BookWritername(H);
            break;  //按作者名查询
        case 4:
            Search_Publish(H);
            break;         //按出版社查询
        case 5:
            Search_AllB(H);
            break;            //查询所有图书信息
        case 0:
            break;                            //退出
        }
    }
    return 1;
}
/*********************************************************
* 功能描述:删除图书
* 输入参数:n-删除的书的编号
* 输出参数:是否删除
* 返回值  :(1)
* 其它说明:按图书编号删除
**********************************************************/
//删除图书
int BookDel(BookList &H)                           //以图书编号作为主键进行删除
{
    Book *p;
    long n;
    int flag=0;
    p=H;
    cout<<"                           ○输入要删除的书的编号:";
    cin>>n;
    for(; p!=NULL; p=p->next)
    {
        if(p->next!=NULL&&p->next->num==n)
        {
            if(p->next->yes==0)
            {
                cout<<"                       ERROR!当前图书被借出,不能删除!"<<endl;
                cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
                return 1;
            }
            p->next=p->next->next;            //删除语句
            cout<<"                              √成功删除!"<<endl;
            cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
            flag=1;                           //成功删除标记
            break;
        }
    }
    if(p==NULL&&flag==0)
    {
        cout<<"                               删除不成功!"<<endl;           //已经被删除或没有这本书
        cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
    }
    return 1;
}
/*********************************************************
* 功能描述:修改图书
* 输入参数:n-修改的书的编号
* 输出参数:是否修改成功
* 返回值  :(1)
* 其它说明:按图书编号修改
************************************************************/
//修改图书信息
int BookChange(BookList &H)                           //以图书编号作为主键进行修改
{
    Book *p;
    long n;
    int flag=0;
    p=H;
    cout<<"                           ○输入要修改的书的编号:";
    cin>>n;
    for(; p!=NULL; p=p->next)
    {
        if(p->num==n)
        {
            if(p->next->yes==0)
            {
                cout<<"                       ERROR!当前图书被借出,不能修改!"<<endl;
                cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
                return 1;
            }

            cout<<"以下为要修改的图书:"<<endl<<"书名       编号        单价        作者        出版社        是否借出"<<endl;
            cout<<" "<<p->name<<"  "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish;
            if(p->yes==1)
                cout<<setw(15)<<"否"<<endl;
            else
                cout<<setw(15)<<"是"<<endl;
            cout<<"                       请输入相应修改数据"<<endl;
            cout<<"                        ○输入编号:";
            cin>>p->num;
            cout<<"                        ○输入书名:";
            cin>>p->name;
            cout<<"                        ○输入图书价格:";
            cin>>p->price;
            cout<<"                        ○输入作者姓名:";
            cin>>p->writername;
            cout<<"                        ○输入出版社名称:";
            cin>>p->publish;
            cout<<"                              √成功修改!"<<endl;
            cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
            flag=1;                           //成功修改标记
            break;
        }
    }
    if(p==NULL&&flag==0)
    {
        cout<<"                               修改失败,没有这本书!"<<endl;           //没有这本书
        cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
    }

    return 1;
}
/*********************************************************
* 功能描述:判断是否是读者
* 输入参数:无
* 输出参数:无
* 返回值  :(0-不是读者,1-是读者)
* 其它说明:只有读者才有权限借书
************************************************************/
int Member_Y(MemberList &L,long num)                      //判断是否是读者,1是,0否。只有读者才有权限借书
{
    Member *p;
    p=L;
    for(; p!=NULL; p=p->next)
        if(p->num==num)
            return 1;
    return 0;
}
/*********************************************************
* 功能描述:借阅图书
* 输入参数:num-读者编号,m-借阅的书编号
* 输出参数:能否借出
* 返回值  :(1)
* 其它说明:按书的编号查询
************************************************************/
//借阅图书
int BookBorrow(BookList &H,MemberList &L)                 //借阅时以编号作为主键
{
    Book *p,*s;
    Member *q;
    long m=1,num;
    int t=0,flag=0,max,i;
    cout<<"                           ▲输入读者编号:";
    cin>>num;
    if(Member_Y(L,num)==1)
    {
        q=L;
        for(; q!=NULL; q=q->next)
            if(q->num==num) break;
        while(m)
        {
            if(t==0)
                cout<<"                           ▲输入要借阅的书的相关信息:";
            t=1;
            cout<<"                           ▲编号:";
            cin>>m;
            for(s=H->next; s!=NULL; s=s->next)
                if(s->num==m) break;
            if(s==NULL)
            {
                cout<<"                          ERROR!没有这本书!"<<endl;
                cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
                continue;
            }
            for(p=H->next; p!=NULL; p=p->next)
            {
                if(p->num==m)
                {
                    if(p->yes==0)
                    {
                        cout<<"                  ERROR!当前图书被借出,不能借阅!"<<endl;
                        cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
                        break;
                    }
                    if(q->style==1) max=MAX1;
                    else if(q->style==2) max=MAX2;
                    else if(q->style==3) max=MAX3;
                    else if(q->style==4) max=MAX4;
                    q->max++;
                    if(q->max>max)
                    {
                        cout<<"                  ●你已经借的书超过了最大借阅量,不能再借书!"<<endl;
                        cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
                        q->max--;
                        return 1;
                    }
                    p->yes=0;
                    p->membernum=q->num;
                    q->yes=1;
                    for(i=1; i<=max; i++)
                        if(q->t[i].num==0) break;
                    q->t[i].num=p->num;
                    time_t timer=time(0);//调用time()函数获取当前时间
                    struct tm *ptrtime=localtime(&timer);//调用localtime()函数将获得的系统时间转化为指向struct tm的指针指向的结构体
                    q->t[i].time.year=1900+ptrtime->tm_year;
                    q->t[i].time.month=1+ptrtime->tm_mon;
                    q->t[i].time.day=ptrtime->tm_mday;
                    if(q->t[i].time.month>=10)
                        q->t[i].borrowtime.year=1900+ptrtime->tm_year+1;
                    else
                        q->t[i].borrowtime.year=1900+ptrtime->tm_year;
                    q->t[i].borrowtime.month=(1+ptrtime->tm_mon+3)%12;
                    q->t[i].borrowtime.day=ptrtime->tm_mday;
                    cout<<"                           成功借出!"<<endl;
                    cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
                    flag=1;                           //成功借出标记
                    break;
                }
            }
            if(p==NULL&&flag==0)
            {
                cout<<"                               借书不成功!"<<endl;           //没有这本书
                cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
            }
        }
    }
    else
    {
        cout<<"        ☆对不起,您不是读者,借书失败!如果想进行此操作,请先申请!"<<endl;
        cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
    }
    return 1;
}
/*********************************************************
* 功能描述:归还图书
* 输入参数:m-图书编号
* 输出参数:是否还书成功
* 返回值  :(1)
* 其它说明:按书名查询
************************************************************/
//还书
int BookReturn(BookList &H,MemberList &L)                         //还书时以编号作为主键
{
    Book *p,*s;
    Member *q;
    long m=1;
    int flag=0,max;
    cout<<"                           ○输入要归还的书的相关信息:";
    while(m)
    {
        cout<<"                           ○编号:";
        cin>>m;
        for(s=H->next; s!=NULL; s=s->next)
            if(s->num==m) break;
        if(s==NULL)
        {
            cout<<"                           ≮没有这本书!≯"<<endl;
            cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
            continue;
        }
        for(p=H->next; p!=NULL; p=p->next)
        {
            if(p->num==m)
            {
                if(p->yes==1)
                {
                    cout<<"                           ≮这本书没有借出,还书失败!≯"<<endl;
                    cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
                    break;
                }
                for(q=L; q!=NULL; q=q->next)
                    if(q->num==p->membernum) break;
                p->yes=1;
                if(q->style==1) max=MAX1;
                else if(q->style==2) max=MAX2;
                else if(q->style==3) max=MAX3;
                else if(q->style==4) max=MAX4;
                for(int k=1; k<=max; k++)          //从借的书的数组中删除这本书
                    if(q->t[k].num==p->num)
                    {
                        q->t[k].num=0;
                        q->max--;
                        break;
                    }
                cout<<"                              √还书成功!"<<endl;
                cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
                if(q->max==0)
                    q->yes=0;
                flag=1;                           //成功还书标记
                break;
            }
        }
        if(p==NULL&&flag==0)
        {
            cout<<"                               还书不成功!"<<endl;           //没有借这本书
            cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
        }
    }
    return 1;
}
/*********************************************************
* 功能描述:初试化读者链表
* 输入参数:无
* 输出参数:无
* 返回值  :读者链表
* 其它说明:无
************************************************************/

Member *Init_M()                  //初试化读者链表
{
    Member *L;
    L=(Member *)malloc(sizeof(Member));
    if(!L) exit(1);
    L->next=NULL;
    return L;
}
/*********************************************************
* 功能描述:增加读者
* 输入参数:p->num-读者编号
* 输出参数:是否成功增加
* 返回值  :(1)
* 其它说明:无
************************************************************/
//增加读者
int MemberAdd(MemberList &L)               //建立一个带头结点的链表用来存储读者信息
{
    int i=0,k=0,max;                      //统计要增加的读者人数
    Member *p,*q,*s;
    p=(Member *)malloc(sizeof(Member));
    if(!p) exit(1);
    if(L->next==NULL)
    {
        cout<<"          ○输入编号:";
        cin>>p->num;
        if(p->num==0)               //退出"增加读者"
        {
            cout<<"                                                   共计"<<k<<"名读者入会!"<<endl;
            cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
            return 1;
        }
        cout<<"          ○输入姓名:";
        cin>>p->name;
        for(s=L->next; s!=NULL; s=s->next)
            if(s->num==p->num)
            {
                cout<<"                     ≮同一读者不能重复注册!≯";
                cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
                return 1;
            }
        cout<<"          ○输入性别:(男:m,女:f)";   //男m,女f
        cin>>p->sex;
        cout<<"          ○输入读者类型:(1:本科生;2:研究生;3:教师;4:管理员;)";
        cin>>p->style;
        if(p->style==1) max=MAX1;
        else if(p->style==2) max=MAX2;
        else if(p->style==3) max=MAX3;
        else if(p->style==4) max=MAX4;
        for(int i=0; i<=max; i++)
            p->t[i].num=0;
        p->max=0;                   //借阅数目,初始为0
        p->yes=0;                   //0表示没有借书
        p->next=NULL;
        L->next=p;
        q=p;
        ++k;
        cout<<endl;
    }
    else
    {
        q=L;
        while(q->next!=NULL)
            q=q->next;
        p->num=1;
        p->next=NULL;
    }
    while(p->num!=0)                   //以读者学号作为判断链表是否结束
    {
        p=(Member *)malloc(sizeof(Member));
        if(!p) exit(1);
        cout<<"          ○输入编号:";
        cin>>p->num;
        if(p->num==0)                  //退出"增加读者"
        {
            cout<<"                                                   共计"<<k<<"名读者入会!"<<endl;
            cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
            break;
        }
        cout<<"          ○输入姓名:";
        cin>>p->name;
        for(s=L->next; s!=NULL; s=s->next)
            if(s->num==p->num)
            {
                cout<<"          ≮同一读者不能重复注册!≯";
                return 1;
            }
        cout<<"          ○输入性别:(男:m,女:f)";      //男m,女f
        cin>>p->sex;
        for(int i=0; i<MAX; i++)
            p->t[i].num=0;
        cout<<"          ○输入读者类型:(1:本科生;2:研究生;3:教师;4:管理员;)";
        cin>>p->style;
        if(p->style==1) max=MAX1;
        else if(p->style==2) max=MAX2;
        else if(p->style==3) max=MAX3;
        else if(p->style==4) max=MAX4;
        for(i=0; i<=max; i++)
            p->t[i].num=0;
        p->max=0;                      //借阅数目,初始为0
        p->yes=0;                      //0表示没有借书
        p->next=NULL;
        q->next=p;
        q=p;
        ++k;
        cout<<endl;
    }
    return 1;
    cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
}
/*********************************************************
* 功能描述:修改读者信息
* 输入参数:n-修改的读者编号
* 输出参数:是否修改成功
* 返回值  :(1)
* 其它说明:按读者编号修改
************************************************************/
//修改读者信息
int MemberChange(MemberList &L)                           //以读者编号作为主键进行修改
{
    Member *p;
    p=L->next;
    long n;
    int flag=0;
    cout<<"           ○输入要修改的读者编号:";
    cin>>n;
    for(; p!=NULL; p=p->next)
    {
        if(p->num==n)
        {
            cout<<"以下为要修改的读者信息:"<<endl<<"姓名         编号        性别         类型        是否借书"<<endl;
            cout<<p->name<<"  "<<setw(11)<<p->num;
            if(p->sex=='m')
                cout<<setw(13)<<"男"<<"      ";
            else if(p->sex=='f')
                cout<<setw(13)<<"女"<<"      ";
            if(p->style==1)
                cout<<setw(10)<<"本科生"<<" ";
            else if(p->style==2)
                cout<<setw(10)<<"研究生"<<" ";
            else if(p->style==3)
                cout<<setw(10)<<"教师"<<" ";
            else if(p->style==4)
                cout<<setw(10)<<"管理员"<<" ";
            if(p->yes==1)
                cout<<setw(10)<<"是"<<endl;
            else
                cout<<setw(10)<<"否"<<endl;

            cout<<"请输入修改信息:";
            cout<<"          ○输入编号:";
            cin>>p->num;
            cout<<"          ○输入姓名:";
            cin>>p->name;
            cout<<"          ○输入性别:(男:m,女:f)";   //男m,女f
            cin>>p->sex;
            cout<<"          ○输入读者类型:(1:本科生;2:研究生;3:教师;4:管理员;)";
            cin>>p->style;
            cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
            cout<<"                                 修改成功"<<endl;
            flag=1;                           //成功修改标记
            break;
        }
    }
    cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;

    if(p==NULL&&flag==0)
    {
        cout<<"                               修改失败,没有此读者!"<<endl;           //没有此读者
        cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
    }

    return 1;
}
/*********************************************************
* 功能描述:查询读者信息
* 输入参数:n-查询的读者姓名
* 输出参数:查询的读者信息结果
* 返回值  :(1)
* 其它说明:按读者姓名查询
************************************************************/
//查询读者
int Search_MemberName(MemberList &L)            //按姓名查询
{
    Member *p;
    p=L->next;
    char n[20];
    int flag=0;
    cout<<"          ○输入要查询的读者姓名:";
    cin>>n;
    for(; p!=NULL; p=p->next)
    {
        if(strcmp(p->name,n)==0)
        {
            if(flag==0)
                cout<<endl<<"姓名         编号        性别         类型        是否借书"<<endl;
            cout<<p->name<<"  "<<setw(11)<<p->num;
            if(p->sex=='m')
                cout<<setw(13)<<"男"<<"      ";
            else if(p->sex=='f')
                cout<<setw(13)<<"女"<<"      ";
            if(p->style==1)
                cout<<setw(10)<<"本科生"<<" ";
            else if(p->style==2)
                cout<<setw(10)<<"研究生"<<" ";
            else if(p->style==3)
                cout<<setw(10)<<"教师"<<" ";
            else if(p->style==4)
                cout<<setw(10)<<"管理员"<<" ";
            if(p->yes==1)
                cout<<setw(10)<<"是"<<endl;
            else
                cout<<setw(10)<<"否"<<endl;
            flag=1;
            continue;
        }
    }
    cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
    if(p==NULL&&flag==0)
    {
        cout<<"                           ≮没有相关信息!≯"<<endl;
        cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
    }
    return 1;
}
/*********************************************************
* 功能描述:查询读者信息
* 输入参数:n-查询的读者编号
* 输出参数:查询的读者信息结果
* 返回值  :(1)
* 其它说明:按读者编号查询
************************************************************/
int Search_MemberNum(MemberList &L)             //按编号查询
{
    Member *p;
    p=L->next;
    long n;
    int flag=0;
    cout<<"           ○输入要查询的读者编号:";
    cin>>n;
    for(; p!=NULL; p=p->next)
    {
        if(p->num==n)
        {
            if(flag==0)
                cout<<endl<<"姓名         编号        性别         类型        是否借书"<<endl;
            cout<<p->name<<"  "<<setw(11)<<p->num;
            if(p->sex=='m')
                cout<<setw(13)<<"男"<<"      ";
            else if(p->sex=='f')
                cout<<setw(13)<<"女"<<"      ";
            if(p->style==1)
                cout<<setw(10)<<"本科生"<<" ";
            else if(p->style==2)
                cout<<setw(10)<<"研究生"<<" ";
            else if(p->style==3)
                cout<<setw(10)<<"教师"<<" ";
            else if(p->style==4)
                cout<<setw(10)<<"管理员"<<" ";
            if(p->yes==1)
                cout<<setw(10)<<"是"<<endl;
            else
                cout<<setw(10)<<"否"<<endl;
            flag=1;
            continue;
        }
    }
    cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
    if(p==NULL&&flag==0)
    {
        cout<<"                            ※没有相关信息!※"<<endl;
        cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
    }
    return 1;
}
/*********************************************************
* 功能描述:查询读者信息
* 输入参数:n-查询的读者性别
* 输出参数:查询的读者信息结果
* 返回值  :(1)
* 其它说明:按读者性别查询
************************************************************/
int Search_MemberSex(MemberList &L)      //按性别查询
{
    Member *p;
    p=L->next;
    int flag=0;
    char n;
    cout<<"           ○输入要查询的读者性别:(男:m,女:f)";
    cin>>n;
    for(; p!=NULL; p=p->next)
    {
        if(p->sex==n)
        {
            if(flag==0)
                cout<<endl<<"姓名         编号        性别         类型        是否借书"<<endl;
            cout<<p->name<<"  "<<setw(11)<<p->num;
            if(p->sex=='m')
                cout<<setw(13)<<"男"<<"      ";
            else if(p->sex=='f')
                cout<<setw(13)<<"女"<<"      ";
            if(p->style==1)
                cout<<setw(10)<<"本科生"<<" ";
            else if(p->style==2)
                cout<<setw(10)<<"研究生"<<" ";
            else if(p->style==3)
                cout<<setw(10)<<"教师"<<" ";
            else if(p->style==4)
                cout<<setw(10)<<"管理员"<<" ";
            if(p->yes==1)
                cout<<setw(10)<<"是"<<endl;
            else
                cout<<setw(10)<<"否"<<endl;
            flag=1;
            continue;
        }
    }
    cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
    if(p==NULL&&flag==0)
    {
        cout<<"                             ※没有相关信息!※"<<endl;
        cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
    }
    return 1;
}
/*********************************************************
* 功能描述:查询读者信息
* 输入参数:无
* 输出参数:读者信息
* 返回值  :(1)
* 其它说明:显示全部
************************************************************/
int Search_AllM(MemberList &L)         //查询所有读者信息
{
    Member *p;
    int i=0,flag=0;
    p=L->next;
    for(; p!=NULL; p=p->next)
    {
        if(flag==0)
            cout<<endl<<"姓名         编号        性别         类型        是否借书"<<endl;
        cout<<p->name<<"  "<<setw(11)<<p->num;
        if(p->sex=='m')
            cout<<setw(13)<<"男"<<"      ";
        else if(p->sex=='f')
            cout<<setw(13)<<"女"<<"      ";
        if(p->style==1)
            cout<<setw(10)<<"本科生"<<" ";
        else if(p->style==2)
            cout<<setw(10)<<"研究生"<<" ";
        else if(p->style==3)
            cout<<setw(10)<<"教师"<<" ";
        else if(p->style==4)
            cout<<setw(10)<<"管理员"<<" ";
        if(p->yes==1)
            cout<<setw(10)<<"是"<<endl;
        else
            cout<<setw(10)<<"否"<<endl;
        flag=1;
        i++;
    }
    cout<<"                                                       共计"<<i<<"个读者。"<<endl;
    cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
    return 1;
}
/*********************************************************
* 功能描述:查询读者方式模块
* 输入参数:(0~4)
* 输出参数:按方式查询界面
* 返回值  :(1)
* 其它说明:0是退出
************************************************************/
int MemberSearch(MemberList &L)
{
    int m;
    while(m!=0)
    {
        FaceDuSearh();
        cin>>m;
        cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
        switch(m)
        {
        case 1:
            Search_MemberName(L);
            break;        //按姓名查询
        case 2:
            Search_MemberNum(L);
            break;         //按编号查询
        case 3:
            Search_MemberSex(L);
            break;         //按性别查询
        case 4:
            Search_AllM(L);
            break;               //查询所有读者信息
        case 0:
            break;                              //退出
        }
    }
    return 1;
}
/*********************************************************
* 功能描述:删除读者
* 输入参数:n-要删除的读者编号
* 输出参数:删除是否成功
* 返回值  :(1)
* 其它说明:按读者编号作为主键进行删除
************************************************************/
//删除读者
int MemberDel(MemberList &L)                       //以读者编号作为主键进行删除
{
    Member *p;
    long n;
    int flag=0;
    p=L;
    cout<<"            ○输入要删除的读者的编号:";
    cin>>n;
    for(; p!=NULL; p=p->next)
    {
        if(p->next!=NULL&&p->next->num==n)
        {
            if(p->next->yes==1)
            {
                cout<<"                     ※当前读者借了书,不能删除!※"<<endl;
                cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
                return 1;
            }
            p->next=p->next->next;            //删除语句
            cout<<"                              成功删除!"<<endl;
            cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
            flag=1;                           //成功删除标记
            break;
        }
    }
    if(p==NULL&&flag==0)
    {
        cout<<"                          ※该读者不存在。删除不成功!※"<<endl;           //已经被删除或没有这个读者
        cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
    }
    return 1;
}
/*********************************************************
* 功能描述:借书信息
* 输入参数:n-要查询的读者编号
* 输出参数:借书详细情况
* 返回值  :(1)
* 其它说明:按书名查询
************************************************************/
//借书信息
int BorrowInfo(MemberList &L)
{
    Member *p;
    int j,flag=0,max,k=0;
    long n;
    cout<<"           ○当前会员名单:"<<endl;
    Search_AllM(L);
    cout<<"           ○输入要查询的读者编号:";
    cin>>n;
    for(p=L; p!=NULL; p=p->next)
    {
        if(p->num==n&&p->yes==1)
        {
            if(p->style==1) max=MAX1;
            else if(p->style==2) max=MAX2;
            else if(p->style==3) max=MAX3;
            else if(p->style==4) max=MAX4;
            cout<<"                           ∷借书详细情况∷"<<endl;
            cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
            for(j=1; j<=max; j++)
            {
                if(p->t[j].num!=0)
                {
                    k++;
                    if(flag==0)
                        cout<<"本数"<<setw(15)<<"编号"<<setw(15)<<"借书时间"<<setw(15)<<"到期时间"<<endl;
                    printf("%d\t\t%ld\t  ",k,p->t[j].num);
                    printf("%d-%d-%d      ",p->t[j].time.year,p->t[j].time.month,p->t[j].time.day);
                    printf("%d-%d-%d\n",p->t[j].borrowtime.year,p->t[j].borrowtime.month,p->t[j].borrowtime.day);
                    flag=1;
                }
            }
            cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
        }
        else if(p->num==n&&p->yes==0)
        {
            cout<<"                            ≮无借书记录!≯"<<endl;
            cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
        }
    }
    return 1;
}
/*********************************************************
* 功能描述:到期书催还
* 输入参数:超期信息
* 输出参数:超期信息,无超期信息无显示
* 返回值  :(1)
* 其它说明:调用系统时间函数
************************************************************/
//到期书催还
int LimitTimeInfo(BookList &H,MemberList &L)
{
    cout<<"进入时间模块"<<endl;
    struct Time limittime;
    Book *p;
    Member *q;
    int flag=0,i;
    time_t timer=time(0);//调用time()函数获取当前时间
    struct tm *ptrtime=localtime(&timer);//调用localtime()函数将获得的系统时间转化为指向struct tm的指针指向的结构体
    limittime.year=1900+ptrtime->tm_year;
    limittime.month=1+ptrtime->tm_mon;
    limittime.day=ptrtime->tm_mday;
    for(p=H->next; p!=NULL; p=p->next)
    {
        if(p->yes==0)
        {
            for(q=L->next; q!=NULL; q=q->next)
                if(p->membernum==q->num) break;
            for(i=1; i<=q->max; i++)
                if(q->t[i].num==p->num) break;
            if(flag==0)
                cout<<"书号      "<<setw(10)<<"借书人编号     "<<setw(10)<<"到期信息"<<endl;
            flag=1;
            if(limittime.year>q->t[i].borrowtime.year)
            {
                cout<<p->num<<"          "<<p->membernum<<"            ";
                cout<<"                           ◇已经超期,尽快还书!◇"<<endl;
            }
            else if(limittime.year==q->t[i].borrowtime.year)
            {
                if(limittime.month>q->t[i].borrowtime.month)
                {
                    cout<<p->num<<"          "<<p->membernum<<"            ";
                    cout<<"                           ◇已经超期,尽快还书!◇"<<endl;
                }
                else if(limittime.month==q->t[i].borrowtime.month)
                {
                    if(limittime.day>q->t[i].borrowtime.day)
                    {
                        cout<<p->num<<"          "<<p->membernum<<"            ";
                        cout<<"                           ◇已经超期,尽快还书!◇"<<endl;
                    }
                }
            }
        }
    }
    return 1;
}
/*********************************************************
* 功能描述:实现编号排序
* 输入参数:无
* 输出参数:排序后的编号
* 返回值  :(1)
* 其它说明:希尔排序
************************************************************/
int BookPai(BookList &H)
{
    Book *p;
    p=H->next;
    int i;


    for(i=0; i<xer; i++)
        R[i].key=X[i];
    cout<<"排序前:"<<endl;

    for(; p!=NULL; p=p->next)
    {
        cout<<endl<<"书名       编号        单价        作者        出版社        是否借出"<<endl;
        cout<<" "<<p->name<<"  "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish;
        if(p->yes==1)
            cout<<setw(15)<<"否"<<endl;
        else
            cout<<setw(15)<<"是"<<endl;
    }


    ShellSort(R,xer);

    cout<<"排序后编号:"<<endl;

    for(i=0; i<xer; i++)

        cout<<R[i].key<<endl;

    return 1;
}
/*********************************************************
* 功能描述:欢迎界面
* 输入参数:无
* 输出参数:无
* 返回值  :无
* 其它说明:界面1
************************************************************/
void Face()
{
    system("color 74");
    cout<<endl<<"   ———————————— 欢迎进入图书管理系统 ———————————"<<endl;
    cout<<endl<<"                  ┏━━━━━━━━━━━━━━━━━━┓"<<endl;
    cout<<"                  ┃                                    ┃"<<endl;
    cout<<"                  ┃           ◆1◆ 管理图书           ┃"<<endl;
    cout<<"                  ┃           ◆2◆ 管理读者           ┃"<<endl;
    cout<<"                  ┃           ◆0◆ 退出系统           ┃"<<endl;
    cout<<"                  ┃                                    ┃"<<endl;
    cout<<"                  ┗━━━━━━━━━━━━━━━━━━┛"<<endl;
    cout<<"                          →请在此输入您的选择:";
}
/*********************************************************
* 功能描述:读者查询界面
* 输入参数:无
* 输出参数:无
* 返回值  :无
* 其它说明:界面2
************************************************************/
void FaceDuSearh()
{
    cout<<"                          ◢━━━━━━━━━━━◣"<<endl;
    cout<<"                          ┃$欢迎进入读者查询系统$┃"<<endl;
    cout<<"                          ◥━━━━━━━━━━━◤"<<endl;
    cout<<"		      ┌──────────────┐ "<<endl;
    cout<<"		      │ ① 按姓名查询 ---- (NAM) $ │ "<<endl;
    cout<<"		      ├──────────────┤ "<<endl;
    cout<<"		      │ ② 按编号查询 ---- (NUM) $ │ "<<endl;
    cout<<"		      ├──────────────┤ "<<endl;
    cout<<"		      │ ③ 按性别查询 ---- (SEX) $ │ "<<endl;
    cout<<"		      ├──────────────┤ "<<endl;
    cout<<"		      │ ④ 查询所有信息 -- (ALL) $ │ "<<endl;
    cout<<"		      ├──────────────┤ "<<endl;
    cout<<"		      │ ⑤ 到期催还 ------ (TIME)$ │ "<<endl;
    cout<<"		      ├──────────────┤ "<<endl;
    cout<<"		      │  0. 退   出 ------ (ESC) $ │ "<<endl;
    cout<<"		      └──────────────┘ "<<endl;
    cout<<"                           →请在此输入您的选择:";

}
/*********************************************************
* 功能描述:图书查询界面
* 输入参数:无
* 输出参数:无
* 返回值  :无
* 其它说明:界面2
************************************************************/
void FaceBookSearh()
{
    cout<<"                          ◢━━━━━━━━━━━◣"<<endl;
    cout<<"                          ┃#欢迎进入图书查询系统#┃"<<endl;
    cout<<"                          ◥━━━━━━━━━━━◤"<<endl;
    cout<<"		      ┌──────────────┐ "<<endl;
    cout<<"		      │ ① 按书名查询 ----- (NAM) #│ "<<endl;
    cout<<"		      ├──────────────┤ "<<endl;
    cout<<"		      │ ② 按编号查询 ----- (NUM) #│ "<<endl;
    cout<<"		      ├──────────────┤ "<<endl;
    cout<<"		      │ ③ 按作者名查询 --- (SEX) #│ "<<endl;
    cout<<"		      ├──────────────┤ "<<endl;
    cout<<"		      │ ④ 按出版社查询 --- (ALL) #│ "<<endl;
    cout<<"		      ├──────────────┤ "<<endl;
    cout<<"		      │ ⑤ 查询所有信息 --- (TIME)#│ "<<endl;
    cout<<"		      ├──────────────┤ "<<endl;
    cout<<"		      │  0. 退   出 ------- (ESC) #│ "<<endl;
    cout<<"		      └──────────────┘ "<<endl;
    cout<<"                           →请在此输入您的选择:";
}
/*********************************************************
* 功能描述:读者管理界面
* 输入参数:无
* 输出参数:无
* 返回值  :无
* 其它说明:界面1
************************************************************/
void FaceDu()
{
    cout<<"                         ◢━━━━━━━━━━━◣"<<endl;
    cout<<"                         ┃$欢迎进入读者管理系统$┃"<<endl;
    cout<<"                         ◥━━━━━━━━━━━◤"<<endl;
    cout<<"		      ┌──────────────┐ "<<endl;
    cout<<"		      │ ① 增加读者 ----- (ADD) $  │ "<<endl;
    cout<<"		      ├──────────────┤ "<<endl;
    cout<<"		      │ ② 查询读者 ----- (SEA) $  │ "<<endl;
    cout<<"		      ├──────────────┤ "<<endl;
    cout<<"		      │ ③ 删除读者 ----- (DEL) $  │ "<<endl;
    cout<<"		      ├──────────────┤ "<<endl;
    cout<<"		      │ ④ 借书信息 ----- (BOR) $  │ "<<endl;
    cout<<"		      ├──────────────┤ "<<endl;
    cout<<"		      │ ⑤ 修改信息 ----- (CHAD)$  │ "<<endl;
    cout<<"		      ├──────────────┤ "<<endl;
    cout<<"		      │ ⑥ 到期催还 ----- (BACK)$  │ "<<endl;
    cout<<"		      ├──────────────┤ "<<endl;
    cout<<"		      │  0. 退   出 ----- (ESC) $  │ "<<endl;
    cout<<"		      └──────────────┘ "<<endl;
    cout<<"                           →请在此输入您的选择:";
}
/*********************************************************
* 功能描述:图书管理界面
* 输入参数:无
* 输出参数:无
* 返回值  :无
* 其它说明:界面1
************************************************************/
void FaceBook()
{

    cout<<"                         ◢━━━━━━━━━━━◣"<<endl;
    cout<<"                         ┃#欢迎进入图书管理系统#┃"<<endl;
    cout<<"                         ◥━━━━━━━━━━━◤"<<endl;
    cout<<"		      ┌──────────────┐ "<<endl;
    cout<<"		      │ ① 增加图书 ----- (ADD) #  │ "<<endl;
    cout<<"		      ├──────────────┤ "<<endl;
    cout<<"		      │ ② 查询图书 ----- (SEA) #  │ "<<endl;
    cout<<"		      ├──────────────┤ "<<endl;
    cout<<"		      │ ③ 删除图书 ----- (DEL) #  │ "<<endl;
    cout<<"		      ├──────────────┤ "<<endl;
    cout<<"		      │ ④ 排序图书 ----- (SORT)#  │ "<<endl;
    cout<<"		      ├──────────────┤ "<<endl;
    cout<<"		      │ ⑤ 图书借阅 ----- (BOR) #  │ "<<endl;
    cout<<"		      ├──────────────┤ "<<endl;
    cout<<"		      │ ⑥ 修改图书 ----- (CHAB)#  │ "<<endl;
    cout<<"		      ├──────────────┤ "<<endl;
    cout<<"		      │ ⑦ 图书归还 ----- (BACK)#  │ "<<endl;
    cout<<"		      ├──────────────┤ "<<endl;
    cout<<"		      │  0. 退   出 ----- (ESC) #  │ "<<endl;
    cout<<"		      └──────────────┘ "<<endl;
    cout<<"                           →请在此输入您的选择:";
}
主函数——main.cpp

/***********************************************************
* 版权所有 (C)2015,WangCong
*
* 文件名称: main.cpp
* 文件标识:无
* 内容摘要:函数文件
* 其它说明:各个模块函数
* 当前版本: V5.0
* 作 者:王聪
* 完成日期: 20151224
*
* 修改记录1:
* 修改日期 :20151205
* 版本号: V1.0
* 修改人: 王聪
* 修改内容:创建
*
* 修改记录2:
* 修改日期: 20151215
* 版本号: V2.0
* 修改人: 王聪
* 修改内容:模块建立1
*
* 修改记录3:
* 修改日期: 20151216
* 版本号: V2.1
* 修改人: 王聪
* 修改内容:模块建立2
*
* 修改记录4:
* 修改日期: 20151220
* 版本号: V3.0
* 修改人: 王聪
* 修改内容:模块建立3
*
* 修改记录5:
* 修改日期: 20151221
* 版本号: V4.0
* 修改人: 王聪
* 修改内容:整理函数
*
* 修改记录6:
* 修改日期: 20151224
* 版本号: V5.0
* 修改人: 王聪
* 修改内容:界面整合
**********************************************************/

#include "Library.h"

int X[100];            //暂存数组
int xer=0;             //暂存标记
RecType R[MaxSize];    //哈希数组
Book *H;               //图书链表
Member *L;             //读者链表

int main()
{

    FILE *fpb1,*fpb2,*fpm1,*fpm2;              //文件指针
    Book *p1,*p2,*s1;
    Member *q1,*q2,*s2;
    H=Init_B();
    L=Init_M();
    fpb1=fopen("book.txt","rb");               //读方式打开图书文件
    if(fpb1!=NULL)
    {
        p1=(Book *)malloc(sizeof(Book));
        if(!p1) exit(1);
        p1->next=NULL;
        while(fread(p1,sizeof(Book),1,fpb1)==1)
        {
            if(H->next==NULL)
            {
                H->next=p1;
                s1=p1;
            }
            else
            {
                s1->next=p1;
                s1=p1;
            }
            p1=(Book *)malloc(sizeof(Book));
            if(!p1) exit(1);
            p1->next=NULL;
        }
    }
    fpm1=fopen("member.txt","rb");             //读方式打开读者文件
    if(fpm1!=NULL)
    {
        q1=(Member *)malloc(sizeof(Member));
        if(!q1) exit(1);
        q1->next=NULL;
        while(fread(q1,sizeof(Member),1,fpm1)==1)
        {
            if(L->next==NULL)
            {
                L->next=q1;
                s2=q1;
            }
            else
            {
                s2->next=q1;
                s2=q1;
            }
            q1=(Member *)malloc(sizeof(Member));
            if(!q1) exit(1);
            q1->next=NULL;
        }
    }
    int m,n;
    while(m!=0)
    {
        Face();
        cin>>m;
        cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
        if(m==1)
        {
            FaceBook();
            cin>>n;
            cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
            switch(n)
            {
            case 1:
                BookAdd(H);
                break;           //增加图书
            case 2:
                    BookSearch(H);
                break;        //查询图书
            case 3:
                BookDel(H);
                break;           //删除图书
            case 4:
                BookPai(H);
                break;           //排序图书
            case 5:
                BookBorrow(H,L);
                break;      //图书借阅
            case 6:
                BookChange(H);
                break;			//修改图书信息
            case 7:
                BookReturn(H,L);
                break;      //还书
            case 0:
                break;                       //退出图书管理,返回上一层菜单
            }
        }
        else if(m==2)
        {
            FaceDu();
            cin>>n;
            cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
            switch(n)
            {
            case 1:
                MemberAdd(L);
                break;          //增加读者
            case 2:
                MemberSearch(L);
                break;			//查询读者
            case 3:
                MemberDel(L);
                break;          //删除读者
            case 4:
                BorrowInfo(L);
                break;          //借书信息
            case 5:
                MemberChange(L);
                break;			//修改读者信息
			case 6:
                LimitTimeInfo(H,L);
                break;			//到期书催还
            case 0:
                break;                        //退出读者管理,返回上一层菜单
            }
        }
        else if(m==0)
        {
            cout<<endl<<"┅┅┅┅┅┅┅┅┅┅┅┅┅感谢您使用本系统,再见!┅┅┅┅┅┅┅┅┅┅┅┅"<<endl;
            fpb2=fopen("book.txt","wb");
            for(p2=H->next; p2!=NULL; p2=p2->next)
                fwrite(p2,sizeof(Book),1,fpb2);
            fclose(fpb2);
            fpm2=fopen("member.txt","wb");
            for(q2=L->next; q2!=NULL; q2=q2->next)
                fwrite(q2,sizeof(Member),1,fpm2);
            fclose(fpm2);
            exit(0);
        }
    }
    return 0;
}


评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值