基于多态的职工管理系统(7)------ 添加职工

7、添加职工

功能描述:批量添加职工,并且保存到文件中

7.1 功能分析

分析:

用户在批量创建时,可能会创建不同种类的职工

如果想将所有不同种类的员工都放入到一个数组中,可以将所有员工的指针维护到一个数组里

如果想在程序中维护这个不定长度的数组,可以将数组创建到堆区,并利用Worker **的指针维护

 

7.2 功能实现

在WokerManager.h头文件中添加成员属性 代码:

    //记录文件中的人数个数
    int m_EmpNum;

    //员工数组的指针
    Worker ** m_EmpArray;

在WorkerManager构造函数中初始化属性

WorkerManager::WorkerManager()
{
    //初始化人数
    this->m_EmpNum = 0;

    //初始化数组指针
    this->m_EmpArray = NULL;
}

在workerManager.h中添加成员函数

    //增加职工
    void Add_Emp();

workerManager.cpp中实现该函数

//增加职工
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 >> dSelect;


            Worker * worker = NULL;
            switch (dSelect)
            {
            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[] this->m_EmpArray;

        //更改新空间的指向
        this->m_EmpArray = newSpace;

        //更新新的个数
        this->m_EmpNum = newSize;

        //提示信息
        cout << "成功添加" << addNum << "名新职工!" << endl;
    }
    else
    {
        cout << "输入有误" << endl;
    }

    system("pause");
    system("cls");
}

在WorkerManager.cpp的析构函数中,释放堆区数据

WorkerManager::~WorkerManager()
{
    if (this->m_EmpArray != NULL)
    {
        delete[] this->m_EmpArray;
    }
}

7.3 测试添加

在main函数分支 1 选项中,调用添加职工接口

 

效果如图:

posted @ 2021-06-24 15:39  清水石头  阅读(196)  评论(0)    收藏  举报