当前位置: 首页 > news >正文

从零开始写一个命令行学生管理系统(CRUD)—— 面向过程的巅峰

不需要框架,不需要数据库,一个命令行工具就能让你掌握编程的“增删改查”。

👋 你好,我是 Evan,一名计算机专业的学长,也是《大一突围》专栏的作者。如果你问我:“学完基础语法后,该做什么项目?”我会毫不犹豫地推荐学生管理系统。它涵盖了编程最核心的操作:Create(创建)、Read(读取)、Update(更新)、Delete(删除)。这是面向过程编程的集大成之作,也是你迈向复杂项目的基石。

今天,我就带你从零开始,写一个完整的学生管理系统。我会逐行拆解代码,并列出每一个用到的知识点。

欢迎来到《大一突围》专栏。

一、项目需求与功能预览

数据存储:使用 Python 的列表(list)存储字典(dict),每个学生是一个字典,包含学号、姓名、成绩。

运行方式:命令行菜单循环,用户输入数字选择功能。

二、需要掌握的知识点清单(大一版)

在动手写代码之前,请确保你了解以下知识点。我会在代码中标注对应位置:

💡 如果你对其中某些概念还不熟悉,建议先复习再跟着敲。

三、代码实现(逐模块讲解)

3.1 全局数据结构

# 用一个列表存储所有学生,每个学生是一个字典 students = []

3.2 显示菜单

def show_menu(): print("\n" + "="*30) print(" 学生管理系统") print("1. 添加学生") print("2. 查看所有学生") print("3. 查找学生") print("4. 修改学生信息") print("5. 删除学生") print("6. 按成绩排序") print("7. 退出系统") print("="*30)

3.3 添加学生(Create)

def add_student(): print("\n--- 添加学生 ---") stu_id = input("请输入学号: ") # 检查学号是否已存在 for stu in students: if stu['id'] == stu_id: print("学号已存在!") return name = input("请输入姓名: ") # 异常处理:成绩必须是数字 try: score = float(input("请输入成绩: ")) except ValueError: print("成绩必须是数字!") return students.append({'id': stu_id, 'name': name, 'score': score}) print("添加成功!")

知识点:循环检查、异常处理、字典追加。

3.4 查看所有学生(Read)

def list_students(): if not students: print("暂无学生数据") return print("\n--- 学生列表 ---") print("学号\t\t姓名\t成绩") for stu in students: print(f"{stu['id']}\t\t{stu['name']}\t{stu['score']}")

3.5 查找学生

python def find_student(): stu_id = input("请输入要查找的学号: ") for stu in students: if stu['id'] == stu_id: print(f"找到:{stu['id']} {stu['name']} {stu['score']}") return print("未找到该学生")

3.6 修改学生信息(Update)

python def update_student(): stu_id = input("请输入要修改的学号: ") for stu in students: if stu['id'] == stu_id: print(f"原信息:{stu['id']} {stu['name']} {stu['score']}") new_name = input("请输入新姓名(直接回车保留原值): ") if new_name: stu['name'] = new_name try: new_score = input("请输入新成绩(直接回车保留原值): ") if new_score: stu['score'] = float(new_score) except ValueError: print("成绩格式错误,未修改") print("修改完成") return print("未找到该学生")

3.7 删除学生(Delete)

python def delete_student(): stu_id = input("请输入要删除的学号: ") for i, stu in enumerate(students): if stu['id'] == stu_id: students.pop(i) print("删除成功") return print("未找到该学生")

3.8 按成绩排序显示

python def sort_by_score(): if not students: print("暂无学生") return sorted_students = sorted(students, key=lambda x: x['score'], reverse=True) print("\n--- 按成绩从高到低排序 ---") print("排名\t学号\t姓名\t成绩") for idx, stu in enumerate(sorted_students, 1): print(f"{idx}\t{stu['id']}\t{stu['name']}\t{stu['score']}")

3.9 主程序循环

python def main(): while True: show_menu() choice = input("请输入你的选择(1-7): ") if choice == '1': add_student() elif choice == '2': list_students() elif choice == '3': find_student() elif choice == '4': update_student() elif choice == '5': delete_student() elif choice == '6': sort_by_score() elif choice == '7': print("感谢使用,再见!") break else: print("无效输入,请重新选择") if __name__ == '__main__': main()

四、完整代码整合(可直接运行)

你可以将上面所有代码块按顺序复制到一个.py文件中,运行即可体验。

五、扩展挑战:文件持久化(保存到文件)

目前的程序关闭后数据会丢失。你可以添加保存/加载功能,使用 JSON 文件:

import json def save_data(): with open('students.json', 'w', encoding='utf-8') as f: json.dump(students, f, ensure_ascii=False, indent=2) def load_data(): global students try: with open('students.json', 'r', encoding='utf-8') as f: students = json.load(f) except FileNotFoundError: students = []

然后在main开始时调用load_data(),每次修改后调用save_data()

六、面向过程的“巅峰”意味着什么?

这个项目虽然简单,但它包含了几乎所有编程语言通用的逻辑:输入-处理-输出。学会它,你再遇到任何“管理系统”(图书、工资、库存)都能轻松拿下。

❓ 问题:你在写这个管理系统时遇到了什么问题?或者你给它加了什么有趣的功能(比如文件保存、模糊查找)?欢迎在评论区分享你的代码片段,我会选出 3 位同学,送出《学生管理系统完整代码 + 练习题》PDF。

📌如果本文带你完成了第一个完整项目,请点 👍 赞 + 关注,本专栏《大一突围》持续输出编程实战与成长干货。

收藏本文,随时回看代码模板,你的每个管理系统都从这里起步。

http://www.jsqmd.com/news/968751/

相关文章:

  • 5分钟完成Mac Boot Camp驱动安装:Brigadier终极自动化解决方案
  • STM32 DAC实战指南:从直流电压到波形输出的配置与调试
  • 5分钟搞定全国高铁数据:Parse12306让你的出行规划更智能
  • 2026年机械制造业优化公司哪家好|五大GEO服务商横向对比实测 - GEO优化
  • 5分钟快速上手:开源漫画阅读器的完整配置指南
  • 英雄联盟Akari助手:如何用智能工具从青铜快速上分到王者
  • 2026国内无溶剂环氧涂料主流厂家实力排行及工况适配解析 - 奔跑123
  • PJSIP 2.x兼容的G.729A编解码器源码集(含LPC/ACELP/LSP全模块)
  • 从大蒜挡手机看全球供应链蝴蝶效应:硬件工程师的风险意识与应对策略
  • 2026年知识付费平台和小程序有什么区别 - 凡科杰建云
  • LED驱动电源待机功耗优化:PFC级同步间歇工作电路设计
  • 相机标定实战:从OpenCV调用到高质量数据采集与参数优化
  • 终极指南:5分钟掌握Python CAN数据库转换工具canmatrix
  • 2026 平顶山漏水维修全攻略|苏易修缮:厨卫 / 阳台 / 外墙 / 屋顶 / 地下室|靠谱防水门店 - 苏易修缮
  • AppleRa1n完整指南:三步轻松绕过iOS 15-16激活锁
  • 高效AI教材写作攻略:低查重AI工具助力,一键生成专业教材!
  • 5种原生JS弹窗效果打包:圆角拖拽、滑入动画、缩放遮罩、极简无背、点击收起
  • 2026无锡黄金回收TOP6 排行,正规变现最优选添价收门店 - 薛定谔的梨花猫
  • 2026 泰安漏水维修全攻略|苏易修缮:厨卫 / 阳台 / 外墙 / 屋顶 / 地下室|靠谱防水门店 - 苏易修缮
  • ComfyUI-AnimateDiff-Evolved:重新定义AI动画创作的专业工作流
  • 深度解析:如何实现Switch控制器在Windows平台的5大关键技术突破
  • 本地运行DeepSeek R1:Ollama+Open WebUI全栈部署指南
  • 5步搞定Steam游戏免Steam启动:小白也能上手的终极指南
  • 大疆无人机固件管理终极方案:DankDroneDownloader深度解析与实战指南
  • 嵌入式C++开发中顺序容器的选择策略与性能优化实践
  • AI写教材神器登场!低查重一键生成20万字教材,配套内容超丰富!
  • FPGA板级测试实战:从时序收敛到系统验证的可靠性保障
  • 串口猎人V31:嵌入式调试利器,自动化与可视化串口通信实战
  • 2026最新的 太阳能监控供电系统优质生产厂家实力排行盘点 推荐北京日月升太阳能科技发展有限公司 - 奔跑123
  • Java Web环境里快速导出PDF的两种落地方案:填表式生成与纯代码绘图