读者用户模块
Str_reader* rea=NULL;
size_t Readers_cnt;//测试
Str_book* boo=NULL;
size_t Book_cnt;
unsigned int acc_rea;//存储当前用户的id
unsigned int ord_rea;//存储当前用户在结构体中的下标
static void reader_menu(void)
{
system("clear");
puts("******读者系统******");
puts("1、个人信息");
puts("2、检索图书");
puts("3、借阅图书");
puts("4、预约图书");
puts("5、归还图书");
puts("6、修改密码");
puts("7、返回上层");
}
//读者显示个人信息
void show_people_reader(void)
{
printf("id:%-5u 姓名:%-16s 电话:%-11lld 借:%hd %-7d %-7d %-7d 约:%hd %-7d %-7d %-7d 余额:%hd\n",rea[ord_rea].id,rea[ord_rea].name,rea[ord_rea].phone_num,rea[ord_rea].borrow_book_num,rea[ord_rea].borrow_book_id[0],rea[ord_rea].borrow_book_id[1],rea[ord_rea].borrow_book_id[2],rea[ord_rea].booking_book_num,rea[ord_rea].booking_book_id[0],rea[ord_rea].booking_book_id[1],rea[ord_rea].booking_book_id[2],rea[ord_rea].balance);
anykey_continue();
}
//检索图书
void find_book_reader(void)
{
find_book_manager();
}
//借阅图书,先判断书本是否存在,再判断已借图书是否满三本,再判断书本状态,即是否无预约且在馆或预约id是自己,是则借阅成功,更新书本状态和读者状态,否则借阅失败
void borrow_book_reader(void)
{
if(rea[ord_rea].borrow_book_num >=3) //自己借阅数大于等于3
{
put_str("借阅图书已达上限,无法继续借阅!",2);
return;
}
unsigned int book_id;
int i;
printf("请输入需要借阅的图书id:");
scanf("%u",&book_id);
for(i=0;i<Book_cnt;i++)
{
if(book_id == boo[i].id) //找到图书
{
for(int j=0;j<3;j++) //for(int j=0;j<3;j++) //判断是否在自己借的书当中
{
if(rea[ord_rea].borrow_book_id[j]==book_id)
{
put_str("此图书已被自己借阅,不用重复借阅",2);
return;
}
}
if((boo[i].book_state==1)||(boo[i].book_state==2&&acc_rea == boo[i].booking_id)) //无预约在馆 有预约在馆,预约人是自己
{
printf("已成功借阅该书本\n");
for(int j=0;j<3;j++) //更新借的情况
{
if(rea[ord_rea].borrow_book_id[j]==0)
{
rea[ord_rea].borrow_book_id[j] = book_id;
rea[ord_rea].borrow_book_num++;
//printf("读者信息已更新\n");
break;
}
}
for(int j=0;j<3;j++) //更新预约的情况
{
if(rea[ord_rea].booking_book_id[j]==book_id)
{
rea[ord_rea].booking_book_id[j] = 0;
rea[ord_rea].booking_book_num--;
//printf("读者信息已更新\n");
break;
}
}
boo[i].borrow_book_cnt ++;
boo[i].borrowe_id = acc_rea;
boo[i].booking_id = 0;
boo[i].book_state =3; //无预约离馆
//put_str("书本信息已更新!",Delay_Time);
_find_book_number(i);
show_people_reader();
return;
}
else
{
put_str("该图书暂时不在可借阅状态!",Delay_Time);
return;
}
}
}
if(i==Book_cnt)
{
put_str("未检索到该图书,请检查id是否正确!",Delay_Time);
return;
}
return;
}
//预约图书,先判断书本是否存在,在判断已预定图书是否满三本,再判断书本状态,即是否无预约且在馆,是则预约成功,否则预约失败,提示信息“预约失败”
void booking_book_reader(void)//预约更新逻辑如上
{
if((rea[ord_rea].borrow_book_num >=3)&&(rea[ord_rea].booking_book_num >=3)) //自己借阅数,预约数都大于等于3
{
put_str("借阅图书和预约图书均已达上限!!!",Delay_Time);
return;
}
unsigned int book_id;
int i;
printf("请输入需要预约的图书id:");
scanf("%u",&book_id);
for(i=0;i<Book_cnt;i++)
{
if(book_id == boo[i].id) //书存在
{
for(int j=0;j<3;j++) //for(int j=0;j<3;j++) //判断是否在自己借的书当中
{
if(rea[ord_rea].borrow_book_id[j]==book_id)
{
put_str("此图书已被自己借阅,不用预约",2);
return;
}
}
for(int j=0;j<3;j++) //判断是否在自己预约的书当中
{
if(rea[ord_rea].booking_book_id[j]==book_id)
{
put_str("此图书已被自己预约,不用重复预约",2);
return;
}
}
if((boo[i].book_state==1)&&(rea[ord_rea].borrow_book_num < 3)) // 无预约在馆 自己借书数小于3,直接借走
{
printf("借书数不足3本,无需预约,已成功借阅该书本\n");
for(int j=0;j<3;j++) //更新借的情况
{
if(rea[ord_rea].borrow_book_id[j]==0)
{
rea[ord_rea].borrow_book_id[j] = book_id;
rea[ord_rea].borrow_book_num++;
//printf("读者信息已更新\n");
break;
}
}
for(int j=0;j<3;j++) //更新预约的情况
{
if(rea[ord_rea].booking_book_id[j]==book_id)
{
rea[ord_rea].booking_book_id[j] = 0;
rea[ord_rea].booking_book_num--;
//printf("读者信息已更新\n");
break;
}
}
boo[i].borrow_book_cnt ++;
boo[i].borrowe_id = acc_rea;
boo[i].booking_id = 0;
boo[i].book_state =3; //无预约离馆
//put_str("书本信息已更新!",3);
_find_book_number(i);
show_people_reader();
return;
}
else if((boo[i].book_state==1||boo[i].book_state==3)&&(rea[ord_rea].booking_book_num < 3))// 无预约在馆 无预约离馆 自己预约数小于3
{
for(int j=0;j<3;j++) //更新预约的情况
{
if(rea[ord_rea].booking_book_id[j]==0)
{
rea[ord_rea].booking_book_id[j] = book_id;
rea[ord_rea].booking_book_num++;
//printf("读者信息已更新\n");
break;
}
}
boo[i].booking_id = acc_rea;
boo[i].book_state +=1;
//put_str("书本信息已更新!",Delay_Time);
printf("预约成功!\n");
_find_book_number(i);
show_people_reader();
return;
}
else if(rea[ord_rea].booking_book_num >=3) //自己预约数大于3
{
put_str("预约图书已达上限,无法继续预约!",Delay_Time);
return;
}
else
{
put_str("该图书暂时不在可预约状态!",Delay_Time);
return;
}
}
}
if(i==Book_cnt)
{
put_str("未检索到该图书,请检查id是否正确!",Delay_Time);
return;
}
return;
}
void backe_book_reader(void)
{
if(0==rea[ord_rea].borrow_book_num ) //自己借阅数0
{
put_str("没有可归还的图书!!",Delay_Time);
return;
}
unsigned int book_id;
printf("请输入需要归还的图书id:");
scanf("%u",&book_id);
for(int i=0;i<Book_cnt;i++)
{
if(book_id == boo[i].id) //找到书本
{
if(acc_rea == boo[i].borrowe_id) //判断书本的借阅人是否是自己
{
boo[i].book_state -=2;
boo[i].borrowe_id = 0;
for(int j=0;j<3;j++)
{
if(rea[ord_rea].borrow_book_id[j] == book_id)
{
rea[ord_rea].borrow_book_id[j] = 0;
rea[ord_rea].borrow_book_num--;
}
}
printf("归还成功!\n");
_find_book_number(i);
show_people_reader();
return;
}
else
{
put_str("您并非该书借阅者!",Delay_Time);
return;
}
}
}
put_str("未检索到该图书,请检查id是否正确!",Delay_Time);
return;
}
void change_past_reader(void)
{
char passwd1[Length],passwd2[Length];
printf("请输入原密码:");
get_pwd(passwd1,PASSWD_LEN);
if(strcmp(passwd1,rea[ord_rea].pwd)) //不同出1
{
put_str("\n输入的密码不对!",Delay_Time);
return;
}
printf("请输入新密码(%d位以内):",PASSWD_LEN-1);
//get_passwd(passwd1,PASSWD_LEN);
if(!get_pwd(passwd1,PASSWD_LEN))
{
put_str("\n密码长度过长,修改密码失败!",Delay_Time);
return;
}
if(!(strcmp(passwd1,rea[ord_rea].pwd)))
{
printf("新密码与原密码相同!\n");
}
printf("请再次输入新密码:");
get_pwd(passwd2,PASSWD_LEN);
if(strcmp(passwd1,passwd2))
{
put_str("两次输入的密码不符,修改密码失败!",Delay_Time);
return;
}
strcpy(rea[ord_rea].pwd,passwd1);
put_str("修改密码成功!",Delay_Time);
}//读者修改密码函数
void login_reader(void)//输入账号,判断,输入密码,判断
{
if(0==Readers_cnt)
{
put_str("没有读者!",Delay_Time);
return;
}
unsigned int acc;
char pwd[Length];
int i;
printf("请输入读者id:");
scanf("%u",&acc);
for(i=0;i<Readers_cnt;i++)
{
if(acc == rea[i].id)
{
printf("请输入密码:");
get_pwd(pwd,PASSWD_LEN); //隐形输入密码
if(strcmp(pwd,rea[i].pwd) == 0)
{
put_str("读者登录成功!",Delay_Time);
acc_rea=acc;
ord_rea=i;
break;
}
else
{
put_str("\n密码输入有误,请检查!",Delay_Time);
return;
}
}
}
if(i==Readers_cnt)
{
put_str("id输入有误,请检查!",Delay_Time);
return;
}
for(;;)
{
reader_menu();
switch(get_cmd('1','7'))
{
case '1':
show_people_reader();
break;
case '2':
find_book_reader();
break;
case '3':
borrow_book_reader();
break;
case '4':
booking_book_reader();
break;
case '5':
backe_book_reader();
break;
case '6':
change_past_reader();
break;
default: save_book();load_book();save_reader();load_reader();
return;
}
}
//save_reader();
}//读者登录函数