完成学生信息管理系统
要求:定义一个班级,包括多个学生,以及记录实际学生的个数
#define MAX 100 //最大容量
//定义学生类型
struct Stu
{
char name[20];
int age;
double score;
};
//定义班级类型
struct Class
{
struct Stu student[MAX]; //存放学生的容器
int size; //实际人数
};
1> 完成班级的创建,创建时,需要传递班级实际人数
2> 完成班级学生的信息录入工作
3> 完成将班级学生按成绩进行降序排序工作
4> 输出班级中成绩最好和最差学生的信息
5> 完成信息的输出工作
6> 完成班级的销毁工作
要求:班级创建在堆区,尽量分文件编译完成
实现代码:
#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 caidan()
{
printf("————————菜单——————————\n");
printf("1.信息录入\n");
printf("2.信息输出\n");
printf("3.输出成绩最高和最低的学生信息\n");
printf("4.按成绩降序排序\n");
printf("0.退出并销毁班级信息\n");
printf("**************************************\n");
}
//定义struct Class* 类型的函数,用来申请空间
struct Class *create()
{
struct Class *ban = (struct Class *)malloc(sizeof(struct Class));
if (NULL == ban)
{
printf("创建失败\n");
return NULL;
}
//程序执行至此,表示内存申请成功
//给内存空间进行初始化
memset(ban, 0, sizeof(struct Class));
//将内存地址返回
return ban;
}
//学生信息的录入
void input(struct Class *ban)
{
if (NULL == ban)
{
printf("创建失败\n");
return;
}
printf("输入班级学生总人数:");
scanf("%d", &ban->size); // 使用 & 来引用 size
for (int i = 0; i < ban->size; i++)
{
printf("请输入第%d个学生的姓名:", i + 1);
scanf("%s", ban->student[i].name);
printf("请输入第%d个学生的年龄:", i + 1);
scanf("%d", &ban->student[i].age);
printf("请输入第%d个学生的成绩:", i + 1);
scanf("%lf", &ban->student[i].score); // 使用 %lf
}
printf("\n");
}
//学生信息的输出
void output(struct Class ban)
{
printf("姓名\t年龄\t成绩\n");
for (int i = 0; i < ban.size; i++)
{
printf("%s\t%d\t%.2lf\n", ban.student[i].name, ban.student[i].age, ban.student[i].score);
}
printf("\n");
}
//按成绩进行降序排序
void paixu(struct Class ban)
{
struct Stu small;
small = ban.student[0];
for (int i = 1; i < ban.size; i++)
{
for (int j = 0; j < ban.size - i; j++)
{
if (ban.student[j].score < ban.student[j + 1].score)
{
small = ban.student[j];
ban.student[j] = ban.student[j + 1];
ban.student[j + 1] = small;
}
}
}
printf("按成绩进行降序排序结果为:\n");
output(ban);
}
//输出最好和最差
void up_down(struct Class ban)
{
int max_index = 0, min_index = 0;
// 求最大
for (int i = 1; i < ban.size; i++)
{
if (ban.student[max_index].score < ban.student[i].score)
{
max_index = i;
}
}
// 求最小
for (int i = 1; i < ban.size; i++)
{
if (ban.student[min_index].score > ban.student[i].score)
{
min_index = i;
}
}
printf("成绩最好的是:%s\t%d\t%.2lf\n", ban.student[max_index].name, ban.student[max_index].age, ban.student[max_index].score);
printf("成绩最差的是:%s\t%d\t%.2lf\n", ban.student[min_index].name, ban.student[min_index].age, ban.student[min_index].score);
printf("\n");
}
//主函数
int main(int argc, char const *argv[])
{
int x = -1;
caidan();
struct Class *p = create();
while (1)
{
printf("请输入你要使用的功能:");
scanf("%d", &x);
printf("\n");
switch (x)
{
case 1:
{
input(p);
break;
}
case 2:
{
output(*p);
break;
}
case 3:
{
up_down(*p);
break;
}
case 4:
{
paixu(*p);
break;
}
case 0:
{
free(p);
printf("已销毁\n");
goto END;
}
}
}
END:
return 0;
}