第12章实验1:学生成绩管理系统v5.0 某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入)。参考学生成绩管理系统v4.0,定义结构体类型,用结构体数组作函数参数,编程实现如下菜单驱动的学生成绩管理系统: (1)录入每个学生的学号、姓名和各科考试成绩; (2)计算每门课程的总分和平均分; (3)计算每个学生的总分和平均分; (4)按每个学生的总分由高到低排出名次表; (5)按每个学生的总分由低到高排出名次表; (6)按学号由小到大排出成绩表; (7)按姓名的字典
时间: 2023-05-31 18:18:04 浏览: 699
### 回答1:
此题是要求实现一个学生成绩管理系统v5.0,某班有最多不超过30人(具体人数由键盘输入),参加期末考试,最多不超过6门(具体门数由键盘输入)。参考学生成绩管理系统v4.0,定义结构体类型,用结构体数组作参数,编程实现如下菜单驱动的学生成绩管理系统:
(1)录入每个学生的学号、姓名和各科考试成绩;
(2)计算每门课的总分和平均分;
(3)计算每个学生的总分和平均分;
(4)按每个学生的总分由高到低排出名次表;
(5)按每个学生的总分由低到高排出名次表;
(6)按学号从小到大排出成绩表;
(7)按姓名的字母顺序排出成绩表;
### 回答2:
本实验要求编写一个学生管理系统,其中包括录入学生信息、统计成绩、排名等多个功能,在语言上要求使用C语言。该系统会有以下功能(1)录入学生信息(2)统计各科总分平均分(3)统计每个学生的总分和平均分(4)将学生成绩按总分高低排名(5)将学生成绩按总分低高排名(6)按学号由小到大排序(7)按姓名字典排出成绩表。
为了将学生的信息进行管理,我们需要定义结构体类型。可以定义如下:
typedef struct student{
char id[10]; //学号
char name[20]; //姓名
float score[6]; //六门课程的成绩
float total; //总成绩
float average; //平均成绩
}Student;
然后根据该结构体类型定义一个包含最多30个元素的结构体数组,以表示班上所有学生的信息。其中学号和姓名都为字符串类型,成绩为浮点类型,总成绩和平均成绩也为浮点类型。
为了实现录入每个学生的学号、姓名和各科考试成绩,我们可以定义一个函数,用于从键盘输入信息并将其存储在结构体数组中。函数定义如下:
void input(Student stu[], int n);
该函数有两个参数,第一个是结构体数组,第二个是班级人数。函数的主要功能是从键盘输入每个学生的学号、姓名和各科考试成绩,然后将其存储在结构体数组中。
为了计算每门课程的总分和平均分,我们可以定义一个函数,用于遍历结构体数组并计算每门课程的总分和平均分。函数定义如下:
void courseTotal(Student stu[], int n);
该函数有两个参数,第一个是结构体数组,第二个是班级人数。函数的主要功能是遍历结构体数组并计算每门课程的总分和平均分。
为了计算每个学生的总分和平均分,我们可以定义一个函数,用于遍历结构体数组并计算每个学生的总分和平均分。函数定义如下:
void studentTotal(Student stu[], int n);
该函数有两个参数,第一个是结构体数组,第二个是班级人数。函数的主要功能是遍历结构体数组并计算每个学生的总分和平均分。
为了排成绩表,我们可以定义一个函数,用于按总分的高低或低高进行排序。函数定义如下:
void sortByTotalScore(Student stu[], int n, int flag);
该函数有三个参数,第一个是结构体数组,第二个是班级人数,第三个是排序标志。当排序标志为1时,按总分由高到低排名;当排序标志为-1时,按总分由低到高排名。
为了按学号由小到大排序,我们可以定义一个函数,用于按照学号对结构体数组进行排序。函数定义如下:
void sortByNum(Student stu[], int n);
该函数有两个参数,第一个是结构体数组,第二个是班级人数。函数的主要功能是按照学号由小到大对结构体数组进行排序。
最后,为了按姓名字典排出成绩表,我们可以定义一个函数,用于按照姓名的字典顺序对结构体数组进行排序。函数定义与sortByNum函数类似,这里就不再赘述。
以上即为本次学生成绩管理系统v5.0的主要内容和功能,实现方式主要是通过定义结构体类型和结构体数组,然后再通过各种函数对这些数据进行加工和处理。该系统可以帮助教师更方便地管理学生成绩,同时也可以促进学生们更好地了解自己的成绩情况。
### 回答3:
第12章实验1:学生成绩管理系统v5.0的编程任务是实现一个学生成绩管理系统,该系统可以管理一个班级最多30人的成绩,最多不超过6门课程。实验要求我们定义结构体类型,用结构体数组作函数参数,并编程实现以下功能:
1.录入每个学生的学号、姓名和各科考试成绩;
2.计算每门课程的总分和平均分;
3.计算每个学生的总分和平均分;
4.按每个学生的总分由高到低排出名次表;
5.按每个学生的总分由低到高排出名次表;
6.按学号由小到大排出成绩表;
7.按姓名的字典顺序排出成绩表。
首先,我们需要定义一个结构体类型Student,用于存储每个学生的学号、姓名和各科考试成绩。可以定义如下:
struct Student{
int id; //学号
char name[20]; //姓名
float score[6]; //各科考试成绩
float totalScore; //总分
float averageScore; //平均分
};
然后,我们需要用结构体数组保存每个学生的信息,并实现以上功能。由于本次实验中的功能较多,我们可以编写多个函数来实现不同的功能。具体实现如下:
//录入学生成绩
void inputScore(Student *stuArr, int n){ //stuArr为结构体数组,n为学生人数
for(int i=0; i<n; i++){
printf("请输入第%d个学生的学号:", i+1);
scanf("%d", &stuArr[i].id);
printf("请输入第%d个学生的姓名:", i+1);
scanf("%s", stuArr[i].name);
for(int j=0; j<6; j++){
printf("请输入第%d个学生的第%d门课程成绩:", i+1, j+1);
scanf("%f", &stuArr[i].score[j]);
}
}
}
//计算每门课程的总分和平均分
void calcCourseScore(Student *stuArr, int n){ //stuArr为结构体数组,n为学生人数
float totalScore[6]; //各门课程的总分
float averageScore[6]; //各门课程的平均分
//初始化总分和平均分
for(int i=0; i<6; i++){
totalScore[i] = 0;
averageScore[i] = 0;
}
//计算总分和平均分
for(int i=0; i<n; i++){
for(int j=0; j<6; j++){
totalScore[j] += stuArr[i].score[j];
}
}
for(int i=0; i<6; i++){
averageScore[i] = totalScore[i] / n;
printf("第%d门课程的总分为%.2f,平均分为%.2f\n", i+1, totalScore[i], averageScore[i]);
}
}
//计算每个学生的总分和平均分
void calcStudentScore(Student *stuArr, int n){ //stuArr为结构体数组,n为学生人数
for(int i=0; i<n; i++){
float total = 0;
for(int j=0; j<6; j++){
total += stuArr[i].score[j];
}
stuArr[i].totalScore = total; //计算总分
stuArr[i].averageScore = total / 6; //计算平均分
}
}
//按每个学生的总分由高到低排出名次表
void sortStudentScoreDesc(Student *stuArr, int n){ //stuArr为结构体数组,n为学生人数
for(int i=0; i<n; i++){
for(int j=i+1; j<n; j++){
if(stuArr[i].totalScore < stuArr[j].totalScore){
Student temp = stuArr[i];
stuArr[i] = stuArr[j];
stuArr[j] = temp;
}
}
}
printf("按每个学生的总分由高到低排出名次表:\n");
for(int i=0; i<n; i++){
printf("第%d名:%s,总分为%.2f\n", i+1, stuArr[i].name, stuArr[i].totalScore);
}
}
//按每个学生的总分由低到高排出名次表
void sortStudentScoreAsc(Student *stuArr, int n){ //stuArr为结构体数组,n为学生人数
for(int i=0; i<n; i++){
for(int j=i+1; j<n; j++){
if(stuArr[i].totalScore > stuArr[j].totalScore){
Student temp = stuArr[i];
stuArr[i] = stuArr[j];
stuArr[j] = temp;
}
}
}
printf("按每个学生的总分由低到高排出名次表:\n");
for(int i=0; i<n; i++){
printf("第%d名:%s,总分为%.2f\n", i+1, stuArr[i].name, stuArr[i].totalScore);
}
}
//按学号由小到大排出成绩表
void sortScoreByid(Student *stuArr, int n){ //stuArr为结构体数组,n为学生人数
for(int i=0; i<n; i++){
for(int j=i+1; j<n; j++){
if(stuArr[i].id > stuArr[j].id){
Student temp = stuArr[i];
stuArr[i] = stuArr[j];
stuArr[j] = temp;
}
}
}
printf("按学号由小到大排出成绩表:\n");
for(int i=0; i<n; i++){
printf("学号:%d,姓名:%s,总分为:%.2f\n", stuArr[i].id, stuArr[i].name, stuArr[i].totalScore);
}
}
//按姓名的字典顺序排出成绩表
void sortScoreByname(Student *stuArr, int n){ //stuArr为结构体数组,n为学生人数
for(int i=0; i<n; i++){
for(int j=i+1; j<n; j++){
if(strcmp(stuArr[i].name, stuArr[j].name) > 0){
Student temp = stuArr[i];
stuArr[i] = stuArr[j];
stuArr[j] = temp;
}
}
}
printf("按姓名的字典顺序排出成绩表:\n");
for(int i=0; i<n; i++){
printf("姓名:%s,学号:%d,总分为:%.2f\n", stuArr[i].name, stuArr[i].id, stuArr[i].totalScore);
}
}
最后,我们可以在main函数中实现菜单驱动,让用户选择需要执行的功能。主要代码如下:
int main(){
int n, choice;
printf("请输入学生人数(最多不超过30人):");
scanf("%d", &n);
Student stuArr[30]; //定义结构体数组
inputScore(stuArr, n); //录入学生成绩
while(true){
printf("\n请选择要执行的功能:\n");
printf("1.计算每门课程的总分和平均分\n");
printf("2.计算每个学生的总分和平均分\n");
printf("3.按每个学生的总分由高到低排出名次表\n");
printf("4.按每个学生的总分由低到高排出名次表\n");
printf("5.按学号由小到大排出成绩表\n");
printf("6.按姓名的字典顺序排出成绩表\n");
printf("7.退出\n");
scanf("%d", &choice);
switch(choice){
case 1:
calcCourseScore(stuArr, n);
break;
case 2:
calcStudentScore(stuArr, n);
break;
case 3:
sortStudentScoreDesc(stuArr, n);
break;
case 4:
sortStudentScoreAsc(stuArr, n);
break;
case 5:
sortScoreByid(stuArr, n);
break;
case 6:
sortScoreByname(stuArr, n);
break;
case 7:
exit(0);
default:
printf("输入有误,请重新输入!\n");
break;
}
}
return 0;
}
通过以上代码实现,我们可以方便地管理学生成绩信息,对于老师们来说,可以更加方便地管理自己所带的班级,对于学生来说,也可以更加方便地了解自己的学习情况。
阅读全文