第 50 课 · 阶段八 · 项目实战
综合实战:成绩管理系统
最后一课!把 50 课所学融会贯通,做一个“学生成绩管理系统”完整项目:函数、列表/字典、文件、异常、数据库全用上,并为你的下一步画好路线图。
🎯 学完本课你将掌握
- 综合运用全站所学构建完整项目
- 体会项目分层与模块化
- 明确学完后的进阶方向
一、项目需求
做一个学生成绩管理系统:支持添加学生、删除学生、修改成绩、按姓名查询、按分数排序、数据保存到文件/数据库、菜单式交互。
二、项目结构
项目结构
1grade_system/2├── models.py # 数据模型(Student 类)3├── db.py # 数据库操作4├── main.py # 主菜单与交互5└── students.db # 数据库文件(运行时生成)三、models.py:学生数据模型
models.py
1class Student:2 def __init__(self, name, score):3 self.name = name4 self.score = score56 def __str__(self):7 return f"{self.name}:{self.score}分"89 def __lt__(self, other):10 return self.score < other.score四、db.py:数据库封装
db.py
1import sqlite323DB = "students.db"45def init():6 with sqlite3.connect(DB) as conn:7 conn.execute("""8 CREATE TABLE IF NOT EXISTS student (9 id INTEGER PRIMARY KEY AUTOINCREMENT,10 name TEXT UNIQUE NOT NULL,11 score INTEGER12 )13 """)1415def add(name, score):16 with sqlite3.connect(DB) as conn:17 conn.execute("INSERT INTO student (name, score) VALUES (?, ?)", (name, score))1819def delete(name):20 with sqlite3.connect(DB) as conn:21 conn.execute("DELETE FROM student WHERE name = ?", (name,))2223def update(name, score):24 with sqlite3.connect(DB) as conn:25 conn.execute("UPDATE student SET score = ? WHERE name = ?", (score, name))2627def query(name):28 with sqlite3.connect(DB) as conn:29 row = conn.execute("SELECT * FROM student WHERE name = ?", (name,)).fetchone()30 return row3132def all_sorted():33 with sqlite3.connect(DB) as conn:34 return conn.execute("SELECT * FROM student ORDER BY score DESC").fetchall()五、main.py:主程序
main.py
1import db2from models import Student34db.init()56def menu():7 print("=" * 30)8 print("学生成绩管理系统")9 print("1 添加学生 2 删除学生")10 print("3 修改成绩 4 查询学生")11 print("5 成绩排行 6 退出")12 print("=" * 30)1314def safe_score():15 while True:16 try:17 s = int(input("成绩(0-100):"))18 if 0 <= s <= 100:19 return s20 print("成绩要在0-100之间")21 except ValueError:22 print("请输入数字")2324while True:25 menu()26 ch = input("请选择:")27 if ch == "1":28 name = input("姓名:")29 db.add(name, safe_score())30 print("添加成功")31 elif ch == "2":32 db.delete(input("要删除的姓名:"))33 print("已删除(若存在)")34 elif ch == "3":35 db.update(input("姓名:"), safe_score())36 print("已修改")37 elif ch == "4":38 row = db.query(input("查询姓名:"))39 print(Student(row[1], row[2]) if row else "查无此人")40 elif ch == "5":41 for r in db.all_sorted():42 print(Student(r[1], r[2]))43 elif ch == "6":44 print("感谢使用,再见!")45 break46 else:47 print("无效选项")六、运行与测试
- 1把三个文件放进 grade_system 文件夹。
- 2运行 python main.py。
- 3依次测试:添加3名学生 → 排行 → 修改 → 查询 → 删除 → 排行。
- 4关闭再重开程序,数据仍在(说明持久化成功)。
七、本项目用到的知识点盘点
| 知识点 | 用在项目哪里 |
|---|---|
| 函数 | menu、safe_score、db 各方法 |
| 类与对象 | Student 类、__str__/__lt__ |
| 异常处理 | safe_score 的 try/except |
| 循环与分支 | while 菜单、if 分支 |
| SQLite | db.py 全部增删改查 |
| 参数化查询 | ? 占位符防注入 |
| 模块化 | models / db / main 三文件分工 |
八、学完 50 课,下一步去哪里
| 方向 | 建议 |
|---|---|
| 数据分析 | 深入 pandas + matplotlib + SQL,做数据报告 |
| Web 开发 | 学 Flask/Django 全套,做自己的网站 |
| 自动化办公 | 学 openpyxl 处理 Excel、pyautogui 自动化 |
| 爬虫进阶 | Scrapy 框架、Selenium 处理动态页面 |
| 人工智能 | 学 numpy 基础 → sklearn → 机器学习 |
| 算法与刷题 | LeetCode 入门,提升编程思维 |
✍️ 小练习
为系统增加两个功能:① 按“平均分”统计并输出;② 把成绩导出为 CSV 文件(可用 csv 模块,回顾第 30 课)。再想一个你想做的项目,用本系统的方法论去实现它。
📌 本节小结
恭喜你走完了整整 50 课!从“Python 是什么”到完成一个包含类、数据库、异常处理的完整系统,你已经掌握了 Python 的核心语法、数据结构、函数与模块、面向对象、文件与数据库等全部基本功。编程之路才刚刚开始——保持动手、保持好奇,去点亮属于你的下一颗星吧!🚀