数据结构课程设计

图书管理系统

(一.代码

1.主函数:main.cpp

#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 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;  
}  


2.各模块函数:library.cpp

#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 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()  
{  
    
    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<<"             │  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<<"             │  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<<"                           →请在此输入您的选择:";  
}  

3.头文件:library.h

#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]; 

(二.运行结果截图

.图书管理系统

.管理图书界面


⑴增加图书


查询图书(5种查询方式)



①按书名查询


②按编号查询


③按作者名查询


④按出版社查询


⑤查询所有信息


⑶删除图书


⑷排序图书


⑸图书借阅


⑹修改图书


(7)图书归还


.读者管理界面


⑴增加读者


⑵查询读者


①按姓名查询


②按编号查询


③按性别查询


④查询所有信息


⑶删除读者


⑷借书信息


⑸修改信息






  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值