Python字典实战: 三大管理系统开发指南(班级+会议+购物车)(附源码)

news2025/4/17 8:50:05

目录

摘要

一、班级管理系统(含成绩模块)

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(开源项目参考)

在评论区分享你的优化方案或遇到的问题,共同进步! 💬

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2330623.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

R 语言科研绘图第 36 期 --- 饼状图-基础

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…

vue 3 从零开始到掌握

vue3从零开始一篇文章带你学习 升级vue CLI 使用命令 ## 查看vue/cli版本&#xff0c;确保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…

Python爬虫第6节-requests库的基本用法

目录 前言 一、准备工作 二、实例引入 三、GET请求 3.1 基本示例 3.2 抓取网页 3.3 抓取二进制数据 3.4 添加headers 四、POST请求 五、响应 前言 前面我们学习了urllib的基础使用方法。不过&#xff0c;urllib在实际应用中存在一些不便之处。以网页验证和Cookies处理…

什么是可靠性工程师?

一、什么是可靠性工程师&#xff1f; 可靠性工程师就是负责确保产品在使用过程中不出故障、不给客户添麻烦。 你可以理解为是那种“挑毛病的人”&#xff0c;但不是事后挑&#xff0c;是提前想清楚产品在哪些情况下可能会出问题&#xff0c;然后解决掉。 比如&#xff1a; …

如何根据设计稿进行移动端适配:全面详解

如何根据设计稿进行移动端适配&#xff1a;全面详解 文章目录 如何根据设计稿进行移动端适配&#xff1a;全面详解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之前版本的团队来说&#xff0c;需要特别注意其强依赖外部ZooKeeper的特性。本文将完整演示传统架构下的安装流程&#xff0c;并对比新旧版本差异。 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 安装包&#xff08;MSI 格式&#xff09;&#xff0c;适用于 64 位系统。 在由于一些环境需要低版本的Redis的安装包。 Redis-x64-3.2.100.msi 安装包下载&#xff1a;https://pan.quark.cn/s/cc4d38262a15 Redis 是一个开源的 内…

【云计算】打造高效容器云平台:规划、部署与架构设计

引言 随着移动互联网时代的大步跃进&#xff0c;互联网公司业务的爆炸式增长发展给传统行业带来了巨大的冲击和挑战&#xff0c;被迫考虑转型和调整。对于我们传统的航空行业来说&#xff0c;还存在传统的思维、落后的技术。一项新业务从提出需求到立项审批、公开招标、项目实…

DeepSeek底层揭秘——《推理时Scaling方法》内容理解

4月初&#xff0c;DeepSeek 提交到 arXiv 上的最新论文正在 AI 社区逐渐升温。 论文核心内容理解 DeepSeek与清华大学联合发布的论文《奖励模型的推理时Scaling方法及其在大规模语言模型中的应用》&#xff0c;核心在于提出一种新的推理时Scaling方法&#xff0c;即通过动态调…

JavaScript之Json数据格式

介绍 JavaScript Object Notation&#xff0c; js对象标注法&#xff0c;是轻量级的数据交换格式完全独立于编程语言文本字符集必须用UTF-8格式&#xff0c;必须用“”任何支持的数据类型都可以用JSON表示JS内内置JSON解析JSON本质就是字符串 Json对象和JS对象互相转化 前端…

使用 Rsync + Lsyncd 实现 CentOS 7 实时文件同步

文章目录 &#x1f300;使用 Rsync Lsyncd 实现 CentOS 7 实时文件同步前言介绍架构图&#x1f9f1;系统环境&#x1f527;Rsync配置&#xff08;两台都需安装&#xff09;关闭SELinux&#xff08;两台都需&#xff09; &#x1f4e6;配置目标端&#xff08;client&#xff09…

Android studio学习之路(六)--真机的调试以及多媒体照相的使用

多媒体应用&#xff08;语言识别&#xff0c;照相&#xff0c;拍视频&#xff09;在生活的各个方面都具有非常大的作用&#xff0c;所以接下来将会逐步介绍多媒体的使用&#xff0c;但是在使用多媒体之前&#xff0c;使用模拟器肯定是不行的&#xff0c;所以我们必须要使用真机…

Qt 资源文件(.qrc 文件)

Qt 资源文件&#xff08;.qrc 文件&#xff09;是 Qt 提供的一种机制&#xff0c;用来将文件&#xff08;如图像、音频、文本文件等&#xff09;嵌入到应用程序中&#xff0c;使得这些文件不需要依赖外部文件路径&#xff0c;而是直接打包到程序的可执行文件中。通过使用 Qt 资…

PandaAI:一个基于AI的对话式数据分析工具

PandaAI 是一个基于 Python 开发的自然语言处理和数据分析工具&#xff0c;支持问答式&#xff08;ChatGPT&#xff09;的数据分析和报告生成功能。PandaAI 提供了一个开源的框架&#xff0c;主要核心组件包含用于数据处理的数据准备层&#xff08;Pandas&#xff09;以及实现 …

【C++算法】50.分治_归并_翻转对

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解 题目链接&#xff1a; 493. 翻转对 题目描述&#xff1a; 解法 分治 策略一&#xff1a;计算当前元素cur1后面&#xff0c;有多少元素的两倍比我cur1小&#xff08;降序&#xff09; 利用单…

基于pycatia的CATIA层级式BOM生成器开发全解析

引言:BOM生成技术的革新之路 在高端装备制造领域,CATIA的BOM管理直接影响着研发效率和成本控制。传统VBA方案 虽能实现基础功能,但存在代码维护困难、跨版本兼容性差等痛点。本文基于pycatia框架,提出一种支持动态层级识别、智能查重、Excel联动的BOM生成方案,其核心突破…

Flink 1.20 Kafka Connector:新旧 API 深度解析与迁移指南

Flink Kafka Connector 新旧 API 深度解析与迁移指南 一、Flink Kafka Connector 演进背景 Apache Flink 作为实时计算领域的标杆框架&#xff0c;其 Kafka 连接器的迭代始终围绕性能优化、语义增强和API 统一展开。Flink 1.20 版本将彻底弃用基于 FlinkKafkaConsumer/FlinkK…

2025年渗透测试面试题总结- 某四字大厂面试复盘扩展 一面(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 某四字大厂面试复盘扩展 一面 一、Java内存马原理与查杀 二、冰蝎与哥斯拉原理对比&#xff08;技术演…

批量压缩 jpg/png 等格式照片|批量调整图片的宽高尺寸

图片格式种类非常的多&#xff0c;并且不同的图片由于像素、尺寸不一样&#xff0c;可能占用的空间也会不一样。文件太大会占用较多的磁盘空间&#xff0c;传输及上传系统都非常不方便&#xff0c;可能会收到限制&#xff0c;因此我们经常会碰到需要对图片进行压缩的需求。如何…