Day 12

思维导图:

作业

完成学生信息管理系统

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

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

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

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

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

完成信息的输出工作

完成班级的销毁工作

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

代码:

d12.c//主函数

#include<stdio.h>
#include"test.h"

int main()      //主函数
{

    struct Class *cla = (struct Class *)malloc(10000000); 

    printf("请输入学生个数:");
    scanf("%d",&(*cla).size);
    printf("\n");

    int menu = 0;
    while(1)
    {
        print_menu();
        printf("请输入:");
        scanf("%d",&menu);
        printf("\n");

        switch(menu)
        {
            case 0:
                        {
                            goto end;
                        }
                        break;
            case 1:
                        {
                            do_in(cla);
                        }
                        break;
            case 2:
                        {
                            paixu(cla);
                        }
                        break;
            case 3:
                        {
                           mvp(cla);
                        }
                        break;
            case 4:
                        {
                            do_out(cla);
                        }
                        break;
            case 5:
                        {
                            destroy(cla);
                        }
                        break;
            default:printf("输入错误,请重新输入\n");
        }
    }
    end:
    return 0;

    printf("\n");
    return 0;
}

d12.h//头文件

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 100

struct Stu
{
    char name[20];
    int age;
    double score;
};

struct Class
{
    struct Stu student[MAX];
    int size;
};

void print_menu()       //定义目录函数
{
    printf("\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");
}

void do_in(struct Class *cla) //定义学生信息输入函数
{

    for(int i=0;i<(*cla).size;i++)
    {
        printf("请输入第%d个学生的姓名:",i+1);
        scanf("%s",&(*cla).student[i].name);
         printf("请输入第%d个学生的年龄:",i+1);
        scanf("%d",&(*cla).student[i].age);
         printf("请输入第%d个学生的成绩:",i+1);
        scanf("%lf",&(*cla).student[i].score);

        printf("\n");
    }
    printf("录入成功\n");
    printf("\n");
}


void paixu(struct Class *cla)
{
    for(int i=1;i<(*cla).size;i++)
    {
        for(int j=0;j<5-i;j++)
        {
            if((*cla).student[j].score <  (*cla).student[j+1].score)
                {
                    struct Stu temp = (*cla).student[j];
                    (*cla).student[j] = (*cla).student[j+1];
                    (*cla).student[j+1] = temp;
                }
        } 
    }
    printf("降序后的结果为:\n");
    printf("姓名\t年龄\t成绩\n");
    for(int i=0;i<(*cla).size;i++)
    {
        printf(" %s\t%d\t%f\n",(*cla).student[i].name, (*cla).student[i].age,(*cla).student[i].score);
    }
    printf("\n");                  
}


void mvp(struct Class *cla) //定义输出最好最差学生函数
{
    int max=0;
    for(int i=1;i<(*cla).size;i++)
    {
        if((*cla).student[max].score < (*cla).student[i].score)
        {
            max = i;
        }
    }
    printf("成绩最好的学生为:\n");
    printf("姓名\t年龄\t成绩\n");
    printf(" %s\t%d\t%f\n",(*cla).student[max].name, (*cla).student[max].age,(*cla).student[max].score);

    int min=0;
    for(int i=1;i<(*cla).size;i++)
    {
        if((*cla).student[min].score > (*cla).student[i].score)
        {
            min = i;
        }
    }
    printf("成绩最差的学生为:\n");
     printf("姓名\t年龄\t成绩\n");
    printf(" %s\t%d\t%f\n",(*cla).student[min].name, (*cla).student[min].age,(*cla).student[min].score);

    printf("\n");
}

void do_out(struct Class *cla)
{
    printf("姓名\t年龄\t成绩\n");
    for(int i=0;i<(*cla).size;i++)
    {
        printf(" %s\t%d\t%f\n",(*cla).student[i].name, (*cla).student[i].age,(*cla).student[i].score);
    }
    printf("\n");
}

void destroy(struct Class *cla)
{
    //释放内存
    if(NULL != cla)
    {
        free(cla); //释放空间
        cla = NULL;
    }

    printf("\n");
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值