第一篇:智能公交车管理系统功能需求
系统功能设计
1.1 GIS功能
GIS功能模块包括地图服务、地图管理、检索、车辆实时显示、车辆跟踪功能、轨迹绘制、距离计算功能。
GIS模块数据流序列图gis服务器客户端GPS数据接口线路数据接口地物数据接口车辆信息接口地图数据请求GPS数据请求单一或多个GPS数据地图数据线路数据请求线路数据地物数据请求地物数据车辆数据请求车辆数据
1.1.1 地图服务子功能
支持shpfile和BingMap两种地图格式,shpfile地图实现放大、缩小、移动、距离测量、面积测量、矩形查询、点选取、全视图、鹰眼地图。BingMap实现放大、缩小、移动功能。如图3.3。
GIS服务器获取地图数据地图shpfile和BingMap两种地图格式控件加载地图数据放大、缩小、移动、距离测量、面积测量、矩形查询、点选取、全视图、鹰眼地图地图类型shpfile地图功能BingMap功能放大、缩小、移动功能
图3.3
1.1.2 地图管理子功能
地图控制管理分为图层控制、注记设置、符号设置三方面功能,以便用户对于地图数据进行个性化配置.3.1.2.1 图层控制
图层控制功能又可细化为三方面功能:
(1)图层位置控制:包括图层上移、图层下移、图层置顶、图层置底。(2)图层显示控制:图层图例、图层比例尺、图层显示、鹰眼显示。(3)图层配置:加载图层、删除图层。
3.1.2.2 注记设置
注记设置功能,用户可设置注记显示、注记比例尺、注记字段、注记颜色和注记字体,并可预览注记样式。
3.1.2.3 符号设置
车辆显示设置,包括符号设置、名称属性设置两部分。可以根据车辆运行方向设定不同车辆符号。车辆名称可设置名称显示位置、显示字号、一般车辆、激活车辆等设置。
1.1.3 检索子功能
实现车辆检索、线路检索、地名检索。
(1)车辆检索:关键字模糊匹配线路列表中所有车辆,地图上闪烁显示所选择的在线车辆,掉线车辆显示最近有效位置。
(2)线路检索:画出线路,并通过线路关键字模糊匹配该线路中所有车辆,显示在列表中;地图上闪烁显示所选择的在线车辆,掉线车辆显示最近有效位置。
(3)地名检索:关键字模糊匹配所有地物,在地图上闪烁显示所选择的地物。
GIS地图所有检索功能支持关键字模糊查询。车辆检索线路检索地名检索车辆信息线路信息地物信息车辆信息接口线路信息接口地物信息接口
1.1.4 车辆实时监控子功能
根据 GPS 车载设备实时上传的数据包,结合电子地图,即可让用户快速、直观的确认车辆的地理位置,并可以根据业务需求,设置不同的监控类型。
车辆实时监控类型分为以下几类:
(1)实时监控:打开地图窗口,系统默认显示所有车辆;(2)单车监控:在地图窗口,只显示指定车辆;
(3)单线路监控:在地图窗口,显示指定线路所有车辆;(4)单分公司监控:在地图窗口,显示指定分公司所有车辆;
(5)自定义组监控:用户自定义指定车辆分组(可以跨线路、跨分公司),在地图窗口监控指定分组车辆;
GIS地图车辆实时监控车辆信息线路信息分公司信息自定义分组信息车辆信息接口线路信息接口分公司信息接口自定义分组信息接口
图3.4
1.1.5 车辆跟踪子功能
用户根据业务需要可以指定车辆为跟踪模式,则车辆始终在地图视野范围 内运营; 支持定时跟踪、定距跟踪、锁定车辆等跟踪方式。1.1.6 轨迹绘制子功能
在轨迹绘制的输出列表中显示历史轨迹数据,包括线路,车辆,时间,经纬度,速度,方位角,高度,方向,下一站,工号,是否超速。在 shpfile地图中,显示轨迹点(绿色),及轨迹点连线(蓝色);在 BingMap地图中,只显示轨迹点(红色)。绘制子功能包括:(1)实时绘制:绘制选择车辆的最近运行轨迹点,默认50(可修改)。(2)轨迹回放:设置时间范围,回放速度进行车辆轨迹回放。
其中轨迹回放支持支持跨天查询,回放时间段任意设置;系统支持一个车或多个车辆组合回放;轨迹回放速度可以设置。
1.1.7 距离计算子功能
计算车辆轨迹中任意两点间的轨迹距离。
1.2 监控功能
监控功能包括车辆监控列表,视频监控,语音监控三个子功能。
1.2.1 车辆监控列表子功能
车辆监控列表通过分组列表的形式展示所有车辆。
(1)集团、营运公司、分公司、线路分级显示车辆列表。(2)车辆列表包括车辆自编号和在线、离线状态。
(3)支持对单车辆调度和监控功能的调用。包括:车辆信息查询、视频监控、语音控制、历史视频获取、单车监控、显示轨迹、车辆跟踪、GPS公里、历史数据回放、自定义组监控、取消车辆监控、清除车辆轨迹。1.2.2 视频监控子功能
视频监控子功能分为视频实时监控和历史视频提取。其中视频实时监控数据不实时上传,只在发送指令时实时调取。
(1)视频实时监控:
多画面视频监控:最多支持 16 画面,并支持浮动窗口,视频画面可分为 1、4、8、9、12、16,画面布局可任意切换。
通道位置切换:多画面视频监控时,鼠标左键选中指定视频通道,可拖拽到其他视频通道上,实现通道位置切换。
单通道最大化显示:多画面视频监控时,鼠标双击左键,视频通道最大化显示,再双击鼠标左键,返回多画面布局。
图像抓拍:即指定视频通道截屏功能,可将视频截图保存到指定位置。 关闭:单个关闭指定视频通道。 全部关闭:关闭全部视频通道。
在视频中,可显示线路号、自编号和车牌号等信息。(2)历史视频提取:按照筛选条件提取。
1.2.3 音频监控子功能
音频监控子功能包括语音广播,语音通话和语音监听三个子模块。(1)语音广播:下发指令车载终端进行语音播报。如图所示。
(2)语音通话:调度可主动发起语音通话请求,实现调度和驾驶员双向语音通话。或输入请求的电话号码和拨号等待间隔,下发给 GPS 车载设备,GPS 车载设备自动回拨。实现集团、营运公司指挥中心与车辆进行通话。
(3)语音监听:分为主动监听和被动监听。
主动监听,即车上有紧急/危险情况,驾驶员上传请求监听指令,客户
端收到短信提醒,调度员可发送语音监听请求,监听车辆语音,及时了解车上情况。 被动监听,调度用户发送语音监听请求,监听车辆语音,及时了解车上情况。
图 语音广播
1.3 排班功能
排班功能模块主要包括运营计划管理、推班规则设置、系统自动排班。实现对某一线路公交车发车计划,车与司机、乘务员对应关系的确定。
1.3.1 运营计划管理子功能
制定某一线路公交车的发车计划(发车时间点和发车间隔等)。
(1)可通过excel模板导入线路运营计划,满足不同节假日类型营运计划管理。如图所示。(2)可通过软件设置时间区间及发车间隔,从而确定发车时间点。
1.3.2 推班功能设置子功能
1.3.3 自动排班子功能
(1)初始化人车配备表,即确定车辆和司机、乘务员的对应关系。人车配备表包括班次、车号、早班司机和乘务员、晚班司机和乘务员。
(2)设置排班日期和节假日标识,根据推班规则,自动生成排班计划。
1.4 车辆调度功能
车辆调度功能包括线路模拟调度,调度参数管理,实时调度三个子功能。
1.4.1 线路模拟调度子功能
通过直线和实际走向线路,实时显示车辆信息。该模块应包括以下信息:汽车位置、当前时间、配车台数、运营车辆数量、去行数、回行数、起始站车辆数、终点站车辆数;单个车辆的信息包括运行方向、车辆自编号、前一站、后一站、额定人数、车上人数、速度、驾驶员、终到时间、发车时间、GPS时间。
(1)直线模拟调度图
(2)实际走向模拟调度图
1.4.2 调度规则管理子功能
该功能实现对车辆调度参数的设置。支持多种调度规则的选择,包括刚性规则(是否匹配计划车)及灵活规则(进站出站、先进先出)。
(1)进站出站
例如:如果“停站时间”设置为“2分钟”,例如车辆“906615”于15:00到达本站,则该车辆进站后的调度发车时间为“15:00加上2分钟”,也就是“15:02”。
(2)先进先出
可以分时段进行先进先出的设置,表示在该时段范围内,先进站的车辆先出站。发车时间列表可手动修改。
1.4.3 实时调度子功能
实时调度子功能即实时调整发车业务,包括新增发车计划、修改运行方案、修改司乘、智能计算、调度计划下发。在实时调度界面上调用该子功能。
(1)新增发车计划和修改运行方案
在实时调度界面上可操作修改车辆的运营状态,修改发车时间点,下达空放、越站、车辆换向调度、手动发车终到指令,该调度指令通过短信下发到指定车载终端。
短信下发支持自定义短信功能:
空放和车辆换向的区别:根据线路实际调度情况,正确操作【空放】,该操作会产生相应的车次及公里信息;车辆从主站空放到副站,同时将该车的调度时间留给其它到站的车辆使用。根据车辆实际位置,正确操作【车辆换向】,该操作不会产生车次及公里信息,仅是车辆位置从主站调整到副站。
(2)修改司乘
司机换班操作可通过司机刷卡确认后系统自动处理,也可由调度人员手动更换,下发短信到指定车辆的车载终端。
(3)智能计算
根据配车数量智能计算发车间隔;大间隔告警时智能调度;车辆进入主副站时,智能计算越站站数,并发送短信至车载机。
(4)调度计划下发
调度员实时调整了发车时间后,服务器自动下发车辆发车计划到车载终端上,同时下发到线路调度屏上显示。
1.5 报警功能
报警功能主要包括安全报警,报警联动,异常信息记录三个子功能。
根据报警类型预设报警机制,实现车载设备自动提示功能,同时报警信息上传。当车辆报警时,可以在客户端以弹出窗口和声音的形式告警,同时可以通过一次点击观察到报警车辆的实时视频。
同时支持告警类型的灵活扩充与配置,平台端提供存储、统计查询、声光提醒(弹出窗口或固定滚动条,支持提示音的自定义配置)、告警联动等事件的灵活关联与绑定。
1.5.1 安全报警子功能
安全报警子功能为实时报警,包括违章报警、车机报警、司机紧急报警、网管报警。
(1)违章报警
当车辆运行违反规章标准时立即产生报警,包括超速、滞站、偏离线路、未按时发车、出现大间隔,并提供明细统计表。
(2)车机报警
包括车辆抛锚、投币机故障报警。
(3)司机紧急报警
当司机遇到危险情况时,按动紧急报警按钮,通过一键报警。(4)网管报警
监控中心发现车上有异常情况的时候,可以远程启动车辆的报警系统。
1.5.2 报警联动子功能
可以设置多个报警输入和输出端口,当报警产生时,根据报警种类的不同和预先设定的通知机制,同时或者分别通知监控中心和司机等相关人员和部门。
1.5.3 异常信息记录子功能
安全报警信息,以及票箱开关门信息、车辆离线信息需要记录,以供查询。
1.6 统计查询功能
统计查询功能主要包括营运报表查询、基础信息查询、运行信息查询、安全告警信息查询四个子功能。统计查询内容均能导出至文件和进行打印。
1.6.1 营运报表查询子功能
营运报表包括但不限于电子路单管理、行车调度日报明细表、线路营运月报表。
3.6.1.1 电子路单管理
电子路单管理包括路单查询、路单确认、路单补录、路单修改、路单删除操作。其中路单查询可以查询历史记录,路单补录、路单修改、路单删除只能对当天记录进行操作。
电子路单的信息包括车辆名称、司机名称、乘务名称、载客公里、加油公里、回场公里、包车公里、公里合计、GPS公里、快慢点次数、快慢点时间、机障名称、机障次数、起始时间、持续时间。可根据司机名称和车号名称进行筛选查询。
3.6.1.2 行车调度日报明细表
格式待定。
3.6.1.3 线路营运月报表
格式待定。
1.6.2 基础信息查询子功能
包括线路信息浏览、车辆信息浏览、站点信息浏览。
1.6.3 运行信息查询子功能
包括所有车辆的定位信息、到站信息、离站信息、上传短信、下发调度信息、车载机连接信息。
1.6.4 安全告警信息查询子功能
报警模块中的报警类型及异常信息均可查询。
1.7 运维管理功能
运维管理模块包括基础信息管理、报站文件管理、日志管理、时钟服务等子功能。
1.7.1 基础信息管理子功能
包括公司、线路、车辆、站点、设备、监控点、司机、乘务员信息的新增、修改、删除。
上图为车辆信息。公司、线路、设备等信息待定。
1.7.2 报站文件管理子功能
包括报站文件制作和远程升级。
3.7.2.1 报站文件制作
报站文件制作工具可以实现 GPS 车载设备报站文件制作功能。主要功能包括站点信息配置、服务用语配置、公共信息配置等功能。
3.7.2.2 远程报站文件升级
(1)支持远程站点信息配置、服务用语配置、限速设置、修改 IP 地址等功能。(2)支持升级车载终端软件、升级报站文件等功能。
(3)支持除配置文件(不包括注册车号等)从辆车中导出后,通过系统远程升级直接下发给其他车辆。
1.7.3 日志管理子功能
包括系统操作日志、报警日志、设备状态日志。
(1)操作日志:按照时间、操作人员、操作类型进行查询。
(2)报警日志:可按报警时间、车牌号码、报警区域、报警类型、处置人员等条件进行查询。
(3)设备状态日志:前端采集设备、服务器状态。
1.7.4 时钟管理子功能
在平台建立统一 NTP 时钟服务,各服务器或前端设备应以统一平台的时钟源为基准。统一 NTP 时钟服务以省厅的时钟服务为时钟源。各级系统校时周期应以实际要求为准,但至少每 24 小时校时一次,并有容错功能以避免设备或网络问题造成的局部校时错误。
1.7.5 数据字典管理子功能
为维护系统提供所需要的数据字典,使用户可以方便地对诸如车身颜色、号牌类型、号牌颜色、监控方向等交通参数进行定义。要能够根据数据字典类型和字典项目进行新增、修改、删除、查询等操作。
1.7.6 其他信息模块
系统配置、监控客户端软件的自动升级操作、监控点信息下载。
1.8 用户管理功能
用户管理功能包括用户组分级管理,角色管理,权限管理。其中用户应分组为集团、营运公司、分公司、线路四级,每个用户对应不同的角色,角色对应相应的权限。提供人机界面,完成用户的注册、注销、编辑、删除、密码修改、密码重置,角色和权限配置等操作。根据用户角色分配操作权限,确保用户只能在授权的计算机上使用。
1.8.1 用户组管理子功能
用户组分为集团、营运公司、分公司、线路四级。该模块完成用户操作的基本功能。(1)注册
输入:所属单位、账户名称、账户姓名、账户级别、帐户类别、账户组别。检查:校验账户名称是否已注册,若已注册提示相应信息。输出:注册成功。说明:
a)注册成功后,随机生成的账户密码和操作密码均为六位随机密码(数字+字母)。b)操作密码为使用监控目标控制功能的密码。(2)注销
输入:选择查询回显结果信息项后的“注销”。检查:提示是否确定注销。
输出:注销成功,并回到原来的账户查询回显界面。(3)修改密码
输入:账户原密码、新密码(两次);操作原密码、新密码(两次)。检查:校验输入的原密码是否正确;校验两次输入的新密码是否一致。输出:密码修改成功,并回到原来的账户查询回显界面。说明:账户使用者可修改自己的账户密码和操作密码。(4)密码重置
输入:选择查询回显结果信息项后的“密码重置”。
输出:密码重置成功,并回到原来的账户查询回显界面。说明: a)只有系统管理员和机构管理员具备该功能权限。
b)重置后的账户密码和操作密码均为六位随机密码(数字+字母)。
1.8.2 角色管理子功能
根据具体管理需要,自定义系统角色,为不同的角色分配不同权限,对于同一用户可以有不同角色。通过人机界面,方便新增角色、修改角色权限等操作。
1.8.3 权限管理子功能
系统支持数字证书权限认证的集成。可进行系统用户的添加、删除、修改、查询。通过角色和资源的授权对用户进行图像浏览、下载、操作区域等(不同角色对应的权限需要再确定)进行权限控制。系统通过管理角色和定义角色的权限来给具体用户分配权限。相同的角色拥有相同的权限,可以给系统用户分配不同角色来给定义其权限。
第二篇:公交车管理系统
燕山大学课程设计说明书
名称:操作系统OS
题目:公交车上司机与售货员协调工作模拟
班级:07级计算机 开发小组:三剑客 课题负责人:张浩
课题组成员:张浩 李康 张晓玉
姓名
学号
班级
自评成绩 张
浩
070104010121 07应用2班
A 李
康
070104010113 07软件3班
B 张晓玉
070104010131 07软件3班
B
开发日期:202_年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(202_);
bj.conductorSay.setText(null);
bj.busSay.setText(“开始上下车”);
Thread.sleep(202_);
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 { 坐下班客车“); createOff();} for(int i=0;i createOn();} if(Seat.canOn==0&&Seat.willOff==0){ finish=true;}else { finish=false;//等待上下车完成 } while(!finish){Thread.sleep(100);} if(Seat.canOn bj.busSay.setText(”很抱歉n本车已满n欢迎乘 Thread.sleep(202_);} 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(202_); bj.busSay.setText(null); bj.conductorSay.setText(”关门了“); Thread.sleep(202_); 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 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(202_);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 { 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; } @Override public void run() { try { Thread.sleep(100); } catch(InterruptedException ex){ Logger.getLogger(PassengerOn.class.getName()).log(Level.SEVERE, ex); } try { seat.takeOn(); } catch(InterruptedException ex){ Logger.getLogger(PassengerOn.class.getName()).log(Level.SEVERE, 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(202_); } catch(InterruptedException ex){ Logger.getLogger(PassengerOn.class.getName()).log(Level.SEVERE, ex); null,null, null,} 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; } @Override public void run() { try { Thread.sleep(100); } catch(InterruptedException ex){ Logger.getLogger(PassengerOff.class.getName()).log(Level.SEVERE, ex); } try { seat.takeOff(); } catch(InterruptedException ex){ Logger.getLogger(PassengerOff.class.getName()).log(Level.SEVERE, 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(202_); } catch(InterruptedException ex){ Logger.getLogger(PassengerOff.class.getName()).log(Level.SEVERE, ex); } seat.hasOff(); } } null,null, null,5.5解决的技术难点、经常犯的错误 理清司机与售票员之间的同步互斥关系和用于实现互斥的变量和放法,理清上下车乘客的同步互斥关系的变量与方法,确定司机、售票员、上下车乘客同步互斥变量; 出现的错误有:互斥变量的使用,设计的位置不当,实现同步互斥的方法位置不当,最初的逻辑构架关系不对,以上错误经认真斟酌、校验,均已解决。 6测试 在已经安装JDK的操作系统中双击可执行文件,进入公交车模拟系统,可以根据菜单或者快捷键进行操作。 点击开始,系统中显示客车次、总站台数等等,如图: 上下车人员按先下后上进行上下车,如图: 当到达终点站时,车上乘客必须全部下车,不允许上车操作,如图: 当到达终点站,进行下车完毕后,点击统计,可以查看本次出车载客人次,如图: 点击退出即可退出公交车模拟系统。 7.总结 突出特地:简单、易操作。完整地表示了行车与开门的同步互斥,下车与上车的同步互斥。 经验、教训和感受: 总体说来,这次OS课程设计是一次很有趣味的历程。实验期间安装了Netbeans并参考了一些基础书籍,对Netbeans的基本操作和特性有了必须的了解,为课设的开展打下了一个最简陋的基础。实验题目涵盖面较广,需要广泛的查阅资料,以及开动脑筋独立解决种种问题。Netbeans并不是易于使用的系统,因此在实验过程中也自然的遇到了许许多多“稀奇古怪”的问题,同时又在解决与理解问题中对这个系统一个个精妙的强大的设计感叹不已。 与其他同学的交流也是这次课设中有意思的地方。本班解决生产者消 费者问题和公交车模拟问题的同学几乎各占一半,于是在讨论的过程中也对不同的设计风发之间的差异有了更深的认识。从同学那里获得帮助,帮助别人解决问题,自己都受益匪浅,也在这样的氛围中越来越感觉到应用编程与开发的乐趣。 在完成的源代码中还存在相当多的不足,例如图形显示的Bug,忽略文件属性控制等等。需要在以后的学习与工作中更加努力的改进。这次的OS课程设计,也为我们提供了一个锻炼与审视自身能力的机会,意义匪浅。 8.参考文献 Netbeans-JAVA桌面、WEB与企业级程序开发详解 吴亚峰 王鑫磊著 人民邮电出版社 JAVA语言程序设计 郎波 著 清华大学出版社 学生工作管理系统包括学生工作计划管理、团委工作管理、党建工作管理、毕业管理、奖惩信息管理、奖学金管理、助学管理、学生干部管理、学生思想教育管理、学生综合测评、学生心理咨询、网上调研、人文素质学分管理等功能,是学生管理工作的有效辅助工具,可使学校管理人员摆脱烦杂、重复的信息统计和维护工作,将更多的精力用于学生思想及文化素质教育,对建立良好的学风、维护稳定的校园秩序、提升管理及服务水平具有重大的现实意义。 学生工作管理系统功能实现: 一、学生事务管理 学生事务包含学生基本信息管理、学生奖惩、学生欠费清理及保险事宜等。 1、查询:能随时查看、统计全校学生各种基本详细信息,并能导出相关信息。学生的基本信息还应包括:辅导员、联系方式、家庭联系方式、银行卡号等,基本信息的字段以及修改权限可由管理员自行设定。 2、学生日常管理(校外住宿、请假、离校、学生活动组织、学生证补办、学生保险管理等) 3、记录学生奖惩情况 设置奖励类别(校级、区级、市级、国家级)、登记学生奖励、设置惩罚类别(警告、严重警告、记过、留校察看、开除学籍)、登记学生惩罚、解除学生察看期(学生登录系统可以直接查看自己的处分,留校察看期始于,止于什么时间,解除留校察看期,以及其他处 分)、分类别按院(系)/部/年级查看学生奖励。 4、学生欠费清理 未交清学费的学生,可以随时生成名单,包括学生的各种基本信息、获资助情况等。 5、记录学生保险办理与理赔情况。设置保险类别、登记参加保险学生、登记保险理赔情况、查看参保学生、查看保险理赔情况。管理员能够对已购买保险的名单进行批量删减、增加、修改。 6、退学:查看退学学生名单、生成分析退学学生图表。 二、助学管理 包括贫困生档案、助学金、勤工助学、贫困资助、助学贷款等。 1、贫困生档案:审核学生贫困申请,建立学生贫困档案。 2、勤工助学管理:审核学生勤工助学申请,确定勤工助学学生,学校为这些学生提供勤工俭学的机会,先确定学校提供的助学岗位信息,容纳人数,岗位标准;为已安排岗位的学生实行登记、管理,确定资助金额,发放日期;统计上岗学生人数、发放金额。 3、学生资助管理:为在校特困生、受资助生、少数民族学生发放资助,登记资助金额,发放原因。 4、学生贷款管理:查询,管理申请生源地贷款的学生信息,包括申请金额,申请的起始时间,结束时间,申请银行及经办人。 5、银行卡信息更新:整理收集由财务处提供的全院学生银行卡信息,学生凭统一身份认证更新自己的银行卡信息,导出学院学生银行卡账号等。 三、评奖评优管理 实现学生在校期间的奖学金评定、优秀学生、优秀毕业生等评定管理,实现由学生处负责人在线设置各项奖励的评定等级、评定原则、人数、金额等。通过时间控制学生在线申请的起止时间,有资格的学生在线申请各项奖励,由院系进行审核,学生处进行在线审批等流程化管理,并打印出相关的综合统计报表。 (一)具体有以下几个方面功能: 1、学生处设置评奖评优的条件,包括时间、等级、金额、人数的设置等; 2、发布评奖评优的信息,提供学生在线申请机制; 3、记载班级荣誉; 4、设置荣誉项目、分荣誉项目登记荣誉班级; 5、学生在线申请评奖评优,包括申请的等级、金额、申请的事由、在校的特殊表现等; 6、院系辅导员在线进行审核,审核通过的学生信息自动上报二级学院,由二级学院负责人在线进行复审,提交最后名单报学生处; 7、评奖评优的发放管理等; 8、综合汇总统计,报表输出。 (二)学生综合测评成绩管理 1、每个学生的成绩设置三个大类,每个大类分若干个加分项目。 2、能进行一些简单的运算,自动生成每个学生每一大类的总分,以及每个学生的排名情况。 3、进行动态管理,修改某一个数据后,能自动修改相应的所有数据。 4、每个学生的成绩需要按学院、专业进行相关汇总、排名。 四、心理健康管理 (一)人员及机构管理系统 实现不同学院、专业、班级多级管理,通过EXCEL文件自动导入人员信息,并自动检索生成对应院系机构信息,系统提供分院系或人员授权访问学生档案,实现中心到院系与兼职心理咨询师的访问管理。通过审核与授权控制系统访问权限和报告的反馈。 (二)心理测评系统 提供多种咨询过程中常用的心理健康、人格、情绪、智力、职业生涯、人际关系、学习压力等多个方面的测评量表,可以在线测试,并提供测试结果分析报告;采用多种技术优化措施,单台Web服务器支持1000人以上在线测评。 (三)人口学调查系统 自定义调查项目,用于不同角色的背景信息调查,满足样本分析变量需要数据报表输出含调查项目,满足SPSS样本分析与统计;调查项目在档案及数据分析子系统作为查询条件满足样本筛选需要。支持单选、多选、填空、问答项目,让心理老师更全面的了解学生心理健康状况。 (四)个案辅导管理系统 完善的个案辅导管理系统,实现个案建档、问题分类、访谈记录、辅导总结报告、回访反馈跟踪的规范化管理;个案档案管理为案例分析与档案查询提供网络化管理;心理咨询师的时间安排实现网络化管理;通过多种条件对个案进行统计,了解学生常见问题,制定针对性的干预措施,如心理健康教育讲座、团体活动、成长训练等。同时咨询中心可以通过个案辅导管理系统对咨询师个人成长进行督导沟通。 (五)心理档案系统 心理档案系统更全面的让心理老师了解学生的个人心理状况,包含个人基本信息、人口学调查项目、心理测评结果与报告、网络调查结果、心理咨询记录、个人成长报告、教师评价等;实现报告在线反馈;支持综合报告输出和批量报告输出打印;并满足心理老师自定义报告格式的输出免费升级;系统可以控制输出报告图表的维度开放与关闭,灵活的管理与控制满足心理档案个性化、专业化需要。 (六)心理咨询与预约系统 系统支持两种方式供学生向老师咨询心理问题,一种开放在心理网站的匿名方式向老师进行咨询,一种是设置心理老师咨询专栏,向指定老师实名进行心理咨询,心理咨询的记录保密处理,仅限于咨询者和辅导老师查询,其他人查询需要经管理员授权;预约系统通过心理咨询老师设定自己的预约时间、地点、联系方式,由学生选择合适的时间段和适合自身情况的老师进行预约。预约发布支持单个时间段发布也支持批量发布。并对学生退约情况进行关注。 (七)学生心理自助查询系统 心理知识手册 五、团委工作管理 团委工作是高校管理工作的一个重要方面,涉及到组织工作、宣传工作、社团活动及素质拓展。 1.组织工作:维护组织机构,管理团员档案,积极发展团员,定期收缴团费,团籍注册,严格团干选拔,登记团内奖惩,推荐优秀团员入党。 2.活动场地的申请,实现直接在网上进行审批的功能。3.宣传工作:团内刊物,通讯稿件,宣传活动,宣传板报。4.社团管理:社团成员基本信息、指导老师的评定、学生参加社团活动情况登记,记载成绩等(每一个社团的评定权限为每一个指导老师)、社团的注册情况。 5.社团活动:社团登记并通过校园网发布社团信息,接受学生网上报名、审核参加社团申请;开展社团活动并通过校园网发布社团活动信息。 六、辅导员队伍管理 对全院的辅导员队伍进行管理,为全校所有班级任命辅导员。首先由学生处设定工作量标准,然后各院系为本院系的班级任命辅导员,提交学生处审核。审核通过之后,辅导员就可以管理本人所带班级的学生,对学生提交的相关申请进行审核。学生处具有最高权限,对全校班级的辅导员进行任命或取消。 七、辅导员工作考评 对全院辅导员进行考评,参评者分别在网上填写考评表,各二级 学院考评后统一将数据提交,学生处将各学院考评结果进行汇总并公示。 八、交流平台 该平台提供留言、回复的网上交流机制,是家长、辅导员、学生三方面沟通的渠道,系统可设置查看权限,允许家长的留言只有自己的孩子及其辅导员才能查看。 九、活动的统计分析 统计学生处举办的所有活动信息:按学年统计开展活动的场次、报名人数、参加人数等。 十、在线调查 此项功能主要用于简单的问卷调查、学生评教等。 管理员根据需要设置问卷题目和选项,学生登录系统后可在线作答,系统对各变量做统计分析; 管理员可以批量导出数据,用于更复杂的统计分析。 学员管理系统功能需求 学员卡管理子系统: 对每个学员生成相应的IC卡或其他类型的卡 可以增加、修改、查询学员卡。可对学员卡进行挂失操作,学员卡包含住宿信息(与酒店管理系统、门禁系统整合),包含饭堂的用餐信息(与饭堂的一卡通系统整合),借书信息(与图书馆的系统整合)。 住宿管理子系统: 学员住宿管理用于管理学员的住宿,包含分房、退房、对调功能,可以根据班级、组别、是否已分配等条件查询,同时也可以按楼宇、状态、楼层标示、时间段进行查询。 住宿管理系统若可以替代现有的“酒店管理系统”则可以在后期制作。需要进一步完善现有酒店管理系统,具体业务由到总台调研写出需求分析报告。 后台系统管理系统: 包括用户管理、系统参数设置、权限管理、角色管理、工作流配置、日志管理等功能。具备灵活定制的功能,权限管理能对角色和数据分别定制,工作流配置提供图形化操作。系统管理中的权限及后台登陆用户需要与现有OA系统结合,可在现有OA系统中配置每个管理员的权限及账号。不在学员管理系统中制作相应模块,而是改造现有OA系统的功能模块。 考勤管理子系统: 包括刷卡签到等多种先进的上课考勤方式,有效考勤、记录、查询,但不造成堵塞,并可以讲到课率等信息公布到网上,方便各班对比(要求可以灵活支持调课、听课等事件的发生);记录学员行为描述,如:班主任或有权限的人可以录入或由系统自动记录上课期间某学员走出教室打电话多少次,每次多少分钟。 班级考勤管理,班级考勤管理包括考勤管理、考勤统计、外出考勤、考勤数据导出、考勤任务管理 考勤通过学员卡来进行考勤。 考勤管理,用于管理学员的考勤状态,按照班级、日期时间查询。考勤统计,用于统计班级学员在一个时间段内的考勤情况统计。 学籍管理子系统: 虚拟档案功能,每一项都有审核人,每一项都有是否已审核的标记。学员信息可以终身保留、跟踪。 学籍管理包括对班级学员的基本信息进行管理,包括查询、班级组别管理、新增、修改、批量修改、删除、查看、退学、学籍、导入、导出、下载模板、打印操作。 班组管理: 包括班级科目管理,对班级成绩科目进行管理,包括新增、修改、删除科目、提取科目、初始化成绩、导出、打印操作。班级信息查询,班级信息查询是从教务管理中的班级信息管理中抽出查询功能而来,包括查看当前班级和历年班级的信息,功能包括查询班级信息、查看班级信息、查看班级课程、查看班级的学员名册、导出、打印功能。当前班级,查询当前班级信息、查看班级信息、查看班级课程、查看班级的学员名册、导出、打印功能。历史班级,查询历史班级信息、查看班级信息、查看班级课程、查看班级的学员名册、导出、打印功能。 教师管理子系统 教师管理包括教师基本信息,专业介绍,成果介绍,与学员和班级的对应等功能 成绩管理子系统: 学员成绩管理包括管理班级成绩科目和班级学员成绩。对学员成绩进行管理,包括成绩名册查看、修改保存、提取论文成绩、导出、打印操作。 网上报名子系统: 包括刷卡报到等多种先进的学员报到方式,有效缓解报到难、慢、繁的问题。学员可以自己填写自己的每一项信息;也支持集中填写个人资料;可以直接导入学员们的个人资料,与学校网站结合增加网上报名接口 统计分析报表子系统: 可以统计是否有人常来,有些单位总是某个人来。可以统计某人是不是每种不同的培训都经常来参加。 重点培养对象统计:可以统计每人参加各种不同培训的总次数,并可以排序,可以显示Top 10、Top 20、Top 50、Top 100、Top 200等等。 应付了事的“挡箭牌”统计:可以统计每人参加相同的培训的总次数,并可以排序,可以显示Top 10、Top 20、Top 50、Top 100、Top 200等等。 基础数据管理系统: 对基础数据的综合管理,对学员库、班级库、学科库等基础数据的管理。 用户管理、系统参数设置、权限管理、角色管理、工作流配置、日志管理等功能。具备灵活定制的功能,权限管理能对角色和数据分别定制,工作流配置提供图形化操作界面。 文章管理子系统: 学员文章管理包含学员文章上传、学员文章分配、学员文章批改、学员文章查询。学员文章上传用于管理上传的学员论文文章,并有制作发布到校园网的相应入口。 学员文章分配(是分配学员文章给相关教师批改。学员文章批改功能是教师批改文章,分代批改和已批改,已批改的文章可以重批等。 学员文章查询可以根据设定条件查询学员文章信息和批改情况。 相册管理子系统 相册管理包含查询和浏览学员相片、贴框打印、班级全部相片上传和单张照片上传。其中贴框打印用于生成打印页打印来贴学员相片;班级全部相片上传和单张照片上传则上传学员的照片。 珉轩智能()--------智能家居一站式服务 一流品质,一流服务 餐厅亮点智能控制系统简介 随着智能技术的发展及其在酒店各不同区域的广泛应用,照明控制系统仅仅达到上述要求已远远不够。业主和设计师希望酒店照明控制系统不仅仅满足使用要求,他们希望在系统控制场景变化的同时,还应做到便于管理和节省能源。具体而言,有以下几点: (1)酒店对客人要强调第一印象,要求利用明暗有序和适度的照明环境让人进入酒店就感受到典雅舒适的气氛。 (2)需要因不同的场面而变幻的灯光效果,以营造出不同的照明环境。优秀的灯光设计可为酒店吸引众多的顾客,并能营造出一种温馨、舒适的环境,增添其艺术的魅力。高雅别致的光环境可给予顾客一种宾至如归的感觉,增添顾客对酒店的好感,亲切而又温馨。温和浪漫的可创造出立体感、层次感和不同色彩的环境气氛,不仅使客人有个舒适的居住环境,而且还可以产生一种艺术欣赏感,对酒店产生流连忘返之感。 我司根据印象余干实际控制要求做以下控制方案:(声光电同步控制方案)包间控制:整房控制理念的核心是利用现代科技为有高层次需求的人提供一个全方位服务的房屋控制系统,就是把整间包房的全部灯光结合背景音乐进行统一管理和资源配置,使其成为统一的为宾客服务的智能化系统。 举例说明: 每个包间设置4个不同情景模式(迎宾情景、用餐情景、散场情景、清洁情景)和多个主菜语音播报情景模式; 迎宾情景: 地址:南昌市洪都北大道488号竑鼎福第4号楼2单元3楼 珉轩智能()--------智能家居一站式服务 一流品质,一流服务 每当迎来贵宾时,服务人员启动“迎宾情景”灯光徐徐亮起,屋内的灯具将柔和的光线洒满整个房间,射光灯照亮了壁画,背景系统自动播放酒店特别介绍,完毕后传出悠扬的音乐,这一切使得聚餐的宾客感觉到气氛融洽,而这都是在家居智能控制器的控制下完成的,您只需要简单地按动一个按键就可营造出如此美妙动人的场景! 头菜或主菜语音播报情景模式: 每当头菜或主菜送到包间门前时,服务人员启动“相应(菜名)场景模式”,主灯渐暗至30%(渐变时间可编程控制),包间内少量灯光保留原有开启状态,其它部分灯光自动关闭,同时背景音乐自动语音播放相应菜品特色(工艺、做法、口感、营养成分等等),服务人员把主餐送至餐桌,聚光灯同时启动,烘托菜品,菜名播放完毕,聚光灯渐暗至关闭,包间其它灯光全部开启,主灯渐至100%(渐变时间可编程控制)。 江西珉轩智能科技有限公司 202_/5/30 地址:南昌市洪都北大道488号竑鼎福第4号楼2单元3楼第三篇:学生工作管理系统功能需求报告
第四篇:广西区委党校学员管理系统功能需求
第五篇:智能餐厅系统功能简介 - 副本