校园导航系统源代码.docx
- 文档编号:25788366
- 上传时间:2023-06-14
- 格式:DOCX
- 页数:34
- 大小:196.01KB
校园导航系统源代码.docx
《校园导航系统源代码.docx》由会员分享,可在线阅读,更多相关《校园导航系统源代码.docx(34页珍藏版)》请在冰豆网上搜索。
校园导航系统源代码
数据结构-校园导航系统
简介:
本系统采用C语言编写,运行环境为Dev-C++;
容以电子科技大学南校区为例;
主要功能有:
1.查询景点信息;2.查询两景点间最短距离;3.查询两景点间所有路线;4.查询西电校园地图;5.修改景点和路径信息.
注意事项:
在进行修改景点和路径信息操作前,请在可执行文件目录下用记事本创建”superUser.CODE”文件来存放用户名与密码(中间以空格隔开),否则无法进入.
源代码:
#include
#include
#include
#include
#include
#defineMax20000
typedefstructArcCell
{
intadj;//两个景点间的距离
}ArcCell;
typedefstructVertexType
{
intnumber;//景点编号
charsight[100];//景点名称
chardescription[1000];//景点简介
charparticular1[1000];
charparticular2[1000];
charparticular3[1000];//景点详情
}VertexType;
typedefstruct
{
VertexTypevex[20];//最多存放20个景点信息
ArcCellarcs[20][20];//两个景点间的距离
intvexnum,arcnum;
}MGraph;
MGraphG;
charnameofschool[100];//学校名称
intNUM=9;
intP[20][20];
intp[20];
intvisited[20];
inta=0;
longintD[20];
intx[20]={0};
//函数声明
voidCreateUDN(intv,inta);
voidnarrate();
voidShortestPath(intnum);
voidoutput(intsight1,intsight2);
charMenu();
voidsearch();
charSearchMenu();
voidHaMiTonian(int);
voidSearchpath1(MGraphg);
voiddisppath(MGraphg,inti,intj);
voidpath(MGraphg,inti,intj,intk);
voidNextValue(int);
voiddisplay();
intAddnewsight(intn);
intDeletesight(intn);
voidChangesight();
charChangemenu();
charSightmenu();
intMaintain(void);
intVerificatianIdentity(void);
voidmap();
//主函数
intmain()
{
intv0,v1;
intMaintainFlag;
charck;
system("color0F");
CreateUDN(NUM,11);
do
{
ck=Menu();
switch(ck)
{
case'1':
search();
break;
case'2':
system("cls");
narrate();
printf("\n\n\t\t\t请选择起点景点(0~%d):
",NUM-1);
scanf("%d",&v0);
printf("\t\t\t请选择终点景点(0~%d):
",NUM-1);
scanf("%d",&v1);
ShortestPath(v0);
output(v0,v1);
printf("\n\n\t\t\t\t请按任意键继续...\n");
getchar();
getchar();
break;
case'3':
system("cls");
narrate();
x[0]=1;
Searchpath1(G);
printf("\n\n\t\t\t\t请按任意键继续...\n");
getchar();
getchar();
break;
case'4':
system("cls");
map();
printf("\n\n\t\t\t\t\t请按任意键继续...\n");
getchar();
getchar();
break;
case'5':
system("cls");
narrate();
MaintainFlag=Maintain();
switch(MaintainFlag){
case'1':
system("cls");
narrate();
NUM=Addnewsight(NUM);
system("cls");
narrate();
break;
case'2':
NUM=Deletesight(NUM);
break;
case'3':
Changesight();
break;
}
break;
};
}
while(ck!
='e');
return0;
}
//主菜单
charMenu()
{
charc;
intflag;
do{
flag=1;
system("cls");
narrate();
printf("\n\t\t\t┏━━━━━━━━━━━━━━━┑\n");
printf("\t\t\t┃┃\n");
printf("\t\t\t┃1、查询景点信息┃\n");
printf("\t\t\t┃2、查询两景点间最短路径┃\n");
printf("\t\t\t┃3、查询两景点间所有路线┃\n");
printf("\t\t\t┃4、查看西电校园地图┃\n");
printf("\t\t\t┃5、修改景点和路径信息┃\n");
printf("\t\t\t┃e、退出┃\n");
printf("\t\t\t┃┃\n");
printf("\t\t\t┗━━━━━━━━━━━━━━━┛\n");
printf("\t\t\t\t请输入您的选择:
");
scanf("%c",&c);
if(c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='e')
flag=0;
}while(flag);
returnc;
}
//查询菜单
charSearchMenu()
{
charc;
intflag;
do{
flag=1;
system("cls");
narrate();
printf("\n\t\t\t┏━━━━━━━━━━━━━━━┑\n");
printf("\t\t\t┃┃\n");
printf("\t\t\t┃1、按照景点编号查询┃\n");
printf("\t\t\t┃2、按照景点名称查询┃\n");
printf("\t\t\t┃e、返回┃\n");
printf("\t\t\t┃┃\n");
printf("\t\t\t┗━━━━━━━━━━━━━━━┛\n");
printf("\t\t\t\t请输入您的选择:
");
scanf("%c",&c);
if(c=='1'||c=='2'||c=='e')
flag=0;
}while(flag);
returnc;
}
//查询信息
voidsearch()
{
intnum;
inti;
charc;
charname[20];
do
{
system("cls");
c=SearchMenu();
switch(c)
{
case'1':
system("cls");
narrate();
printf("\n\n\t\t请输入您要查找的景点编号:
");
scanf("%d",&num);
for(i=0;i { if(num==G.vex[i].number) { printf("\n\t\t您要查找景点信息如下: "); printf("\n\t\t(%d)%-5s: %-25s\n\n",i,G.vex[i].sight,G.vex[i].description); printf("\t\t\t\t\t详情介绍: \n\t\t%-s\n",G.vex[i].particular1); printf("\t\t%-s\n",G.vex[i].particular2); printf("\t\t%-s\n",G.vex[i].particular3); printf("\n\t\t按任意键返回..."); getchar(); getchar(); break; } } if(i==NUM) { printf("\n\n\t\t\t没有找到! "); printf("\n\n\t\t\t按任意键返回..."); getchar(); getchar(); } break; case'2': system("cls"); narrate(); printf("\n\n\t\t请输入您要查找的景点名称: "); scanf("%s",name); for(i=0;i { if(! strcmp(name,G.vex[i].sight)) { printf("\n\t\t您要查找景点信息如下: "); printf("\n\t\t(%d)%-5s: %-25s\n\n",i,G.vex[i].sight,G.vex[i].description); printf("\t\t\t\t\t详情介绍: \n\t\t%-s\n",G.vex[i].particular1); printf("\t\t%-s\n",G.vex[i].particular2); printf("\t\t%-s\n",G.vex[i].particular3); printf("\n\t\t按任意键返回..."); getchar(); getchar(); break; } } if(i==NUM) { printf("\n\n\t\t\t没有找到! "); printf("\n\n\t\t\t按任意键返回..."); getchar(); getchar(); } break; } }while(c! ='e'); } //构造图形 voidCreateUDN(intv,inta){ inti,j; strcpy(nameofschool,"电子科技大学"); G.vexnum=v; G.arcnum=a; for(i=0;i<20;++i)G.vex[i].number=i; strcpy(G.vex[0].sight,"东门"); strcpy(G.vex[0].description,"学校正门,可乘坐公交车,出租车等交通工具."); strcpy(G.vex[0].particular1,"作为学校的正门,门外的交通系统非常发达,常年有出租车"); strcpy(G.vex[0].particular2,"经过,还有916路,173路等众多公交车线路在此设立站牌,所以"); strcpy(G.vex[0].particular3,"完全没必要担心坐不到车,出行非常方便! "); strcpy(G.vex[1].sight,"图书馆"); strcpy(G.vex[1].description,"馆藏文纸质献约270万余册,种类丰富,环境优美."); strcpy(G.vex[1].particular1,"南校区图书馆2005年7月1日奠基,主要服务于新校区2万余"); strcpy(G.vex[1].particular2,"名本科生.地上建筑面积4万平方米,总框架五层,地下一层,地面"); strcpy(G.vex[1].particular3,"四层.拥有先进的设施、优雅温馨的阅读环境."); strcpy(G.vex[2].sight,"北门"); strcpy(G.vex[2].description,"西电南校区的另外一个出入口,备有一个停车场."); strcpy(G.vex[2].particular1,"北门日常的人流量不亚于东门,在这里有一个停车场,而且"); strcpy(G.vex[2].particular2,"这里还是西电的快递接收点,可以供广大师生在此寄取快递,非"); strcpy(G.vex[2].particular3,"常方便.而且临近综合楼,较为繁华."); strcpy(G.vex[3].sight,"海棠区"); strcpy(G.vex[3].description,"2017级大一萌新即将入住的宿舍区.>o<"); strcpy(G.vex[3].particular1,"海棠宿舍位于学校西北面,所以距离北操,新综,北门较近,"); strcpy(G.vex[3].particular2,"准大一的学弟学妹们将会主要居住在5.6号楼(还有一部分会在"); strcpy(G.vex[3].particular3,"9.10号楼).海棠宿舍为两室一厅,每室各四人."); strcpy(G.vex[4].sight,"大活"); strcpy(G.vex[4].description,"大学生活动中心的简称,小剧场就在这里."); strcpy(G.vex[4].particular1,"大活建设在学校人工湖旁边,里面有实验室、舞蹈室等专用"); strcpy(G.vex[4].particular2,"教室,也是学校举办室大型活动的常用地点,曾经一冰,周鸿"); strcpy(G.vex[4].particular3,"祎,黄晓明等人在此与同学们见面."); strcpy(G.vex[5].sight,"北操"); strcpy(G.vex[5].description,"跑步踢球狼人杀...等等有趣的活动,超热闹."); strcpy(G.vex[5].particular1,"北操基础设施齐全,有足球场跑道观众台羽毛球场等,是"); strcpy(G.vex[5].particular2,"学校举行大型体育赛事的场地,例如: 运动会足球赛等.每天晚上"); strcpy(G.vex[5].particular3,"也会有许多同学在此运动玩耍,非常有趣."); strcpy(G.vex[6].sight,"观光塔"); strcpy(G.vex[6].description,"南校区最显眼的建筑物,可以俯视整个校园."); strcpy(G.vex[6].particular1,"观光塔是西电南校区最负盛名的建筑物,位处南校区最为中"); strcpy(G.vex[6].particular2,"间的位置,走在校园里,总是能够看到观光塔,到了晚上塔上的时"); strcpy(G.vex[6].particular3,"钟会亮起,很远都能看到,在月光下特别的漂亮."); strcpy(G.vex[7].sight,"体育馆"); strcpy(G.vex[7].description,"今年刚刚建成,外观融合了\"天圆地方\"的思想."); strcpy(G.vex[7].particular1,"考虑到学校的所在地是十三朝古都,亦应融入中国传统"); strcpy(G.vex[7].particular2,"文化的理念,以及体育馆主馆和训练馆的功能需求,最终决定以中"); strcpy(G.vex[7].particular3,"国传统文化的\"天圆地方\"为设计思路.美观大气."); strcpy(G.vex[8].sight,"行政楼"); strcpy(G.vex[8].description,"可以进行盖章,补办一卡通等众多操作."); strcpy(G.vex[8].particular1,"从东门进入学校,左手边的那栋楼就是行政楼,往后稍小一点"); strcpy(G.vex[8].particular2,"的就是行政辅楼.教务处、学工处、电院办公室在行政楼,一卡通"); strcpy(G.vex[8].particular3,"中心、户籍管理、财务处、一些学院的办公室在行政辅楼."); for(i=0;i<20;++i) for(j=0;j<20;++j) G.arcs[i][j].adj=Max; G.arcs[0][8].adj=G.arcs[8][0].adj=150; G.arcs[0][1].adj=G.arcs[1][0].adj=600; G.arcs[1][7].adj=G.arcs[7][1].adj=800; G.arcs[1][6].adj=G.arcs[6][1].adj=50; G.arcs[1][4].adj=G.arcs[4][1].adj=600; G.arcs[3][2].adj=G.arcs[2][3].adj=300; G.arcs[6][2].adj=G.arcs[2][6].adj=350; G.arcs[3][5].adj=G.arcs[5][3].adj=300; G.arcs[4][5].adj=G.arcs[5][4].adj=400; G.arcs[8][7].adj=G.arcs[7][8].adj=250; } //导图模块 voidnarrate() { inti,k=0; printf("\n\t******************欢迎使用%s校园导游程序*****************\n\n",nameofschool); printf("\t━━━━━━━━━━|━━━━━━━━━━━━━━━━━━━━━━━━\n"); printf("\t*景点名称|\t\t\t景点描述\t\t*\n"); printf("\t━━━━━━━━━━|━━━━━━━━━━━━━━━━━━━━━━━━\n"); for(i=0;i { printf("\t*(%d)%-15s|\t%-43s*\n",i,G.vex[i].sight,G.vex[i].description); k=k+1; } printf("\t━━━━━━━━━━|━━━━━━━━━━━━━━━━━━━━━━━━\n"); } //迪杰斯特拉算法 voidShortestPath(intnum) { intv,w,i,t; intfinal[20]; intmin; for(v=0;v { final[v]=0; D[v]=G.arcs[num][v].adj; for(w=0;w P[v][w]=0; if(D[v]<20000) { P[v][num]=1; P[v][v]=1; } } D[num]=0; final[num]=1; for(i=0;i { min=Max; for(w=0;w if(! final[w]) if(D[w] { v=w; min=D[w]; } final[v]=1; for(w=0;w if(! final[w]&&((min+G.arcs[v][w].adj) { D[w]=min+G.arcs[v][w].adj; for(t=0;t P[w][t]=P[v][t]; P[w][w]=1; } } } //输出函数 voidoutput(intsight1,intsight2) { inta,b,c,d,q=0; a=sight2; if(a! =sight1) { printf("\n\t\t从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight); printf("(最短距离为%dm.)\n\n\t",D[a]); printf("\t\t%s",G.vex[sight1].sight); d=sight1; for(c=0;c { gate: ; P[a][sight1]=0; for(b=0;b { if(G.arcs[d][b].adj<20000&&P[a][b]) { printf("-->%s",G.vex[b].sight); q=q+1; P[a][b]=0; d=b; if(q%8==0)printf("\n"); gotogate; } } } } } //查询所有路径 voidSearchpath1(MGraphg) { intl=0; intk=0; inti,j; printf("\t选择出发景点: "); scanf("%d",&i); printf("\t选择目地景点: "); scanf("%d",&j); for(;k if(i==g.vex[k].number) i=k; for(;l if(j==g.vex[l].number)j=l; printf("\n\t从%s到%s的所有游览路径有: \n\n",g.vex[i].sight,g.vex[j].sight); disppath(g,i,j); } voiddisppath(MGraphg,inti,intj) { intk; p[0]=i; for(k=0;k visited[i]=0; a=0; path(g,i,j,0); } voidpath(MGraphg,inti,intj,intk) { ints; if(p[k]==j) {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 校园 导航系统 源代码