电子地图管理系统

上传人:hao****021 文档编号:167895971 上传时间:2022-11-06 格式:DOC 页数:18 大小:60KB
收藏 版权申诉 举报 下载
电子地图管理系统_第1页
第1页 / 共18页
电子地图管理系统_第2页
第2页 / 共18页
电子地图管理系统_第3页
第3页 / 共18页
资源描述:

《电子地图管理系统》由会员分享,可在线阅读,更多相关《电子地图管理系统(18页珍藏版)》请在装配图网上搜索。

1、#include #include #include #include #include #include #include #include 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_time80;int i=0,Class;printf(请输入您所要查找的道路

2、的番号: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=

3、%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.road

4、nameflag = 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、果数大于5,已保存至SearchResult.txtn);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_time80;int i=0,LinkId;printf(请输入您所要查找的道路的ID:n);scanf(%d,&LinkId);prev=p=(Road *)malloc(sizeof(Road);/创建一个结点a=ti

6、me(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-stRoa

7、dRec.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-stRo

8、adRec.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.txtn);b=time(NULL);strftime(Run_time,79,%H:%M:%S,localtime(&b);printf(本次

9、查找用时%d 秒.n,b-a);void SearchByName(Road *head)time_t a,b;Road *prev,*p,*end,*temp_head; char Run_time80;int i=0;char Name30;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)p

10、rintf(无数据源);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=

11、%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.ro

12、adname = 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.txtn);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*o

13、utfile;time_t a;char filename20;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-stRoadRec.road_size,p1-stRoadRec.roadname,p1-stRoadRe

14、c.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(o

15、utfile);/将时间加入到文件名中,使更新后之前的文件内容不会被覆盖/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; c

16、har Run_time80;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=Bru

17、ch)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

18、=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;i

19、f(i=5)printf(i的结果是%dn,i);save(prev);printf(查询结果数大于5,已保存至SearchResult.txtn);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_size1; /数据大小 2byte buff unsigned int temp_LinkID1; /道路编号 4byte buff unsigned short temp_r

20、oad_size1; /道路名称的尺寸 2byte buffunsigned int temp_info1; /道路信息 4byte buffchar temp_name5000; /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.datn);system(pause);looperror:printf(n请输入你要打开的

21、文件名n);scanf(%s,temp_name);fp = fopen( temp_name,rb+);if( fp = NULL)printf(错误:不能打开%s,temp_name);goto looperror;elseprintf(读取成功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_size0);/printf(%d,pCur-stRoa

22、dRec.data_size);fread( temp_LinkID,sizeof(unsigned int),1,fp );pCur-stRoadRec.LinkID = M_CHG_INT32(temp_LinkID0);fread( temp_road_size,sizeof(short),1,fp );pCur-stRoadRec.road_size = M_CHG_INT16(temp_road_size0);fread( temp_info,sizeof(unsigned int),1,fp );temp_info0 = M_CHG_INT32( temp_info0 );pCur

23、-stRoadRec.linkid = ( 0xf & temp_info0 ); /printf(%d,pCur-stRoadRec.linkid);pCur-stRoadRec.brunch = ( (0x70 & temp_info0)4 );pCur-stRoadRec.roadnameflag = ( (0x80 & temp_info0)7 );if(pCur-stRoadRec.roadnameflag = 1)pCur-stRoadRec.roadname=(char*)malloc(pCur-stRoadRec.data_size-12);/printf(%d,pCur-st

24、RoadRec.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;elsepCur-stRoadRec.roadname = NULL;if(feof(fp)break;pCur-next = pEnd;pCur=pCur-next;pCur-next=NULL;return head;void QListSort(

25、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)-nex

26、t; old != end; old = old-next) if (old-stRoadRec.LinkID 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 = piv

27、ot; /把基准置于正确的位置上 pivot-next = right; /把链表合并 /对较小的子链表进行快排序,较大的子链表进行迭代排序。 if(left_walk right_walk) QListSort(&(pivot-next), end); end = pivot; count = left_count; else QListSort(head, pivot); head = &(pivot-next); count = right_count; while (count 1);Road * BubbleSort(Road *head) Road *endpt; /*控制循环比较

28、*/ Road *p; /*临时指针变量*/ Road *p1; Road *p2; p1 = (Road *)malloc(sizeof(Road); p1-next = head; /*注意理解:我们增加一个节点,放在第一个节点的前面,主要是为了便于比较。因为第一个节点没有前驱,我们不能交换地址。*/ head = p1; /*让head指向p1节点,排序完成后,我们再把p1节点释放掉*/ for (endpt=NULL; endpt!=head; endpt=p) /*结合第6点理解*/ for (p=p1=head; p1-next-next!=endpt; p1=p1-next) i

29、f (p1-next-stRoadRec.LinkID p1-next-next-stRoadRec.LinkID) /*如果前面的节点键值比后面节点的键值大,则交换*/ p2 = p1-next-next; /*结合第1点理解*/ p1-next-next = p2-next; /*结合第2点理解*/ p2-next = p1-next; /*结合第3点理解*/ p1-next = p2; /*结合第4点理解*/ p = p1-next-next; /*结合第6点理解*/ p1 = head; /*把p1的信息去掉*/ head = head-next; /*让head指向排序后的第一个节点

30、*/ free(p1); /*释放p1*/ p1 = NULL; /*p1置为NULL,保证不产生“野指针”,即地址不确定的指针变量*/ return head;Road *SelectSort(Road *head) Road *first; /*排列后有序链的表头指针*/ Road *tail; /*排列后有序链的表尾指针*/ Road *p_min; /*保留键值更小的节点的前驱节点的指针*/ Road *min; /*存储最小节点*/ Road *p; /*当前比较的节点*/ first = NULL; while (head != NULL) /*在链表中找键值最小的节点。*/ /*

31、注意:这里for语句就是体现选择排序思想的地方*/ for (p=head,min=head; p-next!=NULL; p=p-next) /*循环遍历链表中的节点,找出此时最小的节点。*/ if (p-next-stRoadRec.LinkID stRoadRec.LinkID) /*找到一个比当前min小的节点。*/ p_min = p; /*保存找到节点的前驱节点:显然p-next的前驱节点是p。*/ min = p-next; /*保存键值更小的节点。*/ /*上面for语句结束后,就要做两件事;一是把它放入有序链表中;二是根据相应的条件判断,安排它离开原来的链表。*/ /*第一件

32、事*/ if (first = NULL) /*如果有序链表目前还是一个空链表*/ first = min; /*第一次找到键值最小的节点。*/ tail = min; /*注意:尾指针让它指向最后的一个节点。*/ else /*有序链表中已经有节点*/ tail-next = min; /*把刚找到的最小节点放到最后,即让尾指针的next指向它。*/ tail = min; /*尾指针也要指向它。*/ /*第二件事*/ if (min = head) /*如果找到的最小节点就是第一个节点*/ head = head-next; /*显然让head指向原head-next,即第二个节点,就OK

33、*/ else /*如果不是第一个节点*/ p_min-next = min-next; /*前次最小节点的next指向当前min的next,这样就让min离开了原链表。*/ if (first != NULL) /*循环结束得到有序链表first*/ tail-next = NULL; /*单向链表的最后一个节点的next应该指向NULL*/ head = first; return head;int main(void) time_t begin,end,i; int x=1,y=1,z=1,p=1; start(); for(; x!=0;) /实现菜单循环展示 display(); i

34、f(y=1) printf(n); /outputlist(sHead); y=0; scanf(%d,&x); switch(x) case 1:/读取文件 /建立空的动态链表 head = readfile(); break; case 2: /* 排序 */ for(; z!=0;) displaypaixu(); scanf(%d,&z); switch(z) case 1:/冒泡 printf(正在排序.); time(&begin); head = BubbleSort( head ); time(&end); i=end-begin;/冒泡排序函数返回值 printf(本次排序用

35、时%d秒n,i); break; case 2:/选择 printf(正在排序.); time(&begin); head=SelectSort( head ); time(&end); i=end-begin;/选择排序函数返回值 printf(本次排序用时%d秒n,i); break; case 3:/快排 printf(正在排序.); time(&begin); QListSort( &head ,NULL); time(&end); i=end-begin;/快速排序函数返回值 printf(本次排序用时%d秒n,i); break; case 0: break; default: p

36、rintf(选项不合法!n); break; case 3:/检索 for(; p!=0;) displayjiansuo(); scanf(%d,&p); switch(p) case 1:/按ID SearchById(head); break; case 2:/按番号 SearchByClass(head); break; case 3:/按岔路数 SearchByBruch(head); break; case 4:/按道路名称 SearchByName(head); break; case 0:/返回 break; default: printf(选项不合法!n); break; c

37、ase 4: /更新 updata(head); break; case 0: break; default: printf(n 非法选项!n,x); void start(void) int i; clock_t start,finish; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN); printf( -n); printf( | * |n); printf( | * |n); printf( | * * * * |n); printf( | * * * * * * * * |n); pr

38、intf( | * * * * * * * * |n); printf( | * * * * * * * * |n); printf( | * * * * * * |n); printf( | * * * * * * * |n); printf( | * * * * * * * |n); printf( | * |n); printf( | |n); printf( | 欢迎进入 |n); printf( | |n); printf( | 电子地图信息统计系统 |n); printf( | E-map Informationg System |n); printf( | BY MAX |n);

39、 printf( | |n); printf( | |n); printf( | NOW LOADING. |n); printf( | |n); printf( | ); for(i=0; i); /此处用time函数来暂停0.1秒以描述程序的加载过程 start=clock(); finish=clock(); while(finish-start)30) finish=clock(); printf( ); printf(|n); printf( | Load successfully! |n); printf( | |n); printf( | |n); printf( -n); pr

40、intf(n 按任意键将进入系统 (Press any key to enter the system) n ); printf(n ); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED); system(pause);void display() printf(-请按照菜单提示输入您的选择-n); printf( n); printf( 【读取文件】n); printf( 【排序】 n); printf( 【检索】 n); printf( 【更新】 n); printf( 【退出】 n);void

41、displayjiansuo() printf( -请按照菜单提示输入您的选择-n); printf( n); printf( 【指定LinkID检索】n); printf( 【指定交叉link列表示class番号检索】 n); printf( 【指定查找岔路数检索】 n); printf( 【指定道路名称检索】 n); printf( 【返回】 n);void displaypaixu() printf(-请按照菜单提示输入您的选择-n); printf( n); printf( 【冒泡排序】 n); printf( 【选择排序】 n); printf( 【快速排序】 n); printf( 【返回菜单】 n);

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!