一、作业
1.主程序
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"my.h"
#define MAX 20
int main(int argc,char const *argv)
{
//struct Class banji;//定义一个班级
int num =0;
printf("请输入该班级人数:\n");
scanf("%d",&num);
struct Class *banji = create(num);//调用函数创建一个班级学生管理系统
int menu = 0;//定义菜单元素
//使用菜单函数
while(1)
{
me_nu();
printf("请输入:");
scanf("%d",&menu);
getchar();
//菜单
switch(menu)
{
case 1:
{
student_1(banji);
}
break;
case 2:
{
student_2(banji);
}
break;
case 3:
{
student_3(banji);
}
break;
case 4:
{
student_4(banji);
}
break;
case 5:
{
destroy(banji);
banji = NULL;
}
break;
case 0:
{
goto END;
}
default:
printf("您输入的内容有误,请重新输入\n");
}
}
END:
return 0;
}
2.源文件
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 20
//结构体输入学生信息
struct Stu
{
char name[20]; //姓名
int age; //年龄
int score; //成绩
};
//结构体输入班级信息
struct Class
{
struct Stu stu_dent[MAX];
int num;
};
//菜单函数
void me_nu(void)
{
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======0:退出\n");
}
//定义函数创建一个可以容纳整个系统的空间在堆区
struct Class *create(int num)
{
//在堆区申请1个struct class类型的空间大小
struct Class *banji = (struct Class*)malloc(sizeof(struct Class));
//申请一个stru stu类型的空间大小
if(NULL == banji)
{
printf("申请失败\n");
return NULL;
}
//程序执行至此表示内存申请成功
//对内存空间进行初始化
memset(banji,0,sizeof(struct Class));
banji->num = num;
//返回内存地址给主函数
return banji;
}
//学生信息录入函数
void student_1(struct Class *banji)
{
for(int i=0;i<banji->num;i++)
{
printf("请输入第%d名学生的姓名\n",i+1);
scanf("%s",banji->stu_dent[i].name);
printf("请输入第%d名学生的年龄\n",i+1);
scanf("%d",&banji->stu_dent[i].age);
printf("请输入第%d名学生的成绩\n",i+1);
scanf("%d",&banji->stu_dent[i].score);
}
printf("录入成功\n");
}
//按成绩降序排序
void student_2(struct Class *banji)
{
for(int i = 1;i<banji->num;i++)
{
for(int j=0;j<banji->num-i;j++)
{
if(banji->stu_dent[j].score<banji->stu_dent[j+1].score)
{
//交换三部曲
struct Stu temp = banji->stu_dent[j];
banji->stu_dent[j] = banji->stu_dent[j+1];
banji->stu_dent[j+1] = temp;
}
}
}
printf("排序成功\n");
}
//成绩最好和最差的学生成绩
void student_3(const struct Class *banji)
{
int best = banji->stu_dent[0].score;
int worst = banji->stu_dent[0].score;
int count1=0;
int count2 = 0;
//将第一位学生当做最值
for(int i=0;i<banji->num;i++)
{
if(best<banji->stu_dent[i].score)
{
best = banji->stu_dent[i].score;
count1 = i;
}
}
for(int i=0;i<banji->num;i++)
{
if(worst>banji->stu_dent[i].score)
{
worst = banji->stu_dent[i].score;
count2 = i;
}
}
printf("成绩最好的学生信息为:%s\t%d%d\n",banji->stu_dent[count1].name,banji->stu_dent[count1].age,banji->stu_dent[count1].score);
printf("成绩最差的学生信息为:%s\t%d\t%d\n",banji->stu_dent[count2].name,banji->stu_dent[count2].age,banji->stu_dent[count2].score);
}
//学生信息输出
void student_4(const struct Class *banji)
{
printf("排序后的学生信息如下:\n");
printf("姓名\t年龄\t成绩\n");
for(int i=0;i<banji->num;i++)
{
printf("%s\t%d\t%d\n",banji->stu_dent[i].name,banji->stu_dent[i].age,banji->stu_dent[i].score);
}
}
//定义函数销毁该班级
void destroy(struct Class *banji)
{
if(NULL != banji)
{
free(banji);
banji = NULL;
}
printf("销毁成功\n");
}
3.函数声明
#ifndef TEST_H
#define TEST_H
void me_nu(void);
struct Class *create(int num);
void student_1(struct Class *p);
void student_2(struct Class *p);
void student_3(struct Class *p);
void student_4(struct Class *p);
void destroy(struct Class *p);
#endif