(十)Student
2023-03-27 本文已影响0人
GoodTekken
#include <iostream>
#include <string>
using namespace std;
const int N = 5; /*课程数*/
const int M = 2; /*竞赛项目数*/
class Student
{
protected:
int stuNo;
string name;
double GPA; /*综合成绩*/
int (*grades)[2]; /*各门课程成绩和学分*/
public:
Student(const int stuNo, const string &name, int grades[][2])
{
this -> stuNo = stuNo;
this -> name = name;
this -> grades = grades;
}
virtual ~Student()
{
}
int getStuNo()
{
return stuNo;
}
string getName()
{
return name;
}
virtual double getGPA() = 0; //(1)
double computeWg()
{
int totalGrades = 0, totalCredits = 0;
for(int i = 0; i < N ; i++)
{
totalGrades += grades[i][0] * grades[i][1];
totalCredits += grades[i][1];
}
return GPA = (double)totalGrades / totalCredits;
}
};
class ActStudent : public Student
{
int Apoints;
public:
ActStudent(const int stuNo, const string &name, int gs[][2], int Apoints) : Student(stuNo, name, gs) //(2)
{
this->Apoints = Apoints;
}
double getGPA()
{
return GPA = computeWg() + Apoints; //(3)
}
};
class CmpStudent : public Student
{
private:
int (*awards)[2];
public:
CmpStudent(const int stuNo, const string &name, int gs[][2], int awards[][2]):Student(stuNo,name,gs) //(4)
{
this -> awards = awards;
}
double getGPA()
{
int Awards = 0;
for(int i = 0; i < M ; i++)
{
// int a = awards[i][0];
// int b = awards[i][1];
Awards += awards[i][0]*awards[i][1];
}
return GPA = computeWg() + Awards; //(5)
}
};
void print_a(int a[][2], int n, int m)
{
int i, j;
for(i = 0; i < n; i++)
{
for(j = 0; j < m; j++)
printf("%d ", a[i][j]);
printf("\n");
}
}
int main() //以计算3个学生的综合成绩为例进行测试
{
int g1[][2] = {{80,3}, {90,2}, {95,3}, {85,4}, {86,3}},
g2[][2] = {{60,3}, {60,2}, {60,3}, {60,4}, {65,3}},
g3[][2] = {{80,3}, {90,2}, {70,3}, {65,4}, {75,3}}; //课程成绒
int c3[][2] = {{2,3}, {3,3}}; //竞赛成绩
Student* students[3] =
{
new ActStudent (101, "John", g1, 3), //3为活动分
new ActStudent (102,"Zhang", g2, 0),
new CmpStudent (103, "Li", g3, c3),
};
//输出每个学生的综合成绩
for(int i = 0; i < 3; i++)
{
cout << students[i]->getGPA() <<endl; //(6)
}
// print_a(c3,2,2);
delete *students;
return 0;
}
答案:
(1)virtual double getGPA() = 0;
(2)Student(stuNo, name, gs)
(3)computeWg() + Apoints
(4)Student(stuNo,name,gs)
(5)computeWg() + Awards
(6)students[i]->getGPA()