基于JAVAWEB实现电影院的购票选座功能(AJAX+JSON)

  • 实体类
package com.pn.entity;

public class Ticket {
    /**
     * 座位号
     */
    private String seat;
    /**
     * 销售标志
     */
    private Integer sign;

    public void setSeat(String seat) {
        this.seat = seat;
    }

    public void setSign(Integer sign) {
        this.sign = sign;
    }

    public Integer getSign() {
        return sign;
    }

    public String getSeat() {
        return seat;
    }

    public Ticket() {
    }

    public Ticket(String seat, int sign) {
        this.seat = seat;
        this.sign = sign;
    }
}
  • dao层接口,实现类


public interface TicketDao {
    /*查询所有售票信息*/
    public Map<String,Integer> findAllTicket();
    /*购票接口*/
    int buy(String[] seats);
    /*清场*/
    int clears();







}
package com.pn.dao.impl;

import com.pn.dao.TicketDao;
import com.pn.entity.Ticket;
import com.pn.utils.DBUtil;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TicketDaoImpl implements TicketDao {
    @Override
    public Map<String,Integer> findAllTicket() {
        List<Ticket> ticketList = DBUtil.executeDQL(Ticket.class, "select * from t_ticket");
        /*将list转化为map*/
        Map<String,Integer> map = new HashMap<>();
        /*遍历list集合放入到Map集合中*/
        for (Ticket t:ticketList) {
            map.put(t.getSeat(),t.getSign());
        }
        return map;
    }

    @Override
    public int buy(String[] seats) {
        String str = Arrays.toString(seats);
        /*进行字符串拼接去掉str的[1,2,3,4,5] 拿取待【】里面的数据*/
        String sql ="update t_ticket set sign=1 where seat in("+str.substring(1,str.lastIndexOf("]"))+")";
        return DBUtil.executeDML(sql);
    }

    @Override
    public int clears() {
        return DBUtil.executeDML("update t_ticket set sign=0");
    }


}

注释:findAllTicket():这里使用Map集合是为了一个座位号对应一个票的状态,方便前端页面的操作,将查询到所有的list的集合遍历,将他的座位号和票的状态全部添加到map集合中,在前端用key来获取value的值

注释:buy() :这里使用Arrays工具类的toString方法是为了前端进行多选处理的时候,可以同时选中多个座位号进行提交。

Arrays.toString(array)返回的是一个字符串的形式,返回值是String

  • 控制器

购票控制器

package com.pn.servlet;

import com.pn.dao.TicketDao;
import com.pn.dao.impl.TicketDaoImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/BuyServlet")
public class BuyServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*从页面获取数据购票需要进行点击购买*/
        /*在前端进行字符串拼接BuyServlet?seat=11&seat=23&seat=31*/
        String[] parameterValues = request.getParameterValues("seat");
        TicketDao ticketDao = new TicketDaoImpl();
        int buy = ticketDao.buy(parameterValues);
        if(buy>0){
            response.getWriter().print("ok");
        }else {
            response.getWriter().print("error");
        }


    }
}

清场控制器(重置)

package com.pn.servlet;

import com.pn.dao.TicketDao;
import com.pn.dao.impl.TicketDaoImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/ClearServlet")
public class ClearServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        TicketDao ticketDao = new TicketDaoImpl();
        int clears = ticketDao.clears();
        if(clears>0){
            resp.getWriter().print("ok");
        }else {
            resp.getWriter().print("error");
        }
    }
}

显示控制器

package com.pn.servlet;

import com.google.gson.Gson;
import com.pn.dao.TicketDao;
import com.pn.dao.impl.TicketDaoImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;

@WebServlet("/ShowServlet")
public class ShowServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        TicketDao ticketDao = new TicketDaoImpl();
        Map<String, Integer> map = ticketDao.findAllTicket();
        /*将数据放在req请求域中*/
        request.setAttribute("map",map);
        /*创建JSON对象*/
        Gson gson = new Gson();
        String json = gson.toJson(map);
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().print(json);

    }
}

注释:这里将接收的数据放在request的请求域中方便后面的接收(可以不要。应为json已经发送给前端接收了)。将创建的对象转化为字符串的形式

Gson = new Gson();
String str=gson.toJson(obj);//将json对象转化为字符串发送给前端
Object obj= gson.formJson(str);//将字符串转化为Json对象
  • 前端页面
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www/thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
        var xmlhttp;

        function createXMLHttp() {
            if (window.ActiveXObject) {
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            } else {
                xmlhttp = new XMLHttpRequest();
            }
        }

        function getTickets() {
            createXMLHttp();
            xmlhttp.open("GET", "ShowServlet", true);
            xmlhttp.send();
            /*回调函数*/
            xmlhttp.onreadystatechange = callback;
        }

        function callback() {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                /*获取数据,将字符串转化为对象*/
                var map = JSON.parse(xmlhttp.responseText);
                /*保存数据*/
                var html = "";
                for (var i = 1; i <= 5; i++) {
                    html += "<tr>";
                    html += "<td>" + i + "排</td>";
                    for (var j = 1; j <= 5; j++) {
                        /*访问JSON对象的数据时,如果属性名是数字,可以通过[]访问其值
                        * eg:var obj={
                        * "1":"张三"
                        * }
                        * 访问方式可以通过:obj["1"],而不能通过obj."1"来访问*/
                        if (map[i + "" + j] == 0) {/*0未售*/
                            html += "<td>" + j + "号座位未售<input type='checkbox' name='seats' value='" + i + j + "'></td>"
                        } else {

                            html += "<td style='background-color: red'>" + j + "号座位已售</td>"
                        }

                    }
                    html += "</tr>";
                }
                /*将数据显示到table标签中*/
                document.getElementById("data").innerHTML = html;
            }
        }

        function buy(){
            var param="";
            /*获取所有选项框的集合*/
            var seats=document.getElementsByName("seats");
            for(var i=0;i<seats.length;i++){
                if(seats[i].checked){
                    param+="seat="+seats[i].value+"&";
                }
            }
            xmlhttp.open("POST","BuyServlet",true);
            xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded")
            xmlhttp.send(param);
            xmlhttp.onreadystatechange=function(){
                if(xmlhttp.responseText=="ok"){
                    getTickets();
                }
            };
        }
        function clear2(){
            xmlhttp.open("POST","ClearServlet",true);
            xmlhttp.send();
            xmlhttp.onreadystatechange=function(){
                if(xmlhttp.responseText=="ok"){
                    getTickets();
                }
            };
        }
    </script>
</head>
<body onload="getTickets()">
<table id="data" border="1"></table>
<input type="button" onclick="buy()" value="购买"><br>
<input type="button" onclick="clear2()" value="清场">
</body>
</html>

将票显示在页面:

前端思路:因为电影院的座位多少是固定的,以这个为例5行5列,使用双层for循环将数据显示到页面上。

注释:前端拿到数据要将其显示在页面上,先要将控制器(servlet服务器)里面的额数据拿到的数据用JSON解析为对象,进行table的拼接,这里的座位号可以用嵌套循环的i和j的字符串拼接进行显示。

0:未售 1:已售 : 通过map集合的key来判断是否售票map[i+""+j]==0判断

注意:

/*访问JSON对象的数据时,如果属性名是数字,可以通过[]访问其值
* eg:var obj={
* "1":"张三"
* }
* 访问方式可以通过:obj["1"],而不能通过obj."1"来访问*/

购票:

购票的时候用checked来判断是否已选中的票,用这个:

/*获取所有选项框的集合*/
            var seats=document.getElementsByName("seats");

接收所有选中的集合,然后循环遍历判断集合中的下标是否属性是否为checked,将是checked的获取他座位号对应的值,进行”&“的拼接存储到param中用post请求发送到控制器,接收住进行处理

清场

用post请求直接发送到清除控制器,再次刷新页面

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Java 是一种流行的编程语言,可以用来开发各种应用程序,包括基于 JavaWeb 的影院自主购票系统。 JavaWeb 是一个用于开发动态网站的技术平台,它基于 Java 语言和 Servlet、JSP 等技术,可以与数据库进行交互,实现影院购票系统的需求。 为了实现这个系统,需要一些 Java 的基础知识和 Web 开发的经验,并且要掌握 Servlet 和 JSP 的编写方法。除此之外,还需要了解数据库技术,如如何连接数据库、存储数据、检索数据等。 如果有充分的时间和经验,可以自己动手开发一个基于 JavaWeb 的影院自主购票系统,并不断完善它,使它更加实用和高效。 ### 回答2: 影院自主购票系统是一种基于JavaWeb技术开发的系统,旨在为影院提供线上购票服务。该系统可以为用户提供电影信息浏览、选座购票、在线支付等功能。 首先,系统需要建立一个数据库,包含电影、放映厅、场次、座位、订单等相关信息。电影信息包括电影名称、导演、演员、时长和简介等。放映厅信息包括放映厅名称和座位数等。场次信息包括电影、放映厅、放映时间和票价等。座位信息包括座位号和状态(是否已被售出)。订单信息包括用户、场次、座位和支付状态等。 用户登录系统后,可以浏览首页展示的电影信息,包括电影海报、名称和简介等。用户也可以通过搜索功能查找特定电影。用户选择电影后,系统将显示该电影的场次信息,包括放映时间和票价。用户可以选择场次,并且可以选座购票。系统会根据用户选择的座位更新座位状态,并生成订单。 用户在选座购票后,可以选择在线支付方式进行支付。支付方式可以包括支付宝、微信支付或银行卡支付等。完成支付后,系统会生成支付成功的订单,并提示用户取票码或电子票。 影院自主购票系统还可以提供用户订单查询功能,用户可以通过输入订单号或手机号查询订单信息。用户也可以取消未支付的订单。 为了增加系统的安全性,用户登录和支付时需要进行身份验证和数据加密。同时,系统还需要进行防止恶意攻击的防火墙设置,以保护用户信息的安全。 总的来说,这个基于JavaWeb的影院自主购票系统可以为影院提供方便快捷的线上购票服务,提高用户购票体验,并帮助影院提高运营效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值