C++学生信息管理系统,班级类,求平均年龄,排序功能 查询模块,原有按学号查询,添加按姓名查询 按照子菜单的方式拓展模块
时间: 2023-08-21 10:02:50 浏览: 81
好的,对于C++学生信息管理系统的班级类,可以按照如下的方式进行设计:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
class Student {
public:
Student(string id, string name, int age) : id_(id), name_(name), age_(age) {}
string id() const { return id_; }
string name() const { return name_; }
int age() const { return age_; }
private:
string id_;
string name_;
int age_;
};
class Class {
public:
void add(Student student) {
students_.push_back(student);
}
double average_age() const {
double total_age = 0.0;
for (auto& student : students_) {
total_age += student.age();
}
return total_age / students_.size();
}
void sort_by_id() {
sort(students_.begin(), students_.end(),
[](const Student& a, const Student& b) { return a.id() < b.id(); });
}
void sort_by_age() {
sort(students_.begin(), students_.end(),
[](const Student& a, const Student& b) { return a.age() < b.age(); });
}
Student* find_by_id(string id) {
for (auto& student : students_) {
if (student.id() == id) {
return &student;
}
}
return nullptr;
}
Student* find_by_name(string name) {
for (auto& student : students_) {
if (student.name() == name) {
return &student;
}
}
return nullptr;
}
private:
vector<Student> students_;
};
```
在班级类中,我们使用了`Student`类来表示一个学生的信息,包括学号、姓名和年龄。班级类中包含了一个`vector`类型的成员变量`students_`,用于存储班级中的所有学生信息。
对于班级类中的成员函数,我们实现了以下功能:
1. `add`:添加一个学生到班级中;
2. `average_age`:计算班级中所有学生的平均年龄;
3. `sort_by_id`:按照学号从小到大对学生进行排序;
4. `sort_by_age`:按照年龄从小到大对学生进行排序;
5. `find_by_id`:按照学号查询学生信息;
6. `find_by_name`:按照姓名查询学生信息。
接下来,为了实现模块的拓展,我们可以添加一个菜单系统,用于展示各种功能的选项,例如:
```
1. 添加学生
2. 计算平均年龄
3. 按学号排序
4. 按年龄排序
5. 按学号查询
6. 按姓名查询
7. 退出
```
然后,可以在主函数中循环展示菜单选项,根据用户输入的选项来调用相应的班级类成员函数实现功能。例如:
```c++
int main() {
Class cls;
while (true) {
cout << "1. 添加学生" << endl;
cout << "2. 计算平均年龄" << endl;
cout << "3. 按学号排序" << endl;
cout << "4. 按年龄排序" << endl;
cout << "5. 按学号查询" << endl;
cout << "6. 按姓名查询" << endl;
cout << "7. 退出" << endl;
int choice;
cout << "请输入要执行的操作:";
cin >> choice;
switch (choice) {
case 1: {
string id, name;
int age;
cout << "请输入学号:";
cin >> id;
cout << "请输入姓名:";
cin >> name;
cout << "请输入年龄:";
cin >> age;
Student student(id, name, age);
cls.add(student);
break;
}
case 2: {
double avg_age = cls.average_age();
cout << "班级平均年龄为:" << avg_age << endl;
break;
}
case 3: {
cls.sort_by_id();
cout << "按学号排序完成" << endl;
break;
}
case 4: {
cls.sort_by_age();
cout << "按年龄排序完成" << endl;
break;
}
case 5: {
string id;
cout << "请输入要查询的学号:";
cin >> id;
Student* student = cls.find_by_id(id);
if (student) {
cout << "学号:" << student->id()
<< " 姓名:" << student->name()
<< " 年龄:" << student->age() << endl;
} else {
cout << "未找到该学生信息" << endl;
}
break;
}
case 6: {
string name;
cout << "请输入要查询的姓名:";
cin >> name;
Student* student = cls.find_by_name(name);
if (student) {
cout << "学号:" << student->id()
<< " 姓名:" << student->name()
<< " 年龄:" << student->age() << endl;
} else {
cout << "未找到该学生信息" << endl;
}
break;
}
case 7: {
return 0;
}
default: {
cout << "无效的选项,请重新输入" << endl;
break;
}
}
}
return 0;
}
```
通过以上方式,我们实现了按照子菜单的方式拓展模块,并且保证了程序的可扩展性和易用性。
阅读全文