1. Prendre le train G71 à titre d'exemple, encodez d'abord la gare (de 1 au dernier arrêt)
L'espace réservé ci-dessus est brièvement décrit ci-dessous: G71 a 18 sites au total. Ensuite, l'identification du siège de notre siège unique peut être représentée par des cordes binaires de 18 bits de 100000000000000000000000. Chaque chiffre représente un site. Il est initialisé dans la liste des billets ci-dessous avant d'émettre le billet tous les jours. Les données sont les suivantes. Les billets restants déterminent le nombre maximum de billets restants en fonction du nombre de 0 dans l'identification du siège.
Les sites restreints d'origine et la fin des sites restreints du formulaire de réservation de billets peuvent être égalés de manière flexible (cela peut réaliser des sites restreints en vente)
2. Interrogez les billets restants
Si nous voulons interroger le ticket de siège de siège de deuxième classe G71 de la station d'origine Baoding East Station (3) à la station Shaoguan (15) n'a besoin que d'exécuter le SQL suivant (ce SQL peut réaliser les fonctions de sélection des sièges et de sélection de voitures)
Sélectionnez Guide, numéro de train, type de train, type de siège, numéro de chariot, code de siège, position de siège à partir de la liste des billets
où TO_NUMBER (substring (marque de siège, 3, 15)) = 0
et date de départ = '2016-06-11'
et le code numérique de train = 'G71'
et sous-chaîne (démarrage de la station restreinte, 3, 4) = 1
et substrat (arrivez enfin à la station restreinte, 15, 16) = 1
et statut de ticket = 'à vendre'
et Train Type = 'Second Class'
et position de siège = 'f'
3. Billets de livre
3.1 Obtenez un enregistrement en fonction des conditions de requête dans la deuxième étape et modifiez l'état du billet pour verrouiller
3.2 Le paiement est effectué une fois le verrouillage réussi
3.2 Une fois le paiement réussi, le billet de Baoding à Shaoguan (000111111111111000 est marqué comme 0) avec le billet d'origine, et l'état du billet est modifié en vente
10000000000000000000 | 0001111111111000 = 1001111111111000 Le logo du billet restant à l'heure actuelle est le billet dynamique restant
3.3 Si l'heure spécifiée n'est pas payée, l'état du billet de ce dossier peut être restauré à la vente.
100111111111111000 ^ 00011111111111000 = 10000000000000000000000000000000000000000000000000000000000 Le billet restant et le restaurer automatiquement à l'époque.
4. Ticket de remboursement
Obtenez le billet de Baoding à Shaoguan (00011111111111000) et le ticket correspondant pour la non-opération, puis vous pouvez retourner au pool de billets.
Ce qui suit est le code Java pertinent
import java.math.bigdecimal; public class mainest {public static void main (string [] args) {string ticketflag = ""; int débutStation =; int Endstation =; long begintime = system.currenttimemillis (); string result = ordonna {System.out.println ("Échec de l'abonnement");} else {System.out.println ("Résultat après réservation:" + résultat); // Si vous souhaitez annuler, faites ceci, String b = buildTicket (TicketFlag.length (), BeginStation, Endstation); System.out.println ("Result After Release:" + ReleeSeTticket (TicketFlag, B)); System.currentTimemillis (); System.out.println ("chronométrant:" + (Fintime - Begintime));} / *** Booking de billets * * @param TicketFlag * @param beginStation * @param endstation * @ return * / private static orderTicket (string billetflag, int Beginstation, int EndStation) {string résultat = "" "; (CheckCanticket (TicketFlag, BeginStation, EndStation)) {String b = buildTicket (TicketFlag.Length (), BeginStation, EndStation); String CurrentTicked = TOTICKET (TicketFlag, B); System.out.printLnn ("Result Before Ticketting:" + TicketFlag); Résultat = CurrentTicked;} Else {résultat = Resultage = TicketFlag;}; Ticket * * @param ticketflag * @param b * @ return * / private static String releaseTticket (String TicketFlag, String b) {StringBuilder tempst = new StringBuilder (""); int Linard = TicketFlag.length (); for (Int i =; i <longueur; i ++) {char tempa = ticketflag.charat (i); Char tempb = b.charat (i); '' && tempb == '') {tempst.append ("");} else {tempst.append (tempa);}} return tempst.toString ();} / *** Créer un intervalle de placement d'intervalle * * @param longueur * @param beginStation * @param endstation * @ return * / priviltbust BuildTticket (int long, int débutant, intring) stringbuStationt (intyle st = new StringBuilder (""); for (int i =; i <longueur; i ++) {if (i> = beginStation && i <endstation) {St.APSED ("");} else {St.Apend ("");}} System.out.println ("Créer un billet d'intervalle:" + saintString ()); return St.Tostring ();} @param ticketflag * @param b * @ return * / private static string toticket (string ticketflag, string b) {StringBuilder tempst = new StringBuilder (""); int lingong = ticketflag.length (); for (int i =; i <longueur; i ++) {char tempa = tick == '') {tempst.append ("");} else {tempst.append (tempa);}} return tempst.toString ();} / *** est-il possible de réserver des billets * * @param ticketflag * @param beginStation * @param endstation * @ return * / Privaled boolean checkCanteTet (striet ticketflag, int débutant, intradualSterCantetSation) result = false; String Tentticket = TicketFlag.SubString (BeginStation, Endstation); BigDecimal B = new BigDecimal (Tempticket); if (b.equals (new Bigdecimal ("")) {result = true;} Retour Result;}}