【C语言】作业9 学生管理系统(分文件编译,班级创建在堆区 malloc申请)

1、完成学生信息管理系统

要求:定义一个班级,包括多个学生,以及记录实际学生的个数

1> 完成班级的创建,创建时,需要传递班级实际人数

2> 完成班级学生的信息录入工作

3> 完成将班级学生按成绩进行降序排序工作

4> 输出班级中成绩最好和最差学生的信息

5> 完成信息的输出工作

6> 完成班级的销毁工作

要求:班级创建在堆区,尽量分文件编译完成

//xsglxt.c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"student.h"

int main(int argc, char const *argv[])
{
    int n = 0;
    int size = 0;
    printf("请输入班级人数:");
    scanf("%d",&size);

    Class *class = createClass(size);
    while(1)
    {
        print_menu();
        printf("请输入需要实现的功能:");
        scanf("%d", &n);
        getchar();
        
        switch (n)
        {
        case 1:
            input_Student(class);
            break;
        
        case 2:
            jiangxu(class);
            outputall_Student(class);
            break;

        case 3:
            max_min_Student(class);
            break;

        case 4:
            outputall_Student(class);
            break;

        case 5:
            xiaohui(&class);
            break;
        
        case 0:
        goto END;

        default:
            break;
        }
    }
    END:
    return 0;
}

//hanshu.c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"student.h"

void print_menu()
{
    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");
}

Class *createClass(int size)
{
    if(size > MAX)
    {
        printf("班级人数超过最大容量\n\n");
        return NULL;
    }

    Class *class = (Class *)malloc(sizeof(Class));
    if(class == NULL)
    {
        printf("空间申请失败\n\n");
        return NULL;
    }

    class -> size = size;
    return class;
}

void input_Student(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);
        printf("\n");
    }
}

void jiangxu(Class *class)
{
    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;
            }
        }
    }
}

void max_min_Student(Class *class)
{
    Stu max = class->student[0];
    Stu min = class->student[0];
    for(int i = 0;i < class->size;i++)
    {
        if(max.score < class->student[i].score)
        {
            max = class->student[i];
        }
        if(min.score > class->student[i].score)
        {
            min = class->student[i];
        }
    }
    printf("成绩最高的学生:\n");
    printf("姓名\t年龄\t成绩\n");
    printf("%s\t%d\t%.2lf\n\n", max.name, max.age, max.score);

    printf("成绩最低的学生:\n");
    printf("姓名\t年龄\t成绩\n");
    printf("%s\t%d\t%.2lf\n\n", min.name, min.age, min.score);
}

void outputall_Student(Class *class)
{
    printf("姓名\t年龄\t成绩\n");
    for(int i = 0;i < class->size;i++)
    {
        printf("%s\t%d\t%.2lf\n",class->student[i].name,class->student[i].age,class->student[i].score);
    }
    printf("\n");
}

void xiaohui(Class **class)
{
    if(*class != NULL)
    {
        free(*class);
        *class = NULL;
        printf("完成班级销毁工作\n\n");
    }
}
//student.h
#ifndef STUDENT_H
#define STUDENT_H
#define MAX 100            //最大容量
//定义学生类型
typedef struct Stu
{
    char name[20];
    int age;
    double score;
}Stu;

//定义班级类型
typedef struct Class
{
    Stu student[MAX];       //存放学生的容器
    int size;                      //实际人数
}Class;

void print_menu();
Class *createClass(int size);                   //创建班级
void input_Student(Class *class);               //1.录入学生信息
void jiangxu(Class *class);                     //2.按成绩降序
void max_min_Student(Class *class);             //3.输出成绩最高和最低的学生信息
void outputall_Student(Class *class);           //4.输出所有学生信息
void xiaohui(Class **class);                    //5.销毁班级

#endif

输出结果如下:

 

 

2、思维导图整理

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值