hdu1497 Simple Library Management System
图书馆管理系统模拟,思路和步骤在代码块里写的 很清楚了,之所以那么清楚是因为我也是看别人代码看会的,写出来加深理解,作出代码注释,没有注释的代码看起来是很痛苦的(555我太难了 )
#include<iostream>
#include<algorithm>
using namespace std;
struct node { //节点表示每个人借书情况:借书数,借了哪几本书
int cnt;
int have[10]; //借的书用数组值表示,最多借九本
}p[1005];
int book[100005];
int main()
{
int m, n, c,u,b;
char a;//用来判断BRQ三种情况
while (scanf_s("%d %d", &m, &n)==2) //不==2会超时
{
/*memset(p, 0, sizeof(p));*/
memset(book, 0, sizeof(book));//每次清空图书馆书的状态,均置为未借的状态,值设为0,若有人借了,就把值改为此人的序号
for (int i = 0; i <= m; i++) //
p[i].cnt = 0;//每人的借书数为0
cin >> c;
while (c--)
{
cin >> a;//输入BQR情况
if (a == 'B') { //借书
cin >> u >> b; //人,书
if (book[b])//如果book[i]不为0,说明被借过了
cout << "The book is not in the library now" << endl;
else if (p[u].cnt >= 9) //借书数大于9可不行
cout << "You are not allowed to borrow any more" << endl;
else {//可以借
book[b] = u;// 书被p[u]借了
p[u].have[p[u].cnt++] = b; //新借的书序号是b
cout << "Borrow success" << endl;
}
}
else if (a == 'R') {//还书
cin >> b;//书序号
if (!book[b])//发现这本书并没有人借
cout << "The book is already in the library" << endl;
else { //可以还书
int poit=0; //后边有用
u = book[b];//看看是谁借的书,好刷新他的状态
book[b] = 0;//这本书状态设为0,没人借
for (int i = 0; i < p[u].cnt; i++) {//看看他借的第几本书是要还的这本书
if (p[u].have[i] == b) {//哦,第i本
poit = i;//其实若之前设置i变量的话就没必要这个poit了
break;//找到就退出for循环
}
}
for (int i = poit; i < p[u].cnt-1; i++) //把这本书后边的书都往前移动一位,i<cnt-1;
p[u].have[i] = p[u].have[i + 1];
p[u].cnt--;//借书数-1
cout << "Return success" << endl;
}
}
else if(a == 'Q') {//查询借书状态
cin >> u;//人序号
if (p[u].cnt == 0)
cout << "Empty" << endl;
else {
int b[10];//装入借的书序号
for (int i = 0; i < p[u].cnt; i++)
b[i] = p[u].have[i];
sort(b, b + p[u].cnt);//给书序号排个序
cout << b[0];//这与输出格式有关,为了让最后一本书后边没有空格
for (int i = 1; i < p[u].cnt; i++) {
cout << " " << b[i];
}
cout<<endl;//题目要求
}
}
}
cout << endl;//一种情况完成
}
return 0;
}