C语言实训电子地图导航系统源代码.docx

上传人:b****3 文档编号:12673243 上传时间:2023-04-21 格式:DOCX 页数:26 大小:22.25KB
下载 相关 举报
C语言实训电子地图导航系统源代码.docx_第1页
第1页 / 共26页
C语言实训电子地图导航系统源代码.docx_第2页
第2页 / 共26页
C语言实训电子地图导航系统源代码.docx_第3页
第3页 / 共26页
C语言实训电子地图导航系统源代码.docx_第4页
第4页 / 共26页
C语言实训电子地图导航系统源代码.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

C语言实训电子地图导航系统源代码.docx

《C语言实训电子地图导航系统源代码.docx》由会员分享,可在线阅读,更多相关《C语言实训电子地图导航系统源代码.docx(26页珍藏版)》请在冰豆网上搜索。

C语言实训电子地图导航系统源代码.docx

C语言实训电子地图导航系统源代码

/**************************************************************************************

*Filename:

tagMap_tDo.cpp*

*Created:

2012/6/24*

*Author:

..吴昊王洋张伟王伟*

**************************************************************************************/

#include

#include

#include

#include

/*函数声明部分*/

voidma_interf();

intReadFile();

voidReadData(FILE*p);

voidWriteResult(intb[],intj);

voidSearch();

/*宏定义*/

#defineMCGETCHAR(data)(*((char*)(data)))

#defineMCGETSHORT(data)((unsignedshort)((((unsignedshort)(*((char*)(data))))<<8)|(((unsignedshort)(*((char*)(data)+1)))&0x00ff)))

#defineMCGETLONG(data)((((unsignedlong)MCGETSHORT((data)))<<16)|(((unsignedlong)MCGETSHORT((char*)(data)+2))&0x0000ffff))

#defineMCGET3BN(data)((((unsignedlong)MCGETCHAR((data)))<<16)|(((unsignedlong)MCGETSHORT((char*)(data)+1))&0x0000ffff))

#defineLength655350

intnsizecount=2;

/*定义结构体类型及变量*/

structRoadRecord

{

shortussize;

longullinkId;

shortusroadnamesize;

intusdispclass;

intusbrunch;

intusroadnameflag;

charroadname[20];

};

structtagMap_t

{

charsign_one[2];

charlinkid[14];

charflag[7];

charbrunch[9];

chardispclass[13];

charRoadname[30];

charsign_two[2];

}*s,*ss;

intmark_1=0,mark_2=0;//标记程序是否运行读取文件和排序操作

voidSortData(tagMap_ts[]);

voidUpdate(tagMap_ts[]);

structdataOut

{longlinkId;

intdispclass;

intbrunch;

introadnameflag;

};

structRoadRecordroad[Length];

structdataOutdata[Length];/*存储道路信息的数组*/

/**************************************************************************************

*Functionname:

ReadFile*

*FunctionDescription:

读取二进制文件,并将其解析在文本文档里*

*Date:

2012/6/20*

**************************************************************************************/

intReadFile()

{

intm;

characlinkId[4];/*从二进制文件中读取道路编号*/

characroadnamesize[2];/*从二进制文件中读取道路名称数据长度*/

characNodeInfo[4];

unsignedshortustotalsize;

unsignedlongullinkId;

unsignedshortusroadnamesize;

charactotalsize[2];/*从二进制文件中读取道路信息的总体数据长度*/

FILE*pfp=fopen("e:

\\电子地图管理系统.dat","rb+");

FILE*pf2=fopen("e:

\\解析文件.txt","w+");

if(pfp==NULL)

{

printf("cannotopenthe电子地图管理系统.datfileorthereisnothefile!

\n");

return0;

}

if(pf2==NULL)

{

printf("cannotopenthe解析文件.txtfileorthereisnothefile\n");

return0;

}

printf("\n\n\t\t\t\t文件读取中.....\n");

while(fread(actotalsize,sizeof(actotalsize),1,pfp)==1)

{

fread(aclinkId,sizeof(aclinkId),1,pfp);/*读取占用4字节的linkId字符*/

fread(acroadnamesize,sizeof(acroadnamesize),1,pfp);/*读取占用2字节的roadnamesize字符串*/

fread(acNodeInfo,sizeof(acNodeInfo),1,pfp);

ustotalsize=MCGETSHORT(actotalsize);/*调用宏函数,将字符串信息转化为数值类型*/

ullinkId=MCGETLONG(aclinkId);

usroadnamesize=MCGETSHORT(acroadnamesize);

/*赋值:

将数值信息传到结构体中*/

road[nsizecount].ussize=ustotalsize;

road[nsizecount].ullinkId=ullinkId;

road[nsizecount].usroadnamesize=usroadnamesize;

m=(int)acNodeInfo[3]&255;

road[nsizecount].usdispclass=m&15;

road[nsizecount].usbrunch=(m&112)/16;

road[nsizecount].usroadnameflag=(m&128)/128;

data[nsizecount].dispclass=road[nsizecount].usdispclass;

data[nsizecount].brunch=road[nsizecount].usbrunch;

data[nsizecount].roadnameflag=road[nsizecount].usroadnameflag;

data[nsizecount].linkId=ullinkId;

fread(road[nsizecount].roadname,sizeof(char),ustotalsize-12,pfp);/*从文件中读取道路名称*/

fprintf(pf2,"#\t");

fprintf(pf2,"LinkID=");

fprintf(pf2,"%d\t",data[nsizecount].linkId);

fprintf(pf2,"flag=");

fprintf(pf2,"%d\t",data[nsizecount].roadnameflag);

fprintf(pf2,"brunch=");

fprintf(pf2,"%d\t",data[nsizecount].brunch);

fprintf(pf2,"dispclass=");

fprintf(pf2,"%d\t",data[nsizecount].dispclass);

fprintf(pf2,"Roadname=1=");

fprintf(pf2,"%s\t",road[nsizecount].roadname+4);

fprintf(pf2,"#");

fprintf(pf2,"\n");

nsizecount++;

}

fclose(pfp);

fclose(pf2);

printf("\n\t\t\t\t文件读取成功\n");

return0;

}

/**************************************************************************************

*Functionname:

Search*

*FunctionDescription:

检索信息部分,可按不同的类型进行检索*

*Date:

2012/6/20*

**************************************************************************************/

voidSearch()

{

intselect,i=0,j=0,*b,c=0,f;//select标记选择需要运行的分支i循环控制j标记检索到信息的条数

//b数组指针用来存放检索到的信息的下标c用来存放数组b的下标f标记数组b的值

charsss[20];

printf("\n\n\t请输入检索方式:

\n\n\t\t1:

指定linkID检索\n\n\t\t2:

指定交叉link列表示class番号检索\n\n\t\t3:

指定查找岔路数检索\n\n\t\t4:

指定道路名称检索\n\n\t\t0:

返回\n\n\t\t请选择:

");

scanf("%d",&select);

system("cls");

printf("\n\n*****--当检索到信息条数超过5条时,会把检索到的信息存放在searchresult文件中--*****\n\n");

printf("\n********--当检索到信息条数未超过5条时,会把检索到的信息直接显示在屏幕上--********\n\n\n");

if(select==1)

{

charss_1[14]="LinkID=";

printf("\t请输入link的ID:

");

scanf("%s",sss);

system("cls");

strcat(ss_1,sss);//连接字符串

for(i=0;i<(nsizecount-2);i++)

{

if(strcmp(ss_1,ss[i].linkid)==0)//比较字符串是否一致

{

printf("\n\n%s%s%s%s%s%s%s\n\n\n",s[i].sign_one,ss[i].linkid,ss[i].flag,ss[i].brunch,\

ss[i].dispclass,ss[i].Roadname,s[i].sign_two);

j++;

}

}

if(j==0)

{

printf("\n\n\t\t\t\t没有匹配结果\n\n\t\t\t请重新选择检索方式\n");

Search();

}

}

elseif(select==2)

{

charss_1[14]="dispclass=";

printf("\t请输入交叉link列表示class番号:

");

scanf("%s",sss);

system("cls");

strcat(ss_1,sss);//连接字符串

for(i=0;i<(nsizecount-2);i++)

{

if(strcmp(ss_1,ss[i].dispclass)==0)//比较字符串是否一致

{

j++;

}

}

b=(int*)malloc(sizeof(int)*j);//动态申请数组b的存储空间

for(i=0;i<(nsizecount-2);i++)

{

if(strcmp(ss_1,ss[i].dispclass)==0)//比较字符串是否一致

{

b[c]=i;

c++;

}

}

if(j==0)

{

printf("\n\n\t\t\t\t没有匹配结果\n\n\t\t\t请重新选择检索方式\n");

Search();

}

elseif(j>5)

{

WriteResult(b,j);

}

elseif(j<=5)//判断检索到得条数是否超过5条

{

printf("\n\n");

for(i=0;i

{

f=b[i];

printf("%s%s%s%s%s%s%s\n",s[f].sign_one,ss[f].linkid,ss[f].flag,ss[f].brunch,\

ss[f].dispclass,ss[f].Roadname,s[f].sign_two);

}

printf("\n\n");

}

free(b);

}

elseif(select==3)

{

charss_1[14]="brunch=";

printf("\t请输入岔路数:

");

scanf("%s",sss);

system("cls");

strcat(ss_1,sss);//连接字符串

for(i=0;i<(nsizecount-2);i++)

{

if(strcmp(ss_1,ss[i].brunch)==0)//比较字符串是否一致

{

j++;

}

}

b=(int*)malloc(sizeof(int)*j);//动态申请数组b的存储空间

for(i=0;i<(nsizecount-2);i++)

{

if(strcmp(ss_1,ss[i].brunch)==0)//比较字符串是否一致

{

b[c]=i;

c++;

}

}

if(j==0)

{

printf("\n\n\t\t\t\t没有匹配结果\n\n\t\t\t请重新选择检索方式\n");

Search();

}

elseif(j>5)

{

WriteResult(b,j);

}

elseif(j<=5)//判断检索到得条数是否超过5条

{

printf("\n\n");

for(i=0;i

{

f=b[i];

printf("%s%s%s%s%s%s%s\n",s[f].sign_one,ss[f].linkid,ss[f].flag,ss[f].brunch,\

ss[f].dispclass,ss[f].Roadname,s[f].sign_two);

}

printf("\n\n");

}

free(b);

}

elseif(select==4)

{

charss_1[14]="Roadname=1=";

printf("\t请输入道路名称:

");

scanf("%s",sss);

system("cls");

strcat(ss_1,sss);//连接字符串

for(i=0;i<(nsizecount-2);i++)

{

if(strcmp(ss_1,ss[i].Roadname)==0)//比较字符串是否一致

{

j++;

}

}

b=(int*)malloc(sizeof(int)*j);//动态申请数组b的存储空间

for(i=0;i<(nsizecount-2);i++)

{

if(strcmp(ss_1,ss[i].Roadname)==0)//比较字符串是否一致

{

b[c]=i;

c++;

}

}

if(j==0)

{

printf("\n\n\t\t\t\t没有匹配结果\n\n\t\t\t请重新选择检索方式\n");

Search();

}

elseif(j>5)//判断检索到得条数是否超过5条

{

WriteResult(b,j);

}

elseif(j<=5)

{

printf("\n\n");

for(i=0;i

{

f=b[i];

printf("%s%s%s%s%s%s%s\n",s[f].sign_one,ss[f].linkid,ss[f].flag,ss[f].brunch,\

ss[f].dispclass,ss[f].Roadname,s[f].sign_two);

}

printf("\n\n");

}

free(b);

}

elseif(select==0)

{

system("cls");

ma_interf();

}

else//输入不在0到4之间给出提示信息重新返回检索函数

{

system("cls");

printf("\n\n\t\t输入信息错误,请重新选择检索方式\n\n");

Search();

}

ma_interf();//执行结束返回主界面

}

/**************************************************************************************

*Functionname:

WriteResult*

*FunctionDescription:

检索信息,当超过5条时,就将信息写入一个文档中*

*Date:

2012/6/21*

**************************************************************************************/

voidWriteResult(intb[],intj)

{

FILE*qq;

if((qq=fopen("e:

\\searchresult.txt","w"))==NULL)//判断文件是否创建成功

{

printf("创建文件失败\n");

exit(0);

}

inti=0,f;//i为循环控制变量f记录传入数组在不同的i下b[i]的值

printf("\n\n\t\t\t检索到的信息超过--5--条\n\n\n\t\t检索到的信息写入searchresult文件中……\n");

for(i=0;i

{

f=b[i];

fprintf(qq,"#\t");

fprintf(qq,"%s\t",ss[f].linkid);//检索到的道路信息写入文件中

fprintf(qq,"%s\t",ss[f].flag);//检索到的道路信息写入文件中

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1