#include
#include
using namespace std;
#define FILENAME “stdFILE.txt” //定义生成文件名称
//学生类(抽象类)
class Student {
public:
virtual void showInfo() = 0; //显示个人信息
// virtual ~Student() = 0; //定义纯虚析构函数保证释放堆区内存时不会发生内存泄漏
string StId; //学号
string m_name; //姓名
string m_Dept; //职责
};
//普通学生类
class Nomalstuden : public Student {
public:
Nomalstuden(string Id, string name, string dep);
void showInfo(); //显示个人信息
// ~Nomalstuden() {
// delete this;
// }
};
//班长类
class ClassPresident : public Student {
public:
ClassPresident(string Id, string name, string dep);
void showInfo ();
// ~ClassPresident() {
// delete this;
// }
};
//班干部类
class Classleader : public Student {
public:
Classleader(string Id, string name, string dep);
void showInfo ();
// ~Classleader() {
// delete this;
// }
};
//管理员类
class StudentManager {
public:
StudentManager();//构造函数
void Show_Menu(); //打印菜单界面
void Exit_System();//退出系统
void Addinfo(); //增加学生信息
void save(); //将学生信息保存到文件中
void init_Std(); //初始化学生
void show_Std(); //显示学生信息
void del_Std(); //删除学生信息
void mod_Std(); //修改学生信息
void find_Std(); //查找学生信息
void clean_File(); //清空文件
int IsExist(string id); //判断学号为id的学生信息是否存在,并返回该学生下标
~StudentManager();//析构函数
vector<Student*> *m_StdArray; //存放增加的学生信息
bool m_fileIsEmpty; //标记文件是否为空
};
//学生类纯虚析构的外部实现
// Student :: ~Student() {
// delete this;
// }
//管理员函数实现
StudentManager :: StudentManager() {
ifstream ifs;
ifs.open(FILENAME, ios :: in);
//如果文件不存在
if (!ifs.is_open()) {
cout << “该文件不存在!” << endl;
this -> m_fileIsEmpty = true;
this -> m_StdArray = NULL;
ifs.close();
return ;
}
//文件存在但是数据为空
char ch;
ifs >> ch; //先读取一个字符
if (ifs.eof()) {
cout << “该文件为空!” <<endl;
this -> m_fileIsEmpty = true;
this -> m_StdArray = NULL;
ifs.close();
return ;
}
//文件存在,并记录初始数据
this -> m_StdArray