1. Tomando o trem G71 como exemplo, codifica primeiro a estação de trem (de 1 para a última parada)
O espaço reservado acima é descrito brevemente abaixo: G71 possui 18 locais no total. Em seguida, a identificação do assento do nosso assento pode ser representada por seqüências binárias de 18 bits de 100000000000000000000000. Cada dígito representa um local. Ele é inicializado na lista de ingressos abaixo antes de emitir o ticket todos os dias. Os dados são os seguintes. Os ingressos restantes determinam o número máximo de tickets restantes com base no número de 0 na identificação do assento.
Os sites restritos de origem e sites restritos finais no formulário de reserva de ingressos podem ser combinados com flexibilidade (isso pode obter sites restritos à venda)
2. Consulte os ingressos restantes
Se quisermos consultar o bilhete de assento do assento de segunda classe G71 da estação de origem da estação leste (3) para a estação Shaoguan (15) precisa apenas executar o seguinte SQL (este SQL pode realizar as funções da seleção de assentos e seleção de carros)
Selecione GUID, número do trem, tipo de trem, tipo de assento, número do carro, código do assento, posição do assento na lista de ingressos
onde to_number (substring (marca do assento, 3, 15)) = 0
e data de partida = '2016-06-11'
e código de número do trem = 'G71'
e substring (Start Restrits Station, 3, 4) = 1
e substring (finalmente chega à estação restrita, 15, 16) = 1
e status do ingresso = 'para venda'
e tipo de trem = 'Segunda classe'
e posição do assento = 'f'
3. Reserve os ingressos
3.1 Obtenha um registro de acordo com as condições de consulta na segunda etapa e altere o status do ingresso para bloquear
3.2 O pagamento é feito após o sucesso do bloqueio
3.2 Depois que o pagamento for bem -sucedido, o bilhete de Baoding para Shaoguan (000111111111111000 está marcado como 0) com o ticket original, e o status do ingresso é alterado para venda
10000000000000000000 | 000111111111111000 = 100111111111111000 O logotipo do ingresso restante neste momento é o tíquete restante dinâmico
3.3 Se o tempo especificado não for pago, o status do ingresso deste registro poderá ser restaurado para venda.
10011111111111111000^0001111111111111000 = 10000000000000000000000000000000000000000000000000000000000000000 O TILHO restante e o restaurou automaticamente na hora.
4. Ticket de reembolso
Obtenha o ingresso de Baoding para Shaoguan (000111111111111000) e os ingressos correspondentes para não operação e, em seguida, você pode retornar ao pool de ingressos.
A seguir, o código Java relevante
importar java.math.bigdecimal; public class Mantest {public static void main (string [] args) {string ticketflag = ""; int BeginStation =; int endstation =; long Begintime = system.currenttimEmillis (); resultado = OrderTicket (ticketflag, iniciante, endstation); se {System.out.println ("Falha na assinatura");} else {System.out.println ("Resultado Após a reserva:" + resultado); // se você deseja cancelar, faça isso, string b = BuildTicket (ticketflag.length (), BEGNSTATION, ENSTATION); System.out.out.Println ("Result After (), LanwLeawN); System.currenttimemillis (); system.out.println ("demorado:" + (EndTime - BeginTime));}/*** Reserva de ingressos** @param ticketflag* @param BeginStation* @param endstation* @return*/private static string ticket (string ticketfl "; (CheckCanticket (Ticketflag, BeginStation, EndStation)) {String b = BuildTicket (ticketflag.Length (), BeginStation, EndStation); String currentTicked = Toticket (Ticketflag,}; system.out.out.println ("resultado antes:" + ticketflag); o bilhete** @param ticketflag* @param b* @return*/private static string releaseticket (string ticketflag, string b) {stringbuilder tempst = new stringbuilder (""); int length = ticketflag.lengthag (); para (int i = i <i; i ++) {charpa = tickenflag.length. == '' && tempb == '') {tempst.append ("");} else {tempst.append (tempa);}} retorna tempst.toString ();}/*** INTROTTATTILT STROTTLOTLOR STROTTLOTS* @param* @param @param {Stringbuilder st = new stringbuilder (""); para (int i =; i <comprimento; i ++) {if (i> = BeginStation && i <endstation) {st.Append ("");} else {st.Append ("");}} System.out.println ("Criar interval bilhete:" Após a reserva** @param ticketflag* @param b* @return*/string estática privada Toticket (string ticketflag, string b) {stringbuilder tempst = new stringbuilder (""); int length = ticketflag.lengthlag (); para (int i =; i <i++) == '' ||. BeginStation, int endstation) {resultado booleano = false; string tempticket = ticketflag.substring (BeginStation, endstation); bigdecimal b = novo bigdecimal (texicket); if (b.equals (novo bigdecimal (""))) {resultado = true;} Result;};