HM154 批量挂上指针数组

HM154 批量挂上指针数组

HM154 批量挂上指针数组

来源: 第 154 集 职工管理系统-添加职工功能实现

难度: 入门

时间限制: 1s

空间限制: 64MB

题目描述

添加职工时,一次可能加入多种岗位的人。不同派生对象不能塞进同一种值数组,但可以把它们的基类指针放进同一个数组。人数会变,数组应开在堆区,用 Worker** 维护。

构造管理对象时:人数 empNum = 0,指针数组 empArray = NULL

成员函数 addEmp 按下面做,不能只把输入打印出去:

  1. 读入本次要添加的数量 \(k\)。若 \(k \le 0\),输出一行 输入数据有误,本次不改数组。
  2. 否则新容量 newSize = empNum + knew Worker*[newSize] 开辟新空间。
  3. 若旧数组不是 NULL,把旧指针逐个拷到新空间(只拷指针,不重新 new 老人)。
  4. 再读 \(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),放入新数组空位。
  5. delete[] 旧指针数组(不要 delete 每个职工对象),再让 empArray 指向新空间,empNum = newSize
  6. 输出一行 成功添加、\(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
通过率
?
上传者