请用typedef struct自定义学生结构类型SNode,包括学号(char Id[10])、姓名(char Name[8])、成绩(int Score),编程实现如下功能,禁止用全局变量,使用函数参数传递学生信息。
1.函数Create(SNode Stu[])功能:在键盘输入五位学生信息(学号、姓名、成绩)。
2.函数MaxScore(SNode Stu[])功能:输出最高成绩的学生信息。
3.主函数Main(),调用如上函数。
因为大一小学期做过类似的系统,所以使用了main、manu、show的结构来展示用户面板和详细信息。通过利用结构体数组,可以以一个用户块为单位,用一维数组把他们串联起来。
在这个过程中所发现的问题有:
1.MaxScore函数中,当我想要将stu[i].score直接排序的时候,结构体中剩下两个元素id和name不会以结构体整体为单位被移动,所以排序必须直接移动stu[i]整体。
2.Create函数中,发现字符串不能直接赋值,必须利用strcpy()函数拷贝数值到参数中。【strcpy函数在algorithm头文件中】
3.对清屏cls、退出程序exit的应用:system(“——”)。
#pragma warning(disable : 4996)
#include <stdio.h>
#include <iostream>
#include <algorithm>
#define MAX 10
using namespace std;
typedef struct SNode {
char Id[10];
char Name[8];
int Score;
}SNode;
//SNode Create(char Id[10], char Name[8], int Score) {
//SNode Stu;
//Stu[i]->Id = Id;
//报错:表达式必须是可修改的左值。
//原因:字符串不能直接赋值。
//strcpy(Stu.Id,Id);//strcpy表示拷贝该字符串
//strcpy(Stu.Name,Name);
//字符串不能,但是普通数字可以
//Stu.Score = Score;
//return Stu;
//}
void Show(int n, SNode stu[]) {
printf("学号\t姓名\t成绩\n");
for (int i = 0; i < n; i++)
{
printf("%s\t%s\t%d\n",stu[i].Id, stu[i].Name, stu[i].Score);
}
}
void MaxScore(int n,SNode Stu[]) {
SNode w;
for (int i = 0; i < n; i++) {
for (int k = 0; k < n - i; k++) {
if (Stu[k].Score < Stu[k + 1].Score) {
w = Stu[k];
Stu[k] = Stu[k + 1];
Stu[k + 1] = w;
}
}
}
printf("学号\t姓名\t成绩\n");
printf("%s\t%s\t%d\n", Stu[0].Id, Stu[0].Name, Stu[0].Score);
}
void manu(int n,SNode Stu[]) {
int a;
printf("您下面想进行的操作是:\n");
//printf("1.查看学生信息\n");
//printf("2.查看最高成绩的学生信息\n");
//printf("输入-1退出\n");
do {
printf("1.查看学生信息\n");
printf("2.查看最高成绩的学生信息\n");
printf("输入-1退出\n");
cin >> a;
switch (a) {
case 1:Show(n, Stu); break;
case 2:MaxScore(n, Stu); break;
default:
printf("谢谢使用,再见!\n");
system("exit");
}
} while (a != -1);
}
int main() {
SNode Stu[MAX];
int a = 1, i = 0, Score;
char Id[10],Name[8];
while(a!=-1){
cout << "请输入学生信息(顺序:学号,姓名,成绩):" << endl;
//cin >> Id >> Name >> Score;
//Stu[i] = Create(Id, Name, Score);
cin >> Stu[i].Id >> Stu[i].Name >> Stu[i].Score;
cout << "录入学生信息成功!" << endl;
i++;
cout << "是否要继续输入学生信息(确认请输入1,退出请输入-1)" << endl;
cin >> a;
system("cls");
}
manu(i,Stu);
}