C语言实现简单学生信息管理系统

C语言实现简单学生信息管理系统

概述

学生信息管理系统是一个常见的小型项目,可以通过C语言进行实现。本文将介绍如何使用C语言实现一个简单的学生信息管理系统。

功能要求

学生信息管理系统应该具备以下功能:
1. 添加学生信息
2. 修改学生信息
3. 删除学生信息
4. 打印学生信息
5. 退出系统

基本思路

我们可以通过定义一个结构体来表示一个学生的相关信息,然后将多个结构体放在一个动态数组中进行管理。

关于如何动态创建和管理结构体数组,可以参考链接:动态创建和管理结构体数组

代码实现

下面是一个简单的学生信息管理系统完整的C语言代码实现。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_NAME_LEN 20
#define MAX_STUDENT_NUM 100

typedef struct _student {
    char name[MAX_NAME_LEN];
    int age;
    int score;
} Student;

int student_num = 0;
Student *students[MAX_STUDENT_NUM];

int get_int_input() {
     int input = 0;
     scanf("%d", &input);
     getchar(); // 将输入缓冲区中的回车字符读取掉
     return input;
}

Student* get_student_input() {
    // 获取学生姓名
    char name[MAX_NAME_LEN] = { 0 };
    printf("请输入学生姓名:");
    fgets(name, MAX_NAME_LEN, stdin);
    name[strcspn(name, "\n")] = '\0'; // 将读入的换行符替换为空字符

    // 获取学生年龄
    printf("请输入学生年龄:");
    int age = get_int_input();

    // 获取学生分数
    printf("请输入学生分数:");
    int score = get_int_input();

    // 将输入的学生信息存入一个Student结构体中
    Student *student = (Student*)malloc(sizeof(Student));
    if (student == NULL) {
        printf("系统内存不足,请退出系统重试!");
        exit(-1);
    }
    strcpy(student->name, name);
    student->age = age;
    student->score = score;

    return student;
}

void add_student() {
    // 检查学生数量是否达到上限
    if (student_num >= MAX_STUDENT_NUM) {
        printf("学生数量已达到上限(%d),无法添加新的学生信息!", MAX_STUDENT_NUM);
        return;
    }

    // 获取一个学生的信息并加入学生数组中
    Student *student = get_student_input();
    students[student_num++] = student;

    printf("学生信息添加成功!\n");
}

void modify_student() {
    // 获取要修改学生的索引编号
    printf("请输入要修改的学生信息的编号:");
    int index = get_int_input();
    if (index < 1 || index > student_num) {
        printf("你输入的编号无效,请返回重新输入!");
        return;
    }

    // 获取一个学生的信息并加入学生数组中
    Student *student = get_student_input();
    free(students[index - 1]);
    students[index - 1] = student;

    printf("学生信息修改成功!\n");
}

void delete_student() {
    // 获取要删除学生的索引编号
    printf("请输入要删除的学生信息的编号:");
    int index = get_int_input();
    if (index < 1 || index > student_num) {
        printf("你输入的编号无效,请返回重新输入!");
        return;
    }

    // 释放学生结构体所占用的内存
    free(students[index - 1]);
    students[index - 1] = NULL;

    // 将其后面的学生信息依次前移,以保证学生信息数组描述的是一组连续的学生信息
    for (int i = index; i < student_num; i++) {
        students[i - 1] = students[i];
    }
    student_num--;

    printf("学生信息删除成功!\n");
}

void print_student(Student *student) {
    printf("姓名:%s\n", student->name);
    printf("年龄:%d\n", student->age);
    printf("分数:%d\n", student->score);
}

void print_students() {
    // 检查学生数量
    if (student_num == 0) {
        printf("当前没有任何学生信息,请先添加学生信息!");
        return;
    }

    // 输出所有学生信息
    printf("编号\t姓名\t年龄\t分数\n");
    printf("--------------------------------------\n");
    for (int i = 0; i < student_num; i++) {
        if (students[i] == NULL) {
            continue;
        }
        printf("%d\t", i + 1);
        print_student(students[i]);
        printf("--------------------------------------\n");
    }
}

void exit_system() {
    // 释放所有学生结构体的内存
    for (int i = 0; i < student_num; i++) {
        if (students[i] != NULL) {
            free(students[i]);
        }
    }

    // 退出程序
    printf("已退出系统,欢迎下次使用!\n");
    exit(0);
}

int main() {
    while (1) {
        printf("\n\n*** 学生信息管理系统 ***\n");
        printf("1. 添加学生信息\n");
        printf("2. 修改学生信息\n");
        printf("3. 删除学生信息\n");
        printf("4. 打印学生信息\n");
        printf("5. 退出系统\n");

        printf("请选择对应的操作:");
        int choice = get_int_input();

        switch (choice) {
        case 1:
            add_student();
            break;
        case 2:
            modify_student();
            break;
        case 3:
            delete_student();
            break;
        case 4:
            print_students();
            break;
        case 5:
            exit_system();
            break;
        default:
            printf("你输入的操作编号无效,请返回重新输入!");
            break;
        }
    }

    return 0;
}

示例说明

示例1

*** 学生信息管理系统 ***
1. 添加学生信息
2. 修改学生信息
3. 删除学生信息
4. 打印学生信息
5. 退出系统
请选择对应的操作:1
请输入学生姓名:Tom
请输入学生年龄:18
请输入学生分数:90
学生信息添加成功!

*** 学生信息管理系统 ***
1. 添加学生信息
2. 修改学生信息
3. 删除学生信息
4. 打印学生信息
5. 退出系统
请选择对应的操作:1
请输入学生姓名:Jack
请输入学生年龄:20
请输入学生分数:95
学生信息添加成功!

*** 学生信息管理系统 ***
1. 添加学生信息
2. 修改学生信息
3. 删除学生信息
4. 打印学生信息
5. 退出系统
请选择对应的操作:4
编号  姓名    年龄    分数
------------------------------------
1       Tom         18        90
------------------------------------
2       Jack       20        95
------------------------------------

*** 学生信息管理系统 ***
1. 添加学生信息
2. 修改学生信息
3. 删除学生信息
4. 打印学生信息
5. 退出系统
请选择对应的操作:3
请输入要删除的学生信息的编号:1
学生信息删除成功!

*** 学生信息管理系统 ***
1. 添加学生信息
2. 修改学生信息
3. 删除学生信息
4. 打印学生信息
5. 退出系统
请选择对应的操作:4
编号  姓名    年龄    分数
------------------------------------
2       Jack       20        95
------------------------------------

*** 学生信息管理系统 ***
1. 添加学生信息
2. 修改学生信息
3. 删除学生信息
4. 打印学生信息
5. 退出系统
请选择对应的操作:5
已退出系统,欢迎下次使用!

示例2

*** 学生信息管理系统 ***
1. 添加学生信息
2. 修改学生信息
3. 删除学生信息
4. 打印学生信息
5. 退出系统
请选择对应的操作:4
当前没有任何学生信息,请先添加学生信息!

*** 学生信息管理系统 ***
1. 添加学生信息
2. 修改学生信息
3. 删除学生信息
4. 打印学生信息
5. 退出系统
请选择对应的操作:1
请输入学生姓名:Tom
请输入学生年龄:18
请输入学生分数:90
学生信息添加成功!

*** 学生信息管理系统 ***
1. 添加学生信息
2. 修改学生信息
3. 删除学生信息
4. 打印学生信息
5. 退出系统
请选择对应的操作:2
请输入要修改的学生信息的编号:1
请输入学生姓名:Jack
请输入学生年龄:20
请输入学生分数:95
学生信息修改成功!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现简单学生信息管理系统 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C++ 面试题翻译电话号码实例代码

    C++ 面试题翻译电话号码实例代码题目要求实现一个能够将电话号码翻译成字母的程序。具体来讲,即是将类似于”23″这样的数字字符串翻译成所有可能的字母组合,其中 ‘2’ 可以代表 ‘a’, ‘b’, ‘c’, ‘3’ 可以代表 ‘d’, ‘e’, ‘f’,以此类推,直到 ‘9’ 可以代表 ‘w’, ‘x’, ‘y’, ‘z’。对于一个包含多个数字的字符串,其可…

    C 2023年5月24日
    00
  • C#使用DES和AES实现加密解密功能示例

    下面我将详细讲解如何使用C#实现DES和AES加密解密功能的攻略,包含以下内容: 什么是DES和AES DES和AES的区别 C#中实现DES加密解密的步骤 C#中实现AES加密解密的步骤 示例说明 1.什么是DES和AES DES(Data Encryption Standard)和AES(Advanced Encryption Standard)都是对数…

    C 2023年5月23日
    00
  • C语言实现简易文本编辑器

    C语言实现简易文本编辑器攻略 1. 需求概述 本项目的目标是使用C语言实现一个简易的文本编辑器,能够实现以下基本功能: 读取文本文档并将其显示在屏幕上。 在文档中插入、删除字符及行。 将编辑后的文档保存至本地。 2. 设计思路 为了实现上述功能,我们考虑按照以下步骤执行: 读取文本文档并将其显示在屏幕上:使用C语言的文件操作方式读取文档内容,然后通过标准输出…

    C 2023年5月23日
    00
  • 实例分享cmake编译一个简单c++项目(demo)

    作为网站作者,我很乐意为大家详细讲解如何使用CMake编译一个简单的C++项目。在本文中,我将为您提供一些步骤,以帮助您了解如何使用CMake生成可执行文件、静态库或共享库。我们将会涉及以下几个方面: 概述 安装CMake 创建C++项目 编写CMakeLists.txt 配置并生成项目 示例说明 总结 1. 概述 CMake是一个跨平台的、开源的构建工具,…

    C 2023年5月23日
    00
  • Visual Studio Code (vscode) 配置C、C++环境/编写运行C、C++的教程详解(主要Windows、简要Linux)

    具体来讲,如何配置Visual Studio Code的C/C++编译环境呢?以下是详细的步骤和示例。 配置Visual Studio Code的C/C++编译环境 步骤1:安装编译器 在Windows中,常用的C/C++编译器有Microsoft Visual C++和MinGW。在操作系统为Linux时,可以使用GCC。 在Windows中安装Visua…

    C 2023年5月22日
    00
  • C语言实现多项式的相加

    作为网站作者,为了能详细地讲解“C语言实现多项式的相加”的完整攻略,我会按照以下步骤进行: 1. 分析问题 首先,我们需要弄清楚“什么是多项式相加”以及“如何实现多项式相加”。 多项式相加:多项式是指含有一系列的项,每个项含有系数和次数,如2x^3+3x^2+4x+1就是一个多项式,多项式相加就是将两个或者多个多项式相加得到一个新的多项式。 实现多项式相加:…

    C 2023年5月23日
    00
  • C语言代码规范

    一、问题引入 初入编程世界,我们不知道什么叫做好代码。一切以实现功能和快速上线项目为主,但编程经验增加,发现代码越来越难写,越来越难改。导致这样的原因是没有遵循一般性的编程规则或则没有良好的编程风格。俗话说:“无规矩不成方圆”,在编程水平上来后,就更应该遵循规则。 傻瓜都能写出计算机可以理解的代码。唯有能写出人类容易理解的代码的,才是优秀的程序员 好代码的检…

    C语言 2023年4月18日
    00
  • Mysql环境变量配置方式

    Mysql环境变量配置方式是方便我们在任意位置执行mysql命令行操作的一种方式。下面是完整的攻略: 步骤1:下载并安装Mysql 下载Mysql的安装程序,按照提示完成安装 步骤2:设置环境变量 打开计算机系统的高级系统设置 选择环境变量,然后在系统变量中找到Path,并点击编辑按钮 在编辑环境变量的弹窗中,点击New按钮,添加Mysql安装目录的bin路…

    C 2023年5月24日
    00
合作推广
合作推广
分享本页
返回顶部