C語言實現(xiàn)導(dǎo)航功能_第1頁
C語言實現(xiàn)導(dǎo)航功能_第2頁
C語言實現(xiàn)導(dǎo)航功能_第3頁
C語言實現(xiàn)導(dǎo)航功能_第4頁
C語言實現(xiàn)導(dǎo)航功能_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第C語言實現(xiàn)導(dǎo)航功能本文實例為大家分享了C語言實現(xiàn)導(dǎo)航功能的具體代碼,供大家參考,具體內(nèi)容如下

#includestdio.h

#includestring.h

#defineNUM25

#defineINFINITY32767

#defineFalse0

#defineTrue1

typedefstruct

intnumber;//頂點的編號

constchar*sight;//頂點的信息

}VertexType;//頂點的類型

typedefstruct

VertexTypevex[NUM];//存放頂點信息

intarcs[NUM][NUM];//鄰接矩陣數(shù)組

intvexnum;//頂點個數(shù)

}MGraph;

MGraphG;

由傳入的節(jié)點個數(shù)創(chuàng)建圖

**/

voidGreateMGraph(intv)

G.vexnum=v;//傳入節(jié)點個數(shù)

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="北區(qū)教室實訓中心";

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="綜合文體館";

/**

先將所有頂點之間的距離設(shè)置為INFINITY

**/

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

{

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

{

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

}

}

/**

設(shè)置各頂點之間的距離

**/

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("

**************************河南財經(jīng)政法大學*******************************");

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北區(qū)

\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歡迎使用河南財經(jīng)政法大學導(dǎo)航圖系統(tǒng)\n");

printf("\t\t1.查詢地點路徑\n");

printf("\t\t2.地點信息簡介\n");

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

printf("

**************************河南財經(jīng)政法大學*******************************\n");

printf("請輸入您的選擇:");

scanf("%d",

returnc;

地圖的導(dǎo)航功能

輸出任意兩點之間的最短路徑

voidguide_Dispath_two(MGraphg,intdist[],intpath[],intS[],intv,inti)//v為起點,i為終點

intapath[NUM],d=0;

//存放一條最短的路徑以及頂點個數(shù)(路徑中終點為首)

intj,k;

//k用來存放終點的前面的節(jié)點

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

{

printf("從頂點%d到頂點%d的路徑長度為:%d\t路徑為:",v,i,dist[i]);

apath[d]=i;

//把終點放在數(shù)組中的首位

k=path[i];

if(k==-1)

printf("無路徑");

/**

利用循環(huán)將最短路徑中的各節(jié)點存入apath數(shù)組

**/

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]);//循環(huán)輸出最短路徑中的各節(jié)點

}

}

//以編號為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++)

//循環(huán)直到所有頂點的最短路徑都求出

{

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);//輸出最短路徑

將文件中的景點信息載入數(shù)組

voidload_sight_data(chardata[][200],MGraphg)

FILE*fp;

inti;

if((fp=fopen("C:\\Users\\admin\\Desktop\\導(dǎo)航\\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\\導(dǎo)航\\sight_data.txt","r");//讀打開原文件

ftp=fopen("C:\\Users\\admin\\Desktop\\導(dǎo)航\\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函數(shù)得到change_data數(shù)組時換行符會被保存,此處不需要加換行符

}

}

fclose(fin);

fclose(ftp);

remove("C:\\Users\\admin\\Desktop\\導(dǎo)航\\sight_data.txt");

rename("C:\\Users\\admin\\Desktop\\導(dǎo)航\\temp.txt","C:\\Users\\admin\\Desktop\\導(dǎo)航\\sight_data.txt");

增添景點到文件內(nèi)

voidadd_sight_data(charchange_data[200],MGraphg)

FILE*fp;

if((fp=fopen("C:\\Users\\admin\\Desktop\\導(dǎo)航\\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\\導(dǎo)航\\password_temp.txt","w");

if(fp==NULL)

{

printf("打開文件失敗");

return;

}

fputs(password,fp);

fclose(fp);

remove("C:\\Users\\admin\\Desktop\\導(dǎo)航\\password.txt");

rename("C:\\Users\\admin\\Desktop\\導(dǎo)航\\password_temp.txt","C:\\Users\\admin\\Desktop\\導(dǎo)航\\password.txt");

/**

將密碼裝進密碼數(shù)組中

**/

voidload_password(charpassword[30])

FILE*fp;

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

printf("Filecan'topen");

return;

}

fgets(password,30,fp);

fclose(fp);

intadmin_Menu()

intc;

printf("**************管理系統(tǒng)****************\n");

printf("\t\t歡迎使用管理員操作系統(tǒng)\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("歡迎使用河南財經(jīng)政法大學導(dǎo)航系統(tǒng)\n");

printf("請問您的身份是:1.管理員

2.游客

3.退出\n");

scanf("%d",choice);

if(choice==2)

{

do

{

Menu_choice=Menu();

if(Menu_choice==1)

{

printf("請輸入您現(xiàn)在的位置:");

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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論