HM154 批量挂上指针数组
HM154 批量挂上指针数组
来源: 第 154 集 职工管理系统-添加职工功能实现
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
添加职工时,一次可能加入多种岗位的人。不同派生对象不能塞进同一种值数组,但可以把它们的基类指针放进同一个数组。人数会变,数组应开在堆区,用 Worker** 维护。
构造管理对象时:人数 empNum = 0,指针数组 empArray = NULL。
成员函数 addEmp 按下面做,不能只把输入打印出去:
- 读入本次要添加的数量 \(k\)。若 \(k \le 0\),输出一行
输入数据有误,本次不改数组。 - 否则新容量
newSize = empNum + k,new Worker*[newSize]开辟新空间。 - 若旧数组不是
NULL,把旧指针逐个拷到新空间(只拷指针,不重新new老人)。 - 再读 \(k\) 名新职工:编号、姓名、岗位(\(1\) 普通职工 / \(2\) 经理 / \(3\) 老板)。
Worker* worker = NULL,再switch:
1 → new Employee(id, name, 1),2 → new Manager(id, name, 2),3 → new Boss(id, name, 3),放入新数组空位。 delete[]旧指针数组(不要delete每个职工对象),再让empArray指向新空间,empNum = newSize。- 输出一行
成功添加、\(k\)、名新职工。
可以连续执行多次添加:第二次必须先拷贝第一次留下的指针,再接上新人。全部添加结束后,按数组顺序对每个人调用 showInfo(),以证明人还在堆区数组里。
三类 showInfo 的岗位与职责与规格一致:员工 / 完成经理交给的任务;经理 / 完成老板交给的任务,并下发任务给员工;总裁 / 管理公司所有事务。岗位通过 getDeptName() 得到。
本题还不要求写文件。
输入格式
第一行一个整数 \(t\)(\(1 \le t \le 20\)),表示添加次数。
接下来 \(t\) 组,每组:
- 第一行一个整数 \(k\)(\(-5 \le k \le 50\))。
- 若 \(k > 0\),随后 \(k\) 行,每行编号 \(id\)、不含空白的姓名 \(s\)、岗位 \(d\)(\(1 \le id \le 10^6\),\(1 \le |s| \le 20\),\(d \in \{1,2,3\}\))。
保证所有合法添加的总人数不超过 \(100\)。
输出格式
对每次添加:成功则一行 成功添加k名新职工,失败则一行 输入数据有误。
全部添加结束后,按数组当前顺序输出每人一行 showInfo(格式与 HM153 相同:职工编号: 职工姓名: 岗位: 岗位职责:,段间一个空格)。若一次合法职工都没加上,则这部分不输出。
样例
输入 #1
1
2
1 张三 1
2 李四 2
输出 #1
成功添加2名新职工
职工编号:1 职工姓名:张三 岗位:员工 岗位职责:完成经理交给的任务
职工编号:2 职工姓名:李四 岗位:经理 岗位职责:完成老板交给的任务,并下发任务给员工
输入 #2
3
0
1
9 王五 3
2
4 赵六 1
5 钱七 2
输出 #2
输入数据有误
成功添加1名新职工
成功添加2名新职工
职工编号:9 职工姓名:王五 岗位:总裁 岗位职责:管理公司所有事务
职工编号:4 职工姓名:赵六 岗位:员工 岗位职责:完成经理交给的任务
职工编号:5 职工姓名:钱七 岗位:经理 岗位职责:完成老板交给的任务,并下发任务给员工
说明
- 扩容公式是旧人数加新人数,不是固定写死一个容量。
delete[] empArray只丢掉指针数组本身,职工对象还要留着。- \(k \le 0\) 时既不扩容也不读后面的人。
信息
- ID
- 1153
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者