C++ 学生管理系统的详细实现与解析
创建一个C++学生管理系统可以帮助我们理解面向对象编程(OOP)的基本概念,如类、对象、继承和文件操作。下面是一个简单的学生管理系统的实现,并附带详细解析。
系统功能
- 添加学生信息
- 查看所有学生信息
- 修改学生信息
- 删除学生信息
- 保存到文件
- 从文件读取
实现步骤
1. 定义学生类
首先,定义一个Student
类,用于封装学生信息。
#include <iostream>
#include <vector>
#include <fstream>
#include <string>
class Student {
public:
int id;
std::string name;
int age;
std::string major;
Student(int i, std::string n, int a, std::string m)
: id(i), name(n), age(a), major(m) {}
void display() const {
std::cout << "ID: " << id << ", Name: " << name
<< ", Age: " << age << ", Major: " << major << std::endl;
}
};
2. 创建菜单函数
编写一个函数用于显示菜单并处理用户输入。
void displayMenu() {
std::cout << "Student Management System" << std::endl;
std::cout << "1. Add Student" << std::endl;
std::cout << "2. View All Students" << std::endl;
std::cout << "3. Update Student" << std::endl;
std::cout << "4. Delete Student" << std::endl;
std::cout << "5. Save to File" << std::endl;
std::cout << "6. Load from File" << std::endl;
std::cout << "7. Exit" << std::endl;
std::cout << "Choose an option: ";
}
3. 实现主要功能
创建一个容器(如std::vector
)用于存储学生信息,并实现系统的核心功能。
std::vector<Student> students;
// 添加学生
void addStudent() {
int id, age;
std::string name, major;
std::cout << "Enter ID: ";
std::cin >> id;
std::cout << "Enter Name: ";
std::cin >> name;
std::cout << "Enter Age: ";
std::cin >> age;
std::cout << "Enter Major: ";
std::cin >> major;
students.push_back(Student(id, name, age, major));
std::cout << "Student added successfully!" << std::endl;
}
// 查看所有学生
void viewStudents() {
for (const auto& student : students) {
student.display();
}
}
// 编辑学生信息
void updateStudent() {
int id;
std::cout << "Enter ID of student to update: ";
std::cin >> id;
for (auto& student : students) {
if (student.id == id) {
std::cout << "Enter new Name: ";
std::cin >> student.name;
std::cout << "Enter new Age: ";
std::cin >> student.age;
std::cout << "Enter new Major: ";
std::cin >> student.major;
std::cout << "Student updated successfully!" << std::endl;
return;
}
}
std::cout << "Student not found." << std::endl;
}
// 删除学生
void deleteStudent() {
int id;
std::cout << "Enter ID of student to delete: ";
std::cin >> id;
for (auto it = students.begin(); it != students.end(); ++it) {
if (it->id == id) {
students.erase(it);
std::cout << "Student deleted successfully!" << std::endl;
return;
}
}
std::cout << "Student not found." << std::endl;
}
// 保存到文件
void saveToFile() {
std::ofstream file("students.txt");
for (const auto& student : students) {
file << student.id << "," << student.name << ","
<< student.age << "," << student.major << std::endl;
}
file.close();
std::cout << "Students saved to file successfully!" << std::endl;
}
// 从文件读取
void loadFromFile() {
std::ifstream file("students.txt");
std::string line;
students.clear();
while (std::getline(file, line)) {
std::istringstream ss(line);
int id, age;
std::string name, major;
std::getline(ss, name, ',');
ss >> id;
ss.ignore(); // 忽略逗号
std::getline(ss, name, ',');
ss >> age;
ss.ignore(); // 忽略逗号
std::getline(ss, major, ',');
students.push_back(Student(id, name, age, major));
}
file.close();
std::cout << "Students loaded from file successfully!" << std::endl;
}
4. 主函数
实现主循环以处理用户输入。
int main() {
int choice;
while (true) {
displayMenu();
std::cin >> choice;
switch (choice) {
case 1: addStudent(); break;
case 2: viewStudents(); break;
case 3: updateStudent(); break;
case 4: deleteStudent(); break;
case 5: saveToFile(); break;
case 6: loadFromFile(); break;
case 7: return 0;
default: std::cout << "Invalid option, try again." << std::endl;
}
}
return 0;
}
解析
- 类与对象:
Student
类用于封装学生信息,每个学生是Student
类的一个对象。 - 数据结构:
std::vector
用于存储学生对象,实现动态数组。 - 文件操作:使用
ifstream
和ofstream
处理文件读写,实现数据持久化。 - 用户交互:通过标准输入输出实现简单的用户交互界面。
这是一个基础的学生管理系统示例,功能简单但可以进一步扩展,比如添加更多的属性、完善异常处理、优化用户界面等。