外卖数据库管理系统

环境 MySQL Community Server 8.0.25 、Python 3.8、Tkinter


需求分析

本程序模拟一个外卖平台系统,该系统由三端构成即用户+商家+配送员。
不同的用户(三类)有不同的ID,姓名可重名。每个用户可以下多个订单,每个订单对应一个配送员,一个订单内可包含多个同一家店铺的商品,每个商家可以同时处理来自多个用户的多个订单。一个配送员可以同时派送多个订单,订单对应的配送员由外卖平台统一分配。
三类用户均可以以自己的账号密码登录对应的系统,可以注册新账号

实现的功能:

  • 用户:登录/注册功能,修改用户信息功能,充值账户余额功能,获取正在营业的店铺菜单功能,点外卖提交订单功能,查询订单功能。
  • 商家:登录/注册功能,一键上/下班功能 ,修改商家信息功能,营业额提现功能,商品管理模块包括:查询商品详情、新建商品、修改原有商品、删除商品功能。接单窗口显示已接单未出餐商品,标记餐品为我已出餐功能,查询最近已出餐商品功能。
  • 配送员:登录/注册功能,一键上/下班功能 ,修改个人信息功能,工资提现功能,工作窗口显示派送给自己的所有订单,修改订单状态为已完成(点击我已送达)功能,查看最近派送完成的订单功能。

数据库设计

逻辑结构设计

  • 商家:店名,商家号,登录密码,地址,电话,营业额,状态,
  • 商品:编号,商品名,价格,商家号,库存
  • 骑手:编号,登录密码,姓名,性别,电话,工资,状态,
  • 顾客:ID,登录密码,姓名,性别,地址, 电话,余额。
  • 订单:订单号,骑手号,顾客ID,状态,备注,配送费,金额,发起时间
  • 订单详情:订单号,商品号,数量

关系属性

  • Store(Sno,Spass,Sname,Saddr,Stel,Smoney,Sstate)
  • Goods(Gno,Sno,Gname,Gprice,Gstock)
  • Customer(Cno,Cpass,Cname,Csex,Caddr,Ctel,Cmoney)
  • Deliverer(Dno,Dpass,Dname,Dsex,Dtel,Dmoney,Dstate)
  • Order(Ono,Dno,Cno,Ostate,Otip,ODelfee,Omoney,Obtime)
  • Purchase(Ono,Gno,Pamount)

E-R图

数据表

商店表(store)

  • 主码:Sno
  • 自定义完整性:
    CHECK (Sstate IN (‘工作’,‘休息’)),
    CHECK (Smoney >= 0)
    在这里插入图片描述

商品表(goods)

  • 主码:Gno
  • 外码:FOREIGN KEY (Sno) REFERENCES Store(Sno)
    在这里插入图片描述

顾客表(Customer)

  • 主码:Cno
  • 自定义完整性:
    CHECK (Csex IN (‘M’,‘F’)),
    CHECK (Cmoney >= 0)
    在这里插入图片描述

派送员表(deliverer)

  • 主码:Dno
  • 自定义完整性:
    CHECK (Dsex IN (‘M’,‘F’)),
    CHECK (Dstate IN (‘工作’,‘休息’)),
    CHECK (Dmoney >= 0)
    在这里插入图片描述

订单表(orderr)

  • 主码:Ono
  • 外码:
    FOREIGN KEY (Dno) REFERENCES Deliverer(Dno),
    FOREIGN KEY (Cno) REFERENCES Customer(Cno) ,
    FOREIGN KEY (Sno) REFERENCES Store(Sno) ,
  • 自定义完整性:
    CHECK (Omoney >= 0),
    CHECK (ODelfee >= 0),
    CHECK (Ostate IN(‘正在出餐’,‘正在配送’,‘订单完成’))
    在这里插入图片描述

订单详情表(purchase)

  • 主码:PRIMARY KEY (Ono, Gno ),
  • 外码:FOREIGN KEY (Ono) REFERENCES Orderr(Ono) ,
    FOREIGN KEY (Gno) REFERENCES Goods(Gno) ,
    在这里插入图片描述

视图

用户点单视图

用户点单时可以看见所有商家的所有菜品。用户需要看到的是商店名而不是商店编号,商品名而不是商品编号。

CREATE VIEW view_Cus_buy AS 
SELECT Sname '店名',Gname '商品',Gprice '价格'
FROM goods,store
WHERE goods.Sno = store.Sno
AND store.Sstate = '工作'
ORDER BY store.Sno ;

用户订单视图

用户可以看到订单的信息。

CREATE VIEW view_Cus_look AS SELECT
orderr.Ono,
store.Sname,
orderr.Omoney,
orderr.Ostate,
orderr.Obtime,
orderr.Cno
FROM orderr,store 
WHERE store.Sno = Orderr.Sno
ORDER BY orderr.Obtime DESC ;

密码视图

将三类用户的密码整合在一起,并根据来源添加类型字段。方便验证密码。

CREATE VIEW Password ID,'密码','类型'AS 
SELECT Cno ,Cpass ,'用户' 
FROM Customer
UNION
SELECT Sno,Spass,'商家'
FROM Store
UNION
SELECT Dno,Dpass,'配送员'
FROM Deliverer ;

配送员视图

骑手无法查看订单所有信息,需要快速查看地址电话等,故需要单独设计视图。

CREATE VIEW view_del_unfinish AS 
SELECT store.Sname,customer.Caddress,customer.Ctel,orderr.ODelfee,orderr.Ono
FROM store,customer,orderr
WHERE orderr.Ostate = '正在配送'
AND orderr.Sno=store.Sno
AND orderr.Cno=customer
评论 64
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cheney822

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值