头文件——Library.cpp
/*********************************************************** * 版权所有 (C)2015,WangCong * * 文件名称: Library.h * 文件标识:无 * 内容摘要:函数文件 * 其它说明:各个模块函数 * 当前版本: V5.0 * 作 者:王聪 * 完成日期: 20151224 * * 修改记录1: * 修改日期 :20151205 * 版本号: V1.0 * 修改人: 王聪 * 修改内容:创建 * * 修改记录2: * 修改日期: 20151215 * 版本号: V2.0 * 修改人: 王聪 * 修改内容:模块建立1 * * 修改记录3: * 修改日期: 20151216 * 版本号: V2.1 * 修改人: 王聪 * 修改内容:模块建立2 * * 修改记录4: * 修改日期: 20151220 * 版本号: V3.0 * 修改人: 王聪 * 修改内容:模块建立3 * * 修改记录5: * 修改日期: 20151221 * 版本号: V4.0 * 修改人: 王聪 * 修改内容:整理函数 * * 修改记录6: * 修改日期: 20151224 * 版本号: V5.0 * 修改人: 王聪 * 修改内容:界面整合 **********************************************************/ #ifndef MY_H_FILE #define MY_H_FILE #include <iostream> using namespace std; #include <cstdlib> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fstream> #include <iomanip> #include <time.h> #define MAX 100 #define MAX1 2 //本科生最大借阅量 #define MAX2 5 //研究生最大借阅量 #define MAX3 10 //教师最大借阅量 #define MAX4 100 //管理员最大借阅量 #define MaxSize 100 //100条记录 typedef char InfoType[10]; typedef struct //记录类型 { int key; //关键字项 } RecType; //排序的记录类型定义 //书的结构体 typedef struct book { float price; //图书单价 int membernum; //借书人编号 char name[80]; //图书名 long num; //图书编号 char writername[20]; //作者姓名 char publish[40]; //出版社名称 int yes; //判断书是否存在或者已经借出,1存在,0借出 struct book *next; //结点指针 } Book,*BookList; //借书时间结构体 typedef struct Time { int year; int month; int day; } data; //读者借的书的结构体 typedef struct BorrowBook { long num; //借的书的编号 struct Time time; //借书时间 struct Time borrowtime; //借书期限 } BBook; //读者的结构体 typedef struct member { char name[20]; //读者姓名 char sex; //读者性别,男m,女f long num; //读者编号 int style; //读者类型,1:本科生;2:研究生;3:教师;4:管理员; int max; //读者借书数目,初始为0 int yes; //读者是否借书,1是,0否 BBook t[MAX]; //读者借的书的数组 struct member *next; //结点指针 } Member,*MemberList; //界面 void Face(); void FaceBook(); void FaceBookSearh(); void FaceDu(); void FaceDuSearh(); //初试化 Book *Init_B(); //初试化图书链表 int BookAdd(BookList &); //建立一个带头结点的链表用来存储图书信息 //查询图书方式 int BookSearch(BookList &); //图书查询菜单 int Search_BookNum(BookList &); //按编号查询 int Search_BookName(BookList &); //按书名查询 int Search_BookWritername(BookList &); //按作者名查询 int Search_Publish(BookList &); //按出版社查询 int Search_AllB(BookList &); //查询所有图书信息 //删除图书 int BookDel(BookList &); //以图书编号作为主键进行删除 //修改图书信息 int BookChange(BookList &); //图书借阅 int Member_Y(MemberList &,long); //判断是否是读者,1是,0否。只有读者才有权限借书 int BookBorrow(BookList &,MemberList &); //借阅时以编号作为主键 //增加读者 Member *Init_M(); //初试化读者链表 int MemberAdd(MemberList &); //建立一个带头结点的链表用来存储读者信息 //修改读者信息 int MemberChange(MemberList &); //查询读者 int MemberSearch(MemberList &); int Search_MemberName(MemberList &); //按姓名查询 int Search_MemberNum(MemberList &); //按编号查询 int Search_MemberSex(MemberList &); //按性别查询 int Search_AllM(MemberList &); //查询所有读者信息 //还书 int BookReturn(BookList &,MemberList &); //还书时以编号作为主键 //删除读者 int MemberDel(MemberList &); //以读者编号作为主键进行删除 //借书信息 int BorrowInfo(MemberList &); //到期书催还 int LimitTimeInfo(BookList &,MemberList &); //排序函数 int BookPai(BookList &); void ShellSort(RecType [],int); //全局变量声明 extern RecType R[MaxSize]; extern int xer; extern int X[100]; #endif各功能函数——Library.cpp
/*********************************************************** * 版权所有 (C)2015,WangCong * * 文件名称: Library.cpp * 文件标识:无 * 内容摘要:函数文件 * 其它说明:各个模块函数 * 当前版本: V5.0 * 作 者:王聪 * 完成日期: 20151224 * * 修改记录1: * 修改日期 :20151205 * 版本号: V1.0 * 修改人: 王聪 * 修改内容:创建 * * 修改记录2: * 修改日期: 20151215 * 版本号: V2.0 * 修改人: 王聪 * 修改内容:模块建立1 * * 修改记录3: * 修改日期: 20151216 * 版本号: V2.1 * 修改人: 王聪 * 修改内容:模块建立2 * * 修改记录4: * 修改日期: 20151220 * 版本号: V3.0 * 修改人: 王聪 * 修改内容:模块建立3 * * 修改记录5: * 修改日期: 20151221 * 版本号: V4.0 * 修改人: 王聪 * 修改内容:整理函数 * * 修改记录6: * 修改日期: 20151224 * 版本号: V5.0 * 修改人: 王聪 * 修改内容:界面整合 **********************************************************/ #include "Library.h" /********************************************************* * 功能描述:图书编号排序 * 输入参数:无 * 输出参数:无 * 返回值 :无 * 其它说明:希尔排序算法 ************************************************************/ void ShellSort(RecType R[],int n) //希尔排序算法 { int i,j,gap; RecType tmp; gap=n/2; //增量置初值 while (gap>0) { for (i=gap; i<n; i++) //对所有相隔gap位置的所有元素组进行排序 { tmp=R[i]; j=i-gap; while (j>=0 && tmp.key<R[j].key)//对相隔gap位置的元素组进行排序 { R[j+gap]=R[j]; j=j-gap; } R[j+gap]=tmp; j=j-gap; } gap=gap/2; //减小增量 } } /********************************************************* * 功能描述:查询图书 * 输入参数:n-要查询的书名 * 输出参数:要查询书的信息 * 返回值 :(1) * 其它说明:按书名查询 ************************************************************/ int Search_BookName(BookList &H) //按书名查询 { Book *p; p=H->next; char n[80]; int flag=0; cout<<" ○输入要查询的书名:"; cin>>n; for(; p!=NULL; p=p->next) { if(strcmp(p->name,n)==0) { if(flag==0) cout<<endl<<"书名 编号 单价 作者 出版社 是否借出"<<endl; cout<<" "<<p->name<<" "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish; if(p->yes==1) cout<<setw(15)<<"否"<<endl; else cout<<setw(15)<<"是"<<endl; flag=1; continue; } } cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; if(p==NULL&&flag==0) { cout<<" ※没有相关信息!※"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; } return 1; } /********************************************************* * 功能描述:初试化图书链表 * 输入参数:无 * 输出参数:无 * 返回值 :图书链表 * 其它说明:无 ************************************************************/ //增加图书 Book *Init_B() //初试化图书链表 { Book *H; H=(Book *)malloc(sizeof(Book)); if(!H) exit(1); H->next=NULL; return H; } /********************************************************* * 功能描述:新建图书 * 输入参数:X[xer]-图书编号 * 输出参数:是否成功增加 * 返回值 :(1) * 其它说明:无 ************************************************************/ int BookAdd(BookList &H) //建立一个带头结点的链表用来存储图书信息 { int i=0; //统计要增加的图书量 Book *p,*q,*s; p=(Book *)malloc(sizeof(Book)); if(!p) exit(1); if(H->next==NULL) { cout<<" ○输入图书编号:"; cin>>p->num; X[xer]=p->num; if(p->num==0) //退出"增加图书" { cout<<" 共计"<<i<<"本图书入库!"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; return 1; } cout<<" ○输入书名:"; cin>>p->name; for(s=H->next; s!=NULL; s=s->next) if(s->num==p->num) { cout<<" ≮一个编号对应一本书!≯"; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; return 1; } cout<<" ○输入图书价格:"; cin>>p->price; cout<<" ○输入作者姓名:"; cin>>p->writername; cout<<" ○输入出版社名称:"; cin>>p->publish; p->yes=1; //1表示没有借出 p->next=NULL; H->next=p; q=p; ++i; cout<<endl<< X[xer]; xer++; } else { q=H; while(q->next!=NULL) q=q->next; p->num=1; //进入循环的条件 p->next=NULL; } while(p->num!=0) //以图书编号作为判断链表是否结束 { p=(Book *)malloc(sizeof(Book)); if(!p) exit(1); cout<<" ○输入图书编号:"; cin>>p->num; //希尔数组的加入 X[xer]=p->num; if(p->num==0) //退出"增加图书" { cout<<" 共计"<<i<<"本图书入库!"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; break; } cout<<" ○输入书名:"; cin>>p->name; cout<<" ○输入图书价格:"; cin>>p->price; cout<<" ○输入作者姓名:"; cin>>p->writername; cout<<" ○输入出版社名称:"; cin>>p->publish; p->yes=1; //1表示没有借出 p->next=NULL; q->next=p; q=p; ++i; //希尔数组的加入 cout<<endl<< X[xer]; xer++; } return 1; } /********************************************************* * 功能描述:查询图书 * 输入参数:n-书的编号 * 输出参数:查询的相应信息 * 返回值 :(1) * 其它说明:按编号查询 ************************************************************/ //查询图书方式 int Search_BookNum(BookList &H) //按编号查询 { Book *p; p=H->next; long n; int flag=0; cout<<" ○输入要查询的书的编号:"; cin>>n; for(; p!=NULL; p=p->next) { if(n==p->num) { if(flag==0) cout<<endl<<"书名 编号 单价 作者 出版社 是否借出"<<endl; cout<<" "<<p->name<<" "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish; if(p->yes==1) cout<<setw(15)<<"否"<<endl; else cout<<setw(15)<<"是"<<endl; flag=1; continue; } } cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; if(p==NULL&&flag==0) { cout<<" ※没有相关信息※!"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; } return 1; } /********************************************************* * 功能描述:查询图书 * 输入参数:n-书的作者名 * 输出参数:查询的相应信息 * 返回值 :(1) * 其它说明:按作者名查询 ************************************************************/ int Search_BookWritername(BookList &H) //按作者名查询 { Book *p; p=H->next; int flag=0; char n[30]; cout<<" ○输入要查询的书的作者名:"; cin>>n; for(; p!=NULL; p=p->next) { if(strcmp(p->writername,n)==0) { if(flag==0) cout<<endl<<"书名 编号 单价 作者 出版社 是否借出"<<endl; cout<<" "<<p->name<<" "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish; if(p->yes==1) cout<<setw(15)<<"否"<<endl; else cout<<setw(15)<<"是"<<endl; flag=1; continue; } } cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; if(p==NULL&&flag==0) { cout<<" ※没有相关信息!※"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; } return 1; } /********************************************************* * 功能描述:查询图书 * 输入参数:n-书的出版社 * 输出参数:查询的相应信息 * 返回值 :(1) * 其它说明:按出版社查询 ************************************************************/ int Search_Publish(BookList &H) //按出版社查询 { Book *p; p=H->next; int flag=0; char n[50]; cout<<" ○输入要查询的书的出版社名称:"; cin>>n; for(; p!=NULL; p=p->next) { if(strcmp(p->publish,n)==0) { if(flag==0) cout<<endl<<"书名 编号 单价 作者 出版社 是否借出"<<endl; cout<<" "<<p->name<<" "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish; if(p->yes==1) cout<<setw(15)<<"否"<<endl; else cout<<setw(15)<<"是"<<endl; flag=1; continue; } } cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; if(p==NULL&&flag==0) { cout<<" ※没有相关信息!※"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; } return 1; } /********************************************************* * 功能描述:查询图书 * 输入参数:无 * 输出参数:图书信息 * 返回值 :(1) * 其它说明:显示所有信息 ************************************************************/ int Search_AllB(BookList &H) //查询所有图书信息 { Book *p; p=H->next; int i=0,flag=0; for(; p!=NULL; p=p->next) { if(flag==0) cout<<endl<<"书名 编号 单价 作者 出版社 是否借出"<<endl; cout<<" "<<p->name<<" "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish; if(p->yes==1) cout<<setw(15)<<"否"<<endl; else cout<<setw(15)<<"是"<<endl; flag=1; i++; } cout<<" 共计"<<i<<"本书。"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; return 1; } /********************************************************* * 功能描述:查询图书选择模块 * 输入参数:0~9(对应相应功能) * 输出参数:相应界面 * 返回值 :(1) * 其它说明:0是退出 ************************************************************/ int BookSearch(BookList &H) { int m; while(m!=0) { FaceBookSearh(); cin>>m; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; switch(m) { case 1: Search_BookName(H); break; //按书名查询 case 2: Search_BookNum(H); break; //按编号查询 case 3: Search_BookWritername(H); break; //按作者名查询 case 4: Search_Publish(H); break; //按出版社查询 case 5: Search_AllB(H); break; //查询所有图书信息 case 0: break; //退出 } } return 1; } /********************************************************* * 功能描述:删除图书 * 输入参数:n-删除的书的编号 * 输出参数:是否删除 * 返回值 :(1) * 其它说明:按图书编号删除 **********************************************************/ //删除图书 int BookDel(BookList &H) //以图书编号作为主键进行删除 { Book *p; long n; int flag=0; p=H; cout<<" ○输入要删除的书的编号:"; cin>>n; for(; p!=NULL; p=p->next) { if(p->next!=NULL&&p->next->num==n) { if(p->next->yes==0) { cout<<" ERROR!当前图书被借出,不能删除!"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; return 1; } p->next=p->next->next; //删除语句 cout<<" √成功删除!"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; flag=1; //成功删除标记 break; } } if(p==NULL&&flag==0) { cout<<" 删除不成功!"<<endl; //已经被删除或没有这本书 cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; } return 1; } /********************************************************* * 功能描述:修改图书 * 输入参数:n-修改的书的编号 * 输出参数:是否修改成功 * 返回值 :(1) * 其它说明:按图书编号修改 ************************************************************/ //修改图书信息 int BookChange(BookList &H) //以图书编号作为主键进行修改 { Book *p; long n; int flag=0; p=H; cout<<" ○输入要修改的书的编号:"; cin>>n; for(; p!=NULL; p=p->next) { if(p->num==n) { if(p->next->yes==0) { cout<<" ERROR!当前图书被借出,不能修改!"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; return 1; } cout<<"以下为要修改的图书:"<<endl<<"书名 编号 单价 作者 出版社 是否借出"<<endl; cout<<" "<<p->name<<" "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish; if(p->yes==1) cout<<setw(15)<<"否"<<endl; else cout<<setw(15)<<"是"<<endl; cout<<" 请输入相应修改数据"<<endl; cout<<" ○输入编号:"; cin>>p->num; cout<<" ○输入书名:"; cin>>p->name; cout<<" ○输入图书价格:"; cin>>p->price; cout<<" ○输入作者姓名:"; cin>>p->writername; cout<<" ○输入出版社名称:"; cin>>p->publish; cout<<" √成功修改!"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; flag=1; //成功修改标记 break; } } if(p==NULL&&flag==0) { cout<<" 修改失败,没有这本书!"<<endl; //没有这本书 cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; } return 1; } /********************************************************* * 功能描述:判断是否是读者 * 输入参数:无 * 输出参数:无 * 返回值 :(0-不是读者,1-是读者) * 其它说明:只有读者才有权限借书 ************************************************************/ int Member_Y(MemberList &L,long num) //判断是否是读者,1是,0否。只有读者才有权限借书 { Member *p; p=L; for(; p!=NULL; p=p->next) if(p->num==num) return 1; return 0; } /********************************************************* * 功能描述:借阅图书 * 输入参数:num-读者编号,m-借阅的书编号 * 输出参数:能否借出 * 返回值 :(1) * 其它说明:按书的编号查询 ************************************************************/ //借阅图书 int BookBorrow(BookList &H,MemberList &L) //借阅时以编号作为主键 { Book *p,*s; Member *q; long m=1,num; int t=0,flag=0,max,i; cout<<" ▲输入读者编号:"; cin>>num; if(Member_Y(L,num)==1) { q=L; for(; q!=NULL; q=q->next) if(q->num==num) break; while(m) { if(t==0) cout<<" ▲输入要借阅的书的相关信息:"; t=1; cout<<" ▲编号:"; cin>>m; for(s=H->next; s!=NULL; s=s->next) if(s->num==m) break; if(s==NULL) { cout<<" ERROR!没有这本书!"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; continue; } for(p=H->next; p!=NULL; p=p->next) { if(p->num==m) { if(p->yes==0) { cout<<" ERROR!当前图书被借出,不能借阅!"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; break; } if(q->style==1) max=MAX1; else if(q->style==2) max=MAX2; else if(q->style==3) max=MAX3; else if(q->style==4) max=MAX4; q->max++; if(q->max>max) { cout<<" ●你已经借的书超过了最大借阅量,不能再借书!"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; q->max--; return 1; } p->yes=0; p->membernum=q->num; q->yes=1; for(i=1; i<=max; i++) if(q->t[i].num==0) break; q->t[i].num=p->num; time_t timer=time(0);//调用time()函数获取当前时间 struct tm *ptrtime=localtime(&timer);//调用localtime()函数将获得的系统时间转化为指向struct tm的指针指向的结构体 q->t[i].time.year=1900+ptrtime->tm_year; q->t[i].time.month=1+ptrtime->tm_mon; q->t[i].time.day=ptrtime->tm_mday; if(q->t[i].time.month>=10) q->t[i].borrowtime.year=1900+ptrtime->tm_year+1; else q->t[i].borrowtime.year=1900+ptrtime->tm_year; q->t[i].borrowtime.month=(1+ptrtime->tm_mon+3)%12; q->t[i].borrowtime.day=ptrtime->tm_mday; cout<<" 成功借出!"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; flag=1; //成功借出标记 break; } } if(p==NULL&&flag==0) { cout<<" 借书不成功!"<<endl; //没有这本书 cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; } } } else { cout<<" ☆对不起,您不是读者,借书失败!如果想进行此操作,请先申请!"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; } return 1; } /********************************************************* * 功能描述:归还图书 * 输入参数:m-图书编号 * 输出参数:是否还书成功 * 返回值 :(1) * 其它说明:按书名查询 ************************************************************/ //还书 int BookReturn(BookList &H,MemberList &L) //还书时以编号作为主键 { Book *p,*s; Member *q; long m=1; int flag=0,max; cout<<" ○输入要归还的书的相关信息:"; while(m) { cout<<" ○编号:"; cin>>m; for(s=H->next; s!=NULL; s=s->next) if(s->num==m) break; if(s==NULL) { cout<<" ≮没有这本书!≯"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; continue; } for(p=H->next; p!=NULL; p=p->next) { if(p->num==m) { if(p->yes==1) { cout<<" ≮这本书没有借出,还书失败!≯"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; break; } for(q=L; q!=NULL; q=q->next) if(q->num==p->membernum) break; p->yes=1; if(q->style==1) max=MAX1; else if(q->style==2) max=MAX2; else if(q->style==3) max=MAX3; else if(q->style==4) max=MAX4; for(int k=1; k<=max; k++) //从借的书的数组中删除这本书 if(q->t[k].num==p->num) { q->t[k].num=0; q->max--; break; } cout<<" √还书成功!"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; if(q->max==0) q->yes=0; flag=1; //成功还书标记 break; } } if(p==NULL&&flag==0) { cout<<" 还书不成功!"<<endl; //没有借这本书 cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; } } return 1; } /********************************************************* * 功能描述:初试化读者链表 * 输入参数:无 * 输出参数:无 * 返回值 :读者链表 * 其它说明:无 ************************************************************/ Member *Init_M() //初试化读者链表 { Member *L; L=(Member *)malloc(sizeof(Member)); if(!L) exit(1); L->next=NULL; return L; } /********************************************************* * 功能描述:增加读者 * 输入参数:p->num-读者编号 * 输出参数:是否成功增加 * 返回值 :(1) * 其它说明:无 ************************************************************/ //增加读者 int MemberAdd(MemberList &L) //建立一个带头结点的链表用来存储读者信息 { int i=0,k=0,max; //统计要增加的读者人数 Member *p,*q,*s; p=(Member *)malloc(sizeof(Member)); if(!p) exit(1); if(L->next==NULL) { cout<<" ○输入编号:"; cin>>p->num; if(p->num==0) //退出"增加读者" { cout<<" 共计"<<k<<"名读者入会!"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; return 1; } cout<<" ○输入姓名:"; cin>>p->name; for(s=L->next; s!=NULL; s=s->next) if(s->num==p->num) { cout<<" ≮同一读者不能重复注册!≯"; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; return 1; } cout<<" ○输入性别:(男:m,女:f)"; //男m,女f cin>>p->sex; cout<<" ○输入读者类型:(1:本科生;2:研究生;3:教师;4:管理员;)"; cin>>p->style; if(p->style==1) max=MAX1; else if(p->style==2) max=MAX2; else if(p->style==3) max=MAX3; else if(p->style==4) max=MAX4; for(int i=0; i<=max; i++) p->t[i].num=0; p->max=0; //借阅数目,初始为0 p->yes=0; //0表示没有借书 p->next=NULL; L->next=p; q=p; ++k; cout<<endl; } else { q=L; while(q->next!=NULL) q=q->next; p->num=1; p->next=NULL; } while(p->num!=0) //以读者学号作为判断链表是否结束 { p=(Member *)malloc(sizeof(Member)); if(!p) exit(1); cout<<" ○输入编号:"; cin>>p->num; if(p->num==0) //退出"增加读者" { cout<<" 共计"<<k<<"名读者入会!"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; break; } cout<<" ○输入姓名:"; cin>>p->name; for(s=L->next; s!=NULL; s=s->next) if(s->num==p->num) { cout<<" ≮同一读者不能重复注册!≯"; return 1; } cout<<" ○输入性别:(男:m,女:f)"; //男m,女f cin>>p->sex; for(int i=0; i<MAX; i++) p->t[i].num=0; cout<<" ○输入读者类型:(1:本科生;2:研究生;3:教师;4:管理员;)"; cin>>p->style; if(p->style==1) max=MAX1; else if(p->style==2) max=MAX2; else if(p->style==3) max=MAX3; else if(p->style==4) max=MAX4; for(i=0; i<=max; i++) p->t[i].num=0; p->max=0; //借阅数目,初始为0 p->yes=0; //0表示没有借书 p->next=NULL; q->next=p; q=p; ++k; cout<<endl; } return 1; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; } /********************************************************* * 功能描述:修改读者信息 * 输入参数:n-修改的读者编号 * 输出参数:是否修改成功 * 返回值 :(1) * 其它说明:按读者编号修改 ************************************************************/ //修改读者信息 int MemberChange(MemberList &L) //以读者编号作为主键进行修改 { Member *p; p=L->next; long n; int flag=0; cout<<" ○输入要修改的读者编号:"; cin>>n; for(; p!=NULL; p=p->next) { if(p->num==n) { cout<<"以下为要修改的读者信息:"<<endl<<"姓名 编号 性别 类型 是否借书"<<endl; cout<<p->name<<" "<<setw(11)<<p->num; if(p->sex=='m') cout<<setw(13)<<"男"<<" "; else if(p->sex=='f') cout<<setw(13)<<"女"<<" "; if(p->style==1) cout<<setw(10)<<"本科生"<<" "; else if(p->style==2) cout<<setw(10)<<"研究生"<<" "; else if(p->style==3) cout<<setw(10)<<"教师"<<" "; else if(p->style==4) cout<<setw(10)<<"管理员"<<" "; if(p->yes==1) cout<<setw(10)<<"是"<<endl; else cout<<setw(10)<<"否"<<endl; cout<<"请输入修改信息:"; cout<<" ○输入编号:"; cin>>p->num; cout<<" ○输入姓名:"; cin>>p->name; cout<<" ○输入性别:(男:m,女:f)"; //男m,女f cin>>p->sex; cout<<" ○输入读者类型:(1:本科生;2:研究生;3:教师;4:管理员;)"; cin>>p->style; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; cout<<" 修改成功"<<endl; flag=1; //成功修改标记 break; } } cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; if(p==NULL&&flag==0) { cout<<" 修改失败,没有此读者!"<<endl; //没有此读者 cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; } return 1; } /********************************************************* * 功能描述:查询读者信息 * 输入参数:n-查询的读者姓名 * 输出参数:查询的读者信息结果 * 返回值 :(1) * 其它说明:按读者姓名查询 ************************************************************/ //查询读者 int Search_MemberName(MemberList &L) //按姓名查询 { Member *p; p=L->next; char n[20]; int flag=0; cout<<" ○输入要查询的读者姓名:"; cin>>n; for(; p!=NULL; p=p->next) { if(strcmp(p->name,n)==0) { if(flag==0) cout<<endl<<"姓名 编号 性别 类型 是否借书"<<endl; cout<<p->name<<" "<<setw(11)<<p->num; if(p->sex=='m') cout<<setw(13)<<"男"<<" "; else if(p->sex=='f') cout<<setw(13)<<"女"<<" "; if(p->style==1) cout<<setw(10)<<"本科生"<<" "; else if(p->style==2) cout<<setw(10)<<"研究生"<<" "; else if(p->style==3) cout<<setw(10)<<"教师"<<" "; else if(p->style==4) cout<<setw(10)<<"管理员"<<" "; if(p->yes==1) cout<<setw(10)<<"是"<<endl; else cout<<setw(10)<<"否"<<endl; flag=1; continue; } } cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; if(p==NULL&&flag==0) { cout<<" ≮没有相关信息!≯"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; } return 1; } /********************************************************* * 功能描述:查询读者信息 * 输入参数:n-查询的读者编号 * 输出参数:查询的读者信息结果 * 返回值 :(1) * 其它说明:按读者编号查询 ************************************************************/ int Search_MemberNum(MemberList &L) //按编号查询 { Member *p; p=L->next; long n; int flag=0; cout<<" ○输入要查询的读者编号:"; cin>>n; for(; p!=NULL; p=p->next) { if(p->num==n) { if(flag==0) cout<<endl<<"姓名 编号 性别 类型 是否借书"<<endl; cout<<p->name<<" "<<setw(11)<<p->num; if(p->sex=='m') cout<<setw(13)<<"男"<<" "; else if(p->sex=='f') cout<<setw(13)<<"女"<<" "; if(p->style==1) cout<<setw(10)<<"本科生"<<" "; else if(p->style==2) cout<<setw(10)<<"研究生"<<" "; else if(p->style==3) cout<<setw(10)<<"教师"<<" "; else if(p->style==4) cout<<setw(10)<<"管理员"<<" "; if(p->yes==1) cout<<setw(10)<<"是"<<endl; else cout<<setw(10)<<"否"<<endl; flag=1; continue; } } cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; if(p==NULL&&flag==0) { cout<<" ※没有相关信息!※"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; } return 1; } /********************************************************* * 功能描述:查询读者信息 * 输入参数:n-查询的读者性别 * 输出参数:查询的读者信息结果 * 返回值 :(1) * 其它说明:按读者性别查询 ************************************************************/ int Search_MemberSex(MemberList &L) //按性别查询 { Member *p; p=L->next; int flag=0; char n; cout<<" ○输入要查询的读者性别:(男:m,女:f)"; cin>>n; for(; p!=NULL; p=p->next) { if(p->sex==n) { if(flag==0) cout<<endl<<"姓名 编号 性别 类型 是否借书"<<endl; cout<<p->name<<" "<<setw(11)<<p->num; if(p->sex=='m') cout<<setw(13)<<"男"<<" "; else if(p->sex=='f') cout<<setw(13)<<"女"<<" "; if(p->style==1) cout<<setw(10)<<"本科生"<<" "; else if(p->style==2) cout<<setw(10)<<"研究生"<<" "; else if(p->style==3) cout<<setw(10)<<"教师"<<" "; else if(p->style==4) cout<<setw(10)<<"管理员"<<" "; if(p->yes==1) cout<<setw(10)<<"是"<<endl; else cout<<setw(10)<<"否"<<endl; flag=1; continue; } } cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; if(p==NULL&&flag==0) { cout<<" ※没有相关信息!※"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; } return 1; } /********************************************************* * 功能描述:查询读者信息 * 输入参数:无 * 输出参数:读者信息 * 返回值 :(1) * 其它说明:显示全部 ************************************************************/ int Search_AllM(MemberList &L) //查询所有读者信息 { Member *p; int i=0,flag=0; p=L->next; for(; p!=NULL; p=p->next) { if(flag==0) cout<<endl<<"姓名 编号 性别 类型 是否借书"<<endl; cout<<p->name<<" "<<setw(11)<<p->num; if(p->sex=='m') cout<<setw(13)<<"男"<<" "; else if(p->sex=='f') cout<<setw(13)<<"女"<<" "; if(p->style==1) cout<<setw(10)<<"本科生"<<" "; else if(p->style==2) cout<<setw(10)<<"研究生"<<" "; else if(p->style==3) cout<<setw(10)<<"教师"<<" "; else if(p->style==4) cout<<setw(10)<<"管理员"<<" "; if(p->yes==1) cout<<setw(10)<<"是"<<endl; else cout<<setw(10)<<"否"<<endl; flag=1; i++; } cout<<" 共计"<<i<<"个读者。"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; return 1; } /********************************************************* * 功能描述:查询读者方式模块 * 输入参数:(0~4) * 输出参数:按方式查询界面 * 返回值 :(1) * 其它说明:0是退出 ************************************************************/ int MemberSearch(MemberList &L) { int m; while(m!=0) { FaceDuSearh(); cin>>m; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; switch(m) { case 1: Search_MemberName(L); break; //按姓名查询 case 2: Search_MemberNum(L); break; //按编号查询 case 3: Search_MemberSex(L); break; //按性别查询 case 4: Search_AllM(L); break; //查询所有读者信息 case 0: break; //退出 } } return 1; } /********************************************************* * 功能描述:删除读者 * 输入参数:n-要删除的读者编号 * 输出参数:删除是否成功 * 返回值 :(1) * 其它说明:按读者编号作为主键进行删除 ************************************************************/ //删除读者 int MemberDel(MemberList &L) //以读者编号作为主键进行删除 { Member *p; long n; int flag=0; p=L; cout<<" ○输入要删除的读者的编号:"; cin>>n; for(; p!=NULL; p=p->next) { if(p->next!=NULL&&p->next->num==n) { if(p->next->yes==1) { cout<<" ※当前读者借了书,不能删除!※"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; return 1; } p->next=p->next->next; //删除语句 cout<<" 成功删除!"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; flag=1; //成功删除标记 break; } } if(p==NULL&&flag==0) { cout<<" ※该读者不存在。删除不成功!※"<<endl; //已经被删除或没有这个读者 cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; } return 1; } /********************************************************* * 功能描述:借书信息 * 输入参数:n-要查询的读者编号 * 输出参数:借书详细情况 * 返回值 :(1) * 其它说明:按书名查询 ************************************************************/ //借书信息 int BorrowInfo(MemberList &L) { Member *p; int j,flag=0,max,k=0; long n; cout<<" ○当前会员名单:"<<endl; Search_AllM(L); cout<<" ○输入要查询的读者编号:"; cin>>n; for(p=L; p!=NULL; p=p->next) { if(p->num==n&&p->yes==1) { if(p->style==1) max=MAX1; else if(p->style==2) max=MAX2; else if(p->style==3) max=MAX3; else if(p->style==4) max=MAX4; cout<<" ∷借书详细情况∷"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; for(j=1; j<=max; j++) { if(p->t[j].num!=0) { k++; if(flag==0) cout<<"本数"<<setw(15)<<"编号"<<setw(15)<<"借书时间"<<setw(15)<<"到期时间"<<endl; printf("%d\t\t%ld\t ",k,p->t[j].num); printf("%d-%d-%d ",p->t[j].time.year,p->t[j].time.month,p->t[j].time.day); printf("%d-%d-%d\n",p->t[j].borrowtime.year,p->t[j].borrowtime.month,p->t[j].borrowtime.day); flag=1; } } cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; } else if(p->num==n&&p->yes==0) { cout<<" ≮无借书记录!≯"<<endl; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; } } return 1; } /********************************************************* * 功能描述:到期书催还 * 输入参数:超期信息 * 输出参数:超期信息,无超期信息无显示 * 返回值 :(1) * 其它说明:调用系统时间函数 ************************************************************/ //到期书催还 int LimitTimeInfo(BookList &H,MemberList &L) { cout<<"进入时间模块"<<endl; struct Time limittime; Book *p; Member *q; int flag=0,i; time_t timer=time(0);//调用time()函数获取当前时间 struct tm *ptrtime=localtime(&timer);//调用localtime()函数将获得的系统时间转化为指向struct tm的指针指向的结构体 limittime.year=1900+ptrtime->tm_year; limittime.month=1+ptrtime->tm_mon; limittime.day=ptrtime->tm_mday; for(p=H->next; p!=NULL; p=p->next) { if(p->yes==0) { for(q=L->next; q!=NULL; q=q->next) if(p->membernum==q->num) break; for(i=1; i<=q->max; i++) if(q->t[i].num==p->num) break; if(flag==0) cout<<"书号 "<<setw(10)<<"借书人编号 "<<setw(10)<<"到期信息"<<endl; flag=1; if(limittime.year>q->t[i].borrowtime.year) { cout<<p->num<<" "<<p->membernum<<" "; cout<<" ◇已经超期,尽快还书!◇"<<endl; } else if(limittime.year==q->t[i].borrowtime.year) { if(limittime.month>q->t[i].borrowtime.month) { cout<<p->num<<" "<<p->membernum<<" "; cout<<" ◇已经超期,尽快还书!◇"<<endl; } else if(limittime.month==q->t[i].borrowtime.month) { if(limittime.day>q->t[i].borrowtime.day) { cout<<p->num<<" "<<p->membernum<<" "; cout<<" ◇已经超期,尽快还书!◇"<<endl; } } } } } return 1; } /********************************************************* * 功能描述:实现编号排序 * 输入参数:无 * 输出参数:排序后的编号 * 返回值 :(1) * 其它说明:希尔排序 ************************************************************/ int BookPai(BookList &H) { Book *p; p=H->next; int i; for(i=0; i<xer; i++) R[i].key=X[i]; cout<<"排序前:"<<endl; for(; p!=NULL; p=p->next) { cout<<endl<<"书名 编号 单价 作者 出版社 是否借出"<<endl; cout<<" "<<p->name<<" "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish; if(p->yes==1) cout<<setw(15)<<"否"<<endl; else cout<<setw(15)<<"是"<<endl; } ShellSort(R,xer); cout<<"排序后编号:"<<endl; for(i=0; i<xer; i++) cout<<R[i].key<<endl; return 1; } /********************************************************* * 功能描述:欢迎界面 * 输入参数:无 * 输出参数:无 * 返回值 :无 * 其它说明:界面1 ************************************************************/ void Face() { system("color 74"); cout<<endl<<" ———————————— 欢迎进入图书管理系统 ———————————"<<endl; cout<<endl<<" ┏━━━━━━━━━━━━━━━━━━┓"<<endl; cout<<" ┃ ┃"<<endl; cout<<" ┃ ◆1◆ 管理图书 ┃"<<endl; cout<<" ┃ ◆2◆ 管理读者 ┃"<<endl; cout<<" ┃ ◆0◆ 退出系统 ┃"<<endl; cout<<" ┃ ┃"<<endl; cout<<" ┗━━━━━━━━━━━━━━━━━━┛"<<endl; cout<<" →请在此输入您的选择:"; } /********************************************************* * 功能描述:读者查询界面 * 输入参数:无 * 输出参数:无 * 返回值 :无 * 其它说明:界面2 ************************************************************/ void FaceDuSearh() { cout<<" ◢━━━━━━━━━━━◣"<<endl; cout<<" ┃$欢迎进入读者查询系统$┃"<<endl; cout<<" ◥━━━━━━━━━━━◤"<<endl; cout<<" ┌──────────────┐ "<<endl; cout<<" │ ① 按姓名查询 ---- (NAM) $ │ "<<endl; cout<<" ├──────────────┤ "<<endl; cout<<" │ ② 按编号查询 ---- (NUM) $ │ "<<endl; cout<<" ├──────────────┤ "<<endl; cout<<" │ ③ 按性别查询 ---- (SEX) $ │ "<<endl; cout<<" ├──────────────┤ "<<endl; cout<<" │ ④ 查询所有信息 -- (ALL) $ │ "<<endl; cout<<" ├──────────────┤ "<<endl; cout<<" │ ⑤ 到期催还 ------ (TIME)$ │ "<<endl; cout<<" ├──────────────┤ "<<endl; cout<<" │ 0. 退 出 ------ (ESC) $ │ "<<endl; cout<<" └──────────────┘ "<<endl; cout<<" →请在此输入您的选择:"; } /********************************************************* * 功能描述:图书查询界面 * 输入参数:无 * 输出参数:无 * 返回值 :无 * 其它说明:界面2 ************************************************************/ void FaceBookSearh() { cout<<" ◢━━━━━━━━━━━◣"<<endl; cout<<" ┃#欢迎进入图书查询系统#┃"<<endl; cout<<" ◥━━━━━━━━━━━◤"<<endl; cout<<" ┌──────────────┐ "<<endl; cout<<" │ ① 按书名查询 ----- (NAM) #│ "<<endl; cout<<" ├──────────────┤ "<<endl; cout<<" │ ② 按编号查询 ----- (NUM) #│ "<<endl; cout<<" ├──────────────┤ "<<endl; cout<<" │ ③ 按作者名查询 --- (SEX) #│ "<<endl; cout<<" ├──────────────┤ "<<endl; cout<<" │ ④ 按出版社查询 --- (ALL) #│ "<<endl; cout<<" ├──────────────┤ "<<endl; cout<<" │ ⑤ 查询所有信息 --- (TIME)#│ "<<endl; cout<<" ├──────────────┤ "<<endl; cout<<" │ 0. 退 出 ------- (ESC) #│ "<<endl; cout<<" └──────────────┘ "<<endl; cout<<" →请在此输入您的选择:"; } /********************************************************* * 功能描述:读者管理界面 * 输入参数:无 * 输出参数:无 * 返回值 :无 * 其它说明:界面1 ************************************************************/ void FaceDu() { cout<<" ◢━━━━━━━━━━━◣"<<endl; cout<<" ┃$欢迎进入读者管理系统$┃"<<endl; cout<<" ◥━━━━━━━━━━━◤"<<endl; cout<<" ┌──────────────┐ "<<endl; cout<<" │ ① 增加读者 ----- (ADD) $ │ "<<endl; cout<<" ├──────────────┤ "<<endl; cout<<" │ ② 查询读者 ----- (SEA) $ │ "<<endl; cout<<" ├──────────────┤ "<<endl; cout<<" │ ③ 删除读者 ----- (DEL) $ │ "<<endl; cout<<" ├──────────────┤ "<<endl; cout<<" │ ④ 借书信息 ----- (BOR) $ │ "<<endl; cout<<" ├──────────────┤ "<<endl; cout<<" │ ⑤ 修改信息 ----- (CHAD)$ │ "<<endl; cout<<" ├──────────────┤ "<<endl; cout<<" │ ⑥ 到期催还 ----- (BACK)$ │ "<<endl; cout<<" ├──────────────┤ "<<endl; cout<<" │ 0. 退 出 ----- (ESC) $ │ "<<endl; cout<<" └──────────────┘ "<<endl; cout<<" →请在此输入您的选择:"; } /********************************************************* * 功能描述:图书管理界面 * 输入参数:无 * 输出参数:无 * 返回值 :无 * 其它说明:界面1 ************************************************************/ void FaceBook() { cout<<" ◢━━━━━━━━━━━◣"<<endl; cout<<" ┃#欢迎进入图书管理系统#┃"<<endl; cout<<" ◥━━━━━━━━━━━◤"<<endl; cout<<" ┌──────────────┐ "<<endl; cout<<" │ ① 增加图书 ----- (ADD) # │ "<<endl; cout<<" ├──────────────┤ "<<endl; cout<<" │ ② 查询图书 ----- (SEA) # │ "<<endl; cout<<" ├──────────────┤ "<<endl; cout<<" │ ③ 删除图书 ----- (DEL) # │ "<<endl; cout<<" ├──────────────┤ "<<endl; cout<<" │ ④ 排序图书 ----- (SORT)# │ "<<endl; cout<<" ├──────────────┤ "<<endl; cout<<" │ ⑤ 图书借阅 ----- (BOR) # │ "<<endl; cout<<" ├──────────────┤ "<<endl; cout<<" │ ⑥ 修改图书 ----- (CHAB)# │ "<<endl; cout<<" ├──────────────┤ "<<endl; cout<<" │ ⑦ 图书归还 ----- (BACK)# │ "<<endl; cout<<" ├──────────────┤ "<<endl; cout<<" │ 0. 退 出 ----- (ESC) # │ "<<endl; cout<<" └──────────────┘ "<<endl; cout<<" →请在此输入您的选择:"; }主函数——main.cpp
/*********************************************************** * 版权所有 (C)2015,WangCong * * 文件名称: main.cpp * 文件标识:无 * 内容摘要:函数文件 * 其它说明:各个模块函数 * 当前版本: V5.0 * 作 者:王聪 * 完成日期: 20151224 * * 修改记录1: * 修改日期 :20151205 * 版本号: V1.0 * 修改人: 王聪 * 修改内容:创建 * * 修改记录2: * 修改日期: 20151215 * 版本号: V2.0 * 修改人: 王聪 * 修改内容:模块建立1 * * 修改记录3: * 修改日期: 20151216 * 版本号: V2.1 * 修改人: 王聪 * 修改内容:模块建立2 * * 修改记录4: * 修改日期: 20151220 * 版本号: V3.0 * 修改人: 王聪 * 修改内容:模块建立3 * * 修改记录5: * 修改日期: 20151221 * 版本号: V4.0 * 修改人: 王聪 * 修改内容:整理函数 * * 修改记录6: * 修改日期: 20151224 * 版本号: V5.0 * 修改人: 王聪 * 修改内容:界面整合 **********************************************************/ #include "Library.h" int X[100]; //暂存数组 int xer=0; //暂存标记 RecType R[MaxSize]; //哈希数组 Book *H; //图书链表 Member *L; //读者链表 int main() { FILE *fpb1,*fpb2,*fpm1,*fpm2; //文件指针 Book *p1,*p2,*s1; Member *q1,*q2,*s2; H=Init_B(); L=Init_M(); fpb1=fopen("book.txt","rb"); //读方式打开图书文件 if(fpb1!=NULL) { p1=(Book *)malloc(sizeof(Book)); if(!p1) exit(1); p1->next=NULL; while(fread(p1,sizeof(Book),1,fpb1)==1) { if(H->next==NULL) { H->next=p1; s1=p1; } else { s1->next=p1; s1=p1; } p1=(Book *)malloc(sizeof(Book)); if(!p1) exit(1); p1->next=NULL; } } fpm1=fopen("member.txt","rb"); //读方式打开读者文件 if(fpm1!=NULL) { q1=(Member *)malloc(sizeof(Member)); if(!q1) exit(1); q1->next=NULL; while(fread(q1,sizeof(Member),1,fpm1)==1) { if(L->next==NULL) { L->next=q1; s2=q1; } else { s2->next=q1; s2=q1; } q1=(Member *)malloc(sizeof(Member)); if(!q1) exit(1); q1->next=NULL; } } int m,n; while(m!=0) { Face(); cin>>m; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; if(m==1) { FaceBook(); cin>>n; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; switch(n) { case 1: BookAdd(H); break; //增加图书 case 2: BookSearch(H); break; //查询图书 case 3: BookDel(H); break; //删除图书 case 4: BookPai(H); break; //排序图书 case 5: BookBorrow(H,L); break; //图书借阅 case 6: BookChange(H); break; //修改图书信息 case 7: BookReturn(H,L); break; //还书 case 0: break; //退出图书管理,返回上一层菜单 } } else if(m==2) { FaceDu(); cin>>n; cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl; switch(n) { case 1: MemberAdd(L); break; //增加读者 case 2: MemberSearch(L); break; //查询读者 case 3: MemberDel(L); break; //删除读者 case 4: BorrowInfo(L); break; //借书信息 case 5: MemberChange(L); break; //修改读者信息 case 6: LimitTimeInfo(H,L); break; //到期书催还 case 0: break; //退出读者管理,返回上一层菜单 } } else if(m==0) { cout<<endl<<"┅┅┅┅┅┅┅┅┅┅┅┅┅感谢您使用本系统,再见!┅┅┅┅┅┅┅┅┅┅┅┅"<<endl; fpb2=fopen("book.txt","wb"); for(p2=H->next; p2!=NULL; p2=p2->next) fwrite(p2,sizeof(Book),1,fpb2); fclose(fpb2); fpm2=fopen("member.txt","wb"); for(q2=L->next; q2!=NULL; q2=q2->next) fwrite(q2,sizeof(Member),1,fpm2); fclose(fpm2); exit(0); } } return 0; }