Skip to content

阶段验收:函数化程序设计 ​

上一节跟随步骤重构了学生信息管理系统。这次换一个业务场景:如果不依赖可变的全局数据,也不复制相同的查找逻辑,能否独立完成一个可运行的管理系统?本次验收要求你从需求出发完成函数拆分,检查自己是否真正掌握了参数、返回值、作用域和主流程组织。

验收任务 ​

问题:如何把课程报名管理拆成职责清楚的函数,并让新增、查询、修改、删除和统计在同一个主流程中协同工作?

编写一个命令行课程报名管理系统,至少支持下面六项功能:

text
1. 新增报名
2. 显示全部报名
3. 按姓名查询
4. 修改学习状态
5. 删除报名
6. 显示课程统计
0. 退出系统

每条报名记录使用字典保存:

python
{
    "name": "张三",
    "course": "Python",
    "status": "学习中",
}

课程统计需要输出每门课程的报名人数。例如:

text
Python:3 人
Web:2 人
MySQL:1 人

函数设计要求 ​

程序至少包含下面这些函数,名称可以自行调整:

python
show_menu()
find_registration(registrations, name, course)
add_registration(registrations)
show_registrations(registrations)
search_registrations(registrations)
update_status(registrations)
delete_registration(registrations)
show_statistics(registrations)
main()

同时满足以下要求:

  • 经常变化的报名数据不能放在全局变量中。
  • 查找函数通过返回值交出结果,不在函数内部完成所有后续操作。
  • 不复制三份相同的查找循环。
  • 每个业务函数能用一句话说明自己的主要职责。
  • 输入错误的功能编号后,程序能够继续运行。

课程报名管理系统的函数职责总览

课程报名唯一性判断

实现顺序

先完成显示、新增和查询,再完成修改、删除与统计。每写完一个函数就单独调用一次,不要等全部写完后再运行。

必测场景 ​

功能写完不等于验收完成。完成程序后,按顺序测试下面这些场景,确认每个函数都能在真实操作中协同工作:

  1. 空列表时显示全部报名,程序给出明确提示。
  2. 新增两门不同课程,再新增一条同名但不同课程的记录。
  3. 重复添加同名、同课程记录,程序拒绝重复报名。
  4. 查询不存在的姓名,程序继续运行。
  5. 修改一条报名状态,再检查原列表中的数据已经变化。
  6. 删除一条记录,课程统计同步变化。
  7. 输入错误菜单编号,再输入 0 正常退出。

报名记录变化与课程统计的关系

验收标准 ​

等级达成情况下一步
通过六项功能完整,必测场景全部通过,函数职责清楚进入类与对象
基本通过功能可用,但存在重复查找或依赖可变全局数据回看函数参数、返回值和作用域
需要巩固主流程仍是一段连续代码,无法独立拆分函数重新完成上一节的学生管理重构

通过后,保留这份代码。学习类与对象时,再回看这份程序并思考:哪些数据和操作应该组合成一个对象?