1. أخذ قطار G71 كمثال ، قم أولاً بتشفير محطة القطار (من 1 إلى المحطة الأخيرة)
تم وصف العنصر النائم أعلاه لفترة وجيزة أدناه: G71 لديه 18 موقعًا في المجموع. ثم يمكن تمثيل تحديد المقعد لمقعدنا الفردي بالسلاسل الثنائية بطول 18 بت من 100000000000000000000000. كل رقم يمثل موقعًا. تتم تهيئتها إلى قائمة التذاكر أدناه قبل إصدار التذكرة كل يوم. البيانات كما يلي. تحدد التذاكر المتبقية الحد الأقصى لعدد التذاكر المتبقية بناءً على عدد 0 في تحديد المقعد.
يمكن مطابقة المواقع المقيدة في المنشأ والمواقع المقيدة في نموذج حجز التذاكر بمرونة (يمكن أن يحقق ذلك مواقع مقيدة للبيع)
2. الاستعلام عن التذاكر المتبقية
إذا كنا نريد الاستعلام عن تذكرة مقعد المقعد F من الدرجة الثانية من G71 من محطة Baoding East Station (3) إلى محطة Shaoguan (15) فقط إلى تنفيذ SQL التالي (يمكن لـ SQL إدراك وظائف اختيار المقعد واختيار السيارة)
حدد GUID ، رقم القطار ، نوع القطار ، نوع المقعد ، رقم النقل ، رمز المقعد ، وضع المقعد من قائمة التذاكر
أين to_number (Substring (علامة المقعد ، 3 ، 15)) = 0
وتاريخ المغادرة = "2016-06-11"
ورمز رقم القطار = "G71"
والتقميس (ابدأ المحطة المقيدة ، 3 ، 4) = 1
والتقسيط (تصل أخيرًا إلى المحطة المقيدة ، 15 ، 16) = 1
وحالة التذكرة = "للبيع"
ونوع القطار = "الدرجة الثانية"
وموضع المقعد = 'f'
3. حجز تذاكر
3.1 احصل على سجل وفقًا لشروط الاستعلام في الخطوة الثانية وتغيير حالة التذكرة إلى القفل
3.2 يتم الدفع بعد قفل النجاح
3.2 بعد نجاح الدفعة ، يتم وضع علامة على التذكرة من Baoding إلى Shaoguan (0001111111111000.
10000000000000000000 | 00011111111111000 = 1001111111111000 شعار التذاكر المتبقي في هذا الوقت هو التذكرة الديناميكية المتبقية
3.3 إذا لم يتم دفع الوقت المحدد ، فيمكن استعادة حالة تذكرة هذا السجل للبيع.
100111111111111000^00011111111111000 = 10000000000000000000000000000000000000000000000000000 تم ترميمها تلقائيًا إلى الوقت.
4. تذكرة استرداد
احصل على التذكرة من Baoding إلى Shaoguan (000111111111000) والتذكرة المقابلة لعدم التشغيل ، ثم يمكنك العودة إلى تجمع التذاكر.
فيما يلي رمز Java ذي الصلة
استيراد java.math.bigdecimal ؛ maintest الطبقة العامة {public static void main (string [] args) {String ticketflag = "" ؛ int beginstation = ؛ int endstation = ؛ {system.out.println ("فشل الاشتراك") ؛} آخر {system.out.println ("النتيجة بعد الحجز:" + result) ؛ // إذا كنت تريد الإلغاء ، فافعل هذا ، السلسلة b = buildticket (ticketflag.length () ، beginstation ، endstation) ؛ system.Out.println ( System.CurrentTimEmillis () ؛ system.out.println ("الاستهلاك الوقت:" + (endtime - begintime)) ؛}/*** حجز التذاكر** @param ticketflag* param beginstation* param endstation* @return*/private static stringtict (string ticketflag ، int endstation) (CheckCanticket (ticketflag ، startstation ، endstation)) {string b = buildticket (ticketflag.length () ، startstation ، endstation) ؛ string currentticked = toticket (ticketflag ، b) ؛ system.out.println ("النتيجة قبل التذاكر:" + ticketflag) ؛ تذكرة** param ticketflag* param b* @return*/private static string repreaseticket (سلسلة ticketflag ، السلسلة b) {stringBuilder tempst = new StringBuilder ("") '' && tempb == '' ') {tempst.append ("") ؛} آخر {tempst.append (tempa) ؛}} إرجاع tempst.toString () ؛}/*** إنشاء static static string** string string string ، string string ، string. st = new StringBuilder ("") ؛ for (int i = ؛ i <length ؛ i ++) {if (i> = startStation && i <endstation) {st.Append ("") ؛} else {st.Append ("") ؛}}}} param ticketflag* param b* @return*/private static string toticket (سلسلة ticketflag ، السلسلة B) {StringBuilder tempst = new StringBuilder ("") ؛ int length = ticketflag.length () == '' ') {tempst.append ("") ؛} آخر {tempst.append (tempa) ؛}} إرجاع tempst.toString () ؛ النتيجة = false ؛ سلسلة tempticket = ticketflag.substring (startStation ، endstation) ؛ bigdecimal b = new BigDecimal (tempticket) ؛ if (b.equals (New BigDecimal ("" "))) {result = true ؛} return return ؛}}