1. Mengambil kereta G71 sebagai contoh, pertama -tama menyandikan stasiun kereta (dari 1 hingga perhentian terakhir)
Placeholder di atas dijelaskan secara singkat di bawah ini: G71 memiliki total 18 situs. Kemudian identifikasi kursi dari kursi tunggal kami dapat diwakili oleh string biner panjang 18-bit dari 100000000000000000000.000. Setiap digit mewakili situs. Ini diinisialisasi ke daftar tiket di bawah ini sebelum mengeluarkan tiket setiap hari. Data adalah sebagai berikut. Tiket yang tersisa menentukan jumlah maksimum tiket yang tersisa berdasarkan jumlah 0 dalam identifikasi kursi.
Situs Terbatas Asal dan Situs Akhir Terbatas dalam Formulir Pemesanan Tiket dapat dicocokkan secara fleksibel (ini dapat mencapai situs terbatas yang dijual)
2. Permintaan tiket yang tersisa
Jika kita ingin menanyakan tiket kursi Kursi Kelas Dua G71 dari stasiun asal Baoding East Station (3) ke Stasiun Shaoguan (15) hanya perlu melaksanakan SQL berikut (SQL ini dapat mewujudkan fungsi pemilihan kursi dan pemilihan mobil)
Pilih Guid, Nomor Kereta, Jenis Kereta, Jenis Kursi, Nomor Kereta, Kode Kursi, Posisi Kursi dari Daftar Tiket
where to_number (substring (tanda kursi, 3, 15)) = 0
dan tanggal keberangkatan = '2016-06-11'
dan kode nomor kereta = 'G71'
dan Substring (Mulai Stasiun Terbatas, 3, 4) = 1
dan substring (akhirnya tiba di stasiun terbatas, 15, 16) = 1
dan status tiket = 'dijual'
dan train type = 'Kelas Kedua'
dan posisi kursi = 'f'
3. Tiket buku
3.1 Dapatkan catatan sesuai dengan kondisi kueri di langkah kedua dan ubah status tiket menjadi terkunci
3.2 Pembayaran dilakukan setelah penguncian berhasil
3.2 Setelah pembayaran berhasil, tiket dari Baoding ke Shaoguan (0001111111111111000 ditandai sebagai 0) dengan tiket asli, dan status tiket diubah untuk dijual
10000000000000000000 | 000111111111111000 = 10011111111111000 Logo tiket yang tersisa saat ini adalah tiket yang tersisa dinamis
3.3 Jika waktu yang ditentukan tidak dibayarkan, status tiket catatan ini dapat dikembalikan untuk dijual.
1001111111111111000^000111111111111000 = 1000000000000000000000000000000000000000000000000000000000000 Tiket yang tersisa dan secara otomatis memulihkannya ke waktu.
4. Tiket Pengembalian dana
Dapatkan tiket dari Baoding ke Shaoguan (0001111111111000) dan tiket yang sesuai untuk non-operasi, dan kemudian Anda dapat kembali ke kumpulan tiket.
Berikut ini adalah kode Java yang relevan
Impor java.math.bigdecimal; kelas publik Maintest {public static void main (string [] args) {string ticketflag = ""; int startStation =; int endstation =; long begintime = System.currentTimeMillis (); string result = orderticket (ticketflag, beginflag, startstation, endstation); {System.out.println ("Langganan Gagal");} else {System.out.println ("Hasil Setelah Pemesanan:" + Hasil); // Jika Anda ingin membatalkan, lakukan ini, string B = BuildTicket (TicketFlag. System.currentTimeMillis();System.out.println("Time-consuming: " + (endTime - beginTime));}/*** Ticket booking* * @param ticketFlag* @param beginStation* @param endStation* @return*/private static String orderTicket(String ticketFlag, int beginStation,int endStation) {String result = "";if (checkCanticket (ticketflag, beginstation, endstation)) {string b = buildticket (ticketflag.length (), startStation, endstation); string currentTicked = tubIcket (ticketflag, b); out.out.println ("Hasil sebelum tiket:" + + ticketflag; oFRECTECK;} {—kroptle; Tiket** @param ticketflag* @param b* @return*/private static string releaseticket (string ticketflag, string b) {stringbuilder tempst = new stringBuilder (""); int length = tickflag.length (); untuk (int i =; i <length; i ++) {char tempa = tickel (); untuk (int i =; i <length; i ++) {char tempa = tickelpraP. (tempa == '' && tempb == '' ') {tempst.append ("");} else {tempst.append (tempa);}} return tempst.tostring (); @interval placeholder** @param length* @param startstation* @param endstation endststation* @ @ @ @ @@pyatic length* @param startstation* @param endstation endststation* endStation) {stringBuilder st = new stringBuilder (""); for (int i =; i <length; i ++) {if (i> = startStation && i <endstation) {staft lappend (");} else {stappend (");} System.out.println ("create {stappend (");} System.out.println ("create {stappend ("); St.ToString ();}/*** Hasil Setelah pemesanan** @param ticketflag* @param b* @return*/private static string tubticket (string ticketflag, string b) {stringBuilder tempst = new stringBuilder (""); int length = ticketflag.lag (); for (int i =; i <pengandia; tempb = b.charat (i); if (tempa == '' || tempb == '') {tempst.append ("");} else {tempst.append (tempa);}} return tempst.toString ();}/*** Apakah mungkin untuk memesan tiket* @param @param (); boolean checkCanticket (string ticketflag, int beginstation, int endstation) {boolean hasil = false; string tempticket = ticketflag.substring (beginstation, endstation); bigdecimal b = BigDecimal baru (Temppticket); if (b.equals (BigDecimal baru ("") {ife (b. b.equals (BigDecimal baru ("" ") {ife (b. b.equals (BigDecimal baru (" "") {if (b. b.equals (BigDecimal baru ("" ") (" ") {ife (b. b.equals (baru bigdecimal (" "" ") {if (b. b.equals (BigDecimal baru (" "" "") {ife; b. b.equals (BigDecimal baru ("" ""