20244101 2024-2025-2《Python程序设计》实验4报告

20244101 2024-2025《Python程序设计》实验四报告
课程:《Python程序设计》
班级: 2441
姓名: 马清莹
学号:20244101
实验教师:王志强
实验日期:2025年5月13日
必修/选修: 公选课
一、实验要求
Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
例如:编写从社交网络爬取数据,实现可视化舆情监控或者情感分析。
例如:利用公开数据集,开展图像分类、恶意软件检测等
例如:利用Python库,基于OCR技术实现自动化提取图片中数据,并填入excel中。
例如:爬取天气数据,实现自动化微信提醒
例如:利用爬虫,实现自动化下载网站视频、文件等。
例如:编写小游戏:坦克大战、贪吃蛇、扫雷等等
二、实验内容
结合一学期的 Python 课程学习,本次实验利用 Python 语言结合 Tkinter 库开发一个自助点餐应用程序。通过该程序,实现餐品的选择(汉堡包、蛋挞、猪肉卷)以及付款计算功能(计算总金额、找零或提示金额不足),帮助用户便捷完成点餐和支付流程。同时,通过此次实践,加深对 Python 编程、Tkinter 库以及简单数据处理等知识的理解与应用。
三、实验过程
要制作自助点餐程序,首先需创建可视化的点餐页面,本次采用 Tkinter 库实现。在开发前,决定采用模块化设计思想,将系统划分为以下 2 个核心模块:

  1. 功能模块设计
    1.1 数据计算模块
    由相关函数实现,负责计算订单总金额以及处理付款逻辑。
    calculate_total()函数:判断各餐品对应的变量值是否为 1(表示选中),若选中则将对应价格累加到总金额,最后返回总金额。

    pay()函数:尝试获取用户输入的付款金额并转换为浮点数,调用calculate_total()函数得到总金额。若付款金额大于等于总金额,计算找零并显示;若付款金额不足,提示还需的金额;若输入非有效金额,提示输入有效金额。

    1.2 界面交互模块
    基于 Tkinter 库创建主窗口、标签、框架、复选框、输入框、按钮等组件,实现用户与系统的图形界面交互,包括餐品选择界面和付款界面的设计与实现。

创建主窗口:设置窗口标题为 “自助点餐”,尺寸为 300x400。
标题标签:显示 “请问需要什么?”,设置字体为 Arial、大小 10,放置在窗口上方,垂直间距 10。

内容框架:用于容纳餐品选择的复选框,放置在窗口中。
食物选择复选框:分别为汉堡包、蛋挞、猪肉卷创建复选框,设置对应的文本和价格,绑定对应的 IntVar 变量,放置在内容框架内,左对齐,水平和垂直间距分别为 10 和 5。

付款部分:包含付款金额标签、输入框和付款按钮。付款金额标签显示 “请输入付款金额:”,设置字体,放置在窗口下方,垂直间距 10;输入框用于用户输入付款金额;付款按钮显示 “付款”,绑定 pay 函数,放置在输入框下方,垂直间距 10。

结果显示标签:用于显示找零或金额不足等信息,设置字体为 Arial、大小 10,前景色为红色,放置在付款按钮下方。

最终,经过测试,自助点餐程序的各项功能均能正常运行,达到了预期的设计目标。用户可以通过勾选复选框选择餐品,输入付款金额后点击付款按钮,程序能正确计算总金额并显示找零或金额不足的信息。不过,在测试过程中也发现一些可改进之处,例如界面设计较为简单,美观度有待提升,目前仅满足基本功能需求,缺乏视觉吸引力;功能较为单一,仅实现了三种餐品的选择和简单的付款计算,可进一步扩展餐品种类,增加订单历史查询等功能。

运行视频如下:😕/www.bilibili.com/video/BV1i47SzfEia/
源代码如下:
import tkinter as tk
from tkinter import simpledialog
def calculate_total():
total = 0
if burger_var.get() == 1:
total += 12
if egg_tart_var.get() == 1:
total += 7
if pork_roll_var.get() == 1:
total += 10
return total
def pay():
try:
payment = float(payment_entry.get())
total = calculate_total()
if payment >= total:
change = payment - total
change_label.config(text=f"收您{round(payment, 2)}元,找零:{round(change, 2)}元")
else:
change_label.config(text=f"付款金额不足,还需{round(total - payment, 2)}元")
except ValueError:(
change_label.config(text="请输入有效的金额"))
root = tk.Tk()
root.title("自助点餐")
root.geometry("300x400")

标题

title_label = tk.Label(root, text="请问需要什么?", font=("Arial", 10))
title_label.pack(pady=10)

内容框架

content_frame = tk.Frame(root)
content_frame.pack()

食物选择

burger_var = tk.IntVar()
burger_checkbox = tk.Checkbutton(content_frame, text="汉堡包:12 元",
variable=burger_var)
burger_checkbox.pack(anchor="w", padx=10, pady=5)
egg_tart_var = tk.IntVar()
egg_tart_checkbox = tk.Checkbutton(content_frame, text="蛋挞:7 元",
variable=egg_tart_var)
egg_tart_checkbox.pack(anchor="w", padx=10, pady=5)
pork_roll_var = tk.IntVar()
pork_roll_checkbox = tk.Checkbutton(content_frame, text="猪肉卷:10 元",
variable=pork_roll_var)
pork_roll_checkbox.pack(anchor="w", padx=10, pady=5)

付款部分

payment_label = tk.Label(root, text="请输入付款金额:", font=("Arial", 10))
payment_label.pack(pady=10)
payment_entry = tk.Entry(root)
payment_entry.pack()
pay_button = tk.Button(root, text="付款", command=pay)
pay_button.pack(pady=10)

结果显示

change_label = tk.Label(root, font=("Arial", 10), fg="red")
change_label.pack()
root.mainloop()
四、实验问题与解决
问题 1:程序运行时界面布局不够整齐
解决方案:在布局各组件时,合理使用padx和pady参数,为组件设置合适的水平和垂直间距,使界面布局更加整齐美观。
问题 2:输入非数字金额时程序报错
解决方案:在pay()函数中添加异常处理代码,使用try-except块捕获ValueError异常,当用户输入非有效金额时,在结果显示标签中提示 “请输入有效的金额”,避免程序报错崩溃。
五、其他(感悟、思考等)
通过本次 Python 实验,我深入掌握了 Tkinter 库的界面开发逻辑,从模块化设计(数据计算与界面交互分离)到事件绑定、异常处理的全流程实践,切实提升了代码结构化能力与调试技巧。在实现自助点餐系统时,通过calculate_total函数与界面组件的协同,清晰呈现了业务逻辑与交互逻辑的解耦思路,而try-except对非数字输入的处理,则让我理解了健壮性编码的重要性。
尽管系统实现了基础点餐与支付功能,但界面布局的简洁性(如组件间距优化)和功能扩展性(如订单历史存储)仍有提升空间。此次实践让我认识到,编程不仅是逻辑实现,更需兼顾用户体验与系统完整性。未来计划进一步探索 Python 生态库(如 Pandas 数据处理、Matplotlib 可视化),尝试将数据持久化、个性化推荐等功能融入类似项目,以深化技术应用的层次感与实用性。

posted @ 2025-06-08 22:34  马清莹  阅读(49)  评论(0)    收藏  举报