1. Als Beispiel mit dem G71 -Zug nehmen, codieren zunächst den Bahnhof (von 1 bis zur letzten Station)
Der obige Platzhalter wird unten kurz beschrieben: G71 hat insgesamt 18 Standorte. Anschließend kann die Sitzidentifizierung unseres Einzelsitzes durch 18-Bit-Binärstränge von 100000000000000000000000000 dargestellt werden. Jede Ziffer repräsentiert einen Standort. Es wird auf die folgende Ticketliste initialisiert, bevor das Ticket jeden Tag ausgestellt wird. Die Daten sind wie folgt. Die verbleibenden Tickets bestimmen die maximale Anzahl der verbleibenden Tickets basierend auf der Anzahl von 0 in der Sitzidentifikation.
Die Origin -Begrenzungsstandorte und die beschränkten Websites im Ticketbuchungsformular können flexibel abgestimmt werden (dies kann eingeschränkte Websites im Verkauf erreichen).
2. Fragen Sie die restlichen Tickets an
Wenn wir das Sitzticket der zweiten Klasse F von der G71-Sitz-F-Sitzticket von der Ursprungsstation Baoding East Station (3) bis zur Shaoguan-Bahnhof (15) abfragen möchten, muss nur die folgende SQL ausführen (diese SQL kann die Funktionen der Sitzauswahl und der Car-Selektion realisieren)
Wählen Sie GUID, Zugnummer, Zugtyp, Sitztyp, Wagennummer, Sitzcode, Sitzposition aus der Ticketliste
Wo to_number (Substring (Sitzmarke, 3, 15)) = 0
und Abflugdatum = '2016-06-11' '
und Zugnummerncode = 'G71' '
und Substring (Start eingeschränkte Station, 3, 4) = 1
und Substring (schließlich an der eingeschränkten Station ankommen, 15, 16) = 1
und Ticketstatus = 'zu verkaufen'
und Zugtyp = 'zweite Klasse'
und Sitzposition = 'F'
3. Buchkarten
3.1 Erhalten Sie einen Datensatz gemäß den Abfragebedingungen im zweiten Schritt und ändern Sie den Ticketstatus in die Sperrung
3.2 Die Zahlung erfolgt nach dem Sperren erfolgreich
3.2 Nach erfolgreicher Zahlung ist das Ticket von Baoding nach Shaoguan (000111111111111000 als 0 markiert) mit dem Original -Ticket und der Ticketstatus wird in den Verkauf geändert
100000000000000000 | 00011111111111000 = 100111111111111000 Das verbleibende Ticketlogo zu diesem Zeitpunkt ist das dynamische verbleibende Ticket
3.3 Wenn die angegebene Zeit nicht gezahlt wird, kann der Ticketstatus dieses Datensatzes zum Verkauf wiederhergestellt werden.
1001111111111111000^000111111111111000 = 1000000000000000000000000000000000000000000000000 Das verbleibende Ticket und automatisch restaurierte es automatisch auf die Zeit.
4. Ticket zurückerstattet
Holen Sie sich das Ticket von Baoding nach Shaoguan (000111111111111000) und das entsprechende Ticket für die Nichtoperation, und dann können Sie zum Ticketpool zurückkehren.
Das Folgende ist der relevante Java -Code
Import Java.math.bigdecimal; öffentliche Klasse Achtung {public static void main (String [] args) {String Ticketflag = ""; int beginstation =; {System.out.println ("Abonnement fehlgeschlagen");} else {System.out.println ("Ergebnis nach der Buchung:" + result); // Wenn Sie abbrechen möchten, tun Sie dies, String b = Buildticket (Ticketflag.Length (), BeginnStation, Endstation); System.CurrentTimemillis (); System.out.println ("zeitaufwändig:" + (Endime - BeginTime));}/*** Ticketbuchung** @param TicketFlag* @param beginstation* @param endstation* @return*/privat static String Ticket (Streicher TicketFlag, Int beginde station, intation station) {String -Sting -Ticket (String TicketFlag, Int begin), int -Endstation) {{String -resulting result = "; (checkCanticket (Ticketflag, BeginnSpation, Endstation)) {String B = BuildTicket (Ticketflag.length (), beginstation, Endstation); Ticket** @param Ticketflag* @param b* @return*/private statische String -Releaseticket (String TicketFlag, String B) {StringBuilder tempst = new StringBuilder (""); int Länge = Ticketflag.Length (); für (int i =; == '' && tempb == '') {tempst.Append ("");} else {tempst.append (tempa);}} return tempst.toString ();}/*** Erstellen Sie Intervall -Platzhalter** @param Länge* @param startstation* @Param Endation* @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @private static string busittation (intationstation, intationstation {StringBuilder st = new StringBuilder (""); für (int i =; i <länge; i ++) {if (i> = beginstation && i <endstation) {St.Append ("");} else {St.Append (""); Nach der Buchung** @param Ticketflag* @param b* @return*/private statische String -Toticket (String TicketFlag, String B) {StringBuilder tempst = new StringBuilder (""); int länge = Ticketflag.Length (); für (int i =; i <Länge; i ++) {char tempa = tickel). == '' ||. beginstation, int endstation) {boolean result = false; String temppticket = ticketFlag.substring (beginstation, endstation); bigdecimal b = new BigDecimal (TempTicket); if (B.Equals (neuer BigDecimal ("")) {result = true;} return;}}}}}}}}}}}}}}}}