Friday free to do nothing, based on an analysis of the 12306 ticketing algorithm (Java version) theory, the Java coding practice for your readers reference (the following is a brief description of the relevant code)
1. Booking tool category
1.1 The ticket information of the initialization of a train compartment
/**
* Generate Ticket information
* *
@param train
* * @return/public
static list<ticket> Initticketlist (Train Train) {
list<ticket> result = new arraylist<ticket> ();
map<string, integer> seatmap = Train.getseattotalnum ();
For (entry<string, integer> entry:seatMap.entrySet ()) {
int ticketsize = Entry.getvalue ();
String TicketType = Entry.getkey ();
for (int i = 0; i < ticketsize i++) {
int salechannel = (int) (Math.random () *)% 8;
Ticket Ticket = new Ticket ();
Ticket.setsalechannel (Salechannel);
Ticket.settickettype (TicketType);
Ticket.setguid (Uuid.randomuuid (). toString ());
Ticket.setfromdate (Train.getfromdate ());
Ticket.setticketflag (Commonutil.initticketflag (train));
Ticket.settrainno (Train.gettrainno ());
Result.add (ticket);
}
return result;
}
1.2 Build site Purchase tickets (for example, shift can be like the 1th Station 1, the second station ' 10 ' here Returns the decimal)
/** *
Create
* @param i
* @param stationnum
* @return * * Public
static String buidticket (int i, int st Ationnum) {
BigInteger temp = new BigInteger ("0");
for (int j = i; J < Stationnum; J +) {
temp = temp.or (New BigInteger (Buidticket (j)));
}
return Temp.shiftright (1). toString ();
1.3 Booking Main program, only one ticket at a time (a=a| B
/** * According to the selection of the corresponding train * @param ticketstr * @param ticketlist * @param condition * @return/public static order Createorde Rbycondition (String ticketstr,list<ticket> ticketlist,map condition) {order Temporder = null; for (Ticket ticket:t
icketlist) {BigInteger toticket = new BigInteger (TICKETSTR);
BigInteger fromticket = new BigInteger (Ticket.getticketflag ()); If you can book a ticket, take a long time to deduct the inventory &&//(Ticket.getsalechannel () = = (Ticket.getsalechannel () |1)) if (Canticket Fromticket, Toticket) &&ticket.gettickettype (). Equals (Condition.get ("TicketType"). ToString ())//&& ( Ticket.getsalechannel () = = (Ticket.getsalechannel ())) {Temporder = New Order (); Temporder.setorderid (
Uuid.randomuuid (). toString ());
Temporder.setseattype (Ticket.gettickettype ());
Temporder.setticketflag (Toticket.tostring ());
Temporder.settrainno (Ticket.gettrainno ());
Temporder.setfromdate (Ticket.getfromdate ());
Temporder.setsalechannel (Ticket.getsalechannel ());
Temporder.setticketguid (Ticket.getguid ()); TicKet.setticketflag (Fromticket.or (toticket). toString ());
Break
} return Temporder; }
1.4 Judge whether the stamp, a=~ (~a| B
/**
* Booking decision can be booked
*
* @param fromticket
* @param toticket
* @return * *
private static Boolean Canticket (BigInteger fromticket, BigInteger toticket) {return
fromticket.equals (Fromticket.not (). or ( Toticket). not ());
2. Order entity (keep the necessary order information)
Package com.train.ticket; /** * @author Guo_zhifeng * * * * * * * * * */public class Order {private string orderId; private string ticketguid;//ticket ID Priva Te string ticketflag;//booking token private string seattype;//seat type private string fromdate;//departure date private string trainno;//train number PR ivate int salechannel;//Sales channel public String Getorderid () {return orderId;} public void Setorderid (string orderId) {this.
OrderId = orderId; Public String Getticketguid () {return ticketguid.} public void Setticketguid (String ticketguid) {this.ticketguid = Ti
Cketguid; Public String Getticketflag () {return ticketflag.} public void Setticketflag (String ticketflag) {This.ticketflag = Ti
Cketflag;
Public String Getseattype () {return seattype.} public void Setseattype (String seattype) {this.seattype = Seattype;} Public String Getfromdate () {return fromdate.} public void Setfromdate (String fromdate) {this.fromdate = fromdate;} p Ublic string Gettrainno () {return trainno.} public void Settrainno (string trainNO) {This.trainno = trainno} public int Getsalechannel () {return salechannel;} public void Setsalechannel (int salecha Nnel) {this.salechannel = Salechannel;}}
3. Ticket entities (keep the necessary ticket information)
package com.train.ticket;/** * Ticket entity * @author Guo_zhifeng * * * * public class Ticket {private St
Ring Ticketflag;
Private String TicketType;
private int salechannel;
Private String Trainno;
Private String GUID; Private string fromdate;//Departure date public string GetGuid () {return GUID:} public void SetGuid (String guid) {this.guid = GUI
D Public String Gettrainno () {return trainno.} public void Settrainno (String trainno) {This.trainno = Trainno; String Getticketflag () {return ticketflag.} public void Setticketflag (string ticketflag) {This.ticketflag = Ticketflag
; Public String Gettickettype () {return tickettype.} public void Settickettype (String tickettype) {this.tickettype = Ti
Ckettype; public int Getsalechannel () {return salechannel.} public void Setsalechannel (int salechannel) {This.salechannel = Sal
Echannel;
Public String Getfromdate () {return fromdate.} public void Setfromdate (String fromdate) {this.fromdate = FromDate;} }
4. Train initialization information (main information only)
Package com.train.ticket;
Import Java.util.Map;
/**
* Information on a particular train
@author Guo_zhifeng * * */Public
class Train {
private String trainno;//train number
private int stationnum;//Station number private
map<string, integer> seattotalnum;//the number of various seats
private String FromDate;
Public String Getfromdate () {return
fromdate;
}
public void Setfromdate (String fromdate) {
this.fromdate = fromdate;
}
Public String Gettrainno () {return
trainno;
}
public void Settrainno (String trainno) {
This.trainno = Trainno;
}
public int Getstationnum () {return
stationnum;
}
public void Setstationnum (int stationnum) {
this.stationnum = stationnum;
}
Public map<string, Integer> Getseattotalnum () {return
seattotalnum;
}
public void Setseattotalnum (map<string, integer> seattotalnum) {
this.seattotalnum = seattotalnum;
}
}
5. Main program
5.1 Initialization of a train compartment
5.2 In accordance with the form of purchase tickets by station, the maximum is AB BC CD DE ef and so on
5.3 Output Time consuming
Package com.train.main;
Import Java.io.File;
Import Java.math.BigDecimal;
Import Java.math.BigInteger;
Import java.util.ArrayList;
Import Java.util.HashMap;
Import java.util.List;
Import Java.util.Map;
Import Com.train.ticket.Order;
Import Com.train.ticket.Ticket;
Import Com.train.ticket.Train;
Import Com.train.util.CommonUtil; public class Maintest {public static void main (string[] args) {Train Train = new Train (); Train.settrainno ("SA");
Setfromdate ("//");
Train.setstationnum ();
map<string, integer> seatmap = new hashmap<string, integer> ();
Seatmap.put ("Business seat");
Seatmap.put ("first-class seat");
Seatmap.put ("Second-class seat",);
Train.setseattotalnum (SEATMAP);
Generate Bill System.out.println ("The ticket in the initialization Train");
list<ticket> ticketlist = commonutil.initticketlist (train);
String fileName = "D:\\result.txt";
File F = new file (fileName);
if (f.exists ()) F.delete ();
Long starttime = System.currenttimemillis ();
int i =; for (Ticket ticket:ticketlist) {//Commonutil.appendmethoda (FileName,// i + "| |" + COMMONUTIL.TOJSON (ticket) + "\ n", true);
i++;
System.out.println ("Start booking");
Long begintime = System.currenttimemillis ();
list<order> Orderresult = new arraylist<order> (); for (int j =; J < Train.getstationnum ()-; J +) {String ticketstr = Commonutil.buidticket (j);//string ticketstr = C
Ommonutil.buidticket (, Train.getstationnum ());
System.exit ();
list<order> Templistorder = commonutil.createorderlist (Ticketstr, ticketlist, train);
Orderresult.addall (Templistorder);
Long endtime = System.currenttimemillis ();
SYSTEM.OUT.PRINTLN ("booking completed");
int m =; for (Ticket ticket:ticketlist) {//String temp = m + "| |" + commonutil.tojson (Ticket) + ",";////System.out.printl
N (temp);
Commonutil.appendmethoda (FileName, temp, true);
m++;
}//int k =; for (order Order:orderresult) {//String temp = Order.getorderid ()//+ "| |" + order.getsalechannel ()//+ "| |" + Order.getfromdate ()//+ "| |" + order.getseattype ()//+ "| |" + ORDER. Getticketguid ()//+ "| |" + order.gettrainno ()//+ "| |" + order.getticketflag ()//+ "| |" + NEW BigInteger (order.gettic
Ketflag ()). ToString ()//+ "| |" +K;
Commonutil.appendmethoda (Filename,temp, true);
k++;
Long eedtime = System.currenttimemillis (); SYSTEM.OUT.PRINTLN ("Generate Order" + orderresult.size () + "| |
Time consuming: "+ (Endtime-begintime) +" millisecond "); System.out.println ("Number of documents generated per second (ticket-by-book)" + New BigDecimal (Orderresult.size ()). Multiply (new BigDecimal ()). Divide (new
BigDecimal (Endtime-begintime), Bigdecimal.round_half_down));
System.out.println ("execution completed"); }
}
6. Operating Results
The above is a small series to introduce Java code practice 12306 ticketing Algorithm (ii), I hope to help you!