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

📄 user.cpp

📁 基于 B- 树实现的图书管理系统1.rar
💻 CPP
字号:
#include "btree.h"
/*用户借阅说明
 *借阅登记的信息可以链接在相应的那种书的记录之后
 */

//输入借阅的信息
Status InUserMess(User *user){
	char s[5];
	time_t nowtime;
	struct tm *timeinfo;
	time( &nowtime ); 
	timeinfo = localtime( &nowtime ); 
	printf("\n\n\t\t\t输入借阅者的信息\n");
	printf("\t\t\t请输入图书证号:");
	do{
		scanf("%s",s);
		user->number = atoi(s);
		if(user->number < 1 || user->number > 65535){
			printf("\t\t\t输入有误,请重新输入(0到65535之间):");
		}
	}while(user->number < 1 || user->number > 65535);
	printf("\t\t\t请输入归还日期(格式:%d年%d月%d日)\n",timeinfo->tm_year + 1900,timeinfo->tm_mon + 1,timeinfo->tm_mday);
	//归还日期的输入
	printf("\t\t\t\t年:");
	do{		
		scanf("%s",s);
		user->dyear = atoi(s);
		if(user->dyear < timeinfo->tm_year + 1900){
			printf("\t\t\t输入有误,请重新输入(大于%d):",timeinfo->tm_year + 1900);
		}
	}while(user->dyear < timeinfo->tm_year + 1900);	
	printf("\t\t\t\t月:");
	do{		
		scanf("%s",s);
		user->dmonth = atoi(s);
		if(user->dmonth > 12 || user->dmonth < 1 || (user->dmonth < timeinfo->tm_mon + 1 && user->dyear == timeinfo->tm_year + 1900)){
			printf("\t\t\t输入有误,请重新输入(1到12月):");
		}
	}while(user->dmonth > 12 || user->dmonth < 1 || (user->dmonth < timeinfo->tm_mon + 1 && user->dyear == timeinfo->tm_year + 1900));
	printf("\t\t\t\t日:");
	do{		
		scanf("%s",s);
		user->dday = atoi(s);
		if(user->dday > 31 || user->dday < 1 || (user->dday < timeinfo->tm_mday && user->dyear == timeinfo->tm_year + 1900 && user->dmonth == timeinfo->tm_mon + 1)){
			printf("\t\t\t输入有误,请重新输入(1到31日):");
		}
	}while(user->dday > 31 || user->dday < 1 || (user->dday < timeinfo->tm_mday && user->dyear == timeinfo->tm_year + 1900 && user->dmonth == timeinfo->tm_mon + 1));
	//设置借书的时间
	user->year = timeinfo->tm_year + 1900;
	user->month = timeinfo->tm_mon + 1;
	user->day = timeinfo->tm_mday;
	user->next = NULL;
	return OK;
}

//借阅,如果一种书的显存量大于零,则借出一本,登记借阅着的图书证号和归还期限
Status BorrowBook(BTree T,KeyType k){
	Result rs = SearchBTree(T,k);
	User *user;
	if(rs.tag == 0){
		printf("\t\t\t很抱歉!你要借阅的书不存在!\n");
		writeLog("由于要借阅的书 " + itos(k.key) + "不存在,导致借阅失败!"); //将会话录入日记文件中
		return FALSE;
	}
	if(rs.pt->key[rs.i].left < 1){
		printf("\t\t\t很抱歉!你要借阅的书已经借完!\n");
		writeLog("该书已经借完,导致用户借阅 " + itos(k.key) + "失败!");  //将会话添加到日记文件中
		return FALSE;
	}
	user = (User *)malloc(sizeof(User));
	InUserMess(user);
	//查找该用户是否已经借过这本书
	User *temp;
	temp = rs.pt->key[rs.i].user;
	while(temp){
		if(temp->number == user->number){
			printf("\n\t\t\t你已经借了这本书,不能够重复借!\n");			
			writeLog("由于该用户已经借阅了 " + itos(user->number) + ",导致借阅 " + itos(k.key) + "失败!");  //将会话添加到日记文件中
			free(user);
			return FALSE;
		}
		temp = temp->next;
	}
	rs.pt->key[rs.i].left--;
	user->next = rs.pt->key[rs.i].user;
	rs.pt->key[rs.i].user = user;
	writeLog("用户" + itos(user->number) + "借阅 " + itos(k.key) + "成功!");  //将会话添加到日记文件中	
	return OK;
}

//注销对借阅者的登记,改变该书的显存量
Status ReturnBook(BTree T,KeyType k){
	User *user,*pre;
	int number;
	Result rs = SearchBTree(T,k);
	if(rs.tag == 0){
		printf("\t\t\t很抱歉!不存在你要还的书!\n");

		writeLog("归还书失败!原因:你要归还的书不存在!"); //添加日记文件中

		return FALSE;
	}
	user = rs.pt->key[rs.i].user;
	if(!user){
		printf("\t\t\t这本书暂无出借!\n");

		writeLog("归还书失败!原因:该书暂无出借!"); //添加日记文件

		return FALSE;
	}
	printf("\n\t\t\t请输入图书证号:");
	scanf("%d",&number);	
	pre = user;
	do{
		if(user->number == number){

			writeLog("用户 " + itos(user->number) + " 归还书 "+ itos(k.key) + "成功!"); //添加日记文件

			if(user == rs.pt->key[rs.i].user){
				rs.pt->key[rs.i].user = user->next;
				free(user);
			}
			else{
				pre->next = user->next;
				free(user);
			}
			rs.pt->key[rs.i].left++;
			return OK;
		}
		pre = user;
		user = user->next;
	}while(user);
	printf("\t\t\t你输入的图书证号不正确!请重新操作!\n");

	writeLog("归还书失败!原因:输入的图书证号不正确!"); //添加日记文件

	return FALSE;
}

//显示某个结点的信息
void ShowWriterBook(BTree p,char writer[]) {
  for(int i = 1; i <= p->keynum; i++){
	  if(strcmp(p->key[i].writter,writer) == 0){
		  printf("\t\t\t书号为:%d   ", p->key[i].key);
		  printf("书名为:%s   ",p->key[i].bname);
		  printf("作者为:%3s\n", p->key[i].writter);
	  }
  }
}

//显示整棵树的信息
void displayAuthor(BTree T,char writer[]){
	int i = 0;
	if(T) { 
		ShowWriterBook(T,writer);
		//使用递归的方法显示每个结点
		for(i=0; i<=T->keynum; i++){	
			if(T->ptr[i]){
				displayAuthor(T->ptr[i],writer);
			}
		}
	}
}

//查找某作者的全部书籍
Status searchAuthorB(BTree T){
	char writer[20] = {'\0'};
	printf("\n\t\t\t请输入要查找作者的姓名:");
	scanf("%s",writer);
	writeLog("查找某作者 " + ctos(writer) + " 的全部书籍!");
	printf("\n\t\t\t作者 %s 拥有的书籍如下:\n",writer);
	displayAuthor(T,writer);
	return OK;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -