1. G71 열차를 예로 들어, 먼저 기차역을 인코딩합니다 (1에서 마지막 정거장까지)
위의 자리 표시자는 다음과 같습니다. G71에는 총 18 개의 사이트가 있습니다. 그런 다음 단일 시트의 시트 식별은 100000000000000000000000000의 18 비트 길이의 이진 문자열로 표시 될 수 있습니다. 각 숫자는 사이트를 나타냅니다. 매일 티켓을 발행하기 전에 아래 티켓 목록으로 초기화됩니다. 데이터는 다음과 같습니다. 나머지 티켓은 좌석 식별의 0 수를 기준으로 나머지 티켓의 최대 수를 결정합니다.
티켓 예약 양식의 원산지 제한 사이트 및 종료 제한 사이트는 유연하게 일치 할 수 있습니다 (이는 판매중인 제한된 사이트를 달성 할 수 있습니다)
2. 나머지 티켓을 쿼리하십시오
우리가 G71 2 등석 좌석 F 시트 티켓을 쿼리하려면 East Station (3)까지 Shaoguan Station (15)까지의 원래 스테이션에서 좌석 티켓을 쿼리하려면 다음 SQL 만 실행하면됩니다 (이 SQL은 좌석 선택 및 자동차 선택의 기능을 실현할 수 있습니다).
안내, 기차 번호, 기차 유형, 좌석 유형, 캐리지 번호, 시트 코드, 티켓 목록에서 좌석 위치를 선택하십시오.
여기서 to_number (서브 스트링 (좌석 마크, 3, 15)) = 0
그리고 출발 날짜 = '2016-06-11'
열차 번호 코드 = 'G71'
및 기판 (제한된 스테이션 시작, 3, 4) = 1
및 기판 (마지막으로 제한된 스테이션에 도착, 15, 16) = 1
및 티켓 상태 = '판매용'
그리고 기차 유형 = '2 등석'
그리고 좌석 위치 = 'f'
3. 티켓 예약
3.1 두 번째 단계에서 쿼리 조건에 따라 레코드를 얻고 티켓 상태를 잠그십시오.
3.2 잠금이 성공한 후에 지불됩니다
3.2 결제가 성공한 후, Baoding에서 Shaoguan (0001111111111111000)으로의 티켓은 원래 티켓으로 0으로 표시되고 티켓 상태는 판매를 위해 변경됩니다.
100000000000000000000 | 000111111111111000 = 100111111111111100 이시기에 나머지 티켓 로고는 동적 남은 티켓입니다.
3.3 지정된 시간이 지불되지 않으면이 기록의 티켓 상태를 판매로 복원 할 수 있습니다.
10011111111111111100^00011111111111111000 = 1000000000000000000000000000000000000000000000 나머지 티켓을 자동으로 복원하여 시간으로 복원했습니다.
4. 환불 티켓
Baoding에서 Shaoguan (000111111111111000)까지 티켓을 얻고 해당 비 기능을 얻은 다음 티켓 풀로 돌아갈 수 있습니다.
다음은 관련 Java 코드입니다
import java.math.bigdecimal; public class maintest {public static void main (String [] args) {String ticketflag = ""; int beginstation =; int endstation =; long begintime = system.currenttimillis (); String result = OrderTicket (TicketFlag, beginstation, endstation); {system.out.println ( "구독 실패");} else {System.out.println ( "예약 후 결과 :" + 결과); // 취소하려면, string b = buildTicket (ticketflag.length (), system.out.out.out.out.out.lengthation (tictingflag, intocticket); "); System.CurrentTimeMillis (); System.out.println ( "시간 소비 :" + (endtime -begintime));}/*** 티켓 예약** @param ticketflag* @param endstation* @return*/private static string orderticket (문자열 티켓 플래그, int intstation, int intstation) {string result = "; (CheckCanticket (ticketflag, seginstation, endstation)) {String b = buildTicket (ticketflag.length (), beginstation, endstation); 문자열 currentTicked = toticket (ticketflag, b); system.out.println ( " + ticketflag);" + ticketflag); report = recense; 티켓** @param ticketflag* @param b* @return*/private static string releaseTicket (String TicketFlag, String B) {StringBuilder tempst = new StringBuilder ( ""); int 길이 = ticketflag.length (); int i =; i <longth; i ++) {char tempa = ticketflag.carat (i); (tempa == ''&& tempb == '')) {tempst.append ( "");} else {tempst.append (tempa);}} return tempst.toString ();}/*** 구간 Place Holder** @param 길이* @param beginstation* @param endstation*/private String (Intatic String) endStation) {StringBuilder st = new StringBuilder ( ""); for (int i =; i <length; i ++) {if (i> = beginstation && i <endstation) {st.append ( "");} else {st.append ( "");}}}}}}}}}}}}}}}}}; 예약 후 st.tostring ();}/*** 결과** @param ticketflag* @param b* @return*/private static string toticket (string tictatic string toticket, String b) {stringbuilder tempst = new StringBuilder ( ""); int longth = ticketflag.length (); for (int i =; i <++) {char tempa = charat. tempb = b.charat (i); if (tempa == ''|| tempb == '') {tempst.append ( "");} else {tempst.append (tempa);}} return tempst.toString ();}/*** 책 티켓*/사유* @param tacttation* @paramAmattation* @paramAmAmaMtation* @paramAmaMtation 부울 checkCanticket (String TicketFlag, int beginstation, int endstation) {boolean result = false; string tempticket = ticketflag.substring (beginstation, endstation); bigdecimal b = new bigdecimal (tempticket);