C语言课设校园导游.docx
《C语言课设校园导游.docx》由会员分享,可在线阅读,更多相关《C语言课设校园导游.docx(16页珍藏版)》请在冰豆网上搜索。
C语言课设校园导游
校园导游
摘要1
1绪论1
2系统分析2
2.1功能需求2
2.2数据需求2
2.3性能需求2
3总体设计2
3.1系统设计方案2
3.2功能模块设计3
4详细设计4
4.1浏览校园全景模块5
4.2查询所有浏览路线模块6
4.3求最短路径7
4.4查询各景点信息模块8
5调试与测试9
5.1调试9
5.2测试9
6结论10
参考文献10
附录1-用户手册11
附录2-源程序14
摘要
为了让游客更好地了解各个旅游景点,查询相关信息,特开放此程序为游客服务。
游客只需输入相应的编号就可以实现对其功能的查询;编号(1-9)
主要功能如下:
(1)校园所含景点不少于10个,以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。
(2)为来访客人提供图中任意景点相关信息的查询。
(3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的路径(列出所有),并向访客推荐一条最短路径。
关键词:
任意景点信息,所有路径,最短路径,所有景点。
1绪论
导游是每个游客旅游必不可少的一部分,如果能用一个电子导游器代替一个导游为游客服务的话,那不就更方便吗、因此特开发此程序为游客服务,希望能得到大家的认可。
题目要求:
设计一个校园导游咨询程序,对来访的客人提供各种信息查询服务。
基本要求:
(1)校园所含景点不少于10个,以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。
(2)为来访客人提供图中任意景点相关信息的查询。
(3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的路径(列出所有),并向访客推荐一条最短路径。
2系统分析
2.1功能需求
所需功能如下:
(1)校园所含景点不少于10个,以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。
(2)为来访客人提供图中任意景点相关信息的查询。
(3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的路径(列出所有),并向访客推荐一条最短路径。
2.2数据需求
所涉及到的数据如下:
结构体,栈,表格(菜单),数组
(1)输入数据:
景点编号(0-9)
(2)输出数据:
编号,名称,信息(数字和中文)
2.3性能需求
性能简介:
安全性高、可靠性强、稳定性强、响应速度快
3总体设计
3.1系统设计方案
通过一个主函数对各个子函数的调用实现所需功能:
游客只需输入相应的编号就可以实现对其功能的查询;编号(1-9)
(1)菜单如下:
欢迎来到沈阳航空航天大学
祝你:
旅途愉快
1.浏览校园全景
2.查看所有游览路线
3.选择出发点和目的地
4.查看各景点信息
5.退出系统
诚心为你服务-请选择(输入编号.回车结束):
(2)抽象数据类型定义:
数据对象:
V(顶点)
数据关系:
R={VR}
VR={<V.R>}
(3)存储结构:
邻接表
(4)算法设计:
主要应用:
迪杰斯特拉算法,弗洛伊德算法,输入输出函数
3.2功能模块设计
图1功能模块图
(1)浏览校园全景模块
该模块部分通过一个函数输出所有景点的编号,名称,信息。
(2)查看所有游览路线模块
该模块是对游客当前所在位置提供可游览的所有景点。
(3)球最短路径模块
该模块是根据游客当前所在位置和将要游览的位置提供一条最短路径。
(4)查看各景点信息模块
该模块专门为游客提供每个景点的详细信息查询。
4详细设计
主函数voidmain()
图2主函数选择所需功能
4.1浏览校园全景模块
MGraphInitGraph()
图3浏览校园全景模块
4.2查询所有浏览路线模块
voidBrowser(MGraph*G)
图4查询所有浏览路线模块
4.3求最短路径
voidFloyd(MGraph*G)
图5求最短路径模块
4.4查询各景点信息模块
voidSearch(MGraph*G)
图6查询各景点信息模块
5调试与测试
5.1调试
调试是软件开发过程中的一个重要环节,也是最复杂,对软件开发者来说也是最艰巨的任务。
调试的任务是及时改正测试过程中发现的软件错误。
具体地说,调试过程由两个步骤组成,从表示程序中存在错误的某迹象开始,首先确定错误的准确位置,也就是找出哪个模块或哪个语句引起的错误。
然后仔细研究推断代码以确定问题的原因,并设法改正。
调试过程主要是运行编制好的程序,然后遇到错误后根据系统的提示,找到相关的问题所在。
本系统调试过程中遇到问题、原因和解决方法如下面介绍。
(1)运行完程序一次有错误提醒
原因是上次运行程序后没有关闭操作界面当点击编译时会有一个错误提示,解决方法:
将上一次运行时的操作界面关闭。
其原因是指针指向的位置出现错误导致程序传参错乱,无法运行,解决办法:
使程序进入调试状态在传参,出现错误的位置一句句查找传递的参数是否是你所希望的,如若不是就加以修正。
调试过程主要是运行编制好的程序,然后遇到错误后根据系统的提示,找到相关的问题所在。
本系统调试过程中遇到的主要问题、原因和解决方法如下面介绍。
5.2测试
软件测试是软件生存期中的一个重要阶段,是软件质量保证的关键步骤从用户的角度来看,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,所以软件测试应该是“为了发现错误而执行程序的过程”。
或者说,软件测试应该根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误或缺陷。
过度测试则会浪费许多宝贵的资源。
到测试后期,即使找到了错误,然而付出了过高的代价。
测试数据过程如下。
(1)输入功能测试
输入数据:
41
预期结果:
1图书馆文化交流中心
运行结果:
1图书馆文化交流中心
说明:
所输入的数据与输出的结果相符合,与预期结果完全一致,程序编写成功。
6结论
课程设计顺利完成,任务书中所提出的要求全部实现,不过这个程序还有些不够完善。
结束语
为期两个礼拜的计算机综合训练终于顺利完成,在这期间真正的学到了一些经验,能够熟练的掌握一些数据结构的编程思路,能够熟练的运用学到的东西,学会了在曾经编写过的函数上加以修改实现了我期望实现的功能,知道学习编程必须亲手将每一个字符敲入电脑中这样才能真正的学到课本或一些理论中学不到的知识,这才达到了实践的目的,当程序编写完成而且能够正常运行心里一种说不出的自豪感,虽然这对于一名程序员来说可能什么也不是,但这是我编程的开始,如果希望在编程这方面能够有所发展我所要走过的路还很长,还需要不断的学习!
学习!
参考文献
[1]谭浩强.C语言程序设计(第三版).清华大学出版社,2007
[2]姜灵芝,余健.C语言课程设计案例精编.清华大学出版社,2008
[3]严蔚敏,吴伟民.算法与数据结构(C语言版)清华大学出版社,2008
[4]严蔚敏,吴伟民.数据结构题集(C语言版)清华大学出版社,2008
[5]网上相关资料
附录1-用户手册
点击运行,首先出现的是登录界面,选择用户名称,正确的输入编号即可,如图7所示。
图7主界面
按照菜单提示输入编号即可
图13浏览校园景点界面
为来访客人提供图中任意景点的问路查询按照主菜单提示输入编号即可
图14查看所有游览路线
为访客推荐一条最短路径。
按照菜单提示输入编号即可
图15选择出发点和目的地
为来访客人提供图中任意景点相关信息的查询按照菜单提示输入编号即可
图16查看各景点信息
附录2-源程序
#include
#include
#include
#defineMAX10000
#defineMAX_VERTEX_NUM10
typedefstruct
{
intadj;
}Ar,Ad[10][10];
typedefstruct
{
charname[30];
intnum;
charintroduction[100];
}infotype;
typedefstruct
{
infotypevexs[10];
Adarcs;
intvexnum,arcnum;
}MGraph;
MGraphb;
MGraphInitGraph()
{
MGraphG;
inti,j;
G.vexnum=10;
G.arcnum=10;
for(i=0;iG.vexs[i].num=i;
strcpy(G.vexs[0].name,"北门");
strcpy(G.vexs[0].introduction,"校大门-雄伟而美丽");
strcpy(G.vexs[1].name,"图书馆");
strcpy(G.vexs[1].introduction,"文化交流中心");
strcpy(G.vexs[2].name,"南生活区");
strcpy(G.vexs[2].introduction,"学生家园(南区)");
strcpy(G.vexs[3].name,"南门");
strcpy(G.vexs[3].introduction,"校内外交通枢纽");
strcpy(G.vexs[4].name,"校医院");
strcpy(G.vexs[4].introduction,"带去一份真诚,换回一身健康");
strcpy(G.vexs[5].name,"北生活区");
strcpy(G.vexs[5].introduction,"学生家园(北区)");
strcpy(G.vexs[6].name,"运动场");
strcpy(G.vexs[6].introduction,"发扬体育运动,曾强师生体质");
strcpy(G.vexs[7].name,"教学楼");
strcpy(G.vexs[7].introduction,"教学圣地");
strcpy(G.vexs[8].name,"实验基地");
strcpy(G.vexs[8].introduction,"实践与理论相结合的地方");
strcpy(G.vexs[9].name,"清阳湖");
strcpy(G.vexs[9].introduction,"美丽校园的核心");
for(i=0;ifor(j=0;jG.arcs[i][j].adj=MAX;
G.arcs[0][1].adj=200;
G.arcs[0][2].adj=500;
G.arcs[0][6].adj=480;
G.arcs[1][7].adj=100;
G.arcs[2][3].adj=50;
G.arcs[3][6].adj=400;
G.arcs[3][4].adj=300;
G.arcs[4][5].adj=350;
G.arcs[4][9].adj=180;
G.arcs[5][9].adj=420;
G.arcs[6][7].adj=280;
G.arcs[6][9].adj=220;
G.arcs[7][8].adj=250;
G.arcs[8][9].adj=320;
for(i=0;ifor(j=0;jG.arcs[j][i].adj=G.arcs[i][j].adj;
returnG;
}
voidMenu()
{
printf("\n欢迎来到沈阳航空航天大学\n");
printf("\n");
printf("祝你:
旅途愉快\n");
printf("\n");
printf("1.浏览校园全景\n");
printf("2.查看所有游览路线\n");
printf("3.选择出发点和目的地\n");
printf("4.查看各景点信息\n");
printf("5.退出系统\n");
printf("\n");
printf("诚心为你服务-请选择(输入编号.回车结束):
");
}
voidBrowser(MGraph*G)
{
intv;
printf("\n");
printf("编号.景点名称.简介\n");
for(v=0;vvexnum;v++)
{
printf("%-4d%-16s%-56s\n",G->vexs[v].num,G->vexs[v].name,G->vexs[v].introduction);
}
printf("\n");
}
voidShortestPath_DIJ(MGraph*G)
{
intv,w,i,min,t=0,x,flag=1,v0;
intfinal[20],D[20],p[20][20];
while(flag)
{
printf("请输入一个起始景点编号0-9:
");
scanf("%d",&v0);
if(v0<0||v0>G->vexnum)
{
printf("景点编号不存在!
请重新输入景点编号0-9:
");
scanf("%d",&v0);
}
if(v0>=0&&v0vexnum)
flag=0;
}
for(v=0;vvexnum;v++)
{
final[v]=0;
D[v]=G->arcs[v0][v].adj;
for(w=0;wvexnum;w++)
p[v][w]=0;
if(D[v]{
p[v][v0]=1;p[v][v]=1;
}
}
D[v0]=0;final[v0]=1;
for(i=1;ivexnum;i++)
{
min=MAX;
for(w=0;wvexnum;w++)
if(!
final[w])
if(D[w]final[v]=1;
for(w=0;wvexnum;w++)
if(!
final[w]&&(min+G->arcs[v][w].adj{
D[w]=min+G->arcs[v][w].adj;
for(x=0;xvexnum;x++)
p[w][x]=p[v][x];
p[w][w]=1;
}
}
for(v=0;vvexnum;v++)
{
if(v0!
=v)printf("%s",G->vexs[v0].name);
for(w=0;wvexnum;w++)
{
if(p[v][w]&&w!
=v0)
printf("-->%s",G->vexs[w].name);
t++;
}
if(t>G->vexnum-1&&v0!
=v)printf("总路线长%dm\n\n",D[v]);
}
}
voidFloyd(MGraph*G)
{
intv,u,i,w,k,j,flag=1,p[10][10],D[10][10];
for(v=0;vvexnum;v++)
for(w=0;wvexnum;w++)
{
D[v][w]=G->arcs[v][w].adj;
for(u=0;uvexnum;u++)
p[v][w]=0;
if(D[v][w]{
p[v][w]=1;p[v][w]=1;
}
}
for(u=0;uvexnum;u++)
for(v=0;vvexnum;v++)
for(w=0;wvexnum;w++)
if(D[v][u]+D[u][w]{
D[v][w]=D[v][u]+D[u][w];
for(i=0;ivexnum;i++)
p[v][w]=p[v][u]||p[u][w];
}
while(flag)
{
printf("请输入出发点和目的地的编号0-9如(**):
");
scanf("%d%d",&k,&j);
if(k<0||k>G->vexnum||j<0||j>G->vexnum)
{
printf("景点编号不存在!
请重新输入出发点和目的地的编号:
");
scanf("%d%d",&k,&j);
}
if(k>=0&&kvexnum&&j>=0&&jvexnum)
flag=0;
}
printf("%s",G->vexs[k].name);
for(u=0;uvexnum;u++)
if(p[k][j]&&k!
=u&&j!
=u)
printf("-->%s",G->vexs[u].name);
printf("-->%s",G->vexs[j].name);
printf("总路线长%dm\n",D[k][j]);
}
voidSearch(MGraph*G)
{
intk,flag=1;
while(flag)
{
printf("请输入要查询的景点编号0-9:
");
scanf("%d",&k);
if(k<0||k>G->vexnum)
{
printf("景点编号不存在!
请重新输入景点编号0-9:
");
scanf("%d",&k);
}
if(k>=0&&kvexnum)
flag=0;
}
printf("\n");
printf("编号.景点名称.简介\n");
printf("%-4d%-16s%-56s\n",G->vexs[k].num,G->vexs[k].name,G->vexs[k].introduction);
printf("\n");
}
intLocateVex(MGraph*G,char*v)//找出
{
intc=-1,i;
for(i=0;ivexnum;i++)
if(strcmp(v,G->vexs[i].name)==0)
{
c=i;
}
returnc;
}
voidprint(MGraph*G)
{
intv,w,t=0;
for(v=0;vvexnum;v++)
for(w=0;wvexnum;w++)
{
if(G->arcs[v][w].adj==MAX)
printf("∞");
elseprintf("%-7d",G->arcs[v][w].adj);
t++;
if(t%G->vexnum==0)
printf("\n");
}
}
voidmain()
{
inti;
b=InitGraph();
Menu();
scanf("%d",&i);
while(i!
=5)
{
switch(i)
{
case1:
system("cls");Browser(&b);Menu();break;
case2:
system("cls");ShortestPath_DIJ(&b);Menu();break;
case3:
system("cls");Floyd(&b);Menu();break;
case4:
system("cls");Search(&b);Menu();break;
default:
exit
(1);
}
scanf("%d",&i);
}
}
完成日期:
2011年01月08日