C语言基础练习--学生管理系统的简单实现

前言

当这个时代,编程已经成为了一项不可或缺的技能。无论是软件开发工程师、数据科学家还是人工智能专家,都需要具备扎实的编程基础。所以现在程序员一抓一大把,而学习编程最好的方式之一就是通过实践项目来提升自己的技能。在下面文章中,通过一个简单而实用的C语言基础项目来展示一下。

正文

学生管理系统相信大家都不陌生吧,毕竟是我们从学编程开始敲,都快敲吐了,但是它不仅仅是一个简单的练手项目,更是我们理解程序设计和数据结构的良好起点。这篇文章简单的实现一个C语言基础的学生管理系统。

示例

学生管理系统可以实现对学生的添加、全部显示、查询、修改、删除功能。

实现思路

接下来详细说明一下实现思路:

  1. 添加学生信息 (void add()):

    • 提示用户输入姓名、年龄和性别。
    • 读取用户输入的信息,并将其保存到数组 s 的下一个位置。
    • 更新数据条数 n
  2. 显示所有学生信息 (void show()):

    • 使用循环遍历数组 s,依次打印每个学生的姓名、年龄和性别。
  3. 查询学生信息 (void find()):

    • 提示用户输入要查询的学生姓名。
    • 调用 find_index() 函数查找该学生在数组中的索引。
    • 如果找到了学生,打印该学生的姓名、年龄和性别;否则提示用户未找到该学生。
  4. 修改学生信息 (void edit()):

    • 提示用户输入要修改的学生姓名。
    • 调用 find_index() 函数查找该学生在数组中的索引。
    • 如果找到了学生,先打印该学生的信息,然后提示用户输入新的姓名、年龄和性别,并更新该学生的信息;否则提示用户未找到该学生。
  5. 删除学生信息 (void del()):

    • 提示用户输入要删除的学生姓名。
    • 调用 find_index() 函数查找该学生在数组中的索引。
    • 如果找到了学生,先打印该学生的信息,然后将该学生之后的所有学生信息向前移动一个位置,实现删除操作;同时更新数据条数 n;否则提示用户未找到该学生。
  6. 主函数 main()

    • 使用一个无限循环,直到用户选择退出程序。
    • 在每次循环中,显示帮助菜单并提示用户输入指令。
    • 根据用户输入的指令调用相应的函数来执行操作。
代码实现
C 复制代码
#include <stdio.h>
#include <string.h>

// 宏定义的常量,代表学生的最大个数
#define NUM 100

// 结构体类型 struct stu 别名为 STU
typedef struct st
{
    char name[30]; // 姓名
    int age;       // 年龄
    char sex[5];   // 性别
} STU;

// 学生信息数组
STU s[NUM] = {
    {"周九", 24, "男"},
    {"吴十", 25, "女"},
    {"郑十一", 26, "男"}};

// 帮助菜单显示函数定义
void help_menu()
{
    printf("\n");
    printf("     欢迎使用本学生信息管理系统\n");
    printf("* ================================ *\n");
    printf("* 1. 添加                          *\n");
    printf("* 2. 显示                          *\n");
    printf("* 3. 查询                          *\n");
    printf("* 4. 修改                          *\n");
    printf("* 5. 删除                          *\n");
    printf("* 6. 退出                          *\n");
    printf("* ================================ *\n");
}

// 现有数据条数
int n = 3;

// 添加学生信息函数
void add()
{
    printf("请输入用户名:\n");
    scanf("%s", s[n].name); // 从标准输入读取姓名
    printf("请输入年龄:\n");
    scanf("%d", &s[n].age); // 从标准输入读取年龄
    printf("请输入性别:\n");
    scanf("%s", s[n].sex);                                                            // 从标准输入读取性别
    printf("添加成功:姓名:%s 年龄:%d 性别:%s \n", s[n].name, s[n].age, s[n].sex); // 打印添加成功信息
    n++;                                                                              // 数据条数加一
}

// 显示所有学生信息函数
void show()
{
    for (int i = 0; i < n; i++) // 遍历学生数组
    {
        printf("姓名:%s 年龄:%d 性别:%s \n", s[i].name, s[i].age, s[i].sex); // 打印每个学生的信息
    }
}

// 查找学生信息的索引函数
int find_index(char *p)
{
    for (int i = 0; i < n; i++) // 遍历学生数组
    {
        if (strcmp(s[i].name, p) == 0) // 如果找到姓名与输入的姓名相同
        {
            return i; // 返回该学生信息在数组中的索引
        }
    }
    return -1; // 如果没有找到,返回-1
}

// 查询学生信息函数
void find()
{
    printf("请输入要查询的学生姓名:\n");
    char sname[30];
    scanf("%s", sname);        // 从标准输入读取要查询的学生姓名
    int i = find_index(sname); // 调用查找学生信息的索引函数
    if (i != -1)               // 如果找到了该学生
    {
        printf("姓名:%s 年龄:%d 性别:%s \n", s[i].name, s[i].age, s[i].sex); // 打印该学生的信息
    }
    else
    {
        printf("没有找到该学生\n"); // 打印没有找到该学生的提示
    }
}

// 修改学生信息函数
void edit()
{
    printf("请输入要修改的学生姓名:\n");
    char sname[30];
    scanf("%s", sname);        // 从标准输入读取要修改的学生姓名
    int i = find_index(sname); // 调用查找学生信息的索引函数
    if (i != -1)               // 如果找到了该学生
    {
        printf("修改前的信息为:姓名:%s 年龄:%d 性别:%s \n", s[i].name, s[i].age, s[i].sex); // 打印修改前的信息
        printf("请输入用户名:");
        scanf("%s", s[i].name); // 从标准输入读取新的用户名
        printf("请输入年龄:");
        scanf("%d", &s[i].age); // 从标准输入读取新的年龄
        printf("请输入性别:");
        scanf("%s", s[i].sex);                                                            // 从标准输入读取新的性别
        printf("修改成功:姓名:%s 年龄:%d 性别:%s \n", s[i].name, s[i].age, s[i].sex); // 打印修改成功信息
    }
    else
    {
        printf("没有找到该学生\n"); // 打印没有找到该学生的提示
    }
}

// 删除学生信息函数
void del()
{
    printf("请输入要删除的学生姓名:\n");
    char sname[30];
    scanf("%s", sname);        // 从标准输入读取要删除的学生姓名
    int i = find_index(sname); // 调用查找学生信息的索引函数
    if (i != -1)               // 如果找到了该学生
    {
        printf("删除前的信息为:姓名:%s 年龄:%d 性别:%s \n", s[i].name, s[i].age, s[i].sex); // 打印删除前的信息
        for (int j = i; j < n; j++)                                                             // 从找到的学生索引开始,向后移动学生信息,实现删除操作
        {
            s[j] = s[j + 1];
        }
        n--;                  // 数据条数减一
        printf("删除成功\n"); // 打印删除成功信息
    }
    else
    {
        printf("没有找到该学生\n"); // 打印没有找到该学生的提示
    }
}

int main()
{
    while (1)
    {
        // 帮助菜单显示
        help_menu();
        // 用户输入选项
        int num;
        printf("请输入指令数据:");
        scanf("%d", &num); // 从标准输入读取用户的指令数据
                           // 根据用户输入的指令执行相应的操作
        switch (num)
        {
        case 1:
            add();
            break;

        case 2:
            show();
            break;

        case 3:
            find();
            break;

        case 4:
            edit();
            break;

        case 5:
            del();
            break;

        default:
            break;
        }
        if (num == 6)
        {
            printf("退出\n");
            break;
        }
    }

    return 0;
}

结尾

通过对学生信息管理系统的实现,我们不仅学习了如何设计和实现一个简单的程序,更重要的是掌握了程序设计的基本思维和方法。无论是对于初学者还是有一定编程基础的人来说,通过实际项目的学习,可以更加深入地理解编程的本质和魅力。最后一句,孰能生巧吧哈哈哈!!!

相关推荐
林开落L6 分钟前
前缀和算法习题篇(上)
c++·算法·leetcode
Prejudices19 分钟前
C++如何调用Python脚本
开发语言·c++·python
单音GG22 分钟前
推荐一个基于协程的C++(lua)游戏服务器
服务器·c++·游戏·lua
qing_04060338 分钟前
C++——多态
开发语言·c++·多态
孙同学_38 分钟前
【C++】—掌握STL vector 类:“Vector简介:动态数组的高效应用”
开发语言·c++
man20171 小时前
【2024最新】基于springboot+vue的闲一品交易平台lw+ppt
vue.js·spring boot·后端
charlie1145141911 小时前
Qt Event事件系统小探2
c++·qt·拖放·事件系统
hlsd#1 小时前
关于 SpringBoot 时间处理的总结
java·spring boot·后端
iiiiiankor1 小时前
C/C++内存管理 | new的机制 | 重载自己的operator new
java·c语言·c++
路在脚下@1 小时前
Spring Boot 的核心原理和工作机制
java·spring boot·后端