Stage 2 餐厅点餐系统详细设计与系统实现

一.主要业务逻辑设计

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>

界面图:

 

 

posted @ 2019-05-29 15:44  KLTuTz  阅读(861)  评论(0编辑  收藏  举报