📄 user.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 + -