1. Tomar el tren G71 como ejemplo, primero codifica la estación de tren (desde 1 hasta la última parada)
El marcador de posición anterior se describe brevemente a continuación: G71 tiene 18 sitios en total. Luego, la identificación del asiento de nuestro asiento único se puede representar con cadenas binarias de 18 bits de 10000000000000000000000000. Cada dígito representa un sitio. Se inicializa a la lista de boletos a continuación antes de emitir el boleto todos los días. Los datos son los siguientes. Los boletos restantes determinan el número máximo de boletos restantes en función del número de 0 en la identificación del asiento.
Los sitios restringidos de origen y los sitios restringidos finales en el formulario de reserva de boletos se pueden igualar de manera flexible (esto puede lograr sitios restringidos a la venta)
2. Consulta los boletos restantes
Si queremos consultar el boleto de asiento del asiento de segunda clase G71 de la estación de origen Baoding East Station (3) a la estación Shaoguan (15) solo necesita ejecutar el siguiente SQL (este SQL puede realizar las funciones de selección de asientos y selección de automóviles)
Seleccione Guid, número de tren, tipo de tren, tipo de asiento, número de carro, código de asiento, posición del asiento desde la lista de boletos
donde to_number (subcadena (marca de asiento, 3, 15)) = 0
y fecha de salida = '2016-06-11'
y código de número de tren = 'G71'
y subcadena (estación de inicio restringida, 3, 4) = 1
y subcadena (finalmente llegue a la estación restringida, 15, 16) = 1
y estado de boleto = 'en venta'
y tipo de tren = 'Segunda clase'
y posición del asiento = 'f'
3. Entradas de libros
3.1 Obtenga un registro de acuerdo con las condiciones de consulta en el segundo paso y cambie el estado del boleto para bloquear
3.2 El pago se realiza después de que el bloqueo es exitoso
3.2 Después de que el pago sea exitoso, el boleto de Baoding a Shaoguan (00011111111111111000 está marcado como 0) con el boleto original, y el estado de la multa se cambia a la venta
1000000000000000000000 | 000111111111111000 = 100111111111111000 El logotipo de boletos restante en este momento es el boleto dinámico restante
3.3 Si no se paga el tiempo especificado, el estado del boleto de este registro se puede restaurar a la venta.
10011111111111111000^00011111111111111000 = 1000000000000000000000000000000000000000000000000000000000000 El boleto restante y lo restauró automáticamente a la hora.
4. Boleto de reembolso
Obtenga el boleto de Baoding a Shaoguan (00011111111111000) y los boletos correspondientes para la no operación, y luego puede regresar al grupo de boletos.
El siguiente es el código Java correspondiente
import java.math.bigDecimal; public class Mantest {public static void main (string [] args) {String ticketflag = ""; int beginStation =; int endStation =; long begintime = system.currentTimillis (); string result = OrderTicket (ticketflag, beginstation, endStation); if (resultado.equals (ticketflag)) {System.out.println ("suscripción fallida");} else {system.out.println ("resultado después de reservar:" + resultado); // Si desea cancelar, hacer esto, cadena b = buildTicket (ticketflag.length (), beginstation, endstation); system.out.println ("Results después de la versión:" + releaseTicket (ticket (ticketflag, b);};} System.CurrentTimemillis (); System.out.println ("Conseguido de tiempo:" + (endtime - begintime));}/*** reserva de ticket** @param ticketflag* @param beginstation* @param endstation* @return*/private static string string ticket (string ticketflag, int beginstation, int (checkCanticket (ticketflag, beginStation, endStation)) {String b = buildTicket (ticketflag.length (), beginStation, endStation); string stentTicked = toticket (ticketflag, b); system.out.println ("resultado antes de ticketing:" + ticketflag); resultado = actualTicked;} else {resultado = resultado;};} Ticket** @param ticketflag* @param b* @return*/private static string releaseTicket (string ticketflag, string b) {stringBuilder tempst = new StringBuilder (""); int long = ticketflag.length (); for (int i =; i <longitud; i ++) {char tempra = ticket.charat (i); char Temp. == '' && tempB == '') {tempSt.append("");} else {tempSt.append(tempA);}}return tempSt.toString();}/*** Create interval placeholder* * @param length* @param beginStation* @param endStation* @return*/private static String buildTicket(int length, int beginStation,int endStation) {StringBuilder st = new StringBuilder (""); for (int i =; i <longitud; i ++) {if (i> = beginStation && i <endStation) {St.Append ("");} else {St. "" "");}} System.out.println ("Create Interter Ticket:"+St.Tosting (); Después de reservar** @param ticketflag* @param b* @return*/private static string toticket (string ticketflag, string b) {stringBuilder tempst = new StringBuilder (""); int long = ticketflag.length (); for (int i =; i <longitud; i ++) {char tempra = ticket.artflag (i); char Temper = b. Charp = I if (I if (I ++); == '' || beginStation, int endStation) {boolean result = false; string tempticket = ticketflag.substring (beginStation, endStation); bigDecimal b = new BigDecimal (Tempticket); if (B.Equals (new BigDecimal ("" "))) {Result = true;} Resultado;}}