模拟售票系统java编程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*

项目:用多线程设计一个模拟火车站售票大厅的工作情形。

问题描述:火车站有许多售票窗口,有些开放,有些不开放。顾客进入火车站售票厅后,到某个售票窗口排队等候,排到了就办理业务,然后离去。如图2.1所示。

*/

/*

*共有五个类:

*SimulateRailwayStation:具体运行主类;

*RailwayStation:火车站售票大厅类

*Agent类:代表火车站售票窗口类;

*Customer类:顾客类;

*List类:存储类

*/

import java.util.Date;

import java.awt.*;

import java.awt.event.*;

public class SimulateRailwayStation extends Frame implements ActionListener

{

//预设火车站售票大厅有10个售票窗口

protected static final int NUM_AGANTS=10;

//预设目前正在售票的窗口为6个

protected static final int NUM_INITIAL_AGANTS=6;

//设置每个窗口办理售票业务的时间

protected static final int BUSINESS_DELAY=6000;

//设置有10辆火车的座位可以出售

protected static final int MAX_TRAIN_NUM=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);

buttons.add(delcus);

buttons.add(addagent);

buttons.add(delagent);

//对按钮设置监听

addcus.addActionListener(this);

delcus.addActionListener(this);

addagent.addActionListener(this);

delagent.addActionListener(this);

//对窗体适配器设置监听

addWindowListener(new WindowCloser());

setLayout(new BorderLayout());

add("North",railwaystation);

add("South",buttons);

setSize(500,200);

validate();

pack();

show();

//调用火车站售票大厅类的start()方法,开始售票工作

railwaystation.start();

}

public void actionPerformed(ActionEvent ae)

{

if(ae.getSource()==addcus)

{

//新增顾客

railwaystation.generateCustomer();

}

else if(ae.getSource()==delcus)

{

}

else if(ae.getSource()==addagent)

{

//增加售票窗口

railwaystation.addAgent();

}

else if(ae.getSource()==delagent)

{

//关闭服务窗口

railwaystation.retireAgent();

}

}

public static void main(String[] args)

{

SimulateRailwayStation smlt=new SimulateRailwayStation();

}

}

/* 火车站售票大厅类 */

class RailwayStation extends Panel implements Runnable

{

//定义售票窗口数组Agent[]

protected Agent[] agent=new Agent[SimulateRailwayStation.NUM_AGANTS];

protected Label[] labelAgent=new Label[SimulateRailwayStation.NUM_AGANTS]; protected Label labelQueue=new Label("正在等待的顾客数:0");

protected Label labelServed=new Label("已经服务的顾客数:0");

//定义可以进行售票服务的窗口

protected int numAgents=SimulateRailwayStation.NUM_INITIAL_AGANTS;

//定义存放已服务过的顾客数

public static int numCustomerServered=0;

private Thread thread=null;

相关文档
最新文档