springboot农家乐点餐系统设计与实现

博主介绍:专注于Java(springboot ssm 等开发框架) vue  .net  php phython node.js    uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作
☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟
我的博客空间发布了2000+毕设题目 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
更多项目地址 介绍 
文末下方有源码获取地址

4.1 系统总体模块图

农家乐点餐系统主要设计了前台和后台设计的围绕菜品信息业务功能如图如4.1所示:

图4.1 系统总体模块图

4.2 数据库层的设计

4.2.1 概念模型设计


(2)系统中实体E-R图

管理员信息实体,主要包括 管理员编号,用户名,密码,姓名 等信息实体。如图4.2所示:

图4.2 管理员实体属性图

用户信息实体,主要包括 用户编号,用户名,密码,姓名,联系电话,联系地址 等信息实体。如图4.3所示:

图4.3 用户实体属性图

公告信息实体,主要包括 公告编号,标题,内容,发布时间 等信息实体。如图4.5所示:

图4.5 公告实体属性图

菜品分类信息实体,主要包括 菜品分类编号,分类 等信息实体。如图4.6所示:

图4.6 菜品分类实体属性图

   菜品信息实体,主要包括 菜品编号,菜品名称,分类,介绍,食材,价格,库存 等信息实体。如图4.7所示:

图4.7 菜品实体属性图

订单明细信息实体,主要包括 订单明细编号,订单,菜品,数量,价格,提交时间 等信息实体。如图4.7所示:

图4.7 订单明细实体属性图

订单信息实体,主要包括 订单编号,订单号,用户,总价,联系电话,联系地址,提交时间,状态 等信息实体。如图4.8所示:

图4.8 订单信息实体属性图

评价信息实体,主要包括 评价编号,菜品,评价内容,评价人,评价时间 等信息实体.如图所示:

4.2.2 关系模式设计

在农家乐点餐系统中,实体有管理员实体,用户实体,公告实体,菜品分类实体,菜品实体,订单明细实体,订单实体,评价实体等实体,他们之间的关系如图4.13所示:

图4.13 实体之间关系图


4.3 本章小结

本章主要介绍的内容是总体设计或者概要设计,介绍了农家乐点餐系统的设计,主要是在架构设计、总体模块设计和数据库设计的方面介绍的,为进一步的详细设计做准备。


第5章  详细设计

详细设计阶段的任务就是把在总体设计阶段提出的比较抽象概括的解决问题的方法具体化,也就是“应该怎样具体地实现这个系统”。在本阶段将包括数据库的设计和每个模块的详细设计,确定实现模块功能所需要的算法和数据结构。

5.1 后台设计

普通用户或管理员输入自己的用户账号、密码,通过身份验证后可以进入相应的管理界面首页。管理员管理页面分为公告信息管理与查看,菜品分类信息管理与查看,菜品信息管理与查看,订单信息管理与查看,评价信息管理与查看,。

5.2 数据库设计

5.2.1 逻辑结构设计

1 管理员( 管理员编号,用户名,密码,姓名 )

2 用户( 用户编号,用户名,密码,姓名,联系电话,联系地址 )

3 公告( 公告编号,标题,内容,发布时间 )

4 菜品分类( 菜品分类编号,分类 )

5 菜品( 菜品编号,菜品名称,分类,介绍,食材,价格,库存 )

6 订单明细( 订单明细编号,订单,菜品,数量,价格,提交时间 )

7 订单( 订单编号,订单号,用户,总价,联系电话,联系地址,提交时间,状态 )

8 评价( 评价编号,菜品,评价内容,评价人,评价时间 )

5.2.2 物理结构设计

由各个关系模式和根据需求分析阶段数据字典的数据项描述,给出各数据表结构。

(1)管理员信息表如表5.1所示:

表5.1 管理员信息表

序号

字段名称

数据类型

长度

主键

描述

1

glyid

INTEGER

11

管理员编号

2

yhm

VARCHAR

40

用户名

3

mm

VARCHAR

40

密码

4

xm

VARCHAR

40

姓名

(2)用户如表5.2所示:

表5.2 用户表

序号

字段名称

数据类型

长度

主键

描述

1

yhid

INTEGER

11

用户编号

2

yhm

VARCHAR

40

用户名

3

mm

VARCHAR

40

密码

4

xm

VARCHAR

40

姓名

5

lxdh

VARCHAR

40

联系电话

6

lxdz

VARCHAR

40

联系地址

(3)公告表如表5.3所示:

表5.3 公告表

序号

字段名称

数据类型

长度

主键

描述

1

ggid

INTEGER

11

公告编号

2

bt

VARCHAR

40

标题

3

nr

VARCHAR

4000

内容

4

fbsj

VARCHAR

40

发布时间

(4)菜品分类表如表5.4所示:

表5.4 菜品分类信息表

序号

字段名称

数据类型

长度

主键

描述

1

cpflid

INTEGER

11

菜品分类编号

2

fl

VARCHAR

40

分类

(5)菜品表如表5.5所示:

表5.5 菜品表

序号

字段名称

数据类型

长度

主键

描述

1

cpid

INTEGER

11

菜品编号

2

cpmc

VARCHAR

40

菜品名称

3

fl

VARCHAR

40

分类

4

js

VARCHAR

4000

介绍

5

sc

VARCHAR

40

食材

6

jg

VARCHAR

40

价格

7

kc

VARCHAR

40

库存

(6)订单明细表如表5.6所示:

表5.6 订单明细表

序号

字段名称

数据类型

长度

主键

描述

1

ddmxid

INTEGER

11

订单明细编号

2

dd

VARCHAR

40

订单

3

cp

VARCHAR

40

菜品

4

sl

VARCHAR

40

数量

5

jg

VARCHAR

40

价格

6

tjsj

VARCHAR

40

提交时间

(7)订单表如表5.7所示:

表5.7订单表

序号

字段名称

数据类型

长度

主键

描述

1

ddid

INTEGER

11

订单编号

2

ddh

VARCHAR

40

订单号

3

yh

VARCHAR

40

用户

4

zj

VARCHAR

40

总价

5

lxdh

VARCHAR

400

联系电话

6

lxdz

VARCHAR

400

联系地址

7

tjsj

VARCHAR

40

提交时间

8

zt

VARCHAR

40

状态

(8)评价表如表5.8所示:

表5.8评价表

序号

字段名称

数据类型

长度

主键

描述

1

pjid

INTEGER

11

评价编号

2

cp

VARCHAR

40

菜品

3

pjnr

VARCHAR

4000

评价内容

4

pjr

VARCHAR

40

评价人

5

pjsj

VARCHAR

40

评价时间

5.3 本章小结

本章主要是在上一章的总体设计的基础之上对系统进行详细设计,主要分为两个方面来设计,分别为后台设计和数据库设计,在后台设计方面,主要是设计的系统的权限分配,角色登录的验证;在数据库方面是设计系统的物理结构的设计和逻辑结构的设计。


第6章 系统的实施

系统实施是指将系统设计阶段的结果在计算机上实现,将原来纸面上的·类似于设计图式的新系统方案转换成可执行的应用软件。实施阶段的主要活动:物理系统的建立,程序的编制,系统调试,系统切换,系统维护,系统评价。

界面也称作UI(User Interface),是人机交互重要部分,也是系统给用户使用的第一印象,是整个系统的重要组成部分。所谓的用户体验大部分就是指界面设计的体验。

本系统的名称是“农家乐点餐系统”,界面要求是简洁大方,避免过度包装,目的是为了为企业用户提供一个操作平台

6.1 登录模块界面

登录系统首页,出现用户名、密码的输入框,填写用户名和密码点击【提交】按钮,即可登录,同时页面左侧展现最新公告、以及展现最新菜品;具体的登录页面如图6.1所示:

图6.2 登录界面图

6.2 菜品分类管理界面

点击菜品分类管理菜单,显示添加菜品分类信息和菜品分类信息列表界面,点击添加菜品分类信息,右侧界面呈现出添加的菜品分类信息界面,包括菜品分类菜品分类编号,分类等信息,添加菜品分类信息完毕点击“提交”按钮,则添加菜品分类信息成功。点击“菜品分类列表”,右侧界面呈现出需要菜品分类的具体信息,包括菜品分类编号,分类等信息,可对逐条菜品分类信息进行查看、删除和修改   

6.3  菜品管理界面

点击菜品管理菜单,显示添加菜品信息和菜品信息列表界面,点击添加菜品信息,右侧界面呈现出添加的菜品信息界面,包括菜品菜品编号,菜品名称,分类,介绍,食材,价格,库存等信息,添加菜品信息完毕点击“提交”按钮,则添加菜品信息成功。点击“菜品列表”,右侧界面呈现出需要菜品的具体信息,包括菜品编号,菜品名称,分类,介绍,食材,价格,库存等信息,可对逐条菜品信息进行查看、删除和修改    

package com.main.controller;


import com.main.dao.*;
import com.main.model.*;
import com.main.util.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import java.util.*;


@RestController
@RequestMapping("/caipin")
public class caipinController {

    @Autowired
    private caipinDao caipindao;

    @RequestMapping("/listpage")  //  菜品查询列表分页

    public ModelAndView listpage(HttpServletRequest request, HttpServletResponse response) {
      
   
        Map<String,Object> map= new HashMap<String,Object>();

        ModelAndView mav = new ModelAndView();//初始化
        mav.setViewName("caipin/caipinlist");//跳转jsp 页面
	 String cpid = (String)request.getParameter("cpid");//cpid 查询参数

	if(cpid!=null&&!cpid.equals("")){
	map.put("cpid",cpid);//菜品编号 传入查询参数
	}
	 String cpmc = (String)request.getParameter("cpmc");//cpmc 查询参数

	if(cpmc!=null&&!cpmc.equals("")){
	map.put("cpmc",cpmc);//菜品名称 传入查询参数
	}
	 String fl = (String)request.getParameter("fl");//fl 查询参数

	if(fl!=null&&!fl.equals("")){
	map.put("fl",fl);//分类 传入查询参数
	}
	 String js = (String)request.getParameter("js");//js 查询参数

	if(js!=null&&!js.equals("")){
	map.put("js",js);//介绍 传入查询参数
	}
	 String sc = (String)request.getParameter("sc");//sc 查询参数

	if(sc!=null&&!sc.equals("")){
	map.put("sc",sc);//食材 传入查询参数
	}
	 String jg = (String)request.getParameter("jg");//jg 查询参数

	if(jg!=null&&!jg.equals("")){
	map.put("jg",jg);//价格 传入查询参数
	}
	 String kc = (String)request.getParameter("kc");//kc 查询参数

	if(kc!=null&&!kc.equals("")){
	map.put("kc",kc);//库存 传入查询参数
	}
      
      
        List list = caipindao.getAll(map);
	mav.addObject("list",list);//赋值变量
        return mav;
    }


 

	/**
	
	菜品详情
	**/

        @RequestMapping(value = "detail")
    public ModelAndView  detail(HttpServletRequest request, HttpServletResponse response){
        String id=(String)request.getParameter("keyid");//获得 主键id
	
        caipin bean=new caipin();//初始对象菜品
        ModelAndView mav = new ModelAndView();//初始化
        mav.setViewName("caipin/caipindetail");//跳转jsp页面
        try{
            bean=caipindao.getcaipinByID(Integer.parseInt(id));//查询获得当前caipin对象
		request.setAttribute("cpid", bean.getCpid());//菜品编号

		request.setAttribute("cpmc", bean.getCpmc());//菜品名称

		request.setAttribute("fl", bean.getFl());//分类

		request.setAttribute("js", bean.getJs());//介绍

		request.setAttribute("sc", bean.getSc());//食材

		request.setAttribute("jg", bean.getJg());//价格

		request.setAttribute("kc", bean.getKc());//库存

            request.setAttribute("tp", bean.getTp());//库存

        
        }catch(Exception e){
            e.printStackTrace();;
        }





        return mav;
    }
    @PostMapping(value = "add") // 菜品新增
    public ModelAndView add(HttpServletRequest request, HttpServletResponse response) {
        System.out.println("add");
	   ModelAndView mav = new ModelAndView();//初始化
        mav.setViewName("caipin/caipinadd");

        caipin bean=new caipin();
        String cpid=(String)request.getParameter("cpid");//菜品编号 变量
        bean.setCpid(cpid);//赋值封装

        String cpmc=(String)request.getParameter("cpmc");//菜品名称 变量
        bean.setCpmc(cpmc);//赋值封装

        String fl=(String)request.getParameter("fl");//分类 变量
        bean.setFl(fl);//赋值封装

        String js=(String)request.getParameter("js");//介绍 变量
        bean.setJs(js);//赋值封装

        String sc=(String)request.getParameter("sc");//食材 变量
        bean.setSc(sc);//赋值封装

        String jg=(String)request.getParameter("jg");//价格 变量
        bean.setJg(jg);//赋值封装

        String kc=(String)request.getParameter("kc");//库存 变量
        bean.setKc(kc);//赋值封装

        String tp=(String)request.getParameter("tp");//库存 变量
        bean.setTp(tp);//赋值封装

        Map map=new HashMap();
        map.put("cpmc",cpmc);
        caipin caipin=caipindao.getcaipinByMap(map);
        if(caipin!=null) {
            request.setAttribute("msg", "<script>alert('菜品名称已存在');</script>");//操作提示
        }else{
            caipindao.add(bean);
            request.setAttribute("msg", "<script>alert('添加成功');</script>");//操作提示
        }

       


        return addpage(request,response);
    }
        @RequestMapping(value = "addpage")
    public ModelAndView  addpage(HttpServletRequest request, HttpServletResponse response){
                 ModelAndView mav = new ModelAndView();//初始化对象
        mav.setViewName("caipin/caipinadd");//跳转页面对象
       



        return mav;
    }

    /**菜品删除方法 对表caipin 进行删除
     *
     */
     @RequestMapping(value = "del")
    public ModelAndView  del(HttpServletRequest request, HttpServletResponse response){
        String id=(String)request.getParameter("keyid");//获得 主键id
        ModelAndView mav = new ModelAndView();
      
        try{
            caipindao.delete(Integer.parseInt(id));//执行 删除菜品  方法

        }catch(Exception e){
            e.printStackTrace();;
        }



        request.setAttribute("msg", "<script>alert('删除成功');</script>");//返回前台 操作提示

        return listpage(request,response);
    }

   	 /**菜品修改jsp页面 对表 caipin 进行查看
	 * 
	 */
    @RequestMapping(value = "modifypage")
    public ModelAndView  modifypage(HttpServletRequest request, HttpServletResponse response){
        String id=(String)request.getParameter("keyid");//获得 主键id
       // request.setCharacterEncoding("gb2312");
        caipin bean=new caipin();
        ModelAndView mav = new ModelAndView();//初始化方法
        mav.setViewName("caipin/caipinmodify");//方法修改 页面
        try{
            bean=caipindao.getcaipinByID(Integer.parseInt(id));
		request.setAttribute("cpid", bean.getCpid());//菜品编号

		request.setAttribute("cpmc", bean.getCpmc());//菜品名称

		request.setAttribute("fl", bean.getFl());//分类

		request.setAttribute("js", bean.getJs());//介绍

		request.setAttribute("sc", bean.getSc());//食材

		request.setAttribute("jg", bean.getJg());//价格

		request.setAttribute("kc", bean.getKc());//库存

            request.setAttribute("tp", bean.getTp());

        }catch(Exception e){
            e.printStackTrace();;
        }





        return mav;
    }
	
	 /**菜品修改方法 对表 caipin 进行修改
	 * 
	 */
    @RequestMapping(value = "update")
    public ModelAndView  update(HttpServletRequest request, HttpServletResponse response) {
              ModelAndView mav = new ModelAndView();

        caipin bean=new caipin();//初始化对象
       

        String cpid=(String)request.getParameter("cpid");//菜品编号 变量
        bean.setCpid(cpid);//赋值封装

        String cpmc=(String)request.getParameter("cpmc");//菜品名称 变量
        bean.setCpmc(cpmc);//赋值封装

        String fl=(String)request.getParameter("fl");//分类 变量
        bean.setFl(fl);//赋值封装

        String js=(String)request.getParameter("js");//介绍 变量
        bean.setJs(js);//赋值封装

        String sc=(String)request.getParameter("sc");//食材 变量
        bean.setSc(sc);//赋值封装

        String jg=(String)request.getParameter("jg");//价格 变量
        bean.setJg(jg);//赋值封装

        String kc=(String)request.getParameter("kc");//库存 变量
        bean.setKc(kc);//赋值封装

        String tp=(String)request.getParameter("tp");//库存 变量
        bean.setTp(tp);//赋值封装

	try{
        caipindao.update(bean);//执行修改方法
	 }catch(Exception e){
            e.printStackTrace();;
        }




        request.setAttribute("msg", "<script>alert('操作成功');</script>");//操作提示

        return listpage(request,response);
    }


    @RequestMapping(value = "rukudo")
    public ModelAndView  rukudo(HttpServletRequest request, HttpServletResponse response) {
        ModelAndView mav = new ModelAndView();
        mav.setViewName("caipin/ruku");//方法修改 页面
        caipin bean = new caipin();//初始化对象


        String cp = (String) request.getParameter("cp");//菜品编号 变量

        String kc = (String) request.getParameter("kc");

        bean = caipindao.getcaipinByID(Integer.parseInt(cp));

        int all = Integer.parseInt(kc) + Integer.parseInt(bean.getKc());
        bean.setKc(String.valueOf(all));
        try {
            caipindao.update(bean);//执行修改方法
        } catch (Exception e) {
            e.printStackTrace();
        }
        request.setAttribute("msg", "<script>alert('操作成功');</script>");//操作提示
        return mav;
    }

    }

6.4 公告管理界面

点击公告管理菜单,显示添加公告信息和公告信息列表界面,点击添加公告信息,右侧界面呈现出添加的公告信息界面,包括公告公告编号,标题,内容,发布时间等信息,添加公告信息完毕点击“提交”按钮,则添加公告信息成功。点击“公告列表”,右侧界面呈现出需要公告的具体信息,包括公告编号,标题,内容,发布时间等信息,可对逐条公告信息进行查看、删除和修改

大家点赞、收藏、关注、评论啦  其他的定制服务 商务合作  下方联系卡片

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

翰文编程

你的鼓励 是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值