答:
代码有点长,你直接复制粘贴上去测测吧…
#include <iostream>
#include <vector>
#include <algorithm>
struct Student {
std::string name;
int id;
int score1;
int score2;
int score3;
};
std::vector<Student> students;
void displayStudents() {
for (const auto& student : students) {
std::cout << "Name: " << student.name << ", ID: " << student.id << ", Score1: " << student.score1 << ", Score2: " << student.score2 << ", Score3: " << student.score3 << std::endl;
}
}
void searchStudent(std::string keyword) {
for (const auto& student : students) {
if (student.name == keyword || std::to_string(student.id) == keyword) {
std::cout << "Name: " << student.name << ", ID: " << student.id << ", Score1: " << student.score1 << ", Score2: " << student.score2 << ", Score3: " << student.score3 << std::endl;
return;
}
}
std::cout << "Student not found." << std::endl;
}
void changeStudent(int id) {
for (auto& student : students) {
if (student.id == id) {
std::cout << "Enter new name: ";
std::cin >> student.name;
std::cout << "Enter new score1: ";
std::cin >> student.score1;
std::cout << "Enter new score2: ";
std::cin >> student.score2;
std::cout << "Enter new score3: ";
std::cin >> student.score3;
return;
}
}
std::cout << "Student not found." << std::endl;
}
void deleteStudent(int id) {
auto it = std::remove_if(students.begin(), students.end(), [id](const Student& student) {
return student.id == id;
});
if (it != students.end()) {
students.erase(it, students.end());
std::cout << "Student deleted." << std::endl;
} else {
std::cout << "Student not found." << std::endl;
}
}
void insertStudent() {
Student newStudent;
std::cout << "Enter name: ";
std::cin >> newStudent.name;
std::cout << "Enter ID: ";
std::cin >> newStudent.id;
std::cout << "Enter score1: ";
std::cin >> newStudent.score1;
std::cout << "Enter score2: ";
std::cin >> newStudent.score2;
std::cout << "Enter score3: ";
std::cin >> newStudent.score3;
students.push_back(newStudent);
}
void sortStudents() {
std::cout << "Sort by (name, id, score1, score2, score3): ";
std::string sortKey;
std::cin >> sortKey;
if (sortKey == "name") {
std::sort(students.begin(), students.end(), [](const Student& a, const Student& b) {
return a.name < b.name;
});
} else if (sortKey == "id") {
std::sort(students.begin(), students.end(), [](const Student& a, const Student& b) {
return a.id < b.id;
});
} else if (sortKey == "score1") {
std::sort(students.begin(), students.end(), [](const Student& a, const Student& b) {
return a.score1 < b.score1;
});
} else if (sortKey == "score2") {
std::sort(students.begin(), students.end(), [](const Student& a, const Student& b) {
return a.score2 < b.score2;
});
} else if (sortKey == "score3") {
std::sort(students.begin(), students.end(), [](const Student& a, const Student& b) {
return a.score3 < b.score3;
});
} else {
std::cout << "Invalid sort key." << std::endl;
}
}
int main() {
int choice;
do {
std::cout << "1. Display students" << std::endl;
std::cout << "2. Search student" << std::endl;
std::cout << "3. Change student" << std::endl;
std::cout << "4. Delete student" << std::endl;
std::cout << "5. Insert student" << std::endl;
std::cout << "6. Sort students" << std::endl;
std::cout << "7. Exit" << std::endl;
std::cout << "Enter your choice: ";
std::cin >> choice;
switch (choice) {
case 1:
displayStudents();
break;
case 2:
std::cout << "Enter name or ID to search: ";
std::string keyword;
std::cin >> keyword;
searchStudent(keyword);
break;
case 3:
int changeId;
std::cout << "Enter ID of student to change: ";
std::cin >> changeId;
changeStudent(changeId);
break;
case 4:
int deleteId;
std::cout << "Enter ID of student to delete: ";
std::cin >> deleteId;
deleteStudent(deleteId);
break;
case 5:
insertStudent();
break;
case 6:
sortStudents();
break;
case 7:
std::cout << "Exiting..." << std::endl;
break;
default:
std::cout << "Invalid choice." << std::endl;
}
} while (choice != 7);
return 0;
}