1.利用结构体去构建学生信息,学生结构体中要求有学生的学号、姓名、本学年的课程名称、对应的成绩信息。
2.新建一个文件文档,现在学生信息 20 人 (已包含前面学生结构体中的信息)要求利用文件指针去实现从键盘输入学生信息,在原有文件后加入 10 个学生信息。
3.统计每一个学生结构体中学生存在不及格科目、课程名称等信息。
要求: 考虑信息输入过程中是否合法,文件指针是否能够打开等异常现象,并考虑采用一定的控制方式来保证程序的鲁棒性
(编译器为VS2022)
1.利用结构体去构建学生信息,学生结构体中要求有学生的学号、姓名、本学年的课程名称、对应的成绩信息。
2.新建一个文件文档,现在学生信息 20 人 (已包含前面学生结构体中的信息)要求利用文件指针去实现从键盘输入学生信息,在原有文件后加入 10 个学生信息。
3.统计每一个学生结构体中学生存在不及格科目、课程名称等信息。
要求: 考虑信息输入过程中是否合法,文件指针是否能够打开等异常现象,并考虑采用一定的控制方式来保证程序的鲁棒性
(编译器为VS2022)
这里我以输入一个同学给你演示的
【运行截图】


【代码】
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
#define num 1 //新加的人数
// 定义学生结构体
struct Student {
int id;
string name;
string courses[2]; //两门课程
float scores[2]; //两门课程对应的成绩
};
// 写入学生信息到文件中
void write_student_info(ofstream& ofs) {
int i, j;
int id;
string name;
string courses[2];
float scores[2];
for (i = 0; i < num; i++) {
cout << "请输入第" << i + 1 << "个学生的信息:" << endl;
cout << "学号:";
cin >> id;
cout << "姓名:";
cin >> name;
for (j = 0; j < 2; j++) {
cout << "第" << j + 1 << "门课程名称:";
cin >> courses[j];
cout << "第" << j + 1 << "门课程分数:";
cin >> scores[j];
if (scores[j] < 0 || scores[j] > 100) {
cout << "输入成绩不合法!请重新输入!" << endl;
j--;
}
}
ofs << id << " " << name << " " << courses[0] << " " << scores[0] << " " << courses[1] << " " << scores[1] << endl;
}
}
// 从文件中读取学生信息并统计不及格科目数
void read_student_info(ifstream& ifs) {
Student s;
int i, cnt;
while (ifs >> s.id >> s.name >> s.courses[0] >> s.scores[0] >> s.courses[1] >> s.scores[1]) {
cnt = 0; // 记录不及格科目数
cout << "学号:" << s.id << "\t姓名:" << s.name << endl;
for (i = 0; i < 2; i++) {
if (s.scores[i] < 60) {
cout << "第" << i + 1 << "门课程" << s.courses[i] << " 不及格" << endl;
cnt++;
}
}
if (cnt == 0) {
cout << "没有不及格的课程!" << endl;
}
}
}
int main() {
// 新建一个文件文档
ofstream ofs("students.txt", ios::app);
if (!ofs.is_open()) {
cout << "文件打开失败!" << endl;
return -1;
}
// 写入学生信息到文件中
write_student_info(ofs);
// 关闭文件
ofs.close();
// 重新打开文件以读取学生信息
ifstream ifs("students.txt");
if (!ifs.is_open()) {
cout << "文件打开失败!" << endl;
return -1;
}
// 统计每一个学生结构体中,学生存在不及格科目的课程名称
read_student_info(ifs);
// 关闭文件
ifs.close();
return 0;
}