嵌入式第一天之学生管理系统

这是一个使用C语言编写的简单学生管理系统,包括增删改查学生信息、遍历和排序等功能。代码中定义了学生和班级的结构体,通过动态内存分配创建班级,用switch-case结构处理用户输入的操作。对学生输入的数据进行了有效性验证,如性别、年龄和成绩的范围检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作为一个刚入行的萌新,自己写了一个学生管理系统,不足之处希望各位指正

stu.h文件

#ifndef __STUDENT_H__
#define __STUDENT_H__
#define N 30
// 创建学生的结构体
typedef struct
{
    char name[20];
    char sew;
    int age;
    int score;

} stu_t;

// 创建班级的结构体
typedef struct
{
    stu_t st[N];
    int count;
    int n; // 用来记录班上学生的个数

} cls_t;

int add_student(cls_t *cls);       // 添加学生信息
int del_student(cls_t *cls);       // 删除学生信息
int mod_student(cls_t *cls);       // 修改学生信息
void que_student(cls_t *cls);      // 查询学生信息
void bubbling_student(cls_t *cls); // 对学生信息进行排序
void traver_studnet(cls_t *cls);   // 遍历学生信息

#endif

mian.c

#include <stdio.h>
#include <stdlib.h>
#include "student.h"

int main(int argc, char const *argv[])
{
    int choose, flage = 1;

    // 首先创建班级
    cls_t *cls = (cls_t *)malloc(sizeof(cls_t));
    if (cls == NULL)
    {
        perror("cls malloc error\n");
        exit(-1);
    }
    cls->n = 0; // 初始化班级人数

    while (flage)
    {
        choose = 0;
        // 打印登录界面
        printf("------------------欢迎访问学生管理系统-----------------------------\n");
        printf("-----------1.增加 2.删除 3.修改 4.查询 5.遍历 6.排序 7.退出 --------\n");
        printf("--------------请根据提示选择以上操作内容---------------------------\n");
        scanf("%d", &choose);
        while (getchar() != '\n')
            ; // 吃掉垃圾字符
        switch (choose)
        {
        case 1:
            // 增加操作
            add_student(cls);
            printf("添加学生信息成功\n");
            break;
        case 2:
            // 删除操作
            del_student(cls);
            printf("删除学生信息成功\n");
            break;
        case 3:
            // 修改操作
            mod_student(cls);
            printf("修改学生信息成功\n");
            break;
        case 4:
            // 查询操作
            que_student(cls);
            printf("查询学生信息成功\n");
            break;
        case 5:
            // 遍历操作
            traver_studnet(cls);
            printf("遍历学生信息成功\n");
            break;
        case 6:
            // 对学生信息进行排序操作
            bubbling_student(cls);
            break;
        case 7:
            // 退出系统
            printf("退出系统完成,欢迎下次访问\n");
            flage = 0;
            break;
        default:
            printf("输入的操作有误,请重新输入\n");
            continue;
        }
    }

    return 0;
}

student.c

#include <stdio.h>
#include "student.h"
#include <string.h>

// 1.增加学生信息
int add_student(cls_t *cls)
{
    // 首先检查班级是否员
    int ret = 0;
    if (++(cls->n) > N - 1)
    {
        printf("班级已经满员了,不能在添加了\n");
        cls->n--;
        return -1;
    }
// 当班级没有满员的情况
BACK_INPUT:
    printf("input name sew age socre>");
    ret = scanf("%s %c %d %d",
                cls->st[cls->n].name, &cls->st[cls->n].sew, &cls->st[cls->n].age, &cls->st[cls->n].score);
    while (getchar() != '\n')
        ;
    if (ret != 4)
    {
        printf("你输入的信息不完整,请重新输入\n");
        while (getchar() != '\n')
            ; // 吃掉垃圾字符
        goto BACK_INPUT;
    }
    // 对输入的性别做判断
    if (cls->st[cls->n].sew != 'w' && cls->st[cls->n].sew != 'm')
    {
        printf("输入的性别有误,请重新输入\n");
        while (getchar() != '\n')
            ; // 吃掉垃圾字符
        goto BACK_INPUT;
    }
    // 对输入的年龄做判断
    if (0 > cls->st[cls->n].age || 100 < cls->st[cls->n].age)
    {
        printf("输入的年龄有误,请重新输入\n");
        while (getchar() != '\n')
            ; // 吃掉垃圾字符
        goto BACK_INPUT;
    }

    if (0 > cls->st[cls->n].score || 100 < cls->st[cls->n].score)
    {
        printf("输入的成绩有误,请重新输入\n");
        while (getchar() != '\n')
            ; // 吃掉垃圾字符
        goto BACK_INPUT;
    }
    else
    {
        printf("当前添加学生信息:name:%s sew:%c age:%d socre:%d\n",
               cls->st[cls->n].name, cls->st[cls->n].sew, cls->st[cls->n].age, cls->st[cls->n].score);
        printf("班级人数为:%d\n", cls->n);
    }

    return 0;
}
// 2.删除学生信息
int del_student(cls_t *cls)
{
    // 首先对班级人数进行判断
    char del_name[32];
    int i, j;
    if (cls->n == 0)
    {
        printf("这个班级没有人,无法进行删除操作\n");
        return 0;
    }
    printf("input del student name>>>");
    scanf("%s", del_name);
    while (getchar() != '\n')
        ;
    for (i = 0, j = 0; i <= cls->n; i++)
    {
        if (strcmp(del_name, cls->st[i].name) != 0) // 10
        {
            cls->st[j++] = cls->st[i];
        }
    }
    cls->n = cls->n - (i - j);
    return i - j; // 返回删除的人数
}

// 3.修改学生信息
int mod_student(cls_t *cls)
{
    char mod_name[32];
    int i = 0;
    int choose = 0;

    if (cls->n == 0)
    {
        printf("这个班级没有人,无法进行修改操作\n");
        return 0;
    }
    printf("请输入需要修改学生的姓名\n");
    scanf("%s", mod_name);
    while (strcmp(cls->st[i].name, mod_name) != 0)
    {
        i++;
    }
    printf("当前学生信息为:\n");
    printf("name = %-15s,sex = %c,age=%d,score = %d\n",
           cls->st[i].name, cls->st[i].sew, cls->st[i].age, cls->st[i].score);

    // 对学员信息进行修改
    printf("input need mod 1.name 2.sew 3.age 4.socre>");
    scanf("%d", &choose);
    switch (choose)
    {
    case 1:
        printf("input mod name>>>");
        scanf("%s", cls->st[i].name);
        break;
    case 2:
        printf("input mod sew>>>");
        scanf("%c", &cls->st[i].sew);
        break;
    case 3:
        printf("input mod age>>>");
        scanf("%d", &cls->st[i].age);
        break;
    case 4:
        printf("input mod socre>>>");
        scanf("%d", &cls->st[i].score);
        break;
    default:
        printf("输入有误,请检查后重新输入\n");
    }
}
// 4.查询学员信息
void que_student(cls_t *cls)
{
    char que_name[32];
    int i = 0;

    printf("请输入需要修改学生的姓名\n");
    scanf("%s", que_name);
    while (strcmp(cls->st[i].name, que_name) != 0)
    {
        i++;
    }
    printf("当前学生信息为:\n");
    printf("name = %-15s,sex = %c,age=%d,score = %d\n",
           cls->st[i].name, cls->st[i].sew, cls->st[i].age, cls->st[i].score);
}

// 5.遍历学员信息
void traver_studnet(cls_t *cls)
{
    int i;
    printf("班级人数为:%d\n", cls->n);
    for (i = 1; i <= cls->n; i++)
    {
        printf("name = %-15s,sex = %c,age=%d,score = %d\n",
               cls->st[i].name, cls->st[i].sew, cls->st[i].age, cls->st[i].score);
    }
}
// 6.对学员成绩进行排序
void bubbling_student(cls_t *cls)
{
    int i = 0;
    int j = 0;
    stu_t stu_temp;
    for (i = 0; i < cls->n; i++)
        for (j = 0; j < cls->n - i; j++)
        {
            if (cls->st[j].score > cls->st[j + 1].score)
            {
                stu_temp = cls->st[j];
                cls->st[j] = cls->st[j + 1];
                cls->st[j + 1] = stu_temp;
            }
        }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值