要求程序在一个源程序文件采用10个函数实现以下几个功能: (1)输出功能:输出该班所有学生的信息;(2)计算班级里每名同学的平均成绩(平均成绩保留小数点两位有效数字)并存储到计算机,最终输出该班级所有学生的信息(包括学号、姓名、班级,专业,性别、年龄、6门课程的成绩、平均成绩);(3)查询功能:根据学生的姓名或者学号查询该生的信息并输出该学生的所有信息;(4)成绩不及格学生信息输出:找出平均成绩在60分以下的学生,并输出他们的全部信息;(5)计算每一门课程的平均分数,并输出课程名称及平均分数;(6)找出有2门以上课程不及格的学生,并输出他们的全部信息(学号、姓名、班
时间: 2024-03-05 22:48:33 浏览: 69
号、专业、性别、年龄、6门课程的成绩、平均成绩)。
以下是一个可能的实现:
```c++
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <vector>
using namespace std;
// 学生信息的结构体
struct Student {
string id;
string name;
string major;
string gender;
int age;
vector<int> scores;
double average;
};
// 读取学生信息文件
void readStudentInfo(vector<Student>& students, const string& filename) {
ifstream fin(filename);
if (!fin) {
cerr << "Error opening file: " << filename << endl;
exit(1);
}
string line;
while (getline(fin, line)) {
Student s;
stringstream ss(line);
ss >> s.id >> s.name >> s.major >> s.gender >> s.age;
for (int i = 0; i < 6; i++) {
int score;
ss >> score;
s.scores.push_back(score);
}
students.push_back(s);
}
fin.close();
}
// 输出所有学生信息
void printAllStudents(const vector<Student>& students) {
cout << left << setw(10) << "ID"
<< left << setw(10) << "Name"
<< left << setw(10) << "Major"
<< left << setw(8) << "Gender"
<< left << setw(5) << "Age";
for (int i = 1; i <= 6; i++) {
cout << left << setw(8) << "Score" << i;
}
cout << left << setw(10) << "Average" << endl;
for (const auto& s : students) {
cout << left << setw(10) << s.id
<< left << setw(10) << s.name
<< left << setw(10) << s.major
<< left << setw(8) << s.gender
<< left << setw(5) << s.age;
for (const auto& score : s.scores) {
cout << left << setw(8) << score;
}
cout << left << setw(10) << fixed << setprecision(2) << s.average << endl;
}
}
// 计算每个学生的平均成绩
void calculateAverages(vector<Student>& students) {
for (auto& s : students) {
double sum = 0;
for (const auto& score : s.scores) {
sum += score;
}
s.average = sum / 6;
}
}
// 输出所有学生信息,包括平均成绩
void printAllStudentsWithAverage(const vector<Student>& students) {
cout << left << setw(10) << "ID"
<< left << setw(10) << "Name"
<< left << setw(10) << "Major"
<< left << setw(8) << "Gender"
<< left << setw(5) << "Age";
for (int i = 1; i <= 6; i++) {
cout << left << setw(8) << "Score" << i;
}
cout << left << setw(10) << "Average" << endl;
for (const auto& s : students) {
cout << left << setw(10) << s.id
<< left << setw(10) << s.name
<< left << setw(10) << s.major
<< left << setw(8) << s.gender
<< left << setw(5) << s.age;
for (const auto& score : s.scores) {
cout << left << setw(8) << score;
}
cout << left << setw(10) << fixed << setprecision(2) << s.average << endl;
}
ofstream fout("class_average.txt");
if (!fout) {
cerr << "Error opening file: class_average.txt" << endl;
exit(1);
}
for (const auto& s : students) {
fout << s.id << " " << s.name << " " << s.major << " " << s.gender << " " << s.age << " ";
for (const auto& score : s.scores) {
fout << score << " ";
}
fout << fixed << setprecision(2) << s.average << endl;
}
fout.close();
}
// 根据学生姓名或学号查找学生,并输出学生信息
void findStudent(const vector<Student>& students, const string& keyword) {
for (const auto& s : students) {
if (s.id == keyword || s.name == keyword) {
cout << left << setw(10) << "ID"
<< left << setw(10) << "Name"
<< left << setw(10) << "Major"
<< left << setw(8) << "Gender"
<< left << setw(5) << "Age";
for (int i = 1; i <= 6; i++) {
cout << left << setw(8) << "Score" << i;
}
cout << left << setw(10) << "Average" << endl;
cout << left << setw(10) << s.id
<< left << setw(10) << s.name
<< left << setw(10) << s.major
<< left << setw(8) << s.gender
<< left << setw(5) << s.age;
for (const auto& score : s.scores) {
cout << left << setw(8) << score;
}
cout << left << setw(10) << fixed << setprecision(2) << s.average << endl;
return;
}
}
cout << "Student not found." << endl;
}
// 输出平均成绩不及格的学生信息
void printFailedStudents(const vector<Student>& students) {
cout << left << setw(10) << "ID"
<< left << setw(10) << "Name"
<< left << setw(10) << "Major"
<< left << setw(8) << "Gender"
<< left << setw(5) << "Age";
for (int i = 1; i <= 6; i++) {
cout << left << setw(8) << "Score" << i;
}
cout << left << setw(10) << "Average" << endl;
for (const auto& s : students) {
if (s.average < 60) {
cout << left << setw(10) << s.id
<< left << setw(10) << s.name
<< left << setw(10) << s.major
<< left << setw(8) << s.gender
<< left << setw(5) << s.age;
for (const auto& score : s.scores) {
cout << left << setw(8) << score;
}
cout << left << setw(10) << fixed << setprecision(2) << s.average << endl;
}
}
}
// 计算每个课程的平均分数,并输出课程名称及平均分数
void calculateCourseAverages(const vector<Student>& students) {
vector<double> courseSums(6, 0);
vector<int> courseCounts(6, 0);
for (const auto& s : students) {
for (int i = 0; i < 6; i++) {
courseSums[i] += s.scores[i];
if (s.scores[i] >= 60) {
courseCounts[i]++;
}
}
}
cout << left << setw(15) << "Course"
<< left << setw(10) << "Average" << endl;
for (int i = 0; i < 6; i++) {
double courseAverage = courseSums[i] / students.size();
cout << left << setw(15) << ("Course " + to_string(i + 1))
<< left << setw(10) << fixed << setprecision(2) << courseAverage << endl;
}
}
// 输出有2门以上课程不及格的学生信息
void printFailedTwiceStudents(const vector<Student>& students) {
cout << left << setw(10) << "ID"
<< left << setw(10) << "Name"
<< left << setw(10) << "Major"
<< left << setw(8) << "Gender"
<< left << setw(5) << "Age";
for (int i = 1; i <= 6; i++) {
cout << left << setw(8) << "Score" << i;
}
cout << left << setw(10) << "Average" << endl;
for (const auto& s : students) {
int failedCount = 0;
for (const auto& score : s.scores) {
if (score < 60) {
failedCount++;
}
}
if (failedCount >= 2) {
cout << left << setw(10) << s.id
<< left << setw(10) << s.name
<< left << setw(10) << s.major
<< left << setw(8) << s.gender
<< left << setw(5) << s.age;
for (const auto& score : s.scores) {
cout << left << setw(8) << score;
}
cout << left << setw(10) << fixed << setprecision(2) << s.average << endl;
}
}
}
int main() {
vector<Student> students;
readStudentInfo(students, "students.txt");
calculateAverages(students);
printAllStudents(students);
printAllStudentsWithAverage(students);
findStudent(students, "Tom");
findStudent(students, "1002");
printFailedStudents(students);
calculateCourseAverages(students);
printFailedTwiceStudents(students);
return 0;
}
```
注意,上述实现中的 `students.txt` 文件应该按照以下格式保存:
```
1001 Tom ComputerScience Male 20 80 85 90 88 92 95
1002 John English Female 19 70 75 68 72 65 62
1003 Mary Psychology Female 21 75 80 78 82 85 88
...
```
阅读全文
相关推荐


















