数据结构 公交路线管理模拟系统

合集下载

C语言课程设计报告--公交路线管理系统

C语言课程设计报告--公交路线管理系统

合肥学院计算机科学与技术系课程设计报告2011 ~2012 学年第二学期课程面向过程综合设计课程设计名称公交路线管理系统学生姓名学号**********专业班级指导教师2012 年6 月一、设计思想我的系统主要功能是实现对公交路线的查询管理和维护。

众所周知,公交车在每一个城市中都有着非常大的作用,几乎每个市民都要用到公交车。

以及公交车的路线经常会有所改动。

因此如果使用我的这个系统,就可以及时的对路线信息进行修改和保存可以很好地满足市民的查询,方便人民的生活。

而且该系统使用起来也很方便。

用户只需根据显示的提示信息进行选择和输入就可以实现你要求的功能查询到你需要的信息。

本系统具有显示路线信息、添加线路信息、删除线路信息、修改线路信息、查询信息的功能。

用户们可以根据自己所需要的情况进行相应的功能选择,得到自己所需要的信息。

其具体功能简单描述如下:(1)显示路线信息:即将路线信息显示到屏幕中,供用户查看。

该功能比较简单,在这里不具体说明。

(2)添加路线信息:即添加一条新的公交路线或者是某一条路线上的站点。

每次可以添加一条路线信息,若用户想添加多条路线信息的话可以重复执行该功能,同样的,添加站点的话也是每一次添加一个站点,若用户想添加多条路线信息的话也只需要重复执行该功能即可。

这样,就实现了对公交路线的添加信息管理。

(3)删除路线信息:即能删除掉一条你所不需要的公交路线信息和某一条路线上的站点。

若要删除路线时只需要输入你要删除的公交路线号即可,若要删除站点也只需输入你要删除的站点序号,不需要输入该站点名称。

(4)修改路线信息:即能修改一条你需要该的路线信息。

修改内容包括:修改该条公交路线号、修改站点名称(输入新的信息时该条路线的站点长度不能改变,若要改变站点长促可以选择增加和删除功能,即可实现)。

(5)查询路线信息:即能够查找出你要的公交路线信息和总共有多少站。

简单地说,就是用户先选择你要查询的公交路线号,在输入起点站和终点站名称,然后系统就会自动显示出起点站和终点站之间共有多少站点,以及起点站和终点站之间所有站点的序号和名称,从而使用户一目了然的知道站点信息,而不需要像看地图那样一个站点一个站点的用肉眼进行查找,这就为用户节省了很多时间。

数据结构—交通系统

数据结构—交通系统

数据结构—交通系统在我们的日常生活中,交通系统是一个极其复杂但又至关重要的组成部分。

它就像是一个庞大的、不断运转的机器,将人们从一个地方运输到另一个地方,保障着城市和社会的正常运转。

而在这个复杂的系统背后,数据结构起着不可或缺的作用。

想象一下,每天有成千上万的车辆在道路上行驶,有无数的行人穿梭于街头巷尾,还有各种公共交通工具在城市中穿梭。

如何有效地管理和协调这一切,以确保交通的流畅、安全和高效?这就需要依靠数据结构来实现。

首先,让我们来谈谈交通流量数据。

这是交通系统中最基本也是最重要的数据之一。

通过在道路上设置传感器、摄像头等设备,我们可以实时收集到车辆的数量、速度、行驶方向等信息。

这些数据被整理和存储起来,形成了一个庞大的数据库。

而这个数据库的组织方式,就是一种数据结构。

比如说,我们可以使用链表来存储交通流量数据。

链表的特点是可以方便地进行插入和删除操作,这对于实时更新交通流量信息非常有用。

每当有新的数据产生,我们可以迅速地将其添加到链表中;而当某些数据过时或者不再需要时,也可以轻松地将其从链表中删除。

另外,队列这种数据结构在交通系统中也有广泛的应用。

比如在十字路口的信号灯控制中,车辆可以被看作是在一个队列中等待通行。

信号灯按照一定的规则依次放行队列中的车辆,从而保证交通的有序进行。

队列的先进先出原则很好地模拟了这种场景,使得交通控制更加合理和高效。

除了交通流量数据,路线规划也是交通系统中的一个重要环节。

当我们使用导航软件规划出行路线时,背后其实是一系列复杂的数据结构和算法在起作用。

例如,图这种数据结构被广泛应用于路线规划中。

我们可以将城市的道路网络看作是一个图,其中节点代表道路的交叉点,边代表道路段。

通过对这个图进行搜索和分析,导航软件可以找到从起点到终点的最优路径。

在图的搜索算法中,迪杰斯特拉算法是一种常用的方法。

它能够计算出图中一个节点到其他所有节点的最短路径。

当我们输入起点和终点后,导航软件就会运用这种算法,在道路网络的图中找到最短或者最快的路线,为我们提供准确的导航指引。

数据结构公交换乘系统

数据结构公交换乘系统

数据结构公交换乘系统公交换乘系统是现代城市交通系统中的重要组成部分,它为乘客提供了方便快捷的出行方式。

在一个繁忙的城市中,合理规划公交线路以及实现高效的换乘是提高公交系统效率的关键。

为了实现这一目标,数据结构在公交换乘系统的设计与实现中起着重要的作用。

一、问题描述公交换乘系统的目标是为乘客提供最佳的换乘路线。

给定起点和终点,系统需要计算出最短的换乘路线以及相应的换乘次数和换乘站点。

为了实现这一目标,我们需要使用合适的数据结构来存储和处理公交线路数据。

二、数据结构选择在设计公交换乘系统时,我们可以使用多种数据结构来存储和处理公交线路数据。

以下是几种常用的数据结构:1. 图(Graph):公交线路可以被看作是一个有向图,图的节点表示公交站点,图的边表示公交线路。

使用图数据结构可以方便地表示公交线路之间的关系,以及计算最短路径。

2. 队列(Queue):在公交换乘系统中,乘客需要按照先后顺序排队等待上车。

队列数据结构可以很好地模拟这一过程,保证乘客按照先来先服务的原则进行换乘。

3. 栈(Stack):在某些情况下,公交线路可能需要进行回溯或者撤销操作。

栈数据结构可以很好地支持这些操作,保证系统的灵活性和可靠性。

根据公交换乘系统的需求,我们可以选择合适的数据结构来存储和处理公交线路数据。

三、数据结构的实现1. 图的实现在公交换乘系统中,我们可以使用邻接矩阵或邻接表来表示公交线路的图结构。

邻接矩阵是一个二维数组,其中的元素表示两个公交站点之间是否有直接的公交线路。

如果两个站点之间有直接线路,则对应位置的元素为1,否则为0。

邻接矩阵的优点是查询两个站点之间是否有直接线路的时间复杂度为O(1),但是它的缺点是占用较多的存储空间。

邻接表是一种链表的数组,其中的每个链表表示一个公交站点的邻居站点。

邻接表的优点是占用较少的存储空间,但是查询两个站点之间是否有直接线路的时间复杂度为O(k),其中k是邻居站点的数量。

2. 队列的实现在公交换乘系统中,我们可以使用数组或链表来实现队列数据结构。

数据结构公交换乘系统

数据结构公交换乘系统

数据结构公交换乘系统一、系统概述数据结构公交换乘系统是一种基于数据结构算法的智能化交通规划系统,旨在提供高效、准确的公交换乘服务。

该系统通过分析用户出发地和目的地,结合公交线路数据、交通拥堵情况等信息,计算出最佳的公交换乘方案,为用户提供准确的出行指导。

二、系统功能1. 用户注册与登录用户可以通过手机号码或邮箱注册账号,并通过账号登录系统。

登录后,用户可以享受系统提供的各项功能。

2. 输入出发地和目的地用户可以在系统界面中输入出发地和目的地的信息,包括地点名称、地理坐标等。

系统将根据用户输入的信息进行后续处理。

3. 公交线路查询系统根据用户输入的出发地和目的地,查询公交线路数据,并进行路径规划。

系统将根据用户的出行需求和实时交通情况,计算出最佳的公交换乘方案。

4. 换乘方案展示系统将计算出的最佳换乘方案展示给用户,包括具体的公交线路、乘车站点、换乘路线等信息。

用户可以根据系统提供的方案进行出行决策。

5. 实时交通信息更新系统会实时获取交通拥堵情况、公交车实时位置等信息,并对方案进行动态调整。

用户可以获取最新的交通信息,以便做出更合理的出行决策。

6. 路线导航用户选择最佳换乘方案后,系统将提供路线导航功能,指导用户如何步行至乘车站点、换乘公交线路及下车位置。

系统可以通过地图、文字等方式提供导航指引。

7. 历史记录与收藏系统会记录用户的出行历史,并提供历史记录查询功能。

用户还可以将常用的出行方案收藏起来,方便下次查询。

三、系统设计1. 数据存储系统需要存储大量的公交线路数据、地理信息数据等。

可以采用数据库来存储这些数据,以便系统能够高效地进行查询和处理。

2. 数据结构设计系统需要设计合适的数据结构来存储和处理公交线路数据、地理信息数据等。

可以使用图、树、队列等数据结构来表示和计算公交线路、路径规划等。

3. 算法设计系统需要设计高效的算法来进行公交线路查询和路径规划。

可以使用最短路径算法、深度优先搜索算法等来计算最佳换乘方案。

数据结构—交通系统

数据结构—交通系统

数据结构—交通系统数据结构—交通系统1:引言交通系统是一个城市或地区顺畅运行的重要组成部分。

为了有效管理和优化交通流量,需要设计和实现一个高效的交通系统。

本文档将介绍一个基于数据结构的交通系统设计。

2:整体架构交通系统可以分为以下几个模块:2.1 路网管理模块该模块负责管理整个路网的基础数据,包括道路、交叉口、车道、信号灯等信息。

2.2 路况监测模块该模块通过传感器和摄像头等设备对交通路况进行实时监测,并将数据反馈给系统。

2.3 路径规划模块该模块根据用户的起点和终点,利用路网数据和实时路况信息,计算出最优路径。

2.4 交通管理模块该模块根据实时路况和路径规划结果,控制信号灯、调整车道使用情况,以优化交通流量。

3:路网管理模块3.1 道路管理道路包括道路名称、起点和终点位置、道路长度等属性。

可以使用线性表或图来表示道路之间的连接关系。

3.2 交叉口管理交叉口是道路交汇的地方,包括交叉口名称、交叉口坐标、交通灯状态等属性。

可以使用树来表示交叉口的层级关系。

3.3 车道管理车道是道路上划分出的车辆行驶通道,包括车道编号、车道容量、车道速度限制等属性。

可以使用链表或数组来表示车道之间的关系。

4:路况监测模块4.1 传感器数据采集通过部署传感器设备,采集道路状况、车辆数量等数据。

可以使用数组或链表来存储和管理传感器数据。

4.2 图像识别技术利用摄像头采集交通图片,并通过图像识别技术分析车辆数量、车辆类型等信息。

可以使用图像处理算法来实现图像识别功能。

5:路径规划模块5.1 起点和终点选择用户选择起点和终点,并提供其他限制条件,例如出行时间、交通工具等。

5.2 最短路径算法利用最短路径算法,通过路网数据和实时路况信息,计算出起点到终点的最优路径。

可以使用Dijkstra算法、A算法等来实现最短路径计算。

6:交通管理模块6.1 信号灯控制根据交通流量和道路状况,动态调整信号灯的时间间隔,以控制交通流量。

6.2 车道使用管理根据车流量和道路容量,动态调整车道使用情况,例如开放或关闭车道,以优化交通流量。

大数据结构 公交路线管理系统模拟系统

大数据结构 公交路线管理系统模拟系统

《数据结构》课程设计报告一、课程设计名称公交线路管理模拟系统二、实用工具软件Microsoft visual C++ 6.0三、课程设计容简介1、实践目的1)、掌握图的概念、图的两种存储结构(邻接矩阵和邻接表)的存储思想及其存储实现;2)、掌握上机实现图的基本方法;3)、掌握有关图的操作并用高级语言编程实现;4)、熟练掌握图的深度、广度优先遍历算法思想及其程序实现;5)、掌握图的常见应用算法的思想及其程序实现。

2、实践要求1)、掌握本章实践的算法;2)、上机运行本章的程序,保存和打印出程序的运行结果,并结合程序进行分析;3)、按照你对图的操作需要,重新改写程序并运行,打印出文件清单和运行结果;4)、注意理解各算法实现时所采用的存储结构;5)、注意正、逆邻接表。

3、系统简介及设计思路本项目是对公交车路线信息的简单模拟,以完成建立公交路线信息、修改公交路线信息和删除公交路线信息等功能。

本项目的实质是完成对公交路线信息的建立、查找、插入、修改、删除等功能,可以首先定义项目的数据结构,然后将每个功能写成一个函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得出运行结果。

公交站点之间的关系可以是任意的,任意两个站点之间都可能相关。

而在图形结构中,结点之间的关系可以是任意的,图中任意两个数据之间都可能相关。

所以可以用图形结构来表示n个公交站点之间及站点之间可能设置的公交路线,其中网的顶点表示公交站点,边表示两个站点之间的路线,赋予边的权值表示相应的距离。

因为公交路线是有一定的连续关系的,如果想输出从某一个起始点开始到某一终点结束的公交路线,就需要找到从某一点开始的第一个邻接点和下一个邻接点。

因为在邻接表中容易找到任一顶点的第一个邻接点和下一个邻接点,所以本项目使用了图的邻接表存储结构。

4、程序设计流程为了创建公交路线,首先建立结构体载入公交车的相关信息:名称、司机、起始站、终点站、站数以及距离。

利用邻接表把站点与站点之间的信息储存起来。

数据结构 公交路线管理模拟系统

数据结构 公交路线管理模拟系统

《数据结构》课程设计报告一、课程设计名称公交线路管理模拟系统二、实用工具软件Microsoft visual C++ 6.0三、课程设计内容简介1、实践目的1)、掌握图的概念、图的两种存储结构(邻接矩阵和邻接表)的存储思想及其存储实现;2)、掌握上机实现图的基本方法;3)、掌握有关图的操作并用高级语言编程实现;4)、熟练掌握图的深度、广度优先遍历算法思想及其程序实现;5)、掌握图的常见应用算法的思想及其程序实现。

2、实践要求1)、掌握本章实践的算法;2)、上机运行本章的程序,保存和打印出程序的运行结果,并结合程序进行分析;3)、按照你对图的操作需要,重新改写程序并运行,打印出文件清单和运行结果;4)、注意理解各算法实现时所采用的存储结构;5)、注意正、逆邻接表。

3、系统简介及设计思路本项目是对公交车路线信息的简单模拟,以完成建立公交路线信息、修改公交路线信息和删除公交路线信息等功能。

本项目的实质是完成对公交路线信息的建立、查找、插入、修改、删除等功能,可以首先定义项目的数据结构,然后将每个功能写成一个函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得出运行结果。

公交站点之间的关系可以是任意的,任意两个站点之间都可能相关。

而在图形结构中,结点之间的关系可以是任意的,图中任意两个数据之间都可能相关。

所以可以用图形结构来表示n个公交站点之间及站点之间可能设置的公交路线,其中网的顶点表示公交站点,边表示两个站点之间的路线,赋予边的权值表示相应的距离。

因为公交路线是有一定的连续关系的,如果想输出从某一个起始点开始到某一终点结束的公交路线,就需要找到从某一点开始的第一个邻接点和下一个邻接点。

因为在邻接表中容易找到任一顶点的第一个邻接点和下一个邻接点,所以本项目使用了图的邻接表存储结构。

4、程序设计流程为了创建公交路线,首先建立结构体载入公交车的相关信息:名称、司机、起始站、终点站、站数以及距离。

利用邻接表把站点与站点之间的信息储存起来。

数据结构—交通指南系统

数据结构—交通指南系统

南通大学数据结构实验课实验报告学生姓名所在院系专业学号指导教师南通大学2013年 12 月 11 日交通指南系统1.问题描述假设以一个带权有向图表示某一区域的公交线路图,图中顶点代表一些区域中的重要站点,弧代表已有的公交线路,弧上的权表示该线路上的票价(或搭乘所需时间),试设计一个交通指南系统,指导前来咨询者以最低的票价或最少的时间从区域中的某一站点到达另一站点。

2.基本要求(1)设计结点和图的存储结构;(2)设计任意两点最短路径方法;(3)输入:图的相关信息以建立公交线路网,以及公交线路网咨询的任意两个站点;(4)输出:两个站点间一条最短的简单路径。

3.实现提示(1)结点和图的存储结构typedef struct node{ int no;float wgt;struct node*next;}edgenode;typedef struct{ char vtx;edgenode*link;} vexnode;typedef vexnode Graph[n];;void Floyd(Graph G,float A[n][n],int p[n][n]){ int i,j,k;for(i=0;i<n;i++)fot(j=0;j<n;j++){ A[i][j]=G[i][j];P[i][j]=-1;}for(k=0;k<n;k++)for(i=0;i<n;i++)for(j=0;j<n;j++)if(A[i][k]+A[k][j]<A[i][j]){ p[i][j]=k;A[i][j]=A[i][k]+A[k][j];}}(2)算法提示采用任意两点最短路径的相关算法。

4.算法设计(1)结点类型:struct ArcCell{int adj; //存放弧长bool *info; //是否用过该弧};struct _MGraph{char vexs[20]; //存放站点ArcCell arcs[20][20]; //<i,j>int vexnum;int arcnum;};(2)类定义:class MGraph //没用私有成员{public:_MGraph mgraph;//void DestroyGraph(); //析构函数销毁图int LocateVex (char u); // 返回顶点在图中的位置bool CreateDN(); //构造有向网void ShortestPath_FLOYD(Path &P,Distanc &D);};(3)构造有向网:bool MGraph::CreateDN()//构造有向网{int i,j ,w;char v1, v2;cout<<"请输入站点个数,直接线路的条数: ";cin>>mgraph.vexnum>>mgraph.arcnum ;cout<<"\n请输入各站点名: ";for(i = 0;i<mgraph.vexnum;i++)//构造顶点向量{cin>>mgraph.vexs[i];}for(i = 0;i<mgraph.vexnum;i++) //初始化邻接矩阵{for(j = 0;j<mgraph.vexnum;j++){if(i==j)mgraph.arcs[i][j].adj = 0;elsemgraph.arcs[i][j].adj = 20000; //infinity;mgraph.arcs[i][j].info = false;}}for(i = 0;i<mgraph.arcnum;i++) //构造邻接矩阵{cout<<"\n请输入一条线路的起点,终点,距离(公里): ";cin>>v1>>v2>>w;int m = LocateVex(v1);int n = LocateVex(v2);mgraph.arcs[m][n].adj = w; // <v1, v2>的权值}return true;}(4)销毁有向图:void MGraph::DestroyGraph(){for(int i = 0 ;i<mgraph.vexnum;i++)for(int j = 0;j<mgraph.vexnum;j++){if(mgraph.arcs[i][j].info){delete []mgraph.arcs[i][j].info;mgraph.arcs[i][j].info = false;}}mgraph.vexnum = 0;mgraph.arcnum = 0;}(5)定位点:int MGraph::LocateVex(char u){for(int i = 0 ;i<20;i++){if(u == mgraph.vexs[i]){return i;}}return -1;}(6)最短路径void MGraph::ShortestPath_FLOYD(Path &P,Distanc &D)//求每对顶点间的最短路径// 用Floyd算法求有向网G中各对顶点v和w之间的最短路径P[v][w]及其带权长度D[v][w]// 若P[v][w][u]为TRUE,则u是从v到w当前求得最短路径上的顶点。

公交线路管理系统的设计

公交线路管理系统的设计

公交线路管理系统的设计一、概述公交线路管理系统是一种集车辆调度、线路规划、票务管理和数据分析为一体的综合管理系统。

它通过信息化技术手段,帮助公交公司实现线路资源的优化配置,提高运行效率和服务质量。

本文将对公交线路管理系统的设计进行详细阐述。

二、系统架构1. 前端界面:通过网页或手机App展示给用户进行操作,实现用户注册、线路查询、车辆调度等功能。

2.后台数据库:用于存储公交线路、车辆信息、票务信息等数据。

3.中间件:用于数据的传输与交互,将用户请求传递给后台数据库,并将数据库返回的数据展示给用户。

三、功能模块1.用户管理模块用户管理模块主要实现用户注册、登录和权限管理。

用户可以通过注册功能进行账号注册,并通过登录功能获取访问系统的权限。

系统管理员可以对用户权限进行管理,确保系统的安全性。

2.线路管理模块线路管理模块主要实现线路的创建、修改和删除。

系统管理员可以在系统中新增线路,包括线路名称、起点、终点、途经站点和票价等信息,并可以对线路进行修改或删除。

3.车辆调度模块车辆调度模块主要实现车辆的分配和调度。

系统管理员可以根据线路的运行情况,对车辆进行分配和调度,确保每条线路都有足够的车辆保障。

4.票务管理模块票务管理模块主要实现车票的销售和售后服务。

用户可以通过系统进行车票购买,并可以进行退票或改签。

系统管理员可以对票务信息进行管理和统计,以便进行运营分析。

5.数据分析模块数据分析模块主要对线路运营数据进行汇总和分析。

系统管理员可以通过系统获取线路的客流情况、车辆运行情况等信息,以便对线路进行优化和改进。

四、系统流程1.用户注册和登录流程2.线路管理流程系统管理员登录后台管理界面,通过线路管理模块创建线路,填写线路名称、起点、终点、途经站点和票价等信息。

创建成功后,管理员可以对线路进行修改或删除。

3.车辆调度流程系统管理员登录后台管理界面,通过车辆调度模块进行车辆的分配和调度。

管理员可以查看每条线路的运行情况,并进行车辆的分配和调度,确保每个线路都有足够的车辆保障。

数据库公交车管理系统课程设计范本

数据库公交车管理系统课程设计范本

数据库公交车管理系统课程设计
课程设计
课题题目:公交车管理系统
学部:理工学部
专业:
班级:
学号:
姓名:
指导老师:
年月日
成绩:
需求分析
用户需求
城市的扩张使得公交线路越来越复杂,为了使得用户更加方便地
能够获得最新公交线路,“公交线路管理系统”帮助人们解决这个问题。

本系统面向的对象是普通乘客,对于普通乘客来说,她们最关心的就是查询。

系统也只对用户提供信息查询功能,并不对用户开放对数据的编辑权限。

对于任何用户,只要浏览本系统的首页,就能够根据自己的需求进行查询。

数据的修改、删除、及时更新工作只能由管理人员实现并对系统进行定期的维护,保证其运行的稳定性。

主要功能
本系统从用户的需求出发,可实现以下功能:
1、线路具体情况查询:输入线路名称就可得到该线路的途经站
点,使用年限和车辆的相关信息。

2、经过此站点的所有路线查询:输入公交车编号就能够查询相
应的路线和站点个数。

3、车辆分配线路管理实现了增,删,改,查的基本的操作
一、系统功能分析与设计(给出模块图及分析说明)例如:
二、数据库设计(全局E-R图及各表)例如:。

数据结构 公交路线管理模拟系统

数据结构 公交路线管理模拟系统

数据结构公交路线管理模拟系统数据结构公交路线管理模拟系统1.简介1.1 目的1.2 背景1.3 目标受众1.4 定义和缩写2.系统概述2.1 功能介绍①路线管理②车辆管理③乘客管理④公交站点管理⑤车票管理2.2 架构设计①前端②后端③数据库3.数据结构设计3.1 路线数据结构3.2 车辆数据结构3.3 乘客数据结构3.4 公交站点数据结构3.5 车票数据结构4.数据操作与算法4.1 路线管理算法①添加路线②删除路线③修改路线④查询路线4.2 车辆管理算法①添加车辆②删除车辆③修改车辆信息④查询车辆信息4.3 乘客管理算法①注册乘客②删除乘客信息③修改乘客信息④查询乘客信息4.4 公交站点管理算法①添加公交站点②删除公交站点③修改公交站点信息④查询公交站点信息4.5 车票管理算法①购买车票②退票③查询车票信息5.系统界面设计5.1 登录界面5.2 路线管理界面5.3 车辆管理界面5.4 乘客管理界面5.5 公交站点管理界面5.6 车票管理界面6.测试计划与结果6.1 单元测试6.2 集成测试6.3 系统测试7.使用说明7.1 安装环境7.2 配置文件7.3 运行指南8.案例分析8.1 场景一:乘客购票8.2 场景二:管理员添加新的公交车辆8.3 场景三:用户查询路线信息9.附件9.1 数据库表结构9.2 界面设计图9.3 测试用例10.法律名词及注释10.1 许可证:指获得法律授权,允许人们合法地行使某种权利或从事某种活动的文件或证明。

10.2 版权:指对某一独创性作品的独占权利。

10.3 商标:指为了标示从特定经营者的商品或服务与其他经营者的商品或服务区分开来,并能够识别商品或服务的来源,而采用的某种符号。

10.4 隐私政策:指组织管理个人信息各个方面的政策,内容包括个人信息的收集、使用、披露、存储、删除等规定。

数据结构课程设计报告-公交换乘系统

数据结构课程设计报告-公交换乘系统

广东海洋大学信息学院课程设计报告设计题目公交换乘系统课程名称数据结构姓名(学号)联系电话专业名称计算机科学与技术所在班级1101班指导教师教师职称起止时间2011 年12月26日至2012年1月6日评定成绩一、课程设计的主要内容1、公交线路中,为用户查找最短路径,有【0】次换乘就能到达目的地和【1】次换乘就能到达目的地。

2、为用户计算出路程所需费用。

3、该课程设计的公交系统中有分权限;分管理员用户和普通用户,管理员的登陆需要帐号和密码(暗文),普通用户可以直接登陆。

4、管理员可以重新输入新公交路线、输出公交路线、读取已经存盘的公交路线资料、存入新公交路线资料(慎用!)、查找最短公交路线、新增管理员用户和删除管理员用户。

5、普通用户只能输出公交路线和查找最短公交路线两个功能。

二、功能和结构设计1、为用户分权限2、管理员有重新输入新公交路线、输出公交路线、读取已经存盘的公交路线资料、存入新公交路线资料(慎用!)、查找最短公交路线、新增管理员用户和删除管理员用户3、普通用户只能输出公交路线和查找最短公交路线两个功能。

注:系统默认的公交线路图(系统开发者为用户事先存好的,在f1.txt文档中)三、流程图和算法设计算法:(给出查找最短路径的方法)void Bus<T>::findline(){int x,y,i,j,k,l,longers;longers=0;//x、y是起始和终止车站的编码;i、j是每个站点后两位编码;k是每个站点后两位编码的差值;l是转乘站点的后两位编码while(1){cout<<"请输入起始站点编号:";cin>>x;cout<<" 终止站点编号:";cin>>y;if((x/100)>lineNum||(x/100)<=0||(x%100)>=busStationNum[x/100-1]||(y/100)>lineNum ||(y/100)<=0||(y%100)>=busStationNum[y/100-1])//前两个是判断车站编码的首位的,第三个是判断车站编码的后两位的cout<<"----找不到您所输入站点,请重新输入!----"<<endl;elsebreak;}i=x%100;j=y%100;if((x/100)==(y/100)){cout<<"您可【0】次换乘到达目的地,路线如下:"<<endl;// k=j-i;if(j-i>0){for(k=0;k<j-i;k++){cout<<line[x/100-1][x%100+k].busStationName<<"-->";longers+=line[x/100-1][x%100+k].longer;}cout<<line[x/100-1][x%100+k].busStationName<<endl;}else{for(k=0;k>j-i;k--){cout<<line[x/100-1][x%100+k].busStationName<<"-->";longers+=line[x/100-1][x%100+k-1].longer;}cout<<line[x/100-1][x%100+k].busStationName<<endl;longers+=line[x/100-1][x%100+k].longer;}cout<<"----路程所需费用:"<<longers*0.5<<"元,祝您路途愉快!----"<<endl;}else{string takeName[2][5];//存放两条路线上可转乘车站的名称;int takeNum[2][5];//存放两条路线上可转乘车站的编号;int a,b;//a、b是计数的for(a=0;a<2;a++)for(b=0;b<5;b++){takeName[a][b]=" ";takeNum[a][b]=0;}//遍历每条路线可换乘的站点for(a=0,b=0;a<busStationNum[x/100-1];a++)if(line[x/100-1][a].take){takeName[0][b]=line[x/100-1][a].busStationName;takeNum[0][b]=line[x/100-1][a].number;b++;}for(a=0,b=0;a<busStationNum[y/100-1];a++)if(line[y/100-1][a].take){takeName[1][b]=line[y/100-1][a].busStationName;takeNum[1][b]=line[y/100-1][a].number;b++;}//比较可换乘的站点是否有相同的,如果有,可以了一次换乘到达目的地;否则不可以bool nn=false;for(a=0;a<5;a++){for(b=0;b<5;b++){if(takeName[0][a]!=" "&&takeName[1][b]!=""&&takeName[0][a]==takeName[1][b]){cout<<"您可以【1】次换乘到达目的地(换乘点前面有“*”提示),为你选择的路线如下:"<<endl;l=takeNum[0][a]%100;if(l-i>0){for(k=0;k<l-i;k++){cout<<line[x/100-1][x%100+k].busStationName<<"-->";longers+=line[x/100-1][x%100+k].longer;}cout<<"*"<<line[x/100-1][x%100+k].busStationName<<"-->";// money+=line[x/100-1][x%100+k].longer;}else{for(k=0;k>l-i;k--){cout<<line[x/100-1][x%100+k].busStationName<<"-->";longers+=line[x/100-1][x%100+k-1].longer;}cout<<"*"<<line[x/100-1][x%100+k].busStationName<<"-->";// money+=line[x/100-1][x%100+k].longer;}l=takeNum[1][b]%100;if(j-l>0){longers+=line[y/100-1][l].longer;for(k=1;k<j-l;k++){cout<<line[y/100-1][l+k].busStationName<<"-->";longers+=line[y/100-1][l+k].longer;}cout<<line[y/100-1][l+k].busStationName<<endl;}else{//money+=line[y/100-1][l-1].longer;for(k=-1;k>j-l;k--){cout<<line[y/100-1][l+k].busStationName<<"-->";longers+=line[y/100-1][l+k].longer;}cout<<line[y/100-1][l+k].busStationName<<endl;longers+=line[y/100-1][l+k].longer;}cout<<"----路程所需费用:"<<longers*0.5<<"元,祝您路途愉快!----"<<endl;nn=true;break;}else if(a==4&&b==4)cout<<"很抱歉,没有【0】次换乘或【1】次换乘可以到达目的地的路线!";}if(nn)break;}}}四、源程序代码Bus.h:#include<iostream>#include<string>using namespace std;template <typename T>class Bus{public:struct BusStation{int number; //车站编号string busStationName;//车站名称bool take; //是否可乘换int longer; //到下一个车站的路程};Bus();~Bus();void input();void output();void findline();//查找线路void readfile();//读取公交路线数据void writefile();//存入公交路线数据typedef BusStation* Pointer;private:Pointer *line; //指向三条路线的指针int lineNum;//路线数int *busStationNum;//每条路线的车站数};template<typename A>class Administrator{public:Administrator();~Administrator();void readAdministrator();//读取管理员资料void writeAdministrator();//存入管理员资料void addAdministrator();//增加用户void deleteAdministrator();//删除用户bool land();private:string *name;string *mima;int num;};/////////////////////////////////////////////////////////////////////////// Bus.cpp#include"Bus.h"#include<fstream>template<typename T>Bus<T>::Bus(){lineNum=0;line=new Pointer[lineNum];//三条线路busStationNum=new int [lineNum];//每条线路的车站数}template<typename T>Bus<T>::~Bus(){for(int i=0;i<lineNum;i++)delete [] line[i];lineNum=0;delete [] busStationNum;delete [] line;}template<typename T>void Bus<T>::input(){cout<<"请输入公交线路数:";cin>>lineNum;line=new Pointer[lineNum];//三条线路busStationNum=new int [lineNum];//每条线路的车站数for(int a=0;a<lineNum;a++){cout<<"请输入第"<<a+1<<"条公交线路的车站数:";cin>>busStationNum[a];}for(int b=0;b<lineNum;b++)line[b]=new BusStation[busStationNum[b]];//依据每条线路的车站数创建每条线路int k,m,i,j;//k指前一线,m指后一线,i指要比较的前一线的车站,j指要比较的后一线的车站cout<<"请依次输入每个车站的名称、到下一站点的距离:"<<endl;for(i=0;i<lineNum;i++){cout<<"第"<<i+1<<"条路线的资料"<<endl;for(j=0;j<busStationNum[i];j++){line[i][j].number=(i+1)*100+j;//设置每个车站的编号line[i][j].take=false;//初始化每个车站为不可换乘cin>>line[i][j].busStationName;if(j<busStationNum[i]-1)cin>>line[i][j].longer;//到下一站点有3公里elsecin>>line[i][j].longer;}}//以下是要找出线路中可换乘的车站for(k=0,m=k+1;k<lineNum-1;)//每条路线的站点与另一条路线的站点进行比较{for(i=0;i<busStationNum[k];i++)for(j=0;j<busStationNum[m];j++){if(line[k][i].busStationName==line[m][j].busStationName){line[k][i].take=true;line[m][j].take=true;}}if(m>=lineNum-1){k++;m=k;}m++;}}template<typename T>void Bus<T>::output(){cout<<"编码";cout<<"车站名称";cout<<"到下一站的距离";cout<<"是否可以乘换"<<endl;cout<<setiosflags(ios::left);for(int i=0;i<lineNum;i++){for(int j=0;j<busStationNum[i];j++){cout<<setw(6)<<line[i][j].number;cout<<setw(20)<<line[i][j].busStationName;cout<<setw(20)<<line[i][j].longer;if(line[i][j].take)cout<<"是"<<endl;elsecout<<"否"<<endl;}cout<<endl;}}template<typename T>void Bus<T>::findline(){int x,y,i,j,k,l,longers;longers=0;//x、y是起始和终止车站的编码;i、j是每个站点后两位编码;k是每个站点后两位编码的差值;l是转乘站点的后两位编码while(1){cout<<"请输入起始站点编号:";cin>>x;cout<<" 终止站点编号:";cin>>y;if((x/100)>lineNum||(x/100)<=0||(x%100)>=busStationNum[x/100-1]||(y/100)>lineNum ||(y/100)<=0||(y%100)>=busStationNum[y/100-1])//前两个是判断车站编码的首位的,第三个是判断车站编码的后两位的cout<<"----找不到您所输入站点,请重新输入!----"<<endl;elsebreak;}i=x%100;j=y%100;if((x/100)==(y/100)){cout<<"您可【0】次换乘到达目的地,路线如下:"<<endl;// k=j-i;if(j-i>0){for(k=0;k<j-i;k++){cout<<line[x/100-1][x%100+k].busStationName<<"-->";longers+=line[x/100-1][x%100+k].longer;}cout<<line[x/100-1][x%100+k].busStationName<<endl;}else{for(k=0;k>j-i;k--){cout<<line[x/100-1][x%100+k].busStationName<<"-->";longers+=line[x/100-1][x%100+k-1].longer;}cout<<line[x/100-1][x%100+k].busStationName<<endl;longers+=line[x/100-1][x%100+k].longer;}cout<<"----路程所需费用:"<<longers*0.5<<"元,祝您路途愉快!----"<<endl; }else{string takeName[2][5];//存放两条路线上可转乘车站的名称;int takeNum[2][5];//存放两条路线上可转乘车站的编号;int a,b;//a、b是计数的for(a=0;a<2;a++)for(b=0;b<5;b++){takeName[a][b]=" ";takeNum[a][b]=0;}//遍历每条路线可换乘的站点for(a=0,b=0;a<busStationNum[x/100-1];a++)if(line[x/100-1][a].take){takeName[0][b]=line[x/100-1][a].busStationName;takeNum[0][b]=line[x/100-1][a].number;b++;}for(a=0,b=0;a<busStationNum[y/100-1];a++)if(line[y/100-1][a].take){takeName[1][b]=line[y/100-1][a].busStationName;takeNum[1][b]=line[y/100-1][a].number;b++;}//比较可换乘的站点是否有相同的,如果有,可以了一次换乘到达目的地;否则不可以bool nn=false;for(a=0;a<5;a++){for(b=0;b<5;b++){if(takeName[0][a]!=" "&&takeName[1][b]!=""&&takeName[0][a]==takeName[1][b]){cout<<"您可以【1】次换乘到达目的地(换乘点前面有“*”提示),为你选择的路线如下:"<<endl;l=takeNum[0][a]%100;if(l-i>0){for(k=0;k<l-i;k++){cout<<line[x/100-1][x%100+k].busStationName<<"-->";longers+=line[x/100-1][x%100+k].longer;}cout<<"*"<<line[x/100-1][x%100+k].busStationName<<"-->";// money+=line[x/100-1][x%100+k].longer;}else{for(k=0;k>l-i;k--){cout<<line[x/100-1][x%100+k].busStationName<<"-->";longers+=line[x/100-1][x%100+k-1].longer;}cout<<"*"<<line[x/100-1][x%100+k].busStationName<<"-->";// money+=line[x/100-1][x%100+k].longer;}l=takeNum[1][b]%100;if(j-l>0){longers+=line[y/100-1][l].longer;for(k=1;k<j-l;k++){cout<<line[y/100-1][l+k].busStationName<<"-->";longers+=line[y/100-1][l+k].longer;}cout<<line[y/100-1][l+k].busStationName<<endl;}else{//money+=line[y/100-1][l-1].longer;for(k=-1;k>j-l;k--){cout<<line[y/100-1][l+k].busStationName<<"-->";longers+=line[y/100-1][l+k].longer;}cout<<line[y/100-1][l+k].busStationName<<endl;longers+=line[y/100-1][l+k].longer;}cout<<"----路程所需费用:"<<longers*0.5<<"元,祝您路途愉快!----"<<endl;nn=true;break;}else if(a==4&&b==4)cout<<"很抱歉,没有【0】次换乘或【1】次换乘可以到达目的地的路线!";}if(nn)break;}}//cout<<"还未写代码";}template<typename T>void Bus<T>::readfile(){ifstream infile("f1.txt",ios::in);if(!infile){cerr<<"open error!"<<endl;exit(1);}infile>>lineNum;line=new Pointer[lineNum];//三条线路busStationNum=new int [lineNum];//每条线路的车站数for(int a=0;a<lineNum;a++){infile>>busStationNum[a];}for(int b=0;b<lineNum;b++)line[b]=new BusStation[busStationNum[b]];//依据每条线路的车站数创建每条线路for(int i=0;i<lineNum;i++)for(int j=0;j<busStationNum[i];j++){infile>>line[i][j].number;infile>>line[i][j].busStationName;infile>>line[i][j].longer;infile>>line[i][j].take;}cout<<"----读取成功----"<<endl;infile.close();}template <typename T>void Bus<T>::writefile(){ofstream outfile("f1.txt",ios::out);if(!outfile){cerr<<"open error!"<<endl;exit(1);}outfile<<lineNum<<" ";for(int a=0;a<lineNum;a++){outfile<<busStationNum[a]<<" ";}for(int i=0;i<lineNum;i++)for(int j=0;j<busStationNum[i];j++){outfile<<line[i][j].number<<" ";outfile<<line[i][j].busStationName<<" ";outfile<<line[i][j].longer<<" ";outfile<<line[i][j].take<<" ";}cout<<"----存入成功----"<<endl;outfile.close();}//////////////////////////////////////////////template <typename A>Administrator<A>::Administrator(){num=0;name=new string[num];mima=new string[num];}template<typename A>Administrator<A>::~Administrator(){num=0;delete [] name;delete [] mima;name=NULL;mima=NULL;}template<typename A>void Administrator<A>::readAdministrator() {ifstream infile("Administrator.txt",ios::in);if(!infile){cerr<<"open error!"<<endl;exit(1);}infile>>num;name=new string[num];mima=new string[num];for(int i=0;i<num;i++){infile>>name[i]>>mima[i];}}template<typename A>void Administrator<A>::writeAdministrator() {ofstream outfile("Administrator.txt",ios::out);if(!outfile){cerr<<"open error!"<<endl;exit(1);}outfile<<num<<" ";for(int i=0;i<num;i++){outfile<<name[i]<<" ";outfile<<mima[i]<<" ";}}template<typename A>bool Administrator<A>::land(){string myname;string mymima;cout<<"请输入管理员帐号:";cin>>myname;cout<<" 密码:";char ch;while ((ch=getch())!=13) //输入密码时显示星号功能。

2数据结构——全国交通咨询模拟系统实验报告

2数据结构——全国交通咨询模拟系统实验报告

2数据结构——全国交通咨询模拟系统实验报告
实验目的:
实验环境:
本次实验的开发环境为Java编程语言,使用了面向对象的编程思想,采用了数据结构中的图和链表等数据结构。

实验内容:
1.设计交通工具类:
首先,根据系统需求,设计了交通工具类,该类用于表示交通工具的
基本信息,包括交通工具的名称、班次、票价等。

在该类中,使用了链表
数据结构来存储交通工具的班次信息。

2.设计城市类:
接下来,设计了城市类,用于表示各个城市的交通信息。

在该类中,
使用了图数据结构来表示城市之间的联通关系,每个城市作为图的一个节点,城市间的交通工具作为图的边。

实验结果:
经过测试,实验系统能够准确地输出起点城市到终点城市的最短路径
和最佳交通方案,用户可以根据输出信息来决定如何安排旅行计划。

实验总结:。

数据结构-图-公交线路查询

数据结构-图-公交线路查询

数据结构-图——公交线路查询•功能实现•最短路径算法•输出结果展示•实现的功能:•内置路径•最短距离•查询最少时间最少花费•删除路线•添加路线无向图,邻接表存储方式•每一条边定义为一个结构,包含6个参数。

最短路径算法•Dijkstra算法•根据已经确定了的点的距离,来确定该点相邻顶点的距离,不断的向外散射,直到所以的点的到起点的最短距离确定为止。

将所有顶点到起始点的最短距离存在一张表里,随时调用。

•初始化顶点信息将起点s的dist字段设为0;•输入的起点为v•从所有顶点中找到与v相邻的顶点•找到这些顶点中dist最小的并且known为false的h,然后,将该顶点h的known置为true;•然后更新与顶点h相邻的所有其它known为false的顶点w的dist和path的值。

•如果h.dist+distance(h,w) < w.dist;则更新w.dist= h.dist+ distance(v,w);(distance(v,w)就是表示权值)w.path=h;•遍历完所有的顶点,则终止。

得到了存储了各个顶点到起点的最短路径的表,通过查表,就可以输出最短路径和相应的路线。

查询:输入起点与终点输出最短距离,及相应路线最少时间,及相应路线最少花费,及相应路线•路线的输出需要从最短路径表中,从终点向起点方向逐个寻点,再反方向输出。

•删除路线:•测试结果:•添加路线:比如说,添加一条地铁线•添加线路后的输出结果:未添加路线时(左图)•存在的不足:•虽然统计出了每两点之间是坐地铁还是公交,但是换成次数尚未实现•时间有限,图形化界面设计没有实现谢谢大家!。

公交路线查询系统(基于数据结构和C语言)

公交路线查询系统(基于数据结构和C语言)

公交路线查询系统(基于数据结构和C语言)#include#include#include#include#define max 30#define len 20#define MAX 100typedef struct Linedot{//站int stopno;//站号char stopname[max];//站名struct Linedot *next;}linedot,*dot;typedef struct lineway{//线路int lineNo;//线路号int stopnum;//该线路上站的个数dot stop;//站}way;typedef struct lineNode{int linenum;//线路条数way data[len];//线路}line;typedef struct co_Node{int zhanNo;int busNo;struct co_Node *next;}co_node,*co_zhan;typedef struct Node{int firstbus;//始发车号char stopname[max];//站名co_zhan zhan;}node,*list;typedef struct zhanNode{int vexnum;//顶点数int arcnum;//弧数node vexs[max];//顶点}spot;typedef struct sqNode//定义双向队列{int data;struct sqNode *prior;struct sqNode *next;}sqnode,*sqlist;typedef struct//双向链队列类型{sqlist front;sqlist rear;}LQ;void initqueue(LQ *Q)//初始化队列{Q->front=Q->rear=new sqnode;Q->front->data=Q->rear->data=-1;Q->front->next=Q->rear->next=NULL; Q->front->prior=Q->rear->prior=NULL; }void enqueue(LQ *Q,int e)//进队{sqlist p;p=new sqnode;p->data=e;p->next=NULL;p->prior=Q->front;Q->rear->next=p;Q->rear=p;}void dequeue(LQ *Q,int *e)//出队{Q->front=Q->front->next;if(Q->front!=NULL)*e=Q->front->data;else*e=-1;}typedef struct stackNode//定义栈{int figuer;struct stackNode *next;}stacknode,*stack;void initstack(stack *S)//初始化栈{*S=NULL;}void push(stack *S,int e)//进栈{stack p;p=new stacknode;p->figuer=e;p->next=*S;*S=p;}int pop(stack *S,int *e)//出栈{stack p=*S;if(p==NULL){printf("栈空!\n");return 0;}*e=p->figuer;*S=(*S)->next;delete p;return 1;}void gettop(stack S,int *e)//得到栈顶{if(S==NULL){printf("栈空!\n");return;}*e=S->figuer;}int locate(spot C,char e[]){int i;for(i=0;i<c.vexnum;i++){if(strcmp(C.vexs[i].stopname,e)==0)return i;}if(i>C.vexnum){printf("Not found!\n");return -1;}}void init(FILE *fp,line *W,spot *C)//公交线路初始化{dot p,q;co_zhan R;int i,j,m,n,num;char vex1[max],vex2[max];if((fp=fopen("f.txt","r"))==NULL)//打开文件{printf("The file error!\n");getchar();exit(0);}fscanf(fp,"%d",&W->linenum);for(i=0;ilinenum;i++)fscanf(fp,"%d%d",&W->data[i].lineNo,&W->data[i].stopnu m);//输入线路号和该线路上站的个数for(i=0;ilinenum;i++){W->data[i].stop=NULL;for(j=0;jdata[i].stopnum;j++){p=new linedot;p->next=NULL;fscanf(fp,"%d%s",&p->stopno,p->stopname);//输入站名q=W->data[i].stop;if(!q)W->data[i].stop=p;else{while(q->next)q=q->next;</c.vexnum;i++)q->next=p;}}}fscanf(fp,"%d%d",&C->vexnum,&C->arcnum);for(i=0;ivexnum;i++){fscanf(fp,"%s%d",C->vexs[i].stopname,&C->vexs[i].firstbus); C->vexs[i].zhan=NULL;}for(i=0;iarcnum;i++){fscanf(fp,"%s%s%d",vex1,vex2,&num);m=locate(*C,vex1);n=locate(*C,vex2);R=new co_node;R->zhanNo=n;R->busNo=num;R->next=C->vexs[m].zhan;C->vexs[m].zhan=R;}}void search1(line W)//查询指定车次的线路及途经站点{dot p;int i,n,k=0;printf("请输入车次:");scanf("%d",&n);for(i=0;i<w.linenum;i++){if(W.data[i].lineNo==n){p=W.data[i].stop;while(p){if(k==0)printf("%s",p->stopname);elseprintf("->%s",p->stopname);p=p->next;k++;}}}}void search2(line W,spot C){int k,i;char vex[max];dot p;printf("请输入站点名:");scanf("%s",vex);k=locate(C,vex);if(C.vexs[k].firstbus!=0)printf("该站点的始发车有:%d\n",C.vexs[k].firstbus); elseprintf("该站无始发车!\n");printf("该站点的过路车有:");for(i=0;i<w.linenum;i++)p=W.data[i].stop;if(!p)continue;while(p){if(strcmp(p->stopname,vex)==0&&p!=W.data[i].stop) printf("%d ",W.data[i].lineNo);p=p->next;}}}int stackempty(stack S){if(S==NULL)return 1;return 0;}void updown(stack S,stack *S1){stack p;while(!stackempty(S)){p=new stacknode;p->figuer=S->figuer;p->next=*S1;*S1=p;S=S->next;}void printstack(spot C,stack S)//打印栈里的元素{stack S1,p;co_zhan q;initstack(&S1);updown(S,&S1);p=S1;while(p){ q=C.vexs[p->figuer].zhan;while(q){if(p->next==NULL)break;if(q->zhanNo!=p->next->figuer)q=q->next;elsebreak;}printf("%s-%d->",C.vexs[p->figuer].stopname,q->busNo); p=p->next;}}void printqueue(sqlist Q,spot C){sqlist p;stack S,S1;initstack(&S);initstack(&S1);p=Q;while(p->data!=-1){push(&S,p->data);p=p->prior;}updown(S,&S1);printstack(C,S1);}void search3(spot C,int s,int e) {co_zhan p;int flag;LQ Q;sqlist q;int u,k,i=1;initqueue(&Q);enqueue(&Q,s);while(Q.front!=Q.rear){dequeue(&Q,&u);p=C.vexs[u].zhan;if(u==e){printf("-->>Line%d:",i++); printqueue(Q.front->prior,C); printf("%s\n",C.vexs[e].stopname);dequeue(&Q,&u);if(u==-1)break;p=C.vexs[u].zhan;}while(p){k=p->zhanNo;q=Q.front;while(q->prior!=NULL){if(q->data!=k){q=q->prior;flag=1;}else{flag=0;break;}}if(k!=s&&flag==1)enqueue(&Q,k);p=p->next;}}}void search4(spot C,int s,int e,LQ *Q,int visit[]){int u,k;co_z</w.linenum;i++)</w.linenum;i++)han p;if(!visit[s]){visit[s]=1;enqueue(Q,s);while(Q->front!=Q->rear){dequeue(Q,&u);p=C.vexs[u].zhan;if(u==e){printf("-->>Line:");printqueue(Q->front->prior,C); printf("%s\n",C.vexs[e].stopname); break;}while(p){k=p->zhanNo;if(!visit[k]){visit[k]=1;enqueue(Q,k);}}}}}int count(spot C,stack S,int e){int i,j,n=0,No=-1;stack p;co_zhan q;p=S;while(p){i=p->figuer;p=p->next;if(!p)break;j=p->figuer;q=C.vexs[i].zhan;while(q){if(q->zhanNo==j&&q->busNo!=No) {n++;No=q->busNo;break;}else}}return n-1;}void destroy(stack *S){stack p=*S;while(!stackempty(*S)){*S=(*S)->next;delete(p);p=*S;}}void savestack(stack S,stack *S2) {stack S1;initstack(&S1);updown(S,&S1);updown(S1,S2);}void change(sqlist Q,stack *S) {sqlist p;p=Q;while(p->data!=-1){push(S,p->data);p=p->prior;}}void search5(spot C,int s,int e,stack *S,stack *S2,int *m) {co_zhan p;int flag;LQ Q;sqlist q;int u,k,n1,n=MAX,i=1;initqueue(&Q);enqueue(&Q,s);while(Q.front!=Q.rear){dequeue(&Q,&u);p=C.vexs[u].zhan;if(u==e){change(Q.front,S);n1=count(C,*S,e);if(n1<n){savestack(*S,S2);n=n1;*m=n;}destroy(S);dequeue(&Q,&u);if(u==-1)break;p=C.vexs[u].zhan;}while(p){k=p->zhanNo;q=Q.front;while(q->prior!=NULL) {if(q->data!=k){q=q->prior;flag=1;}else{flag=0;break;}}if(k!=s&&flag==1) enqueue(&Q,k);p=p->next;}}}int menu(){int n;printf("*******************欢迎使用K城公交查询系统******************\n");printf("**************1.查询指定车次的线路及途经站点****************\n");printf("**************2.查询指定站点的始发车和过路车****************\n");printf("**************3.查询指定起点和终点所经的所有线路************\n");printf("**************4.查询指定起点和终点所经站点最少的线路********\n");printf("**************5.查询指定起点和终点换乘次数最少的乘车路线****\n");printf("**************0.退出****************************************\n");printf("******************************************************* *****\n");printf("-----起点站:电力大学/朱辛庄/北郊农场桥东/京昌路回龙观/北京师\n");printf(" 范大学/德胜门西/清华大学西门/圆明园/颐和园/香山\n");printf("-----终点站:电力大学/朱辛庄/北郊农场桥东/京昌路回龙观/北京师\n");printf(" 范大学/德胜</n)门西/清华大学西门/中关村/圆明园/颐和园\n");printf(" /西单\n");printf("-----公交线路:345/442/696/681/699/826\n");printf("******************************************************* *****\n");printf("请选择:");scanf("%d",&n);getchar();return n;}void main(){stack S,S2,S3;LQ Q;int n,m,i,s,e,k=1,visit[len],u; char ch='Y',start[max],end[max]; FILE *fp;line W;spot C;init(fp,&W,&C);do{n=menu();switch(n){case 1:search1(W);break;case 2:search2(W,C);break; case 3:for(i=0;i<len;i++)visit[i]=0;initstack(&S);printf("请输入起点和终点:"); scanf("%s%s",start,end);s=locate(C,start);e=locate(C,end);printf("%s到%s的所有路线如下:\n",C.vexs[s].stopname,C.vexs[e].stopname);search3(C,s,e);break;case 4:for(i=0;i<len;i++)visit[i]=0;initqueue(&Q);printf("请输入起点和终点:");scanf("%s%s",start,end);s=locate(C,start);e=locate(C,end);printf("%s到%s的最短路线如下:\n",C.vexs[s].stopname,C.vexs[e].stopname);search4(C,s,e,&Q,visit);break;case 5:initstack(&S);initstack(&S2);initstack(&S3);printf("请输入起点和终点:");scanf("%s%s",start,end);s=locate(C,start);e=locate(C,end);printf("%s到%s的最少换乘路线如下:\n",C.vexs[s].stopname,C.vexs[e].stopname);search5(C,s,e,&S,&S2,&m);updown(S2,&S3);pop(&S3,&u);printf("-->>Line:");printstack(C,S3);printf("%s\n",C.vexs[e].stopname); printf("共换乘%d次\n",m);break; case 0:exit(0);break;default:printf("error!\n");}getchar();printf("\n继续吗?Y/N:");scanf("%c",&ch);}while(ch=='Y'||ch=='y');}</len;i++)</len;i++)。

智能模拟公交车系统的设计方案

智能模拟公交车系统的设计方案

智能模拟公交车系统的设计方案随着城市化进程的不断发展,人口迅速集中,公共交通成为城市里最为重要的配套措施之一。

如今,随着科技的日新月异,智能公交系统逐渐成为公共交通的一个重要领域,智能模拟公交车系统应运而生,其在提升乘客的乘坐体验和交通路况分析方面具有显著作用。

智能模拟公交车系统作为智能公交系统中的一种,具有高度的科技含量,通过模拟公交车的运行状态,可以更好的分析公交车在路上的具体动态。

智能模拟公交车系统的设计方案如下:1.系统架构设计一个好的系统架构是成功的关键,智能模拟公交车系统主要分为以下部分:①硬件设备,包括动态车辆定位系统、数据采集终端、车载终端和车载监控摄像头等;②通信设备,包括移动通信网络、WIFI等;③软件应用,包括GIS地理信息系统、数据处理分析系统、车辆控制自适应指令等。

其中,动态车辆定位装置可以获得公交车的位置坐标,数据采集终端可以收集到车辆运营时的一些参数信息,车载终端可以掌控车辆的基本信息和车辆的运行状态,车载监控摄像头可以监控车载环境。

这些装置将数据实时传输到中心计算机中进行处理,形成完整的公交车路况数据集,提供给系统进行分析。

2.数据采集设计数据采集是智能模拟公交车系统中不可或缺的步骤,是整个系统的基础。

通过数据采集可以收集到公交车在路上运行过程中的实时信息,按照设定的统一格式存储与相应的数据库。

数据采集的主要任务是收集公交车的位置、速度、载客量、公里数等数据,并通过网络传给后台服务器,格式必须统一、规范,数据采集设备还应具有较高的精度和可靠性,以确保采集的信息准确无误。

3.数据处理设计数据处理是从数据库中抽取出关键的数据,进行数据挖掘和知识提取,并为决策者提供有关公共交通的相关信息。

数据处理的核心是数据分析和数据挖掘,数据分析可以分析出公交车在路上的运行情况,帮助相关管理人员快速的定位问题,并进行研究决策,从而提升公交车运行效率;数据挖掘则可以通过机器学习、模型预测等技术,从海量数据中发掘出有价值的信息,制定科学合理的安排计划,提升公交运营效率。

智慧公交系统java设计方案

智慧公交系统java设计方案

智慧公交系统java设计方案智慧公交系统是一种基于信息技术的城市公交管理系统,旨在提高公交出行的效率和便利性,减少交通拥堵和环境污染。

本文将提供一个基于Java的智慧公交系统设计方案,包括系统结构、功能模块、数据库设计和系统交互流程。

一、系统结构智慧公交系统的系统结构分为三层:表示层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。

1. 表示层负责与用户进行交互,接收用户的输入,并展示系统的输出结果。

2. 业务逻辑层负责处理用户输入的数据,并根据业务规则进行逻辑处理。

3. 数据访问层负责与数据库进行交互,存储和读取系统的数据。

二、功能模块智慧公交系统的功能模块包括以下几部分:1. 用户管理模块:实现用户注册、登录和个人信息管理等功能。

2. 公交线路管理模块:管理公交线路的添加、修改和删除等功能。

3. 公交车辆管理模块:管理公交车辆的添加、修改和删除等功能。

4. 订单管理模块:实现用户下单、查询订单、取消订单等功能。

5. 乘车刷卡模块:模拟用户乘车时使用刷卡设备进行刷卡,并记录乘车信息。

6. 数据统计模块:实现对公交线路、车辆和订单数据的统计分析。

三、数据库设计智慧公交系统的数据库包括以下几个表:1. 用户表(User):存储用户的基本信息,包括用户ID、用户名、密码等字段。

2. 公交线路表(BusLine):存储公交线路信息,包括线路ID、线路名称、起始站点、终点站等字段。

3. 公交车辆表(Bus):存储公交车辆信息,包括车辆ID、车牌号、所属线路等字段。

4. 订单表(Order):存储用户的订单信息,包括订单ID、用户ID、线路ID、车辆ID等字段。

5. 乘车记录表(Record):存储用户的乘车记录,包括记录ID、用户ID、线路ID、车辆ID、乘车时间等字段。

四、系统交互流程智慧公交系统的交互流程如下:1. 用户注册:用户在表示层填写注册信息,并提交给业务逻辑层。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据结构》课程设计报告一、课程设计名称公交线路管理模拟系统二、实用工具软件Microsoft visual C++ 6.0三、课程设计内容简介1、实践目的1)、掌握图的概念、图的两种存储结构(邻接矩阵和邻接表)的存储思想及其存储实现;2)、掌握上机实现图的基本方法;3)、掌握有关图的操作并用高级语言编程实现;4)、熟练掌握图的深度、广度优先遍历算法思想及其程序实现;5)、掌握图的常见应用算法的思想及其程序实现。

2、实践要求1)、掌握本章实践的算法;2)、上机运行本章的程序,保存和打印出程序的运行结果,并结合程序进行分析;3)、按照你对图的操作需要,重新改写程序并运行,打印出文件清单和运行结果;4)、注意理解各算法实现时所采用的存储结构;5)、注意正、逆邻接表。

3、系统简介及设计思路本项目是对公交车路线信息的简单模拟,以完成建立公交路线信息、修改公交路线信息和删除公交路线信息等功能。

本项目的实质是完成对公交路线信息的建立、查找、插入、修改、删除等功能,可以首先定义项目的数据结构,然后将每个功能写成一个函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得出运行结果。

公交站点之间的关系可以是任意的,任意两个站点之间都可能相关。

而在图形结构中,结点之间的关系可以是任意的,图中任意两个数据之间都可能相关。

所以可以用图形结构来表示n个公交站点之间及站点之间可能设置的公交路线,其中网的顶点表示公交站点,边表示两个站点之间的路线,赋予边的权值表示相应的距离。

因为公交路线是有一定的连续关系的,如果想输出从某一个起始点开始到某一终点结束的公交路线,就需要找到从某一点开始的第一个邻接点和下一个邻接点。

因为在邻接表中容易找到任一顶点的第一个邻接点和下一个邻接点,所以本项目使用了图的邻接表存储结构。

4、程序设计流程为了创建公交路线,首先建立结构体载入公交车的相关信息:名称、司机、起始站、终点站、站数以及距离。

利用邻接表把站点与站点之间的信息储存起来。

用文件详细记载了路线信息,便于管理者初始化公交路线信息。

再构造子函数来创建、及时修改、插入、删除公交信息、以及查询公交路线是否出错,各站点之间的距离。

用主函数来调用子函数,进入导航系统而进行操作。

主函数(main)流程导航查询(initial)流程汽车查询(包含车号、站台查询)流程新建(newb)流程修改路线(Modifyr)流程修改汽车(modifyb)流程删除汽车(delb)流程5、运行环境代码用C语言完成,布置在Microsoft visual C++ 6.0运行。

Microsoft visual C++ 6.0具有集成开发环境,可提供编辑C语言,C++以及C++/CLI等编程语言。

整合了便利的除错工具,特别是整合了微软视窗程式设计(Windows API)、三维动画DirectX API,Microsoft .NET框架。

输入如下公交线路信息1路 津A10001 司机1 6:00 1—>2—>3—>4—>52路 津A10002 司机2 6:15 6—>7—>4—>8—>17—>12 3路 津A10003 司机3 6:00 9—>7—>3—>10—>124路 津A10004 司机4 6:30 6—>13—>1—>12—>14—>17 5路 津A10005 司机5 7:00 15—>5—>8—>16—>10—>2—>131211413 62 734 10171615 589创建示意图(1路)创建结束选择N回到主菜单,再选择A(导航查询)主菜单下选择B(公汽查询)就可以查询已有的公交信息,查询方式有公汽号查询、站台查询两种查询方式我们以公汽号查询(查询津A10001)为例:返回到主菜单,选择D进入系统管理我们以修改路线为例(修改津A10001)最后在主菜单下选择E(清空数据)最后选择F即可退出程序。

四、得意与不足之处:1、得意之处:1)、可以根据题目需要翻阅图书馆资料自学C++程序,完成代码。

2)、完成过程中思路清晰,可以根据实际进行分析设计、编程调试,能够熟练应用软件的分析方法和工程设计方法。

3)、够按要求编写课程设计报告书,能正确阐述设计和实验结果便于管理者自由创建公交车的相关信息2、不足之处:1)、程序太过繁琐,采用了一些不常用的语句2)、不能简易地查询任意两站之间的距离3)、不能查询任意的站点,只能查询起点和终点4)、不能任意输入两个站点,给出最优的乘车路线五、自我感受:课程设计是把我们所学的理论知识进行系统的总结并应用于实践的良好机会,有利于加强我们用知识理论来分析实际问题的能力,进而加强了我们对知识认识的实践度,巩固了我们的理论知识,深化了对知识的认识,并为走向社会打下一个良好的基础。

在这次课程设计中我遇到许多问题和麻烦,得到了老师的帮助和指导,才能够使得这次课程设计顺利的进行下去,另外,在程序调试过程中,也得到很多同学的帮助,给我及时指出错误,提出许多宝贵意见。

在此对老师和同学们表示感谢!八、参考文献:《数据结构实践训练教程》刘光然主编南开大学出版社《数据结构》严蔚敏主编清华大学出版社《C语言程序设计》谭浩强主编清华大学出版社附录:#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <string.h>struct bus{char num[30];//车号char driver[50];//司机char stime[30];//发车时间char start[30];//起始站char end[30];//终点站int z;//站数char *pr;//指向路线的首指针struct bus *next;//下一辆车的结构体};struct bus *bhead=NULL;//放公汽信息的头指针struct bus *bi=NULL;//放公汽信息的最后的指针void initial(){FILE *fp;fp=fopen("bus.txt","r");if(fp==NULL){printf("\n\n无公汽信息文件!");return;} fseek(fp,0,SEEK_END);int i,n;n=ftell(fp)/sizeof(struct bus);//printf("\n\n\n\n一共有%d辆公汽!",n);rewind(fp);struct bus *p;//forfor(i=0;i<n;i++){p=(struct bus *)malloc(sizeof(struct bus ));fseek(fp,i*sizeof(struct bus),0);fread(p,sizeof(struct bus),1,fp);//写入信息,其中地址是无用的信息 p->next=NULL;//初始化时下一个指向空,都是一个个单独的p->pr=NULL;//让路线为空//路线信息存放在文件名为”车号“的文件中;车号是唯一的FILE *fp1;fp1=fopen(p->num,"r");if(!fp1) printf("\n%s号车无初始路线!",p->num);else{char * p1;p1=(char *)malloc(p->z*40*sizeof(char) );fread(p1,p->z*50*sizeof(char),1,fp1);//将路线写入内存p->pr=p1;fclose(fp1);}// printf("\n\n\n\n初始化%s号车路线成功!",p->num); //路线信息if(bhead==NULL) bhead=bi=p;else{ bi->next=p; bi=p; }}//for结尾//printf("\n\n\n\n初始化%d辆车成功!",n);fclose(fp);}void newb(){loop1:printf("\n\n\n\n█创建新公汽█\n\n");struct bus *p;p=(struct bus *)malloc(sizeof(struct bus ));p->next=NULL;p->pr=NULL;loop2:printf("\n请输入新公汽号:\n\n");scanf("%s",p->num);struct bus *pj=bhead;while(pj){if(strcmp(pj->num,p->num)==0){printf("\n\n错误,该公汽号已经存在!\n\n"); goto loop2;}pj=pj->next;}printf("\n请输入新公汽司机姓名:\n");scanf("%s",p->driver);printf("\n请输入新路线发车时间\n\n");scanf("%s",p->stime);loop3:printf("\n\n\n请输入新路线总站台数(>=2)\n\n");scanf("%d",&p->z);if(p->z>=2){p->pr=(char *)malloc( p->z*50*sizeof(char) );p->pr[0]='\0';int i;char cc[40];for(i=1;i<=p->z;i++){printf("\n请输入公汽第%d站台名称:",i);scanf("%s",cc);if(i==1){strcat(p->pr,cc);strcpy(p->start,cc);}else{strcat(p->pr,"---->");strcat(p->pr,cc);}}strcpy(p->end,cc);printf("\n\n自动生成公汽路线%s",p->pr);}else { printf("\n\n错误,该公汽站台数小于2,请重新输入!\n\n"); goto loop3;} if(bhead==NULL)bi=bhead=p;else{bi->next=p;bi=p;}printf("\n\n%s号公汽创建成功!",p->num);printf("\n\n\n您想继续新建(A) 退出创建(N)-------请选择 A 或 N \n\n "); char c;c=getch();if(c=='a'||c=='A') goto loop1;else return;}void modifyr(){char c,b[20];printf("\n\n\n\n █修改路线█\n\n");loop:printf("\n请输入要修改路线的公汽号:\n\n");scanf("%s",b);struct bus *p=bhead;int n=1;while(p){if(strcmp(p->num,b)==0){printf("\n\n司机姓名: %s",p->driver);n=0;break;} p=p->next;}if(n){ printf("\n\n错误,公汽号不存在!\n\n重新修改(A) 退出修改(N)-------请选择 A 或 N \n\n ");char c;c=getch();if(c=='a'||c=='A') goto loop;else return;}loop1:printf("\n\n\n请修改路线总站台数(>=2)\n\n");int nn;scanf("%d",&nn);if(nn>=2){p->pr=(char *)malloc( p->z*50*sizeof(char) );p->pr[0]='\0'; p->z=nn;int i;char cc[40];for(i=1;i<=p->z;i++){printf("\n请输入公汽第%d站台名称:",i);scanf("%s",cc);if(i==1){strcat(p->pr,cc);strcpy(p->start,cc);}else{strcat(p->pr,"---->");strcat(p->pr,cc);}}strcpy(p->end,cc);printf("\n\n自动生成修改后的路线%s",p->pr);}else { printf("\n\n错误,该公汽站台数小于2,请重新输入!\n\n"); goto loop1;} printf("\n\n\n%s号公汽修改成功!",p->num);printf("\n\n\n您想继续修改(A) 退出修改(N)-------请选择 A 或 N \n\n ");c=getch();if(c=='a'||c=='A') goto loop;FILE *fp;fp=fopen(p->num,"w");fwrite(p,nn*50*sizeof(char),1,fp);fclose(fp);//保存线路信息}void modifyb(){char c,b[20];printf("\n\n\n\n █修改公汽█\n\n");loop:printf("\n请输入要修改路线的公汽号:\n\n");scanf("%s",b);struct bus *p=bhead;int n=1;while(p){if(strcmp(p->num,b)==0){printf("\n\n司机姓名: %s 发车时间: %sAM",p->driver,p->stime );n=0;break;}p=p->next;}if(n){ printf("\n\n错误,公汽号不存在!\n\n重新修改(A) 退出修改(N)-------请选择 A 或 N \n\n ");c=getch();if(c=='a'||c=='A') goto loop;else return;}printf("\n请输入要修改%s公汽的新司机:\n\n",p->num);scanf("%s",p->driver);printf("\n请输入要修改%s公汽的发车时间:\n\n",p->num);scanf("%s",p->stime);printf("\n\n\n%s号公汽修改成功!",p->num);printf("\n\n\n您想继续修改(A) 退出修改(N)-------请选择 A 或 N \n\n ");c=getch();if(c=='a'||c=='A') goto loop;}void showb(){struct bus *p=bhead;if(!p){printf("\n\n公汽线路信息数据库为空!"); return; }else{printf("\n\n\n █公汽信息数据库█ ");printf("\n|-------------------------------------------------------------------------|");}int n=1;while(p){printf("\n| 公汽号:%s 站数:%d 发车时间:%s AM 司机:%s ",p->num, p->z, p->stime,p->driver);printf("\n| █路线: %s",p->pr);printf("\n|-------------------------------------------------------------------------|");n=0;p=p->next;}if(n)printf("\n\n公汽线路信息数据库为空!");}void lookb(){char c,b[20];//printf("\n\n\n\n █查询路线█\n\n");loop:printf("\n请输入要查询的公汽号:\n\n");scanf("%s",b);struct bus *p=bhead;int n=1;while(p){if(strcmp(p->num,b)==0){n=0;break;}p=p->next;}if(n){ printf("\n\n错误,公汽号不存在!\n\n重新输入(A) 退出查询(N)-------请选择 A 或 N \n\n ");c=getch();if(c=='a'||c=='A') goto loop;else return;}printf("\n|-------------------------------------------------------------------------|");printf("\n| 公汽号:%s 站数:%d 发车时间:%s AM 司机:%s ",p->num, p->z, p->stime,p->driver);printf("\n| 路线: %s",p->pr);printf("\n|-------------------------------------------------------------------------|");printf("\n\n\n%s号公汽查询成功!",p->num);printf("\n\n\n您想继续查询(A) 退出查询(N)-------请选择 A 或 N \n\n ");c=getch();if(c=='a'||c=='A') goto loop;}void lookr(){// printf("\n\n\n\n █查询公汽█\n\n");char c,b[40];loop://printf("\n [查询公汽菜单]");//printf("\n|-----------------------------------|");printf("\n \n \n \n 请选择查询方式: ");printf("\n|-----------------------------------|");printf("\n| A[ 起始站查询 ] |");printf("\n|-----------------------------------|");printf("\n| B[ 终点站查询 ] |");printf("\n|-----------------------------------|");printf("\n| C[ 退出 ] |");printf("\n|-----------------------------------|");c=getch();if(c=='B'||c=='b'){printf("\n请输入要查询的终点站:\n\n");scanf("%s",b);struct bus *p=bhead;int n=1;printf("\n 您可以乘坐以下公汽到达%s",p->end);printf("\n|-------------------------------------------------------------------------|");while(p){if(strcmp(p->end,b)==0){n=0;printf("\n|公汽号:%s 路线: %s" ,p->num,p->pr);printf("\n|-------------------------------------------------------------------------|");}p=p->next;}if(n){ printf("\n\n错误,终点站不存在!\n\n重新输入(A) 退出查询(N)-------请选择 A 或 N \n\n ");c=getch();if(c=='a'||c=='A') goto loop;}printf("\n\n您想继续查询(A) 退出查询(N)-------请选择 A 或 N \n\n ");c=getch();if(c=='a'||c=='A') goto loop;}if(c=='A'||c=='a'){printf("\n请输入要查询的起始站:\n\n");scanf("%s",b);struct bus *p=bhead;int n=1;printf("\n 您可以乘坐以下公汽起始站为%s",p->start);printf("\n|-------------------------------------------------------------------------|");while(p){if(strcmp(p->start,b)==0){n=0;printf("\n|公汽号:%s 路线: %s" ,p->num,p->pr);printf("\n|-------------------------------------------------------------------------|");}p=p->next;}if(n){ printf("\n\n错误,起始站不存在!\n\n重新输入(A) 退出查询(N)-------请选择 A 或 N \n\n ");c=getch();if(c=='a'||c=='A') goto loop;}printf("\n\n您想继续查询(A) 退出查询(N)-------请选择 A 或 N \n\n ");c=getch();if(c=='a'||c=='A') goto loop;}}void delb(){char b[20];printf("\n\n\n\n █删除公汽█\n\n");loop:printf("\n请输入要删除路线的公汽号:\n\n");scanf("%s",b);struct bus *p=bhead;struct bus *p1=bhead;int n=1,y=0;while(p){if(strcmp(p->num,b)==0){n=0;break;}y++;if(y>1) p1=p1->next;p=p->next;}char c;if(n){ printf("\n\n错误,公汽号不存在!\n\n重新输入(A) 退出删除(N)-------请选择 A 或 N \n\n ");c=getch();if(c=='a'||c=='A') goto loop;else return;}if(p==bhead)bhead=bhead->next;else p1->next=p->next;printf("\n删除路线的公汽成功!\n\n");printf("\n\n您是继续删除(A) 退出删除(N)-------请选择 A 或 N \n\n ");c=getch();if(c=='a'||c=='A') goto loop;}void save(){FILE *fp;fp=fopen("bus.txt","w");struct bus *p;p=bhead;int n=0;while(p){//第一个whilefseek(fp,n*sizeof(struct bus),0);fwrite(p,sizeof(struct bus ),1,fp);n++;FILE *fp1;fp1=fopen(p->num,"w");fwrite(p->pr,p->z*50*sizeof(char),1,fp1);fclose(fp1);p=p->next;}fclose(fp);//printf("\n\n\n\n保存%d辆车成功!",n);}void release(){bhead=bi=NULL;printf("\n\n\n数据清空成功!");}void show1(){printf("\n\n\n\n\n |----------------------------------------|");printf("\n | █主菜单█ |"); printf("\n |----------------------------------------|");printf("\n | A 导航查询 |");printf("\n |----------------------------------------|");printf("\n | B 公汽查询 |");printf("\n |----------------------------------------|");printf("\n | C 新建公汽 |");printf("\n |----------------------------------------|");printf("\n | D 系统管理 |");printf("\n |----------------------------------------|");printf("\n | E 清空数据 |");printf("\n |----------------------------------------|");printf("\n | F 退出程序 |"); printf("\n |----------------------------------------|");printf("\n | 请您选择一个任务 |");printf("\n |----------------------------------------|\n\n\n");}void show2(){printf("\n |-----------------------------|");printf("\n | █管理菜单█ |");printf("\n |-----------------------------|");printf("\n | A 修改路线 |");printf("\n |-----------------------------|");printf("\n | B 修改公汽 |");printf("\n |-----------------------------|");printf("\n | C 删除公汽 |");printf("\n |-----------------------------|");printf("\n | D 退出程序 |");printf("\n |-----------------------------|");printf("\n | 请您选择一个任务 |");printf("\n |-----------------------------|\n\n\n");}void show3(){printf("\n\n █查询菜单█");printf("\n|-----------------------------------|"); printf("\n| 请选择查询方式: |"); printf("\n|-----------------------------------|"); printf("\n| A[ 公汽号查询 ] |"); printf("\n|-----------------------------------|"); printf("\n| B[ 站台查询 ] |"); printf("\n|-----------------------------------|"); printf("\n| C[ 退出 ] |"); printf("\n|-----------------------------------|");}void main(){printf("\n\n ★欢迎使用公汽查询系统!★"); initial();char c1;do {show1();c1=getch();switch ( c1 ){case 'a':case 'A':showb();break;case 'b':case 'B': {char c3;do{show3();c3=getch();switch ( c3){case 'a':case 'A':lookb();break; case 'b':case 'B':lookr();break; case 'c':case 'C':break;}}while(c3!='c'&&c3!='C'); }break;case 'c':case 'C':newb();break; case 'd':case 'D':{char c2;do{show2();c2=getch();switch ( c2){case 'a':case 'A':modifyr();break;case 'b':case 'B':modifyb();break;case 'c':case 'C':delb();break;}}while(c2!='d'&&c2!='D');}break;case 'E':case 'e':release(); save(); break; }}while(c1!='f'&&c1!='F');save();printf("\n\n ★谢谢您的使用!★"); }。

相关文档
最新文档