当前位置: 首页 > news >正文

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("错误:班级名称不能为空!")
        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(开源项目参考)

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

相关文章:

  • git修改已经push的commit的message
  • Spring Boot中Spring MVC相关配置的详细描述及表格总结
  • C4D XP 粒子动画云端渲染指南
  • 控制理论-传递函数
  • 【docker】
  • 前后端 Mock 技术实践指南【大模型总结】
  • 1、window 下SDL 下载使用, 测试环境搭建
  • 位运算题目:N 天后的牢房
  • [数据集]The Natural Scenes Dataset (NSD)介绍,申请及使用方法
  • 【蓝桥杯】算法笔记6
  • CubeMX配置STM32VET6实现网口通信(无操作系统版-附源码)
  • win11 nacos2.2.1 报错curl -X post 报错找不到和名称X匹配参数;不是命令
  • excel经验
  • (三十七)Dart 中使用 Pub 包管理系统与 HTTP 请求教程
  • leetcode0410. 分割数组的最大值-hard
  • 程序化广告行业(69/89):DMP与PCP系统核心功能剖析
  • STM32看门狗应用实战:独立看门狗与窗口看门狗深度解析(下) | 零基础入门STM32第九十五步
  • 详细介绍javaspringboot操控redis的高级特性1. 事务支持2. 发布/订阅3. Pipeline批量操作
  • git rebase复杂场景验证
  • QtConcurrent
  • 做交互式的网站怎么做/hs网站推广
  • 成都极客联盟网站建设公司/百度站长平台工具
  • .net给网站做短信验证/seo优化的作用
  • html国外网站源码/百度搜索引擎入口登录
  • 南宫做网站/百度收录规则
  • 淄博市沂源县建设局网站/软文兼职