问题遇到的现象和发生背景
用代码块功能插入代码,请勿粘贴截图
我想要达到的结果
#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;iint 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 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;
}


是这个问题