C 语言从 0 入门(十五)|综合小项目:菜单交互与简易功能实现

大家好,我是网域小星球。

前面我们已经学完了基础语法、数组、函数、指针、结构体、文件操作,具备了编写完整小程序 的全部条件。这一篇我们不再讲零散知识点,而是把所有内容串起来,实现一个带菜单、可交互、可扩展的小项目框架。学会这种结构,以后写任何管理系统、小游戏、小工具都能直接套用。

目录

一、本章学习目标

二、整体框架设计

[三、完整可运行代码(VS2022 直接跑)](#三、完整可运行代码(VS2022 直接跑))

四、代码结构讲解

五、可扩展方向

六、本章总结

下期预告

一、本章学习目标

  1. 掌握控制台程序经典结构:菜单 + 分支选择
  2. 使用 switch-case 实现功能选择
  3. 结合结构体、数组、函数封装业务逻辑
  4. 实现简易学生信息:展示、添加、查找、退出
  5. 学会可扩展项目框架,为后续写复杂项目打基础

二、整体框架设计

一个标准小项目通常分为:

  1. 显示菜单
  2. 用户输入选择
  3. 根据选择进入对应功能
  4. 执行完返回菜单,直到选择退出

结构非常清晰:

cpp 复制代码
欢迎使用学生成绩管理系统
------------------------
1. 显示所有学生信息
2. 添加学生信息
3. 查找指定学生
0. 退出系统
------------------------
请输入您的选择:

三、完整可运行代码(VS2022 直接跑)

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

#define MAX_STU 50

// 学生结构体
struct Student
{
    int id;
    char name[20];
    float score;
};

// 全局数组 + 计数器
struct Student stus[MAX_STU];
int count = 0;

// 函数声明
void showMenu();
void showAll();
void addStu();
void findStu();

int main()
{
    int choice;

    while (1)
    {
        showMenu();
        printf("请输入您的选择:");
        scanf("%d", &choice);

        switch (choice)
        {
        case 1:
            showAll();
            break;
        case 2:
            addStu();
            break;
        case 3:
            findStu();
            break;
        case 0:
            printf("感谢使用,再见!\n");
            return 0;
        default:
            printf("输入错误,请重新选择!\n");
            break;
        }
        printf("\n");
    }
}

// 显示菜单
void showMenu()
{
    printf("=========================\n");
    printf("    学生成绩管理系统\n");
    printf("=========================\n");
    printf(" 1 显示所有学生\n");
    printf(" 2 添加学生信息\n");
    printf(" 3 按学号查找学生\n");
    printf(" 0 退出系统\n");
    printf("=========================\n");
}

// 显示所有学生
void showAll()
{
    printf("当前共有学生:%d 人\n", count);
    if (count == 0)
    {
        printf("暂无学生信息!\n");
        return;
    }

    printf("学号\t姓名\t成绩\n");
    for (int i = 0; i < count; i++)
    {
        printf("%d\t%s\t%.1f\n", stus[i].id, stus[i].name, stus[i].score);
    }
}

// 添加学生
void addStu()
{
    if (count >= MAX_STU)
    {
        printf("学生人数已满,无法添加!\n");
        return;
    }

    printf("请输入学号 姓名 成绩:");
    scanf("%d%s%f", &stus[count].id, stus[count].name, &stus[count].score);
    count++;
    printf("添加成功!\n");
}

// 按学号查找
void findStu()
{
    int findId;
    printf("请输入要查找的学号:");
    scanf("%d", &findId);

    for (int i = 0; i < count; i++)
    {
        if (stus[i].id == findId)
        {
            printf("找到学生:%s %.1f\n", stus[i].name, stus[i].score);
            return;
        }
    }
    printf("未找到该学号学生!\n");
}

四、代码结构讲解

  1. **#define MAX_STU 50**方便统一修改最大学生数。

  2. 全局数组 + 计数器多个函数共用数据,简单高效。

  3. while (1) 死循环 + switch经典菜单框架,一直运行直到选 0 退出。

  4. 每个功能一个函数易读、易扩展、易维护。

五、可扩展方向

后面你可以继续加功能:

  • 修改学生信息
  • 删除学生
  • 排序(按成绩 / 学号)
  • 保存到文件 / 从文件加载
  • 密码登录
  • 小游戏整合

六、本章总结

  1. 小项目核心结构:菜单 + 选择 + 功能函数
  2. while(1) + switch 是控制台程序标配
  3. 函数封装让逻辑清晰、易于扩展
  4. 结构体 + 数组实现批量数据管理
  5. 学会这套框架,几乎能写所有入门级小项目

下期预告

C 语言从 0 入门(十六)|动态内存管理:malloc、free、calloc、realloc下一篇我们学习更高级的内存使用方式:动态申请内存,让数组大小不再固定,程序更灵活、更节省空间。

相关推荐
网域小星球2 小时前
C 语言从 0 入门(十六)|动态内存管理:malloc /free/calloc /realloc 精讲
c语言·开发语言·free·malloc·动态内存
雪的季节2 小时前
qt信号槽跨线程使用时候的坑
java·开发语言·qt
AI应用实战 | RE2 小时前
011、向量数据库入门:Embeddings原理与ChromaDB实战
开发语言·数据库·langchain·php
chh5632 小时前
C++--内存管理
java·c语言·c++·windows·学习·面试
一直不明飞行3 小时前
C++:string,写法s.find(‘@‘) != s.end()是否有问题
开发语言·c++·算法
沐知全栈开发3 小时前
C 预处理器
开发语言
Proxy_ZZ03 小时前
打造自己的信道编码工具箱——Turbo、LDPC、极化码三合一
c语言·算法·信息与通信
daad7773 小时前
WSL2_wifi驱动安装
开发语言·前端·javascript
超级大只老咪3 小时前
一维度前缀和解题通用模板(java)
java·开发语言·算法