Admin_teaDatabase::Admin_teaDatabase(){ ifstream f; f.open("Admin_teaDatabase.txt"); if(!f) { cout<<"无法打开Admin_teaDatabase.txt\n"; exit(1); } const char*Admin_tea at; at.show(); int id; string sname; bool xb; float w; int a,by,bm,bd,wy,wm,wd,tt,pp; Title t; Position p; /*f.seekp(0,ios::end); streampos posend=f.tellp(); f.seekp(0,ios::beg); while(f.tellp()!=posend) */ while(!f.eof()){ f>>id>>sname>>by>>bm>>bd>>xb>>a>>wy>>wm>>wd>>tt>>pp>>w; //显示已读入的数据 cout<<id<<" "<<sname<<" "<<by<<" "<<bm<<" "<<bd<<" "<< xb <<" "<<a<<" "<<wy<<" "<<wm<<" "<<wd<<" "<<tt<<" "<<pp<<" "<<w<<endl; //printf("%s",str2); t=(Title)tt; p=(Position)pp; at.set(id,sname,by,bm,bd,xb,a,wy,wm,wd,t,p,w); Vat.push_back(at); cout<<"at.show"<<endl; cout<<"at.show"<<endl; } f.close(); } void Admin_teaDatabase::Add(){ //插入人员 cout<<"*********************Appending*******************\n"; cout<<"请输入选择:\n1: 教师.\t"<< "2: 行政人员.\t"<< "3: 教师兼行政人员.\t"<< "0:返回>>"; int choice; cin >> choice; const char*Admin_tea at; switch(choice){ case 1: //教师 {at.Teacher::input();break;} case 2: //行政人员 {at.Administrator::input();break;} case 3: //教师兼行政人员 {at.input();break;} case 0 : menu(); } Vat.push_back(at); //Save(f); // Display(); }
时间: 2024-03-23 19:43:27 浏览: 14
这段代码中有几个问题:
1. `const char*Admin_tea at;` 这一行代码不符合语法规则,应该是声明一个 `Admin_tea` 对象,而不是一个字符指针。应该改为 `Admin_tea at;`。
2. `at.show();` 这一行的目的是调用 `Admin_tea` 类的 `show()` 方法,但是在此之前需要先创建一个 `Admin_tea` 对象。因此,可以将 `Admin_tea at;` 放在 `if(!f)` 的下面,或者在前面先定义一个 `Admin_tea` 对象,然后再在循环中使用。
3. `Vat.push_back(at);` 这一行代码将 `at` 对象添加到了 `Vat` 向量中,但是在此之前需要先创建一个 `Admin_tea` 对象,否则会出现未定义的行为。因此,应该将创建 `Admin_tea` 对象的代码移到循环内部,每次循环都创建一个新的对象。
4. `at.set(id,sname,by,bm,bd,xb,a,wy,wm,wd,t,p,w);` 这一行代码调用了 `Admin_tea` 类的 `set()` 方法,但是在此之前需要先创建一个 `Admin_tea` 对象。因此,应该将创建 `Admin_tea` 对象的代码移到循环内部,每次循环都创建一个新的对象。
5. `while(!f.eof())` 这一行代码使用了 `eof()` 函数来判断文件是否已经读取完毕,但是这种方法会导致最后一行数据被读取两次。应该改为使用 `while(f >> id >> sname >> by >> bm >> bd >> xb >> a >> wy >> wm >> wd >> tt >> pp >> w)` 这种方式来读取数据,并且将判断是否读取成功的条件改为 `while (!f.fail())`。
综上所述,下面是修改后的代码:
```
Admin_teaDatabase::Admin_teaDatabase(){
ifstream f;
f.open("Admin_teaDatabase.txt");
if(!f)
{
cout<<"无法打开Admin_teaDatabase.txt\n";
exit(1);
}
int id;
string sname;
bool xb;
float w;
int by,bm,bd,wy,wm,wd,tt,pp;
Title t;
Position p;
while(f >> id >> sname >> by >> bm >> bd >> xb >> a >> wy >> wm >> wd >> tt >> pp >> w)
{
Admin_tea at;
cout<<id<<" "<<sname<<" "<<by<<" "<<bm<<" "<<bd<<" "<< xb <<" "<<a<<" "<<wy<<" "<<wm<<" "<<wd<<" "<<tt<<" "<<pp<<" "<<w<<endl;
t=(Title)tt;
p=(Position)pp;
at.set(id,sname,by,bm,bd,xb,a,wy,wm,wd,t,p,w);
Vat.push_back(at);
}
f.close();
}
void Admin_teaDatabase::Add(){
cout<<"*********************Appending*******************\n";
cout<<"请输入选择:\n1: 教师.\t"<< "2: 行政人员.\t"<< "3: 教师兼行政人员.\t"<< "0:返回>>";
int choice; cin >> choice;
switch(choice){
case 1: //教师
{
Admin_tea at;
at.Teacher::input();
Vat.push_back(at);
break;
}
case 2: //行政人员
{
Admin_tea at;
at.Administrator::input();
Vat.push_back(at);
break;
}
case 3: //教师兼行政人员
{
Admin_tea at;
at.input();
Vat.push_back(at);
break;
}
case 0 :
menu();
}
//Save(f);
//Display();
}
```