版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JAVA 实验(2)课程名称:Java面向对象程序设计 学 院:管 理 学 院 专业班级:信息管理与信息系统)(班 学 号:3108006406名:任课教师:2010年05月26日管 理 学院 信息管理与信息系统专业 08信管6班 组学号3108006406姓名张钟权协作者 教师评定实验题目模拟售票系统程序一、实验目的与要求(1)实验目的:通过线程和多线程的学习,设计一个模拟火车站售票大厅 的工作情形,加深对线程和多线程的了解。(2)实验要求:按照Java程序设计教程的要求完成第二章中模拟火车站售 票系统程序的编写和调试。二、实验方案I、SimulateRailwayStation 类:Mai
2、n()方法:程序入口;SimulateRailwayStation()方法:安排界面布局;actionPerformed()方法:按钮动作事件,调用“火车站售票大厅类” RailwayStation 的 generateCustomer()方法,模拟售票工作情形。II、RailwayStation 类:RailwayStation()方法:构造函数;generateCustomer()方法:接待新增顾客排队处理策略;addAgent()方法:添加售票窗口;run()方法:线程,调用updateDisplay()方法;updateDisplay()方法:实时处理售票业务或等待客户;setup()
3、方法:售票窗口处于空闲或暂停服务。III、Agent 类:Agent()方法:售票窗口编号;joinNewCustomer ()方法:在本窗口的队列中添加新顾客;releaseCustomer()方法:记录顾客办理完业务离去人数;getCusOfQueue()方法:读取本窗口的队列的顾客列表;run()方法:线程,本窗口处理业务。IV、Customer 类:Customer()方法:顾客取得编号。V、List 类:List()方法:顾客按队列结构排队。三、实验结果和数据处理1、RailwayStation类:火车站售票大厅类/*火车站售票大厅类*/class RailwayStation ex
4、tends Panel implements 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”);定义可以进行售票服务的窗口protec
5、ted int numAgents=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(newGridLa
6、yout(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();elselabelAgenti=new Label(窗口 ”+(i+1)+:暂停服务!);agentPanel.add(labe
7、lAgenti);定义顾客候票情况面板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()的参数安排在上部 add(North”,new Label(title)
8、;/开始工作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;i0)labelAgenti.setText(s+agenti.getCusOfQueue()
9、+正在等待”);elselabelAgenti.setText(s);elselabelAgenti.setText(窗口”+(i+1)+”:空闲中.);for(int i=numAgents;iSimulateRailwayStation.NUM_AGANTS;i+)labelAgenti.setText(窗口 ”+(i+1)+:暂停服务!);labelQueue.setText(正在等待的顾客数:+totalSize);labelServed.setText(已经服务的顾客数:+numCustomerServered);/火车站售票窗口关闭public void stop()thread=
10、null;for(int i=0;inumAgents;i+)/停止售票服务agenti.halt();添加窗口public void addAgent()if(numAgents1)agentnumAgents-1.halt();numAgents-;接待顾客的方法public void generateCustomer()/所有工作窗口的队列中,至少有一个顾客在排队时为真.boolean allAgentQueueHasOne=true;/*如果所有正在工作窗口的队列中至少有一个顾客在排队,就把新顾客添加到队列最少的那个队.否则,就把顾客添加到没有业务处理的窗口中.*/对可以服务的窗口进行
11、循环for(int i=0;inumAgents;i+)/如果本窗口队列中没有顾客if(agenti.getCusCountOfQueue()=0 & agenti.getCIdOfHandling()=0)/添加新顾客agenti.joinNewCustomer(new Customer();allAgentQueueHasOne=false;break;/如果所有工作窗口都有顾客在等候if(allAgentQueueHasOne)定义变量index存放最少等候顾客数的窗口编号int index=0;/对可以服务的窗口进行循环for(int i=0;inumAgents;i+) if(age
12、nti.getCusCountOfQueue()0)Customer c=(Customer)customersofqueue.get(0);customersofqueue.delete(0);return c;elsereturn null;本窗口已办理业务的顾客数public int getCusCountOfHandled()return numCustomers;本窗口已办理业务的顾客列表public String getCusOfHandled()if(customersofhandled.getSize()0)StringBuffer sbuf=new StringBuffer(
13、);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 releaseCustomer(Customer c)numCustomers+;customersofhandled.add(c);本窗口在不断的处理业务public void run()while (running)trythrea
14、d.sleep(int)(Math.random()*SimulateRailwayStation.MAX_NO_CUSTOMERS) + 1000);Customer customer=requestCustomerFor();/ 获得服务的顾客if(customer!=null)handlingCId=customer.getCustomerId();/ 获得顾客 ID办理业务时间:主要是询问等thread.sleep(int)(Math.random()*SimulateRailwayStation.BUSINESS_DELAY)/2) ;synchronized(this)/检索对应的
15、票务信息for(int i=0;iSimulateRailwayStation.train_num.length;i+)if(customer.getCustomerWilling()=i+1)SimulateRailwayStation.ticketsi-;/ 对应票数减一办理业务时间:打印票、交钱等thread.sleep(int)(Math.random()*SimulateRailwayStation.BUSINESS_DELAY)/2) ;releaseCustomer(customer);/ 顾客办理后离开。RailwayStation.numCustomerServered+=1
16、;/ 服务顾客数+1elsehandlingCId=0;catch(InterruptedException ie)System.out.println(Teller Exception: +ie);各置口实时状态显示:正在等待的顾客数:口已经服务的顾客数旧商口 空闲中.菌口 n空闲中.宣口女空闲中.宣口 4空闲中.窗口 5:空闲中.窗口 6:空闱中.窗口r暂停服荟!窗口 8:暂停服务!窗口 9:暂停服会! 窗口 1D:暂停服弦!匮现麾j|顾客离去|增加售票裂l=T| |关闭售票窗口 |各画口实时状态显示:正在等待的顾客数:口巳线服罟的顾客数:1 9窗口 1:空闲中.窗口卫:空闲中.窗口 3:
17、空闲中.窗口 4;空闲中窗口&空闲中.商口 E:空氐I中.窗口 7:哲停服外!置口 9皆停服务!商口W暂停服务!窗口 1 有停服余!圈鳗I顾客离去|增加售票盲口 |关闭售票窗云|各置口实时状态显示:正在等待的顾客数:口已经服蓉的顾客数:1 g有口任闲中.菌口 W:空闲中.宣口女空闲中.菌口 4空闲中.窗口 5:空抵I中.窗口 6:空闲中.窗口 了:空闲中.窗口 8:空闲中.窗口 9:空闲中.窗口 1。:暂停服务!海加顾客|顾客离去| !卸噜霎宣口|关闭售票窗云|各画口实时状态显示: 正在等待的顾客数:口 巳线服罟的顾客数:1 9 窗口 1:空闲中.窗口卫:空闲中.窗口 3:空闲中.窗口 4;暂
18、停服翦! 窗口&哲停服务! 商口 E:暂停服务! 窗口 7:哲停服外! 置口 9皆停服务! 商口W暂停服务! 窗口 1 有停服余! 加顾客|顾客离去|增加售票留口 |各有口实时状态显示:正在等待的顾客数 已经服蓉的顾客数宣口 1 正在办理顾容 41 Customer51,51,51,51.51,51,51 宣口W正在办理顿客51 CustomerSI ,51,51,51.51,51,51 宣口 M正 M50Customer51,51,51,51.51,51,51 菌口4皆停服务!窗口 9:暂停服驾! 窗口哈:暂停服荟! 窗口了:暂停服碧! 窗口 8:暂停服务! 窗口 9暂停服会! 窗口 1。:暂停服务陲垣夔|顾客离去I增加售票窗口 |关闭售理窗日四、结论本次实验,是模拟售票系统
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 药物微生物检定员安全生产基础知识能力考核试卷含答案
- 高分子防水卷材生产工变更管理知识考核试卷含答案
- 两栖类繁育工班组协作考核试卷含答案
- 化学铣切工班组建设模拟考核试卷含答案
- 扬声器装调工安全实践竞赛考核试卷含答案
- 圆珠笔制造工岗前基础实战考核试卷含答案
- 四年级数学下册第三单元第七课时《手拉手》教学设计
- 2025年辽宁省公需课学习-主要污染物总量减排监测办法
- 护理护理心理支持课件制作
- 2026年高标准农田建设中心招聘真题及参考答案
- 6.1.2 有性生殖(教学设计)生物新教材人教版八年级下册
- GB/T 46584-2025精细陶瓷界面恒定振幅下室温拉伸和剪切疲劳性能试验方法十字交叉法
- 程序员私人合同范本
- 截肢护理小讲课
- 2025年考研法硕(非法学)真题含答案解析
- 脑疝护理应急预案
- 学习与解读国家十五五规划
- 2025年内蒙化工单招考试题及答案
- 2025年重庆市公务员考试公安岗位专项卷
- 2025年学位英语山东题库及答案
- 《教育系统重大事故隐患判定指南》深度解读课件
评论
0/150
提交评论