交通咨询系统设计C语言
全国交通咨询模拟系统C实现课程设计报告

全国交通咨询模拟一、设计目的掌握线性表、栈、图结构和对文件的操作,学习屏幕编辑和菜单技术,掌握用最短路径及其搜索算法编制较综合性的程序,能用图的邻接存储结构求解最优路线问题,解决有关实际问题。
得到软件设计技能的训练。
二、问题描述交通咨询模拟。
根据旅客的不同需要,要考虑到旅客希望在旅途中的时间尽可能短、希望旅费尽可能省等的要求。
旅途用火车或飞机作为交通工具。
用计算机编制程序,为旅客提供两种最优决策的交通咨询系统。
三、基本要求1、对城市信息(城市名、城市间的里程)进行编辑:具备添加、修改、删除功能;2、对城市间的两种交通工具:飞机和火车。
对飞机航班和列车时刻表进行编辑:里程、航班和列车班次的添加、修改、删除;3、提供两种最优决策:最快到达或最省钱到达。
全程只考虑一种交通工具,可以不考虑回程;4、旅途中的耗费的总时间应包括中转站的等候时间。
其中飞机至少二小时,火车至少一小时;5、咨询以用户和计算机对话方式进行,要注意人机交互的屏幕界面。
由用户选择最优决策原则和交通工具,输入起始站、终点站、出发时间,输出信息:最快需要多长时间才能到达及旅费,或者最少需要多少旅费才能到达及时间,并详细说明依次于何时何地乘坐哪一趟班机或列车何时到达何地。
四、实现提示1、算法思路(1) 数据存储。
城市信息(城市名、代码)、交通信息(城市间的里程、各航班和列车时刻)存储于磁盘文件。
建议把城市信息存于文件前面,交通信息存于文件的后面,用fread和fwrite函数操作。
(2) 数据的逻辑结构。
根据设计任务的描述,其城市之间的旅游交通问题是典型的图结构,可看作为有向图,图的顶点是城市,边是城市之间所耗费的时间(要包括中转站的等候时间)或旅费。
(3) 数据的存储结构。
采用邻接表和邻接矩阵都可作为数据的存储结构,但当邻接边不多时,宜采用邻接表,以提高空间的存储效率。
这里建议采用邻接表作为数据的存储结构。
(4) 用不同的功能模块对城市信息和交通信息进行编辑。
交通图咨询查询系统数据结构(C语言)

信息科学与工程学院《结构数据》课程设计报告课程设计名称:交通咨询系统专业班级 : 计算机xxx学生姓名 : xxx学号: 2015xxxx指导教师 : xx课程设计时间:2016。
07.04—2016.07.08计算机应用技术专业课程设计任务书说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页填表说明1.“课题性质”一栏:A.工程设计;B.工程技术研究;C.软件工程(如CAI课题等);D.文献型综述;E.其它。
2.“课题来源"一栏:A.自然科学基金与部、省、市级以上科研课题;B.企、事业单位委托课题;C.校、院(系、部)级基金课题;D.自拟课题。
目录1 需求分析 01。
1 添加交通图信息 01。
2 查询单源最短路径 01。
3 查询多源最短路径 01。
4 更新交通图信息 01.6 读取、保存信息 (1)2 概要设计 (2)2.1 数据类型的定义 (2)2.2 功能模块结构图 (3)3 运行环境 (6)4 开发工具和编程语言 (6)5 详细设计 (7)5。
1 图结构的基本操作 (7)5。
1。
1添加城市结点和路径结点 (8)5。
1.2修改城市结点和路径结点 (8)5.1。
3删除城市结点和路径结点 (8)5。
1。
4退出保存 (8)5。
2 迪杰斯特拉算法的实现 (8)5.2。
1 迪杰斯特拉算法函数 (8)5.2.2 提取迪杰斯特拉函数信息 (8)5.2。
3 求多源最短路径 (8)6 程序编码 (9)7 运行结果 (39)8 心得体会 (45)9参考文献 (46)1需求分析本系统中的数据来源于标准输入设备(如键盘)和文件,可以实现对交通图城市、城市到其余城市的距离的操作,根据需要可查询某两个城市之间的最短距离、城市到各城市的最短距离,各个城市到各个城市的最短距离,以及路径。
本系统要实现的功能有:添加城市和城市间距离,删除城市及城市间距离,修改城市间距离,查询城市间的最短路径,查询某个城市到某个城市的最短路径。
基于C的智能交通管理系统设计

基于C的智能交通管理系统设计智能交通管理系统是利用先进的技术手段,对城市交通进行智能化管理和优化调度的系统。
在现代社会,随着城市化进程的加快和交通工具的不断增多,交通拥堵、事故频发等问题日益凸显,因此建立智能交通管理系统显得尤为重要。
本文将基于C语言,探讨智能交通管理系统的设计与实现。
一、系统需求分析智能交通管理系统主要包括车辆管理、信号灯控制、路况监测、违章检测等功能模块。
在设计系统之前,首先需要进行系统需求分析,明确系统的功能和性能需求。
通过调研市场和用户需求,确定系统的基本功能模块和扩展功能,为后续的设计和开发奠定基础。
二、系统架构设计在系统架构设计阶段,需要考虑系统的整体结构和各个模块之间的关联。
基于C语言的智能交通管理系统可以采用模块化设计,将不同功能划分为独立的模块,利用函数进行封装,提高代码的复用性和可维护性。
同时,需要考虑系统的性能优化和扩展性,确保系统在不同规模下都能够稳定运行。
三、功能模块设计车辆管理模块:包括车辆信息录入、查询、修改和删除等功能。
通过C语言实现对车辆信息的管理,保证数据的准确性和完整性。
信号灯控制模块:根据路口车流量和道路情况进行信号灯控制。
利用C语言实现信号灯状态的监测和调度,提高路口通行效率。
路况监测模块:通过传感器监测道路情况,包括拥堵情况、道路损坏等。
利用C语言实现对路况数据的采集和分析,为交通管理提供数据支持。
违章检测模块:通过摄像头等设备对车辆违章行为进行监测和识别。
借助C语言实现对违章行为的检测和记录,提高交通管理效率。
四、算法设计与优化在智能交通管理系统中,算法设计是至关重要的一环。
针对不同功能模块,需要设计相应的算法来实现功能需求。
同时,为了提高系统性能和响应速度,还需要对算法进行优化,减少时间复杂度和空间复杂度,提升系统运行效率。
五、界面设计与用户体验良好的界面设计可以提升用户体验,降低用户学习成本。
在基于C语言的智能交通管理系统中,界面设计也是至关重要的一环。
实验报告C语言数据结构全国交通模拟咨询

浙江工商大学计算机与信息工程学院数据结构实验大作业报告专业:物流1001班级: 1001学号:姓名:金渐指导教师:庄毅2011年12月8日一、问题描述处于对不同目的的旅客对交通工具有不同的要求。
例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则希望旅费尽可能省,而老年旅客则要求中转次数最少。
编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询。
【基本要求】(1)提供对城市信息进行编辑(如:添加或删除)的功能。
(2)城市之间有两种交通工具:火车和飞机。
提供对列车时刻表和飞机航班进行编辑(增设或删除)的功能。
(3)提供两种最优决策:最快到达或最省钱到达。
全程只考虑一种交通工具。
(4)旅途中耗费的总时间应该包括中转站的等候时间。
(5)咨询以用户和计算机的对话方式进行。
由用户输入起始站、终点站、最优决策原则和交通工具,输出信息:最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。
系统框图:模块说明:本系统共分1、23、4、删除城市5、添加列车6、添加航班7、删除列车或航班8、找出最小费用路线9、打印出最小费用路线10、初始化系统数据(读入内存)11、找出最快路线12、计算最快路线耗费的时间并打印13、计算最小费用路线14、主界面15、存储信息到文件16、退出下面是系统总流程图:下面是各模块示意图:三、系统测试1、主界面2、添加城市模块:输入命令 1 后,将提示输入城市名,而后返回主界面3、删除城市:输入命令2后,提示输入城市名,而后返回主界面4、添加交通路线:输入命令3,提示输入起点站和重点站,并提示选择火车或飞机,而后输入班次、出发时间、到达时间、票价,而后返回主界面原train文件:添加路线后:5、删除路线:输入命令4,输入班次,而后返回主界面原train文件:删除后ttrain文件:6、查询最小费用路线:输入命令5,并输入起点站和重点站,然后选择交通工具结果正确!7、查询时间最短路线:输入命令6,并输入起点站和重点站,然后选择交通工具四、小结从小学家里买了电脑起,我对计算机就相当感兴趣,有事没事就喜欢捣鼓捣鼓。
《C语言版交通管理系统》课程设计实验指导

任务四:数据更新与删除模块
2. 实现事务处理机制,确保数据一致性。
3. 提供友好的用户界面,方便管理员进行操作。
04
实验结果与演示
实验结果展示
实验结果展示
学生需要将实验结果以书面报告 的形式展示出来,包括程序代码、 运行结果、数据分析和结论等部 分。
实验结果评价
教师对学生的实验结果进行评估, 包括程序的正确性、效率、可读 性和可维护性等方面。
03
培养学生对实际问题的分析和解决能力,提高学生 的编程实践能力和团队协作能力。
实验要求
01
完成一个简单的交通管理系统,实现车辆信息录入、
查询、修改和删除等基本功能。
02
在实现基本功能的基础上,可适当增加其他功能,如
按车牌号查询、按车主姓名查询、统计车辆数量等。
03
保证程序的正确性、稳定性和可维护性,遵循良好的
将各个模块进行整合,实现系统整体功能。
数据结构设计
车辆信息表
存储车辆的基本信息,如车牌号、车 型、颜色等。
驾驶员信息表
存储驾驶员的基本信息,如姓名、性 别、年龄等。
违章记录表
存储违章记录的信息,如违章时间、 地点、违章内容等。
事故处理表
存储事故处理的信息,如事故时间、 地点、责任方等。
03
实验任务与步骤
任务一:数据录入模块
2. 实现添加新数据的函数,包括输入验证和错误处理。
3. 确保数据的一致性和完整性。
任务二:数据查询模块
• 数据查询模块概述:该模块允许 用户根据特定条件查询交通信息。
任务二:数据查询模块
功能要求 1. 能够按车辆ID查询车辆信息。 2. 能够按驾驶员ID查询驾驶员信息。
精编【交通运输】交通图咨询查询系统数据结构C语言

【交通运输】交通图咨询查询系统数据结构C语言xxxx年xx月xx日xxxxxxxx集团企业有限公司Please enter your company's name and contentv信息科学与工程学院《结构数据》课程设计报告课程设计名称:交通咨询系统专业班级:计算机xxx学生姓名:xxx学号:2015xxxx指导教师:xx课程设计时间:2016.07.04—2016.07.08计算机应用技术专业课程设计任务书说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页填表说明1.“课题性质”一栏:A.工程设计;B.工程技术研究;C.软件工程(如CAI课题等);D.文献型综述;E.其它。
2.“课题来源”一栏:A.自然科学基金与部、省、市级以上科研课题;B.企、事业单位委托课题;C.校、院(系、部)级基金课题;D.自拟课题。
目录1 需求分析 (1)1.1 添加交通图信息 (1)1.2 查询单源最短路径 (1)1.3 查询多源最短路径 (1)1.4 更新交通图信息 (2)1.6 读取、保存信息 (2)2 概要设计 (3)2.1 数据类型的定义 (3)2.2 功能模块结构图 (4)3 运行环境 (6)4 开发工具和编程语言 (6)5 详细设计 (7)5.1 图结构的基本操作 (7)5.1.1添加城市结点和路径结点 (8)5.1.2修改城市结点和路径结点 (8)5.1.3删除城市结点和路径结点 (8)5.1.4退出保存 (8)5.2 迪杰斯特拉算法的实现 (8)5.2.1 迪杰斯特拉算法函数 (8)5.2.2 提取迪杰斯特拉函数信息 (8)5.2.3 求多源最短路径 (8)6 程序编码 (9)7 运行结果 (41)8 心得体会 (46)9参考文献 (47)1需求分析本系统中的数据来源于标准输入设备(如键盘)和文件,可以实现对交通图城市、城市到其余城市的距离的操作,根据需要可查询某两个城市之间的最短距离、城市到各城市的最短距离,各个城市到各个城市的最短距离,以及路径。
C语言在智能交通管理系统中的设计与实现
C语言在智能交通管理系统中的设计与实现智能交通管理系统是利用先进的信息技术和通信技术,对城市道路交通进行智能化管理的系统。
在这个系统中,C语言作为一种高效、灵活的编程语言,发挥着重要的作用。
本文将介绍C语言在智能交通管理系统中的设计与实现。
1. 智能交通管理系统概述智能交通管理系统是利用计算机、通信、控制等技术手段,对城市道路交通进行实时监测、调度和管理的系统。
通过各种传感器和设备采集道路交通信息,实现交通信号灯控制、车辆识别、违章检测等功能,提高道路交通效率,减少交通事故发生率,改善城市交通环境。
2. C语言在智能交通管理系统中的应用2.1 数据结构设计在智能交通管理系统中,需要对各种数据进行有效的管理和处理。
C语言提供了丰富的数据结构和算法库,可以方便地实现各种数据结构,如链表、栈、队列等,以及各种排序和查找算法,保证系统数据的高效管理和操作。
2.2 算法设计智能交通管理系统中涉及到很多复杂的算法,如车辆识别算法、信号灯控制算法、路径规划算法等。
C语言作为一种结构化程序设计语言,可以清晰地表达这些算法逻辑,保证算法的正确性和高效性。
2.3 设备控制智能交通管理系统涉及到大量的设备控制,如传感器、摄像头、信号灯等。
C语言可以通过底层编程接口直接控制这些设备,实现数据采集、处理和控制功能。
2.4 实时性要求智能交通管理系统对实时性要求非常高,需要及时响应各种事件并做出相应处理。
C语言作为一种编译型语言,在性能上有很大优势,可以满足系统对实时性的要求。
3. C语言在智能交通管理系统中的实现3.1 系统架构设计在设计智能交通管理系统时,首先需要考虑系统架构。
通过使用C语言进行模块化设计,将系统划分为多个模块,每个模块负责不同的功能,便于代码维护和扩展。
3.2 数据采集与处理智能交通管理系统需要大量的数据进行支撑,包括车辆信息、道路信息、信号灯状态等。
通过C语言编写数据采集和处理模块,可以实现对这些数据的高效管理和处理。
基于C的智能交通系统设计与优化
基于C的智能交通系统设计与优化智能交通系统是利用先进的信息技术、通信技术和控制技术,对城市交通进行智能化管理和优化的系统。
在当今社会,随着城市化进程的加快和交通工具的普及,交通拥堵、交通事故频发等问题日益凸显,因此设计和优化智能交通系统显得尤为重要。
本文将探讨基于C语言的智能交通系统设计与优化。
1. 智能交通系统概述智能交通系统是指利用现代信息技术、通信技术和控制技术,对城市道路交通进行监测、管理和控制的系统。
其核心目标是提高道路交通效率、减少交通事故、缓解交通拥堵,为市民提供更加便捷、安全的出行环境。
2. C语言在智能交通系统中的应用C语言作为一种高级编程语言,在智能交通系统中有着广泛的应用。
其高效的运行速度和强大的功能使其成为智能交通系统设计与优化的理想选择。
在智能交通系统中,C语言可以用于实现以下功能:数据采集与处理:利用C语言编写程序,实现对各类传感器数据的采集和处理,包括车辆数量、车速、道路状况等信息的获取与分析。
信号控制:通过C语言编写程序,实现红绿灯信号的控制优化,根据实时道路情况动态调整信号灯时长,以提高道路通行效率。
路径规划:利用C语言编写算法,实现车辆路径规划功能,根据实时道路拥堵情况为车辆选择最佳行驶路径,减少车辆行驶时间。
数据存储与管理:使用C语言编写数据库管理程序,对采集到的大量数据进行存储、管理和查询,为后续数据分析提供支持。
3. 智能交通系统设计与优化3.1 数据采集与处理在智能交通系统中,数据采集是其基础环节。
通过各类传感器获取道路上车辆数量、速度等信息,并通过C语言编写程序对这些数据进行实时处理和分析。
在处理过程中,需要考虑数据的准确性和实时性,确保系统可以及时响应并做出相应调整。
3.2 信号控制优化信号控制是智能交通系统中至关重要的一环。
通过C语言编写程序,可以根据实时道路情况对信号灯进行动态调整。
例如,在高峰时段延长绿灯时间、减少红灯时间,以提高道路通过效率;在低峰时段适当减少绿灯时间、增加红灯时间,以减少车辆等待时间。
基于C的智能交通系统设计与实现
基于C的智能交通系统设计与实现智能交通系统是利用先进的信息技术和通信技术,对城市交通进行智能化管理和控制的系统。
随着城市化进程的加快和交通拥堵问题的日益突出,智能交通系统成为了解决交通问题的重要途径之一。
本文将介绍基于C语言的智能交通系统设计与实现。
1. 智能交通系统概述智能交通系统是指利用计算机、通信、控制等技术手段,对城市道路交通进行监测、管理和控制,以提高交通效率、减少交通事故、缓解交通拥堵等目的。
智能交通系统包括车辆检测、信号控制、路况监测、信息发布等功能模块。
2. C语言在智能交通系统中的应用C语言作为一种高级编程语言,具有良好的可移植性和高效性,在嵌入式系统开发中得到广泛应用。
在智能交通系统中,C语言可以用于编写各种控制算法、数据处理程序以及与硬件设备的接口程序。
3. 智能交通系统设计3.1 车辆检测模块车辆检测模块通过安装在道路上的传感器对经过车辆进行检测,并将检测到的数据传输给控制中心。
在C语言中,可以编写车辆检测算法,实现对车辆数量、速度等信息的实时监测。
3.2 信号控制模块信号控制模块根据车辆检测模块传来的数据,动态调整红绿灯信号,以优化道路通行效率。
在C语言中,可以编写信号控制算法,实现智能信号灯控制。
3.3 路况监测模块路况监测模块通过安装在道路上的摄像头或传感器对道路情况进行监测,并将监测数据传输给控制中心。
在C语言中,可以编写路况监测算法,实现对道路情况的实时监测和分析。
3.4 信息发布模块信息发布模块负责将路况信息、交通提示等信息发布给驾驶员或行人。
在C语言中,可以编写信息发布程序,实现信息内容的生成和发布。
4. 智能交通系统实现4.1 硬件平台选择在设计智能交通系统时,需要选择合适的硬件平台来支持系统运行。
常见的硬件平台包括单片机、嵌入式开发板等。
在选择硬件平台时需要考虑系统性能、成本等因素。
4.2 软件开发利用C语言编写车辆检测算法、信号控制算法、路况监测算法和信息发布程序,并将这些程序集成到一个完整的智能交通系统中。
C语言开发的智能交通管理系统设计
C语言开发的智能交通管理系统设计智能交通管理系统是利用现代信息技术对城市道路交通进行智能化管理的系统,通过实时监测、数据分析和智能决策,提高交通运行效率,减少交通拥堵,改善交通环境。
本文将介绍如何利用C语言开发智能交通管理系统,包括系统架构设计、功能模块实现等内容。
1. 系统架构设计智能交通管理系统主要包括数据采集模块、数据处理模块、决策控制模块和用户界面模块四大部分。
数据采集模块负责采集道路交通信息,包括车辆数量、车速、车辆类型等数据。
数据处理模块对采集到的数据进行处理和分析,提取有用信息。
决策控制模块根据数据分析结果进行智能决策,如调整信号灯时长、引导车辆绕行等。
用户界面模块为用户提供友好的操作界面,展示交通信息和系统运行状态。
2. 功能模块实现2.1 数据采集模块数据采集模块可以利用传感器、摄像头等设备获取道路上的交通信息。
在C语言中,可以通过串口通信或网络编程实现与外部设备的数据交互。
例如,通过串口读取传感器数据,或通过网络接收摄像头传输的图像数据。
2.2 数据处理模块数据处理模块主要负责对采集到的原始数据进行处理和分析。
在C语言中,可以编写算法对车辆数量、车速等数据进行统计和分析。
同时,还可以利用数据结构如链表、树等存储和管理数据,提高处理效率。
2.3 决策控制模块决策控制模块根据数据处理结果进行智能决策。
在C语言中,可以编写决策算法实现自动调整信号灯时长、优化路线规划等功能。
同时,还可以结合实时性操作系统技术确保系统响应速度和稳定性。
2.4 用户界面模块用户界面模块为用户提供操作界面,展示交通信息和系统状态。
在C语言中,可以利用图形库如GTK+、Qt等实现GUI界面。
通过按钮、图表等元素展示交通信息,并提供操作接口供用户进行设置和查询。
3. 系统优化与扩展为了进一步提升智能交通管理系统的性能和功能,可以考虑以下优化与扩展方向:算法优化:对数据处理和决策算法进行优化,提高系统响应速度和准确性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
交通咨询系统设计C语言Document number【980KGB-6898YT-769T8CB-246UT-18GG08】/* *建立一个模拟的交通网络(用有向网来表示),编程实现从某个城市 *出发到另一个城市所需的最短的时间及路径。
* *建立一个模拟的交通网络(用有向网来表示),编程实现从某个城市 *出发到另一个城市所需的最短的时间及路径。
* */ #define MAX_VERTEX_NUM 18#define NULL 0#define MAX_ARC_SIZE 100#define MAX_ROUTE_NUM 5#include"stdio.h"#include"stdlib.h"#include"string.h"#define False 0#define True 1#define INFINITY 10000 /*预定义*/typedef struct {int number;float expenditure;int begintime[2];int arrivetime[2];}Vehide;typedef struct {Vehide stata[MAX_ROUTE_NUM];int last;}infolist;typedef struct ArcNode {int adjvex;struct ArcNode *nextarc;infolist info;}ArcNode;typedef struct VNode {char cityname[10];ArcNode *planefirstarc,*trainfirstarc;}VNode,AdjList[MAX_VERTEX_NUM];typedef struct {AdjList vertices;int vexnum,planearcnum,trainarcnum;}ALGraph;typedef struct Node {int adjvex;int route;struct Node *next;}Node;typedef struct QNode {int adjvex;struct QNode *next;}QNode;typedef struct {QNode *front;QNode *rear;}LinkQueue;typedef struct TimeNode {int adjvex;int route;int begintime[2];int arrivetime[2];struct TimeNode *child[MAX_ROUTE_NUM];}TimeNode,*TimeTree;struct arc {int co;char vt[10];char vh[10];int bt[2];int at[2];float mo;}a[MAX_ARC_SIZE]; /*数据结构定义*/char city[MAX_VERTEX_NUM][10];int TTime[2];int time[2];int time1[2];int time2[2];int c[MAX_VERTEX_NUM];int d[MAX_VERTEX_NUM]; /*变量定义*//*各种操作说明*/void Disp();void Administer(ALGraph *G);void cityedit(ALGraph *G);void CopyTimeTree(TimeTree p,TimeTree q);void createcityfile();void CreateGraph(ALGraph *G);void createplanefile();void CreateTimeTree(TimeTree p,int i,int j,LinkQueue *Q,infolist(*arcs)[MAX_VERTEX_NUM]);void createtrainfile();int DeleteplaneArc(ALGraph *G);void DeleteQueue(LinkQueue *Q,int *x);int DeletetrainArc(ALGraph *G);void DeleteVertex(ALGraph *G);void DemandDispose(int n,ALGraph G);void DestoryTimeTree(TimeTree p);void EnterplaneArc(ALGraph *G);void EnterQueue(LinkQueue *Q,int x);void EntertrainArc(ALGraph *G);void EnterVertex(ALGraph *G);void ExpenditureDispose(int k,infolist (*arcs)[MAX_VERTEX_NUM],ALGraph G,int v0,int v1,float *M,int *final);void flightedit(ALGraph *G);void initgraph(ALGraph *G);void InitQueue(LinkQueue *Q);int IsEmpty(LinkQueue *Q);int LocateVertex(ALGraph *G,char *v);void MinExpenditure(infolist arcs,float *expenditure,int *route);void MinTime(infolist arcs,int *time,int *route);void PrintGraph(ALGraph *G);int save(ALGraph *G);void TimeDispose(int k,infolist (*arcs)[MAX_VERTEX_NUM],ALGraph G,int v0,int v1,int (*T)[2],int *final);void TimeTreeDispose(Node *head,infolist (*arcs)[MAX_VERTEX_NUM]);void trainedit(ALGraph *G);void TransferDispose(int k,infolist (*arcs)[MAX_VERTEX_NUM],ALGraph G,int v0,int v1);void UserDemand(ALGraph G);void VisitTimeTree(TimeTree p);void Disp() /*软件入口,显示函数*/{textbackground(7);textcolor(5);gotoxy(20,10);printf("--------------------------------\n");gotoxy(20,11);printf("| 交通咨询系统 Version 1.0 |\n");gotoxy(20,12);printf("| |\n");gotoxy(20,13);printf("| 一叶方舟 |\n");gotoxy(20,14);printf("| |\n");gotoxy(20,15);printf("--------------------------------\n"); gotoxy(40,20);printf("^_^ 欢迎使用 ^_^");sleep(3);clrscr();}int main() /*主函数,程序入口*//* 显示程序功能选择界面 */{ALGraph G;int i;textbackground(7);textcolor(5);clrscr();Disp();printf("请选择程序功能:\n");printf("*************************************\n"); printf("** 1=管理员管理 **\n");printf("** 2=用户咨询 **\n");printf("** 3=显示交通系统 **\n");printf("** 4=退出 **\n");printf("*************************************\n"); printf("请选择?");scanf("%d",&i);getchar();while(i!=4){clrscr();switch(i){case 1:Administer(&G);break;case 2:UserDemand(G);break;case 3:PrintGraph(&G);break;}printf("\n请选择程序功能:\n");printf("*************************************\n");printf("** 1=管理员管理 **\n");printf("** 2=用户咨询 **\n");printf("** 3=显示交通系统 **\n");printf("** 4=退出 **\n");printf("*************************************\n");printf("选择?");scanf("%d",&i);getchar();}clrscr();gotoxy(20,10);printf("--------------------------------\n");gotoxy(20,11);printf("| 指导老师:夏汉民老师 |\n");gotoxy(20,12);printf("| |\n");gotoxy(20,13);printf("| 制作:李济舟 |\n");gotoxy(20,14);printf("| |\n");gotoxy(20,15);printf("--------------------------------\n");gotoxy(40,20);printf("谢谢使用");sleep(1);gotoxy(40,20);printf("正在退出");for(i=0;i<3;i++){ printf(".");sleep(i);}return 0;}void Administer(ALGraph *G) /* 显示管理员管理项目选择界面 */int i,j=0;char password[5];be:clrscr();gotoxy(20,10);printf("-------------------------------------\n");gotoxy(20,11);printf("| 管理员管理项目 |\n");gotoxy(20,13);printf("| 1.初始化交通系统 |\n");gotoxy(20,15);printf("| 2.城市编辑 |\n");gotoxy(20,17);printf("| 3.飞机航班编辑 |\n");gotoxy(20,19);printf("| 4.列车车次编辑 |\n");gotoxy(20,20);printf("-------------------------------------\n");gotoxy(40,25);printf("请输入登陆密码(admin):");for(i=0;i<5;i++){password[i]=getch();printf("*");}if(password[0]!='a'||password[1]!='d'||password[2]!='m'||password[3]!='i '||password[4]!='n') {gotoxy(50,25);printf("输入错误,请重新输入!");j++;if(j==3)system(exit);getch();goto be;}printf("\n请选择管理项目:\n");printf("1=初始化交通系统\n2=城市编辑\n3=飞机航班编辑\n4=列车车次编辑\n5=返回上一级菜单\n");printf("选择?");scanf("%d",&i);while(i!=5)switch(i){case 1:initgraph(G); /*初始化交通系统*/ break;case 2:cityedit(G); /*城市编辑*/ break;case 3:flightedit(G); /*飞机航班编辑*/ break;case 4:trainedit(G); /*列车车次编辑*/ break;}printf("\n请选择管理项目:\n");printf("*************************************\n");printf("** 1=初始化交通系统 **\n"); printf("** 2=城市编辑 **\n");printf("** 3=飞机航班编辑 **\n");printf("** 4=列车车次编辑 **\n");printf("** 5=返回上一级菜单 **\n");printf("*************************************\n");printf("1=初始化交通系统\n2=城市编辑\n3=飞机航班编辑\n4=列车车次编辑\n5=返回上一级菜单\n");printf("选择?");scanf("%d",&i);}}void initgraph(ALGraph *G) /*初始化交通系统*//* 初始化交通系统方式选择界面 */{int i;printf("\n请选择初始化方式:\n");printf("1=键盘\n2=文档\n");printf("选择?");scanf("%d",&i);getchar();switch(i){case 1:createcityfile();createplanefile();createtrainfile();CreateGraph(G);break;case 2:CreateGraph(G);break;}}void createcityfile() /* 创建城市名称文档 */{int i=0;int j;char flag='y';FILE *fp;printf("\n请输入城市名称的信息:\n");while(flag=='y'||flag=='Y'){printf("城市名称:");gets(city[i]);i++;printf("继续输入?(Y/N)");scanf("%c",&flag);getchar();}printf("\n");if((fp=fopen("city.txt","wb"))==NULL){printf("无法打开文件!\n");return;}for(j=0;j<i;j++)fprintf(fp,"%10s",city[j]);fclose(fp);}void createplanefile() /* 创建飞机航班文档 */{int code,bt[2],at[2]; /*code航班编号,bt出发时间,at到达时间*/ float money;int i;int count;char vt[10],vh[10],flag; /*vt起始城市,vh目标城市*/FILE *fp;flag='y';count=0;while(flag=='Y'||flag=='y') /*flag为标志位,初值为1*/{printf("请输入飞机航班的信息:\n");/*提示"输入航班信息"*/printf("飞机航班编号:"); /*输入航班code*/scanf("%d",&code);getchar();printf("起始城市:"); /*输入航班的出发城市vt*/gets(vt);getchar();printf("目的城市:"); /*输入航班的到达城市vh*/gets(vh);printf("航班费用:"); /*输入机票价格money*/scanf("%f",&money);getchar();printf("起飞时间:"); /*输入航班的出发时间bt*/scanf("%d:%d",&bt[0],&bt[1]);getchar();while(bt[0]<0||bt[0]>=24||bt[1]<0||bt[1]>=60){printf("\n时间输入有误,请重新输入\n");scanf("%d:%d",&bt[0],&bt[1]);getchar();}printf("到达时间:"); /*输入航班的到达时间at*/scanf("%d:%d",&at[0],&at[1]);getchar();while(at[0]<0||at[0]>=24||at[1]<0||at[1]>=60){printf("\n时间输入有误,请重新输入\n");scanf("%d:%d",&at[0],&at[1]);getchar();}a[count].co=code; /*a 为程序头部定义的结构体*/strcpy(a[count].vt,vt);strcpy(a[count].vh,vh);a[count].bt[0]=bt[0];a[count].bt[1]=bt[1];a[count].at[0]=at[0];a[count].at[1]=at[1];a[count].mo=money;count++; /*计数值count+1*/printf("继续输入?(Y/N)"); /*提示"是否要继续输入航班信息:"*/ scanf("%c",&flag);getchar();printf("\n");}if((fp=fopen("plane.txt","wb"))==NULL) /*航班文件不能以读写形式打开*/ printf("\n无法打开文件!\n"); /*提示"无法打开文件"*/fprintf(fp,"%d",count); /*将计数值count写入航班车文件*/for(i=0;i<count;i++)if(fwrite(&a[i],sizeof(struct arc),1,fp)!=1) /*无法将a[i]写入航班文件*/ printf("\n文件写入错误!\n"); /*提示"文件无法写入"*/fclose(fp); /*关闭航班文件*/}void createtrainfile() /* 创建列车车次文档 */{int code,bt[2],at[2];float money;int i;int count;char vt[10],vh[10],flag;FILE *fp;flag='y';count=0;while(flag=='y'||flag=='Y'){printf("请输入列车车次的信息:\n");printf("列车车次编号:");scanf("%d",&code);getchar();printf("起始城市:");gets(vt);getchar();printf("目的城市:");gets(vh);printf("车次费用:");scanf("%f",&money);getchar();printf("发车时间:");scanf("%d:%d",&bt[0],&bt[1]);getchar();while(bt[0]<0||bt[0]>=24||bt[1]<0||bt[1]>=60){printf("\n时间输入有误,请重新输入\n");scanf("%d:%d",&bt[0],&bt[1]);getchar();}printf("到达时间:");scanf("%d:%d",&at[0],&at[1]);getchar();while(at[0]<0||at[0]>=24||at[1]<0||at[1]>=60){printf("\n时间输入有误,请重新输入\n");scanf("%d:%d",&at[0],&at[1]);getchar();}a[count].co=code;strcpy(a[count].vt,vt);strcpy(a[count].vh,vh);a[count].bt[0]=bt[0];a[count].bt[1]=bt[1];a[count].at[0]=at[0];a[count].at[1]=at[1];a[count].mo=money;count++;printf("继续输入?(Y/N)");scanf("%c",&flag);getchar();printf("\n");}if((fp=fopen("train.txt","wb"))==NULL)printf("\n无法打开文件!\n");fprintf(fp,"%d",count); for(i=0;i<count;i++)if(fwrite(&a[i],sizeof(struct arc),1,fp)!=1)printf("\n文件写入错误!\n");fclose(fp);}int LocateVertex(ALGraph *G,char *v) /* 城市名在交通系统中定位操作,找出城市名在图中对应结点位置 */{int j,k;j=-1;for(k=0;k<G->vexnum;k++)if(strcmp(G->vertices[k].cityname,v)==0) /*第k个结点中的城市名与传过来的城市名相同*/{j=k; /*记录位置*/break;}return(j);}void CreateGraph(ALGraph *G) /* 用city,plan,train三个文档创建城市交通系统 */{int i,j,k;int arc_num;int count1,count2;int m,t;ArcNode *p,*q;FILE *fp;i=0;if((fp=fopen("city.txt","rb"))==NULL) /*打开城市文件,文件指针返回值为空*/{printf("\n无法打开文件!\n");return;}while(!feof(fp)) /*文件不为空*/{fscanf(fp,"%10s",city[i]);i++;}fclose(fp); /*关闭文件*/j=0;while(j<i){strcpy(G->vertices[j].cityname,city[j]);/*将 city[i] 中的内容复制到图的结构体的结点数组中;*/G->vertices[j].planefirstarc=NULL; /* 图的结构体其他项赋初值;*/G->vertices[j].trainfirstarc=NULL;j++;}G->vexnum=i;if((fp=fopen("plane.txt","rb"))==NULL)printf("\n无法打开文件!\n");k=0;fscanf(fp,"%d",&count1); /*打开航班信息文件"plane.txt"*/while(k<count1){if(fread(&a[k],sizeof(struct arc),1,fp)!=1)printf("\n文件读入错误!\n");k++;}fclose(fp); /*关闭文件*/k=0; /*a的计数变量k=0*/arc_num=0; /*弧的计数变量 arc_num=0*/while(k<count1){i=LocateVertex(G,a[k].vt);/*调用函数 LocateVertex(G,a[k].vt)得到起始结点的位置 i*/j=LocateVertex(G,a[k].vh);/*调用函数 LocateVertex(G,a[k].vh)得到起始结点的位置 j*/q=G->vertices[i].planefirstarc;m=0;while(q!=NULL){if(q->adjvex==j) /*弧 q中的邻接顶点与j相等*/{t=q->st+1; /* 将数组a[i] 中的内容都复制到弧q中*/q->info.stata[t].number=a[k].co;q->info.stata[t].expenditure=a[k].mo;q->info.stata[t].begintime[0]=a[k].bt[0];q->info.stata[t].begintime[1]=a[k].bt[1];q->info.stata[t].arrivetime[0]=a[k].at[0];q->info.stata[t].arrivetime[1]=a[k].at[1];q->st=t;m=1;break;}q=q->nextarc;}if(m==0){p=(ArcNode*)malloc(sizeof(ArcNode)); /*开辟一个弧结点*/p->adjvex=j;/*将数组a[i]中的内容都复制到新的弧结点中*/p->info.stata[0].number=a[k].co;p->info.stata[0].expenditure=a[k].mo;p->info.stata[0].begintime[0]=a[k].bt[0];p->info.stata[0].begintime[1]=a[k].bt[1];p->info.stata[0].arrivetime[0]=a[k].at[0];p->info.stata[0].arrivetime[1]=a[k].at[1];p->st=0;p->nextarc=G->vertices[i].planefirstarc;G->vertices[i].planefirstarc=p; /* 将弧结点连接到适当的位置中去*/ arc_num++;}k++;G->planearcnum=arc_num;if((fp=fopen("train.txt","rb"))==NULL){printf("\n无法打开文件!\n");return;}k=0;fscanf(fp,"%d",&count2); /*打开列车信息文件"plane.txt"*/ while(k<count2){if(fread(&a[k],sizeof(struct arc),1,fp)!=1)printf("\n文件读入错误!\n");k++;}fclose(fp); /*关闭文件*/k=0; /*a的计数变量k=0;*/arc_num=0; /* 弧的计数变量 arc_num=0;*/while(k<count2){i=LocateVertex(G,a[k].vt);/* 调用函数 LocateVertex(G,a[k].vt)得到起始结点的位置 i*/ j=LocateVertex(G,a[k].vh);/* 调用函数 LocateVertex(G,a[k].vh)得到起始结点的位置 j*/ q=G->vertices[i].trainfirstarc;m=0;while(q!=NULL){if(q->adjvex==j) /*弧 q中的邻接顶点与j相等*/{t=q->st+1; /*将数组a[i] 中的内容都复制到弧q中*/ q->info.stata[t].number=a[k].co;q->info.stata[t].expenditure=a[k].mo;q->info.stata[t].begintime[0]=a[k].bt[0];q->info.stata[t].begintime[1]=a[k].bt[1];q->info.stata[t].arrivetime[0]=a[k].at[0];q->info.stata[t].arrivetime[1]=a[k].at[1];q->st=t;m=1;break;}q=q->nextarc;}if(m==0)p=(ArcNode*)malloc(sizeof(ArcNode)); /*开辟一个弧结点*/p->adjvex=j; /*将数组a[i]中的内容都复制到新的弧结点中*/p->info.stata[0].number=a[k].co;p->info.stata[0].expenditure=a[k].mo;p->info.stata[0].begintime[0]=a[k].bt[0];p->info.stata[0].begintime[1]=a[k].bt[1];p->info.stata[0].arrivetime[0]=a[k].at[0];p->info.stata[0].arrivetime[1]=a[k].at[1];p->st=0;p->nextarc=G->vertices[i].trainfirstarc;G->vertices[i].trainfirstarc=p; /*将弧结点连接到适当的位置中去*/ arc_num++;}k++;}G->trainarcnum=arc_num;}int save(ALGraph *G) /* 保存城市交通系统到相应的文档 */{int i,j,k,t;ArcNode *q;FILE *fp;j=0;while(j<G->vexnum){strcpy(city[j],G->vertices[j].cityname);j++;}i=0;if((fp=fopen("city.txt","wb"))==NULL)printf("\n错误,无法打开文件!\n");while(i<G->vexnum){fprintf(fp,"%10s",city[i]);i++;}fclose(fp);k=0;for(i=0;i<G->vexnum;i++){q=G->vertices[i].planefirstarc;while(q!=NULL)for(t=0;t<=q->st;t++){strcpy(a[k].vt,G->vertices[i].cityname);strcpy(a[k].vh,G->vertices[q->adjvex].cityname); a[k].co=q->info.stata[t].number;a[k].mo=q->info.stata[t].expenditure;a[k].bt[0]=q->info.stata[t].begintime[0];a[k].bt[1]=q->info.stata[t].begintime[1];a[k].at[0]=q->info.stata[t].arrivetime[0];a[k].at[1]=q->info.stata[t].arrivetime[1];k++;}q=q->nextarc;}}if((fp=fopen("plane.txt","wb"))==NULL){printf("\n无法打开文件!\n");return 0;}i=0;fprintf(fp,"%d",k);while(i<k){if(fwrite(&a[i],sizeof(struct arc),1,fp)!=1) printf("\n文件写入错误!\n");i++;}fclose(fp);k=0;for(i=0;i<G->vexnum;i++){q=G->vertices[i].trainfirstarc;while(q!=NULL){for(t=0;t<=q->st;t++){strcpy(a[k].vt,G->vertices[i].cityname);strcpy(a[k].vh,G->vertices[q->adjvex].cityname); a[k].co=q->info.stata[t].number;a[k].mo=q->info.stata[t].expenditure;a[k].bt[0]=q->info.stata[t].begintime[0];a[k].bt[1]=q->info.stata[t].begintime[1];a[k].at[0]=q->info.stata[t].arrivetime[0];a[k].at[1]=q->info.stata[t].arrivetime[1];k++;}q=q->nextarc;}}if((fp=fopen("train.txt","wb"))==NULL){printf("\n无法打开文件!\n");return 0;}i=0;fprintf(fp,"%d",k);while(i<k){if(fwrite(&a[i],sizeof(struct arc),1,fp)!=1)printf("\n文件写入错误!\n");i++;}fclose(fp);return 1;}void cityedit(ALGraph *G) /* 显示城市编辑项目选择界面 */ {int i;printf("\n请选择城市编辑项目:\n");printf("1=增加城市\n2=删除城市\n");printf("选择?");scanf("%d",&i);getchar();if(i==1)EnterVertex(G);if(i==2)DeleteVertex(G);}void EnterVertex(ALGraph *G) /* 增加城市 */{char v[10],c;int i;printf("\n请输入新增城市的名称:");gets(v);i=LocateVertex(G,v);if(i>=0&&i<G->vexnum){printf("\n错误!此城市已存在\n");return;}else{printf("\n确认?(Y/N)");c=getchar();getchar();if(c=='Y'||c=='y'){i=G->vexnum;strcpy(G->vertices[i].cityname,v);G->vertices[i].planefirstarc=NULL;G->vertices[i].trainfirstarc=NULL;G->vexnum=i+1;save(G);}else return;}}void DeleteVertex(ALGraph *G)/* G是程序头部定义的结构体*//* 删除城市 */{int i,j,k,n;char v[10],c;ArcNode *p,*q,*m;printf("\n请输入删除的城市:"); /*提示"输入删除城市名"*/gets(v);printf("\n确认?(Y/N)"); /*提示"是否确定要删除(Y/N)"*/c=getchar();getchar();if(c=='Y'||c=='y'){n=0; /*0是记数标志,控制循环次数*/while(n<G->vexnum&&strcmp(G->vertices[n].cityname,v)!=0)/*n<图G表头接点总个数&&图G的存储城市名与v不同,G表头结点总个数比实际大1*/n++;/*记数值n+1*/if(n==G->vexnum) /*n==图G表头结点总个数*/printf("\n错误!无法找到此城市!\n"); /*提示"无法找到此城市"*/else{i=LocateVertex(G,v); /*利用G函数找到此城市名所处在G中位置*/p=G->vertices[i].planefirstarc;while(p!=NULL){q=p;p=p->nextarc;free(q); /*删除从此结点出发的所有航班弧*/}p=G->vertices[i].trainfirstarc;while(p!=NULL){q=p;p=p->nextarc;free(q); /*删除从此结点出发的所有列车弧*/}for(j=i;j<G->vexnum-1;j++){strcpy(G->vertices[j].cityname,G->vertices[j+1].cityname);/*将G第j个结点的信息依前移1位*/G->vertices[j].planefirstarc=G->vertices[j+1].planefirstarc; G->vertices[j].trainfirstarc=G->vertices[j+1].trainfirstarc;}G->vertices[j].planefirstarc=NULL; /*将G第j个结点的信息置空*/G->vertices[j].trainfirstarc=NULL;for(k=0;k<G->vexnum-1;k++) /*以下是删除所有指向此结点的航班弧*/{p=G->vertices[k].planefirstarc;while(p!=NULL){if(p->adjvex>i){p->adjvex=p->adjvex-1;q=p;p=p->nextarc; /*p指向下一条飞机弧*/}Elseif(p->adjvex==i) /*该弧指向的顶点位置(p->adjvex )== i*/{if(p==G->vertices[k].planefirstarc) /*p指向图G中k结点的第一条飞机弧*/ {m=p;G->vertices[k].planefirstarc=p->nextarc;/*将图G中k结点的第二条飞机弧改为第一弧*/p=p->nextarc; /*p指向下一条飞机弧*/free(m); /*释放(m)*/}Else{q->nextarc=p->nextarc; /*将p的下一条弧赋给q的下一条弧*/m=p;p=p->nextarc; /*p指向下一条飞机弧*/free(q); /*释放(q)*/}}Else{q=p;p=p->nextarc; /*p指向下一条飞机弧*/}}}for(k=0;k<G->vexnum-1;k++) /*以下是删除所有指向此结点的列车弧*/{p=G->vertices[k].trainfirstarc; /*p指向图G中k结点的第一条列车弧*/ while(p!=NULL){if(p->adjvex>i) /*该弧指向的顶点位置(p->adjvex)>i */{p->adjvex=p->adjvex-1; /*将该弧指向顶点位置-1*/q=p;p=p->nextarc; /*p指向下一条列车弧*/}Elseif(p->adjvex==i) /*该弧指向的顶点位置(p->adjvex)==i*/{if(p==G->vertices[k].trainfirstarc)/*p指向图G中k结点的第一条列车*/ {m=p;G->vertices[k].trainfirstarc=p->nextarc;/*将图G中k结点的第二条列车弧改为第一弧*/p=p->nextarc;free(m);}Else{q->nextarc=p->nextarc;m=p;p=p->nextarc;free(q);}}else{q=p;p=p->nextarc;}}}}G->vexnum--;save(G);}else return;}void flightedit(ALGraph *G) /* 飞机航班编辑项目选择界面 */ {int i; /* char q; */printf("\n请选择飞机航班编辑项目:\n");printf("1=新增航班\n2=删除航班\n");printf("选择?");scanf("%d",&i);getchar();if(i==1)EnterplaneArc(G);if(i==2)DeleteplaneArc(G);}void trainedit(ALGraph *G) /* 列车车次编辑项目选择界面 */ {int i; /* char q; */printf("\n请选择列车车次编辑项目:\n");printf("1=新增车次\n2=删除车次\n");printf("选择?");scanf("%d",&i);getchar();if(i==1)EntertrainArc(G);if(i==2)DeletetrainArc(G);}void EnterplaneArc(ALGraph *G) /* 增加飞机航班 */ {int i,j,bt[2],at[2];int code;float money;int m,t;char vt[10],vh[10],c;ArcNode *p,*q;printf("\n请输入新增飞机航班的信息:\n");printf("飞机航班编号:");scanf("%d",&code);getchar();printf("起始城市:");gets(vt);getchar();printf("目的城市:");gets(vh);printf("航班费用:");scanf("%f",&money);getchar();printf("起飞时间:");scanf("%d:%d",&bt[0],&bt[1]);getchar();while(bt[0]<0||bt[0]>=24||bt[1]<0||bt[1]>=60){printf("\n时间输入有误,请重新输入\n");scanf("%d:%d",&bt[0],&bt[1]);getchar();}printf("到达时间:");scanf("%d:%d",&at[0],&at[1]);getchar();while(at[0]<0||at[0]>=24||at[1]<0||at[1]>=60){printf("\n时间输入有误,请重新输入\n");scanf("%d:%d",&at[0],&at[1]);getchar();}printf("\n确认?(Y/N)");c=getchar();getchar();if(c=='Y'||c=='y'){i=LocateVertex(G,vt);j=LocateVertex(G,vh);if(i==-1){printf("\n错误!无法找到起始城市\n"); return;}if(j==-1){printf("\n错误!无法找到到达城市\n"); return;}q=G->vertices[i].planefirstarc;m=0;while(q!=NULL){if(q->adjvex==j){t=q->st+1;q->info.stata[t].number=code;q->info.stata[t].expenditure=money;q->info.stata[t].begintime[0]=bt[0];q->info.stata[t].begintime[1]=bt[1];q->info.stata[t].arrivetime[0]=at[0]; q->info.stata[t].arrivetime[1]=at[1];q->st=t;m=1;break;}q=q->nextarc;}if(m==0){p=(ArcNode*)malloc(sizeof(ArcNode));p->adjvex=j;p->info.stata[0].number=code;p->info.stata[0].expenditure=money;p->info.stata[0].begintime[0]=bt[0];p->info.stata[0].begintime[1]=bt[1];p->info.stata[0].arrivetime[0]=at[0]; p->info.stata[0].arrivetime[1]=at[1];p->st=0;p->nextarc=G->vertices[i].planefirstarc;G->vertices[i].planefirstarc=p;G->planearcnum++;}save(G);}else return;}void EntertrainArc(ALGraph *G) /* 增加列车车次 */ {int i,j,bt[2],at[2];int code;float money;int m,t;char vt[10],vh[10],c;ArcNode *p,*q;printf("\n请输入新增列车车次的信息:\n");printf("列车车次编号:");scanf("%d",&code);getchar();printf("起始城市:");gets(vt);getchar();printf("目的城市:");gets(vh);printf("车次费用:");scanf("%f",&money);getchar();printf("发车时间:");scanf("%d:%d",&bt[0],&bt[1]);getchar();while(bt[0]<0||bt[0]>=24||bt[1]<0||bt[1]>=60) {printf("\n时间输入有误,请重新输入\n");scanf("%d:%d",&bt[0],&bt[1]);getchar();}printf("到达时间:");scanf("%d:%d",&at[0],&at[1]);getchar();while(at[0]<0||at[0]>=24||at[1]<0||at[1]>=60){printf("\n时间输入有误,请重新输入\n");scanf("%d:%d",&at[0],&at[1]);getchar();}printf("\n确认?(Y/N)");c=getchar();getchar();if(c=='Y'||c=='y'){i=LocateVertex(G,vt);j=LocateVertex(G,vh);if(i==-1){printf("\n错误!无法找到起始城市\n"); return;}if(j==-1){printf("\n错误!无法找到到达城市\n"); return;}q=G->vertices[i].trainfirstarc;m=0;while(q!=NULL){if(q->adjvex==j){t=q->st+1;q->info.stata[t].number=code;q->info.stata[t].expenditure=money;q->info.stata[t].begintime[0]=bt[0]; q->info.stata[t].begintime[1]=bt[1]; q->info.stata[t].arrivetime[0]=at[0]; q->info.stata[t].arrivetime[1]=at[1]; q->st=t;m=1;break;}q=q->nextarc;}if(m==0){p=(ArcNode*)malloc(sizeof(ArcNode));p->adjvex=j;p->info.stata[0].number=code;p->info.stata[0].expenditure=money;p->info.stata[0].begintime[0]=bt[0];p->info.stata[0].begintime[1]=bt[1];p->info.stata[0].arrivetime[0]=at[0];p->info.stata[0].arrivetime[1]=at[1];p->st=0;p->nextarc=G->vertices[i].trainfirstarc;G->vertices[i].trainfirstarc=p;G->trainarcnum++;}save(G);}else return;}int DeleteplaneArc(ALGraph *G) /* 删除飞机航班 */ {int i,j;int code;char vt[10],vh[10],c;int n;int k;ArcNode *p,*q;printf("\n请输入删除飞机航班的信息:\n");printf("飞机航班的编号:");scanf("%d",&code);getchar();printf("起始城市:");gets(vt);getchar();printf("目的城市:");gets(vh);printf("\n确认?(Y/N)");c=getchar();getchar();if(c=='Y'||c=='y'){i=LocateVertex(G,vt);j=LocateVertex(G,vh);if(i==-1){printf("\n错误!无法找到起始城市\n");return 0;}if(j==-1){printf("\n错误!无法找到目的城市\n");return 0;}p=G->vertices[i].planefirstarc;q=p;while(p!=NULL){if(p->adjvex==j){n=-1;for(k=0;k<=p->st;k++){if(p->info.stata[k].number==code){n=k;break;}}if(n!=-1)if(p->st==0){if(q==p)G->vertices[i].planefirstarc=p->nextarc;elseq->nextarc=p->nextarc;free(p);}else{for(k=n;k<p->st;k++){p->info.stata[k].number=p->info.stata[k+1].number; p->info.stata[k].expenditure=p->info.stata[k+1].expenditure; p->info.stata[k].begintime[0]=p->info.stata[k+1].begintime[0]; p->info.stata[k].begintime[1]=p->info.stata[k+1].begintime[1]; p->info.stata[k].arrivetime[0]=p->info.stata[k+1].arrivetime[0]; p->info.stata[k].arrivetime[1]=p->info.stata[k+1].arrivetime[1]; } p->st=p->st-1;}elseprintf("\n在此两城市之间无法找到No.%d飞机航班\n",code);save(G);return 0;}q=p;。