东软实训《电子地图管理系统》代码.docx_第1页
东软实训《电子地图管理系统》代码.docx_第2页
东软实训《电子地图管理系统》代码.docx_第3页
东软实训《电子地图管理系统》代码.docx_第4页
东软实训《电子地图管理系统》代码.docx_第5页
免费预览已结束,剩余8页可下载查看

下载本文档

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

文档简介

#include #include #include #include #define MCGETCHAR(date)(*(char *)(date)#define MCGETSHORT(date)(unsigned short)(unsigned short)(*(char*)(date)8)|(unsigned short)(*(char*)(date)+1)&0x00ff)#define MCGETLONG(date)(unsigned long)MCGETSHORT(date)16)|(unsigned long)MCGETSHORT(char*)(date)+2)&0x0000ffff)#define MCGET3BN(date)(unsigned long )MCGETCHAR(date)16)|(unsigned long)MCGETSHORT(char*)(date+1)&0x0000ffff) #define Length 65535int Sizecount=2;int Mark_1=0,Mark_2=0;int ReadFile();/读取文件void Qsort(int l,int r);/排序int Binsearch(int s,int t,int key);/二分查找int Search();/检索void Update();/更新struct RoadRecordshort ussize;long ulLinkID;short usRoadnamesize;int usDispclass;int usBrunch;int usRoadnameflag;char Roadname20;struct RoadRecord roadLength;struct Datestore/定义结构体存储数据int n;char Totalsize4;char LinkID_15;char Roadnamesize2 ; char Road_flag2;char Roadname20;static struct Datestore DsLength;struct dateoutlong LinkID;int Dispclass;int Brunch;int Roadnameflag;char Roadname20;struct dateout dateLength;int ReadFile()/模块一读取文件int m;char filename50;unsigned short ustotalsize;unsigned long ulLinkID;unsigned short usRoadnamesize;FILE *fp_1=fopen(D:GTBL.dat,rb+);FILE *fp_2=fopen(D:Newout.txt,w+);if(fp_1=NULL)/文件不存在手动输入文件路径printf(nt无法打开文件“GTBL.dat” 或文件不再D盘根目录下nn请手动输入文件路径(路径中请勿有中文):);scanf(%s,filename);if ( (fp_1=fopen(filename,rb+)=NULL)printf(nt无法打开文件“GTBL.dat” 或文件不存在!nn);return 0;elseprintf(nt文件打开成功!nn);if(fp_2=NULL)printf(nt无法打开文件“newout.txt”或文件不存在!nn);return 0;printf(nt文件读取中.n);while(fread(DsSizecount.Totalsize ,2, 1, fp_1) = 1) fread( DsSizecount.LinkID_1 , 4, 1, fp_1 ) ;/读取LinkID字符fread( DsSizecount.Roadnamesize ,2, 1, fp_1 ) ; /读取Roadnamesize字符串fread( DsSizecount.Road_flag, 4, 1 , fp_1 ) ; ustotalsize = MCGETSHORT(DsSizecount.Totalsize) ; /调用宏函数将字符串信息转化为数值类型ulLinkID = MCGETLONG(DsSizecount.LinkID_1) ; usRoadnamesize = MCGETSHORT(DsSizecount.Roadnamesize);/赋值将数值信息传到结构体中DsSizecount.n=ustotalsize-12;roadSizecount.ussize=ustotalsize;roadSizecount.ulLinkID=ulLinkID;roadSizecount.usRoadnamesize=usRoadnamesize;m=(int)DsSizecount.Road_flag3&255; roadSizecount.usDispclass=m&15;roadSizecount.usBrunch=(m&112)/16;roadSizecount.usRoadnameflag=(m&128)/128;dateSizecount.Dispclass=roadSizecount.usDispclass;dateSizecount.Brunch=roadSizecount.usBrunch;dateSizecount.Roadnameflag=roadSizecount.usRoadnameflag;dateSizecount.LinkID=ulLinkID;fread( DsSizecount.Roadname , sizeof(char) , ustotalsize-12 , fp_1 ) ;/从文件中读取道路名称strcpy(dateSizecount.Roadname,DsSizecount.Roadname+4);fprintf(fp_2,LinkID=);fprintf(fp_2,%dt,dateSizecount.LinkID);fprintf(fp_2,Flag=);fprintf(fp_2,%dt,dateSizecount.Roadnameflag);fprintf(fp_2,Brunch);fprintf(fp_2,%dt,dateSizecount.Brunch);fprintf(fp_2,Dispclass=);fprintf(fp_2,%dt,dateSizecount.Dispclass);fprintf(fp_2,Roadname=);fprintf(fp_2,%st,dateSizecount.Roadname);fprintf(fp_2,n);Sizecount+;fclose(fp_1);fclose(fp_2);printf(nt文件读取成功nn 生成文件nn);return 1;void Qsort(int l,int r)/模块二排序(快速排序)int n=datel.LinkID,i=l,j=r;dateLength-2=datel;DsLength-2=Dsl;if(l=r) return ;while(ij)while(i=n)-j;datei=datej;Dsi=Dsj;while(ij & datei.LinkID=n) +i;datej=datei;Dsj=Dsi;datei=dateLength-2;Dsi=DsLength-2;Qsort(l,i-1);Qsort(i+1,r);int Binsearch(int s,int t,int key)/二分查找int low=s,high=t,mid;if(skey)return Binsearch(low,mid-1,key);elsereturn Binsearch(mid+1,high,key);return -1;int Search()/模块三检索int sel,i,flag=0,n,key,mid,s=2,t=Sizecount;char Roadname20;FILE *p,*p1,*p2;/分别保存不同的道路检索信息printf(n请输入检索方式:nt1:指定LinkID检索nt2:指定交叉Link列表示Class番号检索nt3:指定查找岔路数检索nt4:指定道路名称检索nt0:返回n请选择:); while(scanf(%d,&sel)!=1)/判断输入的数据是否为数字fflush(stdin);printf(nt输入错误,请重新输入!n);printf(n请输入检索方式:nt1:指定LinkID检索nt2:指定交叉Link列表示Class番号检索nt3:指定查找岔路数检索nt4:指定道路名称检索nt0:返回n请选择:); switch(sel)case 1:/LinkID检索printf(请输入LinkID:);scanf(%d,&n);key=n;mid=Binsearch(s,t,key);if(mid!=-1)printf(nt检索到的信息不足5条,信息将显示在屏幕上!n);printf(nLinkID=%dtRoadnameflag=%dtBrunch=%dtDispclass=%dtRoadname=%snn,datemid.LinkID,datemid.Roadnameflag,datemid.Brunch,datemid.Dispclass,datemid.Roadname);flag+;if(flag=0) printf(nt没有匹配结果,请重新选择检索方式!nn); Search(); return 0;break;case 2:/指定交叉Link列表示Class番号检索printf(请输入交叉Link列表示Class番号:); scanf(%d,&n);for(i=2;i=Sizecount;i+)if(datei.Dispclass=n)flag+;if(flag=0)printf(nt没有Class番号为%d的道路nn,n);return 0;if(flag=5)printf(nt检索到的信息不足5条,信息将显示在屏幕上!n);for(i=2;i=Sizecount;i+)if(datei.Dispclass=n)printf(nLinkID=%dtRoadnameflag=%dtBrunch=%dtDispclass=%dtRoadname=%sn,datei.LinkID,datei.Roadnameflag,datei.Brunch,datei.Dispclass,datei.Roadname);return 0;elseprintf(nt结果大于5条,转存到D:Class番号检索结果.TXTnn);p=fopen(D:Class番号检索结果.TXT,w+);for(i=2;i=Sizecount;i+)if(datei.Dispclass=n)fprintf(p,nLinkID=%dtRoadnameflag=%dtBrunch=%dtDispclass=%dtRoadname=%s,datei.LinkID,datei.Roadnameflag,datei.Brunch,datei.Dispclass,datei.Roadname);fclose(p);return 0;break;case 3:/指定查找岔路数检索printf(请输入岔路数:);scanf(%d,&n);for(i=2;iSizecount;i+)if(datei.Brunch=n) flag+;if(flag=0)printf(nt没有岔路数为%d的道路!nn,n);return 0; else if(flag=5)printf(nt检索到的信息不足5条,信息将显示在屏幕上!n); for(i=2;iSizecount;i+) if(datei.Brunch=n) printf(nLinkID=%dtRoadnameflag=%dtBrunch=%dtDispclass=%dtRoadname=%sn,datei.LinkID,datei.Roadnameflag,datei.Brunch,datei.Dispclass,datei.Roadname); return 0; else printf(nt结果大于5条,转存到D:岔路口检索结果.TXTnn); p1=fopen(D:岔路口检索结果.TXT,w+); for(i=2;iSizecount;i+) if(datei.Brunch=n) fprintf(p1,nLinkID=%dtRoadnameflag=%dtBrunch=%dtDispclass=%dtRoadname=%s,datei.LinkID,datei.Roadnameflag,datei.Brunch,datei.Dispclass,datei.Roadname); fclose(p1); return 0;break;case 4:/指定道路名称检索printf(请输入道路名称:);scanf(%s,&Roadname);for(i=2;iSizecount;i+)if(strcmp(datei.Roadname,Roadname)=0) flag+;if(flag=0)printf(nt没有道路名称为“%s”的道路!nn,Roadname);return 0;else if(flag=5)printf(nt检索到的信息不足5条,信息将显示在屏幕上!n);for(i=2;iSizecount;i+)if(strcmp(datei.Roadname,Roadname)=0) printf(nLinkID=%dtRoadnameflag=%dtBrunch=%dtDispclass=%dtRoadname=%sn,datei.LinkID,datei.Roadnameflag,datei.Brunch,datei.Dispclass,datei.Roadname);return 0;elseprintf(nt结果大于5条,转存到D:道路名称检索结果.TXTnn);p2=fopen(D:道路名称检索结果.txt,w+);for(i=2;iSizecount;i+)if(strcmp(datei.Roadname,Roadname)=0)fprintf(p2,nLinkID=%dtRoadnameflag=%dtBrunch=%dtDispclass=%dtRoadname=%s,datei.LinkID,datei.Roadnameflag,datei.Brunch,datei.Dispclass,datei.Roadname);fclose(p2);return 0;break;case 0:return 0;break;default: / 输入不在0到4之间,重新返回检索函数printf(nt输入信息有误请重新选择检索方式!nn); Search(); return 0;void Update()int a;remove(D:GTBL.dat);a=rename(D:Sort.dat,D:GTBL.dat);if(a!=0)printf(nt更新失败,无法找到更新文件或请确认操作权限!nn);return;elseprintf(nt更新成功!nn);void main()int a,n=0,i,Mark_3=0,Mark_4=0;clock_t start, finish;double Time;FILE *p1,*p2;printf(|*-#-*|n); printf(|* 欢 迎 使 用 *|n); printf(|* 电 子 地 图 管 理 系 统 *|n); printf(|* Group 9 2015-01-14 *|n); printf(|*|nn);doprintf(请选择服务的种类:); printf(nt1:读取文件nt2:排序并输出结果nt3:检索nt4:更新nt0:退出n请选择:);while(scanf(%d,&a)!=1)/判断输入的数据是否为数字fflush(stdin);/清理缓存printf(nt输入有误,请重新输入!nn);printf(请选择服务的种类:); printf(nt1:读取文件nt2:排序并输出结果nt3:检索nt4:更新nt0:退出n请选择:);switch(a)case 1:if(Mark_3=1)printf(nt文件已经读取成功,如需再次读取文件,请关闭本程序重试!nn);else if(ReadFile()=1)+Mark_1;Mark_3=Mark_1;/复制Mark_1的值break;case 2:if(Mark_2=1)printf(nt排序已经完成,如需再次排序请关闭本程序重试!nn);else if(Mark_1=0)printf(nt请在排序前先选择“读取文件”操作!nn);else if(Mark_1=1)+Mark_2;if(date2.LinkID!=1)/检测文件是否有序start = clock();Qsort(2,Sizecount-1);finish = clock();Time = (double)(finish - start)/CLOCKS_PER_SEC;printf(nt排序成功,用时:%f秒!nn 排序后的文本文件nn 排序后的二进制文件nn,Time);p1=fopen(D:Sort.dat,wb+);p2=fopen(D:sort.txt,w+);for(i=2;iSizecount;i+)fprintf(p2 , %dt , datei.LinkID);fprintf(p2 , %dt

温馨提示

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

评论

0/150

提交评论