参考这个,加两个功能就行https://blog.csdn.net/weixin_44882124/article/details/125285056
用switch case是不是会好一点?
以前写的类似功能的代码,供参考:
#include <iostream>
#include <string>
#include <time.h>
constexpr auto N = 5; //5个学生;
constexpr auto M = 4; //4门课程;
using namespace std;
typedef struct student {
string num; //学号
string name;//姓名
float score[M];//课目成绩
float avg; //每个学生4门课目平均分
}Student;
void menu();//菜单函数
void Input_info(Student* stu);//手工信息录入,平均分/学生
void Init_data(Student* stu); //初始化函数,平均分/学生
void Hight_score(Student* stu);//成绩最高的学生序号和课目
void fail_score(Student* stu);//不及格学生序号和各门课成绩
void avg_score(Student* stu); //每课目平均分
void find_stu(Student* stu); //按学号查询
void print(Student* stu); //输出所有信息
int main()
{
int chois = 1;
Student stu[N];
srand((unsigned int)time(NULL));//生成随机数
do {
menu();
cin >> chois;
switch (chois) {
case 1:Input_info(stu); break;
case 2:Init_data(stu); break;
case 3:print(stu); break;
case 4:Hight_score(stu); break;
case 5:fail_score(stu); break;
case 6:avg_score(stu); break;
case 7:find_stu(stu); break;
case 0:chois = 0; break;
default: break;
}
system("pause");
system("cls");
} while (chois);
return 0;
}
void menu()
{
cout << "\t\t" << "*********************************************" << endl;
cout << "\t\t" << " 学生成绩处理系统 " << endl;
cout << "\t\t" << " 1.输入学生数据 " << endl;
cout << "\t\t" << " 2.自动生成数据 " << endl;
cout << "\t\t" << " 3.各学生平均成绩 " << endl;
cout << "\t\t" << " 4.成绩最高的学生及科目 " << endl;
cout << "\t\t" << " 5.不及格学生序号和成绩 " << endl;
cout << "\t\t" << " 6.每课目平均分 " << endl;
cout << "\t\t" << " 7.按学号查询 " << endl;
cout << "\t\t" << " 0.退出 " << endl;
cout << "\t\t" << "*********************************************" << endl;
cout << "请输入选择(0-6):";
}
void Input_info(Student* stu)
{
int i, j;
cout << "输入" << N << "位学生学号、姓名及" << M << "门课目成绩" << endl;
for (i = 0; i < N; i++) {
cin >> stu[i].num >> stu[i].name;
stu[i].avg = 0;
for (j = 0; j < M; j++) {
cin >> stu[i].score[j];
stu[i].avg += stu[i].score[j];
}
stu[i].avg /= M;
}
}
void Init_data(Student* stu)
{
string nameseed = "ABCDEFGH";
string numseed = "123456789";
int i, j;
for (i = 0; i < N; i++) {
stu[i].num = "00000000";
stu[i].num += numseed[i];
stu[i].name = "student_";
stu[i].name += nameseed[i];
stu[i].avg = 0;
for (j = 0; j < M; j++) {
stu[i].score[j] = rand() % 61 + 40;
stu[i].avg += stu[i].score[j];
}
stu[i].avg /= M;
}
}
void Hight_score(Student* stu)
{
int i, j;
float max;
cout << endl << "---成绩最高的学生---" << endl;
cout << endl << " 学号\t\t课目" << endl << endl;
for (j = 0; j < M; j++) {
max = stu[0].score[j];
for (i = 0; i < N; i++) {
if (max < stu[i].score[j])
max = stu[i].score[j];
}
for (i = 0; i < N; i++) { //同一课目,最高分相同所有学生
if (stu[i].score[j] == max)
cout << stu[i].num << "\t" << "课目" << j + 1 << endl;
}
}
}
void fail_score(Student* stu)
{
int i, j, m, k = 0;
for (i = 0; i < N; i++) {
for (j = 0; j < M; j++) {
if (stu[i].score[j] < 60)
break;
}
if (j < M) {
if (k == 0) {
cout << endl << "---不及格学生序号和各门课成绩---" << endl << endl;
cout << " 学号\t\t";
for (m = 0; m < M; m++)
cout << "课目" << m + 1 << " \t";
cout<< endl << endl;
}
k++;
cout << stu[i].num;
for (j = 0; j < M; j++)
cout << "\t" << stu[i].score[j];
cout << endl;
}
}
if (k == 0)
cout << endl << "---无成绩不及格的学生---" << endl << endl;
}
void avg_score(Student* stu)
{
int i, j;
float avg;
print(stu);
cout << "各课目平均分:\t\t";
for (j = 0; j < M; j++) {
avg = 0;
for (i = 0; i < N; i++) {
avg += stu[i].score[j];
}
cout << " " << avg / N;
}
cout << endl << endl;
}
void find_stu(Student* stu)
{
int i, j;
string num;
cout << "请输入查询的学号:";
cin >> num;
for (i = 0; i < N; i++) {
if (stu[i].num == num)
break;
}
if (i != N) {
cout << endl << "学号\t\t" << "姓名\t";
for (j = 0; j < M; j++)
cout << "课目" << j + 1 << " ";
cout << endl << stu[i].num << " " << stu[i].name;
for (j = 0; j < M; j++)
cout << " " << stu[i].score[j];
cout << endl;
}
else
cout << "未找到相关信息!" << endl;
}
void print(Student* stu)
{
int i, j;
cout << endl << "学号\t\t" << "姓名\t";
for (j = 0; j < M; j++)
cout << "课目" << j + 1 << " ";
cout << "平均分" << endl << endl;
for (i = 0; i < N; i++) {
cout << stu[i].num << " " << stu[i].name;
for (j = 0; j < M; j++)
cout << " " << stu[i].score[j];
cout << " " << stu[i].avg << endl;
}
}