hdu 1497

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;
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值