模拟火车站售票的情形,有些显示问题。对多线程感兴趣的同志进来看看。
最近学了JAVA的多线程,想编一个模拟火车站售票的JAVA程序,但是总是在实时显示每个售票窗口的队列时有很大的错误(就是人多,需要排队的时候,每个顾客的ID总是显示相同),不知如何解决?望高手指教。
思路:火车站有许多售票窗口,有些开放,有些不开放。顾客进入火车站售票厅后,到某个售票先排队,排到了就办理业务,然后离去。
为了好控制,用按钮来增加顾客,由人自己来做添加。
代码如下:
/*模拟火车站售票的情形
分五个类:
SimulateRailwayStation:是具体运行类;
RailwayStation:火车站类
Agent类:代表火车站售票窗口类;
Customer类:顾客类;
List类:存储类
*/
import java.util.Date;
import java.awt.*;
import java.awt.event.*;
public class SimulateRailwayStation extends Frame implements ActionListener
{
protected static final int NUM_AGANTS=10;//表示火车站有10个售票窗口
protected static final int NUM_INITIAL_AGANTS=6;//表示目前正在售票的窗口6个
protected static final int BUSINESS_DELAY=6000;//表示每个窗口办理售票业务的时间
protected static final int MAX_TRAIN_NUM=10;//表示有10辆火车的座位可以出售
protected static final int MAX_NO_CUSTOMERS=200;//表示每个窗口从一个顾客完成到下一个顾客开始的时间间隔
private Button addcus=new Button("添加顾客");//定义按钮,手动添加顾客。
private Button delcus=new Button("顾客离去");//定义按钮,模拟顾客自己离开
private Button addagent=new Button("增加售票窗口");//定义按钮,增加售票窗口
private Button delagent=new Button("关闭售票窗口");//定义按钮,关闭售票窗口
//10辆火车班次的信息
protected static String[] train_num={"南京->北京,46次","南京->上海,34次","南京->福州,231次","南京->杭州,65次","南京->武汉,112次","南京->成都,77次","南京->天津,21次","南京->徐州,134次","南京->乌鲁目齐,335次","南京->合肥,456次"};
//与上面的信息对应的每辆火车的票务信息
protected static int[] tickets={50,70,50,50,50,120,60,100,50,50};
private RailwayStation railwaystation=new RailwayStation();
private class WindowCloser extends WindowAdapter
{
public void windowClosing(WindowEvent we)
{
railwaystation.stop();
System.exit(0);
}
}
public SimulateRailwayStation()
{
super("Simulation RailwayStation");
Panel buttons=new Panel();
buttons.setLayout(new FlowLayout());
buttons.add(addcus);addcus.addActionListener(this);
buttons.add(delcus);delcus.addActionListener(this);
buttons.add(addagent);addagent.addActionListener(this);
buttons.add(delagent);delagent.addActionListener(this);
addWindowListener(new WindowCloser());
setLayout(new BorderLayout());
add("North",railwaystation);
add("South",buttons);
setSize(500,200);
validate();
pack();show();
railwaystation.start();
}
public void actionPerformed(ActionEvent ae)
{
if(ae.getSource()==addcus)
{
railwaystation.generateCustomer();
}
else if(ae.getSource()==delcus)
{
//暂时未实现
}
else if(ae.getSource()==addagent)
{
//暂时未实现
}
else if(ae.getSource()==delagent)
{
//暂时未实现
}
}
public static void main(String[] args)
{
SimulateRailwayStation smlt=new SimulateRailwayStation();
}
}