公交车管理系统
公交车运营管理系统

广西大学数据库课程设计题目:公交车运营管理系统专业: 信息管理与信息系统班级: 2011级小组号: 7小组成员:目录第1章需求分析 (1)第2章系统功能结构图 (2)第3章数据库设计 (3)3.1系统ER图 (3)3.2关系模式设计 (3)第4章数据字典 (5)4.1数据项 (5)4.2数据存储条目 (15)第5章数据库实现 (20)5.1数据表 (20)5.2存储过程 (24)5.2.1失物表的增删查改.......................................... 错误!未定义书签。
5.2.2领取表的增删查改.......................................... 错误!未定义书签。
5.2.3领取人表的增删查改...................................... 错误!未定义书签。
5.2.4拾到表增删查改.............................................. 错误!未定义书签。
5.2.5站点表增删查改.............................................. 错误!未定义书签。
5.2.6司机表增删查改.............................................. 错误!未定义书签。
5.2.7投诉表增删查改.............................................. 错误!未定义书签。
5.2.8驾驶表增删查改.............................................. 错误!未定义书签。
5.2.9收到表增删查改.............................................. 错误!未定义书签。
5.2.10公交车表增删查改........................................ 错误!未定义书签。
智慧城市建设中的公共交通管理系统

智慧城市建设中的公共交通管理系统随着城市化过程的不断推进,城市内部的各种资源得到了更好的利用和管理。
然而,城市化带来的营商环境、居住环境和出行环境等问题也越来越突出,尤其是出行环境问题的解决十分紧迫。
智慧城市建设就是解决这些问题的一个重要手段之一,而公共交通管理系统是智慧城市建设的重要组成部分之一。
公共交通管理系统可以帮助城市管理者有效提高居民出行的效率和体验,使得城市的交通更加有序,更加安全,更加快捷。
下面就从智慧城市建设的角度出发,分析公共交通管理系统的作用及其未来发展。
一、公共交通管理系统的作用公共交通管理系统中包含许多模块,例如出租车GPS定位调度系统、公交线路管理系统、公交车辆调度系统等。
这些子系统有着各自的功能,但是它们共同构成了一个完整的公共交通管理系统,协同工作,为居民出行提供更好的服务。
在这个系统中,GPS定位调度子系统可以帮助出租车司机和出租车公司有效地管理出租车、优化调度,从而提供更加高效和便捷的服务。
在某些情况下,还可以利用数据挖掘等技术,对运营情况进行分析和优化。
公交线路管理系统可以根据公交车路线、车次、车辆载客量等数据,预测公交车的未来状态,优化公交线路,以满足不同时间段和不同区域的出行需求。
公交线路管理系统还可以根据预测结果进行调度,从而减少公交车的停等时间,提高公交车的运营效率。
公交车辆调度系统可以根据公交车事实位置和乘客人数等数据,对公交车的调度进行优化和管理。
通过对行车路线、行车速度等数据进行分析,公交车辆调度系统还可以提供最佳路线建议。
在紧急情况下,公交车辆调度系统还可以帮助公交车司机快速反应和做出决策。
二、公共交通管理系统的未来发展随着科技的不断推进和人们对出行体验的不断提升,公共交通管理系统将会发生许多变化和改善。
下面就从技术和政策两个角度,分析公共交通管理系统未来的发展方向。
技术发展方向:先进的技术将是未来公共交通管理系统的发展重点,其中包括以下几个方面:1.大数据技术公共交通管理系统需要处理大量的数据,例如公交车行车状态、乘客需求等。
智能公交车管理系统功能需求-

智能公交车管理系统功能需求-(1)引言智能公交车管理系统是指通过现代科技手段来对公交车运营进行监管和优化的升级版公交车管理系统。
该系统将包括一系列的事件监控、远程控制和自动化驾驶等功能。
本篇文档是该系统设计过程中对功能需求的初步规划,旨在指导系统开发过程中的功能开发。
业务需求本系统的主要业务需求是对公交车的日常运营进行全方位的监管并对其进行调度和优化。
主要目标如下:1.实现对公交车的车辆监测管理,包括车辆状态和GPS定位等;2.实现对空车和满载车的识别,通过接入的视频监控技术实现;3.实现对车辆的调度和管理,包括计划性调度和紧急情况下的调度;4.实现对公交车运营数据的统计和分析,辅助决策者对公交车运营的优化。
功能需求本系统主要以后台管理为中心,以下是系统的具体功能需求:1.车辆管理1.监测车辆的实时状态,包括车速、运行状态、空载或满载状态等;2.实时获取GPS的定位信息,提供对车辆行驶路线和位置的在线跟踪和监控;3.可以通过后台管理系统来查询车辆的运行历史和运行状态,并对车辆故障进行处理。
2.事件监控1.提供对车辆驾驶员操作的监控,包括司机的实时行驶数据和行驶行为分析;2.可以实时通过视频监控摄像头对车内情况进行监控;3.自动化生成车载监控录像和视频截图,并将其长期保存到服务器中进行备份。
3.车辆调度1.提供计划性的调度服务,能够通过调度策略优化公交车的运营效率;2.客流调度,能够贴近实际的乘车需求,自动根据客流状况进行调度和优化;3.能够快速响应紧急情况下的调度请求,例如路线堵塞、车辆故障等状况。
4.运营分析1.提供对公交运营数据的收集、汇总和统计分析,该分析数据包括但不限于:客流量、设备运行时间时间、车排名、运行速度等;2.可以实现对数据报表生成,对数据进行在线查询和统计分析;3.通过“可视化”工具呈现数据,辅助决策者对公交车运营的优化。
总结该智能公交车管理系统设计时,主要解决公交车管理者在车辆管理、事件监控、车辆调度等方面的各类需求。
智慧公交管理系统设计方案设计方案

智慧公交管理系统设计方案设计方案设计方案:智慧公交管理系统概述:智慧公交管理系统是一种利用现代信息技术手段对公共交通运输进行智能化管理的系统。
通过该系统,可以实现对公交车辆、车辆运行状况和乘客的实时监控,提高公交运输的效率和服务质量。
一、系统架构设计1.硬件架构:系统包括服务器、公交车辆设备以及乘客终端设备。
服务器用于接收和处理公交车辆和乘客终端上报的数据,公交车辆设备用于采集车辆运行信息,乘客终端设备用于提供乘客服务。
2.软件架构:系统软件包括数据采集、数据处理、数据存储和用户界面四个模块。
数据采集模块负责采集公交车辆和乘客终端上报的数据,数据处理模块对采集的数据进行处理和分析,数据存储模块负责存储处理后的数据,用户界面模块提供给公交管理人员和乘客使用的界面。
二、系统功能设计1.车辆调度功能:通过智慧公交管理系统,可以实现对公交车辆的实时调度和监控。
系统可以根据车辆的实时位置和预计到达时间,对车辆进行优化的调度,提高公交运输的效率和准确性。
2.乘客服务功能:系统可以为乘客提供实时公交车辆到站信息,以及乘车路线推荐等服务。
乘客可以通过乘客终端设备查询公交车辆的位置和到站时间,避免长时间等候。
3.车辆监控功能:系统可以对公交车辆的运行状态进行实时监控。
监控数据包括车辆的位置、车速、行驶路线等。
管理人员可以通过系统实时监控车辆的运行状况,及时发现故障和异常情况,提供及时的维修和保养。
4.数据分析和统计功能:系统可以对公交运输数据进行分析和统计,生成各类报表和图表。
通过对数据的分析和统计,可以发现公交运输中存在的问题,并提出改进措施。
三、系统实施步骤1.系统需求分析和设计:对智慧公交管理系统的功能需求进行分析,并设计系统的硬件和软件架构。
2.系统开发和测试:根据设计方案,进行系统的开发和单元测试。
确保系统的功能正常运行和稳定性。
3.系统部署和调试:将系统部署到公交车辆和乘客终端设备上,并进行系统的整体测试和调试。
公交系统中的信息管理系统

公交系统中的信息管理系统——智能公交车辆调度系统【摘要】简单介绍公交系统中常见的信息管理系统及其功能,并对智能公交车辆调度系统的系统结构、工作流程、工作方式、系统功能等进行介绍,以加深大家对智能公交车辆调度系统的了解。
【关键词】智能公交车辆调度信息系统结构流程公交系统中的信息管理系统是按部门和操作者的权限来控制功能模块的访问和操作,把信息数据建立在数据服务器的大型数据库中,通过客户/服务器的数据访问方式,部门工作站用各部门的实用子管理系统建立各部门的信息数据记录,对已输入的记录可进行有条件的快速查询的信息系统。
公交系统中常见的信息管理系统包括以下子系统:营运和统计信息管理系统,智能公交车辆调度系统,物资材料管理系统,车辆维护保修管理系统,公交车报站系统,公交监控系统,中国城市公交信息查询系统,广告媒体播放显示管理系统等。
以下是公交系统中各个子系统功能的详细说明1、营运和统计信息管理系统公交公司的主营业务是营运,这里将营运管理和综合统计放在一个子系统中,就是因为二者密不可分的关系,营运管理和综合统计组成一个信息数据环流,这一环流运行在公交的信息网络中,系统和管理信息由集团公司下行到分公司,再到路队;路队的营运和统计数据上行到分公司,再到集团公司;集团根据以往的统计结果和技术发展方向,结合公司的整体发展规划制订下一步的管理运营计划,启动新的一轮循环。
营运和统计信息管理系统分为三个独立的子系统,它们是集团公司营运统计管理系统、分公司营运统计管理系统和路队营运统计管理系统,三个独立的子系统都包括系统管理、营运管理和综合统计的功能。
2、物资材料管理系统物资材料管理系统是为公交集团的物资管理公司提供信息服务的系统。
物资材料管理系统包括:物资档案管理、物资采购入库管理、物资库存管理、物资领用出库管理、物资财务管理。
该系统的应用,对于用户解决企业管理系统数据收集准确性问题,提高企业信息化水平,全面提高企业管理效率,降低整体管理费用有很大的帮助。
智能公交管理系统

智能公交管理系统简介智能公交管理系统是一种基于现代化科技手段的新型公交管理工具,旨在提高公交运营效率,优化公交路线,提供便捷的乘车服务。
本文将介绍智能公交管理系统的基本功能和特点。
功能特点实时定位和监控智能公交管理系统可以实时追踪和监控公交车辆的位置,通过GPS定位技术和地图显示,管理人员可以随时了解公交车辆的准确位置和行驶轨迹。
这不仅可以方便调度中心的工作人员做出实时的决策,还可以提供给乘客精确的车辆到达时间,提升用户体验。
自动调度优化通过智能算法分析和预测公交车辆的运力需求和交通流量情况,智能公交管理系统可以智能调度车辆,优化公交线路和班次安排,提高运营效率。
系统可以根据实时交通情况,合理安排车辆的出发时间和路线,减少公交车辆的拥堵和延误,减少乘客的等待时间。
乘客信息管理智能公交管理系统可以管理乘客的基本信息和乘车记录,包括乘车时间、乘车地点等信息。
通过统计和分析这些数据,可以了解乘客的出行偏好和乘车需求,为公交线路的优化提供参考。
同时,系统还可以方便地查询和统计乘车人数,提供给相关部门的决策依据。
财务管理智能公交管理系统还可以实现公交车辆的财务管理。
系统可以记录和管理车辆的油耗、维修费用、保险费用等财务数据,方便财务部门进行成本控制和管理。
数据分析和报告生成智能公交管理系统可以对各类数据进行统计和分析,生成相关的报告和分析结果。
通过数据分析,可以发现公交线路的瓶颈和改进空间,优化车辆调度和路线安排。
同时,报告生成功能可以方便地输出各类统计数据,为管理决策提供支持。
结语智能公交管理系统是一个集智能调度、乘客信息管理、财务管理和数据分析为一体的综合性系统。
通过运用现代化科技手段,该系统可以提高公交运营的效率,优化公交线路,提供更便捷的乘车服务。
相信随着科技的不断进步和发展,智能公交管理系统将在未来得到广泛应用,并给人们的出行带来更多便利和舒适。
公交系统中的信息管理系统

公交系统中的信息管理系统在当今快节奏的城市生活中,公交系统扮演着至关重要的角色。
它不仅是人们日常出行的主要方式之一,也是城市交通体系的重要组成部分。
而在公交系统的高效运行背后,信息管理系统发挥着不可或缺的作用。
公交信息管理系统涵盖了从车辆调度、线路规划到乘客服务等多个方面。
首先,车辆调度是公交运营的核心环节之一。
通过信息管理系统,公交公司可以实时掌握每辆公交车的位置、行驶速度和载客情况。
这使得调度员能够根据实际需求,灵活调配车辆,确保公交服务的及时性和稳定性。
比如,在高峰时段增加车辆投入,以满足乘客的出行需求;在低峰时段则适当减少车辆,降低运营成本。
线路规划也是信息管理系统的重要功能之一。
系统可以收集和分析大量的交通数据,包括不同区域的人口密度、出行需求以及道路状况等。
基于这些数据,公交公司能够设计出更加合理和优化的线路,提高公交的覆盖范围和服务质量。
例如,对于新建的居民小区或商业区,及时规划新的公交线路,以方便居民出行。
在乘客服务方面,信息管理系统也带来了显著的改善。
现在,很多城市的公交站台都配备了电子站牌,通过与信息管理系统的连接,实时显示公交车的预计到达时间。
乘客可以提前了解车辆的到达情况,合理安排自己的出行时间,减少等待的焦虑。
此外,一些城市还推出了手机应用程序,乘客可以通过手机查询公交线路、车辆实时位置以及换乘信息等,极大地提高了出行的便利性。
公交信息管理系统还在票务管理方面发挥着重要作用。
传统的纸质车票逐渐被电子车票所取代,如公交卡、手机支付等。
这些电子支付方式不仅方便了乘客,也提高了票务管理的效率和准确性。
信息管理系统能够实时记录票务交易数据,为公交公司的财务核算和运营分析提供支持。
同时,信息管理系统有助于提高公交系统的安全性。
系统可以对车辆的运行状态进行实时监控,包括车辆的机械故障、驾驶员的操作行为等。
一旦发现异常情况,能够及时发出警报并采取相应的措施,保障乘客的生命财产安全。
然而,要实现一个高效、可靠的公交信息管理系统并非易事。
公共交通管理信息系统的设计与实现

公共交通管理信息系统的设计与实现随着城市化进程的加速,交通拥堵问题越来越严重,公共交通的重要性逐渐凸显。
为了提高公共交通的管理效率和乘客出行体验,很多城市引入了公共交通管理信息系统。
本文将介绍这一系统的设计与实现。
一、需求分析公共交通管理信息系统的设计,首先要进行需求分析,明确系统所需要解决的具体问题。
通常,公共交通信息管理系统的主要需求如下:1. 实时监测和管理车辆,包括车辆的位置、状态、运行速度和运行轨迹等信息,以保障公共交通的正常运营和安全。
2. 提供实时乘客信息,包括乘客的上下车记录、站点积压情况、延误情况等信息,以帮助公交公司制定优化的运行计划和车辆调度方案。
3. 提供实时路况信息,包括道路拥堵情况、交通事故等信息,以帮助公交公司避免运营风险和制定更加精准的运营计划。
4. 提供便捷、智能的乘客服务,包括实时车辆位置查询、车辆到站预警、票价查询和购票等服务,以提高乘客出行体验和满意度。
5. 提供有效的数据分析和商业模式创新服务,包括乘客出行渠道分析、乘客行为跟踪分析、乘客需求预测等服务,以帮助公交公司优化资源配置和提高经济效益。
二、系统架构设计在进行具体的系统设计之前,需要确定公共交通管理信息系统的总体架构。
它通常包括以下几个核心组成部分:1. 车载终端设备,用于采集车辆位置、状态和乘客数量等信息,并通过无线网络上传至调度中心。
2. 调度中心,用于实时监测和管理车辆,包括车辆的运行状态、路线计划、调度指令等。
3. 乘客终端设备,包括智能手机APP、公交岛屿在线等终端设备,用于提供实时车辆查询、票价查询和购票等乘客服务。
4. 数据处理中心,用于处理、存储和分析采集到的大量实时数据,并提供数据分析和商业模式创新服务。
在系统架构设计阶段,需要根据具体需求进行灵活的组合、扩展和改进,以确保公共交通管理信息系统具有高效、灵活、智能和可扩展等特点。
三、技术实现在公共交通管理信息系统的技术实现方面,需要考虑以下几个关键技术:1. 定位技术:公共交通车辆的定位是信息系统的核心功能之一,需要采用可靠、高精度、低成本的定位技术,如GPS、北斗等技术。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
燕山大学课程设计说明书名称:操作系统OS题目:公交车上司机与售货员协调工作模拟班级:07级计算机开发小组:三剑客课题负责人:张浩课题组成员:张浩李康张晓玉姓名学号班级自评成绩张浩0701******** 07应用2班 A 李康0701******** 07软件3班 B 张晓玉0701******** 07软件3班 B 开发日期:2010年1月11日-15日1概述计算机操作系统是计算机系统中最不可缺少的,最常用的软件,也是核心的,最接近于计算机硬件的软件。
其特点是内容繁多,概念抽象,因此造成理解困难,掌握不易。
本软件的主要目的是通过直观的演示,使学生能够感性的明白掌握多道程序及其进程同步和互斥的程序设计的基本方法。
1.1基本功能利用多线程同步技术模拟公交车系统,实现司机与售票员的同步与互斥关系,即开车时不允许开门,开门时不允许开车,实现每个乘客一个线程同步互斥的上下车。
每站随即生成上下车人数,上下车线程实行,先下后上原则。
到终点站后,可以统计本次出车的载客人数。
1.2开发计划第一步,进行问题分析,确定需要解决的问题;第二步,进行整体构思与框架设计;第三步,查阅资料,分析所需要设计的程序算法;第四步,进行各种算法及各个细节编码的详细设计;第五步,进行代码调试,修改程序中的错误;第六步,整理总结书写报告,进行答辩。
1.3人员分工张浩:分析构架,核心代码编写;李康:用户界面设计,辅助代码编写,调试;张晓玉:功能测试、书写实验报告。
1.4 开发环境及开发工具本程序是以在windows XP下用Netbeans和jdk搭建的平台上,以Java 作为开发语言进行编写的。
使用的开发工具:netbeans.NetBeans 平台直接提供了应用程序的常见需求,如菜单、文档管理和设置。
“NetBeans”构建应用程序是指,仅提供NetBeans 平台尚不包含的应用程序部分,而不是从头开始编写应用程序。
在开发周期结束时,可以将应用程序与NetBeans 平台捆绑在一起,从而节省了很多时间和精力,并且构建的应用程序稳定可靠。
使用的开发语言:java.Java是一种简单的、面向对象的、分布式的、解释的、键壮的、安全的、结构的中立的、可移植的、性能很优异的多线程的、动态的语言。
其特点主要有:平台无关性、健壮性、面向对象、安全性、分布式。
1.5使用的基本概念和原理多道程序:用户所提交的作业都先存放在外存中并排成一个队列,成为“后备队列”;然后,由作业调度程序按一定的算法由后被队列中选择若干个作业调入内存,使它们共享CPU和系统中的各种资源。
进程:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
线程:操作系统用来调度、分派的最小单位。
同步和互斥:临界段:临界段对象通过提供所有线程必须共享的对象来控制线程。
只有拥有临界段对象的线程才可以访问保护资源(进行临界区操作)。
在另一个线程可以获取对象的访问权。
用户应用程序可能会使用临界对象来阻止两个线程同时访问共享的资源发文件等。
互斥量:互斥量的工作方式和临界段非常相似,其区别在于互斥量不公保护一个进程内的资源共享,而且还保护系统中进程之间的共享资源。
它是通过为互斥量提供一个“互斥量名”来进行进程间资源共享协调的。
事件:事件对象用于给线程传递信号,指示线程中特定的操作可以开始或结束。
除非线程已经收到了这个事件信号,否则它将一直处于挂起状态。
当事件对象进入其信号状态时,正在等待该事件的线程就可以开始执行。
例如,一个应用程序可以通过事件来通知线程它需要的数据已经准备好。
经常利用事件进行线程之间的通信。
信号量:信号量与互斥相似,但是互斥只允许在同一时刻一个线程访问它的数据,而信号量允许多个线程在同一时刻访问它的数据。
WIN32 不知道哪一个线程拥有信号量,它只保证信号量使用的资源计数正确的设置。
2需求分析协调司机和售票员以及乘客在运行与开关门以及上下车时的关系,实现同步互斥,避免发生不必要的冲突,节省了时间空间资源。
本程序显示上下车人数,并显示车上总人数,使车内人数不超过总座位数。
最终,利用统计功能,显示此次公交车运行的各种参数:车次、总站数、总载客数。
3总体设计基本的技术路线:面向对象;软件的总体结构:分为可视化界面以及后台数据执行;内部模块关系:司机类与售票员类同步互斥,上车类与下车类同步互斥;总体流程:停车-开门-下车-上车-关门-开车;需要创建的进程线程:主窗口线程、司机线程、售票员线程、上车乘客线程、下车乘客线程。
流程图如下:4详细设计Wait(),notify(),实现进程的等待和唤醒。
BusJFrame()创建主窗口,Driver()和Conductor()分别创建司机和售票员线程,PassengerOn()创建上车线程,PassengerOff()创建下称线程。
确定要设计的过程、构件、类、对象、函数和它们的参数,要给出具体的名称和参数及其解释。
由Driver类调用BusState类的stopCar()和runCar()方法,由Conductor 类调用BusState类的openDoor()和closeDoor()方法,实现同步互斥。
由PassengerOn类调用Seat类的takeOn()和hasOn()方法,由PassengerOff类调用Seat类的takeOff()和hasOff()方法,实现上下车线程的同步和互斥5编码设计5.1开发环境的设置和建立首先安装JDK,如下图:然后安装Netbeans,并关联JDK:5.2程序设计过程只需要注意的事项实现同步互斥的方法应成对出现,防止出现死锁状态;互斥信号应定义清晰,以用于互斥方法的实现;线程的创建和指针传递清晰明确,用于线程之间的交互。
5.3关键构件和插件的使用Netbeans的使用与一般编程软件接近,但是它包含了很多强大的插件,利用其中的插件我们可以简单的实现很多复杂的功能,例如在本次试验中恶我们程序的可视化窗口的建立就是利用如下组建实现的。
5.4主要程序的代码设计及注释BusState类主要源代码:public class BusState {public static boolean doorClosed=false;public static boolean busStopped=true;//获取输出框指针private static JTextArea bSay;public static void getBusSay(JTextArea b){bSay=b;}//获取输出框指针public synchronized void stopBus(){busStopped=true;bSay.setText("车已停");this.notify();}public synchronized void runBus() throws InterruptedException {while(!doorClosed){this.wait();busStopped=false;}}public synchronized void closeDoor(){doorClosed=true;bSay.setText("门已关");this.notify();}public synchronized void openDoor() throws InterruptedException {while(!busStopped){this.wait();doorClosed=false;}}}package ysu;import java.util.logging.Level;import java.util.logging.Logger;Conductor类的主要源代码:public class Conductor extends Thread{//获取主窗口指针private static BusJFrame bj;public static void getBusJFrame(BusJFrame b) {bj=b;}//获取BusState类的指针private static BusState bState;public static void getBusState(BusState b){bState=b;}//获得一个Driver进程类的指针private static Driver dr;public static void getDriver(Driver d){dr=d;}//用于创建On和Off类private void createOn(){Thread a=new PassengerOn();a.start();}private void createOff(){Thread b=new PassengerOff();b.start();}private boolean timeToQuit=false;private int station=0;public static boolean finish=false;public void run(){while(!timeToQuit){try {bState.openDoor();bj.busSay.setText("门已开");Thread.sleep(1000);bj.busSay.setText(null);bj.conductorSay.setText("请抓紧时间上下车");Thread.sleep(2000);bj.conductorSay.setText(null);bj.busSay.setText("开始上下车");Thread.sleep(2000);bj.busSay.setText(null);Seat.doorAvailable=true;if(Seat.willOn>(Seat.seatRemain+Seat.willOff)){Seat.canOn=Seat.seatRemain+Seat.willOff;}else{Seat.canOn=Seat.willOn;}//统计本次出车载客人次数Seat.totalPassenger=Seat.totalPassenger+Seat.canOn;//创建上下车乘客的进程for(int i=0;i<Seat.willOff;i++){createOff();}for(int i=0;i<Seat.canOn;i++){createOn();}if(Seat.canOn==0&&Seat.willOff==0){finish=true;}else{finish=false;//等待上下车完成}while(!finish){Thread.sleep(100);}if(Seat.canOn<Seat.willOn){bj.busSay.setText("很抱歉\n本车已满\n欢迎乘坐下班客车");Thread.sleep(2000);}Seat.doorAvailable=false;Seat.hasOn=0;//清零,防止出现累加Seat.hasOff=0;bj.busSay.setText("上下车完毕");bj.seatRemain.setText(""+Seat.seatRemain);bj.seatUsed.setText(""+Seat.seatUsed);station++;if(station>Seat.totalStation){timeToQuit=true;Driver.timeToQuit=true;break;}Thread.sleep(2000);bj.busSay.setText(null);bj.conductorSay.setText("关门了");Thread.sleep(2000);bj.conductorSay.setText(null);bState.closeDoor();Thread.sleep(1000);} catch (InterruptedException ex) {Logger.getLogger(Conductor.class.getName()).log(Level.SEVERE, null, ex);}try {Thread.sleep(200);} catch (InterruptedException ex) {Logger.getLogger(Conductor.class.getName()).log(Level.SEVERE, null, ex);}}bj.conductorSay.setText("终点站到了\n谢谢乘坐本车\n再见");bj.willOff.setText(""+0);bj.willOn.setText(""+0);BusJFrame.sumrizeAvailable=true;dr.stop();}}/** To change this template, choose Tools | Templates * and open the template in the editor.*/package ysu;import java.util.logging.Level;import java.util.logging.Logger;Driver类主要源代码:public class Driver extends Thread{//获取主窗口指针private static BusJFrame bj;public static void getBusJFrame(BusJFrame b){bj=b;}//获取BusState类的指针private static BusState bState;public static void getBusState(BusState b){bState=b;}//获取BusState类的指针public static boolean timeToQuit=false;public void run(){while(!timeToQuit){try {bState.runBus();Thread.sleep(1000);bj.driverSay.setText("出发");bj.nowNextSation.setText("下一站");bj.nextStation.setText("第"+(++Seat.nextStation)+"站");int a=(int)(Math.random()*10);//下车人数不能多于车上已有的人if(Seat.seatUsed<a){Seat.willOff=Seat.seatUsed;}else{Seat.willOff=a;}//提前创建下一站要下车的人数if(Seat.nextStation==Seat.totalStation){Seat.willOn=0;Seat.willOff=Seat.seatUsed;}else{Seat.willOn=(int)(Math.random()*10);//生成上车的人数}bj.willOff.setText(""+Seat.willOff);bj.willOn.setText(""+Seat.willOn);bj.busSay.setText(null);Thread.sleep(2000);bj.driverSay.setText(null);bj.busSay.setText("客车行驶中");Thread.sleep(3000);bj.busSay.setText(null);bj.driverSay.setText("到站了");bj.nowNextSation.setText("本站");Thread.sleep(1000);bj.driverSay.setText(null);bj.busSay.setText("车已停");Thread.sleep(1000);bState.stopBus();Thread.sleep(1000);} catch (InterruptedException ex) {Logger.getLogger(Driver.class.getName()).log(Level.SEVERE, null, ex);}}}}Seat类的主要源代码:/** To change this template, choose Tools | Templates* and open the template in the editor.*/package ysu;/**** @author Administrator*/public class Seat {public static int totalStation=4;public static int totalPassenger=0; public static int totalSeat=30;public static int stationName=10;public static int busName=30;public static int seatTotal=30;public static int seatRemain=30;public static int seatUsed=0;public static int willOff=0;public static int willOn=0;public static int canOn=0;public static int hasOn=0;public static int hasOff=0;public static int nextStation=0;public static boolean doorAvailable=true; public static void reset(){totalStation=12;totalPassenger=0;totalSeat=30;stationName=0;busName=30;seatTotal=30;seatRemain=30;seatUsed=0;willOff=0;willOn=0;canOn=0;hasOn=0;hasOff=0;nextStation=0;doorAvailable=true;}public synchronized void takeOn() throws InterruptedException {while(!doorAvailable||hasOff<willOff){this.wait();}doorAvailable=false;hasOn++;seatUsed++;seatRemain--;}public synchronized void takeOff() throws InterruptedException {while(!doorAvailable){this.wait();}doorAvailable=false;hasOff++;seatUsed--;seatRemain++;}public synchronized void hasOff(){doorAvailable=true;this.notifyAll();if(Seat.hasOff==Seat.willOff&&Seat.canOn==0){Conductor.finish=true;}}public synchronized void hasOn(){doorAvailable=true;this.notifyAll();if(Seat.hasOn==Seat.canOn){Conductor.finish=true;}}}PassengerOn类的主要源代码如下:/** To change this template, choose Tools | Templates * and open the template in the editor.*/package ysu;import java.util.logging.Level;import java.util.logging.Logger;/**** @author Administrator*/public class PassengerOn extends Thread{//获得Seat类的指针private static Seat seat;public static void getSeat(Seat s){seat=s;}//获取主窗口指针private static BusJFrame bj;public static void getBusJFrame(BusJFrame b){bj=b;}@Overridepublic void run(){try {Thread.sleep(100);} catch (InterruptedException ex) {Logger.getLogger(PassengerOn.class.getName()).log(Level.SEVERE, null, ex);}try {seat.takeOn();} catch (InterruptedException ex) {Logger.getLogger(PassengerOn.class.getName()).log(Level.SEVERE, null, ex);}bj.busSay.append("第"+Seat.hasOn+"人已经上车\n");bj.seatUsed.setText(""+Seat.seatUsed);bj.seatRemain.setText(""+Seat.seatRemain);bj.willOn.setText(""+(Seat.canOn-Seat.hasOn));bj.willOff.setText(""+(Seat.willOff-Seat.hasOff));try {Thread.sleep(2000);} catch (InterruptedException ex) {Logger.getLogger(PassengerOn.class.getName()).log(Level.SEVERE, null, ex);}seat.hasOn();}}PassengerOff类的主要源代码如下:/** To change this template, choose Tools | Templates * and open the template in the editor.*/package ysu;import java.util.logging.Level;import java.util.logging.Logger;/**** @author Administrator*/public class PassengerOff extends Thread{//获得Seat类的指针private static Seat seat;public static void getSeat(Seat s){seat=s;}//获取主窗口指针private static BusJFrame bj;public static void getBusJFrame(BusJFrame b){bj=b;}@Overridepublic void run(){try {Thread.sleep(100);} catch (InterruptedException ex) {Logger.getLogger(PassengerOff.class.getName()).log(Level.SEVERE, null, ex);}try {seat.takeOff();} catch (InterruptedException ex) {Logger.getLogger(PassengerOff.class.getName()).log(Level.SEVERE, null, ex);}bj.busSay.append("第"+Seat.hasOff+"人已经下车\n");bj.seatUsed.setText(""+Seat.seatUsed);bj.seatRemain.setText(""+Seat.seatRemain);bj.willOn.setText(""+(Seat.canOn-Seat.hasOn));bj.willOff.setText(""+(Seat.willOff-Seat.hasOff));try {Thread.sleep(2000);} catch (InterruptedException ex) {Logger.getLogger(PassengerOff.class.getName()).log(Level.SEVERE, null, ex);}seat.hasOff();}}5.5解决的技术难点、经常犯的错误理清司机与售票员之间的同步互斥关系和用于实现互斥的变量和放法,理清上下车乘客的同步互斥关系的变量与方法,确定司机、售票员、上下车乘客同步互斥变量;出现的错误有:互斥变量的使用,设计的位置不当,实现同步互斥的方法位置不当,最初的逻辑构架关系不对,以上错误经认真斟酌、校验,均已解决。