ImageVerifierCode 换一换
格式:DOC , 页数:14 ,大小:73KB ,
资源ID:859752      下载积分:20 积分
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 微信支付   
验证码:   换一换

加入VIP,免费下载资源
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【http://www.wodocx.com/d-859752.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(模拟售票系统java编程.doc)为本站会员(精***)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(发送邮件至2622162128@qq.com或直接QQ联系客服),我们立即给予删除!

模拟售票系统java编程.doc

1、/*项目:用多线程设计一个模拟火车站售票大厅的工作情形。问题描述:火车站有许多售票窗口,有些开放,有些不开放。顾客进入火车站售票厅后,到某个售票窗口排队等候,排到了就办理业务,然后离去。如图2.1所示。*/*共有五个类:*SimulateRailwayStation:具体运行主类;*RailwayStation:火车站售票大厅类*Agent类:代表火车站售票窗口类;*Customer类:顾客类;*List类:存储类*/import java.util.Date;import java.awt.*;import java.awt.event.*;public class SimulateRail

2、wayStation 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=

3、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(关闭售票窗

4、口); /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 Railw

5、ayStation(); /建立窗体适配器,能关闭窗口 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 FlowLay

6、out(); /在面板中添加按钮 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(); setL

7、ayout(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.getSou

8、rce()=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 imp

9、lements Runnable /定义售票窗口数组Agent protected Agent agent=new AgentSimulateRailwayStation.NUM_AGANTS; protected Label labelAgent=new LabelSimulateRailwayStation.NUM_AGANTS; protected Label labelQueue=new Label(正在等待的顾客数:0); protected Label labelServed=new Label(已经服务的顾客数:0); /定义可以进行售票服务的窗口 protected int n

10、umAgents=SimulateRailwayStation.NUM_INITIAL_AGANTS; /定义存放已服务过的顾客数 public static int numCustomerServered=0; private Thread thread=null; public RailwayStation() setup(各窗口实时状态显示:); /显示各售票窗口的实时工作状态 private void setup(String title) /定义售票窗口的工作状态面板 Panel agentPanel=new Panel(); agentPanel.setLayout(new Gri

11、dLayout(SimulateRailwayStation.NUM_AGANTS,1); /各售票窗口的工作状态 for(int i=0;iSimulateRailwayStation.NUM_AGANTS;i+) if(inumAgents) labelAgenti=new Label(窗口+(i+1)+:空闲中.); agentPanel.add(labelAgenti); /实例化售票窗口 agenti=new Agent(i); /售票窗口开始售票服务 agenti.start(); else labelAgenti=new Label(窗口+(i+1)+:暂停服务!); agent

12、Panel.add(labelAgenti); /定义顾客候票情况面板 Panel otherPanel=new Panel(); otherPanel.setLayout(new GridLayout(2,1); otherPanel.add(labelQueue); otherPanel.add(labelServed); setLayout(new BorderLayout(); /显示各售票窗口的工作状态安排在下部 add(South,agentPanel); /显示顾客候票状况安排在中部 add(Center,otherPanel); /显示调用本方法 setup()的参数安排在上部

13、 add(North,new Label(title); /开始工作 public void start() if(thread=null) thread =new Thread(this); /启动线程 thread.start(); /线程,调用显示实时售票状况的updateDisplay()方法 public void run() while (true) this.updateDisplay(); /实时处理售票的状况 public void updateDisplay() /定义在本窗口等候的顾客数 int totalSize=0; /对可以服务的窗口进行循环 for(int i=0

14、;i0) labelAgenti.setText(s+agenti.getCusOfQueue()+正在等待); else labelAgenti.setText(s); else labelAgenti.setText(窗口+(i+1)+:空闲中.); for(int i=numAgents;iSimulateRailwayStation.NUM_AGANTS;i+) labelAgenti.setText(窗口+(i+1)+:暂停服务!); labelQueue.setText(正在等待的顾客数:+totalSize); labelServed.setText(已经服务的顾客数:+numC

15、ustomerServered); /火车站售票窗口关闭 public void stop() thread=null; for(int i=0;inumAgents;i+) /停止售票服务 agenti.halt(); /添加窗口 public void addAgent() if(numAgents1) agentnumAgents-1.halt(); numAgents-; /接待顾客的方法 public void generateCustomer() /所有工作窗口的队列中,至少有一个顾客在排队时为真. boolean allAgentQueueHasOne=true; /* 如果所有

16、正在工作窗口的队列中至少有一个顾客在排队, 就把新顾客添加到队列最少的那个队. 否则,就把顾客添加到没有业务处理的窗口中. */ /对可以服务的窗口进行循环 for(int i=0;inumAgents;i+) /如果本窗口队列中没有顾客 if(agenti.getCusCountOfQueue()=0 & agenti.getCIdOfHandling()=0) /添加新顾客 agenti.joinNewCustomer(new Customer(); allAgentQueueHasOne=false; break; /如果所有工作窗口都有顾客在等候 if(allAgentQueueHas

17、One) /定义变量index存放最少等候顾客数的窗口编号 int index=0; /对可以服务的窗口进行循环 for(int i=0;inumAgents;i+) if(agenti.getCusCountOfQueue()0) Customer c=(Customer)customersofqueue.get(0); customersofqueue.delete(0); return c; else return null; /本窗口已办理业务的顾客数 public int getCusCountOfHandled() return numCustomers; /本窗口已办理业务的顾客

18、列表 public String getCusOfHandled() if(customersofhandled.getSize()0) StringBuffer sbuf=new StringBuffer(); sbuf.append(顾客); for(int i=0;i0) StringBuffer sbuf=new StringBuffer(); sbuf.append(Customer); for(int i=0;i0) customersofqueue.delete(customersofqueue.getSize()-1); /顾客办理完业务离去 public void relea

19、seCustomer(Customer c) numCustomers+; customersofhandled.add(c); /本窗口在不断的处理业务 public void run() while (running) try thread.sleep(int)(Math.random()*SimulateRailwayStation.MAX_NO_CUSTOMERS)+1000); Customer customer=requestCustomerFor();/获得服务的顾客 if(customer!=null) handlingCId=customer.getCustomerId();

20、/获得顾客ID /办理业务时间:主要是询问等 thread.sleep(int)(Math.random()*SimulateRailwayStation.BUSINESS_DELAY)/2); synchronized(this) /检索对应的票务信息 for(int i=0;iSimulateRailwayStation.train_num.length;i+) if(customer.getCustomerWilling()=i+1) SimulateRailwayStation.ticketsi-;/对应票数减一 /办理业务时间:打印票、交钱等 thread.sleep(int)(Ma

21、th.random()*SimulateRailwayStation.BUSINESS_DELAY)/2); releaseCustomer(customer);/顾客办理后离开。 RailwayStation.numCustomerServered+=1;/服务顾客数+1 else handlingCId=0; catch(InterruptedException ie) System.out.println(Teller Exception: +ie); /*顾客类*/class Customer /顾客开始排队的时间 private Date created; /顾客ID,每个顾客都有唯

22、一的ID,不能重复 private static int cId; /顾客购买票务的意愿,比如去哪里,班次等. private int customerwilling=0; public Customer() /顾客进入车站时就已经想好了买什么票,并且是火车站能够提供的. customerwilling=(int)(Math.random()*10+1); created=new Date(); +cId; System.out.print(new Customer+cId+,); /获得顾客ID public int getCustomerId() return cId; /获得顾客买票意愿

23、 public int getCustomerWilling() return customerwilling; /获得顾客从进入火车站到离开窗口的时间 public long getWaitTime(Date now) return now.getTime()-created.getTime(); /*构造一个队列容器,每个服务的窗口都有一个,顾客总是先进入这个队列容器后,再进行窗口的业务处理.*/class List/定义队列最大容量:100人 private int maxItems=100; private int numItems=0; private int ID=-1; private Object list=null; public List() list=new ObjectmaxItems; public List(int maxItems) this.maxItems=maxItems; list=new Objectthis.maxItems; /在队列中增加顾客 public void add(Object obj) listnumItems+=obj; /在有人离开队列 public void delete(int pos) for(int i=pos+1;i=maxItems);

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922