# 餐厅订餐系统
## 系统结构设计
### 体系结构
整体上,本系统采用了三级模式两级映像的经典数据库管理系统体系结构。
在三级模式中,内模式即为数据的物理结构,描述了数据在物理结构中的存储方式;模式即为数据的全局逻辑结构,描述了全体数据的逻辑结构及其特性;外模式即为局部逻辑结构,描述了与某一应用有关的数据的逻辑结构。
在两级映像中,模式/内模式映像描述了数据的物理独立性,即数据的逻辑结构与物理结构间的对应关系;外模式/模式映像则描述了数据的逻辑独立性,即全局逻辑结构的改变不会对局部逻辑结构造成影响。
系统体系结构如下图:
![](https://www.writebug.com/myres/static/uploads/2022/7/27/605983066fa5b605402696ae2cd9dde5.writebug)
图 1 系统体系结构
- 功能结构
根据系统设计文档,本系统的功能共分为三部分,分别为面向管理员的功能、面向顾客的功能,以及用户管理功能。
对于不同的使用对象,系统提供的功能权限也不相同,具体的系统功能结构如下图:
![](https://www.writebug.com/myres/static/uploads/2022/7/27/6888860ee1d894f322ce47d05949989c.writebug)
图 2 系统功能结构图
需要注明的是,针对管理员和顾客这两个不同的对象,他们能够进行查询的数据范围也不相同。
管理员可以查询整个数据库中除了用户管理信息外的全部信息;而对于顾客用户,可以查询的数据范围除了餐厅的“静态”信息外,只有属于该用户的订单、反馈等信息可以查询。
### 数据库基本表的定义
表 1 取餐信息表(address_information)
| 字段名 | 数据类型 | 宽度 | 字段描述 |
| ----------- | -------- | ---- | ---------------------- |
| id_ai | INT | 4 | 取餐信息的编号 |
| name | VARCHAR | 45 | 取餐人姓名 |
| tele | VARCHAR | 45 | 取餐人电话 |
| address | VARCHAR | 45 | 取餐地址 |
| id_customer | VARCHAR | 4 | 该信息所属的顾客的编号 |
表 2 管理员账户表(administrator)
| 字段名 | 数据类型 | 宽度 | 字段描述 |
| ---------------------- | -------- | ---- | -------------- |
| id_administrator | INT | 4 | 管理员的编号 |
| name_administrator | VARCHAR | 45 | 管理员账户名 |
| password_administrator | VARCHAR | 45 | 管理员账户密码 |
表 3 顾客账户表(customer)
| 字段名 | 数据类型 | 宽度 | 字段描述 |
| ----------------- | -------- | ---- | ------------ |
| id_customer | INT | 4 | 顾客的编号 |
| username_customer | VARCHAR | 45 | 顾客账户名 |
| password_customer | VARCHAR | 45 | 顾客账户密码 |
表 4 员工信息表(employee)
| 字段名 | 数据类型 | 宽度 | 字段描述 |
| ------------------- | -------- | ---- | ---------- |
| id_employee | INT | 4 | 员工的编号 |
| name_employee | VARCHAR | 45 | 员工姓名 |
| age_employeer | VARCHAR | 45 | 员工年龄 |
| occupation_employee | VARCHAR | 45 | 员工职位 |
| tele_employee | VARCHAR | 45 | 员工电话 |
表 5 入职信息表(employee_information)
| 字段名 | 数据类型 | 宽度 | 字段描述 |
| ------------- | -------- | ---- | ---------- |
| id_employee | INT | 4 | 员工的编号 |
| id_restaurant | INT | 4 | 餐厅的编号 |
| in_date | VARCHAR | 45 | 入职时间 |
| occupation | VARCHAR | 45 | 员工职位 |
| leave_date | VARCHAR | 45 | 离职时间 |
表 6 反馈信息表(feedback)
| 字段名 | 数据类型 | 宽度 | 字段描述 |
| ---------------- | -------- | ---- | -------------- |
| id_feedback | INT | 4 | 反馈信息的编号 |
| id_customer | INT | 4 | 顾客的编号 |
| id_order | INT | 4 | 订单的编号 |
| time_feedback | VARCHAR | 45 | 反馈时间 |
| content_feedback | VARCHAR | 200 | 反馈内容 |
表 7 食物表(food)
| 字段名 | 数据类型 | 宽度 | 字段描述 |
| ---------- | -------- | ---- | ---------- |
| id_food | INT | 4 | 食物的编号 |
| name_food | VARCHAR | 45 | 食物的名字 |
| price_food | FLOAT | 4 | 食物的价格 |
表 8 食物订单表(food)
| 字段名 | 数据类型 | 宽度 | 字段描述 |
| -------- | -------- | ---- | ---------- |
| id_order | INT | 4 | 订单的编号 |
| id_food | INT | 4 | 食物的编号 |
| num_food | INT | 4 | 食物的数量 |
表 9 职位表(job)
| 字段名 | 数据类型 | 宽度 | 字段描述 |
| ---------- | -------- | ---- | -------- |
| name_job | VARCHAR | 45 | 工作名称 |
| salary_job | VARCHAR | 45 | 月工资 |
表 10 订单表(myorder)
| 字段名 | 数据类型 | 宽度 | 字段描述 |
| ------------- | -------- | ---- | ------------ |
| id_order | INT | 4 | 订单编号 |
| id_restaurant | INT | 4 | 餐厅编号 |
| id_ai | INT | 4 | 地址信息编号 |
| tot_price | FLOAT | 4 | 订单总价格 |
| time_order | VARCHAR | 45 | 订餐时间 |
表 11 餐厅信息表(restaurant)
| 字段名 | 数据类型 | 宽度 | 字段描述 |
| ---------------- | -------- | ---- | ------------ |
| id_restaurant | INT | 4 | 餐厅编号 |
| loc_restaurant | VARCHAR | 45 | 餐厅地址 |
| accom_restaurant | VARCHAR | 45 | 餐厅容纳人数 |
| tele_restaurant | VARCHAR | 45 | 餐厅电话 |
表 12 套餐表(set_meal)
| 字段名 | 数据类型 | 宽度 | 字段描述 |
| -------------- | ----------- | ---- | ---------- |
| id_set_meal | INT | 4 | 套餐的编号 |
| name_set_meal | VARCHAR(45) | 45 | 套餐名字 |
| price_set_meal | FLOAT | 4 | 套餐价格 |
表 13 套餐订单表(set_meal_order)
| 字段名 | 数据类型 | 宽度 | 字段描述 |
| ------------ | -------- | ---- | ---------- |
| id_order | INT | 4 | 订单的编号 |
| id_set_meal | INT | 4 | 套餐的编号 |
| num_set_meal | INT | 4 | 套餐的数量 |
表 14 套餐组成(set_from)
| 字段名 | 数据类型 | 宽度 | 字段描述 |
| ----------- | -------- | ---- | ---------- |
| id_set_meal | INT | 4 | 套餐的编号 |
| id_food | INT | 4 | 食物的编号 |
| num | INT | 4 | 食物的数量 |
### 系统重要功能实现方法
用户管理
登录:
登录分为管理员登陆和用户登录,前端在接收到输入的用户名和密码后,返回给后端,同时多返回给后端一个值用来告知是管理员还是用户在登录。后端接收到数据后,首先判断是谁登录,然后调用相应的登陆函数。检查时首先检查用户名是否存在,如果不存在则提示,然后再检查是否密码错误并给出相应提示,最后如果登陆成功则提示登陆成功并且返回用回答,后端记录下当前用户的 id。
![](https://www.writebug.com/myres/static/uploads/2022/7/27/3742e09dad5c8489189953846a3c6911.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/7/27/983cb1a22054e237e2fb5885902ff570.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/7/27/6b81792ce1f5debbf92d53a86a2ed2f5.writebug)
注册:
顾客在前端输入用户名和密码,前端接收