c++写入的txt文件乱码,怎么搞?

#include<iostream>
#include<string>
#include<fstream>
#include<algorithm>
#include<iomanip>
#include<cstdio>
#include<cstdlib>
#include<conio.h>
#include<vector>
using namespace std;
class Score {
public:
    char num3[13];//学号
    char num4[10];//课程号
    char score[4];//成绩
};
class Student {
public:
    char num[13];//学号
    char banji[10];//班级
    char name[24];//姓名
    char sex[4];//性别
    Score sc;

};
class Lesson {
public:
    char num2[10];//课程号
    char score[5];//学分
    char name2[24];//课程名称
    char time[5];//学时
    int cla[50];
};
class Teacher {
public:

    Lesson les;
    int N = 50;
    Student stu[];

    void Scseek();//成绩查找
    void Scmodify();//修改成绩信息
    void score();//增加成绩信息
    void Scdel();//删除成绩信息
    void Scdisplay();//显示成绩信息
    void Scempty();//清空所有成绩信息
    void stuempty();//清空所有学生信息
    void student();//增加学生个人信息
    void studisplay();//显示学生个人信息
    void stuseek();//查找学生信息
    void stumodify();//修改学生信息
    void studel();//删除学生信息
    void lesson();//增加课程信息
    void lesseek();//查找课程信息
    void lesdisplay();//显示课程信息
    void lesmodify();//修改课程信息
    void lesdel();//修改课程信息
    void lesempty();//清空课程信息
    void menu1();//学生信息管理
    void menu2();//课程信息菜单
    void menu3();//成绩信息菜单

};
void Teacher::student() {
    int n = 0;
    int j = n;
    int m;//要增加的学生人数}
    cout << "请输入待增加的学生数:" << endl;
    cin >> m;
    do
    {
        Student stu;
        cout << "请输入第" << j - n + 1 << "个学生的学号" << endl;//输入学生信息
        cin >> stu.num;
        cout << "请输入第" << j - n + 1 << "个学生的姓名" << endl;
        cin >> stu.name;
        cout << "请输入第" << j - n + 1 << "个学生的班级" << endl;
        cin >> stu.banji;
        cout << "请输入第" << j - n + 1 << "个学生的性别" << endl;
        cin >> stu.sex;
        j++;
        fstream file("stuinfo.txt", ios::out | ios::binary | ios::app);
        file.write((char*)&stu, sizeof(Student));//把该学生对象写入文件
        file.close();
    } while (j < n + m);
    n += m;
    cout << "信息增加完毕" << endl;
    return;
}
void Teacher::lesson() {
    int n = 0;
    int j = n;
    int m;//要增加的学生人数}
    cout << "请输入待增加的课程数:" << endl;
    cin >> m;
    do
    {
        Lesson les;
        cout << "请输入第" << j - n + 1 << "个课程的课程号" << endl;//输入学生信息
        cin >> les.num2;
        cout << "请输入第" << j - n + 1 << "个课程的名字" << endl;
        cin >> les.name2;
        cout << "请输入第" << j - n + 1 << "个课程的学分" << endl;
        cin >> les.score;
        cout << "请输入第" << j - n + 1 << "个课程的学时" << endl;
        cin >> les.time;
        j++;
        fstream file("courseinfo.txt", ios::out | ios::binary | ios::app);
        file.write((char*)&stu, sizeof(Lesson));//把该课程对象写入文件
        file.close();
    } while (j < n + m);
    n += m;
    cout << "信息增加完毕" << endl;
    return;
}
void Teacher::score() {
    int n = 0;
    int j = n;
    int m;//要增加的学生人数}
    cout << "请输入待增加的成绩数量:" << endl;
    cin >> m;
    do
    {
        Score sco;
        cout << "请输入第" << j - n + 1 << "个学生的学号" << endl;//输入学生信息
        cin >> sco.num3;
        cout << "请输入第" << j - n + 1 << "个课程的课程号(" << endl;
        cin >> sco.num4;
        cout << "请输入第" << j - n + 1 << "个课程的成绩" << endl;
        cin >> sco.score;
        j++;
        fstream file("grade.txt", ios::out | ios::binary | ios::app);
        file.write((char*)&sco, sizeof(Score));//把该学生对象写入文件
        file.close();
    } while (j < n + m);
    n += m;
    cout << "信息增加完毕" << endl;
    return;
}
void Teacher::Scseek() {
    char str[20];
    char num[20];
    cout << "请输入要查询的学生的学号" << endl;
    cin >> str;
    cout << "请输入要查询的对应课程号" << endl;

    cin >> num;
    fstream file("grade.txt", ios::binary | ios::in);//打开文件
    while (!file.eof())
    {
        Score sco;
        file.read((char*)&sco, sizeof(Score));
        if (strcmp(sco.num3, str) == 0&& strcmp(sco.num4, str) == 0) //判断从文件读出对象的学号信息是否和输入相等
        {
            cout << "学生学号        课程号           成绩" << endl;
            cout << sco.num3 << "\t" << sco.num4 << "\t" << sco.score<< endl;
            break;
        }
        if (strcmp(sco.num3, str) != 0 && strcmp(sco.num4, str) != 0) {
            cout << "该学号不存在" << endl;
        }
    }
    file.close();
}
void Teacher::Scdisplay() {
    int t = 0;
    fstream file("grade.txt", ios::binary | ios::in);
    cout << "学生学号        课程号           成绩" << endl;
    while (!file.eof() && file.peek() != EOF)
    {
        Score sco;
        file.read((char*)&sco, sizeof(Score));//从文件读出所有学生信息
        cout << sco.num3 << "\t" << sco.num4 << "\t" << sco.score << endl;
    };
    file.close();

}
void Teacher::Scmodify() {
    int    item;    //选择修改项,修改年龄
    char  score[5];
    vector<Score> va;
    Score sc;
    int flag;
    char str[20];
    char num[20];
    cout << "请输入要修改的学生的学号" << endl;
    cin >> str;
    cout << "请输入要修改的对应课程号" << endl;
    cin >> num;
    fstream file("grade.txt", ios::binary | ios::in);//打开文件存取成绩对象的文件
    while (!file.eof())
    {
        file.read((char*)&sc, sizeof(Score));//读取文件
        if (strcmp(sc.num3, str) == 0 && strcmp(sc.num4, num) == 0)//如果存在学生信息输出
        {
            flag = 1;
            cout << "学生学号        课程号           成绩" << endl;
            cout << sc.num3 << "\t" << sc.num4 << "\t" << sc.score << endl;
            break;
        }
        else {
            flag = 0;
            cout << "无对应信息" << endl;
        }
    }
    file.close();

    while (flag == 1)
    {
        while (!file.eof() && file.peek() != EOF)
        {
            file.read((char*)&sc, sizeof(Score));//读取文件
            if (strcmp(sc.num3, str) == 0 && strcmp(sc.num4, num) == 0)
            {
                continue;
            }
            else {
                file.close();
                break;
            }
            va.push_back(sc);//将非删除的学生存入容器
        }
        fstream file1("grade.txt", ios::out | ios::trunc);
        for (int i = 0; i < va.size(); i++)
        {
            file1.write((char*)&va[i], sizeof(Score));//将容器中的学生对象写入文件
        }
        printf("------------------\n");
        printf("1.修改学号\n");
        printf("2.修改课程号\n");
        printf("3.修改成绩\n");
        printf("4.退出本菜单\n");
        printf("------------------\n");
        printf("请选择子菜单编号:");
        scanf_s("%d", &item);
        switch (item)
        {
        case 1:
            printf("请输入新的学号:\n");
            cin >> str;
            strcpy_s(sc.num3,str); break;
        case 2:
            printf("请输入新的课程号:\n");
            cin >> num;
            strcpy_s(sc.num4, num); break;
        case 3:
            printf("请输入新的成绩:\n");
            cin >> score;
            strcpy_s(sc.score,score); break;
        case 4: {
            fstream file("grade.txt", ios::out | ios::binary | ios::app);
            cout << "修改成功" << endl;
            file.write((char*)&sc, sizeof(Score));//把新的学生信息写入文件
            file.close();
            return;
        }
        default:printf("请在1-4之间选择\n");
        }  
    }

}
void Teacher::Scdel() {
    vector<Score> va;
    Score sco;//将读出的学生信息存入该对象
    int flag;
    char str[20];
    char num[20];
    cout << "请输入要删除的学生的学号" << endl;
    cin >> str;
    cout << "请输入要查询的对应课程号" << endl;
    cin >> num;

    fstream file("grade.txt", ios::binary | ios::in);//打开文件存取学生对象的文件
    while (!file.eof() && file.peek() != EOF)
    {
        file.read((char*)&sco, sizeof(Score));//读取文件
        if (strcmp(sco.num3, str) == 0 && strcmp(sco.num4, str) == 0)//如果存在学生信息输出
        {
            flag = 1;
            continue;
        }
        va.push_back(sco);//将非删除的学生存入容器
    }
    fstream file1("grade.txt", ios::out | ios::trunc);
    for (int i = 0; i < va.size(); i++)
    {
        file1.write((char*)&va[i], sizeof(Score));//将容器中的学生对象写入文件
    }
    cout << "删除成功" << endl;
    file.close();//关闭文件
    file1.close();
}
void Teacher::Scempty() {
    fstream file("grade.txtt", ios::out);
};
void Teacher::studisplay() {
    int t = 0;
    fstream file("stuinfo.txt", ios::binary | ios::in);
    cout << "学生学号        班级           学生姓名      性别" << endl;
    while (!file.eof() && file.peek() != EOF)
    {
        Student stu;
        file.read((char*)&stu, sizeof(Student));//从文件读出所有学生信息
        cout << stu.num << "\t" << stu.banji << "\t" << stu.name << "\t     " << stu.sex << endl;
    };
    file.close();

}
void Teacher::stumodify() {
    int    item;    //选择修改项,修改年龄
    float  score;
    vector<Student> va;
    Student stu;
    int flag;
    char str[20];//暂时存修改内容6
    cout << "请输入要修改的学生的学号" << endl;
    cin >> str;
    fstream file("stuinfo.txt", ios::binary | ios::in);//打开文件存取学生对象的文件
    while (!file.eof() && file.peek() != EOF)
    {
        file.read((char*)&stu, sizeof(Student));//读取文件
        if (strcmp(stu.num, str) == 0)//如果存在学生信息输出
        {
            flag = 1;
            continue;
        }
        else {
            flag = 0;
            cout << "该学生不存在" << endl;
            break;
        }
        va.push_back(stu);//将非删除的学生存入容器
    }
    fstream file1("stuinfo.txt", ios::out | ios::trunc);
    for (int i = 0; i < va.size(); i++)
    {
        file1.write((char*)&va[i], sizeof(Student));//将容器中的学生对象写入文件
    }
    while (!file.eof())
    {
        file.read((char*)&stu, sizeof(Student));//读取文件
        if (strcmp(stu.num, str) == 0)//如果存在学生信息输出
        {
            flag = 1;
            cout << "学生学号        班级           学生姓名  性别" << endl;
            cout << stu.num << "\t" << stu.banji << "\t" << stu.name << "\t     " << stu.sex << endl;
            break;
        }
        else {
            flag = 0;
        }
    }    
    file.close();
    while (flag==1)
    {
        printf("------------------\n");
        printf("1.修改姓名\n");
        printf("2.修改班级\n");
        printf("3.修改性别\n");
        printf("4.退出本菜单\n");
        printf("------------------\n");
        printf("请选择子菜单编号:");
        scanf_s("%d", &item);
        switch (item)
        {
        case 1:
            printf("请输入新的姓名:\n");
            cin >> str;
            strcpy_s(stu.name, str); break;//为学生姓名赋新值
        case 2:
            printf("请输入新的班级:\n");
            cin >> str;
            strcpy_s(stu.banji, str); break;//为学生班级赋新值
        case 3:
            printf("请输入新的性别:\n");
            cin >> str;
            strcpy_s(stu.sex, str); break;//为学生性别赋新值
        case 4: {
            fstream file("stuinfo.txt", ios::out | ios::binary | ios::app);
            cout << "修改成功" << endl;
            file.write((char*)&stu, sizeof(Student));//把新的学生信息写入文件
            file.close();
            return;
        }
        default:printf("请在1-4之间选择\n");
        }
    }
}
void Teacher::studel() {
    vector<Student> va;
    Student stu;//将读出的学生信息存入该对象
    int flag;
    char str[20];
    cout << "请输入要删除的学生的学号" << endl;
    cin >> str;
    fstream file("stuinfo.txt", ios::binary | ios::in);//打开文件存取学生对象的文件
    while (!file.eof() && file.peek() != EOF)
    {
        file.read((char*)&stu, sizeof(Student));//读取文件
        if (strcmp(stu.num, str) == 0)//如果存在学生信息输出
        {
            flag = 1;
            continue;
        }
        va.push_back(stu);//将非删除的学生存入容器
    }
    fstream file1("stuinfo.txt", ios::out | ios::trunc);
    for (int i = 0; i < va.size(); i++)
    {
        file1.write((char*)&va[i], sizeof(Student));//将容器中的学生对象写入文件
    }
    cout << "删除成功" << endl;
    file.close();//关闭文件
    file1.close();
}
void Teacher::stuempty()

{

    fstream file("stuinfo.txt", ios::out);

}
void Teacher::stuseek() {
    char str[20];
    cout << "请输入要查询的学生的学号" << endl;
    cin >> str;
    fstream file("stuinfo.txt", ios::binary | ios::in);//打开文件
        while (!file.eof())
        {
            Student stu;
            file.read((char*)&stu, sizeof(Student));
            if (strcmp(stu.num, str) == 0) //判断从文件读出对象的学号信息是否和输入相等
            {
                cout << "学生学号        班级           学生姓名  性别" << endl;
                cout << stu.num << "\t" << stu.banji << "\t" << stu.name << "\t     " << stu.sex  << endl;
                break;
            }
            if (strcmp(stu.num, str) != 0) {
                cout << "该学号不存在" << endl;
            }
        }
        file.close();
    }
void Teacher::lesseek() {
        char str[20];
        cout << "请输入要查询的课程的课程号" << endl;
        cin >> str;
        fstream file("courseinfo.txt", ios::binary | ios::in);//打开文件
        while (!file.eof())
        {
            Student stu;
            file.read((char*)&stu, sizeof(Student));
            if (strcmp(stu.num, str) == 0) //判断从文件读出对象的学号信息是否和输入相等
            {
                cout << "课程号        学分           课程名称  学时" << endl;
                cout << les.num2 << "\t" << les.score << "\t" << les.name2 << "\t     " <<les.time << endl;
                break;
            }
            if (strcmp(les.num2, str) != 0) {
                cout << "该课程号不存在" << endl;
            }
        }
        file.close();
    }
void Teacher::lesdisplay() {
    int t = 0;
    fstream file("courseinfo.txt", ios::binary | ios::in);
    cout << "课程号        学分           课程名称      学时" << endl;
    while (!file.eof() && file.peek() != EOF)
    {
        Lesson les;
        file.read((char*)&les, sizeof(Lesson));//从文件读出所有学生信息
        cout << les.num2 << "\t" << les.score << "\t" << les.name2 << "\t     " << les.time << endl;
    };
    file.close();

}
void Teacher::lesmodify() {
    int    item;    //选择修改项,修改年龄
    float  score;
    vector<Lesson> va;
    Lesson les;
    int flag;
    char str[20];//暂时存修改内容6
    cout << "请输入要修改的学生的学号" << endl;
    cin >> str;
    fstream file("courseinfo.txt", ios::binary | ios::in);//打开文件存取学生对象的文件
    while (!file.eof() && file.peek() != EOF)
    {
        file.read((char*)&les, sizeof(Lesson));//读取文件
        if (strcmp(les.num2, str) == 0)//如果存在学生信息输出
        {
            flag = 1;
            continue;
        }
        else {
            flag = 0;
            cout << "该课程不存在" << endl;
            break;
        }
        va.push_back(les);//将非删除的学生存入容器
    }
    fstream file1("courseinfo.txt", ios::out | ios::trunc);
    for (int i = 0; i < va.size(); i++)
    {
        file1.write((char*)&va[i], sizeof(Student));//将容器中的学生对象写入文件
    }
    while (!file.eof())
    {
        file.read((char*)&les, sizeof(Student));//读取文件
        if (strcmp(les.num2, str) == 0)//如果存在学生信息输出
        {
            flag = 1;
            cout << "课程号        学分           课程名称  学时" << endl;
            cout << les.num2 << "\t" << les.score << "\t" << les.name2 << "\t     " << les.time << endl;
            break;
        }
        else {
            flag = 0;
        }
    }
    file.close();
    while (flag == 1)
    {
        printf("------------------\n");
        printf("1.修改姓名\n");
        printf("2.修改班级\n");
        printf("3.修改性别\n");
        printf("4.退出本菜单\n");
        printf("------------------\n");
        printf("请选择子菜单编号:");
        scanf_s("%d", &item);
        switch (item)
        {
        case 1:
            printf("请输入新的课程号:\n");
            cin >> str;
            strcpy_s(les.num2, str); break;//为学生姓名赋新值
        case 2:
            printf("请输入新的学分:\n");
            cin >> str;
            strcpy_s(les.score, str); break;//为学生班级赋新值
        case 3:
            printf("请输入新的课程名称:\n");
            cin >> str;
            strcpy_s(les.name2, str); break;//为学生性别赋新值
        case 4: {
            fstream file("courseinfo.txt", ios::out | ios::binary | ios::app);
            cout << "修改成功" << endl;
            file.write((char*)&les, sizeof(Lesson));//把新的学生信息写入文件
            file.close();
            return;
        }
        default:printf("请在1-4之间选择\n");
        }
    }
}
void Teacher::lesdel() {
    vector<Lesson> va;
    Lesson les;//将读出的学生信息存入该对象
    int flag;
    char str[20];
    cout << "请输入要删除的学生的学号" << endl;
    cin >> str;
    fstream file("courseinfo.txt", ios::binary | ios::in);//打开文件存取学生对象的文件
    while (!file.eof() && file.peek() != EOF)
    {
        file.read((char*)&les, sizeof(Lesson));//读取文件
        if (strcmp(les.num2, str) == 0)//如果存在学生信息输出
        {
            flag = 1;
            continue;
        }
        va.push_back(les);//将非删除的学生存入容器
    }
    fstream file1("courseinfo.txt", ios::out | ios::trunc);
    for (int i = 0; i < va.size(); i++)
    {
        file1.write((char*)&va[i], sizeof(Lesson));//将容器中的学生对象写入文件
    }
    cout << "删除成功" << endl;
    file.close();//关闭文件
    file1.close();
}
void Teacher::lesempty() {
    fstream file("courseinfo.txt", ios::out);
};
void Teacher::menu1() {
    Teacher people;
    int number1;
    do {
        printf("------------------\n");
        printf("-----<<学生信息管理>>-------\n");
        printf("1.增加学生信息\n");
        printf("2.查找学生信息\n");
        printf("3.学生信息汇总\n");
        printf("4.修改学生信息\n");
        printf("5.删除学生信息\n");
        printf("6.清空学生信息\n");
        printf("7.退出子程序\n");
        printf("------------------\n");
        cin >> number1;
        switch (number1) {
        case 1:
            people.student();
            break;
        case 2:
            people.stuseek();
            break;
        case 3:
            people.studisplay();
            break;
        case 4:
            people.stumodify();
            break;
        case 5:
            people.studel();
            break;
        case 6:
            people.stuempty();
            break;
        case 7:
            break;
        default:
            printf("请在1-7之间选择\n");
            break;
        }
    } while (number1!= 7);
    
}
void Teacher::menu2() {
    int number2;
    Teacher people;
    do {
        printf("------------------\n");
        printf("-----<<课程信息管理>>-------\n");
        printf("1.增加课程信息\n");
        printf("2.查找课程信息\n");
        printf("3.课程信息汇总\n");
        printf("4.修改课程信息\n");
        printf("5.删除课程信息\n");
        printf("6.清空课程信息\n");
        printf("7.退出子程序\n");
        printf("------------------\n");
        cin >> number2;
        switch (number2) {
        case 1:
            people.lesson();
            break;
        case 2:
            people.lesseek();
            break;
        case 3:
            people.lesdisplay();
            break;
        case 4:
            people.lesmodify();
            break;
        case 5:
            people.lesdel();
            break;
        case 6:
            people.lesempty();
            break;
        case 7:
            break;
        default:
            printf("请在1-7之间选择\n");
            break;
        }
    } while (number2 != 7);

}
void Teacher::menu3() {
    int number3;
    Teacher people;
    do {
        printf("------------------\n");
        printf("-----<<成绩信息管理>>-------\n");
        printf("1.增加成绩信息\n");
        printf("2.查找成绩信息\n");
        printf("3.课程成绩汇总\n");
        printf("4.修改成绩信息\n");
        printf("5.删除成绩信息\n");
        printf("6.清空成绩信息\n");
        printf("7.退出子程序\n");
        printf("------------------\n");
        cin >> number3;
        switch (number3) {
        case 1:
            people.score();
            break;
        case 2:
            people.Scseek();
            break;
        case 3:
            people.Scdisplay();
            break;
        case 4:
            people.Scmodify();
            break;
        case 5:
            people.Scdel();
            break;
        case 6:
            people.Scempty();
            break;
        case 7:
            break;
        default:
            printf("请在1-7之间选择\n");
            break;
        }
    } while (number3 != 7);
}
int main() {
    Teacher people;
    int number;
    do {
        cout << "学生信息管理系统" << endl;
        printf("------------------\n");
        printf("1.学生信息菜单\n");
        printf("2.课程信息菜单\n");
        printf("3.成绩信息菜单\n");
        printf("4.退出程序\n");
        printf("------------------\n");
        cin >> number;
        switch (number) {
        case 1:
            people.menu1();
            break;
        case 2:
            people.menu2();
            break;
        case 3:
            people.menu3();
            break;
        case 4:
            break;
        default:
            printf("请在1-4之间选择\n");
            break;
        }c++写入的txt文件乱码,怎么搞?
    } while (number != 4);
    return 0;
}