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

时间:2022-09-28 08:57:54

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

头文件——Library.cpp

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

#ifndef MY_H_FILE
#define MY_H_FILE

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

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

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

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

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

#include "Library.h"

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



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

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

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

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

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

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

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

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


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

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


ShellSort(R,xer);

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

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

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

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

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

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

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

#include "Library.h"

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

int main()
{

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