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;
}

结尾

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

相关推荐
Goboy几秒前
从零开始,用JupyterLab和TensorFlow打造你的第一个猫狗识别模型
后端·程序员·架构
这里有鱼汤1 分钟前
Python 图像处理必备的 15 个基本技能 🎨
前端·后端·python
这里有鱼汤2 分钟前
想学会Python自动化办公?这20个Excel表格操作脚本一定要掌握!
前端·后端·python
长潇若雪20 分钟前
《STL 六大组件之容器篇:简单了解 list》
开发语言·c++·经验分享·list·类和对象
君义_noip38 分钟前
信息学奥赛一本通 1524:旅游航道
c++·算法·图论·信息学奥赛
Debug 熊猫1 小时前
【Java基础】10章、单例模式、final关键字的使用技巧和使用细节、单例模式-懒汉式、单例模式-饿汉式【3】
java·javascript·后端·单例模式
学习同学1 小时前
C++进阶知识复习 1~15
java·开发语言·c++
egoist20231 小时前
【C++指南】一文总结C++二叉搜索树
开发语言·数据结构·c++·c++11·二叉搜索树
小王努力学编程2 小时前
动态规划学习——背包问题
开发语言·c++·学习·算法·动态规划
f狐0狸x4 小时前
【蓝桥杯每日一题】4.1
c语言·c++·算法·蓝桥杯