Python字典实战: 三大管理系统开发指南(班级+会议+购物车)(附源码)
目录
摘要
一、班级管理系统(含成绩模块)
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("错误:班级名称不能为空!")returnstudents_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}] 不存在!")returnstudents_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}] 不存在!")returnif student_name not in students_dic[class_name]:print(f"错误:学生 [{student_name}] 不存在!")returntry:grade = float(grade)if grade < 0 or grade > 100:raise ValueErrorexcept ValueError:print("错误:成绩必须是0-100的数字!")returnstudents_dic[class_name][student_name]["成绩"][subject] = gradeprint(f"成绩录入成功:{student_name} 的 {subject} 为 {grade} 分")def get_students():"""打印学生列表(含平均分)"""if not students_dic:print("暂无数据")returnfor 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 0print(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("系统已退出!")breakelse: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("错误:会议编号重复!")returnif not all([meeting_number, meeting_title, meeting_info]):print("错误:编号、主题或内容不能为空!")returnmeeting_dic[meeting_number] = [meeting_title, meeting_info]print("会议添加成功!")def list_meeting():"""打印所有会议"""if not meeting_dic:print("暂无会议记录")returnprint("\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("系统已退出!")breakelse: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 ValueErrorexcept ValueError:print("错误:价格或数量必须是正数!")returnproduct_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("购物车为空")returntotal = 0.0print("\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("感谢使用,再见!")breakelse: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(开源项目参考)
在评论区分享你的优化方案或遇到的问题,共同进步! 💬
相关文章:
Python字典实战: 三大管理系统开发指南(班级+会议+购物车)(附源码)
目录 摘要 一、班级管理系统(含成绩模块) 1. 功能概述 2. 完整代码与解析 3. 代码解析与亮点 二、会议管理系统 1. 功能概述 2. 完整代码 3. 代码解析与亮点 三、购物车管理系统 1. 功能概述 2. 完整代码 3. 代码解析与亮点 四、总结与扩…...
R 语言科研绘图第 36 期 --- 饼状图-基础
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
vue 3 从零开始到掌握
vue3从零开始一篇文章带你学习 升级vue CLI 使用命令 ## 查看vue/cli版本,确保vue/cli版本在4.5.0以上 vue --version ## 安装或者升级你的vue/cli npm install -g vue/cli ## 创建 vue create vue_test ## 启动 cd vue_test npm run servenvm管理node版本&#…...
【R语言绘图】圈图绘制代码
绘制代码 rm(list ls())# 加载必要包 library(data.table) library(circlize) library(ComplexHeatmap) library(rtracklayer) library(GenomicRanges) library(BSgenome) library(GenomicFeatures) library(dplyr)### 数据准备阶段 ### # 1. 读取染色体长度信息 df <- re…...
OCR迁移
一、环境 操作系统:Centos57.6 数据库版本:12.2.0.1 场景:将OCR信息从DATA磁盘组迁移到OCR磁盘组 二、操作步骤 1.查看可用空盘 set lin 200 set pagesize 200 col DGNAME format a15 col DISKNAME format a15 col PATH format a20 col N…...
OpenCV 图形API(17)计算输入矩阵 src 中每个元素的平方根函数sqrt()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 描述 计算数组元素的平方根。 cv::gapi::sqrt 函数计算每个输入数组元素的平方根。对于多通道数组,每个通道会独立处理。其精度大约与内置的 …...
python中的in关键字查找的时间复杂度
列表(List) 对于列表来说, in 运算符的复杂度是 O(n),其中n是列表的长度。这意味着如果列表中有n个元素,那么执行 in 运算符需要遍历整个列表来查找目标元素。 以下是一个示例,演示了在列表中使用 in 运算…...
Python爬虫第6节-requests库的基本用法
目录 前言 一、准备工作 二、实例引入 三、GET请求 3.1 基本示例 3.2 抓取网页 3.3 抓取二进制数据 3.4 添加headers 四、POST请求 五、响应 前言 前面我们学习了urllib的基础使用方法。不过,urllib在实际应用中存在一些不便之处。以网页验证和Cookies处理…...
什么是可靠性工程师?
一、什么是可靠性工程师? 可靠性工程师就是负责确保产品在使用过程中不出故障、不给客户添麻烦。 你可以理解为是那种“挑毛病的人”,但不是事后挑,是提前想清楚产品在哪些情况下可能会出问题,然后解决掉。 比如: …...
linux (CentOS 10)使用传统程序语言(C)进行编译---主,子程序连接:子程序的编译
1 主程序 rootlocalhost:~/testc/testlink3# cat thanks.c #include <stdio.h> // 声明子程序 void thanks_2(void); int main(void) {printf("Hello World\n");thanks_2(); }2 子程序 rootlocalhost:~/testc/testlink3# cat thanks_2.c #include <stdio.…...
如何根据设计稿进行移动端适配:全面详解
如何根据设计稿进行移动端适配:全面详解 文章目录 如何根据设计稿进行移动端适配:全面详解1. **理解设计稿**1.1 设计稿的尺寸1.2 设计稿的单位 2. **移动端适配的核心技术**2.1 使用 viewport 元标签2.1.1 代码示例2.1.2 参数说明 2.2 使用相对单位2.2.…...
【Kafka基础】Kafka 2.8以下版本的安装与配置指南:传统ZooKeeper依赖版详解
对于仍在使用Kafka 2.8之前版本的团队来说,需要特别注意其强依赖外部ZooKeeper的特性。本文将完整演示传统架构下的安装流程,并对比新旧版本差异。 1 版本特性差异说明 1.1 2.8 vs 2.8-核心区别 特性 2.8版本 2.8-版本 协调服务 可选内置KRaft模式 …...
Redis-x64-3.2.100.msi : Windows 安装包(MSI 格式)安装步骤
Redis-x64-3.2.100.msi 是 Redis 的 Windows 安装包(MSI 格式),适用于 64 位系统。 在由于一些环境需要低版本的Redis的安装包。 Redis-x64-3.2.100.msi 安装包下载:https://pan.quark.cn/s/cc4d38262a15 Redis 是一个开源的 内…...
ZoomCharts使用方法
本篇没有讲解,只是自己的小笔记,有看到的网友想明白具体用法的可以来私信我 <div class"zoomChartsComponent"><div id"zoomCharts-demo"></div></div> var ZoomChartsLicense ; var ZoomChartsLicenseKey…...
【云计算】打造高效容器云平台:规划、部署与架构设计
引言 随着移动互联网时代的大步跃进,互联网公司业务的爆炸式增长发展给传统行业带来了巨大的冲击和挑战,被迫考虑转型和调整。对于我们传统的航空行业来说,还存在传统的思维、落后的技术。一项新业务从提出需求到立项审批、公开招标、项目实…...
DeepSeek底层揭秘——《推理时Scaling方法》内容理解
4月初,DeepSeek 提交到 arXiv 上的最新论文正在 AI 社区逐渐升温。 论文核心内容理解 DeepSeek与清华大学联合发布的论文《奖励模型的推理时Scaling方法及其在大规模语言模型中的应用》,核心在于提出一种新的推理时Scaling方法,即通过动态调…...
JavaScript之Json数据格式
介绍 JavaScript Object Notation, js对象标注法,是轻量级的数据交换格式完全独立于编程语言文本字符集必须用UTF-8格式,必须用“”任何支持的数据类型都可以用JSON表示JS内内置JSON解析JSON本质就是字符串 Json对象和JS对象互相转化 前端…...
OBS 中如何设置固定码率(CBR)与可变码率(VBR)?
在使用 OBS 进行录制或推流时,设置“码率控制模式”(Rate Control)是非常重要的一步。常见的控制模式包括: CBR(固定码率):保持恒定的输出码率,适合直播场景。 VBR(可变码率):在允许的范围内动态调整码率,适合本地录制、追求画质。 一、CBR vs. VBR 的差异 项目CBR…...
使用 Rsync + Lsyncd 实现 CentOS 7 实时文件同步
文章目录 🌀使用 Rsync Lsyncd 实现 CentOS 7 实时文件同步前言介绍架构图🧱系统环境🔧Rsync配置(两台都需安装)关闭SELinux(两台都需) 📦配置目标端(client)…...
C# 多线程并发编程基础
1. 线程基础 1.1 线程简介 C# 中的线程是操作系统能够进行运算调度的最小单位,它被包含在进程中,是进程中的实际运作单位。一个进程可以包含多个线程,这些线程可以并发执行不同的任务。 1.2 线程的创建与启动 在 C# 中,可以使…...
RAG(检索增强生成)系统,提示词(Prompt)表现测试(数据说话)
在RAG(检索增强生成)系统中,评价提示词(Prompt)设计是否优秀,必须通过量化测试数据来验证,而非主观判断。以下是系统化的评估方法、测试指标和具体实现方案: 一、提示词优秀的核心标准 优秀的提示词应显著提升以下指标: 维度量化指标测试方法事实一致性Faithfulness …...
QML和C++交互
目录 1 QML与C交互基础1.1 全局属性1.2 属性私有化(提供接口访问) 2 QT与C交互(C创建自定义对象,qml文件直接访问)3 QT与C交互(qml直接访问C中的函数)4 QT与C交互(qml端发送信号 C端实现槽函数)…...
Android studio学习之路(六)--真机的调试以及多媒体照相的使用
多媒体应用(语言识别,照相,拍视频)在生活的各个方面都具有非常大的作用,所以接下来将会逐步介绍多媒体的使用,但是在使用多媒体之前,使用模拟器肯定是不行的,所以我们必须要使用真机…...
解决 Lettuce 在 Redis 集群模式下的故障转移问题
引言 在高可用系统中,故障转移是确保服务不中断的重要机制。当我们使用 Lettuce 作为 Redis 的 Java 客户端时,如何高效地处理故障转移成为一项关键任务。本篇文章将探讨如何在 Redis 集群模式下配置 Lettuce 以优化故障转移。 背景 在初期设置 Lettu…...
Qt 资源文件(.qrc 文件)
Qt 资源文件(.qrc 文件)是 Qt 提供的一种机制,用来将文件(如图像、音频、文本文件等)嵌入到应用程序中,使得这些文件不需要依赖外部文件路径,而是直接打包到程序的可执行文件中。通过使用 Qt 资…...
Vue 组件命名及子组件接收参数命名
1. 对于单个单词的组件 方式一:首字母大写。如 <School></School>。在 vue 开发者工具中默认使用的是该种方式。 方式二: 首字母小写。如 <school></school> 2. 对于多个单词的组件 方式一:每个单词都是小写&…...
PandaAI:一个基于AI的对话式数据分析工具
PandaAI 是一个基于 Python 开发的自然语言处理和数据分析工具,支持问答式(ChatGPT)的数据分析和报告生成功能。PandaAI 提供了一个开源的框架,主要核心组件包含用于数据处理的数据准备层(Pandas)以及实现 …...
【C++算法】50.分治_归并_翻转对
文章目录 题目链接:题目描述:解法C 算法代码:图解 题目链接: 493. 翻转对 题目描述: 解法 分治 策略一:计算当前元素cur1后面,有多少元素的两倍比我cur1小(降序) 利用单…...
Github最新AI工具汇总2025年4月份第2周
根据GitHub官方动态及开发者生态最新进展,以下是2025年4月第二周(截至4月7日)值得关注的AI工具与技术更新汇总: 1. GitHub Copilot Agent Mode全量发布 核心功能:在VS Code中启用Agent模式后,Copilot可自主…...
用VAE作为标题显示标题过短,所以标题变成了这样
VAE (Variational Autoencoder / 变分自编码器) 基本概念: VAE 是一种生成模型 (Generative Model),属于自编码器 (Autoencoder) 家族。 它的目标是学习数据的潜在表示 (Latent Representation),并利用这个表示来生成新的、与原始数据相似的数据。 与标…...
