写一个命令行交互式 C 语言程序。该程序需要实现下述菜单功能:
1、数据存储。2、数据处理。你需要将⼀系列的学生期末考试信息进行存储(学生人数不会超过 100)。每个学生的信息包括:姓名(例如 Liuyumeng) ;学号(12 位数字组成,开头 4 位为 2021、2020、2019);C 语言成绩(一个大于等于零的整数); GPA 等级(A+, A, B+, B, C+, C, D, F );班级排名(成绩相同需并列)。其中,姓名,学号,成绩为输入数据,其余数据需要你计算。 同时,你需要添加⼀些维护数据库的功能:
Add(name, id, score): 新增⼀个学生的信息;
Delete(id): 根据学号删除某个学生的信息;
Search(id):根据学号查找某个学生的信息。
3、数据分析Sort_by_id():生成根据学号顺序排列学生信息的表格
Sort_by_score():生成根据分数由高到低顺序排列学生信息的表格 Max():返回最高分学生的信息
Min(): 返回最低分学生的信息
Ave(): 返回所有学生期末成绩平均分
prime(id): 返回某个学生的成绩是否为素数
coprime(id, id):返回某两个学生的成绩是否互质/互素
4、用户界面根据 GPA 对学生成绩进行考情分析:A+多少⼈,A 多少⼈,以此类推。GPA 等级参考SZTU 评分等级。
实现⼀个菜单,以供用户决定要使用哪个功能。
菜单参考:
Hello, pls input a series of student information!
(用户开始输入)
Okay, data upload finished. What do you what to do next? You can enter a number to tell me. 1 add
2 delete
3 search
4 sort by id
5 sort by score
6 best score
7 worst score
8 prime judge
9 coprime judge
…
0 exit
(用户输入)
(输出计算结果)
Do you still need my service? You can enter a number to tell me.
1 add
2 delete
3 search
4 sort by id
5 sort by score
6 best score
7 worst score
8 prime judge
9 coprime judge
…
0 exit
(用户输入)
(输出计算结果)
#include#include using namespace std; class student { string name;//姓名 string num;//学号 int grape;//C语言成绩 string gpa;//绩点 int rank;//排名 public: student() {} student(string n, string a, int b) :name(n), num(a), grape(b) { if (grape >= 93) { gpa = "A+"; } else if (grape >= 85 && grape < 93) { gpa = "A"; } else if (grape >= 80 && grape < 85) { gpa = "B+"; } else if (grape >= 75 && grape < 80) { gpa = "B"; } else if (grape >= 70 && grape < 75) { gpa = "C+"; } else if (grape >= 65 && grape < 70) { gpa = "C"; } else if (grape >= 60 && grape < 65) { gpa = "D"; } else if (grape <60) { gpa = "F"; } } string getid() { return num; } string getgpa() { return gpa; } int getgrape() { return grape; } void print() {//输出学生的个人信息 cout << "姓名:" << name << " " << "学号:" << num << " " << "C语言成绩:" << grape << endl; } friend int getmax(student* p, int n);//寻找最大分数学生的序列 friend int getmin(student* p, int n);//寻找最小分数学生的序列 friend int find(student* p, int n, string id);//寻找这个学号学生的序列号 }; int getmax(student* p, int n) { int max = 0; for (int i = 0; i < n; i++) { if (p[i].grape > p[max].grape) { max = i; } } return max; } int getmin(student* p, int n) { int min = 0; for (int i = 0; i < n; i++) { if (p[i].grape < p[min].grape) { min = i; } } return min; } int find(student* p, int n, string id) { for (int i = 0; i < n; i++) { if (p[i].num == id) { return i; } } return -1; } void swap(student& a, student& b) {//定义交换函数,用于交换类 student t; t = a; a = b; b = t; } void pri1() {//菜单输出 cout << "1 add" << "n" << "2 delete" << "n" << "3 search" << "n" << "4 sort by id" << endl; cout << "5 sort by score" << "n" << "6 best score" << "n" << "7 worst score" << "n" << "8 prime judge" << endl; cout << "9 coprime judge" << "n" << "10 GPA analysis" << "n" << "0 exit" << endl; } void pri2() { cout << "Do you still need my service? You can enter a number to tell me." << endl; pri1(); } int main() { cout << "Hello, pls input a series of student information!" << endl; student stu[100];//用于存储学生信息 int n = 0;//n用来记录学生的个数 cout << "输入要录入的学生个数:"; int number;//刚开始用户输入的数据个数 cin >> number; for (int i = 0; i < number; i++) { string a, b; int c;//a为姓名,b为学号,c为成绩 cout << "请输入学生的姓名、学号和C语言成绩:"; cin >> a >> b >> c; student temp(a, b, c); stu[n++] = temp; } cout << "Okay, data upload finished. What do you what to do next? You can enter a number to tell me." << endl; pri1(); int x;//x代表菜单编号 cin >> x; while (x != 0) { if (x == 1) { cout << "请输入要添加学生的姓名,学号和C语言成绩:"; string name1, id; int score; cin >> name1 >> id >> score; student temp(name1, id, score); stu[n++] = temp; pri2(); } else if (x == 2) { cout << "请输入要删学生的学号:"; string id; cin >> id; int t = 0;//t用来记录要删的学生是在原序列的第几个 t = find(stu, n, id); n -= 1; for (int i = t; i < n; i++) { stu[i] = stu[i + 1]; } pri2(); } else if (x == 3) { cout << "请输入要查找学生的学号:"; string id; cin >> id; int t = 0;//t用来记录要查找的学生是在原序列的第几个 t = find(stu, n, id); stu[t].print(); pri2(); } else if (x == 4) { cout << "按照学号排序如下所示:" << endl; student st[100];//定义一个类来复制原有的类用来排序输出 for (int i = 0; i < n; i++) { st[i] = stu[i]; } for (int i = 0; i < n; i++) {//冒泡排序法 for (int j = 0; j < n - 1; j++) { if (st[j].getid() > st[j + 1].getid()) { swap(st[j], st[j + 1]); } } } for (int i = 0; i < n; i++) { st[i].print(); } pri2(); } else if (x == 5) { cout << "按照分数由高到低排序如下所示:" << endl; student st[100];//定义一个类来复制原有的类用来排序输出 for (int i = 0; i < n; i++) { st[i] = stu[i]; } for (int i = 0; i < n; i++) {//冒泡排序法 for (int j = 0; j < n - 1; j++) { if (st[j].getgrape() < st[j + 1].getgrape()) { swap(st[j], st[j + 1]); } } } for (int i = 0; i < n; i++) { st[i].print(); } pri2(); } else if (x == 6) { cout << "最大分数学生信息如下:" << endl; int max = getmax(stu, n); stu[max].print(); pri2(); } else if (x == 7) { cout << "最小分数学生信息如下:" << endl; int min = getmin(stu, n); stu[min].print(); pri2(); } else if (x == 8) { cout << "请输入要判断成绩是否为素数的学生学号:"; string id; cin >> id; int t = find(stu, n, id); int sum = stu[t].getgrape(); if (sum == 1 || sum % 2 == 0) { cout << "学生成绩不为素数" << endl; } else { cout << "学生成绩为素数" << endl; } pri2(); } else if (x == 9) { cout << "请输入两个学生的学号:"; string id1, id2; cin >> id1 >> id2; int t1 = find(stu, n, id1); int t2 = find(stu, n, id2); int score1 = stu[t1].getgrape(); int score2 = stu[t2].getgrape(); int min = score1; if (min > score2) { min = score2; } int i; for (i = 2; i < min; i++) { if (score1 % i == 0 && score2 % i == 0) { cout << "学号为:" << id1 << "和学号为:" << id2 << "的两位学生的成绩互质" << endl; break; } } if (i == min) { cout << "学号为:" << id1 << "和学号为:" << id2 << "的两位学生的成绩不互质" << endl; } pri2(); } else if (x == 10) { int num1 = 0, num2 = 0, num3 = 0, num4 = 0, num5 = 0, num6 = 0, num7 = 0, num8 = 0; //num1-8分别代表绩点有A+到F for (int i = 0; i < n; i++) { if (stu[i].getgpa() == "A+") { num1++; } else if (stu[i].getgpa() == "A") { num2++; } else if (stu[i].getgpa() == "B+") { num3++; } else if (stu[i].getgpa() == "B") { num4++; } else if (stu[i].getgpa() == "C+") { num5++; } else if (stu[i].getgpa() == "C") { num6++; } else if (stu[i].getgpa() == "D") { num7++; } else if (stu[i].getgpa() == "F") { num8++; } } cout << "根据 GPA 对学生成绩进行考情分析:A+有" << num1 << "人,"; cout << "A有" << num2 << "人,B+有" << num3 << "人,B有" << num4 << "人,C+有" << num5 << "人,C有"; cout << num6 << "人,D有" << num7 << "人,F有" << num8 << "人" << endl; pri2(); } cin >> x; } }



