HM159 档案回灌内存
HM159 档案回灌内存
来源: 第 159 集 职工管理系统-文件交互-读文件4-初始化完毕
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
启动时若磁盘档案存在且里边已有记录,只统计人数还不够:必须先按人数在堆区开辟基类指针数组,再把每一行恢复成具体的职工对象,挂进内存数组。
管理类构造阶段的顺序固定为:
- 用
ifstream以ios::in打开empFile.txt,按空格循环读「编号 姓名 部门编号」,统计人数 \(n\)(人数必须来自把文件读一遍,不能直接把输入里的人数当答案)。 - 按 \(n\) 执行
new Worker*[n],此时数组只有容量,格子里还没有对象。 - 再调用
initEmp,把文件里的记录真正灌进数组。
initEmp 必须按下面做:
- 再次用
ifstream打开同一份档案。 - 准备三个变量接收编号、姓名、部门编号,再用
while配合>>一条一条读完。 - 每读到一条,先把基类指针置为空,再按部门编号在堆区创建不同子类:\(d=1\) 创建普通员工,\(d=2\) 创建经理,\(d=3\) 创建老板,构造时把三个属性一并传入。
- 把指针放进数组当前下标(下标从 \(0\) 开始),然后下标加一,相当于递增加入。
- 读尽后关闭文件流。
本题先根据输入写出档案,再走「计数 → 开堆区 → 按部门创建对象 → 写入数组」。输出必须来自内存数组里的对象,不能把输入缓冲原样抄出去。
输入格式
第一行一个整数 \(n\)(\(1 \le n \le 1000\))。
接下来 \(n\) 行,每行一个整数编号 \(id\)、一个不含空白的姓名 \(s\)、一个整数部门编号 \(d\)(\(1 \le id \le 10^9\),\(1 \le |s| \le 20\),\(d \in \{1,2,3\}\))。这些行按「编号 姓名 部门编号」写入 empFile.txt,一人一行。
输出格式
第一行输出 职工的人数为 紧接着人数,中间无空格。
接下来按数组下标从 \(0\) 到人数减一,每人一行:编号、姓名、部门编号,两项之间一个空格,行末换行。
样例
输入 #1
3
1 张三 1
2 李四 2
3 王五 3
输出 #1
职工的人数为3
1 张三 1
2 李四 2
3 王五 3
输入 #2
1
8 赵六 2
输出 #2
职工的人数为1
8 赵六 2
说明
- 三种启动情形互不混淆:文件不存在、文件存在但被清空、文件存在且有数据。本题只处理第三种。
- 部门编号决定子类类型,数组里保存的是基类指针。
- 关闭文件流属于初始化的最后一步,不要漏掉。
信息
- ID
- 1158
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者