功能要求(可扩充功能) (1)用c++实现简单的菜单设计,如下所示: 1 添加学生信息 2 显示学生信息 3 查找学生信息 4 成绩计算 5 按总分降序输出 0 退出 (2)每个学生的信息至少
时间: 2024-02-14 10:19:51 浏览: 22
包括学号、姓名、性别、年龄、班级、学科成绩等基本信息。可以使用结构体来存储学生信息。 (3)添加学生信息时,可以通过输入学生信息来添加,也可以通过读取文件来批量添加。 (4)显示学生信息时,可以按学号、姓名、班级等进行排序显示。 (5)查找学生信息时,可以按学号、姓名、班级等进行查找。 (6)成绩计算可以对学生的学科成绩进行加权平均分计算,并输出每个学生的总分和平均分。 (7)按总分降序输出时,可以将学生按照总分从高到低进行排序输出。 (8)退出程序时,需要将所有学生信息保存到文件中,以便下次启动程序时可以读取之前保存的信息。
相关问题
功能要求(可扩充功能) (1)用c++实现简单的菜单设计,如下所示: 1 添加学生信息 2 显示学生信息 3 查找学生信息 4 成绩计算 5 按总分降序输出 0 退出 (2)每个学生的信息至少包括姓名、学号、3门课程的成绩、班级等信息。 (3)“添加学生信息”:输入新的学生信息以后,系统将把相关信息存储到文件中。以班级为单位存放到不同的文件中。至少有3个班,每个班级至少10个学生。 (4)“显示学生信息”:系统将从文件中读取数据,按要求显示所
需求的程序框架如下:
```c++
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
//定义学生结构体
struct Student {
string name;
string id;
int score[3];
int totalScore;
};
//定义班级结构体
struct Class {
string name;
vector<Student> students;
};
//定义全局变量
vector<Class> classes;
string fileNamePrefix = "class_"; //文件名前缀
//函数声明
void addStudent();
void displayStudents();
void searchStudent();
void calculateScore();
void sortStudentsByTotalScore();
void saveToFile();
void loadFromFile();
int main() {
loadFromFile(); //从文件中读取数据
int choice;
do {
cout << "1 添加学生信息" << endl;
cout << "2 显示学生信息" << endl;
cout << "3 查找学生信息" << endl;
cout << "4 成绩计算" << endl;
cout << "5 按总分降序输出" << endl;
cout << "0 退出" << endl;
cout << "请输入您的选择:";
cin >> choice;
switch (choice) {
case 1:
addStudent();
break;
case 2:
displayStudents();
break;
case 3:
searchStudent();
break;
case 4:
calculateScore();
break;
case 5:
sortStudentsByTotalScore();
displayStudents();
break;
case 0:
saveToFile(); //保存数据到文件
break;
default:
cout << "输入有误,请重新输入!" << endl;
break;
}
} while (choice != 0);
return 0;
}
void addStudent() {
//TODO:添加学生信息的函数实现
}
void displayStudents() {
//TODO:显示学生信息的函数实现
}
void searchStudent() {
//TODO:查找学生信息的函数实现
}
void calculateScore() {
//TODO:成绩计算的函数实现
}
void sortStudentsByTotalScore() {
//TODO:按总分降序输出的函数实现
}
void saveToFile() {
//TODO:保存数据到文件的函数实现
}
void loadFromFile() {
//TODO:从文件中读取数据的函数实现
}
```
在`addStudent()`函数中,可以先让用户输入班级名称和学生信息,然后根据班级名称查找对应的班级对象,将新的学生信息添加到该班级的学生列表中。
在`displayStudents()`函数中,可以使用嵌套的循环依次输出每个班级和该班级中的所有学生信息。
在`searchStudent()`函数中,可以让用户输入要查找的学生姓名或学号,然后遍历所有班级和学生,查找匹配的学生信息并输出。
在`calculateScore()`函数中,可以让用户输入要计算成绩的班级名称,然后遍历该班级中的所有学生,计算每个学生的总成绩并更新到学生结构体中。
在`sortStudentsByTotalScore()`函数中,可以使用`sort()`算法对所有学生按照总分进行降序排序,然后输出排序后的结果。
在`saveToFile()`函数中,可以依次将每个班级的学生列表中的学生信息写入到对应的文件中。
在`loadFromFile()`函数中,可以依次读取每个班级的文件中的学生信息,然后根据班级名称将学生信息添加到对应的班级对象中。
基本要求: 1、程序功能 编程实现一个基础的成绩管理系统。 2、设计目的 通过本程序综合掌握类类型、函数、文件等知识的综合使用。 3、功能要求(可扩充功能) (1)实现简单的菜单设计,如下所示: 1 添加学生信息 2 显示学生信息 3 查找学生信息 4 成绩计算 5 按总分降序输出 0 退出 (2)每个学生的信息至少包括姓名、学号、3门课程的成绩、班级等信息。 (3)“添加学生信息”:输入新的学生信息以后,系统将把相关信息存储到文件中
好的,以下是一个简单的成绩管理系统的实现,满足上述要求:
```c++
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
class Student {
private:
string name;
string id;
int score1;
int score2;
int score3;
string cls;
public:
Student(string name = "", string id = "", int score1 = 0, int score2 = 0, int score3 = 0, string cls = "") :
name(name), id(id), score1(score1), score2(score2), score3(score3), cls(cls) {}
string getName() const {
return name;
}
string getId() const {
return id;
}
int getScore1() const {
return score1;
}
int getScore2() const {
return score2;
}
int getScore3() const {
return score3;
}
string getCls() const {
return cls;
}
void setName(string name) {
this->name = name;
}
void setId(string id) {
this->id = id;
}
void setScore1(int score1) {
this->score1 = score1;
}
void setScore2(int score2) {
this->score2 = score2;
}
void setScore3(int score3) {
this->score3 = score3;
}
void setCls(string cls) {
this->cls = cls;
}
void print() const {
cout << "Name: " << name << ", ID: " << id << ", Score1: " << score1 << ", Score2: " << score2 << ", Score3: " << score3 << ", Class: " << cls << endl;
}
void save(ofstream& fout) const {
fout << name << " " << id << " " << score1 << " " << score2 << " " << score3 << " " << cls << endl;
}
};
bool cmp(const Student& s1, const Student& s2) {
return s1.getScore1() + s1.getScore2() + s1.getScore3() > s2.getScore1() + s2.getScore2() + s2.getScore3();
}
void addStudent(vector<Student>& students, ofstream& fout) {
cout << "Please input student's name, id, score1, score2, score3, class: ";
string name, id, cls;
int score1, score2, score3;
cin >> name >> id >> score1 >> score2 >> score3 >> cls;
students.push_back(Student(name, id, score1, score2, score3, cls));
students.back().save(fout);
cout << "Add student successfully!" << endl;
}
void showStudents(const vector<Student>& students) {
for (const auto& student : students) {
student.print();
}
}
void findStudent(const vector<Student>& students) {
cout << "Please input student's name or id: ";
string keyword;
cin >> keyword;
for (const auto& student : students) {
if (student.getName() == keyword || student.getId() == keyword) {
student.print();
return;
}
}
cout << "Cannot find student!" << endl;
}
void calcScore(const vector<Student>& students) {
for (const auto& student : students) {
cout << "Name: " << student.getName() << ", ID: " << student.getId() << ", Total score: " << student.getScore1() + student.getScore2() + student.getScore3() << endl;
}
}
void sortStudents(vector<Student>& students) {
sort(students.begin(), students.end(), cmp);
showStudents(students);
}
int main() {
vector<Student> students;
ifstream fin("students.dat");
if (fin) {
string name, id, cls;
int score1, score2, score3;
while (fin >> name >> id >> score1 >> score2 >> score3 >> cls) {
students.push_back(Student(name, id, score1, score2, score3, cls));
}
fin.close();
}
ofstream fout("students.dat", ios::app);
while (true) {
cout << "Menu:" << endl;
cout << "1. Add student information" << endl;
cout << "2. Show student information" << endl;
cout << "3. Find student information" << endl;
cout << "4. Calculate total score" << endl;
cout << "5. Sort by total score" << endl;
cout << "0. Exit" << endl;
int choice;
cin >> choice;
switch (choice) {
case 1:
addStudent(students, fout);
break;
case 2:
showStudents(students);
break;
case 3:
findStudent(students);
break;
case 4:
calcScore(students);
break;
case 5:
sortStudents(students);
break;
case 0:
fout.close();
return 0;
default:
cout << "Invalid choice!" << endl;
break;
}
}
return 0;
}
```
以上代码中,我们使用了类 Student 来表示每个学生的信息,通过学生的姓名、学号、3门课程的成绩、班级等信息来创建一个学生对象。在类中,我们定义了一些 getter 和 setter 方法,用于获取和设置学生的各种信息,以及 print 和 save 方法,分别用于在控制台输出学生信息和将学生信息存储到文件中。
在主函数中,我们使用了一个 vector 来存储所有学生对象,然后根据用户的选择来执行不同的操作。具体来说,我们实现了以下几个函数:
- addStudent:用于添加一个新的学生信息,首先从控制台获取学生的各种信息,然后创建一个新的学生对象,并将其存储到文件中和 vector 中。
- showStudents:用于显示所有学生的信息,遍历 vector 中的所有学生对象并调用 print 方法输出。
- findStudent:用于查找指定学生的信息,首先从控制台获取关键字,然后遍历 vector 中的所有学生对象,如果找到了与关键字匹配的学生,则调用 print 方法输出其信息。
- calcScore:用于计算每个学生的总分,遍历 vector 中的所有学生对象,并根据各科成绩计算总分并输出。
- sortStudents:用于按照总分降序排列所有学生,调用 sort 函数并传入自定义的 cmp 函数,然后调用 showStudents 方法输出排序后的结果。
在程序开始时,我们从文件中读取所有学生的信息,并将其存储到 vector 中;在程序结束时,我们将 vector 中的所有学生信息存储回文件中。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)