您的位置:首页 > 理论基础 > 数据结构算法

【数据结构实训——图书信息管理系统】

2016-12-31 16:14 381 查看
/***********************************************************
02.* 版权所有 (C)2016,刘富家
03.*
04.* 文件名称: Library.h
05.* 文件标识:无
06.* 内容摘要:函数文件
07.* 其它说明:各个模块函数
08.* 作 者:刘富家
09.* 完成日期: 20161231 */
#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

/***********************************************************
02.* 版权所有 (C)2016,刘富家
03.*
04.* 文件名称: Library.h
05.* 文件标识:无
06.* 内容摘要:函数文件
07.* 其它说明:各个模块函数
08.* 作 者:刘富家
09.* 完成日期: 20161231 */
#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))
4000
;
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;

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;
for(s=H->next; s!=NULL; s=s->next)
if(s->num==p->num || strcmp(s->name,p->name)==0)
{
cout<<"                     ≮一个编号对应一本书!≯";
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
return 1;
}

//希尔数组的加入
X[xer]=p->num;
if(p->num==0)                  //退出"增加图书"
{
cout<<"                                                    共计"<<i<<"本图书入库!"<<endl;
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
break;
}
cout<<"                        ○输入书名:";
cin>>p->name;
for(s=H->next; s!=NULL; s=s->next)
if(strcmp(s->name,p->name)==0)
{
cout<<"                     ≮一个编号对应一本书!≯";
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
return 1;
}
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-0删除的书的编号
* 输出参数:是否删除
* 返回值  :(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)
* 其它说明:按书的编号查询
**********************************
20000
**************************/
//借阅图书
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;

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;
}
for(s=L->next; s!=NULL; s=s->next)
if(s->num==p->num)
{
cout<<"          ≮此编号已存在!≯";
return 1;
}
cout<<"          ○输入姓名:";
cin>>p->name;
for(s=L->next; s!=NULL; s=s->next)
if(strcmp(s->name,p->name)==0)
{
cout<<"          ≮同一读者不能重复注册!≯";
return 1;
}

cout<<"          ○输入性别:(男:m,女:f)";      //男m,女f
cin>>p->sex;
for(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<<"            ○输入要删除的读者的编号:"<<endl;
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<<"                           →请在此输入您的选择:";
}/***********************************************************
02.* 版权所有 (C)2016,刘富家
03.*
04.* 文件名称: Library.h
05.* 文件标识:无
06.* 内容摘要:函数文件
07.* 其它说明:各个模块函数
08.* 作 者:刘富家
09.* 完成日期: 20161231 */
#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;

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;
for(s=H->next; s!=NULL; s=s->next)
if(s->num==p->num || strcmp(s->name,p->name)==0)
{
cout<<"                     ≮一个编号对应一本书!≯";
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
return 1;
}

//希尔数组的加入
X[xer]=p->num;
if(p->num==0)                  //退出"增加图书"
{
cout<<"                                                    共计"<<i<<"本图书入库!"<<endl;
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
break;
}
cout<<"                        ○输入书名:";
cin>>p->name;
for(s=H->next; s!=NULL; s=s->next)
if(strcmp(s->name,p->name)==0)
{
cout<<"                     ≮一个编号对应一本书!≯";
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
return 1;
}
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-0删除的书的编号
* 输出参数:是否删除
* 返回值  :(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;

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;
}
for(s=L->next; s!=NULL; s=s->next)
if(s->num==p->num)
{
cout<<"          ≮此编号已存在!≯";
return 1;
}
cout<<"          ○输入姓名:";
cin>>p->name;
for(s=L->next; s!=NULL; s=s->next)
if(strcmp(s->name,p->name)==0)
{
cout<<"          ≮同一读者不能重复注册!≯";
return 1;
}

cout<<"          ○输入性别:(男:m,女:f)";      //男m,女f
cin>>p->sex;
for(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<<"            ○输入要删除的读者的编号:"<<endl;
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<<"                           →请在此输入您的选择:";
}

/***********************************************************
02.* 版权所有 (C)2016,刘富家
03.*
04.* 文件名称: Library.h
05.* 文件标识:无
06.* 内容摘要:函数文件
07.* 其它说明:各个模块函数
08.* 作 者:刘富家
09.* 完成日期: 20161231 */
#include "Library.h"

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

int main()
{

FILE *fpb1,*fpb2,*fpm1,*fpm2,*fph1,*fph2;              //文件指针
Book *p1,*p2,*s1;
Member *q1,*q2,*s2;
int *f1,*f2,i=0,count=0;
f1=f2=X;
H=Init_B();
L=Init_M();
fph1=fopen("xier.dat","rb");
if(fph1!=NULL)
{
while(fread(f1,sizeof(X),1,fph1)==1)
{
X[i]=*f1;
++count;
}
}
xer=count;
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);
fph2=fopen("xier.dat","wb");
for(i=0;i<xer;i++)
{
fwrite(f2,sizeof(X),1,fph2);
}
fclose(fph2);

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: