这个是自己猜测的铁路售票售票算法,实际怎么操作的,我母鸡啊。
好多次想写点什么,但每次都是被懒惰打败,今天鼓起勇气。希望各位大佬轻捶。当然,不是完整版,后续还有补充,不是完整版,后续补充,不是完整版,后续补充。重要的事情说三遍。哈哈,好了不说了,上代码
package ThredTest;import java.util.ArrayList;
import java.util.List;
/**
* @fileName:test.java
* @packageName:ThredTest
* @descripation:模拟12306售票的流程 登录: 查询 ; 预定;支付;返回;
* @author: zhanglei
* @date :2018年5月11日 下午3:36:14
* @version :1.0
*/
public class test {
//登录
private boolean login(String name,String password){
boolean sign = false;
if(name.equals("zhangsan") || password.equals("zhangsan")){
sign =true;
}
return false;
}
//开始流程
public static void main(String[] args) {
source s =new source();
//买票 可以多线程
for(int i=0 ;i<10;i++){
new thread("呼和浩特","集宁").run();
}
//查询开始结束区间站的余量
System.out.println(s.ceTicker("呼和浩特","集宁"));
//查询全部站的余票
List<data> list =s.checkTicker();
for (data data : list) {
System.out.print(data.getStartTicker() + "------->");
System.out.println(data.getTickerNm());
}
}
}
//购票
class thread implements Runnable {
private String startTicker=null;
private String endTicker=null;
public thread(String startTicker,String endTicker){
this.startTicker = startTicker;
this.endTicker = endTicker;
}
@Override
public void run() {
int start =0;
int end =0;
for(int i =0 ;i<source.ticke.size();i++){
if(source.ticke.get(i).getStartTicker().equals(startTicker)){
start = i;
}else if(source.ticke.get(i).getStartTicker().equals(endTicker)){
end= i;
}
}
while(start <= end){
data d =new data();
d.setStartTicker(source.ticke.get(start).getStartTicker());
int num =source.ticke.get(start).getTickerNm();
d.setTickerNm(num =num -1 );
System.out.println(d.getTickerNm());
synchronized (source.ticke) {
source.ticke.set(start, d);
}
start ++;
}
}
}
//车票信息
class source {
public static String ticker = "K275";//火车车次
public static int tickerNm = 1000;//容量
public static List<String> list =null;//车辆途经站
public static String date = "052400";//发车时间
public static String l = "010000"; //时长
public static List<data> ticke =null;//车辆途经站
public source(){
list = new ArrayList<String>();
list.add("呼和浩特");
list.add("集宁");
list.add("大同");
list.add("石家庄");
list.add("北京");
list.add("天津");
getTicker();
}
//初始化各车站剩余票
public List<data> getTicker(){
ticke = new ArrayList<data>();
for(int i = 0;i<list.size();i++){
data d =new data();
d.setStartTicker(list.get(i));
d.setTickerNm(1000);
ticke.add(d);
}
return ticke;
}
//查票
public List<data> checkTicker(){
return ticke;
}
//查询当前起始站的票数余量
public int ceTicker(String startTicker,String endTicker){
int start =0;
int end =0;
int result = 99999;
for(int i =0 ;i<source.ticke.size();i++){
if(source.ticke.get(i).getStartTicker().equals(startTicker)){
start = i;
}else if(source.ticke.get(i).getStartTicker().equals(endTicker)){
end= i;
}
}
while(start <= end){
int num =source.ticke.get(start).getTickerNm();
if(num < result){
result = num;
}
start ++;
}
return result;
}
//退票
public List<data> resetTicker(String startTicker,String endTicker){
return ticke;
}
}
//购票信息
class data{
public String startTicker;
public int tickerNm;
public String getStartTicker() {
return startTicker;
}
public void setStartTicker(String startTicker) {
this.startTicker = startTicker;
}
public int getTickerNm() {
return tickerNm;
}
public void setTickerNm(int tickerNm) {
this.tickerNm = tickerNm;
}
}