完整word版数据结构校园导游系统课程设计.docx
- 文档编号:25064785
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:29
- 大小:216.24KB
完整word版数据结构校园导游系统课程设计.docx
《完整word版数据结构校园导游系统课程设计.docx》由会员分享,可在线阅读,更多相关《完整word版数据结构校园导游系统课程设计.docx(29页珍藏版)》请在冰豆网上搜索。
完整word版数据结构校园导游系统课程设计
滨江学院
《数据结构》课程设计
题目校园导游咨询程序设计
学号
学生姓名
院系
专业
指导教师
二O一二年月日
1、题目的内容及要求
设计一个校园导游程序,为来访的客人提供各种信息查询服务。
2、需求分析
(1)设计你的学校的校园平面图,所含景点不少于10个.以图中顶点表示学校各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息.
(2)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
(3)为来访客人提供图中任意景点相关信息的查询.
3、概要设计
1.功能模块图;
voidCreateUDN();//创建无向网
voidSearch();//查询景点信息
voidShortestpath(inti);//计算最短路径
voidOutput(intsight1,intsight2);//输出函数
2.各个模块详细的功能描述.
CreateUDN();//创建无向网、主要用来保存各景点信息
Search();//查询景点信息、景点的名称及介绍
Shortestpath(inti);//计算两景点间最短路径
Output(intsight1,intsight2);//输出两景点最短路径及信息
3.模块图
4、详细设计
一、图的储存结构
#defineMax30000
#defineNUM10
typedefstructArcCell
{
intadj;/* 相邻接的景点之间的路程 */
}ArcCell; /* 定义边的类型 */
typedefstructVertexType
{
intnumber;/* 景点编号 */
char*sight;/* 景点名称 */
char*description;/* 景点描述 */
}VertexType;/* 定义顶点的类型 */
typedefstruct
{
VertexTypevex[NUM]; /* 图中的顶点,即为景点 */
ArcCellarcs[NUM][NUM];/* 图中的边,即为景点间的距离 */
intvexnum,arcnum;/* 顶点数,边数 */
}MGraph; /* 定义图的类型
二、算法
1.主程序
voidmain()
{
intv0,v1;
charck;
CreateUDN(NUM,11);
do
{
ck=Menu();
switch(ck)
{
case'1':
system(”cls");
//narrate();
printf("\n\n\t\t\t请选择起点景点(0~9):
");
scanf(”%d",&v0);
printf(”\t\t\t请选择终点景点(0~9):
");
scanf(”%d”,&v1);
ShortestPath(v0); /* 计算两个景点之间的最短路径 */
output(v0,v1); /* 计算两个景点之间的最短路径 */
printf(”\n\n\t\t\t\t请按任意键继续.。
.\n");
getchar();
getchar();
break;
case’2':
search();
break;
case’3’:
system("cls");
//narrate();
x[0]=1;
HaMiTonian
(1);
printf(”\n\n\t\t\t\t请按任意键继续。
。
。
\n”);
getchar();
getchar();
break;
};
}while(ck!
='e’);
}
2.输出程序
voidoutput(intsight1,intsight2)
{
inta,b,c,d,q=0;
a=sight2;
if(a!
=sight1)/* 如果景点二不和景点一输入重合,则进行 */
{
printf(”\n\t从%s到%s的最短路径是",G.vex[sight1].sight,G.vex[sight2].sight);/* 输出提示信息 */
printf(”\t(最短距离为%dm.)\n\n\t”,D[a]);
printf("\t%s",G.vex[sight1]。
sight);
d=sight1; /* 将景点一的编号赋值给d */
for(c=0;c〈NUM;++c)
{
gate:
;
P[a][sight1]=0;
for(b=0;b〈NUM;b++)
{
if(G。
arcs[d][b]。
adj〈30000&&P[a][b])/* 如果景点一和它的一个临界点之间存在路径且最短路径 */
{
printf(”-—〉%s”,G。
vex[b].sight);/* 输出此节点的名称 */
q=q+1;/* 计数变量加一,满8控制输出时的换行 */
P[a][b]=0;
d=b; /* 将b作为出发点进行下一次循环输出,如此反复 */
if(q%9==0)printf(”\n");
gotogate;
}
}
}
}
}
3.求最短路径
voidShortestPath(intnum)
{
intv,w,i,t;
intfinal[NUM];
intmin;
for(v=0;v〈NUM;v++)
{
final[v]=0;
D[v]=G.arcs[num][v]。
adj;
for(w=0;w P[v][w]=0; if(D[v]<30000) { P[v][num]=1; P[v][v]=1; } } D[num]=0; final[num]=1; for(i=0;i { min=Max; for(w=0;w〈NUM;++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])) { D[w]=min+G。 arcs[v][w].adj; for(t=0;t P[w][t]=P[v][t]; P[w][w]=1; } } } 4.说明函数 voidnarrate() { inti,k=0; printf("\n\t\t*****************欢迎使用校园导游程序***************\n”); printf("\n\t\t********************南京信息工程大学*******************\n"); printf(”\t__________________________________________________________________\n”); printf("\t\t景点名称\t\t|\t景点描述\n"); printf("\t________________________________|_________________________________\n"); for(i=0;i〈NUM;i++) { printf("\t(%2d)%-10s\t\t\t|\t%-25s\n",i,G。 vex[i].sight,G.vex[i]。 description); k=k+1; } printf("\t________________________________|_________________________________\n”); } 5、查询景点信息 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〈NUM;i++) { if(num==G.vex[i].number) { printf("\n\n\t\t\t您要查找景点信息如下: ”); printf(”\n\n\t\t\t%—25s\n\n”,G。 vex[i]。 description); printf("\n\t\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': narrate(); system(”cls"); printf(”\n\n\t\t请输入您要查找的景点名称: "); scanf(”%s”,name); for(i=0;i { if(! strcmp(name,G。 vex[i].sight)) { printf("\n\n\t\t\t您要查找景点信息如下: "); printf(”\n\n\t\t\t%—25s\n\n”,G.vex[i]。 description); printf("\n\t\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! =’t’); } 6.选择菜单 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┃t、返回┃\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=='t') flag=0; }while(flag); returnc; } 5、运行结果及分析 系统主界面 查询路径 查询信息 6、收获及体会 非常高兴能和同学们一起做实验,感谢各位老师以及同学们对我的帮助,特别是老师循循善诱的教导和不拘一格的思路给予我无尽的启迪;这次数据结构设计的每个实验细节和每个数据,都离不开老师您的细心指导. 7、源代码 #include”string.h" #include”stdio。 h" #include”malloc.h” #include”stdlib。 h” #defineMax30000 #defineNUM10 typedefstructArcCell { intadj; }ArcCell; typedefstructVertexType { intnumber; char*sight; char*description; }VertexType; typedefstruct { VertexTypevex[NUM]; ArcCellarcs[NUM][NUM]; intvexnum,arcnum; }MGraph; MGraphG; intP[NUM][NUM]; longintD[NUM]; intx[9]={0}; voidCreateUDN(intv,inta); voidnarrate(); voidShortestPath(intnum); voidoutput(intsight1,intsight2); charMenu(); voidsearch(); charSearchMenu(); voidHaMiTonian(int); voidNextValue(int); voiddisplay(); voidmain() { intv0,v1; charck; CreateUDN(NUM,11); do { ck=Menu(); switch(ck) { case'1’: system(”cls"); //narrate(); printf("\n\n\t\t\t请选择起点景点(0~9): "); scanf(”%d”,&v0); printf(”\t\t\t请选择终点景点(0~9): "); scanf(”%d",&v1); ShortestPath(v0); output(v0,v1); printf("\n\n\t\t\t\t请按任意键继续。 ..\n"); getchar(); getchar(); break; case'2’: search(); break; case’3’: system(”cls"); //narrate(); x[0]=1; HaMiTonian (1); printf(”\n\n\t\t\t\t请按任意键继续。 。 。 \n"); getchar(); getchar(); break; }; }while(ck! ='e’); } 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┃t、退出┃\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=='t’) 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┃t、返回┃\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=='t’) 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〈NUM;i++) { if(num==G。 vex[i].number) { printf("\n\n\t\t\t您要查找景点信息如下: ”); printf(”\n\n\t\t\t%-25s\n\n",G。 vex[i].description); printf(”\n\t\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’: narrate(); system(”cls"); printf(”\n\n\t\t请输入您要查找的景点名称: "); scanf(”%s”,name); for(i=0;i〈NUM;i++) { if(! strcmp(name,G。 vex[i]。 sight)) { printf("\n\n\t\t\t您要查找景点信息如下: ”); printf(”\n\n\t\t\t%—25s\n\n",G.vex[i]。 description); printf(”\n\t\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! =’t'); } voidCreateUDN(intv,inta) { inti,j; G。 vexnum=v; G.arcnum=a; for(i=0;i〈G。 vexnum;++i)G.vex[i].number=i; G。 vex[0]。 sight=”东大门”; G.vex[0]。 description=”学校正门。 "; G。 vex[1].sight="气象楼”; G.vex[1].description=”校气象研究楼."; G。 vex[2].sight="体育馆”; G.vex[2]。 description=”运动,放松心情”; G.vex[3]。 sight=”大学生活动中心"; G。 vex[3].description="竞赛、晚会举办地"; G.vex[4].sight="图书馆”; G。 vex[4]。 description=”阅览,借阅图书”; G。 vex[5]。 sight="滨江楼"; G.vex[5].description="学习,自习室”; G。 vex[6].sight=”综合楼”; G。 vex[6].description="学习,办公室"; G。 vex[7].sight=”老食堂"; G。 vex[7].description="餐饮休闲”; G。 vex[8]。 sight=”新食堂”; G.vex[8]。 description="餐饮休闲"; G.vex[9].sight="文园”; G。 vex[9].description=”宿舍,休息”; for(i=0;i vexnum;++i) for(j=0;j G。 arcs[i][j]。 adj=Max; G.arcs[0][1]。 adj=G。 arcs[1][0]。 adj=2; G。 arcs[0][2].adj=G。 arcs[2][0]。 adj=1; G。 arcs[0][3]。 adj=G.arcs[3][0]。 adj=7; G。 arcs[1][4].adj=G。 arcs[4][1]。 adj=8; G.arcs[2][4].adj=G。 arcs[4][2]。 adj=9; G。 arcs[3][5]。 adj=G。 arcs[5][3]。 adj=5; G.arcs[5][7]。 adj=G.arcs[7][5]。 adj=2; G.arcs[4][6]。 adj=G。 arcs[6][4]。 adj=3; G。 arcs[4][7].adj=G。 arcs[7][4].adj=2; G.arcs[6][8]。 adj=G。 arcs[8][6].adj=2; G。 arcs[7][8].adj=G。 arcs[8][7]。 adj=1; G。 arcs[8][9]。 adj=G。 arcs[9][8].adj=1; } voidnarrate() { inti,k=0; printf(”\n\t\t*****************欢迎使用校园导游程序***************\n”); printf(”\n\t\t********************南京信息工程大学*******************\n"); printf(”\t__________________________________________________________________\n"); printf(”\t\t景点名称\t\t|\t景点描述\n"); printf(”\t________________________________|_______________
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word 数据结构 校园 导游 系统 课程设计