计算机软件及应用太原市公交查询管理系统_第1页
计算机软件及应用太原市公交查询管理系统_第2页
计算机软件及应用太原市公交查询管理系统_第3页
计算机软件及应用太原市公交查询管理系统_第4页
计算机软件及应用太原市公交查询管理系统_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录第一章 系统概述11.1建立系统的必要性11.2可行性分析11.3开发环境2第二章 系统需求分析32.1 系统需求32.2 功能需求32.3 组织结构42.4业务流程图42.5数据流程图52.6数据字典6第三章 系统设计部分83.1系统结构 83.2系统功能设计83.3系统设计方案 93.4代码设计93.5输入/输出设计93.6数据库设计·10第四章 系统实现174.1 系统功能截图 174.2源代码17第五章 系统调试与测试29 5.1调试29 5.2测试29结束语31参考文献32第一章 系统概述1.1建立系统的必要性时代的进步,经济的增长,伴随着人类发展的进程,生活中的各种信

2、息也逐渐数字化、清晰化。公交车作为现代城市生活中一种重要的交通工具,其数量增多,车型也不再单一,雇用的司机增多,这样使得公交车公司的车辆信息管理复杂化。在这样的背景下,提出了计算机管理的公交车管理系统,辅助公交车运营公司对车辆进行管理,实现公交车、公交线路和司机管理科学化,更合理的利用资源。 城市公交是专门服务于市民出行的客运企业。它是城市社会和经济活动的重要组成部分。伴随着国民经济和城市建设的快速发展,城市经济的繁荣,人口的增加,城市必须解决好人们出行的需求。城市公交直接关系着城市的经济发展和居民生活,对城市经济具有全局性、先导性的影响,城市公交以其方便、快捷、容量大而成为城市交通的主体。但

3、是随着公交系统的庞大,人们很难得到准确的公交信息,这样给一些人的出行就带来了不便。因此,急需一个方便、快捷的公交信息查询方式,本系统通过浏览器查询,实现中心控制、自动更新、更多的查询方式等等更多更强大的功能。1.2可行性分析交通信息科技课程设计是数据库课程设计内容之一,它是对交通信息技术课程的实际应用,通过该课程设计,使学生加深对课堂教学内容的理解,掌握信息化技术在城市交通中的应用和开发,增强学生分析和解决实际交通能力的问题,为在交通智能系统开发中应用相关知识解决实际问题打下基础。当前我国城市公交乘客信息系统的发展处于一个较落后的水平,广大乘客可以获得信息的方式很少,需要大力发展我国的城市公交

4、乘客信息系统,本设计以某城市公交系统为开发对象,基于数据库查询技术,完成一个城市公交系统的出行线路查询软件。该系统主要根据实际的需求,以需求分析、系统的设计目标,并且重点进行系统功能模块的详细设计和实现,采用了VisualStudio.NET2003开发平台和SQLServer2000数据库,实现了车辆信息管理、司机信息管理、线路信息管理和车辆分配线路管理等功能。在针对数据操作方面,主要通过存储过程的方式实现数据的添加、删除和查询等操作。通过系统测试,解决了公交车辆管理系统主要问题。本系统的核心是对选择好的车次进行路线的查询,或者输入所要查询的车站名,点击“查询”按钮,查询所有含有该站的车次及

5、相应的停靠站。此处既可以“精确查询”也可以是“模糊查询”,“模糊查询”主要方便那些对站名不是很清楚,但知道其中的一部分的乘客,系统可以帮助他们快速的查出。1.3开发环境操作系统:Windows7开发软件:MicrosoftVisualStudio.NET2003 数据库:MicrosoftSQLServer2000第二章系统需求分析2.1 系统需求我国城市公交乘客信息系统的发展处于一个落后的水平,广大乘客可以获得信息的方式很少,公交信息的完整性和准确性得不到保证,而且还没有专门的机构负责信息的发布和管理。出于这个目的,在老师的指导下,我设计了这个城市公交线路查询系统。在对公交乘客出行心理特征进

6、行分析的基础上,考虑乘客选择公交线路决策的因素,进行程序关键部分的框架设计。公交车管理系统是一个协助公交车运营商各单位对车辆进行全面的管理。在此之前,对于线路与车辆的管理采用的方式几乎都是手工管理,其中的弊端显而易见,即容易造成档案资料的遗失,控制不集中,管理不规范等等问题。因此,在管理系统的实现上应该满足以下需求:1.为保障系统的稳定性,对于可能发生问题的输入要进行检验,同时要给出合理的提示信息。2.在管理上满足公交车管理职能的基本需求,能够方便的进行司机信息管理、车辆信息管理、线路信息管理和车辆与线路的分配管理。3.为公交车管理系统提供数据支持。4.与传统的手工管理相比,应该添加用户权限的

7、管理机制。保证系统安全性。 2.2 功能需求 根据对上述管理系统的业务流程、要求以及所要实现的目标,可以拟出以下的需求目标: 1、人员管理:有关司机各种信息的输入、查询和修改,包括司机姓名、性别、出生日期、家庭住址、初次领证时间、执照号码、准驾车型、有效期起始时间、有效期结束时间等。2、车辆管理:车辆信息的输入、查询和修改,包括车号、类型、车主、发动机号、车架号、厂牌型号、车辆总质量、核定载客、登记时间、发证时间、颜色等。3、线路管理:线路信息的录入、修改和查询,包括班车号、司机姓名、首发班车时间、末班车时间、运行公里数、耗油量等。4、车辆分配线路管理:一个城市的运营线路可能复杂且数据量极大,

8、系统用户可以进行线路的规划管理。实现对车辆和线路分配的管理,包括添加、修改和删除操作。5、车辆与司机的分配管理:为了维护好车辆,要求司机做好车辆的日程维护工作,落实具体责任。2.3 组织结构公交管理系统的整体结构分为公交管理信息前台和公交管理信息后台,管理信息前台主要负责用户可见系统的管理,包括会员登录、会员信息维护、会员服务、乘车信息查询、信息查询、用户投诉和友情链接。管理信息后台主要通过系统工作人员来实现,进行系统维护、服务维护和系统维护等。公交管理信息前台公交管理信息后台会员登录会员信息维护会员服务乘车信息查询信息查询用户投诉友情链接线路维护服务维护系统维护公交管理系统图2.1公交查询管

9、理系统组织结构2.4业务流程图根据系统的需求分析,得到本系统的功能要求如下:1.车辆信息的设置管理:系统合法用户可以根据公司具体情况设置关于车辆的具体资料档案。2.权限管理:为了很好的保证系统的安全性,公司相关负责人可以根据实际情况添加和删除系统用户。3.线路档案管理:一个城市的运营线路可能复杂且数据量极大,系统用户可以进行线路的规划管理。4.站点管理:为了精确地为乘客提供便利,以及便于公交管理处工作人员的管理,对站点的分配进行规划。5.站点单位管理:实现公交内部站点单位的各个方面的管理。图2.2 公交查询管理系统业务流程图2.5数据流程图从公交车系统总部查询司机档案和车辆档案时需要通过档案科

10、,其档案科储存所有司机和车辆的档案。公交车查询前台工作是通过管理处实现,管理处主要负责车辆运行线路、站点管理和车辆与站点单位管理。最后系统工作人员定时需要对系统进行安全维护。 司机档案公交车系统总部档案处理 系统权限档案安全保护 车辆档案线路信息资料 车辆运行线路系统内部设置 站点单位管理 站点管理图2.3 公交查询管理系统数据流程图2.6数据字典(1)登录表名字:登录查询表别名:描述:登录名及密码定义:字符位置:公交车系统总部(2)司机档案表名字:司机名别名:描述:对司机档案的查询定义:字符、字母位置:档案科(3)车辆档案表名字:车辆档案表别名:描述:对车辆的出行状况及时间进行查询定义:字符

11、、数字位置:档案科(4)车辆运行线路表名字:车辆运行线路表别名:描述:对指定的车辆进行线路查询定义:字符、字母位置:管理处(5)车辆设置管理表名字:车辆设置管理表别名:描述:对车辆进行管理及其分配定义:字符、字母位置:管理处(6)车辆与司机分配表名字:车辆与司机分配表别名:描述:对司机与车辆的分配管理定义:字符、字母位置:管理处第三章 系统设计3.1系统结构系统开发应用的是C/S 结构,C/S结构软件(即客户机/服务器模式)分为客户机和服务器两层,客户机不是毫无运算能力的输入、输出设备,而是具有了一定的数据处理和数据存储能力,通过把应用软件的计算和数据合理地分配在客户机和服务器两端,可以有效地

12、降低网络通信量和服务器运算量。由于服务器连接个数和数据通信量的限制,这种结构的软件适于在用户数目不多的局域网内使用。国内目前的大部分ERP(财务)软件产品即属于此类结构。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。传统的CS体系结构虽然采用的是开放模式,但这只是系统开发一级的开放性,在特定的应

13、用中无论是Client端还是Server端都还需要特定的软件支持。由于没能提供用户真正期望的开放环境,C/S结构的软件需要针对不同的操作系统系统开发不同版本的软件, 加之产品的更新换代十分快,已经很难适应百台电脑以上局域网用户同时使用。而且代价高,效率低。3.2系统功能设计公交查询系统的应用背景为:方便市民搭乘公交车出行、实时查询公交信息、及时更新查询数据。因此该系统主要功能划分模块如下:(1)查询系统模块该模块实现公交查询功能,可实现按线路和站点两种查询方式。(2)基本信息录入、更新模块信息更新:系统允许管理员级别的用户对数据进行录入、修改且存盘操作。信息统计:系统允许管理员级别的用户对数据

14、进行统计、编辑、删除的操作。保证现库的真实性和实时性。(3)打印输出系统可以将用户查询到的内容动态生成报表,并打印输出。查询系统基本信息录入、更新打印输出线路查询站点查询信息更新信息统计生成报表打印输出公交查询管理子系统图3.1 公交查询管理系统功能模块图3.3系统设计方案公交车管理系统是一个小型的数据库系统。所以这里我们选择SQL Server 数据库和JAVA技术进行开发。Microsoft SQL Server 是一种关系型数据库管理系统。首先建立SQL Server数据库中的线路表其中包括车次编号、上行线、下行线和线路类型4中属性列,车次信息表其中包括车次编号、所属公司、票价和运营时间

15、4种属性,站点信息表包括站点名和临近建筑物2种属性,管理员信息表包括用户名和密码两种属性。实现用户的使用和管理员的管理设计。然后对应填入数据并且通过触发器实现剩余时间等于计划时间减完成时间的功能。最后,在JAVA中编入程序实现要求。3.4代码设计该系统所涉及的代码,一方面体现了系统内部的管理层次,另一方面也便于系统输入和输出操作。在系统运行过程中,用户查询公交线路时,只需登录界面后在线路和站名中输入相关信息,系统便自动将其信息调出来,用户可以随时为满足自己的需求进行系统查询。3.5输入/输出设计公交查询管理系统是一种服务于大众的需求系统,在系统的输入、输出设计上遵循的是满足用户需求的同时也要便

16、于使用。输入界面的窗口要考虑到屏幕格式以及降低数据输入的错误率,为此在程序中加入了对输入数据的校验和判断等功能,如在输入界面时只需输入线路或站名即可,系统可根据所输入的信息进行系统查询,得到所需信息或与之相近的信息内容进行输出。用户在输入和输出界面中可根据自己的需求随时通过系统联机查询。下面为输入界面:图3.2 输入界面3.6数据库设计数据库技术作为数据管理技术,是计算软件领域的一个重要分支,产生于60年代末。现已形成相当规模的理论体系和实用技术。优秀的数据库设计是成功的基石。万丈高楼平地起,数据库设计如同高楼的基石,是开发高品质应用的前提。本任务主要完成该系统的后台数据库部分,研究的内容主要

17、包括以下几部分:1、要求查阅资料,通过实践完成以上工作。2、要求从系统角度出发整体分析和构建应用系统,充分利用开发环境提供的开发技术,开发出界面友好、功能实用的应用系统。3、采用软件工程的方法完成本设计,培养软件开发综合能力、软件系统架构设计能力和软件过程实施能力。4、通过开发系统,了解公交客运公司管理等相关知识3.6.1概念设计概念设计的目标是产生反映城市公交查询系统需求的数据库概念结构,即概念模式。概念模式是独立于数据库逻辑结构,独立于数据库的DBMS。1)E-R模型E-R模型是对现实世界的一种抽象,它的主要成分是实体、联系和属性,使用这三种成分,我们可以建立许多应用环境的ER模型。2)E

18、-R模型的操作在利用ER模型进行概念设计的过程中,常常需要对ER图进行种种变换,这些变换又成为ER模型的操作,包括实体类型、联系类型和属性的分类、合并和增删等等。3)利用ER方法的数据库概念设计利用ER方法进行数据库概念设计,可以分成三步进行:首先设计局部ER模式,然后把各局部ER模式综合成一个全局ER模式,最后对全局ER模式进行优化,得到最终的ER模式,即概念模式。设计局部的ER模式通常,一个数据库系统都是为各个不同用户服务的,各个用户对数据的观点可能不一样,信息需求也可能不同。在设计数据库概念结构时,为了更好的模拟现实世界,一个有效地策略是“分而治之”,即先分别考虑各个用户的信息需求,形成

19、局部概念结构,然后再综合全局结构,在ER方法中,局部概念结构又称为局部ER模式。4)联系定义E-R模型的“联系”用于刻画实体之间的关联,一种完整的方式是对局部结构中任意两个实体类型,一句需求分析的结果,考察局部结构中任意两个实体类型之间是否存在联系,若有联系,进一步确认是1:N、N:M还是1:1等。还要考察一个实体类型内部是否存在联系,两个实体类型之间是否存在联系,多个实体类型之间是否存在联系,等等。在公交管理系统的数据库设计中,先进行概念模型的建立:站点作为公交查询管理的一个实体,它拥有站点编号、站点类型、站点名称这些属性。它与另一个实体“线路”存在着线路站点对应的联系,实体“线路”拥有始发

20、时间、终发时间、线路编号、备注这些属性。在此概念模型中,实体“车次”和“站点”是多对多的联系。下面就是描述关系的E-R图:图3.3公交查询管理系统E-R图5)设计全局ER模式所有全局ER模式都设计好了后,接下来就是把它们综合成单一的全局概念结构,全局概念结构不仅要支持所有局部ER模式,而且必须合理地表示一个完整的,一致的数据库概念结构。(1)确定公共实体类型为了给多个局部ER模式的合并提供开始合并的基础,首先要确定各局部结构中的公共实体类型,在这一步中我们仅根据实体类型名认定公共实体类型。一般把同名实体类型作为实体公共类型的一类候选,把具有相同键的实体类型作为公共实体类型的另一候选。(2)局部

21、ER模式的合并合并的原则是:首先进行两两合并,先合并那些现实世界中有联系的局部结构,合并从公共实体类型开始,最后再加入独立的局部结构。(3)消除冲突冲突分为三类:属性冲突、结构冲突、命名冲突。设计全局ER模式的目的不在于把若干局部ER模式形式上合并为一个ER模式,而在于消除冲突,使之成为能够被所有用户共同理解和接受的同一概念模型。(4)全局ER模型的优化在得到全局ER模式后,为了提高数据库系统的效率,还应进一步依据处理需求对ER模式进行优化,一个好的全局ER模式,能够准确、全面的反映用户功能需求外,还应满足下列条件:实体类型的个数要尽量的少,实体类型所含的属性个数要尽量的减少,实体类型间联系无

22、冗余。3.6.2 逻辑设计概念结构是独立于任何一种数据模型的信息结构。逻辑结构设计的任务就是把概念结构设计好的基本ER图转换为与DBMS产品所支持的数据模型相符合的逻辑结构。逻辑结构一般分为3步进行:(1)将概念结构转换为一般的关系、网状、层次模型;(2)将转化来的关系、网状、层次模型向特定DBMS支持下的数据模型转换;(3)对数据模型进行优化。关系模式的逻辑结构是一组关系模式的集合。ER图则是由实体型、实体的属性和实体型之间的联系3个要素组成的。所以将ER图转换为关系模型实际上就是将实体型、实体的属性和实体型之间的联系转换为关系模式。实体型之间有以下不同的情况:1. 一个1:1联系可以转换为

23、一个独立的关系模式,也可以与任意一端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的候选码。如果与某一端实体对应得关系模式合并,则需要在该关系模式的属性中加入另一个关系模式的码和联系本身的属性。2. 一个1:N联系可以转化为一个独立的关系模式,也可以与N端对应分关系模式合并。如果转化为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为N端实体的码。3. 一个M:N联系转换为一个关系模式。与该联系相连的各实体的码以及联系本身的属性均转化为关系的属性,各实体的码组

24、成关系的码或关系码的一部分。4. 3个或3个以上实体间的一个多元联系可以转换为一个关系模式。与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性,各实体的码组成关系的码或关系码的一部分。5. 具有相同码的关系模式可合并。一个实体型转换为一个关系模式。实体的属性就是关系的属性,实体的码就是关系的码。下面把ER图转换为关系模型。关系的码用下横线标出:站点(站点编号,站点名称,站点类型)线路(线路编号,始发时间,终发时间,备注)站点单位(单位编号,单位名称)管理员(管理员名称,姓名,年龄)档案(档案编号,档案类型)3.6.3规范化一个低一级范式的关系模式,通过模式分解可以转化为若干个高一

25、级范式的关系模式的集合,这种过程叫做规范化规范化的基本思想是逐步消除数据依赖中不合适的部分,使模式中的各关系模式达到某种程度的“分离”,即“一事一地”的模式设计原则。让一个关系描述一个概念、一个实体或者实体间的一种联系。若多于一个概念就把它“分离”出去。因此所谓规范化实质上是概念的单一化。根据逻辑设计中的关系模式:1. 站点S-T-A(站点编号,站点名称,站点类型)其中由站点编号能得到站点名称和站点类型,站点的码是站点编号。函数依赖有:(站点编号,站点名称) P 站点类型站点编号 F 站点名称站点编号 F 站点类型如图 3.4所示。站点编号站点类型站点名称图3.4S-T-A中的函数依赖消除部分

26、函数依赖将关系模式S-T-A分解为两个关系模式:ST(站点编号,站点类型)SA(站点编号,站点名称)关系模式ST与SA中的属性间的函数依赖可以用图 3.5和图 3.6表示如下。ST: 站点编号站点名称图3.5ST中的函数依赖SA:站点类型站点编号图 3.6 SA中的函数依赖2. 线路L-I-N(线路编号,始发时间,终发时间,备注)其中线路编号能得出始发时间、终发时间和备注,线路的码是线路编号。函数依赖有:线路编号 F (始发时间,终发时间,备注)如图 3.7所示。始发时间线路编号终发时间备注图3.7L-I-N中的函数依赖3.站点单位S-T-D(单位编号,单位名称)站点单位的码是单位编号,函数依

27、赖有:单位编号 F (单位名称)如图3.8所示。单位编号单位名称图3.8 S-T-D中的函数依赖4.管理员A-M-T(管理员职称,姓名,年龄)实体管理员的码是管理员职称,由管理员职称能得到姓名和年龄,因为存在重名的误差,所以由姓名不能得出年龄。函数依赖有:管理员职称 F (姓名,年龄)姓名如图3.9所示。管理员职称年龄图3.9A-M-T中的函数依赖5.档案R-C-D(档案编号,档案类型)实体档案的码是档案编号,函数依赖有:档案编号 F (档案类型)如图3.10所示:档案类型档案编号图3.10 R-C-D中的函数依赖第四章系统实现4.1 系统功能截图系统主页面功能实现如图4.1所示。图4.1 公

28、交查询系统主页面站点查询功能页面如图4.2所示。图4.2 站点查询功能页面4.2源代码公交查询系统功能代码如下所示:#include<iostream>#include<fstream>#include<cstring>using namespace std;int count;int M40004000;class BinaryTree;class BinaryTreeNodefriend BinaryTree;public:BinaryTreeNode()LeftChild=RightChild=0;BinaryTreeNode(const char *

29、e)strcpy(data,e);LeftChild=RightChild=0;BinaryTreeNode(const char *e,BinaryTreeNode *l,BinaryTreeNode *r)strcpy(data,e);LeftChild=l;RightChild=r;private:char data5;BinaryTreeNode *LeftChild,*RightChild;/左子树,右子树;/二叉树类定义class BinaryTreepublic:BinaryTree()root=0;BinaryTree()Delete(); /删除结点void Delete()

30、PostOrder(Free,root);root=0;int Height()constreturn 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 PostOr

31、der(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)(Bin

32、aryTreeNode* 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(Bin

33、aryTreeNode* t)constif(!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

34、->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;elsepp->RightChild=r;else root=r;return r;BinaryTreeNode* BinaryTree:Search(const char *x) constBinaryTreeNode *p=root;while(p)if(strcmp(x,p->data

35、)<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 Stop5;ifstream fin("公汽线路信息.txt");while(fin)if(fin.get()='S')for(int i=0;i<4;i+)fin>>Stopi;Stop4=0;Bus_St

36、op.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 in

37、t T1=3;const int N=524;const int M=4000;const int TB1=3; /shijianconst int TB2=5;const int Count=3957;const int BSB=13;const int SS=5; const int SB=7;const BN=520;bool Bus_LineN=0; int BusMM2; /0: data 1: lineint busline;void ReNew(const int &start,const int &end,const int &line,const in

38、t &d,bool flag)int min;if(flagline)min=(d+19)/20*S_TO_T+d*T1;elsemin=d*T1+S_TO_T;if(!Busstartend0)Busstartend0=min;Busstartend1=line;return;if(min<Busstartend0)Busstartend0=min;Busstartend1=line;void ReNew1(const int &start,const int &end,const int &line)int min=BSB;if(!Busstarten

39、d0)Busstartend0=min;Busstartend1=line;return;if(min<Busstartend0)Busstartend0=min;Busstartend1=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(!Busstartend0)Busstartend0=min;Busstartend1=line;return;if(min<Busstartend

40、0)Busstartend0=min;Busstartend1=line;void ReNew3(const int &start,const int &end,const int &line)int min=SB;if(!Busstartend0)Busstartend0=min;Busstartend1=line;return;if(min<Busstartend0)Busstartend0=min;Busstartend1=line;void ReNew4(const int &start,const int &end,const int &

41、amp;line)int min=BS;if(!Busstartend0)Busstartend0=min;Busstartend1=line;return;if(min<Busstartend0)Busstartend0=min;Busstartend1=line;int Better1(const int &start,const int &end,int &path)int min=MAX;int temp,key;for(int i=1;i<M;i+)if(Busstarti0&&Busiend0)temp=Busstarti0+Bu

42、siend0;if(min>temp)key=i;min=temp;path=key;return min;int Better2(const int &start,const int &end,int path)int Min=MAX;int key;for(int i=1;i<M;i+)for(int j=1;j<M;j+)if(Busstarti0&&Busij0&&Busjend0)key=Busstarti0+Busij0+Busjend0; if(Min>key)Min=key;path0=i;path1=j;

43、return Min;int Better3(const int &start,const int &end,int path)int Min=MAX;int key;for(int i=1;i<M;i+)for(int j=1;j<M;j+)for(int k=1;k<M;k+)if(Busstarti0&&Busij0&&Busjk0&&Buskend0)key=Busstarti0+Busij0+Busjk0+Buskend0;if(Min>key)cout<<key<<

44、9; 'Min=key;path0=i;path1=j;path2=k;return Min;void main()int i,k;for(i=1;i<M;i+)for(int j=1;j<M;j+)for(int l=0;l<2;l+)Busijl=0; /初始化ifstream fin("公汽线路信息.txt");bool flag=0;bool round=false;char s,c;char Round3; /标志环行char line100;int start;int end;int num70;/*信息数据输入开始!* * */whi

45、le(fin)if(s=fin.get()='L')if(round)for(i=2;i<k;i+)for(int j=1;j<i;j+)ReNew(numi,numj,busline,k-i+j,Bus_Line);round=false;fin>>busline;fin.get();fin.getline(line,100);if(strcmp(line,"分段计价。")=0)Bus_Linebusline=1;if(c=fin.get()='S')flag=1;fin>>start;elseRound

46、0=c;fin>>Round1;Round2=0;if(strcmp(Round,"环")=0)round=true;flag=0;while(fin.get()!='S');fin>>start;k=1;elseif(s='S')fin>>end;if(start=end)k=0;numk=start;if(flag)for(i=1;i<=k;i+) ReNew(numi,end,busline,k-i+1,Bus_Line); ReNew(end,numi,busline,k-i+1,Bus_Li

47、ne);elseif(Round)for(i=1;i<=k;i+)ReNew(numi,end,busline,k-i+1,Bus_Line);elsefor(i=1;i<=k;i+) ReNew(numi,end,busline,k-i+1,Bus_Line);start=end;k+;while(fin1)if(s=fin1.get()='D')fin1>>busline;busline+=Count;while(fin1.get()!='S'); fin1>>start; k=1;ReNew3(busline,start

48、,0);ReNew4(start,busline,0);elseif(s='S')fin1>>end;numk=start;for(i=1;i<=k;i+)ReNew1(numi,end,busline);ReNew1(end,numi,busline);start=end;k+; ReNew3(busline,start,0);ReNew4(start,busline,0);while(fin2)round=false;if(s=fin2.get()='T')fin2>>busline;if(busline=2)round=tru

49、e;busline+=BN;while(fin2.get()!='D'); fin2>>start; start+=Count; k=1;elseif(s='D')fin2>>end;end+=Count;numk=start;if(round)for(i=1;i<=k;i+)ReNew2(numi,end,busline,k-i+1);else for(i=1;i<=k;i+) ReNew2(numi,end,busline,k-i+1); ReNew2(end,numi,busline,k-i+1); start=end;

50、k+;for(i=2;i<k;i+)for(int j=1;j<i;j+)ReNew2(numi,numj,busline,k-i+j);/*成功获取数据!* */cout<<Bus335917461<<endl;cout<<Bus174617841<<endl;cout<<Bus178418281<<endl;cout<<"Enter two station:"<<endl;int key,path5;cin>>start>>end;while(start&&end)cout<<Better1(start,end,key)<<endl;cout<<key<<endl;cout<<Busstartkey1<<

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论