从零开始写一个命令行学生管理系统(CRUD)—— 面向过程的巅峰
2026/6/7 14:48:22 网站建设 项目流程

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

👋 你好,我是 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。

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

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询