完成学生信息管理系统
要求:定义一个班级,包括多个学生,以及记录实际学生的个数
Plain Text
自动换行
#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> 完成班级的销毁工作
要求:班级创建在堆区,尽量分文件编译完成
代码:
main:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "head.h"
int main(int argc, const char *argv[])
{
//菜单
int menu =0;
//创建一个班级
Class *class = create();
if(NULL == class)
{
return -1;
}
while(1)
{
create_menu(); //创建菜单
printf("请输入操作码:");
scanf("%d",&menu);
getchar();
switch(menu)
{
case 1:
{
input(class); //录入
}
break;
case 2:
{
sort(class); //排序
}
break;
case 3:
{
maxmin(class); //成绩最好最差的学生
}
break;
case 4:
{
output(class); //输出
}
break;
case 5:
{
destroy(class); //销毁
class = NULL;
}
break;
case 0:goto END;
default:printf("Error!\n");
}
}
END:
return 0;
}
hs.c:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 100 //最大容量
//定义学生类型
typedef struct Stu
{
char name[20];
int age;
double score;
}Stu,* Stu_str;
//定义班级类型
typedef struct Class
{
struct Stu student[MAX]; //存放学生的容器
int size; //实际人数
}Class,* Class_str;
//定义创建菜单函数
void create_menu()
{
printf("\n\t\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");
}
//定义创建班级函数
Class *create()
{
//申请内存
Class *class = (Class *)malloc(sizeof(Class));
if(NULL == class)
{
printf("申请失败!");
return NULL;
}
printf("请输入班级学生个数:");
scanf("%d",&class->size);
//内存空间初始化
memset(class,0,sizeof(class));
//返回内存地址
return class;
}
//定义按成绩把班级学生信息降序函数
void sort(Class *class)
{
if(NULL == class)
{
printf("班级不存在!");
return;
}
for(int i=1;i<class->size;i++)
{
for(int j=0;j<class->size - i;j++)
{
if(class->student[j].score < class->student[j+1].score)
{
Stu temp = class->student[j];
class->student[j] = class->student[j+1];
class->student[j+1] = temp;
}
}
}
printf("排序成功!\n");
}
//定义班级学生信息录入函数
void input(Class *class)
{
for(int i=0; i<class->size; i++)
{
printf("请输入第%d个学生的名字:", i+1);
scanf("%s", class->student[i].name);
printf("请输入第%d个学生的年龄:", i+1);
scanf("%d", &class->student[i].age);
printf("请输入第%d个学生的分数:", i+1);
scanf("%lf", &class->student[i].score);
putchar(10);
}
printf("录入成功!\n");
}
//定义展示成绩最好和最差学生信息函数
void maxmin(Class *class)
{
if(NULL == class)
{
printf("班级不存在!");
return;
}
int max = 0,maxi = 0,min = 0,mini = 0;
max = class->student[0].score;
min = class->student[0].score;
for(int i=0;i<class->size;i++)
{
if(max < class->student[i].score)
{
max = class->student[i].score;
maxi = i;
}
if(min > class->student[i].score)
{
min = class->student[i].score;
mini = i;
}
}
printf("班级成绩最好学生信息如下:\n");
printf("\t姓名\t年龄\t分数\n\t%s\t%d\t%lf\n", \
class->student[maxi].name, class->student[maxi].age, class->student[maxi].score);
printf("班级成绩最差学生信息如下:\n");
printf("\t姓名\t年龄\t分数\n\t%s\t%d\t%lf\n", \
class->student[mini].name, class->student[mini].age, class->student[mini].score);
}
//定义展示班级学生信息函数
void output(Class *class)
{
if(NULL == class)
{
printf("班级不存在!");
return;
}
printf("班级学生信息如下:\n");
for(int i=0; i<class->size; i++)
{
printf("\t姓名\t年龄\t分数\n\t%s\t%d\t%lf\n", \
class->student[i].name, class->student[i].age, class->student[i].score);
}
}
//定义销毁班级函数
void destroy(Class *class)
{
//释放内存
if(NULL != class)
{
free(class); //释放空间
class = NULL;
}
}
head.h:
#ifndef HEAD_H
#define HEAD_H
#define MAX 100 //最大容量
//定义学生类型
typedef struct Stu
{
char name[20];
int age;
double score;
}Stu,* Stu_str;
//定义班级类型
typedef struct Class
{
struct Stu student[MAX]; //存放学生的容器
int size; //实际人数
}Class,* Class_str;
void create_menu(); //函数声明
Class *create();
void input(Class *class);
void sort(Class *class);
void maxmin(Class *class);
void output(Class *class);
void destroy(Class *class);
#endif
运行结果:
思维导图: