编程题目 某校每位学生都要学习英语、语文、数学三门公共课程以及不同的专业课程。会计学专业要学习会计学和经济学两门课程,化学专业要学习有机化学和化学分析两门课程。编程序管理学生成绩,计算公共课的总分和平均分,以及所有课程的总成绩。 将每个类的声明与实现分别独立保存在与类同名的.h头文件和.cpp文件中。 comFinal类 Account类
时间: 2024-02-18 13:03:04 浏览: 23
好的,这是一个面向对象编程的问题,需要定义两个类:comFinal和Account。这里是comFinal的头文件和实现文件:
comFinal.h
```cpp
#ifndef COMFINAL_H
#define COMFINAL_H
#include <string>
#include <vector>
#include "Account.h"
class comFinal {
public:
comFinal(std::string name, std::string major); // 构造函数
~comFinal(); // 析构函数
void addCourse(std::string courseName); // 添加一门课程
void addScore(std::string courseName, double score); // 添加一门课程的成绩
double getPublicTotalScore() const; // 获取公共课总分
double getPublicAverageScore() const; // 获取公共课平均分
double getTotalScore() const; // 获取总成绩
private:
std::string name; // 学生姓名
std::string major; // 学生专业
std::vector<std::string> courses; // 所有课程名称
std::vector<double> scores; // 所有课程成绩
Account* account; // 学生账户
};
#endif
```
comFinal.cpp
```cpp
#include "comFinal.h"
comFinal::comFinal(std::string name, std::string major) {
this->name = name;
this->major = major;
this->account = new Account(); // 初始化学生账户
}
comFinal::~comFinal() {
delete account; // 释放学生账户内存
}
void comFinal::addCourse(std::string courseName) {
courses.push_back(courseName);
}
void comFinal::addScore(std::string courseName, double score) {
scores.push_back(score);
if (major == "会计学" && (courseName == "会计学" || courseName == "经济学")) {
account->addScore(score * 2); // 会计学专业的课程成绩要乘以2
} else if (major == "化学" && (courseName == "有机化学" || courseName == "化学分析")) {
account->addScore(score * 2); // 化学专业的课程成绩要乘以2
} else {
account->addScore(score);
}
}
double comFinal::getPublicTotalScore() const {
double totalScore = 0;
int count = 0;
for (int i = 0; i < courses.size(); ++i) {
if (courses[i] == "英语" || courses[i] == "语文" || courses[i] == "数学") {
totalScore += scores[i];
count++;
}
}
return totalScore;
}
double comFinal::getPublicAverageScore() const {
double totalScore = getPublicTotalScore();
int count = 0;
for (int i = 0; i < courses.size(); ++i) {
if (courses[i] == "英语" || courses[i] == "语文" || courses[i] == "数学") {
count++;
}
}
return totalScore / count;
}
double comFinal::getTotalScore() const {
return account->getTotalScore();
}
```
接下来是Account类的头文件和实现文件:
Account.h
```cpp
#ifndef ACCOUNT_H
#define ACCOUNT_H
class Account {
public:
Account(); // 构造函数
~Account(); // 析构函数
void addScore(double score); // 添加一门课程的成绩
double getTotalScore() const; // 获取总成绩
private:
double totalScore; // 总成绩
};
#endif
```
Account.cpp
```cpp
#include "Account.h"
Account::Account() {
totalScore = 0;
}
Account::~Account() {
}
void Account::addScore(double score) {
totalScore += score;
}
double Account::getTotalScore() const {
return totalScore;
}
```
这两个类的实现中,comFinal类负责管理每个学生的成绩和账户,Account类负责计算每个学生的总成绩。在comFinal类的addScore方法中,根据不同的专业和课程,将成绩放入对应的账户中。最终,通过调用comFinal类的getPublicTotalScore、getPublicAverageScore和getTotalScore方法,就可以计算出公共课的总分和平均分,以及所有课程的总成绩。