HM311 取消预约
HM311 取消预约
来源: 第 311 集 机房预约系统-学生取消预约功能实现
难度: 普及
时间限制: 1s
空间限制: 64MB
题目描述
学生取消预约前先装入整张预约表。mSize 为 \(0\) 则输出 无预约记录 并结束。
否则先提示:只有**自己的**、并且状态为审核中(1)或预约成功(2)的记录可以取消。别人的单子不能动。给用户看的序号用从 \(1\) 开始的 index,不要直接把内存下标 \(i\) 亮出去——因为可能扫到第 \(5\) 条才碰到自己的第一单。
用 vector<int> 记下每条可取消记录在大表中的真实下标。向量本身仍从 \(0\) 编:用户输入 \(k\) 时,真实下标是 v[k - 1]。学号比较同样要 atoi(c_str())。列表里输出日期、时段(三目:\(1\) 上午否则下午)、机房号、状态(此时只可能是审核中或预约成功)。
然后按顺序处理选择:
- 选择不在 \(0\sim v.size()\) 内:输出
输入有误,继续处理下一个数。 - 选择 \(0\):表示反悔返回,停止处理,不改表。
- 选择合法的 \(k\ge 1\):把
orderData[v[k-1]]["status"]置为"0",调用整表回写,输出已取消预约,然后停止(一次只取消一条)。
回写格式与更新预约记录相同:
date v1 interval v2 stuId v3 stuName v4 roomId v5 status v6
输入格式
第一行:当前学号。
第二行:\(n\)。
接下来 \(n\) 行,每行六个字段:日期、时段、学号、姓名、机房号、状态。
下一行:\(m\)。
下一行:\(m\) 个整数,作为取消界面的输入流。
输出格式
若 \(n=0\),仅一行 无预约记录。
否则先输出可取消列表,每行:
k、预约日期:d 时段:上午|下午 机房号:r 状态:审核中|预约成功
再按选择输出 输入有误 或 已取消预约。若发生了取消,最后再输出回写后的 \(n\) 行文件。选择 \(0\) 返回时不回写。
样例
输入 #1
1
4
1 2 1 张三 3 1
4 1 2 李四 2 1
2 2 1 张三 1 1
1 2 1 张三 3 1
4
4 0 3 1
输出 #1
1、预约日期:1 时段:下午 机房号:3 状态:审核中
2、预约日期:2 时段:下午 机房号:1 状态:审核中
3、预约日期:1 时段:下午 机房号:3 状态:审核中
输入有误
输入 #2
1
4
1 2 1 张三 3 1
4 1 2 李四 2 1
2 2 1 张三 1 1
1 2 1 张三 3 1
1
3
输出 #2
1、预约日期:1 时段:下午 机房号:3 状态:审核中
2、预约日期:2 时段:下午 机房号:1 状态:审核中
3、预约日期:1 时段:下午 机房号:3 状态:审核中
已取消预约
date 1 interval 2 stuId 1 stuName 张三 roomId 3 status 1
date 4 interval 1 stuId 2 stuName 李四 roomId 2 status 1
date 2 interval 2 stuId 1 stuName 张三 roomId 1 status 1
date 1 interval 2 stuId 1 stuName 张三 roomId 3 status 0
说明
\(0 \le n \le 200\),\(1 \le m \le 50\)(当 \(n=0\) 时没有 \(m\) 这一段)。
张三有三条可取消,李四那条被跳过,因此用户看到的是 \(1,2,3\),对应大表下标 \(0,2,3\)。样例 #1 先输入 \(4\) 非法,再输入 \(0\) 返回,文件不变故不回写。样例 #2 选 \(3\),即 v[2]=3,把第 \(3\) 条(下标从 \(0\) 计)状态改为 \(0\)。
信息
- ID
- 1310
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者