第 50 课 · 阶段八 · 项目实战

综合实战:成绩管理系统

最后一课!把 50 课所学融会贯通,做一个“学生成绩管理系统”完整项目:函数、列表/字典、文件、异常、数据库全用上,并为你的下一步画好路线图。

第 50 课阶段八 · 项目实战难度:挑战建议时长:60 分钟关键词:综合项目 · 分层架构 · 总结

🎯 学完本课你将掌握

  • 综合运用全站所学构建完整项目
  • 体会项目分层与模块化
  • 明确学完后的进阶方向

一、项目需求

做一个学生成绩管理系统:支持添加学生、删除学生、修改成绩、按姓名查询、按分数排序、数据保存到文件/数据库、菜单式交互。

二、项目结构

项目结构
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 = name
4 self.score = score
5
6 def __str__(self):
7 return f"{self.name}:{self.score}分"
8
9 def __lt__(self, other):
10 return self.score < other.score

四、db.py:数据库封装

db.py
1import sqlite3
2
3DB = "students.db"
4
5def 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 INTEGER
12 )
13 """)
14
15def add(name, score):
16 with sqlite3.connect(DB) as conn:
17 conn.execute("INSERT INTO student (name, score) VALUES (?, ?)", (name, score))
18
19def delete(name):
20 with sqlite3.connect(DB) as conn:
21 conn.execute("DELETE FROM student WHERE name = ?", (name,))
22
23def update(name, score):
24 with sqlite3.connect(DB) as conn:
25 conn.execute("UPDATE student SET score = ? WHERE name = ?", (score, name))
26
27def query(name):
28 with sqlite3.connect(DB) as conn:
29 row = conn.execute("SELECT * FROM student WHERE name = ?", (name,)).fetchone()
30 return row
31
32def 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 db
2from models import Student
3
4db.init()
5
6def menu():
7 print("=" * 30)
8 print("学生成绩管理系统")
9 print("1 添加学生 2 删除学生")
10 print("3 修改成绩 4 查询学生")
11 print("5 成绩排行 6 退出")
12 print("=" * 30)
13
14def safe_score():
15 while True:
16 try:
17 s = int(input("成绩(0-100):"))
18 if 0 <= s <= 100:
19 return s
20 print("成绩要在0-100之间")
21 except ValueError:
22 print("请输入数字")
23
24while 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 break
46 else:
47 print("无效选项")

六、运行与测试

  1. 1
    把三个文件放进 grade_system 文件夹。
  2. 2
    运行 python main.py。
  3. 3
    依次测试:添加3名学生 → 排行 → 修改 → 查询 → 删除 → 排行。
  4. 4
    关闭再重开程序,数据仍在(说明持久化成功)。

七、本项目用到的知识点盘点

知识点用在项目哪里
函数menu、safe_score、db 各方法
类与对象Student 类、__str__/__lt__
异常处理safe_score 的 try/except
循环与分支while 菜单、if 分支
SQLitedb.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 的核心语法、数据结构、函数与模块、面向对象、文件与数据库等全部基本功。编程之路才刚刚开始——保持动手、保持好奇,去点亮属于你的下一颗星吧!🚀