简单线程实例(铁路售票模拟)

      这个是自己猜测的铁路售票售票算法,实际怎么操作的,我母鸡啊。      

     好多次想写点什么,但每次都是被懒惰打败,今天鼓起勇气。希望各位大佬轻捶。当然,不是完整版,后续还有补充,不是完整版,后续补充,不是完整版,后续补充。重要的事情说三遍。哈哈,好了不说了,上代码

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;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值