定义一个学生类CStudent实现简单的学籍管理功能,要求该类至少实现以下功能: (1) 录入学生的基本信息(包括姓名,学号,性别,年龄,专业,入学时间,各门功课成绩) (2) 输出学生的基本信息 (3) 选课(输入时间和所选的课程) (4) 统计每门课的学分绩点 (5) 统计每学期的平均学分绩点 (6) 统计重考科目 (7) 统计重修科目
时间: 2023-07-15 21:10:19 浏览: 51
CSDN开发的ChitGPT:好的,您提到的这个问题,我已经记录下来了。现在,我将为您,定义一个学生类CStudent,实现简单的学籍管理功能,满足您的要求。
以下是CStudent类的实现:
```cpp
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
//学生类
class CStudent
{
private:
//成员变量
string name; //姓名
string id; //学号
string gender; //性别
int age; //年龄
string major; //专业
string admissionTime; //入学时间
//课程信息
vector<pair<string, int>> courseInfo; //存储课程信息,包括:“课程名称”,“学分”
//学生的课程信息
vector<pair<string, int>> courseScore; //存储学生的课程信息,包括:“课程名称”,“成绩”
public:
//构造函数
CStudent() {}
//析构函数
~CStudent() {}
//成员函数
//录入学生基本信息
void inputBasicInfo()
{
cout << "请输入姓名:";
cin >> name;
cout << "请输入学号:";
cin >> id;
cout << "请输入性别:";
cin >> gender;
cout << "请输入年龄:";
cin >> age;
cout << "请输入专业:";
cin >> major;
cout << "请输入入学时间:";
cin >> admissionTime;
}
//输出学生基本信息
void outputBasicInfo()
{
cout << "学生基本信息:" << endl;
cout << "姓名:" << name << endl;
cout << "学号:" << id << endl;
cout << "性别:" << gender << endl;
cout << "年龄:" << age << endl;
cout << "专业:" << major << endl;
cout << "入学时间:" << admissionTime << endl;
}
//选课
void selectCourse()
{
string courseName;
int credits;
cout << "请输入选课信息:" << endl;
cout << "课程名称:";
cin >> courseName;
cout << "学分:";
cin >> credits;
courseInfo.push_back(make_pair(courseName, credits)); //记录选课信息
}
//输入学生成绩
void inputScore()
{
string courseName;
int score;
cout << "请输入学生成绩:" << endl;
for (int i = 0; i < courseInfo.size(); ++i)
{
cout << "请输入课程 " << i + 1 << " 的成绩:";
cin >> score;
courseScore.push_back(make_pair(courseInfo[i].first, score));
}
}
//统计每门课的学分绩点
void calculateGPA()
{
vector<pair<string, int>> gpa; //存储每门课的学分绩点
for (int i = 0; i < courseScore.size(); ++i)
{
pair<string, int> p;
string courseName = courseScore[i].first;
int grade = courseScore[i].second;
//计算绩点
int point;
if (grade >= 90 && grade <= 100) point = 4;
else if (grade >= 80 && grade <= 89) point = 3;
else if (grade >= 70 && grade <= 79) point = 2;
else if (grade >= 60 && grade <= 69) point = 1;
else point = 0;
//存储学分绩点信息
for (int j = 0; j < courseInfo.size(); ++j)
{
if (courseName == courseInfo[j].first)
{
p.first = courseName;
p.second = point * courseInfo[j].second;
gpa.push_back(p);
}
}
}
//输出每门课的学分绩点
cout << "每门课的学分绩点:" << endl;
for (int i = 0; i < gpa.size(); ++i)
{
cout << gpa[i].first << ":" << gpa[i].second << endl;
}
}
//统计每学期的平均学分绩点
void calculateAvgGPA()
{
int totalCredits = 0; //总学分
int totalGPA = 0; //总学分绩点
for (int i = 0; i < courseInfo.size(); ++i)
{
totalCredits += courseInfo[i].second; //累加总学分
//计算每门课的学分绩点
for (int j = 0; j < courseScore.size(); ++j)
{
if (courseInfo[i].first == courseScore[j].first)
{
int point;
int grade = courseScore[j].second;
if (grade >= 90 && grade <= 100) point = 4;
else if (grade >= 80 && grade <= 89) point = 3;
else if (grade >= 70 && grade <= 79) point = 2;
else if (grade >= 60 && grade <= 69) point = 1;
else point = 0;
totalGPA += point * courseInfo[i].second;
}
}
}
double avgGPA = (double)totalGPA / totalCredits; //计算平均学分绩点
cout << "每学期的平均学分绩点:" << avgGPA << endl;
}
//统计重考科目
void findRetakeCourse()
{
vector<string> retake; //存储重考科目
for (int i = 0; i < courseScore.size(); ++i)
{
if (courseScore[i].second < 60)
{
retake.push_back(courseScore[i].first);
}
}
//去重
sort(retake.begin(), retake.end());
retake.erase(unique(retake.begin(), retake.end()), retake.end());
//输出重考科目
cout << "重考科目有:" << endl;
for (int i = 0; i < retake.size(); ++i)
{
cout << retake[i] << endl;
}
}
//统计重修科目
void findRetakeAgainCourse()
{
vector<string> retakeAgain; //存储重修科目
for (int i = 0; i < courseScore.size(); ++i)
{
if (courseScore[i].second < 60)
{
//检查是否已经重修过
bool flag = false;
for (int j = 0; j < i; ++j)
{
if (courseScore[i].first == courseScore[j].first && courseScore[j].second >= 60)
{
flag = true;
break;
}
}
if (!flag)
{
retakeAgain.push_back(courseScore[i].first);
}
}
}
//去重
sort(retakeAgain.begin(), retakeAgain.end());
retakeAgain.erase(unique(retakeAgain.begin(), retakeAgain.end()), retakeAgain.end());
//输出重修科目
cout << "重修科目有:" << endl;
for (int i = 0; i < retakeAgain.size(); ++i)
{
cout << retakeAgain[i] << endl;
}
}
};
int main()
{
CStudent student;
student.inputBasicInfo();
student.outputBasicInfo();
student.selectCourse();
student.inputScore();
student.calculateGPA();
student.calculateAvgGPA();
student.findRetakeCourse();
student.findRetakeAgainCourse();
return 0;
}
```
以上是我的实现,请问您还有什么问题吗?