太原市公交查询管理系统方案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
第一章系统概述 (1)
1.1建立系统的必要性 (1)
1.2可行性分析 (1)
1.3开发环境 (2)
第二章系统需求分析 (3)
2.1 系统需求 (3)
2.2 功能需求 (3)
2.3 组织结构 (4)
2.4业务流程图 (4)
2.5数据流程图 (5)
2.6数据字典 (6)
第三章系统设计部分 (8)
3.1系统结构 (8)
3.2系统功能设计 (8)
3.3系统设计方案 (9)
3.4代码设计 (9)
3.5输入/输出设计 (9)
3.6数据库设计 (10)
第四章系统实现 (17)
4.1 系统功能截图 (17)
4.2源代码 (17)
第五章系统调试与测试 (29)
5.1调试 (29)
5.2测试 (29)
结束语 (31)
参考文献 (32)
第一章系统概述
1.1建立系统的必要性
时代的进步,经济的增长,伴随着人类发展的进程,生活中的各种信息也逐渐数字化、清晰化。
公交车作为现代城市生活中一种重要的交通工具,其数量增多,车型也不再单一,雇用的司机增多,这样使得公交车公司的车辆信息管理复杂化。
在这样的背景下,提出了计算机管理的公交车管理系统,辅助公交车运营公司对车辆进行管理,实现公交车、公交线路和司机管理科学化,更合理的利用资源。
城市公交是专门服务于市民出行的客运企业。
它是城市社会和经济活动的重要组成部分。
伴随着国民经济和城市建设的快速发展,城市经济的繁荣,人口的增加,城市必须解决好人们出行的需求。
城市公交直接关系着城市的经济发展和居民生活,对城市经济具有全局性、先导性的影响,城市公交以其方便、快捷、容量大而成为城市交通的主体。
但是随着公交系统的庞大,人们很难得到准确的公交信息,这样给一些人的出行就带来了不便。
因此,急需一个方便、快捷的公交信息查询方式,本系统通过浏览器查询,实现中心控制、自动更新、更多的查询方式等等更多更强大的功能。
1.2可行性分析
交通信息科技课程设计是数据库课程设计内容之一,它是对交通信息技术课程的实际应用,通过该课程设计,使学生加深对课堂教学内容的理解,掌握信息化技术在城市交通中的应用和开发,增强学生分析和解决实际交通能力的问题,为在交通智能系统开发中应用相关知识解决实际问题打下基础。
当前我国城市公交乘客信息系统的发展处于一个较落后的水平,广大乘客可以获得信息的方式很少,需要大力发展我国的城市公交乘客信息系统,本设计以某城市公交系统为开发对象,基于数据库查询技术,完成一个城市公交系统的出行线路查询软件。
该系统主要根据实际的需求,以需求分析、系统的设计目标,并且重点进行系统功能模块的详细设计和实现,采用了Visual 2003开发平台和SQL Server 2000数据库,实现了车辆信息管理、司机信息管理、线路信息管理和车辆分配线路管理等功能。
在针对数据操作方面,主要通过存储过程的方式实现数据的添加、删除和查询等操作。
通过系统测试,解决了公交车辆管理系统主要问题。
本系统的核心是对选择好的车次进行路线的查询,或者输入所要查询的车站名,点击“查询”按钮,查询所有含有该站的车次及相应的停靠站。
此处既可以“精确查询”也可以是“模糊查询”,“模糊查询”主要方便那些对站名不是很清楚,但知道其中的一部分的乘客,系统可以帮助他们快速的查出。
1.3开发环境
操作系统:Windows 7
开发软件:Microsoft Visual 2003
数据库:Microsoft SQL Server 2000
第二章系统需求分析
2.1 系统需求
我国城市公交乘客信息系统的发展处于一个落后的水平,广大乘客可以获得信息的方式很少,公交信息的完整性和准确性得不到保证,而且还没有专门的机构负责信息的发布和管理。
出于这个目的,在老师的指导下,我设计了这个城市公交线路查询系统。
在对公交乘客出行心理特征进行分析的基础上,考虑乘客选择公交线路决策的因素,进行程序关键部分的框架设计。
公交车管理系统是一个协助公交车运营商各单位对车辆进行全面的管理。
在此之前,对于线路与车辆的管理采用的方式几乎都是手工管理,其中的弊端显而易见,即容易造成档案资料的遗失,控制不集中,管理不规范等等问题。
因此,在管理系统的实现上应该满足以下需求:
1.为保障系统的稳定性,对于可能发生问题的输入要进行检验,同时要给出合理的提示信息。
2.在管理上满足公交车管理职能的基本需求,能够方便的进行司机信息管理、车辆信息管理、线路信息管理和车辆与线路的分配管理。
3.为公交车管理系统提供数据支持。
4.与传统的手工管理相比,应该添加用户权限的管理机制。
保证系统安全性。
2.2 功能需求
根据对上述管理系统的业务流程、要求以及所要实现的目标,可以拟出以下的需求目标:
1、人员管理:有关司机各种信息的输入、查询和修改,包括司机姓名、性别、出生日期、家庭住址、初次领证时间、执照号码、准驾车型、有效期起始时间、有效期结
束时间等。
2、车辆管理:车辆信息的输入、查询和修改,包括车号、类型、车主、发动机号、车架号、厂牌型号、车辆总质量、核定载客、登记时间、发证时间、颜色等。
3、线路管理:线路信息的录入、修改和查询,包括班车号、司机姓名、首发班车时间、末班车时间、运行公里数、耗油量等。
4、车辆分配线路管理:一个城市的运营线路可能复杂且数据量极大,系统用户可以进行线路的规划管理。
实现对车辆和线路分配的管理,包括添加、修改和删除操作。
5、车辆与司机的分配管理:为了维护好车辆,要求司机做好车辆的日程维护工作,落实具体责任。
2.3 组织结构
公交管理系统的整体结构分为公交管理信息前台和公交管理信息后台,管理信息前台主要负责用户可见系统的管理,包括会员登录、会员信息维护、会员服务、乘车信息查询、信息查询、用户投诉和友情链接。
管理信息后台主要通过系统工作人员来实现,进行系统维护、服务维护和系统维护等。
图2.1公交查询管理系统组织结构
2.4业务流程图
根据系统的需求分析,得到本系统的功能要求如下:
1.车辆信息的设置管理:系统合法用户可以根据公司具体情况设置关于车辆的具体资料档案。
2.权限管理:为了很好的保证系统的安全性,公司相关负责人可以根据实际情况添加和删除系统用户。
3.线路档案管理:一个城市的运营线路可能复杂且数据量极大,系统用户可以进行线路的规划管理。
4.站点管理:为了精确地为乘客提供便利,以及便于公交管理处工作人员的管理,对站点的分配进行规划。
5.站点单位管理:实现公交内部站点单位的各个方面的管理。
图2.2 公交查询管理系统业务流程图
2.5数据流程图
从公交车系统总部查询司机档案和车辆档案时需要通过档案科,其档案科储存所有司机和车辆的档案。
公交车查询前台工作是通过管理处实现,管理处主要负责车辆运行线路、站点管理和车辆与站点单位管理。
最后系统工作人员定时需要对系统进行安全维护。
图2.3 公交查询管理系统数据流程图2.6数据字典
(1)登录表
名字:登录查询表
别名:
描述:登录名及密码
定义:字符
位置:公交车系统总部
(2)司机档案表
名字:司机名
别名:
描述:对司机档案的查询
定义:字符、字母
位置:档案科
(3)车辆档案表
名字:车辆档案表
别名:
描述:对车辆的出行状况及时间进行查询定义:字符、数字
位置:档案科
(4)车辆运行线路表
名字:车辆运行线路表
别名:
描述:对指定的车辆进行线路查询
定义:字符、字母
位置:管理处
(5)车辆设置管理表
名字:车辆设置管理表
别名:
描述:对车辆进行管理及其分配
定义:字符、字母
位置:管理处
(6)车辆与司机分配表
名字:车辆与司机分配表
别名:
描述:对司机与车辆的分配管理
定义:字符、字母
位置:管理处
第三章系统设计
3.1系统结构
系统开发应用的是C/S 结构,C/S结构软件(即客户机/服务器模式)分为客户机和服务器两层,客户机不是毫无运算能力的输入、输出设备,而是具有了一定的数据处理和数据存储能力,通过把应用软件的计算和数据合理地分配在客户机和服务器两端,可以有效地降低网络通信量和服务器运算量。
由于服务器连接个数和数据通信量的限制,这种结构的软件适于在用户数目不多的局域网内使用。
国内目前的大部分ERP (财务)软件产品即属于此类结构。
目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。
这也就是目前应用系统的发展方向。
传统的C/S体系结构虽
然采用的是开放模式,但这只是系统开发一级的开放性,在特定的应用中无论是Client 端还是Server端都还需要特定的软件支持。
由于没能提供用户真正期望的开放环境,C/S结构的软件需要针对不同的操作系统系统开发不同版本的软件,加之产品的更新换代十分快,已经很难适应百台电脑以上局域网用户同时使用。
而且代价高,效率低。
3.2系统功能设计
公交查询系统的应用背景为:方便市民搭乘公交车出行、实时查询公交信息、及时更新查询数据。
因此该系统主要功能划分模块如下:
(1)查询系统模块
该模块实现公交查询功能,可实现按线路和站点两种查询方式。
(2)基本信息录入、更新模块
信息更新:系统允许管理员级别的用户对数据进行录入、修改且存盘操作。
信息统计:系统允许管理员级别的用户对数据进行统计、编辑、删除的操作。
保证现库的真实性和实时性。
(3)打印输出
系统可以将用户查询到的内容动态生成报表,并打印输出。
图3.1 公交查询管理系统功能模块图
3.3系统设计方案
公交车管理系统是一个小型的数据库系统。
所以这里我们选择SQL Server 数据库和JAVA技术进行开发。
Microsoft SQL Server 是一种关系型数据库管理系统。
首先建立SQL Server数据库中的线路表其中包括车次编号、上行线、下行线和线路类型4中属性列,车次信息表其中包括车次编号、所属公司、票价和运营时间4种属性,站点信息表包括站点名和临近建筑物2种属性,管理员信息表包括用户名和密码两种属性。
实现用户的使用和管理员的管理设计。
然后对应填入数据并且通过触发器实现剩余时间等于计划时间减完成时间的功能。
最后,在JAVA中编入程序实现要求。
3.4代码设计
该系统所涉及的代码,一方面体现了系统内部的管理层次,另一方面也便于系统输入和输出操作。
在系统运行过程中,用户查询公交线路时,只需登录界面后在线路和站名中输入相关信息,系统便自动将其信息调出来,用户可以随时为满足自己的需求进行系统查询。
3.5输入/输出设计
公交查询管理系统是一种服务于大众的需求系统,在系统的输入、输出设计上遵循的是满足用户需求的同时也要便于使用。
输入界面的窗口要考虑到屏幕格式以及降低数据输入的错误率,为此在程序中加入了对输入数据的校验和判断等功能,如在输入界面时只需输入线路或站名即可,系统可根据所输入的信息进行系统查询,得到所需信息或与之相近的信息内容进行输出。
用户在输入和输出界面中可根据自己的需求随时通过系统联机查询。
下面为输入界面:
图3.2 输入界面
3.6数据库设计
数据库技术作为数据管理技术,是计算软件领域的一个重要分支,产生于60年代末。
现已形成相当规模的理论体系和实用技术。
优秀的数据库设计是成功的基石。
万丈高楼平地起,数据库设计如同高楼的基石,是开发高品质应用的前提。
本任务主要完成该系统的后台数据库部分,研究的内容主要包括以下几部分:
1、要求查阅资料,通过实践完成以上工作。
2、要求从系统角度出发整体分析和构建应用系统,充分利用开发环境提供的开发技术,开发出界面友好、功能实用的应用系统。
3、采用软件工程的方法完成本设计,培养软件开发综合能力、软件系统架构设计能力和软件过程实施能力。
4、通过开发系统,了解公交客运公司管理等相关知识
3.6.1概念设计
概念设计的目标是产生反映城市公交查询系统需求的数据库概念结构,即概念模式。
概念模式是独立于数据库逻辑结构,独立于数据库的DBMS。
1)E-R模型
E-R模型是对现实世界的一种抽象,它的主要成分是实体、联系和属性,使用这三种成分,我们可以建立许多应用环境的ER模型。
2)E-R模型的操作
在利用ER模型进行概念设计的过程中,常常需要对ER图进行种种变换,这些变换又成为ER模型的操作,包括实体类型、联系类型和属性的分类、合并和增删等等。
3)利用ER方法的数据库概念设计
利用ER方法进行数据库概念设计,可以分成三步进行:首先设计局部ER模式,然后把各局部ER模式综合成一个全局ER模式,最后对全局ER模式进行优化,得到最终的ER模式,即概念模式。
设计局部的ER模式
通常,一个数据库系统都是为各个不同用户服务的,各个用户对数据的观点可能不一样,信息需求也可能不同。
在设计数据库概念结构时,为了更好的模拟现实世界,一个有效地策略是“分而治之”,即先分别考虑各个用户的信息需求,形成局部概念结构,然后再综合全局结构,在ER方法中,局部概念结构又称为局部ER模式。
4)联系定义
E-R模型的“联系”用于刻画实体之间的关联,一种完整的方式是对局部结构中任意两个实体类型,一句需求分析的结果,考察局部结构中任意两个实体类型之间是否存
在联系,若有联系,进一步确认是1:N、N:M还是1:1等。
还要考察一个实体类型内部是否存在联系,两个实体类型之间是否存在联系,多个实体类型之间是否存在联系,等等。
在公交管理系统的数据库设计中,先进行概念模型的建立:站点作为公交查询管理的一个实体,它拥有站点编号、站点类型、站点名称这些属性。
它与另一个实体“线路”存在着线路站点对应的联系,实体“线路”拥有始发时间、终发时间、线路编号、备注这些属性。
在此概念模型中,实体“车次”和“站点”是多对多的联系。
下面就是描述关系的E-R图:
图3.3 公交查询管理系统E-R图
5)设计全局ER模式
所有全局ER模式都设计好了后,接下来就是把它们综合成单一的全局概念结构,
全局概念结构不仅要支持所有局部ER模式,而且必须合理地表示一个完整的,一致的数据库概念结构。
(1)确定公共实体类型
为了给多个局部ER模式的合并提供开始合并的基础,首先要确定各局部结构中的公共实体类型,在这一步中我们仅根据实体类型名认定公共实体类型。
一般把同名实体类型作为实体公共类型的一类候选,把具有相同键的实体类型作为公共实体类型的另一候选。
(2)局部ER模式的合并
合并的原则是:首先进行两两合并,先合并那些现实世界中有联系的局部结构,合并从公共实体类型开始,最后再加入独立的局部结构。
(3)消除冲突
冲突分为三类:属性冲突、结构冲突、命名冲突。
设计全局ER模式的目的不在于把若干局部ER模式形式上合并为一个ER模式,而在于消除冲突,使之成为能够被所有用户共同理解和接受的同一概念模型。
(4)全局ER模型的优化
在得到全局ER模式后,为了提高数据库系统的效率,还应进一步依据处理需求对ER模式进行优化,一个好的全局ER模式,能够准确、全面的反映用户功能需求外,还应满足下列条件:实体类型的个数要尽量的少,实体类型所含的属性个数要尽量的减少,实体类型间联系无冗余。
3.6.2 逻辑设计
概念结构是独立于任何一种数据模型的信息结构。
逻辑结构设计的任务就是把概念
结构设计好的基本ER图转换为与DBMS产品所支持的数据模型相符合的逻辑结构。
逻辑结构一般分为3步进行:
(1)将概念结构转换为一般的关系、网状、层次模型;
(2)将转化来的关系、网状、层次模型向特定DBMS支持下的数据模型转换;
(3)对数据模型进行优化。
关系模式的逻辑结构是一组关系模式的集合。
ER图则是由实体型、实体的属性和实体型之间的联系3个要素组成的。
所以将ER图转换为关系模型实际上就是将实体型、实体的属性和实体型之间的联系转换为关系模式。
实体型之间有以下不同的情况:
1. 一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。
如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的候选码。
如果与某一端实体对应得关系模式合并,则需要在该关系模式的属性中加入另一个关系模式的码和联系本身的属性。
2. 一个1:N联系可以转化为一个独立的关系模式,也可以与N端对应分关系模式合并。
如果转化为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为N端实体的码。
3. 一个M:N联系转换为一个关系模式。
与该联系相连的各实体的码以及联系本身的属性均转化为关系的属性,各实体的码组成关系的码或关系码的一部分。
4. 3个或3个以上实体间的一个多元联系可以转换为一个关系模式。
与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性,各实体的码组成关系的码或关系码的一部分。
5. 具有相同码的关系模式可合并。
一个实体型转换为一个关系模式。
实体的属性就是关系的属性,实体的码就是关系的码。
下面把ER图转换为关系模型。
关系的码用下横线标出:
站点(站点编号,站点名称,站点类型)
线路(线路编号,始发时间,终发时间,备注)
站点单位(单位编号,单位名称)
管理员(管理员名称,姓名,年龄)
档案(档案编号,档案类型)
3.6.3规范化
一个低一级范式的关系模式,通过模式分解可以转化为若干个高一级范式的关系模式的集合,这种过程叫做规范化
规范化的基本思想是逐步消除数据依赖中不合适的部分,使模式中的各关系模式达到某种程度的“分离”,即“一事一地”的模式设计原则。
让一个关系描述一个概念、一个实体或者实体间的一种联系。
若多于一个概念就把它“分离”出去。
因此所谓规范化实质上是概念的单一化。
根据逻辑设计中的关系模式:1. 站点S-T-A(站点编号,站点名称,站点类型)
其中由站点编号能得到站点名称和站点类型,站点的码是站点编号。
函数依赖有:(站点编号,站点名称)P 站点类型
站点编号 F 站点名称
站点编号 F 站点类型
图3.4 S-T-A中的函数依赖
消除部分函数依赖将关系模式S-T-A分解为两个关系模式:
ST(站点编号,站点类型)
SA(站点编号,站点名称)
关系模式ST与SA中的属性间的函数依赖可以用图3.5和图3.6表示如下。
ST:
图3.5 ST中的函数依赖
SA:
图3.6 SA中的函数依赖
2. 线路L-I-N(线路编号,始发时间,终发时间,备注)
其中线路编号能得出始发时间、终发时间和备注,线路的码是线路编号。
函数依赖有:
线路编号 F (始发时间,终发时间,备注) 如图 3.7所示。
图 3.7 L-I-N 中的函数依赖
3.
站点单位S-T-D (单位编号,单位名称)
站点单位的码是单位编号,函数依赖有:单位编号 F (单位名称) 如图3.8所示。
图3.8 S-T-D 中的函数依赖
4.管理员A-M-T (管理员职称,姓名,年龄)
实体管理员的码是管理员职称,由管理员职称能得到姓名和年龄,因为存在重名的误差,所以由姓名不能得出年龄。
函数依赖有:
管理员职称 F (姓名,年龄) 如图3.9所示。
图3.9 A-M-T 中的函数依赖
5.档案R-C-D(档案编号,档案类型)
实体档案的码是档案编号,函数依赖有:档案编号 F (档案类型)如图3.10所示:
档案编号档案类型
图3.10 R-C-D中的函数依赖
第四章系统实现
4.1 系统功能截图
系统主页面功能实现如图4.1所示。
图4.1 公交查询系统主页面
站点查询功能页面如图4.2所示。
图4.2 站点查询功能页面
4.2源代码
公交查询系统功能代码如下所示:
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;
int count;
int M[4000][4000];
class BinaryTree;
class BinaryTreeNode{
friend BinaryTree;
public:
BinaryTreeNode(){LeftChild=RightChild=0;}
BinaryTreeNode(const char *e){
strcpy(data,e);
LeftChild=RightChild=0;
}
BinaryTreeNode(const char *e,BinaryTreeNode *l,BinaryTreeNode *r){
strcpy(data,e);
LeftChild=l;
RightChild=r;
}
private:
char data[5];
BinaryTreeNode *LeftChild,*RightChild;//左子树,右子树
};
//二叉树类定义
class BinaryTree{
public:
BinaryTree(){root=0;}
~BinaryTree(){Delete();}
//删除结点
void Delete(){PostOrder(Free,root);root=0;}
int Height()const{return Height(root);}
int Size(){
count=0;PreOrder(Add1,root);return count;}
BinaryTreeNode* Insert(char *x);
BinaryTreeNode* Search(const char *x) const;
private:
BinaryTreeNode* root;//树根
void PreOrder(void(*Visit)(BinaryTreeNode* u),BinaryTreeNode* t);
void PostOrder(void(*Visit)(BinaryTreeNode* u),BinaryTreeNode* t);
static void Free(BinaryTreeNode* t){delete t;}
static void Output(BinaryTreeNode* t){
cout<<t->data<<' ';
}
static void Add1(BinaryTreeNode* t){count++;}
int Height(BinaryTreeNode* t)const;
};
//前序遍历
void BinaryTree::PreOrder(void(*Visit)(BinaryTreeNode* u),BinaryTreeNode* t){ if(t){
Visit(t);
PreOrder(Visit,t->LeftChild);
PreOrder(Visit,t->RightChild);
}
}
//后序遍历
void BinaryTree::PostOrder(void(*Visit)(BinaryTreeNode* u),BinaryTreeNode* t){ if(t){
PostOrder(Visit,t->LeftChild);
PostOrder(Visit,t->RightChild);
Visit(t);
}
}
int BinaryTree::Height(BinaryTreeNode* t)const{
if(!t) return 0;
int hl=Height(t->LeftChild);//左子树的高度
int hr=Height(t->RightChild);//右子树的高度
if(hl>hr) return ++hl;
else return ++hr;
}
BinaryTreeNode* BinaryTree::Insert(char *x){
BinaryTreeNode *p=root,*pp=0;
while(p){
pp=p;
if(strcmp(p->data,x)>0)
p=p->LeftChild;
else if(strcmp(p->data,x)<0)
p=p->RightChild;
else return 0;
}
BinaryTreeNode *r=new BinaryTreeNode(x);
if(root){
if(strcmp(x,pp->data)<0)
pp->LeftChild=r;
else
pp->RightChild=r;
}
else root=r;
return r;
}
BinaryTreeNode* BinaryTree::Search(const char *x) const{
BinaryTreeNode *p=root;
while(p)
if(strcmp(x,p->data)<0)
p=p->LeftChild;
else if(strcmp(x,p->data)>0)
p=p->RightChild;
else {
cout<<p->data<<endl;
break;
}
return p;
}
void main(){
BinaryTree Bus_Stop;
char Stop[5];
ifstream fin("公汽线路信息.txt");
while(fin){
if((fin.get())=='S'){
for(int i=0;i<4;i++)
fin>>Stop[i];
Stop[4]=0;
Bus_Stop.Insert(Stop);
}
}
cout<<Bus_Stop.Size()<<endl;
Bus_Stop.Search("3958");
}
//注:此次公交线路优化查询系统中的输入文件名为“公汽线路信息.txt”
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;
const int MAX=100000000; //无穷大
const int S_TO_T=20; //用户自定义的转化参数,即乘客愿意以一块钱换取20分钟const int T1=3;
const int N=524;
const int M=4000;
const int TB1=3; //shijian
const int TB2=5;
const int Count=3957;
const int BSB=13;
const int SS=5;
const int SB=7;
const BN=520;
bool Bus_Line[N]={0};
int Bus[M][M][2]; //0: data 1: line
int busline;
void ReNew(const int &start,const int &end,const int &line,const int &d,bool flag[]){ int min;
if(flag[line])
min=(d+19)/20*S_TO_T+d*T1;
else
min=d*T1+S_TO_T;
if(!Bus[start][end][0]){
Bus[start][end][0]=min;
Bus[start][end][1]=line;
return;
}
if(min<Bus[start][end][0]){
Bus[start][end][0]=min;
Bus[start][end][1]=line;
}
}
void ReNew1(const int &start,const int &end,const int &line){
int min=BSB;
if(!Bus[start][end][0]){
Bus[start][end][0]=min;
Bus[start][end][1]=line;
return;
}
if(min<Bus[start][end][0]){
Bus[start][end][0]=min;
Bus[start][end][1]=line;
}
}
void ReNew2(const int &start,const int &end,const int &line,const int &d){ int min;
min=d/2*SS+3*S_TO_T;
if(!Bus[start][end][0]){
Bus[start][end][0]=min;
Bus[start][end][1]=line;。