believe_12345 2022-09-22 18:59 采纳率: 0%
浏览 109
已结题

黑马职工管理访问权限冲突


#include"workmanager.h"
#include"worker.h"
#include"employee.h"
#include"manager.h"
#include"boss.h"
workmanager::workmanager()
{
    
    //文件不存在的情况
    ifstream ifs;
    ifs.open(FILENAME, ios::in);

    if (!ifs.is_open())
    {
        cout << "文件打开失败" << endl;
        this->m_empnum = 0;
        this->m_emparray = NULL;
        this->m_filesempty = true;
        ifs.close();
        return;
    }
    //即使文件不存在也要关闭文件,因为关闭文件是为了退出文件操作函数
    //文件不为空但存在数据为空
    
    char ch;
    ifs >> ch;
    if (ifs.eof())//eof()当读取到结束符时会变为true,即使你打开了一个空文件,你不读取里面的数据,ifs.eof()会默认为false();
    {
        cout << "文件为空" << endl;
        this->m_empnum = 0;
        this->m_emparray = NULL;
        this->m_filesempty = true;
        ifs.close();
        return;
    }
    //文件存在,且数据存在
    int num1 = 0;
    num1 = this->A();
    cout << "职工人数为" << num1 << endl;
    this->m_empnum = num1;

}
workmanager::~workmanager()
{
    if (m_emparray!=NULL)
    {
        delete[]m_emparray;
        m_emparray = NULL;
    }
}
void workmanager::show_menu()
{
    cout << "*********************************" << endl;
    cout << "****** 欢迎使用职工管理系统******" << endl;
    cout << "******** 0.退出管理系统 *********" << endl;
    cout << "******** 1.增加职工信息 *********" << endl;
    cout << "******** 2.显示职工信息 *********" << endl;
    cout << "******** 3.删除离职职工 *********" << endl;
    cout << "******** 4.修改职工信息 *********" << endl;
    cout << "******** 5.查找职工信息 *********" << endl;
    cout << "******** 6.按照编号排序 *********" << endl;
    cout << "******** 7.清空所有文档 *********" << endl;
    cout << "*********************************" << endl;
    cout << endl;
}
//退出管理系统文件
void workmanager::exitsystem()
{
    cout << "欢迎您下次使用" << endl;
    system("pause");
    exit(0);//退出管理系统 这个东西会使系统退出程序
}
//增加职工人数
void workmanager::add_emp()
{
    cout << "请输入你想要添加的职工人数" << endl;
    int addnum = 0;//保存用户的输入数值
    cin >> addnum;
    if (addnum > 0)
    {
        //添加联系人
        //添加空间的大小
        int newsize = addnum + this->m_empnum;//新空间的大小等于记录的人数+新增的人数
        //开辟新空间
        worker** newspace = new worker * [newsize];//利用new创建数组时里面可以不用写常量
        //将原来空间下的数据拷贝到新的空间下
        if (this->m_emparray!=NULL)
        {
            for (int i = 0; i < m_empnum; i++)
            {
                newspace[i] = m_emparray[i];
            }
        }
        //批量添加新的数据
        for (int i=0;i<addnum;i++)
        {
            int id;//职工编号
            string name;//职工姓名
            int bumen;//部门选择
            cout << "请输入" << i + 1 << "个新职工编号" << endl;
            cin >> id;
            cout << "请输入第" << i + 1 << "个新职工姓名" << endl;
            cin >> name;
            cout << "请选择该职工的岗位" << endl;
            cout << "1、普通员工" << endl;
            cout << "2、经理" << endl;
            cout << "3、老板" << endl;
            cin >> bumen;//这里可以判断它是不是1,2,3
            worker* worker1 = NULL;
            switch (bumen)
            {
            case 1:
                worker1 = new employee(id, name, 1);//需要有一个分号
                break;
            case 2:
                worker1= new manager(id, name, 2);
                break;
            case 3:
                worker1 = new boss(id, name, 3);
                break;
            default :
                break;
            }
            //将创建的职工职责保存到数组中
            newspace[this->m_empnum + i] = worker1;
        }
        //释放原有空间
        delete[]this->m_emparray;
        //更改新空间的指向
        //m_emparray = new worker * [newsize];
        this->m_emparray = newspace;
        //更新新的职工人数
        this->m_empnum = newsize;
        //职工文件不为空
        m_filesempty = false;
        //提示添加成功
        cout << "成功添加" << addnum << "名新职工" << endl;
        //保存数据到文件中
        //按任意键清屏 清屏回到上即目录
        system("pause");
        system("cls");
    }
    else
    {
        cout << "输入数据有误" << endl;
    }
    save();
}
//保存文件
void workmanager::save()
{
    ofstream ofs;
    ofs.open(FILENAME,ios::out);//用输出的方式打开文件——写文件
    for (int i=0;i<this-> m_empnum;i++)
    {
        ofs << m_emparray[i]->m_Id<< " "
            << m_emparray[i]->m_name << " "
            << m_emparray[i]->m_bumenbianhao << endl;
        /*ofs << m_emparray[i]->m_name;
        ofs << m_emparray[i]->m_bumenbianhao;
        ofs << endl;*/
    }
    ofs.close();
}
//记录文件中的数据
int workmanager::A()
{
    int num=0;//因为有num++所以要要进行初始化
    ifstream ifs;
    ifs.open(FILENAME, ios::in);
    int id;
    string name;
    int bumen;
    string a; //ifs >> name && ifs >> id && ifs >> bumen
    //while (getline(ifs,a))
    while(ifs >>a)
    //while(ifs >> id && ifs >>name&& ifs >> bumen)
    {
        num++;
    }
    ifs.close();
    return num;
}


img

  • 写回答

1条回答 默认 最新

  • believe_12345 2022-09-23 21:25
    关注

    开头出了

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月23日
  • 赞助了问题酬金10元 9月23日
  • 创建了问题 9月22日

悬赏问题

  • ¥15 poi合并多个word成一个新word,原word中横版没了.
  • ¥15 【火车头采集器】搜狐娱乐这种列表页网址,怎么采集?
  • ¥15 求MCSCANX 帮助
  • ¥15 机器学习训练相关模型
  • ¥15 Todesk 远程写代码 anaconda jupyter python3
  • ¥15 我的R语言提示去除连锁不平衡时clump_data报错,图片以下所示,卡了好几天了,苦恼不知道如何解决,有人帮我看看怎么解决吗?
  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?