思维导图:
作业
完成学生信息管理系统
要求:定义一个班级,包括多个学生,以及记录实际学生的个数
完成班级的创建,创建时,需要传递班级实际人数
完成班级学生的信息录入工作
完成将班级学生按成绩进行降序排序工作
输出班级中成绩最好和最差学生的信息
完成信息的输出工作
完成班级的销毁工作
要求:班级创建在堆区,尽量分文件编译完成
代码:
d12.c//主函数
#include<stdio.h>
#include"test.h"
int main() //主函数
{
struct Class *cla = (struct Class *)malloc(10000000);
printf("请输入学生个数:");
scanf("%d",&(*cla).size);
printf("\n");
int menu = 0;
while(1)
{
print_menu();
printf("请输入:");
scanf("%d",&menu);
printf("\n");
switch(menu)
{
case 0:
{
goto end;
}
break;
case 1:
{
do_in(cla);
}
break;
case 2:
{
paixu(cla);
}
break;
case 3:
{
mvp(cla);
}
break;
case 4:
{
do_out(cla);
}
break;
case 5:
{
destroy(cla);
}
break;
default:printf("输入错误,请重新输入\n");
}
}
end:
return 0;
printf("\n");
return 0;
}
d12.h//头文件
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 100
struct Stu
{
char name[20];
int age;
double score;
};
struct Class
{
struct Stu student[MAX];
int size;
};
void print_menu() //定义目录函数
{
printf("\t/**************学生信息管理系统******************/\n");
printf("\t\t1、学生信息录入\n");
printf("\t\t2、按成绩排序\n");
printf("\t\t3、成绩最好和最差的学生信息\n");
printf("\t\t4、查看学生信息\n");
printf("\t\t5、学生信息销毁\n");
printf("\t\t0、退出\n");
}
void do_in(struct Class *cla) //定义学生信息输入函数
{
for(int i=0;i<(*cla).size;i++)
{
printf("请输入第%d个学生的姓名:",i+1);
scanf("%s",&(*cla).student[i].name);
printf("请输入第%d个学生的年龄:",i+1);
scanf("%d",&(*cla).student[i].age);
printf("请输入第%d个学生的成绩:",i+1);
scanf("%lf",&(*cla).student[i].score);
printf("\n");
}
printf("录入成功\n");
printf("\n");
}
void paixu(struct Class *cla)
{
for(int i=1;i<(*cla).size;i++)
{
for(int j=0;j<5-i;j++)
{
if((*cla).student[j].score < (*cla).student[j+1].score)
{
struct Stu temp = (*cla).student[j];
(*cla).student[j] = (*cla).student[j+1];
(*cla).student[j+1] = temp;
}
}
}
printf("降序后的结果为:\n");
printf("姓名\t年龄\t成绩\n");
for(int i=0;i<(*cla).size;i++)
{
printf(" %s\t%d\t%f\n",(*cla).student[i].name, (*cla).student[i].age,(*cla).student[i].score);
}
printf("\n");
}
void mvp(struct Class *cla) //定义输出最好最差学生函数
{
int max=0;
for(int i=1;i<(*cla).size;i++)
{
if((*cla).student[max].score < (*cla).student[i].score)
{
max = i;
}
}
printf("成绩最好的学生为:\n");
printf("姓名\t年龄\t成绩\n");
printf(" %s\t%d\t%f\n",(*cla).student[max].name, (*cla).student[max].age,(*cla).student[max].score);
int min=0;
for(int i=1;i<(*cla).size;i++)
{
if((*cla).student[min].score > (*cla).student[i].score)
{
min = i;
}
}
printf("成绩最差的学生为:\n");
printf("姓名\t年龄\t成绩\n");
printf(" %s\t%d\t%f\n",(*cla).student[min].name, (*cla).student[min].age,(*cla).student[min].score);
printf("\n");
}
void do_out(struct Class *cla)
{
printf("姓名\t年龄\t成绩\n");
for(int i=0;i<(*cla).size;i++)
{
printf(" %s\t%d\t%f\n",(*cla).student[i].name, (*cla).student[i].age,(*cla).student[i].score);
}
printf("\n");
}
void destroy(struct Class *cla)
{
//释放内存
if(NULL != cla)
{
free(cla); //释放空间
cla = NULL;
}
printf("\n");
}