黑马程序员C++视频课程,职工管理系统项目的一种访问异常及解决方法

项目场景:黑马程序员C++课程中的企业职工管理系统项目


问题描述

在“添加职工函数”中增加“编号去重功能”后,访问m_EmpArray数组时出现异常
对于职工对象而言,职工编号应当具有唯一性,换言之,职工编号不可重复。

因此,在设计“添加新职工”这一成员函数时,若添加的职工编号与已有的职工编号相同,则需要进行去重操作,提醒用户重新输入职工编号。

但对此该教程没有考虑,因此笔者在设计该函数时,自行添加了该功能:
以下是新旧代码对比:
旧代码:

//添加职工
void WorkerManager::Add_Emp()
{
   
	cout << "请输入添加职工数量: " << endl;

	int addNum = 0; //保存用户的输入数量
	cin >> addNum;

	if (addNum > 0)
	{
   
		//计算添加新空间大小
		int newsize = this->m_EmpNum + addNum; // 新空间人数 = 原来记录人数 + 新增人数
		//开辟新空间
		Worker ** newspace = new Worker*[newsize];
		//将原来空间下数据,拷贝到新空间下
		if (this->m_EmpArray != NULL)
		{
   
			for (int i = 0; i < this->m_EmpNum; i++)
			{
   
				newspace[i] = this->m_EmpArray[i];
			}
		}
		//批量添加新数据
		for (int i = 0; i < addNum; i++)
		{
   
			int id; //职工编号
			string name; //职工姓名
			int dSelect; // 部门选择

			cout << "请输入第 " << i + 1 << " 个新职工编号: " << endl;
			cin >> id;

			cout << "请输入第 " << i + 1 << " 个新职工姓名: " << endl;
			cin >> name;

			cout << "请选择该职工岗位: " << endl;
			cout << "1、普通职工" << endl;
			cout << "2、经理" << endl;
			cout << "3、老板" << endl;
			cin >> dId;

			Worker * worker = NULL;
			switch (dId)
			{
   
			case 1:
				worker = new Employee(id, name, 1);
				break;
			case 2:
				worker = new Manager(id, name, 2);
				break;
			case 3:
				worker = new Boss(id, name, 3);
				break;
			default:
				break;
			}
			newspace[this->m_EmpNum + i] = worker;
		}

		//释放原有空间
		delete
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值