博主介绍:专注于Java(springboot ssm 等开发框架) vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作
☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟
我的博客空间发布了2000+毕设题目 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
更多项目地址 介绍
文末下方有源码获取地址
4.1 系统总体模块图
农家乐点餐系统主要设计了前台和后台设计的围绕菜品信息业务功能如图如4.1所示:
图4.1 系统总体模块图
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.13所示:
本章主要介绍的内容是总体设计或者概要设计,介绍了农家乐点餐系统的设计,主要是在架构设计、总体模块设计和数据库设计的方面介绍的,为进一步的详细设计做准备。
详细设计阶段的任务就是把在总体设计阶段提出的比较抽象概括的解决问题的方法具体化,也就是“应该怎样具体地实现这个系统”。在本阶段将包括数据库的设计和每个模块的详细设计,确定实现模块功能所需要的算法和数据结构。
普通用户或管理员输入自己的用户账号、密码,通过身份验证后可以进入相应的管理界面首页。管理员管理页面分为公告信息管理与查看,菜品分类信息管理与查看,菜品信息管理与查看,订单信息管理与查看,评价信息管理与查看,。
5.2.1 逻辑结构设计
2 用户( 用户编号,用户名,密码,姓名,联系电话,联系地址 )
3 公告( 公告编号,标题,内容,发布时间 )
4 菜品分类( 菜品分类编号,分类 )
5 菜品( 菜品编号,菜品名称,分类,介绍,食材,价格,库存 )
6 订单明细( 订单明细编号,订单,菜品,数量,价格,提交时间 )
7 订单( 订单编号,订单号,用户,总价,联系电话,联系地址,提交时间,状态 )
8 评价( 评价编号,菜品,评价内容,评价人,评价时间 )
由各个关系模式和根据需求分析阶段数据字典的数据项描述,给出各数据表结构。
(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 |
否 |
评价时间 |
本章主要是在上一章的总体设计的基础之上对系统进行详细设计,主要分为两个方面来设计,分别为后台设计和数据库设计,在后台设计方面,主要是设计的系统的权限分配,角色登录的验证;在数据库方面是设计系统的物理结构的设计和逻辑结构的设计。
系统实施是指将系统设计阶段的结果在计算机上实现,将原来纸面上的·类似于设计图式的新系统方案转换成可执行的应用软件。实施阶段的主要活动:物理系统的建立,程序的编制,系统调试,系统切换,系统维护,系统评价。
界面也称作UI(User Interface),是人机交互重要部分,也是系统给用户使用的第一印象,是整个系统的重要组成部分。所谓的用户体验大部分就是指界面设计的体验。
本系统的名称是“农家乐点餐系统”,界面要求是简洁大方,避免过度包装,目的是为了为企业用户提供一个操作平台
6.1 登录模块界面
登录系统首页,出现用户名、密码的输入框,填写用户名和密码点击【提交】按钮,即可登录,同时页面左侧展现最新公告、以及展现最新菜品;具体的登录页面如图6.1所示:
图6.2 登录界面图
点击菜品分类管理菜单,显示添加菜品分类信息和菜品分类信息列表界面,点击添加菜品分类信息,右侧界面呈现出添加的菜品分类信息界面,包括菜品分类菜品分类编号,分类等信息,添加菜品分类信息完毕点击“提交”按钮,则添加菜品分类信息成功。点击“菜品分类列表”,右侧界面呈现出需要菜品分类的具体信息,包括菜品分类编号,分类等信息,可对逐条菜品分类信息进行查看、删除和修改
点击菜品管理菜单,显示添加菜品信息和菜品信息列表界面,点击添加菜品信息,右侧界面呈现出添加的菜品信息界面,包括菜品菜品编号,菜品名称,分类,介绍,食材,价格,库存等信息,添加菜品信息完毕点击“提交”按钮,则添加菜品信息成功。点击“菜品列表”,右侧界面呈现出需要菜品的具体信息,包括菜品编号,菜品名称,分类,介绍,食材,价格,库存等信息,可对逐条菜品信息进行查看、删除和修改
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;
}
}
点击公告管理菜单,显示添加公告信息和公告信息列表界面,点击添加公告信息,右侧界面呈现出添加的公告信息界面,包括公告公告编号,标题,内容,发布时间等信息,添加公告信息完毕点击“提交”按钮,则添加公告信息成功。点击“公告列表”,右侧界面呈现出需要公告的具体信息,包括公告编号,标题,内容,发布时间等信息,可对逐条公告信息进行查看、删除和修改
大家点赞、收藏、关注、评论啦 其他的定制服务 商务合作 下方联系卡片
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者