目录
一、 需求分析 1

  1. 需求描述 1
  2. 数据流图 2
  3. 数据元素表 3
    二、 数据库概念模式设计 5
  4. 系统初步E-R图 5
  5. 系统基本E-R图 7
    三、 数据库逻辑模式设计 8
  6. 数据库关系模式 8
    (1)实体 8
    (2)实体间联系 8
  7. 关系模式范式等级的判定与规范化 8
    (1) 函数依赖分析 8
    (2) 范式等级判定与规范化 10
  8. 数据库设计优化 10
    四、系统结构设计 11
  9. 体系结构 11
  10. 功能结构 11
    五、数据库基本表的定义 13
    六、系统重要功能实现方法 15
  11. 用户管理 15
  12. 管理端 16
  13. 顾客端 19
    七、系统实现结果 22
  14. 用户管理(DBMS)功能 22
  15. 顾客功能 23
  16. 管理员功能 26
    总结 34
    一、需求分析
    1.需求描述
    在这次大作业的设计过程中,我们计划实现一个餐厅订餐系统,其内部存储了如食品、套餐、订单等和顾客点餐的相关信息,以及部分独属于餐厅本身的信息,如员工、餐厅地址等。使用这个系统,顾客可以根据餐厅提供的菜品随时下单,也可以对每次的订单进行反馈;而数据库管理员则可以通过增删查改等操作完成对整个系统的维护。
    我们对整个餐厅订餐系统进行如下描述:
    系统内包括若干餐厅,每个餐厅有若干员工在职。系统中有若干顾客账号,每个顾客账号可以有多个取餐信息。每个顾客账号都可以提交多个订单,每个订单都需要唯一的对应一个餐厅,订单内容可以有食品或套餐,其中每个套餐都由若干食品组成。在提交订单后,顾客账户可以对某个订单进行评价反馈。
    根据以上描述,我们可以明确,本系统的主要设计目标是给顾客提供一个高效的下单系统,同时给餐厅提供数据库管理系统。进而,我们可以相应的进行功能设计,主要功能如下:
    (1)用户管理:整个系统存在管理员、顾客两种用户,管理员的用户信息在系统初始化时已经存储在数据库中,而顾客用户则需要进行注册。
    (2)数据管理:餐厅、员工、食品、套餐等系统“静态”信息的管理全部由管理员进行实现,而订单、评价反馈、取餐信息等顾客相关信息则由顾客用户“动态”的进行增删改等操作。
    (3)数据查询:对于数据库管理员,系统中的所有数据均可以进行查询,而对于顾客,除了系统中的“静态”信息外,只有属于自己用户的信息才可以查询。
    根据以上功能设计,本系统的管理员可以查询系统内的全部数据并对所有“静态”数据进行增删改,而顾客用户则可以查询系统内的“静态”数据以及属于本用户的全部数据,同时可以对属于本用户的数据进行增删改操作。
    三、数据库逻辑模式设计
    1.数据库关系模式
    根据E-R图向关系模式的转换规则,我们可以将上文中得到的系统基本E-R图转化为如下关系模式:
    (1)实体
    餐厅(餐厅编号,地点,容纳人数,餐厅电话)
    员工(员工编号,姓名,年龄,职位,薪资)
    顾客(顾客编号,姓名)
    订单(订单编号,下单时间,订单金额)
    食品(食品编号,名称,售价)
    套餐(套餐编号,名称,售价)
    评价反馈(反馈编号,反馈内容,反馈时间)
    取餐信息(取餐信息编号,联系人,联系电话,地址)
    (2)实体间联系
    员工入职记录(员工编号,餐厅编号,入职时间,职位,离职时间)
    顾客取餐信息(顾客编号,取餐信息编号)
    订单取餐信息(订单编号,取餐信息编号)
    订单餐厅(餐厅编号,订单编号)
    食品订单(订单编号,食品编号)
    套餐订单(订单编号,套餐编号)
    顾客评价反馈(反馈编号,订单编号,顾客编号)
    组成套餐(套餐编号,食品编号,食品数量)
    注:关系模式中含有下划线的属性组为主码。
    2.关系模式范式等级的判定与规范化
    (1)函数依赖分析
    餐厅表:
    候选码:餐厅编号,地点
    函数依赖:餐厅编号容纳人数,餐厅编号地点,餐厅编号餐厅电话,地点餐厅编号
    员工表:
    候选码:员工编号
    函数依赖:员工编号姓名,员工编号年龄,员工编号职位,员工编号薪资,职位薪资
    顾客表:
    候选码:顾客编号
    函数依赖:顾客编号姓名
    食品表:
    候选码:食品编号,名称
    函数依赖:食品编号名称,食品编号售价,食品编号数量,名称食品编号
    套餐表:
    候选码:套餐编号,名称
    函数依赖:套餐编号名称,套餐编号售价,名称套餐编号
    评价反馈表:
    候选码:反馈编号
    函数依赖:反馈编号反馈内容,反馈编号反馈时间
    取餐信息表:
    候选码:取餐信息编号
    函数依赖:取餐信息编号联系人,取餐信息编号联系电话,取餐信息编号地址
    订单表:
    候选码:订单编号
    函数依赖:订单编号下单时间,订单编号订单金额
    员工入职记录表:
    候选码:(员工编号,餐厅编号,入职时间)
    函数依赖:(员工编号,餐厅编号,入职时间) 职位,(员工编号,餐厅编号,入职时间) 离职时间
    顾客取餐信息表:
    候选码:(顾客编号,取餐信息编号)
    函数依赖:无
    订单取餐信息表:
    候选码:(订单编号,取餐信息编号)
    函数依赖:无
    订单餐厅表:
    候选码:(订单编号,餐厅编号)
    函数依赖:无
    食品订单表:
    候选码:(订单编号,食品编号)
    函数依赖:无
    套餐订单表:
    候选码:(套餐编号,食品编号)
    函数依赖:无
    顾客评价反馈表:
    候选码:(反馈编号,订单编号,顾客编号)
    函数依赖:无
    组成套餐表:
    候选码:(套餐编号,食品编号)
    函数依赖:(套餐编号,食品编号) 食品数量
    (2)范式等级判定与规范化
    根据上述函数依赖关系,我们不难发现,所有关系模式中的每个非主属性都完全依赖于码,因此以上关系模式属于2NF。
    对于员工表,我们发现它的码“员工编号”到属性“薪资”的函数依赖关系为传递依赖(存在函数依赖:“员工编号职位”和“职位薪资”),因此上述关系模式不属于3NF。
    为了将关系模式规范到3NF,我们使用投影分解的方法将员工表分解为如下两个表:
    员工(员工编号,姓名,年龄,职位)
    职位表(职位,薪资)
    经过进一步函数依赖分析,我们可以发现,规范化后的关系模式达到了3NF的标准。
    本文来转载自:http://www.biyezuopin.vip/onews.asp?id=16535
<template>
  <div id="registerBackground">
    <div class="front">
      <h1 class="centerAlign">买当劳™订餐系统</h1>
      <div class="radio">
        选择您的身份:
        <el-radio-group v-model="userType">
          <el-radio :label="1">顾客</el-radio>
<!--          <el-radio :label="2">员工</el-radio>-->
          <el-radio :label="2">管理员</el-radio>
        </el-radio-group>
      </div>
      <el-input v-model="userName" placeholder="输入您的用户名" class="myInput"></el-input>
      <el-input v-model="userPassword" placeholder="输入您的密码" show-password class="myInput"></el-input>
      <el-button id="loginButton" v-on:click="login(userType, userName, userPassword)" type="primary">登录</el-button>
      <el-button id="registerButton" v-on:click="jumpToRegister">注册</el-button>
    </div>
  </div>
</template>

<script>
export default {
  name: "Login",
  data() {
    return {
      userName: '',
      userPassword: '',
      userType: 1 //1:顾客,2:管理员
    }
  },
  methods: {
    login(userType, userName, userPassword) {
      if (userName === '' || userPassword === '') {
        this.$message.error('请完整填写信息');
      }
      else {
        axios
          .post(
            'http://localhost:8080/login',
            {
              'userType': userType.toString(),
              'username': userName,
              'password': userPassword
            }
          )
        .then(
          (response) => {
            if (response.data === 1) {
              if (userType === 1) { //顾客
                window.location = '/customer';
              }
              else if (userType === 2) { //管理员
                window.location = '/administrator'
              }
            }
            else if (response.data === -1) { //密码错误
              this.$message.error('密码错误')
            }
            else {
              this.$message.error('用户不存在');
            }
          }
        )
      }
    },
    jumpToRegister() {
      window.location = '/register';
    }
  }
}
</script>

<style>
#registerBackground {
  background: url("../images/seaside_background.png");
  width: 100%;
  height: 100%;
  position: fixed;
  background-size: 100% 100%;
}

.front {
  position: absolute;
  background: rgba(255, 255, 255, 0.8);
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  padding: 10px 15px 10px;
  border-radius: 10px;
}

#loginButton {
  margin-top: 10px;
  position: relative;
  left: 150px;
}

#registerButton {
  margin: 10px;
  position: relative;
  right: 150px;
}

.centerAlign {
  text-align: center;
}

.radio {
  padding-left: 15px;
}

.myInput {
  margin-top: 10px;
  width: 400px;
}

.sureButton {
  margin-top: 10px;
  position: relative;
  left: 50%;
  transform: translate(-50%);
}
</style>

/*.background {*/
/*  border: 0;*/
/*  margin: 0;*/
/*  padding: 0;*/
/*  background: url("../images/seaside_background.png");*/
/*  width: 100%;*/
/*  height: 100%;  !**宽高100%是为了图片铺满屏幕 *!*/
/*  background-size: 100% 100%;*/
/*  z-index: -1;*/
/*  position: fixed;*/
/*}*/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Logo

前往低代码交流专区

更多推荐