学生成绩管理系统某班有最多不超过30人(具体人数由键盘输入)参加某门课程的考试,用一维数组编程实现如下学生成绩管理:
(1)录入每个学生的学号、姓名和考试成绩;
(2)按学号查询学生的姓名及考试成绩;
(3)按姓名查询学生的学号及考生成绩。
(4)按成绩由高到低排出名次表。
(5)按学号由小到大排出名次表。
要求:1、进行模块化设计;
2、每次排序后同时输出学号、姓名和考试成绩;
题解代码:(此代码还在纠错中,有发现者滴我)
#include<stdio.h>
#include<string.h>
#define N 30
typedef struct{//类型定义结构体
int Id;
char Name[N];
float Score;
}Student;//结构体名
void is_Scanf(Student students[],int n);
void is_Printf(Student students[],int n);
void is_id_Incert(Student students[],int n);
void is_name_Incert(Student students[],int n);
void is_score_Sort(Student students[],int n);
void is_id_Sort(Student students[],int n);
int main()
{
printf("***********学生成绩管理系统****************\n");
int i,choice,n;
printf("请输入学生总人数(n<=30):");
scanf("%d",&n) ;//n<=30
Student students[n];
is_Scanf(students,n);
is_Printf(students,n);
while(1)
{
printf("请选择操作:\n");
printf("1-按学号查询学生的姓名和考试成绩:\n");
printf("2-按姓名查询学生的学号和考试成绩:\n");
printf("3-按成绩由高到低排出名次表:\n");
printf("4-按学号由大到小排出成绩表:\n");
printf("5-退出\n");
scanf("%d",&choice);
switch(choice)
{
case 1:is_id_Incert(students,n);break;
case 2:is_name_Incert(students,n);break;
case 3:is_score_Sort(students,n);break;
case 4:is_id_Sort(students,n);break;
case 5:return 0;
default:printf("选择无效,请重新输入!");
}
}
return 0;
}
void is_Scanf(Student students[],int n)
{
int i;
printf("输入学生学号、姓名和成绩为:\n");
for(i=0;i<n;i++)
{
scanf("%d %s %.2f \n",&students[i].Id,students[i].Name,&students[i].Score);
return;
}
}
void is_Printf(Student students[],int n)
{
int i;
printf("得到的学生学号、姓名和成绩为:\n");
for(i=0;i<n;i++)
{
printf("%d %s %.2f \n",students[i].Id,students[i].Name,students[i].Score);
return;
}
}
void is_id_Incert(Student students[],int n)
{
int i,id;
printf("请输入要查询的学号:");
scanf("%d",&id);
for(i=0;i<n;i++)
{
if(students[i].Id==id)
{
printf("学号:%d,姓名:%s,成绩:%.2f \n",students[i].Id,students[i].Name,students[i].Score);
return;
}
}
printf("未找到该学号的学生!");
}
void is_name_Incert(Student students[],int n)
{
int i;
char name[N];
printf("请输入要查询的姓名:");
scanf("%s",name);
for(i=0;i<n;i++)
{
if(strcmp(students[i].Name,name)==0)//strcmp(m,n)比较字符串m和n,相等返回0;
{
printf("学号:%d,姓名:%s,成绩:%.2f \n",students[i].Id,students[i].Name,students[i].Score);
return;
}
}
printf("未找到该姓名的学生!");
}
void is_score_Sort(Student students[],int n)
{
int i,j,temp;
printf("成绩由高到低排出名次表为:\n");
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(students[j].Score < students[j+1].Score)
{
Student temp=students[j];
students[j]=students[j+1];
students[j+1]=temp;
}
}
printf("学号:%d,姓名:%s,成绩:%.2f \n",students[i].Id,students[i].Name,students[i].Score);
return;
}
}
void is_id_Sort(Student students[],int n)
{
int i,j,temp;
printf("学号由大到小排出成绩表为:\n");
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if (students[j].Id > students[j+1].Id)
{
Student temp = students[j];
students[j] = students[j+1];
students[j+1] = temp;
}
}
printf("学号:%d,姓名:%s,成绩:%.2f \n",students[i].Id,students[i].Name,students[i].Score);
return;
}
}