用C++编写程序设计学生类Student和学生管理类StudentManger,并完成编码实现和测试,具体功能如下: (1)Student类包含学生学号、姓名、性别、分数等信息,定义构造函数、set函数、get函数等; (2)StudentManger类数据成员包含Student数组、学生个数,定义构造函数、save函数、read函数; (3)save函数的功能是将学生信息保存到文件中,read函数的功能是读取文件信息内容到Student数组中; (4)编写主函数完成功能测试。

时间: 2023-11-22 09:52:33 浏览: 39
以下是C++编写的程序: ```cpp #include <iostream> #include <fstream> #include <string> using namespace std; const int MAX_STUDENT_NUM = 100; // 学生数量上限 // 学生类 class Student { public: // 构造函数 Student(string id="", string name="", char gender=' ', float score=0.0) { this->id = id; this->name = name; this->gender = gender; this->score = score; } // set函数 void setId(string id) { this->id = id; } void setName(string name) { this->name = name; } void setGender(char gender) { this->gender = gender; } void setScore(float score) { this->score = score; } // get函数 string getId() const { return id; } string getName() const { return name; } char getGender() const { return gender; } float getScore() const { return score; } private: string id; // 学生学号 string name; // 学生姓名 char gender; // 学生性别 float score; // 学生分数 }; // 学生管理类 class StudentManager { public: // 构造函数 StudentManager() { studentNum = 0; } // 保存学生信息到文件中 bool save(string filename) { ofstream fout(filename.c_str()); if (!fout) { cout << "Error: cannot write to file " << filename << endl; return false; } fout << studentNum << endl; for (int i = 0; i < studentNum; i++) { fout << students[i].getId() << " " << students[i].getName() << " " << students[i].getGender() << " " << students[i].getScore() << endl; } fout.close(); return true; } // 从文件中读取学生信息 bool read(string filename) { ifstream fin(filename.c_str()); if (!fin) { cout << "Error: cannot open file " << filename << endl; return false; } fin >> studentNum; for (int i = 0; i < studentNum; i++) { string id, name; char gender; float score; fin >> id >> name >> gender >> score; students[i].setId(id); students[i].setName(name); students[i].setGender(gender); students[i].setScore(score); } fin.close(); return true; } // 添加学生 bool addStudent(Student student) { if (studentNum == MAX_STUDENT_NUM) { cout << "Error: too many students" << endl; return false; } students[studentNum++] = student; return true; } // 删除学生 bool removeStudent(string id) { int index = -1; for (int i = 0; i < studentNum; i++) { if (students[i].getId() == id) { index = i; break; } } if (index == -1) { cout << "Error: student " << id << " not found" << endl; return false; } for (int i = index; i < studentNum - 1; i++) { students[i] = students[i+1]; } studentNum--; return true; } // 修改学生信息 bool modifyStudent(string id, Student student) { int index = -1; for (int i = 0; i < studentNum; i++) { if (students[i].getId() == id) { index = i; break; } } if (index == -1) { cout << "Error: student " << id << " not found" << endl; return false; } students[index] = student; return true; } // 根据学号查找学生 Student* findStudentById(string id) { for (int i = 0; i < studentNum; i++) { if (students[i].getId() == id) { return &students[i]; } } return NULL; } // 根据姓名查找学生 Student* findStudentByName(string name) { for (int i = 0; i < studentNum; i++) { if (students[i].getName() == name) { return &students[i]; } } return NULL; } // 显示所有学生信息 void showAllStudents() { cout << "ID\tName\tGender\tScore" << endl; for (int i = 0; i < studentNum; i++) { cout << students[i].getId() << "\t" << students[i].getName() << "\t" << students[i].getGender() << "\t" << students[i].getScore() << endl; } } private: Student students[MAX_STUDENT_NUM]; // 学生数组 int studentNum; // 学生数量 }; int main() { StudentManager manager; string filename = "students.txt"; // 从文件中读取学生信息 if (!manager.read(filename)) { return 1; } while (true) { cout << "1. Add Student" << endl; cout << "2. Remove Student" << endl; cout << "3. Modify Student" << endl; cout << "4. Find Student by ID" << endl; cout << "5. Find Student by Name" << endl; cout << "6. Show All Students" << endl; cout << "7. Save to File" << endl; cout << "0. Exit" << endl; cout << "Enter your choice: "; int choice; cin >> choice; switch (choice) { case 1: { string id, name; char gender; float score; cout << "Enter student ID: "; cin >> id; cout << "Enter student name: "; cin >> name; cout << "Enter student gender (M/F): "; cin >> gender; cout << "Enter student score: "; cin >> score; Student student(id, name, gender, score); manager.addStudent(student); break; } case 2: { string id; cout << "Enter student ID: "; cin >> id; manager.removeStudent(id); break; } case 3: { string id, name; char gender; float score; cout << "Enter student ID: "; cin >> id; Student* student = manager.findStudentById(id); if (student == NULL) { break; } cout << "Enter student name: "; cin >> name; cout << "Enter student gender (M/F): "; cin >> gender; cout << "Enter student score: "; cin >> score; student->setName(name); student->setGender(gender); student->setScore(score); manager.modifyStudent(id, *student); break; } case 4: { string id; cout << "Enter student ID: "; cin >> id; Student* student = manager.findStudentById(id); if (student == NULL) { cout << "Error: student " << id << " not found" << endl; break; } cout << "ID\tName\tGender\tScore" << endl; cout << student->getId() << "\t" << student->getName() << "\t" << student->getGender() << "\t" << student->getScore() << endl; break; } case 5: { string name; cout << "Enter student name: "; cin >> name; Student* student = manager.findStudentByName(name); if (student == NULL) { cout << "Error: student " << name << " not found" << endl; break; } cout << "ID\tName\tGender\tScore" << endl; cout << student->getId() << "\t" << student->getName() << "\t" << student->getGender() << "\t" << student->getScore() << endl; break; } case 6: { manager.showAllStudents(); break; } case 7: { if (!manager.save(filename)) { return 1; } break; } case 0: { return 0; } default: { cout << "Invalid input" << endl; break; } } } } ``` 该程序实现了学生类和学生管理类,包括以下功能: 1. 添加学生 2. 删除学生 3. 修改学生信息 4. 根据学号查找学生 5. 根据姓名查找学生 6. 显示所有学生信息 7. 保存学生信息到文件中 8. 从文件中读取学生信息 在主函数中,我们通过一个死循环来实现不断的输入和处理用户的选择。根据用户的选择,调用相应的学生管理类中的函数来实现功能。用户可以选择在程序退出前将学生信息保存到文件中。

相关推荐

最新推荐

recommend-type

C++ 学生成绩管理系统设计报告书

(3)学生基本信息的读取和保存输入数据等功能 (4)学生基本信息的查询与修改。可以对已有的学生信息进行修改。 (5)学生基本信息的删除。 (6)对该班各科成绩进行分析;对学生成绩进行统计(包括最高分,最低分,排序,...
recommend-type

C++简单集合类的实现方法

如何使用C++实现一个简单的集合类,这篇文章主要介绍了C++简单集合类的实现方法,感兴趣的小伙伴们可以参考一下
recommend-type

C++ 类的赋值运算符''=''重载的方法实现

主要介绍了C++ 类的赋值运算符'='重载的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

C++实现日期类(Date类)的方法

下面小编就为大家带来一篇C++实现日期类(Date类)的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
recommend-type

C++图书馆管理程序.docx(带有完整源代码,类的声明和定义分开,非常清晰)

完整版的C++图书馆管理程序,包括对问题的分析,类的设计与声明,还画了类的层次图;运用了继承,和多态,使用了vector,以及文件读取;使用了人员继承和书本继承。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

HSV转为RGB的计算公式

HSV (Hue, Saturation, Value) 和 RGB (Red, Green, Blue) 是两种表示颜色的方式。下面是将 HSV 转换为 RGB 的计算公式: 1. 将 HSV 中的 S 和 V 值除以 100,得到范围在 0~1 之间的值。 2. 计算色相 H 在 RGB 中的值。如果 H 的范围在 0~60 或者 300~360 之间,则 R = V,G = (H/60)×V,B = 0。如果 H 的范围在 60~120 之间,则 R = ((120-H)/60)×V,G = V,B = 0。如果 H 的范围在 120~180 之间,则 R = 0,G = V,B =
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。