结构体、指针、文件文档构建的使用

1.利用结构体去构建学生信息,学生结构体中要求有学生的学号、姓名、本学年的课程名称、对应的成绩信息。
2.新建一个文件文档,现在学生信息 20 人 (已包含前面学生结构体中的信息)要求利用文件指针去实现从键盘输入学生信息,在原有文件后加入 10 个学生信息。
3.统计每一个学生结构体中学生存在不及格科目、课程名称等信息。

要求: 考虑信息输入过程中是否合法,文件指针是否能够打开等异常现象,并考虑采用一定的控制方式来保证程序的鲁棒性

可参考
https://blog.csdn.net/weixin_44369212/article/details/89058548

根据你所提的需求,分析如下:
我们首先定义一个学生信息的结构体,包括学号、姓名、课程名称和对应的成绩信息。然后,通过从键盘输入学生信息的方式,创建了20个学生对象,并将它们写入到文件中。在读取学生信息时,采用异常处理的方式,当文件无法打开或者读取失败时,程序会输出错误信息,并直接退出。最后,统计每个学生不及格的科目和课程名称,并输出到控制台。
=============================如有帮助,希望给个采纳!!!!!!============================
示例代码如下:


#include <iostream>
#include <fstream>
#include <string>
#include <vector>

using namespace std;

// 学生信息结构体
struct Student {
    string id; // 学号
    string name; // 姓名
    vector<string> courses; // 课程名称
    vector<int> scores; // 成绩
};

// 从键盘输入学生信息
void inputStudent(Student& s) {
    cout << "请输入学号: ";
    cin >> s.id;
    cout << "请输入姓名: ";
    cin >> s.name;
    int n;
    cout << "请输入课程数量: ";
    cin >> n;
    for (int i = 0; i < n; i++) {
        string course;
        int score;
        cout << "请输入第" << i + 1 << "门课程名称: ";
        cin >> course;
        cout << "请输入对应的成绩: ";
        cin >> score;
        s.courses.push_back(course);
        s.scores.push_back(score);
    }
}

// 将学生信息写入文件
void writeStudentToFile(const string& filename, const Student& s) {
    ofstream fout(filename, ios::app);
    if (!fout.is_open()) {
        cerr << "文件打开失败!" << endl;
        return;
    }
    fout << s.id << " " << s.name << " ";
    for (int i = 0; i < s.courses.size(); i++) {
        fout << s.courses[i] << " " << s.scores[i] << " ";
    }
    fout << endl;
}

// 从文件中读取学生信息
void readStudentFromFile(const string& filename, vector<Student>& students) {
    ifstream fin(filename);
    if (!fin.is_open()) {
        cerr << "文件打开失败!" << endl;
        return;
    }
    while (!fin.eof()) {
        Student s;
        fin >> s.id >> s.name;
        while (!fin.eof()) {
            string course;
            int score;
            fin >> course >> score;
            if (course.empty() || score == 0) break;
            s.courses.push_back(course);
            s.scores.push_back(score);
        }
        if (s.id.empty() || s.name.empty() || s.courses.empty() || s.scores.empty()) break;
        students.push_back(s);
    }
}

// 统计学生不及格科目和课程名称
void countFailingCourses(const vector<Student>& students) {
    for (int i = 0; i < students.size(); i++) {
        bool hasFailingCourse = false;
        cout << "学生" << students[i].name << "(" << students[i].id << ")不及格的科目有:";
        for (int j = 0; j < students[i].courses.size(); j++) {
            if (students[i].scores[j] < 60) {
                hasFailingCourse = true;
                cout << students[i].courses[j] << " ";
            }
        }
        if (!hasFailingCourse) {
            cout << "无";
        }
        cout << endl;
    }
}

int main() {
    // 从键盘输入学生信息
    vector<Student> students;
    for (int i = 0; i < 20; i++) {
        Student s;
        inputStudent(s);
        students.push_back(s);
    }

    // 将学生信息写入文件
    const string filename = "students.txt";
    for (int i = 0; i < students.size(); i++) {
        writeStudentToFile(filename, students[i]);
    }

    // 从文件中读取学生信息
    vector<Student> studentsFromFile;
    readStudentFromFile(filename, studentsFromFile);

    // 统计学生不及格科目和课程名称
    countFailingCourses(studentsFromFile);

    return 0;
}
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7444078
  • 除此之外, 这篇博客: Web前置课作业中的 3.提起极地冰,很多人眼前总是浮现出一幅洁白无瑕、晶莹剔透的景观。然而,在北纬71度、西经168度附近的北冰洋海域,“雪龙”号首次驶入一片“脏”冰区,只见一块块淡蓝色的浮冰中间夹杂了许多脏兮兮的黄色冰块,这种黄色冰块,既出现在当年的新生冰块上,也出现在多年冰块上。对于“人类造成的污染已经殃及极地浮冰”的说法,有专家解释说这只是生活在极地冰中的一种特有生物——黄褐色的冰藻。如果以下各项为真,能够反驳专家上述观点的是: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •  A、在新生冰块上形成冰藻需要多年
     B、北极冰中生长有冰藻并不是普遍现象
     C、近年来人类踏上北极的次数逐年增加
     D、北冰洋周围的陆地常有沙尘天气