C语言实训电子地图导航系统源代码Word文档下载推荐.docx
- 文档编号:22176550
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:27
- 大小:22.38KB
C语言实训电子地图导航系统源代码Word文档下载推荐.docx
《C语言实训电子地图导航系统源代码Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言实训电子地图导航系统源代码Word文档下载推荐.docx(27页珍藏版)》请在冰豆网上搜索。
16)|(((unsignedlong)MCGETSHORT((char*)(data)+1))&
#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("
\\解析文件.txt"
w+"
if(pfp==NULL)
{
printf("
cannotopenthe电子地图管理系统.datfileorthereisnothefile!
\n"
return0;
}
if(pf2==NULL)
cannotopenthe解析文件.txtfileorthereisnothefile\n"
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"
LinkID="
%d\t"
data[nsizecount].linkId);
flag="
data[nsizecount].roadnameflag);
brunch="
data[nsizecount].brunch);
dispclass="
data[nsizecount].dispclass);
Roadname=1="
%s\t"
road[nsizecount].roadname+4);
#"
\n"
nsizecount++;
fclose(pfp);
fclose(pf2);
\n\t\t\t\t文件读取成功\n"
return0;
}
Search*
检索信息部分,可按不同的类型进行检索*
2012/6/20
*
voidSearch()
intselect,i=0,j=0,*b,c=0,f;
//select标记选择需要运行的分支i循环控制j标记检索到信息的条数
//b数组指针用来存放检索到的信息的下标c用来存放数组b的下标f标记数组b的值
charsss[20];
\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"
\n\n*****--当检索到信息条数超过5条时,会把检索到的信息存放在searchresult文件中--*****\n\n"
\n********--当检索到信息条数未超过5条时,会把检索到的信息直接显示在屏幕上--********\n\n\n"
if(select==1)
{
charss_1[14]="
;
printf("
\t请输入link的ID:
scanf("
%s"
sss);
system("
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]="
printf("
\t请输入交叉link列表示class番号:
scanf("
system("
strcat(ss_1,sss);
//连接字符串
{
if(strcmp(ss_1,ss[i].dispclass)==0)//比较字符串是否一致
{
j++;
}
}
b=(int*)malloc(sizeof(int)*j);
//动态申请数组b的存储空间
if(strcmp(ss_1,ss[i].dispclass)==0)//比较字符串是否一致
b[c]=i;
c++;
if(j==0)
Search();
elseif(j>
5)
WriteResult(b,j);
elseif(j<
=5)//判断检索到得条数是否超过5条
\n\n"
for(i=0;
j;
{
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);
}
free(b);
}
elseif(select==3)
\t请输入岔路数:
if(strcmp(ss_1,ss[i].brunch)==0)//比较字符串是否一致
//动态申请数组b的存储空间
if(j==0)
printf("
Search();
=5)//判断检索到得条数是否超过5条
elseif(select==4)
\t请输入道路名称:
if(strcmp(ss_1,ss[i].Roadname)==0)//比较字符串是否一致
if(strcmp(ss_1,ss[i].Roadname)==0)//比较字符串是否一致
if(j==0)
printf("
Search();
elseif(j>
5)//判断检索到得条数是否超过5条
WriteResult(b,j);
elseif(j<
=5)
for(i=0;
f=b[i];
ss[f].dispclass,ss[f].Roadname,s[f].sign_two);
free(b);
elseif(select==0)
ma_interf();
}
else//输入不在0到4之间给出提示信息重新返回检索函数
\n\n\t\t输入信息错误,请重新选择检索方式\n\n"
Search();
ma_interf();
//执行结束返回主界面
/******************************************************************************
********
WriteResult*
检索信息,当超过5条时,就将信息写入一个文档中*
2012/6/21*
voidWriteResult(intb[],intj)
FILE*qq;
if((qq=fopen("
\\searchresult.txt"
w"
))==NULL)//判断文件是否创建成功
创建文件失败\n"
exit(0);
inti=0,f;
//i为循环控制变量f记录传入数组在不同的i下b[i]的值
\n\n\t\t\t检索到的信息超过--5--条\n\n\n\t\t检索到的信息写入searchresult文件中……\n"
for(i=0;
f=b[i];
fprintf(qq,"
ss[f].linkid);
//检索到的道路信息写入文件中
ss[f].flag);
//检索到的道路信息写入文件中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 电子地图 导航系统 源代码