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语言动态规划多种背包问题分析讲解 背包问题介绍 背包问题是动态规划中比较常见的问题之一,特别是在算法竞赛中。 一般来说,背包问题可分为两大类:01背包和完全背包。01背包是每个物品只能用一次,而完全背包则是每个物品可以无限制使用。 这里将介绍多种背包问题的分析和具体实现。 01背包问题 问题描述 有一个容量为V的背包和N个物品,每个物品的体积为v[i],价…

    C 2023年5月22日
    00
  • C语言 递归实现排雷游戏

    C语言 递归实现排雷游戏 介绍 排雷游戏是一款非常经典的休闲小游戏,本文将详细介绍如何使用C语言递归实现排雷游戏。 实现原理 排雷游戏的核心就是根据玩家翻开格子的情况,计算周围雷的数量并显示在格子上。 对于每一个格子,我们需要进行以下操作: 如果该格子是雷,则直接显示在格子上 如果该格子不是雷,则计算周围雷的数量n,如果n为0,则继续递归翻开周围的格子直到不…

    C 2023年5月23日
    00
  • C++代码实现学生信息管理系统

    C++代码实现学生信息管理系统 本文将详细讲解如何使用C++代码实现学生信息管理系统。该系统可以进行学生信息的增删查改等简单操作,并使用文件进行数据持久化。 1. 确定系统需求 首先需要明确需要实现哪些功能,包括但不限于:- 添加学生信息- 修改学生信息- 删除学生信息- 查询学生信息- 显示学生信息列表 2. 确定数据结构 根据需求,我们可以选择使用结构体…

    C 2023年5月23日
    00
  • C语言源码实现停车场管理系统

    C语言源码实现停车场管理系统 介绍 停车场管理系统是一个常见的管理系统,可用于实现停车场入场、出场的车辆管理及计费功能。这个系统可以通过编程语言实现。C语言是一门广泛应用于工业界、应用界和学术界的计算机编程语言,在实现停车场管理系统方面也有良好的表现。 实现步骤 下面是一个简单的实现停车场管理系统的步骤: 1. 创建一个车辆结构体 创建一个车辆结构体并在其中…

    C 2023年5月30日
    00
  • 华为Mate 8怎么样 华为Mate8全面评测图解

    华为Mate 8怎么样 华为Mate8全面评测图解 华为Mate 8是华为公司于2015年11月发布的一款大屏旗舰手机。其拥有6英寸的大屏幕、高通骁龙810处理器、4GB RAM、16/32/64GB ROM等高端配置,备受市场关注。下面我们来对这款手机进行全面评测,看看它在各方面的表现如何。 设计和外观 华为Mate8采用了一块6英寸的IPS LCD屏幕,…

    C 2023年5月22日
    00
  • ubuntu下如何安装cmake?cmake简单使用详解

    下面是详细的攻略: 安装cmake的方法 在Ubuntu系统中,我们可以使用apt-get命令来安装cmake。具体步骤如下: 打开终端,输入以下命令: sudo apt-get update 该命令用于更新Ubuntu系统中的软件包信息,确保我们能够获得最新的cmake软件包。 安装cmake,输入以下命令: sudo apt-get install cm…

    C 2023年5月24日
    00
  • 使用C++实现位图处理

    使用C++实现位图处理攻略 什么是位图 位图(Bitmap),又称为点阵图,是一种用二进制数来表示图像的存储方式。位图是由若干像素点组成的栅格图像,每个像素点有固定的颜色值,颜色值的位数决定了图片的颜色数。 C++实现位图处理 使用C++语言可以方便快速地对位图进行处理,本文将介绍如何使用C++对位图进行灰度化、二值化操作。 读取位图文件 要处理位图,首先需…

    C 2023年5月23日
    00
  • PostgreSQL 实现将多行合并转为列

    下面是详细讲解”PostgreSQL 实现将多行合并转为列”的完整攻略。 背景 假设当前有如下一张表格table1,其中id列为主键,col_name列为需要转为列的字段名称,col_value列为需要转为列字段对应的值。 id col_name col_value 1 name John 1 age 30 1 gender Male 2 name Emil…

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