⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 41023.cpp

📁 本程序是数据结构的大作业之一
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	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 + -