小白这次的c++程序是要实现多重继承,虚函数等功能的一个学校人员管理系统。
系统要求由一个基类继承出学生类和老师类,再由学生类和老师类共同继承出在读教
师类和在职研究生类。学生类和老师类继承基类时,基类是虚基类。
小白先写了基类和教师类然后先试一番,生成解决方案没有出现错误,但是“执行(不调试)”之后,出现黑色的执行窗口,前面立马出现一个框框,上面写着”my6/*我滴文件名*/ .exe已经停止工作,由于出现问题,程序停止正常工作。windows将关闭程序,并会在有可用的解决方案时通知你“。
小白上百度搜,度娘说,可能时堆栈溢出,或者内存使用不当等问题,可是小白不太懂这些,前前后后看了几遍代码,修来修去,还是不能,还有噢,vs我用了“开始调试”后出现了这样的情况
求大佬大神们帮助!~~
以下就是我哒程序~~
#include<iostream>
using namespace std;
#include<string>
#define N 20
int nt = 0;
class person
{
protected:
string name;
char sex;
int age;
public:
person(string n = '\0', char s = '\0', int a = 0) { name = n; sex = s; age = a; }
virtual void set() = 0;
virtual void input(int) = 0;
virtual void display() = 0;
virtual void add() = 0;
virtual void search() = 0;
virtual void find(string) = 0;
virtual void find(int) = 0;
virtual void find(string, int[]) = 0;
virtual void find(int, int[]) = 0;
virtual void choosehowmodify() = 0;
virtual void modify(int[]) = 0;
};
class teacher :virtual public person
{
private:
string zhicheng;
int gongzi;
public:
int gonghao;
teacher(string n = "teacher", char s = '\0', int a = 0, int gh = 0, string z = '\0', int gz = 0) :person(n, s, a) { gonghao = gh; zhicheng = z; gongzi = gz; }
void set();
void input(int);
void display();
void add();
void search();
void find(string);
void find(int);
void find(string, int[]);
void find(int, int[]);
void choosehowmodify();
void modify(int[]);
friend ostream & operator<<(ostream &output, const teacher &t);
}tea[N];
void teacher::set()
{
cout << "创建教师人数:";
cin >> nt;
if (nt <= N)
{
int i;
for (i = 0; i < nt; i++)
{
tea[i].input(i);
}
}
else cout << "超出容量!最多输入" << N << "人!" << endl << "请重新输入创建人数:";
}
void teacher::input(int i)
{
cout << "请输入第" << i + 1 << "名教师的信息:" << endl;
cout << "姓名:";
cin >> name;
cout << "性别:";
cin >> sex;
cout << "年龄:";
cin >> age;
cout << "职称:";
cin >> zhicheng;
cout << "工资:";
cin >> gongzi;
cout << "工号:";
cin >> gonghao;
}
ostream & operator<<(ostream &output, const teacher &t)
{
output << "姓名:" << t.name << endl << "性别:" << t.age << endl << "年龄:" << t.sex << endl << "职称:" << t.zhicheng << endl << "工资:" << t.gongzi << endl << "工号:" << t.gonghao << endl;
return output;
}
void teacher::display()
{
int i;
cout << "显示教师信息:";
for (i = 0; i < nt; i++)
{
cout << tea[i];
}
}
void teacher::add()
{
cout << "添加教师人数:";
int temp;
cin >> temp;
if (nt + temp <= N)
{
int i;
for (i = nt; i < nt + temp; i++)
{
tea[i].input(i);
nt++;
}
}
else cout << "超出容量!最多再输入" << N - nt << "人!" << endl << "请重新输入添加人数:";
}
void teacher::search()
{
bool pan = true;
while (pan)
{
pan = false;
cout << "1.姓名:" << endl << "2.工号:" << endl;
cout << "查询教师信息,请选择查询途径:";
int x;
cin >> x;
if (x == 1 || x == 2)
{
switch (x)
{
case 1:
{
cout << "输入姓名:";
string nam;
cin >> nam;
find(nam);
break;
}
case 2:
{
cout << "输入工号:";
int gh;
cin >> gh;
find(gh);
break;
}
}
cout << "输入y继续查询,输入n则退回教师信息操作菜单,请选择:";
char y;
cin >> y;
if (y == 'y')
pan = true;
}
else
{
cout << "输入的选择无效,请输入1或2!";
pan = true;
}
}
}
void teacher::find(string nam)
{
int i;
for (i = 0; i < nt; i++)
{
if (nam == tea[i].name)
{
cout << tea[i];
}
}
}
void teacher::find(int gh)
{
int i;
for (i = 0; i < nt; i++)
{
if (gh == tea[i].gonghao)
cout << tea[i];
}
}
void teacher::find(string nam, int list[])
{
int i, j = 0;
for (i = 0; i < nt; i++)
{
if (nam == tea[i].name)
{
list[j] = i;
j++;
}
}
}
void teacher::find(int gh, int list[])
{
int i, j = 0;
for (i = 0; i < nt; i++)
{
if (gh == tea[i].gonghao)
{
list[j] = i;
j++;
}
}
}
void teacher::choosehowmodify()
{
bool pan = true;
while (pan)
{
pan = false;
cout << "1.姓名:" << endl << "2.工号:" << endl;
cout << "修改教师信息,请选择寻修改途径:";
int x;
cin >> x;
if (x == 1 || x == 2)
{
switch (x)
{
case 1:
{
cout << "输入姓名:";
string nam;
cin >> nam;
int list[N] = { 0 };
find(nam, list);
modify(list);
break;
}
case 2:
{
cout << "输入工号:";
int gh;
cin >> gh;
int list[N] = { 0 };
find(gh, list);
modify(list);
break;
}
}
cout << "输入y继续修改,输入n则退回教师信息操作菜单,请选择:";
char y;
cin >> y;
if (y == 'y')
pan = true;
}
else
{
cout << "输入的选择无效,请输入1或2!";
pan = true;
}
}
}
void teacher::modify(int list[])
{
int i;
for (i = 0; list[i] != 0; i++)
{
bool pan = true;
while (pan)
{
pan = false;
cout << tea[list[i]] << endl;
cout << "1.姓名:" << endl << "2.性别:" << endl << "3.年龄:" << endl << "4.职称:" << endl << "5.工资:" << endl << "6.工号:" << endl;
cout << "请输入欲修改的信息序号:";
int z;
cin >> z;
switch (z)
{
case 1:
{
cout << "请输入新姓名:";
cin >> tea[list[i]].name;
break;
}
case 2:
{
cout << "请输入新性别:";
cin >> tea[list[i]].sex;
break;
}
case 3:
{
cout << "请输入新年龄:";
cin >> tea[list[i]].age;
break;
}
case 4:
{
cout << "请输入新职称:";
cin >> tea[list[i]].zhicheng;
break;
}
case 5:
{
cout << "请输入新工资:";
cin >> tea[list[i]].gongzi;
break;
}
case 6:
{cout << "请输入新工号:";
cin >> tea[list[i]].gonghao;
break;
}
}
cout << "输入y继续修改该教师,输入n则进入下一步:";
char x;
cin >> x;
if (x == 'y')
pan = true;
}
}
}
int main()
{
void choosefunction(person*);
person *pt;
bool pan = true;
while (pan)
{
cout << "**类选择菜单**" << "1.教师" << endl << "2.学生" << endl << "3.在职研究生" << endl << "4.在读教师" << endl << endl << "请选择:";
char x;
cin >> x;
switch (x)
{
case 1:pt = tea; choosefunction(pt); break;
case 2:cout << "敬请期待!"; break;
}
cout << "输入y则继续对“类选择菜单”进行操作,输入n则退出程序,请选择:";
char y;
cin >> y;
if (y == 'y')
pan = true;
else
pan = false;
}
return 0;
}
void choosefunction(person *pt)
{
bool pan = true;
while (pan)
{
cout << "a.创建" << endl << "b.显示" << endl << "c.添加" << endl << "d.查询" << endl << "e.修改" << endl << "请选择:" << endl;
char x;
cin >> x;
switch (x)
{
case 'a':pt->set(); break;
case 'b':pt->display(); break;
case 'c':pt->add(); break;
case 'd':pt->search(); break;
case 'e':pt->choosehowmodify(); break;
}
cout << "输入y则继续对该类进行操作,输入n则退回“类选择菜单”,请选择:";
char y;
cin >> y;
if (y == 'y')
pan = true;
else
pan = false;
}
}