红豆泥! 2021-12-15 18:51 采纳率: 85%
浏览 9
已结题

为什么先读取再添加的时候会报错,该怎样改呢


#include"iostream"
#include <fstream>
#include<string.h>
#include"stdlib.h"
#define MAX 100
#define PASSWORD 111//密码
using namespace std;
class person
{
public:
    int num;
    char name[200];
    char sex[4];
    int age;
};
class  Calculate
{
private:
    int m,j1,j2;
public:
     void calc();
};
//Teacher class
class Teacher:virtual public person
{
public:
    char dept[20];
    char special[20];
    char title[20];
    void Input()
    {
        cout<<"Input num:";cin>>num;
        cout<<"Input name:";cin>>name;
        cout<<"Input sex:";cin>>sex;
        cout<<"Input age:";cin>>age;
        cout<<"Input dept:";cin>>dept;
        cout<<"Input special:";cin>>special;
        cout<<"Input title:";cin>>title;
    }
    void Output()
    {
        cout<<"编号: "<<num<<"  "<<"姓名: "<<name<<"  "<<"性别: "<<sex<<"  "<<"年龄: "<<age<<
            "  "<<"所在系: "<<dept<<"  "<<"专业: "<<special<<"  "<<"职称: "<<title<<endl;
    }
};
Teacher Tea[MAX];
static int Teatop;
 
class TeaManager:public Calculate
{
public:
    int Add();
    int Search();
    void Show();
    void Edit();
    int Delete();
    void Save();
    void Read();
    void count();
};
int TeaManager::Add()
{
    Teacher t;
    int i,nu;
    if(Teatop==MAX) 
    {cout<<"人数已满"<<endl;
    return 0;
    }
    cout<<"请输入编号:";cin>>nu;
    for(i=0;i<Teatop;i++)
    {
        if(nu==Tea[i].num)
        {cout<<"已有编号,请重新输入"<<endl;
        return 0;
        }
    }
    t.Input();
    cout<<"您确定要添加这条信息吗?(1.添加 2.不添加)"<<endl;
    int a;
    cin>>a;
    if(a==1){
        Tea[Teatop]=t;
        Teatop++;
        cout<<"添加成功!"<<endl;
    }
    else cout<<"添加失败!"<<endl;
    return 1;
}
int TeaManager::Search()
 {
    int j,n,s;
    char a[100];
      cout<<"请选择:1.按编号查找;"<<endl;
      cout<<"        2.按姓名查找:"<<endl;
      cin>>s;
      switch(s)
      {
          case 1:
              {
                cout<<"输入查询编号:";
                  cin>>n;
                  for(j=0;j<Teatop;j++)
                  {
                    if(n==Tea[j].num) break;
                  else
                      continue;
                }
                if(j==Teatop)
                {
                cout<<"查无此人;"<<endl;
                return 0;
                }
                if(j!=Teatop)
                 {Tea[j].Output();
                return 1;}
              }break;
          case 2:
              {
                  cout<<"输入查询姓名:";
                  cin>>a;
                  for(j=0;j<Teatop;j++)
                  {
                    if(strcmp(Tea[j].name,a)==0) break;
                }
                if(j==Teatop)
                { cout<<"查无此人;"<<endl;
                   return 0;   
                }
                if(j!=Teatop)
             {  Tea[j].Output();
                return 1;}
              }break;
    }
  }
void TeaManager::Show()
{
    int i;
    if(Teatop==0)
    {cout<<"记录为空!"<<endl; return;}
    for(i=0;i<Teatop;i++)
            Tea[i].Output();
}
void TeaManager::Edit()
{
    Teacher t1;
    int j,n;
    cout<<"请输入要编辑的人的编号:";cin>>n;
    for(j=0;j<Teatop;j++)
    {
        if(n==Tea[j].num) break;
    }
    if(j==Teatop)
    {cout<<"没有此人!"<<endl;return;};
    cout<<"输入修改后的信息,编号不能改:"<<endl;
    t1.Input();
    Tea[j]=t1;
    cout<<"编辑成功!"<<endl;
}
int TeaManager::Delete()
{
    int j,n;
    cout<<"请输入要删除的人的编号:";cin>>n;
    for(j=0;j<Teatop;j++)
    {
        if(n==Tea[j].num) break;
    }
    if(j==Teatop)
    {cout<<"没有此人!"<<endl;return 0;};
      for(j;j<Teatop;j++){
        cout<<"您确定要删除此条信息吗?(1.删除 2.不删除)"<<endl;
        int a;
        cin>>a;
        if(a==1){
            Tea[j]=Tea[j+1];
            Teatop--;
            cout<<"删除成功!"<<endl;
        }
        else cout<<"删除失败!"<<endl;
    }
    return 1;
}
void TeaManager::Save()
{
    int i;
    ofstream outfile,outfile1;   
    outfile1.open("Teatop.txt",ios::out);
    outfile1<<Teatop;
    outfile.open("Tea_data.txt",ios::binary);   
       if(!outfile)
       {cerr<<"open error!"<<endl; return; }
       for(i=0;i<Teatop;i++)
       {   outfile<<setw(8)<<Tea[i].num <<setw(8)<<Tea[i].name<<setw(8)<<Tea[i].sex<<setw(8)<<Tea[i].age
       <<setw(10)<<Tea[i].dept<<setw(20)<<Tea[i].special<<setw(10)<<Tea[i].title<<endl;
       outfile.close();   
       cout<<"保存成功!"<<endl;}
} 
void TeaManager::Read()
{
    int i;
    ifstream infile,infile1; 
    infile1.open("Teatop.txt",ios::in);
    infile1>>Teatop;
    infile.open("Tea_data.txt",ios::binary);   
       if(!infile)
       {cerr<<"open error!"<<endl; return; }
       for(i=0;i<Teatop;i++)
           infile.read((char *)&Tea[i],sizeof(Tea[i])); 
       infile.close();  
       cout<<"读取成功!"<<endl;
} 
void Tea_mune(TeaManager TM)
{
    int b;
    char c;
    do{
        cout<<"教师管理"<<endl;
        cout<<"=========================================================================================="<<endl;
        cout<<"1.添加    ";
        cout<<"2.查询    ";
        cout<<"3.显示    ";
        cout<<"4.编辑    ";
        cout<<"5.删除    ";
        cout<<"6.统计    ";
        cout<<"7.保存    ";
        cout<<"8.读取    ";
        cout<<"0.退出 |"<<endl;
        cout<<"=========================================================================================="<<endl;
        cout<<"请选择:";cin>>b;
        switch(b)
        {
        case 1:TM.Add();break;
        case 2:TM.Search();break;
        case 3:TM.Show();break;
        case 4:TM.Edit();break;
        case 5:TM.Delete();break;
        case 6:TM.count();break;
        case 7:TM.Save();break;
        case 8:TM.Read();break;
        default:cout<<"\n error"<<endl;break;
        case 0:break;
        }
        cout<<"按回车键继续"<<endl;
        system("pause");
        c=getchar();
        system("cls");
    }while(b!=0);
}
int main()
{
    TeaManager Tmer1;
    TestManager Tetmer;
    PolicerManager Polimer;
    TeaPolicerManager TeaPolimer;
    int a=1,m=0;
    int j;
    char c;
    cout<<"    *************************************";
    cout<<endl<<"    $         高校人员管理系统         $"<<endl;
    cout<<"    *************************************";
    cout<<endl;
 
    while(a)
    {
         cout<<endl;
        cout<<"              =================================="<<endl;
        cout<<"              -----欢迎来到高校人员管理系统-----"<<endl;
        cout<<"                                                "<<endl;
        cout<<"|                              制作人:          |"<<endl;
        cout<<"              =================================="<<endl;
        cout<<"按回车键继续"<<endl;
        flushall();
        c=getchar();         
        system("cls");
        cout<<endl;
        cout<<"              ****欢迎使用高校人员信息管理系统****"<<endl;
        cout<<"               ================================="<<endl;
        cout<<"               | 1.教师管理                    |"<<endl;
        cout<<"               | 0.退出                        |"<<endl;
        cout<<"               ================================="<<endl;
        cout<<"请选择:";cin>>a;    
        switch(a)
        {
        case 1:Tea_mune(Tmer1);break;
        case 0:break;
        default:cout<<"\n error"<<endl;
        cout<<"按回车键继续"<<endl;
        system("pause");
        c=getchar();         
        break;
        }
    }
    cout<<endl<<"谢谢使用"<<endl;
    system("pause");
    c=getchar();
    return 0;
}
 

报错

img

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月23日
    • 创建了问题 12月15日

    悬赏问题

    • ¥15 matlab数据降噪处理,提高数据的可信度,确保峰值信号的不损失?
    • ¥15 怎么看我在bios每次修改的日志
    • ¥15 python+mysql图书管理系统
    • ¥15 Questasim Error: (vcom-13)
    • ¥15 船舶旋回实验matlab
    • ¥30 SQL 数组,游标,递归覆盖原值
    • ¥15 为什么我的数据接收的那么慢呀有没有完整的 hal 库并 代码呀有的话能不能发我一份并且我用 printf 函数显示处理之后的数据,用 debug 就不能运行了呢
    • ¥20 gitlab 中文路径,无法下载
    • ¥15 用动态规划算法均分纸牌
    • ¥30 udp socket,bind 0.0.0.0 ,如何自动选取用户访问的服务器IP来回复数据