📄 41023.cpp
字号:
int flag2=0;
int flag3=-2;
int flag1=-2;
person3.ID=flag3;
rewind(fp2);
while(!feof(fp2)){
fread(&person3,sizeof(Reader),1,fp2);
//借阅证号和借的图书的编号均相同则表示已到文件尾端,返回.
if((flag3==person3.ID) && (flag1==person3.num)) return;
if(person3.ID<=-1){
flag2+=sizeof(Reader);
continue;
}
cout<<"\n读者的图书证号:"<<person3.ID<<endl;
cout<<"书号:"<<person3.num<<endl;
cout<<"还书时间:";
cout<<person3.Re_data.tm_year;
cout<<"-"<<person3.Re_data.tm_mon;
cout<<"-"<<person3.Re_data.tm_mday<<endl;
flag2+=sizeof(Reader);
flag3=person3.ID;
flag1=person3.num;
}
//空文件时提示没有读者资料.
if(flag2==0) cout<<"\n对不起,此读者不存在.\n"<<endl;
}
*/
void ReaderInfo(FILE *fp2){
//显示读者的信息
Reader person3;
int flag2=0;
int flag3=-2;
int flag1=-2;
person3.ID=flag3;
rewind(fp2);
cout<<"-------------------------------------------------------------------------------"<<endl;
cout<<setw(10)<<"读者的图书证号"<<setw(22)<<"书号"<<setw(28)<<"还书时间"<<endl;
while(!feof(fp2)){
fread(&person3,sizeof(Reader),1,fp2);
//借阅证号和借的图书的编号均相同则表示已到文件尾端,返回.
if((flag3==person3.ID) && (flag1==person3.num)) return;
if(person3.ID<=-1){
flag2+=sizeof(Reader);
continue;
}
cout<<"-------------------------------------------------------------------------------"<<endl;
cout<<setw(10)<<person3.ID<<setw(25)<<person3.num<<setw(25);
cout<<person3.Re_data.tm_year;
cout<<"-"<<person3.Re_data.tm_mon;
cout<<"-"<<person3.Re_data.tm_mday<<endl;
flag2+=sizeof(Reader);
flag3=person3.ID;
flag1=person3.num;
}
//空文件时提示没有读者资料.
if(flag2==0) cout<<"\n对不起,此读者不存在.\n"<<endl;
}
void AddBook(FILE *fp,BTree &T){
//图书入库.
//当书库中已有该图书,改变其现存量和总存量.
//当书库中没有该图书,则增加该图书信息到书库里
Book REC;
Result R;
cout<<"\n===========添加图书==========";
input_BI(REC);
R=SearchBTree(T,REC.num,0);
if(R.tag==1) AddBookInfo((R.pt)->recptr[R.i],REC,fp);
else
{
REC.Total_store=REC.Now_store;
InsertBTree(T,REC.num,R.pt,R.i,rec);
fseek(fp,0,SEEK_END); //找到文件末尾的位置
fwrite(&REC,sizeof(Book),1,fp);//入库
rec+=sizeof(Book);
showtree(T,1);
}
}
void ReturnBook(FILE *fp,FILE *fp2,BTree &T){
//归还图书。
//查找该读者是否借阅了该图书,是就归还成功,不是就返回.
Reader person2,person;
Book REC;
Result R;
int flag;
cout<<"\n----------归还图书----------";
cout<<"\n请输入读者图书证号:";
cin>>person.ID;
cout<<"\n请输入所还图书的书号:";
int id4;
cin>>id4;
rewind(fp2);
while(!feof(fp2)){
//查找该读者是否借阅了该图书,是就归还成功,不是就返回.
fread(&person2,sizeof(Reader),1,fp2);
if(person2.ID==-1)continue;
if((person2.ID==person.ID) && (person2.num==id4)){
flag=1;
break;
}
}
if(flag==1){
R=SearchBTree(T,id4,0);
if(R.tag==0) {
//读者虽然借阅了该图书,但该书已被清库,读者不需再还书.
cout<<"\n该书已被清库!您真是太幸运了,这本书属于你了!\n"<<endl;
return;
}
//读取系统本地时间作为实际归还日期
time_t loctime;
struct tm *ptr;
loctime = time(NULL);
ptr = localtime(&loctime);
cout<<"\n还书成功!"<<endl;
cout<<"\n您的还书时间是 :";
cout<<asctime(ptr)<<endl;
//更新书库中的资料
int rec5=R.pt->recptr[R.i];
fseek(fp,rec5,SEEK_SET);
fread(&REC,sizeof(Book),1,fp);
REC.Now_store++;
fseek(fp,rec5,SEEK_SET);
fwrite(&REC,sizeof(Book),1,fp);
cout<<"您所还图书的具体信息如下:";
BookInfo(REC);//输出图书的具体信息
person2.ID=-1;
fseek(fp2,-sizeof(Reader),SEEK_CUR);
fwrite(&person2,sizeof(Reader),1,fp2);
}
else
cout<<"\n您没有借过此书!"<<endl;
}
void BorrowBook(FILE *fp,FILE *fp2,BTree &T){
//借阅图书
//登记读者的证号和应归还的日期.
Book REC;
Result R;
Reader person;
cout<<"\n----------借书----------";
cout<<"\n请输入读者的借书证号:";
cin>>person.ID;
cout<<"\n请输入所借图书的书号 :";
int id;
cin>>id;
person.num=id;
R=SearchBTree(T,id,0);
if(R.tag==0) printf("\n对不起,图书管中没有此书!\n");
else
{
int rec2=R.pt->recptr[R.i];
fseek(fp,rec2,SEEK_SET);
fread(&REC,sizeof(Book),1,fp);
if(REC.Now_store!=0){
REC.Now_store--;
fseek(fp,rec2,SEEK_SET);
fwrite(&REC,sizeof(Book),1,fp);
cout<<"\nT您所借图书的具体信息如下:"<<endl;
BookInfo(REC);
//读取本地时间,按一个月为一个租借期,存放读者的信息.
tm *bo_time;
time_t t;
t= time(NULL);
bo_time = localtime(&t);
person.Re_data.tm_mon=bo_time->tm_mon+2;
person.Re_data.tm_year=bo_time->tm_year+1900;
person.Re_data.tm_mday=bo_time->tm_mday;
fseek(fp2,0,SEEK_END);
fwrite(&person,sizeof(Reader),1,fp2);
cout<<"\n您的还书日期是:";
cout<<person.Re_data.tm_year;
cout<<"-"<<person.Re_data.tm_mon;
cout<<"-"<<person.Re_data.tm_mday<<"\n"<<endl;
}
else printf("\n对不起,目前您所要的书库存为零, 等别人还回之后再借。");
}
}
void DelBook(FILE *fp,BTree &T){
//清除库存.
//如果该书被删除了,则屏蔽书库中该书的信息,
//并删除该书在B树的索引。
Book REC;
Result R;
cout<<"\n============清除库存=============";
cout << "\n请输入您要删除图书的书号: ";
int id2;
cin >> id2;
R=SearchBTree(T,id2,0);
if(R.tag==0) printf("\n图书管中无此书!\n\n");
else
{
int rec3=R.pt->recptr[R.i];
fseek(fp,rec3,SEEK_SET);
fread(&REC,sizeof(Book),1,fp);
cout<<"\n您要删除图书的具体信息如下:"<<endl;
BookInfo(REC);
//确认删除.
cout<<"\n确定要删除吗? (y/n):";
char cmd;
cin >> cmd;
if(cmd=='n'){
return;
}
else{
//清除库存
REC.num=-1;
fseek(fp,rec3,SEEK_SET);
fwrite(&REC,sizeof(Book),1,fp);
DelBTree(T,id2);
cout << "\n成功清除库存!"<<endl;
showtree(T,1);
}
}
}
void SearchBook1(FILE *fp,BTree T){
//查找某本书,并显示该书的具体信息
Book REC;
Result R;
cout << "\n请输入所查图书的书号: ";
int id3;
cin >> id3;
R=SearchBTree(T,id3,0);
if(R.tag==0) printf("\n库存中没有此书!\n");
else
{
int rec4=R.pt->recptr[R.i];
fseek(fp,rec4,SEEK_SET);
fread(&REC,sizeof(Book),1,fp);
cout<<"\n 您所查图书的具体信息如下:\n"<<endl;
cout<<"-------------------------------------------------------------------------------"<<endl;
cout<<"书号"<<setw(25)<<"书名 "<<setw(20)<<"作者 "<<setw(20)<<"现有库存量 "<<setw(10)<<"总的库存量 ";
BookInfo(REC);//输出信息
}
}
void ShowBook(FILE *fp){
//输出书库中所有图书的信息
int flag=-2;
Book REC;
REC.num=flag;
rewind(fp);
cout<<"-------------------------------------------------------------------------------"<<endl;
cout<<"书号"<<setw(25)<<"书名 "<<setw(20)<<"作者 "<<setw(20)<<"现有库存量 "<<setw(10)<<"总的库存量 ";
while(!feof(fp))
{
fread(&REC,sizeof(Book),1,fp);
if(flag==REC.num) break;
if(REC.num==-1) continue;
#ifndef DEBUG
BookInfo(REC);
#else
cout<<"\n书号: "<<REC.num<<endl;
#endif
flag=REC.num;
}
}
void BookInfo(Book REC){
//输出图书的具体信息.
// cout<<endl;
cout<<"-------------------------------------------------------------------------------"<<endl;
cout<<REC.num<<setw(25)<<REC.name<<setw(20)<<REC.author<<setw(20)<<REC.Now_store<<setw(10)<<REC.Total_store<<endl;
// cout<<"------------------------------------------------------------------------------------";
}
int Index(char *name1,char *name2,int pos)
{
// Book REC,BN;
int i=pos;
int j=0;
while(i<strlen(name1)&&j<strlen(name2))
{
if(name1[i]==name2[j])
{
++i;
++j;
}
else
{
i=i-j+1;
j=0;
}
}
if(j>=strlen(name2)) return 1;
else return 0;
}
void SearchBook2(FILE *fp,BTree T){
//查找某本书,并显示该书的具体信息
int flag=-2,pos=0;
Book REC,BN;
REC.num=flag;
rewind(fp);
// cout<<"-------------------------------------------------------------------------------"<<endl;
// cout<<"书号"<<setw(25)<<"书名 "<<setw(20)<<"作者 "<<setw(20)<<"现有库存量 "<<setw(10)<<"总的库存量 ";
cout<<"请输入要查找书的书名:";
cin>>BN.name;
while(!feof(fp))
{
fread(&REC,sizeof(Book),1,fp);
if(flag==REC.num) break;
if(REC.num==-1) continue;
#ifndef DEBUG
//cout<<BN.name<<endl;
//cout<<REC.name[0];
if(Index(REC.name,BN.name,pos)!=0)
{
//cout<<"46465";
BookInfo(REC);
}
#else
cout<<"\n书号: "<<REC.num<<endl;
#endif
flag=REC.num;
}
// if(Index(REC.name,BN.name,pos)==0)
// cout<<"没有您要查找的书!";
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -