利用结构体完成一个简单的学生管理系统(在堆区开辟数组空间)

题目

完成学生信息管理系统
要求:定义一个班级,包括多个学生,以及记录实际学生的个数

  1. 完成班级的创建,创建时,需要传递班级实际人数
  2. 完成班级学生的信息录入工作
  3. 完成将班级学生按成绩进行降序排序工作
  4. 输出班级中成绩最好和最差学生的信息
  5. 完成信息的输出工作
  6. 完成班级的销毁工作
  7. 要求:班级创建在堆区

代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 100 //最大容量
//定义申请的空间函数
char *banji(int renshu)
{
    char *ptr = (char *)malloc(sizeof(char) * renshu);
    if (NULL == ptr)
    {
        printf("申请失败\n");
        return NULL;
    }
    memset(ptr, 0, sizeof(char) * renshu);
    return ptr;
}
struct Xinxi
{
    char xuehao[20];
    char name[20];
    char xingbie[20];
    int cheng;
};
//定义班级类型
struct Class
{
    struct Xinxi student[MAX];
    int size;
};
int main()
{
    char *p=NULL;
    struct Class haha[100];
    memset(haha, 0, sizeof(haha));
    struct Xinxi xinxi[100];
    memset(xinxi, 0, sizeof(xinxi));
    int menu = 0;
    while (1)
    {
        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======6.销毁班级=======================\n");
        printf("\t\t======0.退出===========================\n");

        printf("请输入>>>");
        scanf("%d", &menu);
        getchar();

        switch (menu)
        {
        case 1: //调用创建函数 创建一个班级
        {
            printf("输入班级实际人数:");
            scanf("%d", &haha->size);
            char *p = banji(haha->size);
            if (NULL == p)
            {
                return -1;
            }
            printf("创建成功!\n");
        }
        break;
        case 2: //学生信息的录入
        {
            printf("班级的人数为:%d\n", haha->size);
            for (int i = 0; i < haha->size; i++)
            {
                printf("请输入第%d个学生的学号:", i + 1);
                scanf("%s", xinxi[i].xuehao);
                printf("请输入第%d个学生的姓名:", i + 1);
                scanf("%s", xinxi[i].name);
                printf("请输入第%d个学生的性别:", i + 1);
                scanf("%s", xinxi[i].xingbie);
                printf("请输入第%d个学生的成绩:", i + 1);
                scanf("%d", &xinxi[i].cheng);
                printf("\n");
            }
            printf("录入成功!\n");
        }
        break;
        case 3: //按成绩降序
        {
            printf("按照成绩对学生进行降序排序\n");
            struct Xinxi big;
            struct Xinxi small;
            for (int i = 1; i < haha->size; i++)
            {
                for (int j = 0; j < haha->size - i; j++)
                {
                    if (xinxi[j].cheng < xinxi[j + 1].cheng)
                    {
                        small = xinxi[j];
                        xinxi[j] = xinxi[j + 1];
                        xinxi[j + 1] = small;
                    }
                }
            }
            printf("排序成功!\n");
        }
        break;
        case 4:
        {

            int maxi = 0;
            int mini = 0;
            for (int i = 0; i < haha->size; i++)
            {
                if (xinxi[i].cheng > xinxi[maxi].cheng)
                {
                    maxi = i;
                }
            }
            for (int i = 0; i < haha->size; i++)
            {
                if (xinxi[i].cheng < xinxi[mini].cheng)
                {
                    mini = i;
                }
            }
            printf("输出成绩最高和最低的学生的信息:\n");
            printf("%s\t%s\t%s\t%d\n", xinxi[maxi].xuehao, xinxi[maxi].name, xinxi[maxi].xingbie, xinxi[maxi].cheng);
            printf("%s\t%s\t%s\t%d\n", xinxi[mini].xuehao, xinxi[mini].name, xinxi[mini].xingbie, xinxi[mini].cheng);
        }
        break;
        case 5: //完成信息的输出工作
        {
            printf("输出学生的信息:\n");
            printf("学号\t姓名\t性别\t成绩\n");
            for (int i = 0; i < haha->size; i++)
            {
                printf("%s\t%s\t%s\t%d\n", xinxi[i].xuehao, xinxi[i].name, xinxi[i].xingbie, xinxi[i].cheng);
            }
        }

        break;
        case 6: //销毁班级
        {
           for(int i=0;i<haha->size;i++)
           {
               *xinxi[i].xuehao=0;
               *xinxi[i].name=0;
               *xinxi[i].xingbie=0;
                 xinxi[i].cheng=0;
               
           }
        }

        break;
        case 0:

            goto end;

        default:
            printf("输入错误,重新输入:\n");
        }
    }
end:
    return 0;
}

运行截图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值