Python、数据库课程设计-餐馆点餐系统-连接Mysql数据库-tkinter库实现图形化界面
xiumukediao1 2024-06-29 10:35:02 阅读 92
该点餐系统是基于Mysql数据库的一个点餐系统,用Python自带的数据库库也可实现,该系统可同时作为Python和数据库的课程设计,该系统基于Python,数据库系统主要用于储存数据,具体的数据操作都由Python实现。
本系统数据库部分一共建立了八个表,关系模式如下:
菜谱(菜品编号,菜品名称,菜品类别,菜品价格)∈3NF
顾客(顾客编号,顾客姓名,顾客性别,顾客手机号)∈3NF
餐桌(餐桌号,餐桌座位数,餐桌使用状态,餐桌性质)∈3NF
员工(员工编号,员工姓名,员工性别,员工年龄,员工工资,员工手机号)∈3NF
点餐(订单编号,菜品编号,菜品名称,菜品数量)∈3NF
订单(订单编号,顾客编号,消费时间,餐桌号,员工编号)∈3NF
账单(订单编号,消费金额,折扣后金额,消费时间)∈3NF
折扣规则(消费金额,折扣)∈3NF
红色字体的为主键;
以下更清楚的显示了数据库中的内容。具体的代码下载sql文件查看
以下是Python的代码部分:
import pymysql
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox #引入库
conn=pymysql.connect(host='localhost',user='root',password='15115551136',database='cg_manage')
cur=conn.cursor() #连接数据库
Cz_id=''
C_id=''
Z_cai=''
caidan=[]
xuanze=''
def goto1(): #定义子窗口用于输入信息
def cs(): #输出提示窗提示餐桌的说明
messagebox.showinfo("餐桌说明","1-2号桌为16人座,3-6号桌为8人座,7-13号桌为4人座") #弹窗
def on_select1(event): #定义全局变量Cz_id的值,便于后续的数据库数据更新
global Cz_id #定义全局变量
Cz_id=C_zuo.get() #全局变量赋值
print(Cz_id)
def baocun(): #定义用户信息插入数据库的函数,也更新餐桌信息
try: #测试用户是否选择空的餐桌号
cur.execute("select MAX(C_id) from comsumer") #得到下一位顾客的编号
max=cur.fetchone()
max=int(max[0])
count=max
s=1
while count//10!=0:
s+=1
count/=10
sql1="update foodtable set Cz_zt='有人' where Cz_id='{}'".format(Cz_id) #餐桌更新指令
if E_xm.get() and E_xb.get() and E_phone.get(): #判断用户是否输入全部信息
global C_id
C_id="{}{}".format((5-s)*'0',str(max+1))
print(C_id)
sql2="insert into comsumer values('{}{}','{}','{}','{}')".format((5-s)*'0',str(max+1),E_xm.get(),E_xb.get(),E_phone.get()) #用户信息插入指令
print(sql1)
print(sql2) ###
#cur.execute(sql1) #执行更新指令
#cur.execute(sql2) #执行插入指令
window1.destroy() #销毁子窗口,用户信息的输入和餐桌的选择完成
else: #若用户没有输入全部信息,则弹窗提示,重新操作
messagebox.showwarning("温馨提示","请输入完整的信息")
except: #没有就弹窗提示,重新操作
messagebox.showerror("温馨提示!","请先选择餐桌")
window1=tk.Toplevel() #创建子窗口
window1.title("欢迎光临") #设置子窗口的标题
window1.geometry('250x130+1060+440') #窗口大小
but1=tk.Button(window1,text="退出",command=lambda:window1.destroy()) #设置退出按钮,销毁子窗口
title=tk.Label(window1,text="请输入个人信息",font=("黑体",10))
b_que=tk.Button(window1,text="确定",command=lambda:baocun()) #设置确定按钮,与baocun函数绑定
L_xm=tk.Label(window1,text="姓名",font=("黑体",10))
L_xb=tk.Label(window1,text="性别",font=("黑体",10))
L_phone=tk.Label(window1,text="电话",font=("黑体",10))
L_zuowei=tk.Label(window1,text="餐桌",font=("黑体",10))
B_cs=tk.Button(window1,text="餐桌说明",font=("黑体",10),command=lambda:cs())
E_xm=tk.Entry(window1) #用户信息输入
E_xb=tk.Entry(window1)
E_phone=tk.Entry(window1)
cur.execute("select * from foodtable") #查询数据库中餐桌的信息
table=[]
for i in cur.fetchall(): #将空的餐桌保存到列表table中
if i[2]=='空':
table.append(i[0])
c=len(table)
C_zuo=ttk.Combobox(window1,values=table,width=6) #定义下拉框控件,让用户选择餐桌
C_zuo.bind('<<ComboboxSelected>>', on_select1) #将下拉框的选择绑定on_select函数
#控件布局
but1.grid(row=4,column=2)
b_que.grid(row=4,column=1)
title.grid(row=0,column=1)
L_xm.grid(row=1,column=0)
L_xb.grid(row=2,column=0)
L_phone.grid(row=3,column=0)
E_xm.grid(row=1,column=1,columnspan=2)
E_xb.grid(row=2,column=1,columnspan=2)
E_phone.grid(row=3,column=1,columnspan=2)
L_zuowei.grid(row=0,column=4)
C_zuo.grid(row=1,column=4)
B_cs.grid(row=2,column=4)
window1.mainloop() #循环
def tianjia1():
if Cz_id and C_id:
global Z_cai
global caidan
if num1.get() and Z_cai:
cai="{} 数量:{}".format(Z_cai,num1.get())
LI_menu.insert("end",cai)
tishi.set("添加成功")
caidan.append(Z_cai)
caidan.append(num1.get())
print(caidan)
num1.set(1)
elif num2.get() and Z_cai:
cai="{} 数量:{}".format(Z_cai,num2.get())
LI_menu.insert("end",cai)
tishi.set("添加成功")
caidan.append(Z_cai)
caidan.append(num2.get())
print(caidan)
num2.set(1)
else:
tishi.set("请输入数量")
else:
messagebox.showinfo("温馨提示!","点餐请先填写个人信息")
def tianjia2():
if Cz_id and C_id:
cai="{} 数量:{}".format()
LI_menu.insert("end",cai)
tishi.set("添加成功")
else:
messagebox.showinfo("温馨提示!","点餐请先填写个人信息")
def on_select2(event):
if LI_menu_main.curselection():
global Z_cai
Z_cai = LI_menu_main.get(LI_menu_main.curselection())
print(Z_cai)
def on_select3(event):
if LI_menu_other.curselection():
global Z_cai
Z_cai = LI_menu_other.get(LI_menu_other.curselection())
print(Z_cai)
def shan():
try:
global caidan
ge=E_shan.get()
print(ge)
index=caidan.index(ge)
index=int(index)
index1=int(index/2)
print(index)
LI_menu.delete(index1,index1)
caidan.pop(index)
caidan.pop(index)
print(caidan)
tishi.set("删除成功")
except:
messagebox.showinfo("温馨提示!","请输入想要删除的菜名")
window=tk.Tk() #创建主窗口
window.title("Python 餐馆点餐系统") #设置标题
window.geometry('600x350+440+340') #设置大小
num1=tk.IntVar()
num2=tk.IntVar()
num1.set(1)
num2.set(1)#定义变量
T_main=tk.StringVar()
tishi=tk.StringVar()
T_other=tk.StringVar()
cur.execute("select * from menus") #获得菜单
main=[]
other=[]
for i in cur.fetchall():
if i[2]=="荤类" or i[2]=="鱼类" or i[2]=="素类" or i[2]=="面类" or i[2]=="汤类" :
main.append(i[1])
else:
other.append(i[1])
main=tuple(main)
other=tuple(other)
T_other.set(other)
T_main.set(main)#给控件送值
but=tk.Button(window,text="个人信息",width=6,height=1,justify='center',command=lambda:goto1()) #定义按钮,绑定goto函数,点击后打开子窗口
but.justify='right' #设置对齐方式
L_huan=tk.Label(window,text="欢迎使用餐馆点餐系统",font=("微软雅黑",20),fg='red',anchor="center") #设置标签
L_diancai=tk.Label(window,text="点菜区",font=("黑体",15),fg='red',justify='center')
L_shan=tk.Label(window,text="请输入你要删除的菜名")
L_xiadan=tk.Label(window,text="您所选择的菜品",font=("黑体",15),fg='red',justify='center')
L_tishi=tk.Label(window,textvariable=tishi,font=("微软雅黑",15),fg='red')
spinbox_num1 = tk.Spinbox(window, from_=0, to=10,width=6,textvariable=num1)
spinbox_num2 = tk.Spinbox(window, from_=0, to=10,width=6,textvariable=num2)#定义列表框控件
LI_menu_main=tk.Listbox(window,listvariable=T_main,width=10) #给列表框控件绑定值
LI_menu_other=tk.Listbox(window,listvariable=T_other,width=10)
LI_menu=tk.Listbox(window,width=40,justify='center')
LI_menu_main.bind('<<ListboxSelect>>', on_select2)
LI_menu_other.bind('<<ListboxSelect>>', on_select3)
E_shan=tk.Entry(window,justify="right")
B_shan=tk.Button(window,text="删除",width=6,height=1,justify="right",command=lambda:shan())
B_jia1=tk.Button(window,text="添加",width=6,height=1,justify="left",command=lambda:tianjia1())
B_jia2=tk.Button(window,text="添加",width=6,height=1,justify="left",command=lambda:tianjia1())
#控件布局
but.grid(row=0,column=0)
B_jia1.grid(row=5,column=0)
B_jia2.grid(row=5,column=2)
B_shan.grid(row=4,column=6)
E_shan.grid(row=4,column=5)
LI_menu_other.grid(row=3,column=0,padx=10)
LI_menu_main.grid(row=3,column=2,padx=5)
LI_menu.grid(row=3,column=4,columnspan=3,padx=50)
spinbox_num1.grid(row=4,column=0)
spinbox_num2.grid(row=4,column=2)
L_shan.grid(row=4,column=4)
L_huan.grid(row=0,column=2,columnspan=4)
L_tishi.grid(row=5,column=4)
L_diancai.grid(row=2,column=0,columnspan=3)
L_xiadan.grid(row=2,column=4,columnspan=3)
window.mainloop() #循环
cur.close() #关闭游标
conn.close() #关闭数据库
上一篇: 系统调优助手,PyTorch Profiler TensorBoard 插件教程
本文标签
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。