1.录入学生信息2.显示学生信息3..按学号查找4.按姓名查找5.按总分递减排序6.查找有2科目不及格学生信息0.退出 请输入功能号0-6: 然后是录入学生信息首先输入学生人数,然后根据学生人数开辟动态数组; 2)学生信息包括学号、姓名、性别、三门课成绩、总分;其中学号、姓名、 性别、三门课成绩是需要从键盘录入的,而总分是由程序计算的,而不 是用户自己算了再输入。 3)显示结果(学生信息)要以列表的形式显示,注意美观性; 4)要有必要的容错措施,比如输入各科分数要在0-100之间,输入错误给 用户提示,让其重新输入; c++
时间: 2024-02-13 07:02:32 浏览: 71
好的,你的问题是关于学生信息管理系统的。我会根据你的要求进行回答。首先,我们可以设计一个菜单,包括以下功能:
1. 录入学生信息
2. 显示学生信息
3. 按学号查找
4. 按姓名查找
5. 按总分递减排序
6. 查找有2科目不及格学生信息
0. 退出
针对这个菜单,我们可以使用 switch 语句来实现。下面是代码示例:
```c++
#include <iostream>
#include <string>
using namespace std;
// 定义学生信息结构体
struct Student {
string id; // 学号
string name; // 姓名
string gender; // 性别
int score1; // 第一门课成绩
int score2; // 第二门课成绩
int score3; // 第三门课成绩
int total; // 总分
};
// 录入学生信息函数
void input(Student *stu, int n) {
for (int i = 0; i < n; i++) {
cout << "请输入第" << i+1 << "个学生的信息:" << endl;
cout << "学号:";
cin >> stu[i].id;
cout << "姓名:";
cin >> stu[i].name;
cout << "性别:";
cin >> stu[i].gender;
cout << "第一门课成绩:";
cin >> stu[i].score1;
while (stu[i].score1 < 0 || stu[i].score1 > 100) {
cout << "成绩输入错误,请重新输入:";
cin >> stu[i].score1;
}
cout << "第二门课成绩:";
cin >> stu[i].score2;
while (stu[i].score2 < 0 || stu[i].score2 > 100) {
cout << "成绩输入错误,请重新输入:";
cin >> stu[i].score2;
}
cout << "第三门课成绩:";
cin >> stu[i].score3;
while (stu[i].score3 < 0 || stu[i].score3 > 100) {
cout << "成绩输入错误,请重新输入:";
cin >> stu[i].score3;
}
stu[i].total = stu[i].score1 + stu[i].score2 + stu[i].score3;
}
}
// 显示学生信息函数
void display(Student *stu, int n) {
cout << "学号\t姓名\t性别\t第一门课成绩\t第二门课成绩\t第三门课成绩\t总分" << endl;
for (int i = 0; i < n; i++) {
cout << stu[i].id << "\t" << stu[i].name << "\t" << stu[i].gender << "\t"
<< stu[i].score1 << "\t\t" << stu[i].score2 << "\t\t" << stu[i].score3 << "\t\t"
<< stu[i].total << endl;
}
}
// 按学号查找函数
void searchById(Student *stu, int n) {
string id;
cout << "请输入要查找的学号:";
cin >> id;
for (int i = 0; i < n; i++) {
if (stu[i].id == id) {
cout << "学号\t姓名\t性别\t第一门课成绩\t第二门课成绩\t第三门课成绩\t总分" << endl;
cout << stu[i].id << "\t" << stu[i].name << "\t" << stu[i].gender << "\t"
<< stu[i].score1 << "\t\t" << stu[i].score2 << "\t\t" << stu[i].score3 << "\t\t"
<< stu[i].total << endl;
return;
}
}
cout << "未找到该学生信息!" << endl;
}
// 按姓名查找函数
void searchByName(Student *stu, int n) {
string name;
cout << "请输入要查找的姓名:";
cin >> name;
for (int i = 0; i < n; i++) {
if (stu[i].name == name) {
cout << "学号\t姓名\t性别\t第一门课成绩\t第二门课成绩\t第三门课成绩\t总分" << endl;
cout << stu[i].id << "\t" << stu[i].name << "\t" << stu[i].gender << "\t"
<< stu[i].score1 << "\t\t" << stu[i].score2 << "\t\t" << stu[i].score3 << "\t\t"
<< stu[i].total << endl;
return;
}
}
cout << "未找到该学生信息!" << endl;
}
// 按总分递减排序函数
void sortByTotal(Student *stu, int n) {
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-i-1; j++) {
if (stu[j].total < stu[j+1].total) {
swap(stu[j], stu[j+1]);
}
}
}
display(stu, n);
}
// 查找有2科目不及格学生信息函数
void searchFailed(Student *stu, int n) {
cout << "以下是有2科目不及格的学生信息:" << endl;
cout << "学号\t姓名\t性别\t第一门课成绩\t第二门课成绩\t第三门课成绩\t总分" << endl;
for (int i = 0; i < n; i++) {
int count = 0;
if (stu[i].score1 < 60) {
count++;
}
if (stu[i].score2 < 60) {
count++;
}
if (stu[i].score3 < 60) {
count++;
}
if (count >= 2) {
cout << stu[i].id << "\t" << stu[i].name << "\t" << stu[i].gender << "\t"
<< stu[i].score1 << "\t\t" << stu[i].score2 << "\t\t" << stu[i].score3 << "\t\t"
<< stu[i].total << endl;
}
}
}
int main() {
int choice;
int n;
cout << "请输入学生人数:";
cin >> n;
Student *stu = new Student[n];
while (true) {
cout << "请输入功能号0-6:";
cin >> choice;
switch (choice) {
case 0:
cout << "谢谢使用!" << endl;
return 0;
case 1:
input(stu, n);
break;
case 2:
display(stu, n);
break;
case 3:
searchById(stu, n);
break;
case 4:
searchByName(stu, n);
break;
case 5:
sortByTotal(stu, n);
break;
case 6:
searchFailed(stu, n);
break;
default:
cout << "功能号输入错误,请重新输入!" << endl;
break;
}
}
delete[] stu;
return 0;
}
```
以上是一个简单的学生信息管理系统的实现,可以满足你的要求。如果你有其他问题,请随时提出。
阅读全文