餐厅点餐系统详细设计与系统实现
餐厅点餐系统详细设计与系统实现
一.主要业务逻辑设计
1.登陆操作
package com.ibooking.action; import com.ibooking.action.base.*; import com.ibooking.util.*; import com.opensymphony.xwork2.ActionContext; public class LoginProcessAction extends BaseAction { /** * */ private static final long serialVersionUID = 1L; private String userName; private String userPasswd; @Override public String execute() { ActionContext ctx = ActionContext.getContext(); if (daoService.validatePasswd(userName, userPasswd)) { String userAuth = daoService.getUserAuthByName(userName); //save the user info ctx.getSession().put(WebConstant.LOGIN_USER, userName); ctx.getSession().put(WebConstant.LOGIN_AUTH, userAuth); fillTitle(); return fillIndexPage(); }else { failReason = getText("loginFailure"); return RET_FAIL; } } }
2.登出操作
package com.ibooking.action; import com.ibooking.action.base.*; import com.ibooking.util.*; import com.opensymphony.xwork2.ActionContext; public class LogoutProcessAction extends BaseAction { /** * */ private static final long serialVersionUID = 1L; @Override public String execute() { ActionContext ctx = ActionContext.getContext(); String userName = (String)ctx.getSession().get(WebConstant.LOGIN_USER); if (!userName.isEmpty()) { //clear the user info ctx.getSession().put(WebConstant.LOGIN_USER, null); ctx.getSession().put(WebConstant.LOGIN_AUTH, null); ctx.getSession().clear(); fillTitle(); return fillIndexPage(); }else { return RET_FAIL; } } }
3.点餐操作
3.1添加菜品
package com.ibooking.action; import com.ibooking.action.base.*; public class OrderDetailPageEnterAction extends BaseAction { /** * */ private static final long serialVersionUID = 1L; private int orderId; @Override public String execute() { fillTitle(); return fillOrderDetailPage(orderId); } }
3.2订单提交
package com.ibooking.action; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.UnsupportedEncodingException; import com.ibooking.action.base.*; import com.ibooking.util.WebConstant; import com.opensymphony.xwork2.ActionContext; public class MenuSubmitAction extends BaseAction { /** * */ private static final long serialVersionUID = 1L; private String menuName; private String menuPrice; private InputStream inputStream; @Override public String execute() throws UnsupportedEncodingException { ActionContext ctx = ActionContext.getContext(); String userName = (String)ctx.getSession().get(WebConstant.LOGIN_USER); int amount = daoService.changeShoppingAmount(userName, menuName, menuPrice, true); if (amount == WebConstant.INVALID_VALUE) { amount = 0; } String result = String.valueOf(amount); inputStream = new ByteArrayInputStream(result.getBytes("UTF-8")); return RET_SUCC; }
4.顾客菜单修改操作
package com.ibooking.action; import java.io.UnsupportedEncodingException; import com.ibooking.action.base.*; public class OrderListChangeAction extends BaseAction { /** * */ private static final long serialVersionUID = 1L; private String opt; private int orderId; @Override public String execute() throws UnsupportedEncodingException { //analysis and process the opt param if (opt.equals("orderDel")){ daoService.deleteOrderTrans(orderId); } return fillOrderListPage(); }
5.管理员修改菜单
package com.ibooking.action.manager; import java.io.UnsupportedEncodingException; import com.ibooking.action.base.*; public class ManMenuChangeAction extends BaseAction { /** * */ private static final long serialVersionUID = 1L; private String opt; private int id; private String name; private Integer price; private String pic; private Integer type; @Override public String execute() throws UnsupportedEncodingException { //analysis and process the opt param if (opt.equals("menuAdd")){ daoService.insertMenu(name, price, pic, type); }else if (opt.equals("menuMod")){ daoService.updateMenuById(id, name, price, pic, type); }else if (opt.equals("menuDel")){ daoService.deleteMenu(id); } return fillManMenuPage(); } }
6.管理员对用户管理
package com.ibooking.action.manager; import java.io.UnsupportedEncodingException; import com.ibooking.action.base.*; public class ManUserChangeAction extends BaseAction { /** * */ private static final long serialVersionUID = 1L; private String opt; private int id; private String user; private String passwd; private String auth; private String tel; private String addr; @Override public String execute() throws UnsupportedEncodingException { //analysis and process the opt param if (opt.equals("userAdd")){ daoService.insertUser(user, passwd, auth, tel, addr); }else if (opt.equals("userMod")){ daoService.updateUserById(id, user, passwd, auth, tel, addr); }else if (opt.equals("userDel")){ daoService.deleteUser(id); } return fillManUserPage(); } }
二.表现层设计与实现
1.登陆及注册界面
<%@page contentType = "text/html; charset = utf-8"%> <!DOCTYPE html> <html lang="zh-cn"> <head> <%-- the header --%> <%@ include file="/WEB-INF/jsp/header.jsp" %> <title><s:text name="loginTitle" /></title> </head> <body> <%-- the navbar --%> <%@ include file="/WEB-INF/jsp/navbar.jsp" %> <%-- the content --%> <div class="container"> <form method="post" id="ib_login_form" action="loginProcess" role="form"> <div class="form-group"> <label id="ib_login_label" for="ib_login_user_input"> <s:text name="loginInput" /> </label> <input type="text" id="ib_login_user_input" name="userName" class="form-control input-lg" placeholder="<s:text name="loginUserName" />" /> <div class="ib_login_error_div"> <s:fielderror fieldName="userName"/> </div> <input type="password" id="ib_login_passwd_input" name="userPasswd" class="form-control input-lg" placeholder="<s:text name="loginUserPasswd" />" /> <div class="ib_login_error_div"> <s:fielderror fieldName="userPasswd"/> <s:property value="failReason" escape="false"/> </div> </div> <button id="ib_login_submit_btn" type="submit" class="btn btn-primary btn-lg"> <s:text name="loginSubmit" /> </button> <a id="ib_login_reg_btn" href="regPageEnter" class="btn btn-primary btn-lg" role="button"> <s:text name="loginReg" /> </a> </form> </div> <%-- the javascript --%> <script type="text/javascript"> $("#ib_login_submit_btn").click( function() { if ($("#ib_login_user_input").val() == "" || $("#ib_login_passwd_input").val() == "") { alert("<s:text name="loginInputIsNull" />"); return false; } } ) </script> </body> </html>
界面图:
2.菜单主页面
<%@page contentType = "text/html; charset = utf-8"%> <!DOCTYPE html> <html lang="zh-cn"> <head> <%-- the header --%> <%@ include file="/WEB-INF/jsp/header.jsp" %> <title><s:text name="indexTitle" /></title> </head> <body> <%-- the navbar --%> <%@ include file="/WEB-INF/jsp/navbar.jsp" %> <div id="ib_idx_content_div"> <s:iterator value="lstMenuTypeBean" id="bean"> <div class="row"> <h2 class="ib_idx_caption_h"><s:property value="#bean.name" /></h2> <s:iterator value="#bean.lst" id="bean2"> <div class="col-md-3"> <div class="thumbnail"> <img src="<s:property value="#bean2.addr" />"> <h4 class="ib_idx_caption_h"><s:property value="#bean2.name" /></h4> <h5 class="ib_idx_caption_h"> <s:text name="indexPrice" />: <s:property value="#bean2.price" /> </h5> <p class="ib_idx_caption_h"> <button class="btn btn-primary" menuName='<s:property value="#bean2.name" />' menuPrice='<s:property value="#bean2.price" />'> <s:text name="indexSubmitBtn" /> <span class="badge"><s:property value="#bean2.amount" /></span> </button> </p> </div> </div> </s:iterator> </div> </s:iterator> <%-- the pagination --%> <%@ include file="/WEB-INF/jsp/pagination.jsp" %> </div> <%-- the javascript --%> <script type="text/javascript"> function fnSubmitBtn(data, code, request) { //exclude the error page var menuAmount = data.match(/<!DOCTYPE html>/); if (menuAmount == null) { var menuName = this.data.match(/menuName=(.+)&/); if (menuName != null && menuName[1] != null) { $("button").each(function() { if ($(this).attr("menuName") == menuName[1]) { $(this).children("span").text(data); } }); } } } $("button").click( function() { <s:if test="#session.loginUser==null"> alert("please login!"); window.location.href = 'loginPageEnter'; return; </s:if> var ajaxUrl = "menuSubmit"; var ajaxData = "menuName=" + $(this).attr("menuName") + "&" + "menuPrice=" + $(this).attr("menuPrice"); jQuery.ajax({ type: "POST", url: ajaxUrl, data: ajaxData, dataType: "html", contentType: "application/x-www-form-urlencoded; charset=utf-8", success: fnSubmitBtn }); } ) </script> </body> </html>
界面图:
3.用户订单修改
<%@page contentType = "text/html; charset = utf-8"%> <!DOCTYPE html> <html lang="zh-cn"> <head> <%-- the header --%> <%@ include file="/WEB-INF/jsp/header.jsp" %> <title><s:text name="orderlistTitle" /></title> </head> <body> <%-- the navbar --%> <%@ include file="/WEB-INF/jsp/navbar.jsp" %> <div id="ib_orderlist_content_div"> <%@ include file="/WEB-INF/jsp/orderlist_content.jsp" %> </div> <%-- the javascript --%> <script type="text/javascript"> function fnChangeFinish(data, code, request) { if (code == "success") { $("#ib_orderlist_content_div").html(data); } } function onBtnDelClick(data) { var ajaxUrl = "orderListChange"; jQuery.ajax({ type: "POST", url: ajaxUrl, data: data, dataType: "html", contentType: "application/x-www-form-urlencoded; charset=utf-8", success: fnChangeFinish }); } </script> </body> </html>
界面图:
4.管理员菜单修改及客户订单处理
<%@page contentType = "text/html; charset = utf-8"%> <!DOCTYPE html> <html lang="zh-cn"> <head> <%-- the header --%> <%@ include file="/WEB-INF/jsp/header.jsp" %> <title><s:text name="manMenuTitle" /></title> </head> <body> <%-- the navbar --%> <%@ include file="/WEB-INF/jsp/navbar.jsp" %> <div id="ib_man_menu_content_div"> <%@ include file="/WEB-INF/jsp/manager/man_menu_content.jsp" %> </div> <%-- the javascript --%> <script type="text/javascript"> function onBtnNewClick() { var status = $("#ib_man_menu_new_btn").attr("status"); if (status == "new") { $("#ib_man_menu_new_name_input").removeAttr("readOnly"); $("#ib_man_menu_new_price_input").removeAttr("readOnly"); $("#ib_man_menu_new_pic_select").removeAttr("disabled"); $("#ib_man_menu_new_type_select").removeAttr("disabled"); $("#ib_man_menu_add_btn").removeAttr("disabled"); $("#ib_man_menu_new_btn").attr("status", "cancel"); $("#ib_man_menu_new_btn").text("<s:text name="manMenuCancelBtn" />"); }else if (status == "cancel") { $("#ib_man_menu_new_name_input").attr("readOnly", "true"); $("#ib_man_menu_new_price_input").attr("readOnly", "true"); $("#ib_man_menu_new_pic_select").attr("disabled", "disabled"); $("#ib_man_menu_new_type_select").attr("disabled", "disabled"); $("#ib_man_menu_add_btn").attr("disabled", "disabled"); $("#ib_man_menu_new_btn").attr("status", "new"); $("#ib_man_menu_new_btn").text("<s:text name="manMenuNewBtn" />"); } } function fnChangeFinish(data, code, request) { if (code == "success") { $("#ib_man_menu_content_div").html(data); } } function onBtnAddClick(data) { var ajaxUrl = "manMenuChange"; data = data + "&name=" + $("#ib_man_menu_new_name_input").val() + "&price=" + $("#ib_man_menu_new_price_input").val() + "&pic=" + $("#ib_man_menu_new_pic_select").val() + "&type=" + $("#ib_man_menu_new_type_select").val(); jQuery.ajax({ type: "POST", url: ajaxUrl, data: data, dataType: "html", contentType: "application/x-www-form-urlencoded; charset=utf-8", success: fnChangeFinish }); } function onBtnEditClick(data) { $(".ib_man_menu_id_label").each(function() { if ($(this).text() == data) { var name_input = $(this).next(); var price_input = $(this).parent().next().children(); var pic_select = price_input.parent().next().children(); var type_select = pic_select.parent().next().children() var edit_btn = type_select.parent().next().children("#ib_man_menu_edit_btn"); var mod_btn = edit_btn.next(); var status = edit_btn.attr("status"); if (status == "edit") { name_input.removeAttr("readOnly"); price_input.removeAttr("readOnly"); pic_select.removeAttr("disabled"); type_select.removeAttr("disabled"); mod_btn.removeAttr("disabled"); edit_btn.attr("status", "cancel"); edit_btn.text("<s:text name="manMenuCancelBtn" />"); }else if (status == "cancel") { name_input.attr("readOnly", "true"); price_input.attr("readOnly", "true"); pic_select.attr("disabled", "disabled"); type_select.attr("disabled", "disabled"); mod_btn.attr("disabled", "disabled"); edit_btn.attr("status", "edit"); edit_btn.text("<s:text name="manMenuEditBtn" />"); } } }); } function onBtnModClick(data) { var ajaxUrl = "manMenuChange"; var id = data.match(/id=(.+)&opt=menuMod/); if (id != null && id[1] != null) { $(".ib_man_menu_id_label").each(function() { if ($(this).text() == id[1]) { var name_input = $(this).next(); var price_input = $(this).parent().next().children(); var pic_select = price_input.parent().next().children(); var type_select = pic_select.parent().next().children() data = data + "&name=" + name_input.val() + "&price=" + price_input.val() + "&pic=" + pic_select.val() + "&type=" + type_select.val(); jQuery.ajax({ type: "POST", url: ajaxUrl, data: data, dataType: "html", contentType: "application/x-www-form-urlencoded; charset=utf-8", success: fnChangeFinish }); } }); } } function onBtnDelClick(data) { var ajaxUrl = "manMenuChange"; jQuery.ajax({ type: "POST", url: ajaxUrl, data: data, dataType: "html", contentType: "application/x-www-form-urlencoded; charset=utf-8", success: fnChangeFinish }); } </script> </body> </html>
界面图: