电子地图管理系统
- 格式:doc
- 大小:79.00 KB
- 文档页数:18
#include <cstdio>#include <cstdlib>#include <>#include <cstring>#include <ctime>#include <string>#include <algorithm>#include <iostream>using namespace std;void start();void display();void displaypaixu();void displayjiansuo();Road *head = NULL;void SearchByClass(Road *head){time_t a,b;Road *prev,*p,*end,*temp_head;char Run_time[80];int i=0,Class;printf("请输入您所要查找的道路的番号:\n");scanf("%d",&Class);prev=p=(Road *)malloc(sizeof(Road));n",b-a);}void SearchById(Road *head){time_t a,b;Road *prev,*p,*end,*temp_head;char Run_time[80];int i=0,LinkId;printf("请输入您所要查找的道路的ID:\n");scanf("%d",&LinkId);prev=p=(Road *)malloc(sizeof(Road));n",b-a);}void SearchByName(Road *head){time_t a,b;Road *prev,*p,*end,*temp_head;char Run_time[80];int i=0;char Name[30];printf("请输入您所要查找的道路的名称:\n");scanf("%s",Name);prev=p=(Road *)malloc(sizeof(Road));n",b-a);}void updata(Road*head){FILE*pp;FILE*ppp;FILE*infile;FILE*outfile;time_t a;char filename[20];Road*p1;Road*p2;pp=fopen("","w");if(pp==NULL){printf("文件创建失败\n");exit(1);}.\n");printf("文件更新成功\n");fclose(ppp);n",b-a);}Road* readfile(void){FILE *fp;unsigned short temp_data_size[1]; ...."); time(&begin);head = BubbleSort( head );time(&end);i=end-begin;....");time(&begin);head=SelectSort( head );time(&end);i=end-begin;....");time(&begin);QListSort( &head ,NULL);time(&end);i=end-begin;. |\n");printf(" | |\n");printf(" | ");for(i=0; i<63; i++){printf(">");//此处用time函数来暂停秒以描述程序的加载过程start=clock();finish=clock();while((finish-start)<30)finish=clock();}printf(" ");printf("|\n");printf(" | Load successfully! |\n");printf(" | |\n");printf(" | |\n");printf("--------------------------------------------------------------------------\n");printf("\n 按任意键将进入系统 (Press any key to enter thesystem) \n ");printf("\n ");SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED);system("pause");}void display(){printf("----------------------请按照菜单提示输入您的选择-------------\n");printf(" \n");printf(" <1>【读取文件】\n");printf(" <2> 【排序】 \n");printf(" <3> 【检索】 \n");printf(" <4> 【更新】 \n");printf(" <0> 【退出】 \n");}void displayjiansuo(){printf(" ----------------------请按照菜单提示输入您的选择-------------\n");printf(" \n"); printf(" <1>【指定LinkID检索】\n");printf(" <2>【指定交叉link列表示class番号检索】\n");printf(" <3>【指定查找岔路数检索】 \n");printf(" <4>【指定道路名称检索】 \n");printf(" <0>【返回】 \n");}void displaypaixu(){printf("----------------------请按照菜单提示输入您的选择-------------\n"); printf(" \n"); printf(" <1>【冒泡排序】 \n");printf(" <2>【选择排序】 \n");printf(" <3>【快速排序】 \n");printf(" <0>【返回菜单】 \n");}。
CBTC系统电子地图升级管控方案研究陈 超(常州地铁集团有限公司,江苏常州 213000)摘要:列车集成控制技术发展以及轨道交通线网规模的逐渐扩大,线路基础设施改造、线路分段开通和线网之间互联互通需求越来越多,对电子地图的升级管控模式提出更高的要求。
分析现行CBTC 系统电子地图在数据准备、更新方式存在的不足,提出新的CBTC 系统电子地图升级的管控方案,以提高电子地图数据的可维护性、可靠性以及安全性。
关键词:电子地图;基于通信列车控制系统;移动授权;可维护性;可靠性;安全性中图分类号:U284.48 文献标志码:A 文章编号:1673-4440(2022)12-0089-04Research on Control and Management Scheme ofUpgrading CBTC System Electronic MapChen Chao(Changzhou Metro Group Co., Ltd., Changzhou 213000, China)Abstract: With the development of train integrated control technology and the gradual expansion of rail transit network, more and more demands have been put forward for the refurbishment of line infrastructure, the sectional commissioning of lines and the interconnection between line networks, which puts forward higher requirements for the control and management mode of upgrading electronic map. This paper analyzes the shortages in the way of data preparation and updating of the current Communication Based Train Control (CBTC) system electronic map and puts forward a new control and management scheme of upgrading electronic map to achieve higher maintainability, reliability and safety of electronic map data.Keywords: electronic map; CBTC; MA; maintainability; reliability; safetyDOI: 10.3969/j.issn.1673-4440.2022.12.018收稿日期:2022-09-13;修回日期:2022-12-05作者简介:陈超(1987—),男,工程师,本科,主要研究方向:城市轨道交通信号系统,邮箱:****************。
大家好,我是薛哥。
智能建筑管理系统(IBMS)现在是整个智能化系统中利润最高的一部分了,因为需要二次开发,报价区间比较大,对于这样的系统,我们要熟悉一下,今天的文章非常重要。
智能化弱电工程设计与施工弱电工程项目设计与施工,弱电施工方案探讨,安防监控技术问题讨论,智能化工程案例分享,弱电行业最新资讯01正文智能建筑管理系统(IBMS)1.1 功能简述XX医院智能化集成管理平台(以下简称IBMS平台)是该项目智能化系统的上层建筑,是该项目中所有智能化子系统的大脑,扮演着沟通者、监护者、管理者与决策者的角色。
它利用标准化/或非标准化的通讯接口将各个子系统联接起来,共同构建一个全设备、全空间、全时域、全过程的有机整体。
它通过统一的平台,实现对各子系统进行全程集中检测、监视和管理,同时将所有子系统的数据收集上来,存储到统一的开放式关系数据库当中,使各个原本独立的子系统,可以在统一的IBMS平台上互相对话,做到充分数据共享。
IBMS集成管理平台采用模块化架构,每个模块既可以完成相应的功能,每个模块即可独立完成相应的单一功能操作,又可与其它模块配合完成更加复杂的联合功能操作。
在XX医院的智能集成管理系统项目中的智能系统集成平台作为核心软件,有机地将各个子系统整合起来,集中监控,统一管理,使它们协调工作,共同为XX 医院创造一个舒适、便捷、绿色、安全的医疗、办公、修养环境。
在XX医院的智能集成管理系统项目中,我司将充分考虑项目前期规划的标段区域的具体需求,同时兼顾未来发展,IBMS集成管理平台预留其他系统接口功能,以便XX医院后期项目子系统及其他的分站可接入IBMS集成管理平台主系统。
充分发挥IBMS的特点与优势,使得IBMS一次投入,终身享用。
1.2系统设计XX医院智能化集成平台(以下简称IBMS平台)是通过一个统一的平台,实现对各子系统进行集中监视和管理,将所有子系统之间需要共享的数据收集上来,存储到统一的开放式关系数据库当中,使各个本来毫不相关的子系统,可以在统一的IBMS平台上互相对话。
电子地图电子地图系统是指在计算机软硬件的支持下,以地图数据库为基础,能够进行空间信息的采集、存储、管理、分析和显示的计算机系统。
电子地图系统由硬件、软件、数据和人员等部分组成。
这里着重介绍电子地图的软件组成与主要功能。
软件系统包括操作系统、地图数据库管理软件、专业软件以及其他应用软件。
在电子网络地图系统中地图数据库管理软件是它的核心,它具有构建,管理,检索查询,数据更新等功能:地图构建功能:允许用户根据设计方案选择内容、比例尺、地图投影、地图符号、颜色等,生产预想的地图,以满足需要。
从发展的角度来看,电子地图将成为新的地图制图平台,“地图制图平民化”的趋势也将越来越明显。
地图管理功能:除包含空间数据、属性数据和时间数据外,电子地图还包含多种数据源的数据,因此需要使用地图数据库管理这些复杂、大量的数据。
检索查询功能:可以根据用户需求来检索信息,并以多媒体的形式显示查询结果,包括图形到属性的查询,属性到图形的查询,图形、属性综合查询以及拓扑查询。
数据更新功能:能提供强有力的数据输入、编辑能力,以确保即时地更新数据,保证电子地图的现势性,并为再版地图创造优越的制图环境。
电子地图的图种较多,应用也非常广泛.现在我们来了解一下电子地图家族里的导航图,多媒体地图,网络地图的特点及行业应用.1.导航图现代交通发展以后,出现了复杂的公路体系。
这种公路错综复杂、四通八达,而周围景象往往千篇一律,不容易辨识。
地图是开车行路的必备工具,因此电子导航地图应运而生。
一张CD一ROM能装下全国的所有大大小小的道路数据,开车时携带便携式计算机,就能随时查阅地图。
不过这种电子地图并不像用一张光盘替代一本地图集这么简单,它还有更多的功能,如路径选择:出发前想去哪里,先告诉电子地图,它会帮助选择出一条最快捷的路线。
不一定必须知道目的地在地图上何处,只要有个地址电子地图用地理编码技术就能够自动找目标到并精确定位。
还有详细的资料库能辅助决定旅行计划,如它会告知旅途中会路过哪些名胜景点。
电子地图系统开发方案概述:电子地图系统是一种基于计算机和网络技术,用于展示、查询和管理地理信息的系统。
本文将介绍一个完整的电子地图系统开发方案,包括系统需求、技术选型、系统设计和开发进程。
一、系统需求分析1. 功能需求:- 地图展示:能够以图形化形式展示地图,并支持缩放、拖动等操作。
- 地址搜索:提供地址搜索功能,用户可以通过输入地址查询地图上的位置。
- 路线规划:根据用户的起始点和目的地,规划最佳行车路线,并提供导航指引。
- 地图标注:允许用户在地图上添加标记、标签等信息,方便用户增加个性化的地图数据。
- 数据管理:支持对地图数据进行管理,包括添加、编辑、删除等操作。
2. 性能需求:- 快速响应:系统需要能够在用户进行操作时,快速加载和展示地图数据。
- 稳定可靠:要求系统具备良好的稳定性和可靠性,确保系统能够长时间稳定运行。
二、技术选型1. 前端技术:- 前端界面:采用HTML、CSS和JavaScript技术,实现用户界面的设计和交互操作。
- 地图展示:选择合适的地图引擎,如Google Maps、百度地图等,用于地图的展示和操作。
- 地址搜索:使用地理编码和逆地理编码技术,结合第三方地图服务商的接口,实现地址搜索功能。
- 路线规划:选择合适的路线规划算法,结合第三方地图服务商的接口,实现路线规划和导航功能。
- 交互设计:设计用户友好的界面,并采用响应式设计,使得系统能够在不同终端上展示和操作。
2. 后端技术:- 数据库:选择合适的数据库系统,如MySQL、MongoDB等,用于存储地图数据和用户操作记录。
- 服务器:使用Java、Python等编程语言,结合Spring、Django等开源框架,实现系统的后端逻辑和接口。
- 性能优化:通过缓存、负载均衡等技术手段,提高系统的性能和并发能力。
- 安全性:采用HTTPS协议、接口鉴权等安全措施,保护系统的数据和用户隐私。
三、系统设计1. 架构设计:- 前后端分离:将前端和后端进行解耦,实现前后端分离开发和部署。
一、绪论1、路面管理系统的概念及作用用于优化利用路面养护可用资源,包含信息采集、信息分析和方案决策的管理方法,是包括硬件设备和计算机软件系统的技术实体。
(需依据所学的知识自己总结)1路网评价;2路况性能分析;3养护资金需求分析;4养护资金优化分配应用检测设备获取路面破损数据,建立相应的数据库,制定路面破损评价方法.标准和优先养护排序模型的以计算机为工具的路面管理技术称为路面管理系统。
2、路面管理系统的各组成部分及其作用(P2)1数据采集系统;2数据库管理系统;3网级路面管理系统;4项目级路面管理系统;5地理信息及电子地图管理系统网级系统主要从整个路网的角度出发,通过对各路段现状进行对比分析,为保持路网良好的使用性能而提出科学合理的养护决策,让有限的公路养护资金发挥最大的经济效益和社会效益;项目级路面管理系统则是针对特定的具体的路段养护项目,提出详细的可供操作的养护方案。
网级系统是涉及整个路网的、用于指定路网养护政策、确定路网养护需求和养护费用优化分配的宏观分析系统;项目级系统则是根据网级系统的决策,以路段为对象,从技术和经济的角度分析养护方案的系统。
网级路面管理系统的范围,包括一个地区(省、市)的公路网或一大批工程项目。
它的主要任务是为管理部门进行关键性的行政决策提供对策,网级路面管理系统一般由数据库、使用性能评价模型、对策分析模型、使用性能预估模型、分析模型和优化模型等部分组成。
项目级路面管理系统仅针对一个工程项目,它的主要任务是为管理部门对某一工程进行技术决策时提供对策,以选择费用—效益最佳的方案。
它以数据库为核心,通过对与路面相关的各种数据的采集形成数据库,利用这些数据进行路面使用性能评价,得出各种相关的使用性能指数,通过这些指数确定路面所处的损坏状况,由此给出各路段的养护、改建方案,对各方案加以经济分析比较,得出适合该路段的费用—效益最佳方案。
当数据积累到足够程度后,便可以建立路面使用性能预估模型,对路面的各项使用性能指标进行预估。
电子地图管理系统一、概述:随着电信网络的发达、计算机技术的不断更新,一个采用计算机网络、现代通讯技术、地理信息技术,支持大型数据库的信息平台GIS(地理信息系统)系统应运而生。
地理信息系统一般由地理信息开发平台、电子地图、信息数据库几部分组成。
由于电子地图具有直观、方便的特点,将其应用于决策支持系统能够表现出很大的优越性。
珠海市社会治安视频监控系统即采用高精度电子地图、Oracle大型数据库、计算机网络、现代通讯等技术为一体的具有针对性的综合管理GIS系统。
当按动报警点的报警按钮时,监控端面前的计算机屏幕的电子地图上立即显示出这个报警点的具体方位及事先输入的相关信息,监控端即可通知与此地最近的负责单位出勤,同时计算机自动记录该事件。
监控端通过计算机还可更详细地了解事件发生地周围的情况,及时更新调度,减少盲动。
如果该系统再配上GPS卫星监控系统,则可大大提高对突发事件的应变能力和事件处理效率。
二、设计采取的应用技术及其说明1.电子地图管理系统采用Autodesk公司的Mapguide建立;Autodesk MapGuide 通过Internet/Intranet发布智能设计图、地图及其它数据,从而帮助任何人,在任何地方,都可以获取实时的空间信息,并与之交互。
在Autodesk MapGuide中,用户可以选择对象、查询属性、寻找地物、标注图形、设置报表,这样一套应用系统远远优于纸图、缩微胶片或孤立的数据库,它提升了空间数据的价值。
Autodesk MapGuide可同时与多个关系、地理或设计数据库相连,接纳包括所有主要的空间数据格式,如AutoCAD DWG与Oracle8i Spatial,即可扩展又具安全性。
Autodesk MapGuide的特点在于高速、灵活、易用,从而脱颖而出,成为开发以Web为中心的CAD与GIS 应用系统首选的解决方案,它能够快速地推进决策,降低运营成本,提高客户服务质量。
urGis简介1、概述urGis软件是一套轻量级地理信息开发工具,拥有自主知识产权的地理信息引擎、地图加工工具、地图数据管理工具,适合快速开发应用程序需要。
包括以下几个程序模块:地理信息引擎(QcMapLib)、地图编辑器(TModify)、地图管理器(urMap)、地图服务器(urWebGis)、地图集群服务器(urMapCreator)、地图浏览组件(MapView、urMapJS)和相应的辅助工具(分割器MapCut)。
对应的应用范围如下(1)地图加工:TModify、urMap、MapCut(2)地图发行:urWebGis、urMapCreator(3)二次开发:QcMapLib、MapView、urMapJS2、用途urGis二维电子地图软件为用户提供了从数据采集加工到应用软件开发的完整解决方案,利用urGis二维电子地图软件所提供的功能,可以完成:(1)地图数据加工实现电子地图的矢量化、编辑、不同地图数据的格式转换、地图数据管理工作;(2)地图的互联网发行实现地图预生成、地理信息在IIS服务器上的发布构建地图网站、动态层叠加。
(3)开发地理信息应用软件使用二维电子地图开发组件,方便地建立专业的GIS应用软件系统。
3、特点(1)精巧的地理信息引擎●多级索引的矢量、栅格地理对象管理、控制引擎●数据集中存贮,可定制图层索引,检索地理要素●动态层加强动态数据的优化管理●地理要素的块特性可节约内存空间、提高显示效率●投影变换精度高(2)绿色的地图加工器●热点捕捉提高制图效率●根据特征要素属性创建专题地图●图块、模板创建功能,适应规则图形的快速绘制●多样的外部数据交换能力,支持MAPINFO/ARCHINFO/国军标等(3)先进的服务器●支持地理信息并行计算的集群服务器●联机地图预处理●前绑定的地理信息发布服务器,可配置和事务支持(4)开放的应用接口●面向对象的地理要素组件对象模型●不受开发语言限制,适应VC/VB/DELPHI/ASP等多种开发工具●提供地图显示、控制接口的同时,还提供绘图、编辑接口,可开发自己的地理信息工具4、优势●拥有自主知识产权●位置精度高●并行计算●适应快速开发支持军标数据格式5、地理信息引擎urGis电子地图开发工具——地图引擎是基于组件技术的电子地图数据管理和控制引擎。
#include <cstdio>#include <cstdlib>#include <malloc.h>#include <cstring>#include <ctime>#include <string>#include <algorithm>#include <iostream>using namespace std;void start();void display();void displaypaixu();void displayjiansuo();Road *head = NULL;void SearchByClass(Road *head){time_t a,b;Road *prev,*p,*end,*temp_head;char Run_time[80];int i=0,Class;printf("请输入您所要查找的道路的番号:\n");scanf("%d",&Class);prev=p=(Road *)malloc(sizeof(Road));//创建一个结点a=time(NULL);strftime(Run_time,79,"%H:%M:%S",localtime(&a));temp_head = head;if(temp_head == NULL){printf("无数据源");system("pause");exit(5);}while(temp_head!=NULL){if(temp_head->stRoadRec.linkid==Class){end=(Road *)malloc(sizeof(Road));printf("#linkid=%d ",temp_head->stRoadRec.LinkID);printf("roadnameflag=%d ",temp_head->stRoadRec.roadnameflag);printf("brunch=%d ",temp_head->stRoadRec.brunch);printf("dispclass=%d ",temp_head->stRoadRec.linkid);printf("roadname=%s#\n",temp_head->stRoadRec.roadname);p->stRoadRec.LinkID = temp_head->stRoadRec.LinkID;p->stRoadRec.roadnameflag = temp_head->stRoadRec.roadnameflag;p->stRoadRec.brunch = temp_head->stRoadRec.brunch;p->stRoadRec.linkid = temp_head->stRoadRec.linkid;p->stRoadRec.roadname = temp_head->stRoadRec.roadname;p->next=end;p = p->next;i++;}temp_head=temp_head->next;}end->next=NULL;p ->next = NULL;if(i>=5){save(prev);printf("查询结果数大于5,已保存至SearchResult.txt\n");}b=time(NULL);strftime(Run_time,79,"%H:%M:%S",localtime(&b));printf("本次查找用时%d 秒.\n",b-a);}void SearchById(Road *head){time_t a,b;Road *prev,*p,*end,*temp_head;char Run_time[80];int i=0,LinkId;printf("请输入您所要查找的道路的ID:\n");scanf("%d",&LinkId);prev=p=(Road *)malloc(sizeof(Road));//创建一个结点a=time(NULL);strftime(Run_time,79,"%H:%M:%S",localtime(&a));temp_head = head;if(temp_head == NULL){printf("无数据源");system("pause");exit(3);}while(temp_head!=NULL){if(temp_head->stRoadRec.LinkID==LinkId){end=(Road *)malloc(sizeof(Road));printf("#linkid=%d",temp_head->stRoadRec.LinkID);printf("roadnameflag=%d",temp_head->stRoadRec.roadnameflag);printf("brunch=%d",temp_head->stRoadRec.brunch);printf("dispclass=%d",temp_head->stRoadRec.linkid);printf("roadname=%s#\n",temp_head->stRoadRec.roadname);p->stRoadRec.LinkID=temp_head->stRoadRec.LinkID;p->stRoadRec.roadnameflag=temp_head->stRoadRec.roadnameflag;p->stRoadRec.brunch=temp_head->stRoadRec.brunch;p->stRoadRec.linkid=temp_head->stRoadRec.linkid;p->stRoadRec.roadname = temp_head->stRoadRec.roadname;p->next=end;p = p->next;i++;}temp_head=temp_head->next;}p ->next = NULL;if(i>=5){save(prev);printf("查询结果数大于5,已保存至SearchResult.txt\n");}b=time(NULL);strftime(Run_time,79,"%H:%M:%S",localtime(&b));printf("本次查找用时%d 秒.\n",b-a);}void SearchByName(Road *head){time_t a,b;Road *prev,*p,*end,*temp_head;char Run_time[80];int i=0;char Name[30];printf("请输入您所要查找的道路的名称:\n");scanf("%s",Name);prev=p=(Road *)malloc(sizeof(Road));//创建一个结点a=time(NULL);strftime(Run_time,79,"%H:%M:%S",localtime(&a));temp_head = head;if(temp_head == NULL){printf("无数据源");system("pause");exit(6);}while(temp_head!=NULL){if(strcmp(temp_head->stRoadRec.roadname,Name)==0){end=(Road *)malloc(sizeof(Road));printf("#linkid=%d",temp_head->stRoadRec.LinkID);printf("roadnameflag=%d",temp_head->stRoadRec.roadnameflag);printf("brunch=%d",temp_head->stRoadRec.brunch);printf("dispclass=%d",temp_head->stRoadRec.linkid);printf("roadname=%s#\n",temp_head->stRoadRec.roadname);p->stRoadRec.LinkID = temp_head->stRoadRec.LinkID;p->stRoadRec.roadnameflag = temp_head->stRoadRec.roadnameflag;p->stRoadRec.brunch = temp_head->stRoadRec.brunch;p->stRoadRec.linkid = temp_head->stRoadRec.linkid;p->stRoadRec.roadname = temp_head->stRoadRec.roadname;p->next=end;p = p->next;i++;}temp_head=temp_head->next;}p ->next = NULL;if(i>=5){save(prev);printf("查询结果数大于5,已保存至SearchResult.txt\n");}b=time(NULL);strftime(Run_time,79,"%H:%M:%S",localtime(&b));printf("本次查找用时%d 秒.\n",b-a);}void updata(Road*head){FILE*pp;FILE*ppp;FILE*infile;FILE*outfile;time_t a;char filename[20];Road*p1;Road*p2;pp=fopen("newfile.txt","w");if(pp==NULL){printf("文件创建失败\n");exit(1);}//判断文件是否创建成功//p1=head;if(p1==NULL){printf("空指针\n");}//判断头指针是否为空//while(p1!=NULL){fprintf(pp,"%d%d%d%s%d%d",p1->stRoadRec.data_size,p1->stRoadRec.LinkID,p1->stRoa dRec.road_size,p1->stRoadRec.roadname,p1->stRoadRec.brunch,p1->stRoadRec.linkid);p1=p1->next;}fclose(pp);//将动态链表中的内容写入文件newfile中//a=time(NULL);strcpy(filename,"update.dat");infile=fopen("jilu.txt","w");fscanf(infile,"%d%s",&a,&filename);//将时间和update.dat都写入文件中//outfile=fopen("jilu.txt","r");if(outfile==NULL)exit(1);fprintf(outfile,"%s",filename);//将文件中的内容读出来作为文件名//fclose(outfile);//将时间加入到文件名中,使更新后之前的文件内容不会被覆盖// ppp=fopen(filename,"wb");if(ppp==NULL)printf("更新文件创建失败\n");p2=head;while(p2!=NULL){fwrite(p2,sizeof(Road),1,ppp);p2=p2->next;}printf("文件更新中...\n");printf("文件更新成功\n");fclose(ppp);//文件更新完毕,将排序后的内容写入文本文件和二进制文件中// }void SearchByBruch(Road *head){time_t a,b;Road *prev,*p,*end,*temp_head;char Run_time[80];int i=0,Bruch;printf("请输入您所要查找的道路的岔路数:\n");scanf("%d",&Bruch);p=(Road *)malloc(sizeof(Road));//创建一个结点prev=p;a=time(NULL);strftime(Run_time,79,"%H:%M:%S",localtime(&a));temp_head = head;if(temp_head == NULL){printf("无数据源");system("pause");exit(4);}while(temp_head!=NULL){if(temp_head->stRoadRec.brunch==Bruch){end=(Road *)malloc(sizeof(Road));printf("#linkid=%d",temp_head->stRoadRec.LinkID);printf("roadnameflag=%d",temp_head->stRoadRec.roadnameflag);printf("brunch=%d",temp_head->stRoadRec.brunch);printf("dispclass=%d",temp_head->stRoadRec.linkid);printf("roadname=%s#\n",temp_head->stRoadRec.roadname);p->stRoadRec.LinkID=temp_head->stRoadRec.LinkID;p->stRoadRec.roadnameflag=temp_head->stRoadRec.roadnameflag;p->stRoadRec.brunch=temp_head->stRoadRec.brunch;p->stRoadRec.linkid=temp_head->stRoadRec.linkid;p->stRoadRec.roadname = temp_head->stRoadRec.roadname;p->next = end;p = p->next;i++;}temp_head = temp_head->next;}p->next = NULL;if(i>=5){printf("i的结果是%d\n",i);save(prev);printf("查询结果数大于5,已保存至SearchResult.txt\n");}b=time(NULL);strftime(Run_time,79,"%H:%M:%S",localtime(&b));printf("本次查找用时%d 秒.\n",b-a);}Road* readfile(void){FILE *fp;unsigned short temp_data_size[1]; //数据大小2byte buffunsigned int temp_LinkID[1]; //道路编号4byte buffunsigned short temp_road_size[1]; //道路名称的尺寸2byte buffunsigned int temp_info[1]; //道路信息4byte buffchar temp_name[5000]; //GTBL.dat 不存在就输入char *p_name; //道路名称指针Road *head,*pCur,*pEnd;pCur = (Road *)malloc(sizeof(Road));head=pCur;fp = fopen("GTBL.dat","rb+");if(fp == NULL){printf("错误:不能打开GTBL.dat\n");system("pause");looperror:printf("\n请输入你要打开的文件名\n");scanf("%s",temp_name);fp = fopen( temp_name,"rb+");if( fp == NULL){printf("错误:不能打开%s",temp_name);goto looperror;}}else{printf("读取成功\n");}while(1){pEnd = (Road *)malloc(sizeof(Road));fread( temp_data_size,sizeof(unsigned short),1,fp );pCur->stRoadRec.data_size = M_CHG_INT16(temp_data_size[0]);//printf("%d",pCur->stRoadRec.data_size);fread( temp_LinkID,sizeof(unsigned int),1,fp );pCur->stRoadRec.LinkID = M_CHG_INT32(temp_LinkID[0]);fread( temp_road_size,sizeof(short),1,fp );pCur->stRoadRec.road_size = M_CHG_INT16(temp_road_size[0]);fread( temp_info,sizeof(unsigned int),1,fp );temp_info[0] = M_CHG_INT32( temp_info[0] );pCur->stRoadRec.linkid = ( 0xf & temp_info[0] ); //printf("%d",pCur->stRoadRec.linkid);pCur->stRoadRec.brunch = ( (0x70 & temp_info[0])>>4 );pCur->stRoadRec.roadnameflag = ( (0x80 & temp_info[0])>>7 );if(pCur->stRoadRec.roadnameflag == 1){pCur->stRoadRec.roadname=(char*)malloc(pCur->stRoadRec.data_size-12);//printf("%d",p Cur->stRoadRec.data_size-12);p_name = (char*)malloc(pCur->stRoadRec.data_size-12);fread(pCur->stRoadRec.roadname,(pCur->stRoadRec.data_size-12),1,fp);//pCur->stRoadRec.roadname = p_name;}else{pCur->stRoadRec.roadname = NULL;}if(feof(fp)){break;}pCur->next = pEnd;pCur=pCur->next;}pCur->next=NULL;return head;}void QListSort(Road **head, Road *end){Road *right;Road **left_walk, **right_walk;Road *pivot, *old;int count, left_count, right_count;if (*head == end)return;do{pivot = *head;left_walk = head;right_walk = &right;left_count = right_count = 0;//取第一个节点作为比较的基准,小于基准的在左面的子链表中,//大于基准的在右边的子链表中for (old = (*head)->next; old != end; old = old->next){if (old->stRoadRec.LinkID < pivot->stRoadRec.LinkID) //小于基准,加入到左面的子链表,继续比较{++left_count;*left_walk = old; //把该节点加入到左边的链表中,left_walk = &(old->next);}else //大于基准,加入到右边的子链表,继续比较{++right_count;*right_walk = old;right_walk = &(old->next);}}//合并链表*right_walk = end; //结束右链表*left_walk = pivot; //把基准置于正确的位置上pivot->next = right; //把链表合并//对较小的子链表进行快排序,较大的子链表进行迭代排序。