作业:
函数声明:
#define MAX 100
int MENU();
struct Class *create();
void input(struct Class *ptr);
void output(const struct Class *ptr);
void max_min(const struct Class *ptr);
void stu_sort(struct Class *ptr);
void destroy(struct Class **ptr);
主函数:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "d26.h"
#define MAX 100
struct Stu
{
char name[20];
int age;
double score;
};
struct Class
{
struct Stu student[MAX];
int size;
};
/*************************主函数*******************/
int main(int argc, char const *argv[])
{
struct Class *class_ptr = NULL;
while (1)
{
switch (MENU())
{
case 1:
class_ptr = create();
break;
case 2:
input(class_ptr);
break;
case 3:
output(class_ptr);
break;
case 4:
max_min(class_ptr);
break;
case 5:
stu_sort(class_ptr);
break;
case 6:
destroy(&class_ptr);
break;
case 0:
exit(0);
default:
printf("错误输入\n");
}
}
return 0;
}
函数:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAX 100
struct Stu
{
char name[20];
int age;
double score;
};
struct Class
{
struct Stu student[MAX];
int size;
};
//菜单函数
int MENU()
{
int n;
printf("————————————————————————————————————————————\n");
printf("\t<<<<<<学生管理系统>>>>>>\n");
printf("\t******1>>创建班级******\n");
printf("\t******2>>信息录入******\n");
printf("\t******3>>查看信息******\n");
printf("\t******4>>成绩最值******\n");
printf("\t******5>>信息排序******\n");
printf("\t******6>>班级销毁******\n");
printf("\t******0>>退出系统******\n");
printf("————————————————————————————————————————————\n");
printf(">>> ");
scanf("%d",&n);
getchar();
return n;
}
//创建班级
struct Class *create()
{
struct Class *ptr = (struct Class *)malloc(sizeof(struct Class));
if(NULL == ptr)
{
printf("创建失败\n");
return NULL;
}
memset(ptr, 0, sizeof(struct Class));
return ptr;
}
//信息录入
void input(struct Class *ptr)
{
if(NULL == ptr)
{
printf("录入失败\n");
return ;
}
int n=0;
printf("请输入录入学生信息个数:");
scanf("%d",&n);
for (int i = ptr->size; i < ptr->size+n; i++)
{
printf("请输入第%d个学生的名字:",i+1);
scanf("%s",ptr->student[i].name);
printf("请输入第%d个学生的年龄:",i+1);
scanf("%d",&(ptr->student[i].age));
printf("请输入第%d个学生的成绩:",i+1);
scanf("%lf",&(ptr->student[i].score));
putchar(10);
}
ptr->size+=n;
printf("*******完成录入*********\n");
}
//查看信息
void output(const struct Class *ptr)
{
if(NULL == ptr)
{
printf("error\n");
return ;
}
printf("姓名\t年龄\t成绩\n");
for (int i = 0; i < ptr->size; i++)
{
printf("%s\t%d\t%.2f\n",ptr->student[i].name,ptr->student[i].age,ptr->student[i].score);
}
putchar(10);
}
//成绩最值
void max_min(const struct Class *ptr)
{
if(NULL == ptr)
{
printf("error\n");
return ;
}
int maxi=0;
int mini=0;
for (int i = 0; i < ptr->size; i++)
{
if (ptr->student[maxi].score < ptr->student[i].score)
{
maxi=i;
}
if (ptr->student[mini].score > ptr->student[i].score)
{
mini=i;
}
}
printf("成绩最高的学生信息为:\n");
printf("%s\t%d\t%.2f\n",ptr->student[maxi].name,ptr->student[maxi].age,ptr->student[maxi].score);
printf("成绩最低的学生信息为:\n");
printf("%s\t%d\t%.2f\n",ptr->student[mini].name,ptr->student[mini].age,ptr->student[mini].score);
}
//信息排序
void stu_sort(struct Class *ptr)
{
if(NULL == ptr)
{
printf("error\n");
return ;
}
for(int i=1; i<ptr->size; i++)
{
for(int j=0; j<ptr->size-i; j++)
{
if(ptr->student[j].score < ptr->student[j+1].score)
{
struct Stu temp = ptr->student[j];
ptr->student[j] = ptr->student[j+1];
ptr->student[j+1] = temp;
}
}
}
printf("排序完成\n");
output(ptr);
}
void destroy(struct Class **ptr)
{
//释放内存
if(NULL != *ptr)
{
free(*ptr); //释放空间
*ptr = NULL;
}
}
结果图:
分文件编译,创建班级:
信息录入:
查看信息:
成绩最值:
信息排序:
班级销毁:
思维导图: