6.定义学生类Student,包含成员:学号(num):整型,姓名(name):char [15], 四门课成绩(sc):一维整型数组,然后定义相关函数分别完成以下功能: 1)输入学生信息; 2)显示学生信息; 3)保存学生信息; 4)从文件读取学生信息; 定义学生数组类StudentArray,包含Student * ps; 和int n两个成员,定义成员函数完成: 1)n个学生信息的录入(调用上面类Student的相关函数完成,函数名相同,下面方法相同); 2)n个学生信息的输出(调用上面类Student的相关函数完成,函数名相同,下面方法相同);;对学生信息按平均成绩排序后输出 3)计算并输出各门课程的平均成绩; 4)n个学生信息的保存(调用上面类Student的相关函数完成,函数名相同,下面方法相同); 5)从文件读取n个学生信息(调用上面类Student的相关函数完成,函数名相同,下面方法相同);
时间: 2024-02-27 21:52:19 浏览: 148
下面是一个可能的实现:
```C++
#include <iostream>
#include <fstream>
#include <cstring>
#include <algorithm>
using namespace std;
// 学生类
class Student {
public:
int num;
char name[15];
int sc[4];
// 输入学生信息
void input() {
cout << "请输入学号:" << endl;
cin >> num;
cout << "请输入姓名:" << endl;
cin >> name;
cout << "请输入四门课成绩:" << endl;
for (int i = 0; i < 4; i++) {
cin >> sc[i];
}
}
// 显示学生信息
void display() {
cout << "学号:" << num << endl;
cout << "姓名:" << name << endl;
cout << "四门课成绩:";
for (int i = 0; i < 4; i++) {
cout << sc[i] << " ";
}
cout << endl;
}
// 保存学生信息到文件
void save(ofstream &ofs) {
ofs.write((char*)this, sizeof(Student));
}
// 从文件读取学生信息
void load(ifstream &ifs) {
ifs.read((char*)this, sizeof(Student));
}
// 计算平均成绩
float average() {
float sum = 0;
for (int i = 0; i < 4; i++) {
sum += sc[i];
}
return sum / 4;
}
};
// 学生数组类
class StudentArray {
public:
Student *ps;
int n;
// 构造函数
StudentArray(int n) {
ps = new Student[n];
this->n = n;
}
// 析构函数
~StudentArray() {
delete[] ps;
}
// 录入n个学生信息
void input() {
for (int i = 0; i < n; i++) {
cout << "请输入第" << i + 1 << "个学生的信息:" << endl;
ps[i].input();
}
}
// 显示n个学生信息
void display() {
for (int i = 0; i < n; i++) {
cout << "第" << i + 1 << "个学生的信息:" << endl;
ps[i].display();
}
}
// 按平均成绩排序并输出
void sort_by_average() {
sort(ps, ps + n, [](const Student &a, const Student &b) {
return a.average() > b.average();
});
cout << "按平均成绩排序后的学生信息:" << endl;
display();
}
// 计算并输出各门课程的平均成绩
void average_by_course() {
int sum[4] = {0};
for (int i = 0; i < n; i++) {
for (int j = 0; j < 4; j++) {
sum[j] += ps[i].sc[j];
}
}
cout << "各门课程的平均成绩:";
for (int i = 0; i < 4; i++) {
cout << sum[i] / n << " ";
}
cout << endl;
}
// 保存n个学生信息到文件
void save(const char *filename) {
ofstream ofs(filename, ios::binary);
for (int i = 0; i < n; i++) {
ps[i].save(ofs);
}
ofs.close();
}
// 从文件读取n个学生信息
void load(const char *filename) {
ifstream ifs(filename, ios::binary);
for (int i = 0; i < n; i++) {
ps[i].load(ifs);
}
ifs.close();
}
};
int main() {
int n;
cout << "请输入学生数量:" << endl;
cin >> n;
StudentArray sa(n);
sa.input();
sa.display();
sa.sort_by_average();
sa.average_by_course();
const char *filename = "students.dat";
sa.save(filename);
StudentArray sa2(n);
sa2.load(filename);
sa2.display();
return 0;
}
```
这个实现中,`Student` 类中包含了输入、显示、保存、读取学生信息以及计算平均成绩的函数;`StudentArray` 类中包含了数组指针和学生数量两个成员,以及录入、显示、排序、计算各门课程平均成绩、保存和读取学生信息的函数。在 `main` 函数中,我们首先输入学生数量,然后创建一个 `StudentArray` 对象,调用其相关函数完成各项任务,并将结果保存到文件。最后,我们再创建一个 `StudentArray` 对象,从文件中读取之前保存的学生信息,并显示出来。
阅读全文