gpt4 book ai didi

java - JSP 飞机座位布局

转载 作者:行者123 更新时间:2023-12-02 12:36:07 24 4
gpt4 key购买 nike

我正在尝试开发一个实验性 Java Web 应用程序,用于通过 JSP 座位布局预订座位。我使用 boolean 数组表示 24 个席位,并通过单击 JSP 页面中表单中的按钮来选择席位。
indexRevA.jsp

indexRevA.jsp using Chrome

JSP页面如下:

JSP页面indexRevA.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="model.manager.SeatManager" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<div>
<form name="chooseSeat" action="BookingServlet" method="GET">
<table cellpadding="0" cellspacing="0" border="0" id="table" class="sortable">
<tbody>
<tr>
<td>
<input type="submit" value="seat00F" name="submit" id="seat00F" /></td>
<td>
<input type="submit" value="seat03F" name="submit" id="seat03F" /></td>
<td>
<input type="submit" value="seat06F" name="submit" id="seat06F" /></td>
<td>
<input type="submit" value="seat09F" name="submit" id="seat09F" /></td>
<td>
<input type="submit" value="seat12E" name="submit" id="seat12E" /></td>
<td>
<input type="submit" value="seat15E" name="submit" id="seat15E" /></td>
<td>
<input type="submit" value="seat18E" name="submit" id="seat18E" /></td>
<td>
<input type="submit" value="seat21E" name="submit" id="seat21E" /></td>
</tr>
<tr>
<td>
<input type="submit" value="seat01F" name="submit" id="seat01F"/></td>
<td>
<input type="submit" value="seat04F" name="submit" id="seat04F"/></td>
<td>
<input type="submit" value="seat07F" name="submit" id="seat07F"/></td>
<td>
<input type="submit" value="seat10F" name="submit" id="seat10F"/></td>
<td>
<input type="submit" value="seat13E" name="submit" id="seat13E"/></td>
<td>
<input type="submit" value="seat16E" name="submit" id="seat16E"/></td>
<td>
<input type="submit" value="seat19E" name="submit" id="seat19E"/></td>
<td>
<input type="submit" value="seat22E" name="submit" id="seat22E"/></td>
</tr>
<tr>
<th><h3></h3></th>
<th><h3></h3></th>
<th><h3></h3></th>
<th><h3></h3></th>
<th><h3></h3></th>
<th><h3></h3></th>
<th><h3></h3></th>
<th><h3></h3></th>
</tr>
<tr>
<td>
<input type="submit" value="seat02F" name="submit" id="seat02F"/></td>
<td>
<input type="submit" value="seat05F" name="submit" id="seat05F"/></td>
<td>
<input type="submit" value="seat08F" name="submit" id="seat08F"/></td>
<td>
<input type="submit" value="seat11F" name="submit" id="seat11F"/></td>
<td>
<input type="submit" value="seat14E" name="submit" id="seat14E"/></td>
<td>
<input type="submit" value="seat17E" name="submit" id="seat17E"/></td>
<td>
<input type="submit" value="seat20E" name="submit" id="seat20E"/></td>
<td>
<input type="submit" value="seat23E" name="submit" id="seat23E"/></td>
</tr>
</tbody>

</table><br />
<input type="radio" value="ADULT" name="Passenger" checked="checked"/><p>Adult</p>
<input type="radio" value="CHILD" name="Passenger" /><p>Child</p>
<input type="radio" value="INFANT" name="Passenger" /><p>Infant</p>
</form>

<h3><%= request.getAttribute("seats")%></h3>
</div>
</body>
</html>

它将座位选择提交给 Servlet,如下所示:

Servlet BookingServlet

package controller;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.Arrays;
import javax.servlet.RequestDispatcher;
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 model.enums.PassengerEnum;
import model.enums.SeatEnum;
import model.enums.SeatTypeEnum;
import model.manager.SeatManager;

/**
* Alba Airways application M813-TMA02-ChooseSeat
*
* @author james chalmers Open University F6418079
*/
@WebServlet(name = "BookingServlet", urlPatterns = {"/BookingServlet"})
public class BookingServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

SeatManager seatManager;

private int seatNumber;
private SeatTypeEnum seatType;
private String msg = "";
private String url = "";
private String returnVal;

/*
* Creates a new instance of CustomerManager
*/
@Override
public void init() throws ServletException {
seatManager = new SeatManager();

}

public void chooseSeat(HttpServletRequest request, HttpServletResponse response) {
if (seatManager.checkNotFullyBooked()) {

url = "/indexRevA.jsp";
String passenger = request.getParameter("Passenger");
boolean isSeatBooked = false;
if (seatManager.getSeats()[seatNumber] == true) {
msg = "This seat is already booked. Please choose another seat.";
request.setAttribute("msg", msg);
url = "/booked.jsp";
} else {
seatManager.assignSeat(seatNumber, seatType);
isSeatBooked = true;
returnVal = "color:red";
request.setAttribute("returnVal", returnVal);
msg = "Your Seat Booking.";
for (SeatEnum seatEnum : SeatEnum.values()) {
if (seatNumber == seatEnum.ordinal()) {
if (passenger.equals(PassengerEnum.ADULT.toString())) {
double seatCost = SeatEnum.valueOf(seatEnum.toString()).getAdultFare();
request.setAttribute("seatCost", seatCost);
} else if (passenger.equals(PassengerEnum.CHILD.toString())) {
double seatCost = SeatEnum.valueOf(seatEnum.toString()).getChildFare();
request.setAttribute("seatCost", seatCost);
} else if (passenger.equals(PassengerEnum.INFANT.toString())) {
double seatCost = SeatEnum.valueOf(seatEnum.toString()).getInfantFare();
request.setAttribute("seatCost", seatCost);
}
request.setAttribute("passengerType", passenger);
request.setAttribute("seatNumber", seatNumber);
request.setAttribute("seatType", seatType);
}
request.setAttribute("msg", msg);
request.setAttribute("seats", Arrays.toString(seatManager.getSeats()));

}

url = "/message.jsp";
}
try (FileOutputStream fos = new FileOutputStream("C:\\Users\\user\\Documents\\seats.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
oos.writeObject(seatManager.getSeats());
oos.flush();
oos.close();
} catch (IOException e) {
e.getMessage();
}
} else {
msg = "The Flight is fully booked. Please choose another Flight.";
request.setAttribute("msg", msg);
url = "/booked.jsp";
}
}

/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

request.setAttribute("seats", Arrays.toString(seatManager.getSeats()));
//request.setAttribute("returnVal", returnVal);
String submit = request.getParameter("submit");
if (submit != null && submit.length() > 0) {

if (submit.equals("seat00F")) {
seatNumber = 0;
seatType = SeatTypeEnum.FIRSTCLASS;
chooseSeat(request, response);
} else if (submit.equals("seat01F")) {
seatNumber = 1;
seatType = SeatTypeEnum.FIRSTCLASS;
chooseSeat(request, response);
} else if (submit.equals("seat02F")) {
seatNumber = 2;
seatType = SeatTypeEnum.FIRSTCLASS;
chooseSeat(request, response);
} else if (submit.equals("seat03F")) {
seatNumber = 3;
seatType = SeatTypeEnum.FIRSTCLASS;
chooseSeat(request, response);
} else if (submit.equals("seat04F")) {
seatNumber = 4;
seatType = SeatTypeEnum.FIRSTCLASS;
chooseSeat(request, response);
} else if (submit.equals("seat05F")) {
seatNumber = 5;
seatType = SeatTypeEnum.FIRSTCLASS;
chooseSeat(request, response);
} else if (submit.equals("seat06F")) {
seatNumber = 6;
seatType = SeatTypeEnum.FIRSTCLASS;
chooseSeat(request, response);
} else if (submit.equals("seat07F")) {
seatNumber = 7;
seatType = SeatTypeEnum.FIRSTCLASS;
chooseSeat(request, response);
} else if (submit.equals("seat08F")) {
seatNumber = 8;
seatType = SeatTypeEnum.FIRSTCLASS;
chooseSeat(request, response);
} else if (submit.equals("seat09F")) {
seatNumber = 9;
seatType = SeatTypeEnum.FIRSTCLASS;
chooseSeat(request, response);
} else if (submit.equals("seat10F")) {
seatNumber = 10;
seatType = SeatTypeEnum.FIRSTCLASS;
chooseSeat(request, response);
} else if (submit.equals("seat11F")) {
seatNumber = 11;
seatType = SeatTypeEnum.FIRSTCLASS;
chooseSeat(request, response);
} else if (submit.equals("seat12E")) {
seatNumber = 12;
seatType = SeatTypeEnum.ECONOMY;
chooseSeat(request, response);
} else if (submit.equals("seat13E")) {
seatNumber = 13;
seatType = SeatTypeEnum.ECONOMY;
chooseSeat(request, response);
} else if (submit.equals("seat14E")) {
seatNumber = 14;
seatType = SeatTypeEnum.ECONOMY;
chooseSeat(request, response);
} else if (submit.equals("seat15E")) {
seatNumber = 15;
seatType = SeatTypeEnum.ECONOMY;
chooseSeat(request, response);
} else if (submit.equals("seat16E")) {
seatNumber = 16;
seatType = SeatTypeEnum.ECONOMY;
chooseSeat(request, response);
} else if (submit.equals("seat17E")) {
seatNumber = 17;
seatType = SeatTypeEnum.ECONOMY;
chooseSeat(request, response);
} else if (submit.equals("seat18E")) {
seatNumber = 18;
seatType = SeatTypeEnum.ECONOMY;
chooseSeat(request, response);
} else if (submit.equals("seat19E")) {
seatNumber = 19;
seatType = SeatTypeEnum.ECONOMY;
chooseSeat(request, response);
} else if (submit.equals("seat20E")) {
seatNumber = 20;
seatType = SeatTypeEnum.ECONOMY;
chooseSeat(request, response);
} else if (submit.equals("seat21E")) {
seatNumber = 21;
seatType = SeatTypeEnum.ECONOMY;
chooseSeat(request, response);
} else if (submit.equals("seat22E")) {
seatNumber = 22;
seatType = SeatTypeEnum.ECONOMY;
chooseSeat(request, response);
} else if (submit.equals("seat23E")) {
seatNumber = 23;
seatType = SeatTypeEnum.ECONOMY;
chooseSeat(request, response);
} else if (submit.equals("seats")) {
url = "/indexRevA.jsp";
}
}
RequestDispatcher dispatcher
= getServletContext().getRequestDispatcher(url);
dispatcher.forward(request, response);
}

我需要的是一种让用户在选择座位时知道哪些座位已被预订的方法。有没有办法根据是否已预订来更改按钮颜色?我是 JavaScript 新手,这就是为什么我遇到了这堵砖墙!我的席位管理器类如下所示:

SeatManager 类

package model.manager;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Random;
import model.enums.SeatTypeEnum;

/**
*
* @author james
*/
public class SeatManager implements Serializable {

private static final long serialVersionUID = 1L;

private final int NUMBER_OF_SEATS = 24;
private boolean[] seats;
private int firstClassCounter;//counter for first class
private int economyCounter;//counter for economy class
private boolean isSeatBooked;
Random randomNumber = new Random();

public SeatManager() {

this.seats = new boolean[NUMBER_OF_SEATS];//RESETS Seats TO FALSES
this.seats = initSeats();

}

private boolean[] initSeats() {

try (FileInputStream fis = new FileInputStream("C:\\Users\\user\\Documents\\seats.ser");
ObjectInputStream in = new ObjectInputStream(fis)) {
in.readObject();
//String seatsString = (String) in.readObject();

seats = (boolean[]) in.readObject();
in.close();
} catch (ClassNotFoundException | IOException e) {
e.getMessage();
}
return seats;
}

public int getNUMBER_OF_SEATS() {
return NUMBER_OF_SEATS;
}

public boolean[] getSeats() {
return seats;
}

public int getFirstClassCounter() {
return firstClassCounter;
}

public int getEconomyCounter() {
return economyCounter;
}

public boolean isIsSeatBooked() {
return isSeatBooked;
}

public boolean checkNotFullyBooked() {
for (int i = 0; i < seats.length; i++) {
if (seats[i] = true) {
return true;
}
}
return false;
}

public static boolean areAllSeatsBooked(boolean[] seats) {
for (boolean b : seats) {
if (!b) {
return false;
}
}
return true;
}

public boolean[] assignSeat(int seatNumber, SeatTypeEnum seatType) {
if (seatType == SeatTypeEnum.ECONOMY) {
economyCounter++;
if (economyCounter > 12) {
System.out.println("All the Economy seats have been used up.");
}

} else if (seatType == SeatTypeEnum.FIRSTCLASS) {
firstClassCounter++;
if (firstClassCounter > 12) {
System.out.println("All the First Class seats have been used up.");
}

}

seats[seatNumber] = true;
return seats;
}

编辑

jQuery这是我第一次尝试 AJAX - 我想调用 Servlet 并接收一系列座位预订。它几乎可以工作 - 它根据 DOM 索引错误地匹配座位选择,而不是我的基于行的座位布局。

   <script type="text/javascript">
$(document).ready(function () {
$.ajax({
type: "get",
url: "BookingServlet",
dataType: 'json',
error: function () {
alert("Error Occurred");
},
success: function (data) {
var receivedData = [];
$.each(data.jsonArray, function (index) {
$.each(data.jsonArray[index], function (key, value) {
var point = [];
point.push(key);
point.push(value);
receivedData.push(point);
document.getElementById("output").innerHTML = point;
$.each(document.getElementsByClassName("btn"), function (index) {
//var x = [Array.from(document.getElementsByClassName("btn")[index].id)];
//document.getElementsByClassName("btn")[index].id;
$.each(point[1], function (index, value) {
if (value === true) {
document.getElementsByClassName("btn")[index].style.color = "red";//
}
});
}
);
});
});
}
});
});
</script>

AJAXServlet

    package controller;

import java.io.IOException;
import java.io.PrintWriter;
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 model.manager.SeatManager;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

/**
*
* @author james
*/
@WebServlet(name = "AJAXServlet", urlPatterns = {"/AJAXServlet"})
public class AJAXServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

SeatManager seatManager;

// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("application/json;charset=utf-8");

JSONObject json = new JSONObject();
JSONArray array = new JSONArray();
JSONObject member = new JSONObject();

member.put("arrayData", seatManager.getSeats());
array.add(member);

json.put("jsonArray", array);

try (PrintWriter pw = response.getWriter()) {
pw.print(json.toString());
}
}

下一阶段是找到一种随机选择经济舱座位的方法(即在 12 到 23 个范围内)。我已经完成了其他所有工作。

最佳答案

这意味着您需要从前端服务器获取一些信息:

What I need is a way for the user to tell which seats are booked when he chooses a Seat.

要实现此目的,您需要一些技巧:

  1. 网络套接字。这作为服务器和客户端之间的双向连接,因此当其他用户预订座位时,您将在前端收到一条注释。我认为这是最好的解决方案。
  2. 前端可以调用ajax请求,但不能立即响应。仅当您预订的座位状态发生变化时,服务器才会发送响应。这是一种黑客行为,依赖于最大 session 长度
  3. 每隔几秒调用 Ajax 以了解是否有任何变化。这个方法太疯狂了:)。它会产生大量的调用开销。您应该尽量避免这种情况。

从服务器获取数据后,您就可以决定如何处理预订的座位。您可以使用 javascript 代码为它们着色,或制作任何弹出窗口等

顺便说一句, boolean 值不是座位数组的最佳类型。考虑像 Seat 这样的新类别。可包含排号、座位字母标记、紧急入口座位等。

关于java - JSP 飞机座位布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45132600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com