目录
摘要
一、班级管理系统(含成绩模块)
1. 功能概述
2. 完整代码与解析
3. 代码解析与亮点
二、会议管理系统
1. 功能概述
2. 完整代码
3. 代码解析与亮点
三、购物车管理系统
1. 功能概述
2. 完整代码
3. 代码解析与亮点
四、总结与扩展思路
1. 技术对比
2. 扩展思路
五、资源推荐
摘要
本文通过三个Python实战项目——班级管理系统、会议管理系统和购物车管理系统,全面解析如何利用字典(Dictionary)实现多层数据管理与用户交互。每个项目均包含完整代码、核心解析和优化方案,适合学习字典嵌套、函数封装和模块化编程。
一、班级管理系统(含成绩模块)
1. 功能概述
-
班级管理:添加班级、查看班级列表。
-
学生管理:添加学生信息(学号、联系方式)。
-
成绩管理:录入学生成绩、计算平均分。
-
数据展示:分层显示班级、学生及成绩详情。
2. 完整代码与解析
"""
班级管理系统(含成绩模块)
数据结构:三层嵌套字典(班级 -> 学生 -> 详细信息)
"""
students_dic = {}
def add_classes(class_name):
"""添加班级(非空校验)"""
if not class_name.strip():
print("错误:班级名称不能为空!")
return
students_dic[class_name] = {}
print(f"班级 [{class_name}] 添加成功!")
def add_students(class_name, student_name, student_id, student_phone):
"""添加学生(扩展成绩字段)"""
if class_name not in students_dic:
print(f"错误:班级 [{class_name}] 不存在!")
return
students_dic[class_name][student_name] = {
"学号": student_id,
"电话": student_phone,
"成绩": {} # 成绩存储为字典,格式:{"科目": 分数}
}
print(f"学生 [{student_name}] 添加成功!")
def add_grade(class_name, student_name, subject, grade):
"""添加成绩(校验分数有效性)"""
if class_name not in students_dic:
print(f"错误:班级 [{class_name}] 不存在!")
return
if student_name not in students_dic[class_name]:
print(f"错误:学生 [{student_name}] 不存在!")
return
try:
grade = float(grade)
if grade < 0 or grade > 100:
raise ValueError
except ValueError:
print("错误:成绩必须是0-100的数字!")
return
students_dic[class_name][student_name]["成绩"][subject] = grade
print(f"成绩录入成功:{student_name} 的 {subject} 为 {grade} 分")
def get_students():
"""打印学生列表(含平均分)"""
if not students_dic:
print("暂无数据")
return
for class_name, students in students_dic.items():
print(f"\n=== 班级:{class_name} ===")
for name, info in students.items():
grades = info["成绩"]
avg = sum(grades.values()) / len(grades) if grades else 0
print(f" ├─ 学生:{name}")
print(f" ├─ 学号:{info['学号']}")
print(f" ├─ 电话:{info['电话']}")
print(f" └─ 成绩:{grades} | 平均分:{avg:.1f}")
# 主程序交互逻辑
while True:
print("\n========== 班级管理系统 ==========")
print("1.添加班级 2.添加学生 3.录入成绩 4.学生列表 5.退出")
option = input("请输入操作编号:").strip()
if option == "1":
class_name = input("请输入班级名称:").strip()
add_classes(class_name)
elif option == "2":
class_name = input("请输入班级名称:").strip()
if class_name in students_dic:
name = input("学生姓名:").strip()
stu_id = input("学号:").strip()
phone = input("联系方式:").strip()
add_students(class_name, name, stu_id, phone)
else:
print(f"班级 [{class_name}] 不存在!")
elif option == "3":
class_name = input("请输入班级名称:").strip()
if class_name in students_dic:
student_name = input("学生姓名:").strip()
if student_name in students_dic[class_name]:
subject = input("科目:").strip()
grade = input("分数(0-100):").strip()
add_grade(class_name, student_name, subject, grade)
else:
print(f"学生 [{student_name}] 不存在!")
else:
print(f"班级 [{class_name}] 不存在!")
elif option == "4":
get_students()
elif option == "5":
print("系统已退出!")
break
else:
print("输入错误,请重新输入!")
3. 代码解析与亮点
数据结构:
students_dic = {
"Python班": {
"张三": {
"学号": "2023001",
"电话": "13800138000",
"成绩": {"数学": 90.0, "Python编程": 85.5}
}
}
}
-
三层嵌套字典:
班级 -> 学生 -> {学号, 电话, 成绩}
,结构清晰易扩展。
动态平均分计算:
avg = sum(grades.values()) / len(grades) if grades else 0
-
输入校验:
-
班级名称非空、成绩范围限制(0-100)。
-
二、会议管理系统
1. 功能概述
-
会议预约:输入编号、主题、内容,自动查重。
-
会议列表:展示所有会议信息。
-
数据持久化:退出时保存数据到JSON文件。
2. 完整代码
"""
会议管理系统
数据结构:字典(会议编号 -> [主题, 内容])
"""
import json
meeting_dic = {}
def add_meeting(meeting_number, meeting_title, meeting_info):
"""添加会议(查重与非空校验)"""
if meeting_number in meeting_dic:
print("错误:会议编号重复!")
return
if not all([meeting_number, meeting_title, meeting_info]):
print("错误:编号、主题或内容不能为空!")
return
meeting_dic[meeting_number] = [meeting_title, meeting_info]
print("会议添加成功!")
def list_meeting():
"""打印所有会议"""
if not meeting_dic:
print("暂无会议记录")
return
print("\n=== 会议列表 ===")
for num, details in meeting_dic.items():
print(f"编号:{num} | 主题:{details[0]} | 内容:{details[1]}")
def save_meetings():
"""保存数据到JSON文件"""
with open("meetings.json", "w", encoding="utf-8") as f:
json.dump(meeting_dic, f, ensure_ascii=False)
print("数据已保存至 meetings.json")
# 主程序交互逻辑
while True:
print("\n========== 会议管理系统 ==========")
print("1.添加会议 2.会议列表 3.退出")
choice = input("请输入操作编号:").strip()
if choice == "1":
num = input("请输入会议编号:").strip()
title = input("请输入会议主题:").strip()
info = input("请输入会议内容:").strip()
add_meeting(num, title, info)
elif choice == "2":
list_meeting()
elif choice == "3":
save_meetings()
print("系统已退出!")
break
else:
print("输入错误,请重新输入!")
3. 代码解析与亮点
-
数据持久化:
with open("meetings.json", "w", encoding="utf-8") as f:
json.dump(meeting_dic, f, ensure_ascii=False)
-
使用
json
模块保存数据,重启程序不丢失。
-
输入校验:
-
会议编号查重、主题和内容非空校验。
-
三、购物车管理系统
1. 功能概述
-
商品管理:添加、删除商品,校验价格和数量。
-
购物车清单:展示商品明细并计算总价。
2. 完整代码
"""
购物车管理系统
数据结构:字典(商品编号 -> [名称, 价格, 数量])
"""
product_dic = {}
def add_shoppingcart(product_number, product_name, product_price, product_quantity):
"""添加商品(校验价格和数量)"""
try:
price = float(product_price)
quantity = int(product_quantity)
if price <= 0 or quantity <= 0:
raise ValueError
except ValueError:
print("错误:价格或数量必须是正数!")
return
product_dic[product_number] = [product_name, price, quantity]
print("商品添加成功!")
def delete_shoppingcart(product_number):
"""删除商品(友好提示)"""
if product_number in product_dic:
del product_dic[product_number]
print(f"商品 {product_number} 已删除!")
else:
print("错误:商品不存在!")
def get_shoppingcart():
"""打印购物车清单(含总价)"""
if not product_dic:
print("购物车为空")
return
total = 0.0
print("\n=== 购物车清单 ===")
for num, details in product_dic.items():
print(f"编号:{num} | 名称:{details[0]} | 单价:{details[1]}元 | 数量:{details[2]}")
total += details[1] * details[2]
print(f"\n总金额:{total:.2f}元")
# 主程序交互逻辑
while True:
print("\n========== 购物车管理系统 ==========")
print("1.添加商品 2.删除商品 3.查看清单 4.退出")
choice = input("请输入操作编号:").strip()
if choice == "1":
num = input("请输入商品编号:").strip()
name = input("请输入商品名称:").strip()
price = input("请输入商品价格:").strip()
quantity = input("请输入商品数量:").strip()
add_shoppingcart(num, name, price, quantity)
elif choice == "2":
num = input("请输入要删除的商品编号:").strip()
delete_shoppingcart(num)
elif choice == "3":
get_shoppingcart()
elif choice == "4":
print("感谢使用,再见!")
break
else:
print("输入错误,请重新输入!")
3. 代码解析与亮点
数据校验:
price = float(product_price)
quantity = int(product_quantity)
if price <= 0 or quantity <= 0:
raise ValueError
-
确保价格和数量为有效正数。
总价计算:
total += details[1] * details[2]
print(f"总金额:{total:.2f}元")
-
实时累加总价,保留两位小数。
四、总结与扩展思路
1. 技术对比
系统 | 数据结构 | 核心优化点 |
---|---|---|
班级管理系统 | 三层嵌套字典 | 动态平均分、输入校验 |
会议管理系统 | 单层字典 | 数据持久化(JSON)、查重 |
购物车管理系统 | 单层字典 | 总价计算、数据合法性校验 |
2. 扩展思路
-
班级系统:按科目统计班级平均分,生成成绩报告。
-
会议系统:增加会议时间字段,支持按日期筛选。
-
购物车系统:实现商品分类(如电子产品、食品)。
五、资源推荐
-
书籍:《Python编程:从入门到实践》《流畅的Python》
-
工具:PyCharm(代码调试)、Jupyter Notebook(快速验证逻辑)
-
社区:CSDN(技术文章)、GitHub(开源项目参考)
在评论区分享你的优化方案或遇到的问题,共同进步! 💬