用一个链式存储结构实现对一个班级学生信息管理。设计程序求出每个人的平均成绩,并按成绩由高到低排序后输出学生记录。
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
struct Student {
long int number;
string name;
double grade[3];
double avergrade;
Student* next;
};
class System {
public:
System(int n);
void Sort();
void Print();
private:
int num;
Student* first;
};
int main() {
int n;
cin >> n;
System Ban(n);
Ban.Sort();
Ban.Print();
}
System::System(int n)
{
Student* p = new Student;
num = n;
first = p;
for (int i = 1; i <= n; i++) {
p->next = new Student;
p = p->next;
cin >> p->number >> p->name;
cin >> p->grade[0] >> p->grade[1] >>p-> grade[2];
p->avergrade = (p->grade[0] + p->grade[1] + p->grade[2]) / 3;
}
}
void System::Sort()
{
Student* p = first;
Student* front;
Student* q = p->next;
for (int i = 1; i <=num; i++) {
front = first;
p = first->next;
q = p->next;
for (int j = 1; j < num; j++) {
if (q->avergrade > p->avergrade) {
p->next = q->next;
q->next = p;
front->next = q;
}
front = front->next;
p = front->next;
q = p->next;
}
}
}
void System::Print()
{
Student* p = first;
for (int i = 1; i <= num; i++) {
p = p->next;
cout << p->number << " " << p->name << " ";
printf("%.2f ", p->grade[0]);
printf("%.2f ", p->grade[1]);
printf("%.2f ", p->grade[2]);
printf("%.2f ", p->avergrade);
cout <<i<< endl;
}
}