HM162 花名册前移删除
HM162 花名册前移删除
来源: 第 162 集 职工管理系统-删除职工-功能实现
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
离职职工要从花名册里删掉。数组删除的本质是**数据前移**,并且把记录人数减一,再把内存同步写回档案。
先判断档案是否为空:记录为空或文件不存在时,没有人可删,输出一行 文件不存在或记录为空 后结束。
否则按编号删除。对每个待删编号 \(x\):
- 调用
isExist:从下标 \(0\) 扫到人数减一。找到则返回首次下标,找不到返回 \(-1\)。 - 若返回 \(-1\),本次失败,先输出
删除失败,再输出一行未找到该职工。 - 若返回下标 \(p\),从 \(p\) 起把后面的元素依次前移:
a[i] = a[i+1],循环条件是 \(i\) 从 \(p\) 到人数减 \(2\)。不要从数组尾部往前搬,否则中间的人会被覆盖丢掉。 - 前移结束后人数减一,并调用保存函数,把当前内存按「编号 姓名 部门编号」写回
empFile.txt。 - 本次成功,输出
删除成功。
必须先查再删。已删掉的编号再删一次应失败。全部删除结束后,再从档案读回剩余记录并输出,以证明磁盘已同步。
输入格式
第一行一个整数 \(n\)(\(0 \le n \le 1000\))。\(n=0\) 表示文件不存在或记录为空,后面没有数据。
\(n \ge 1\) 时,接下来 \(n\) 行,每行一个整数编号 \(id\)、一个不含空白的姓名 \(s\)、一个部门编号 \(d\)(\(1 \le id \le 10^9\),\(1 \le |s| \le 20\),\(1 \le d \le 3\))。
再一行整数 \(q\)(\(1 \le q \le 1000\)),随后 \(q\) 行每行一个待删编号 \(x\)。
输出格式
若 \(n=0\),只输出一行 文件不存在或记录为空。
否则先输出每次删除的结果:成功一行 删除成功;失败两行 删除失败 与 未找到该职工。再按档案中的顺序输出剩余职工,每人一行:编号、空格、姓名、空格、部门编号。若删光了,不再输出职工行。
样例
输入 #1
4
1 张三 1
2 李四 2
3 王五 3
4 赵六 1
3
2
1
1
输出 #1
删除成功
删除成功
删除失败
未找到该职工
3 王五 3
4 赵六 1
输入 #2
0
输出 #2
文件不存在或记录为空
说明
- 样例 1 中 \(2\) 号在下标 \(1\)。前移后名单变为张三、王五、赵六,人数变为 \(3\)。再删 \(1\) 号后只剩王五、赵六。第三次再删 \(1\) 号已经找不到。
- 前移必须从被删位置的后一个元素开始往前覆盖,不能从尾部往前搬。
- 最后打印的名单必须来自写回后再读出的档案,而不是输入缓冲。
信息
- ID
- 1161
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者