题目
完成学生信息管理系统
要求:定义一个班级,包括多个学生,以及记录实际学生的个数
- 完成班级的创建,创建时,需要传递班级实际人数
- 完成班级学生的信息录入工作
- 完成将班级学生按成绩进行降序排序工作
- 输出班级中成绩最好和最差学生的信息
- 完成信息的输出工作
- 完成班级的销毁工作
- 要求:班级创建在堆区
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 100 //最大容量
//定义申请的空间函数
char *banji(int renshu)
{
char *ptr = (char *)malloc(sizeof(char) * renshu);
if (NULL == ptr)
{
printf("申请失败\n");
return NULL;
}
memset(ptr, 0, sizeof(char) * renshu);
return ptr;
}
struct Xinxi
{
char xuehao[20];
char name[20];
char xingbie[20];
int cheng;
};
//定义班级类型
struct Class
{
struct Xinxi student[MAX];
int size;
};
int main()
{
char *p=NULL;
struct Class haha[100];
memset(haha, 0, sizeof(haha));
struct Xinxi xinxi[100];
memset(xinxi, 0, sizeof(xinxi));
int menu = 0;
while (1)
{
printf("\t\t======1.创建班级=======================\n");
printf("\t\t======2.完成学生的信息录入==============\n");
printf("\t\t======3.按成绩对班级学生进行降序排序=====\n");
printf("\t\t======4.输出成绩最高和最低学生的信息=====\n");
printf("\t\t======5.完成信息的输出==================\n");
printf("\t\t======6.销毁班级=======================\n");
printf("\t\t======0.退出===========================\n");
printf("请输入>>>");
scanf("%d", &menu);
getchar();
switch (menu)
{
case 1: //调用创建函数 创建一个班级
{
printf("输入班级实际人数:");
scanf("%d", &haha->size);
char *p = banji(haha->size);
if (NULL == p)
{
return -1;
}
printf("创建成功!\n");
}
break;
case 2: //学生信息的录入
{
printf("班级的人数为:%d\n", haha->size);
for (int i = 0; i < haha->size; i++)
{
printf("请输入第%d个学生的学号:", i + 1);
scanf("%s", xinxi[i].xuehao);
printf("请输入第%d个学生的姓名:", i + 1);
scanf("%s", xinxi[i].name);
printf("请输入第%d个学生的性别:", i + 1);
scanf("%s", xinxi[i].xingbie);
printf("请输入第%d个学生的成绩:", i + 1);
scanf("%d", &xinxi[i].cheng);
printf("\n");
}
printf("录入成功!\n");
}
break;
case 3: //按成绩降序
{
printf("按照成绩对学生进行降序排序\n");
struct Xinxi big;
struct Xinxi small;
for (int i = 1; i < haha->size; i++)
{
for (int j = 0; j < haha->size - i; j++)
{
if (xinxi[j].cheng < xinxi[j + 1].cheng)
{
small = xinxi[j];
xinxi[j] = xinxi[j + 1];
xinxi[j + 1] = small;
}
}
}
printf("排序成功!\n");
}
break;
case 4:
{
int maxi = 0;
int mini = 0;
for (int i = 0; i < haha->size; i++)
{
if (xinxi[i].cheng > xinxi[maxi].cheng)
{
maxi = i;
}
}
for (int i = 0; i < haha->size; i++)
{
if (xinxi[i].cheng < xinxi[mini].cheng)
{
mini = i;
}
}
printf("输出成绩最高和最低的学生的信息:\n");
printf("%s\t%s\t%s\t%d\n", xinxi[maxi].xuehao, xinxi[maxi].name, xinxi[maxi].xingbie, xinxi[maxi].cheng);
printf("%s\t%s\t%s\t%d\n", xinxi[mini].xuehao, xinxi[mini].name, xinxi[mini].xingbie, xinxi[mini].cheng);
}
break;
case 5: //完成信息的输出工作
{
printf("输出学生的信息:\n");
printf("学号\t姓名\t性别\t成绩\n");
for (int i = 0; i < haha->size; i++)
{
printf("%s\t%s\t%s\t%d\n", xinxi[i].xuehao, xinxi[i].name, xinxi[i].xingbie, xinxi[i].cheng);
}
}
break;
case 6: //销毁班级
{
for(int i=0;i<haha->size;i++)
{
*xinxi[i].xuehao=0;
*xinxi[i].name=0;
*xinxi[i].xingbie=0;
xinxi[i].cheng=0;
}
}
break;
case 0:
goto end;
default:
printf("输入错误,重新输入:\n");
}
}
end:
return 0;
}
运行截图: