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;
}
A、在新生冰块上形成冰藻需要多年
B、北极冰中生长有冰藻并不是普遍现象
C、近年来人类踏上北极的次数逐年增加
D、北冰洋周围的陆地常有沙尘天气