C语言案例练习3-学生信息管理系统

#include <stdio.h>
#include <stdlib.h>
#include <conio.h> // _kbhit() _getch()
typedef struct
{
    int id;
    char name[20];
    int age;
    char class[100];
} student;
void emue()
{
    printf("【1】新增学生信息\n");
    printf("【2】修改学生信息\n");
    printf("【3】删除学生信息\n");
    printf("【4】查询学生信息\n");
    printf("【5】退出系统\n");
};
void enums()
{
    printf("【1】修改学生姓名\n");
    printf("【2】修改学生年龄\n");
    printf("【3】修改学生班级\n");
}
void addStu(student *Stu, int *count);
void editStu(student *Stu, int *count);
void deleteStu(student *Stu, int *count);
void seeStu(student *Stu, int count);
int main()
{
    int count = 5;
    student p[] = {
        {.id = 1, .name = "John", .age = 18, .class = "一班"},
        {.id = 2, .name = "Mary", .age = 17, .class = "二班"},
        {.id = 3, .name = "Tom", .age = 16, .class = "三班"},
        {.id = 4, .name = "Jerry", .age = 15, .class = "四班"},
        {.id = 5, .name = "Lily", .age = 14, .class = "五班"}};
    student *Stu = realloc(NULL, count * sizeof(student));
    if (Stu == NULL)
    {
        perror("realloc");
        return -1;
    }
    for (int i = 0; i < count; i++)
    {
        Stu[i] = p[i];
    }
    //  for(int i=0;i<count;i++){
    //     printf("id:%d,name:%s,age:%d,class:%s\n",Stu[i].id,Stu[i].name,Stu[i].age,Stu[i].class);
    // }
    while (1)
    {
        emue();
        int choice;
        scanf("%d", &choice);
        switch (choice)
        {
        case 1:
            addStu(Stu, &count);
            break;
        case 2:
            editStu(Stu, &count);
            break;
        case 3:
            deleteStu(Stu, &count);
            break;
        case 4:
            seeStu(Stu, count);
            break;
        case 5: // 退出
            return 0;
            break;
        default:
            printf("输入错误,请重新输入!\n");
        }
    }
    free(Stu);
    return 0;
}
// 新增学生信息
void addStu(student *Stu, int *count)
{
    student info;
    printf("请依次输入【学号】【姓名】【年龄】【班级】\n");
    scanf("%d%s%d%s", &info.id, info.name, &info.age, info.class);
    for (int i = 0; i < *count; i++)
    {
        if (info.id == Stu[i].id)
        {
            printf("学号已存在,请重新添加!\n");
            return;
        }
    }
    *count += 1;
    Stu = realloc(Stu, (*count) * sizeof(student));
    Stu[*count - 1] = info;
    printf("添加成功!");
    printf("按任意键继续!\n");
    _getch();
}
// 修改学生信息
void editStu(student *Stu, int *count)
{
    printf("请输入要修改的学生学号:\n");
    int id, index;
    scanf("%d", &id);
    for (int i = 0; i < *count; i++)
    {
        if (Stu[i].id == id)
        {
            enums();
            scanf("%d", &index);
            switch (index)
            {
            case 1:
                printf("请输入新的学生姓名:\n");
                scanf("%s",Stu[i].name);
                printf("修改【姓名】成功!");
                printf("按任意键继续!\n");
                _getch();
                break;
            case 2:
                printf("请输入新的学生年龄:\n");
                scanf("%d",&Stu[i].age);
                printf("修改【年龄】成功!");
                printf("按任意键继续!\n");
                _getch();
                break;
            case 3:
                printf("请输入新的学生班级:\n");
                scanf("%s",Stu[i].class);
                printf("修改【班级】成功!");
                printf("按任意键继续!\n");
                _getch();
                break;
            default:
                printf("输入错误,无此选项!");
                printf("按任意键继续!\n");
                _getch();
                break;
            }
            return ;
        }
    }
    printf("学号不存在!");
    printf("按任意键继续!\n");
    _getch();
}
// 删除学生信息
void deleteStu(student *Stu, int *count)
{
    printf("请输入要删除的学生学号:\n");
    int id, sum;
    scanf("%d", &id);
    for (int i = 0; i < *count; i++)
    {
        if (Stu[i].id == id)
        {
            *count -= 1;
            for (int j = i; j < *count; j++)
            {
                Stu[j] = Stu[j + 1];
            }
            printf("删除成功!");
            printf("按任意键继续!\n");
            _getch();
        }
    }
}
// 查看学生信息
void seeStu(student *Stu, int count)
{
    for (int i = 0; i < count; i++)
    {
        // printf("id:%d,name:%s,age:%d,class:%s\n", Stu[i].id, Stu[i].name, Stu[i].age, Stu[i].class);
        printf("学号:%d\t\t姓名:%s\t年龄:%d\t\t班级:%s\n", Stu[i].id, Stu[i].name, Stu[i].age, Stu[i].class);
    }
    printf("按任意键继续!\n");
    _getch();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值