完成学生信息管理系统
要求:定义一个班级,包括多个学生,以及记录实际学生的个数,班级创建在堆区,尽量分文件编译完成
1> 完成班级的创建,创建时,需要传递班级实际人数
2> 完成班级学生的信息录入工作
3> 完成将班级学生按成绩进行降序排序工作
4> 输出班级中成绩最好和最差学生的信息
5> 完成信息的输出工作
6> 完成班级的销毁工作
主函数:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "test.h"
int main(int argc,const char *argv[])
{
printf("\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\t6.退出\n");
int meau=0;
int size=0; //数组实际大小
struct Class * ptr = create();
if(NULL == ptr)
{
return -1;
}
while(1)
{
printf("请输入>>>");
scanf("%d",&meau);
switch(meau)
{
case 1:
shuru(ptr);
break;
case 2:
shuchu(ptr);
break;
case 3:
maximum(ptr);
break;
case 4:
sort(ptr);
break;
case 5:
xiaohui(&ptr);
break;
case 6:
exit(0);
default:
printf("输入错误,请重新输入\n");
break;
}
}
return 0;
}
test.h
#ifndef TEST_H
#define TEST_H
#define MAX 100 //最大容量
//定义学生类型
struct Stu
{
char name[20];
int age;
double score;
};
//定义班级类型
struct Class
{
struct Stu student[MAX]; //存放学生的容器
int size; //实际人数
};
void shuru(struct Class *p); //学生信息录入函数
void shuchu(const struct Class *p); //学生信息输出函数
void maximum(const struct Class *p); //求学生成绩最好和最差的学生的函数
void sort(struct Class *p); //排序函数
struct Class *create(); //申请内存函数
void xiaohui(struct Class **p); //释放空间函数
#endif
test.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 100
//定义学生类型
struct Stu
{
char name[20];
int age;
double score;
};
//定义班级类型
struct Class
{
struct Stu student[MAX]; //存放学生的容器
int size; //实际人数
};
void shuru(struct Class *p) //学生信息录入函数
{
if(NULL == p)
{
printf("error\n");
return ;
}
int n=0;
printf("要录入学生信息的个数>>");
scanf("%d",&n);
for(int i=p->size;i<n+p->size;i++)
{
printf("请输入第%d个学生的姓名:",i+1);
scanf("%s",p->student[i].name);
printf("请输入第%d个学生的年龄:",i+1);
scanf("%d",&p->student[i].age);
printf("请输入第%d个学生的成绩:",i+1);
scanf("%lf",&p->student[i].score);
printf("\n");
}
p->size+=n;
}
void shuchu(const struct Class *p) //学生信息输出函数
{
if(NULL == p)
{
printf("error\n");
return ;
}
printf("学生信息如下:\n");
printf("姓名\t年龄\t成绩\n");
for(int i=0;i<p->size;i++)
{
printf("%s\t%d\t%.2lf\n",p->student[i].name,p->student[i].age,p->student[i].score);
}
}
void maximum(const struct Class *p) //求学生成绩最好和最差的学生的函数
{
if(NULL == p)
{
printf("error\n");
return ;
}
int max=0,min=0;
for(int i=0;i<p->size;i++)
{
if(p->student[i].score>p->student[max].score)
{
max=i;
}
if(p->student[i].score<p->student[min].score)
{
min=i;
}
}
printf("成绩最好的学生是%s\n",p->student[max].name);
printf("成绩最差的学生是%s\n",p->student[min].name);
}
void sort(struct Class *p) //排序函数
{
if(NULL == p)
{
printf("error\n");
return ;
}
int n=p->size;
for(int i=1;i<n;i++)
{
for(int j=0;j<n-i;j++)
{
if(p->student[j].score<p->student[j+1].score)
{
struct Stu temp=p->student[j];
p->student[j]=p->student[j+1];
p->student[j+1]=temp;
}
}
}
}
struct Class *create() //申请内存函数
{
struct Class *ptr=(struct Class *)malloc(32*MAX+4);
if(NULL == ptr)
{
printf("申请失败\n");
return NULL;
}
//程序执行至此,表示内存申请成功
//给内存空间进行初始化
memset(ptr,0,32*MAX+4);
//将内存地址返回
return ptr;
}
void xiaohui(struct Class **p) //释放空间函数
{
if(NULL != *p)
{
free(*p); //释放空间
*p = NULL;
}
}
运行结果
思维导图