C语言实现导航功能_第1页
C语言实现导航功能_第2页
C语言实现导航功能_第3页
C语言实现导航功能_第4页
C语言实现导航功能_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

第C语言实现导航功能本文实例为大家分享了C语言实现导航功能的具体代码,供大家参考,具体内容如下

#includestdio.h

#includestring.h

#defineNUM25

#defineINFINITY32767

#defineFalse0

#defineTrue1

typedefstruct

intnumber;//顶点的编号

constchar*sight;//顶点的信息

}VertexType;//顶点的类型

typedefstruct

VertexTypevex[NUM];//存放顶点信息

intarcs[NUM][NUM];//邻接矩阵数组

intvexnum;//顶点个数

}MGraph;

MGraphG;

由传入的节点个数创建图

**/

voidGreateMGraph(intv)

G.vexnum=v;//传入节点个数

for(inti=1;iG.vexnum;i++){

G.vex[i].number=i;

}//配置顶点编号

/**

编辑顶点信息

**/

G.vex[0].sight="各景点名字";

G.vex[1].sight="大门口";

G.vex[2].sight="行政办公楼";

G.vex[3].sight="北区教室实训中心";

G.vex[4].sight="一号教学楼";

G.vex[5].sight="二号教学楼";

G.vex[6].sight="实验楼";

G.vex[7].sight="三号教学楼";

G.vex[8].sight="图书馆";

G.vex[9].sight="开水房";

G.vex[10].sight="超市";

G.vex[11].sight="榴馨苑";

G.vex[12].sight="洗浴中心";

G.vex[13].sight="骊秀苑";

G.vex[14].sight="综合楼";

G.vex[15].sight="游泳池";

G.vex[16].sight="主田径场";

G.vex[17].sight="综合文体馆";

/**

先将所有顶点之间的距离设置为INFINITY

**/

for(inti=1;i=G.vexnum;i++)

{

for(intj=1;j=G.vexnum;j++)

{

G.arcs[i][j]=INFINITY;

}

}

/**

设置各顶点之间的距离

**/

G.arcs[1][2]=G.arcs[2][1]=255;

G.arcs[1][4]=G.arcs[4][1]=501;

G.arcs[1][5]=G.arcs[5][1]=535;

G.arcs[1][6]=G.arcs[6][1]=705;

G.arcs[1][7]=G.arcs[7][1]=722;

G.arcs[1][8]=G.arcs[8][1]=790;

G.arcs[2][3]=G.arcs[3][2]=530;

G.arcs[2][4]=G.arcs[4][2]=450;

G.arcs[2][5]=G.arcs[5][2]=484;

G.arcs[2][6]=G.arcs[6][2]=654;

G.arcs[2][7]=G.arcs[7][2]=663;

G.arcs[2][8]=G.arcs[8][2]=748;

G.arcs[3][8]=G.arcs[8][3]=1054;

G.arcs[3][17]=G.arcs[17][3]=713;

G.arcs[4][5]=G.arcs[5][4]=436;

G.arcs[4][6]=G.arcs[6][4]=158;

G.arcs[4][7]=G.arcs[7][4]=527;

G.arcs[4][8]=G.arcs[8][4]=534;

G.arcs[5][6]=G.arcs[6][5]=688;

G.arcs[5][7]=G.arcs[7][5]=561;

G.arcs[5][8]=G.arcs[8][5]=603;

G.arcs[6][7]=G.arcs[7][6]=428;

G.arcs[6][8]=G.arcs[8][6]=329;

G.arcs[6][9]=G.arcs[9][6]=547;

G.arcs[7][8]=G.arcs[8][7]=254;

G.arcs[8][11]=G.arcs[11][8]=421;

G.arcs[8][17]=G.arcs[17][8]=879;

G.arcs[9][10]=G.arcs[10][9]=178;

G.arcs[10][11]=G.arcs[11][10]=213;

G.arcs[10][12]=G.arcs[12][10]=114;

G.arcs[12][13]=G.arcs[13][12]=415;

G.arcs[13][14]=G.arcs[14][13]=104;

G.arcs[13][16]=G.arcs[16][13]=427;

G.arcs[13][15]=G.arcs[15][13]=576;

G.arcs[14][17]=G.arcs[17][14]=688;

G.arcs[15][16]=G.arcs[16][15]=213;

G.arcs[16][17]=G.arcs[17][16]=214;

展示校园地图

voidMap()

printf("\n\n\n");

printf("

**************************河南财经政法大学*******************************");

printf("\n\n\n");

printf("

------------------------15游泳池

\n");

printf("

|

|

\n");

printf("

|

|

\n");

printf("

12洗浴中心----------------13骊绣苑---------------------16主田径场

\n");

printf("

|

|

|

\n");

printf("

10超市----11榴馨苑

14综合楼

|

\n");

printf("

|

|

|----------------------17综合文体馆

\n");

printf("

9开水房

|

|

\n");

printf("

|

------------8图书馆--------------------------|

\n");

printf("

|

|

|

\n");

printf("

|-------------6实验楼------|--------7三号教学楼

|

\n");

printf("

|

|

|

|

\n");

printf("

|

|

|

|

\n");

printf("

4一号教学楼------|--------5二号教学楼

|

\n");

printf("

|

|

\n");

printf("

|

|

\n");

printf("

|---2行政楼---------------3北区

\n");

printf("

|

\n");

printf("

|

\n");

printf("

1大门口

\n");

介绍校园各景点概况

voidInfo(intsight_num,chardata[][200])

if(sight_num==1)

puts(data[1]);

if(sight_num==2)

puts(data[2]);

if(sight_num==3)

puts(data[3]);

if(sight_num==4)

puts(data[4]);

if(sight_num==5)

puts(data[5]);

if(sight_num==6)

puts(data[6]);

if(sight_num==7)

puts(data[7]);

if(sight_num==8)

puts(data[8]);

if(sight_num==9)

puts(data[9]);

if(sight_num==10)

puts(data[10]);

if(sight_num==11)

puts(data[11]);

if(sight_num==12)

puts(data[12]);

if(sight_num==13)

puts(data[13]);

if(sight_num==14)

puts(data[14]);

if(sight_num==15)

puts(data[15]);

if(sight_num==16)

puts(data[16]);

if(sight_num==17)

puts(data[17]);

if(sight_num==18)

puts(data[18]);

if(sight_num==19)

puts(data[19]);

if(sight_num==20)

puts(data[20]);

if(sight_num==21)

puts(data[21]);

if(sight_num==22)

puts(data[22]);

if(sight_num==23)

puts(data[23]);

if(sight_num==24)

puts(data[24]);

if(sight_num==25)

puts(data[25]);

开始菜单

intMenu()

intc;

Map();

printf("\t\t欢迎使用河南财经政法大学导航图系统\n");

printf("\t\t1.查询地点路径\n");

printf("\t\t2.地点信息简介\n");

printf("\t\t3.退出\n");

printf("

**************************河南财经政法大学*******************************\n");

printf("请输入您的选择:");

scanf("%d",

returnc;

地图的导航功能

输出任意两点之间的最短路径

voidguide_Dispath_two(MGraphg,intdist[],intpath[],intS[],intv,inti)//v为起点,i为终点

intapath[NUM],d=0;

//存放一条最短的路径以及顶点个数(路径中终点为首)

intj,k;

//k用来存放终点的前面的节点

if(S[i]==1i!=v)

{

printf("从顶点%d到顶点%d的路径长度为:%d\t路径为:",v,i,dist[i]);

apath[d]=i;

//把终点放在数组中的首位

k=path[i];

if(k==-1)

printf("无路径");

/**

利用循环将最短路径中的各节点存入apath数组

**/

else

{

while(k!=v)

{

d++;

apath[d]=k;

k=path[k];

}

}

d++;apath[d]=v;

//将起点添加进去

printf("%d",apath[d]);

//输出起点

for(j=d-1;jj--)

{

printf("-%d",apath[j]);//循环输出最短路径中的各节点

}

}

//以编号为v的顶点为起点,w为终点

voidguide_Dijkstra(MGraphg,intv,intw)

intdist[NUM],path[NUM];

intS[NUM];

//S[i]=1表示顶点i在S中,S[i]=0表示顶点i在U中

intMINdis,i,j,u;

for(i=1;i=g.vexnum;i++)

{

dist[i]=g.arcs[v][i];

//距离初始化(距顶点v的距离)

S[i]=0;

//S[]置空

if(g.arcs[v][i]INFINITY)

//路径初始化

path[i]=v;

//顶点v到顶点i有边时,置顶点i的前一个顶点为顶点v

else

path[i]=-1;

//顶点v到顶点i没边时,置顶点i的前一个顶点为-1

}

S[v]=1;path[v]=0;

//源点编号v放入S中

for(i=1;i=g.vexnum-1;i++)

//循环直到所有顶点的最短路径都求出

{

MINdis=INFINITY;

//MINdis置最大长度初值

for(j=1;j=g.vexnum;j++)

//选取不在S中(即U中)且具有最小最短路径长度的顶点u

{

if(S[j]==0dist[j]MINdis)

{

u=j;

MINdis=dist[j];

}

}

S[u]=1;

//顶点u加入S中

for(j=1;j=g.vexnum;j++)

//修改不在S中(即U中)的顶点的最短路径

{

if(S[j]==0)

if(g.arcs[u][j]INFINITYdist[u]+g.arcs[u][j]dist[j])

{

dist[j]=dist[u]+g.arcs[u][j];

path[j]=u;

}

}

}

guide_Dispath_two(g,dist,path,S,v,w);//输出最短路径

将文件中的景点信息载入数组

voidload_sight_data(chardata[][200],MGraphg)

FILE*fp;

inti;

if((fp=fopen("C:\\Users\\admin\\Desktop\\导航\\sight_data.txt","r"))==NULL){

printf("Filecan'topen");

return;

}

for(i=1;i=g.vexnum;i++)

{

fgets(data[i],200,fp);

}

fclose(fp);

修改景点信息

voidchange_sight_data(charuser_change_data[200],MGraphg)

FILE*fin,*ftp;

inti;

fin=fopen("C:\\Users\\admin\\Desktop\\导航\\sight_data.txt","r");//读打开原文件

ftp=fopen("C:\\Users\\admin\\Desktop\\导航\\temp.txt","w");//写打开临时文件

if(fin==NULL||ftp==NULL)

{

printf("打开文件失败");

return;

}

for(i=1;i=g.vexnum;i++)

{

charchange_data[200];

fgets(change_data,200,fin);

if(change_data[0]==user_change_data[0]change_data[1]==user_change_data[1])

{

fputs(user_change_data,ftp);//而用fputs直接将user_change_data直接写入文件没有换行符,需要添加换行符

fprintf(ftp,"\n");

}

else

{

fputs(change_data,ftp);//在使用fgets函数得到change_data数组时换行符会被保存,此处不需要加换行符

}

}

fclose(fin);

fclose(ftp);

remove("C:\\Users\\admin\\Desktop\\导航\\sight_data.txt");

rename("C:\\Users\\admin\\Desktop\\导航\\temp.txt","C:\\Users\\admin\\Desktop\\导航\\sight_data.txt");

增添景点到文件内

voidadd_sight_data(charchange_data[200],MGraphg)

FILE*fp;

if((fp=fopen("C:\\Users\\admin\\Desktop\\导航\\sight_data.txt","a"))==NULL){

printf("Filecan'topen");

return;

}

fprintf(fp,"\n");

fputs(change_data,fp);

fprintf(fp,"\n");

rewind(fp);

fclose(fp);

修改密码,保存到密码文件中

voidchange_password(charpassword[30])

FILE*fp;

fp=fopen("C:\\Users\\admin\\Desktop\\导航\\password_temp.txt","w");

if(fp==NULL)

{

printf("打开文件失败");

return;

}

fputs(password,fp);

fclose(fp);

remove("C:\\Users\\admin\\Desktop\\导航\\password.txt");

rename("C:\\Users\\admin\\Desktop\\导航\\password_temp.txt","C:\\Users\\admin\\Desktop\\导航\\password.txt");

/**

将密码装进密码数组中

**/

voidload_password(charpassword[30])

FILE*fp;

if((fp=fopen("C:\\Users\\admin\\Desktop\\导航\\password.txt","r"))==NULL){

printf("Filecan'topen");

return;

}

fgets(password,30,fp);

fclose(fp);

intadmin_Menu()

intc;

printf("**************管理系统****************\n");

printf("\t\t欢迎使用管理员操作系统\n");

printf("1.修改登录密码\n");

printf("2.添加新景点\n");

printf("3.修改景点信息\n");

printf("4.新建景点路径\n");

printf("5.退出\n");

printf("**************************************\n");

printf("请输入您的选择:");

scanf("%d",

returnc;

intmain()

GreateMGraph(17);

charsight_data[NUM][200];

charpassword[30];

intchoice;

intMenu_choice;

intstart,end;

do

{

printf("欢迎使用河南财经政法大学导航系统\n");

printf("请问您的身份是:1.管理员

2.游客

3.退出\n");

scanf("%d",choice);

if(choice==2)

{

do

{

Menu_choice=Menu();

if(Menu_choice==1)

{

printf("请输入您现在的位置:");

scanf("%d",start);

printf("\n");

printf("请输入您想要到达的位置:");

scanf("%d",end);

guide_Dijkstra(G,start,end);

}

if(Menu_choice==2)

{

intsight_num;

load_sight_data(sight_data,G);

printf("请输入您要查询的景点编号:");

scanf("%d",sight_num);

Info(sight_num,sight_data);

}

if(Menu_choice==3)

{

break;

}

}while(1);

}

if(choice==1)

{

getchar();

load_password(password);

charuser_input_psw[30];

printf("请输入管理员登录密码:");

gets(user_input_psw);

if(strcmp(password,user_input_psw)==0)

{

printf("密码正确!\n");

intadmin_choice;

do

{

admin_choice=admin_Menu();

if(admin_choice==1)

{

getchar();

charuser_change_psw[30];

printf("请输入新的密码:\n");

gets(user_change_psw);

change_password(user_change_psw);

load_password(password);

printf("密码修改成功!\n");

}

if(admin_choice==2)

{

getchar();

charuadd_sight_data[200];

printf("请输入您要添加的景点以及该景点信息:\n");

gets(uadd_sight_data);

add_sight_data(uadd_sight_data,G);

load_sight_data(sight_data,G);

G.vexnum++;

char*p;

p=strtok(uadd_sight_data,"");

p=strtok(NULL,"");

G.vex[G.vexnum].number=G.vexnum;

G.vex[G.vexnum].sight=p;

printf("添加成功!\n");

}

if(admin_choice==3)

{

getchar();

charuser_sight_data[200];

printf("请输入您要修改的景点信息:\n");

gets(user_sight_data);

change_sight_data(user_sight_data,G);

load_sight_data(sight_data,G);

printf("修改成功!\n");

}

if(admin_choice==4)

{

intnew_start,new_end;

intlength;

p

温馨提示

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

评论

0/150

提交评论