数据结构课程设计报告学校导游系统

上传人:仙*** 文档编号:28119231 上传时间:2021-08-23 格式:DOC 页数:30 大小:333.01KB
收藏 版权申诉 举报 下载
数据结构课程设计报告学校导游系统_第1页
第1页 / 共30页
数据结构课程设计报告学校导游系统_第2页
第2页 / 共30页
数据结构课程设计报告学校导游系统_第3页
第3页 / 共30页
资源描述:

《数据结构课程设计报告学校导游系统》由会员分享,可在线阅读,更多相关《数据结构课程设计报告学校导游系统(30页珍藏版)》请在装配图网上搜索。

1、西安郵電學院数据结构课程设计报告题 目: 校 园 导 游 系 统院系名称:计算机学院 专业名称:计算机科学与技术班 级: 学生姓名: 学号(8位): 指导教师: 设计起止时:一. 设计目的1学会图的存储、图的保存与读取。2学会图的深度遍历和广度遍历。3学会图的查找。4学会找图的最短路径、转折点最少的路径和所有路径。二. 设计内容 1界面。 2图的存储、保存、及读取。 3图的查找。 4找图重量景点之间的最短路径、转折点最少的路径和所有路径。三概要设计界面游客登录管理员登陆学院地图学院各景点的序号表景点查找查找两景点的所有路径两景点间的最短路径查找两景点间的转折点最少路径输入密码创建图文件读取保存

2、文件四详细设计1创建图 createUDN(*G)开始输入顶点数和弧的个数i定点数 j定点数i,j两顶点间的权值赋值无穷大i+i=0i=0i+j+输入定点名i定点数输入简介i弧的个数结束输入第一个顶点名输入点二个顶点名输入两景点间的权值i=0 j=0i+否否否否调用函数 LocateVertex() 2查找景点 GetVertex(*G)输入定点名开始i=0i定点数 景点名与第i个定点名相同输出定点名输出该定点名的简介是否继续结束否是i+否调用函数 map() 3查找最短路径 zdload(G*)开始初始化pathij,distij用弗洛伊德算法计算最小路径输入两景点名输出最短路径结束Y YN

3、distik+distkjvexnum,&G-arcnum); for(i=0;ivexnum;i+) for(j=0;jvexnum;j+) G-arcsij.adj=INFINITY; for(i=0;ivexnum;i+) printf(输入第%d个顶点信息,i+1);printf(地点名:);scanf(%s,G-vertexi.name);flushall();printf(简介:);scanf(%s,G-vertexi.jianjie);flushall(); printf(*n); for(k=0;karcnum/2;k+) printf(输入第%d条弧的两定点的地点名n,k);

4、printf(第一个顶点名:); scanf(%s,name1);flushall(); printf(第二个顶点名:); scanf(%s,name2);flushall();printf(权值:);scanf(%d,&weight);printf(*n);i=LocateVertex(G,name1);j=LocateVertex(G,name2); G-arcsij.adj=weight;G-arcsji.adj=G-arcsij.adj; return 1;/合并线性表SeqList JoinList(SeqList q,SeqList p) int i; for(i=1;i=p.la

5、st;i+) q.last+; q.aq.last=p.ai; return q;/两景点的最短路径void zdload(AdjMatrix *G) int distMAX_VERTEX_NUMMAX_VERTEX_NUM,i,j,k,p,q; SeqList pathMAX_VERTEX_NUMMAX_VERTEX_NUM; char name130,name230; for(i=0;ivexnum;i+) for(j=0;jvexnum;j+) / InitList(&pathij); pathij.last=-1; distij=G-arcsij.adj; if(distijINFIN

6、ITY) AddList(&pathij,i); AddList(&pathij,j); for(k=0;kvexnum;k+) for(i=0;ivexnum;i+) for(j=0;jvexnum;j+) if(distij(distik+distkj) distij=distik+distkj; pathij=JoinList(pathik,pathkj); do biao(); printf(请输入要查找的开始地点:); scanf(%s,name1); flushall(); printf(请输入要查找的结束地点:); scanf(%s,name2); flushall(); p=L

7、ocateVertex(G,name1); q=LocateVertex(G,name2); for(k=0;k,G-vertexpathpq.ak.name); printf(endn); map(); printf(是否继续查找? 1是 2否n请选择:); scanf(%d,&i); Sleep(1000); system(cls);while(i=1);五测试数据及运行结果1正常测试数据数据1运行结果数据2运行结果数据3运行结果2非正常测试数据(2组)及运行结果。数据1运行结果运行结果数据3运行结果 六调试情况,设计技巧及体会 上机前应知道上机的内容,认真地把书上相关的内容弄懂,上机时应

8、细心,不要犯一些小错误,因为一些小错误在实验中很难发现,实验中会影响时间,例如:在scanf语句中忘记加、语句后忘加“;”、struct类型弄错误。同时也要看自己申请的空间,防止空间申请过大,程序无法运行。该程序实现了规定的必须要完成的功能,除此之外,还实现了其他的一些功能,例如:将邻接矩阵打印输出,增加新的景点和路线等等。在今后的程序设计中,我会尽量使自己的程序更加完美。刚开始看到课程设计的题目时,我感觉没有思路,很茫然。后来从图书馆里翻阅了相关资料和查看课本,才慢慢的理清头绪。在编程的时候遇到了一些较难的问题后,通过认认真真的把图章节的内容复习了一遍及问同学,对一些经典的算法有了更深的理解

9、,最后克服难题。 最后,谢谢老师这周来对我们的认真指导,给我们释疑解惑,耐心的解答我们提出的问题,老师,谢谢您,您辛苦了!七参考文献1.C语言程序设计(第二版),王曙燕等,科学出版社,20082.数据结构C语言描述,耿国华,高等教育出版社2011八附录:源代码(电子版)#include#include#include #include#include#define MAX_VERTEX_NUM 15#define INFINITY 32768int bMAX_VERTEX_NUM ;int visitedMAX_VERTEX_NUM;typedef struct vexnode char na

10、me30; char jianjie150;vexnode;typedef struct arcnode int adj;arcnode;typedef struct vexnode vertexMAX_VERTEX_NUM; arcnode arcsMAX_VERTEX_NUMMAX_VERTEX_NUM; int vexnum,arcnum;AdjMatrix;typedef struct int aMAX_VERTEX_NUM; int top;List;typedef struct SeqList int aMAX_VERTEX_NUM; int last;SeqList;/*void

11、 InitList(SeqList *L) L-last=-1;*/int AddList(SeqList *L,int x) if(L-last=MAX_VERTEX_NUM-1) return 0; L-last+; L-aL-last=x; return 1;/void tuichu();/void exit();void InitStack(List *s) s-top=-1;int push(List *s,int x) if(s-top=MAX_VERTEX_NUM-1) return 0; s-top+; s-as-top=x; return 1;int pop(List *s)

12、 if(s-top=-1) return 0; else s-top-; return 1; /退出界面void tuichu() Sleep(1000); system(cls); printf(nnnnnttn); printf(tt n); printf(tt * n); printf(tt * * n); printf(tt * * * * n); printf(tt * 导航结束 ¥ * n); printf(tt * * * n); printf(tt * * n); printf(tt * * * * n); printf(tt * ¥ 谢谢使用 * n); printf(tt

13、* * * n); printf(tt * * n); printf(tt * n); printf(tt n); printf(ttn);/地图void map() printf(n); printf( n); printf( 行政楼 大学生 体育场 学生公n); printf( 活动中心 寓区1 n); printf( 体育馆 n); printf( 图书馆 n); printf( 喷泉 n); printf(正 n); printf( 旭日苑n); printf( n); printf(门 n); printf( n); printf( n); printf( 篮 土 n); print

14、f( 教学楼实验楼 球 操 学生公n); printf( 场 场 寓区2n); printf( n); printf( 东 n); printf( 北南 美食 n); printf( 西 澡堂 广场 n); printf( n); printf(n);/各地点的序号void biao() printf( n); printf( 1正门 2行政楼 n); printf( n); printf( 3喷泉 4教学楼 n); printf( n); printf( 5大学生活动中心 6实验楼 n); printf( n); printf( 7图书馆 8澡堂 n); printf( n); printf

15、( 9体育场与体育馆 10土操场与篮球场 n); printf( n); printf( 11美食广场 12学生公寓区1 n); printf( n); printf( 13旭日苑 14学生公寓区2 n); printf( n);/求顶点位置int LocateVertex(AdjMatrix *G,char name30) int j=0,k; for(k=0;kvexnum;k+) if(strcmp(G-vertexk.name,name)=0) j=k; break; return (j);/用邻接矩阵存储结构创建图int createUDN(AdjMatrix *G) int i,j

16、,k,weight; char name130,name230; printf(请输入定点数和弧数:); scanf(%d %d,&G-vexnum,&G-arcnum); for(i=0;ivexnum;i+) for(j=0;jvexnum;j+) G-arcsij.adj=INFINITY; for(i=0;ivexnum;i+) printf(输入第%d个顶点信息,i+1);printf(地点名:);scanf(%s,G-vertexi.name);flushall();printf(简介:);scanf(%s,G-vertexi.jianjie);flushall(); printf

17、(*n); for(k=0;karcnum/2;k+) printf(输入第%d条弧的两定点的地点名n,k);printf(第一个顶点名:); scanf(%s,name1);flushall(); printf(第二个顶点名:); scanf(%s,name2);flushall();printf(权值:);scanf(%d,&weight);printf(*n);i=LocateVertex(G,name1);j=LocateVertex(G,name2); G-arcsij.adj=weight;G-arcsji.adj=G-arcsij.adj; return 1;/保存图save_i

18、nf(AdjMatrix *G)int i,j;FILE *fp;if(fp=fopen(学校导游系统.txt,wt)=NULL)printf(n写文件出错,按任意键退出!);getch();exit(1);fprintf(fp,%d %dn,G-arcnum,G-vexnum);for(i=0;ivexnum;i+)fprintf(fp,%s %sn,G-vertexi.name,G-vertexi.jianjie); for(i=0;ivexnum;i+) for(j=0;jvexnum;j+) fprintf(fp,%d ,G-arcsij.adj);printf(n文件已保存,按任意键

19、返回!); getch();fclose(fp);/从制定磁盘中读取信息并存入图GAdjMatrix *read_inf()AdjMatrix *G;int i,j;FILE *fp;fp=fopen(学校导游系统.txt,rt);if(fp=NULL)printf(n读文件出错,按任意键退出!);getch();exit(1);G=(AdjMatrix *)malloc(sizeof(AdjMatrix); fscanf(fp,%d %d,&G-arcnum,&G-vexnum); for(i=0;ivexnum;i+) fscanf(fp,%s %s,G-vertexi.name,G-ve

20、rtexi.jianjie);for(i=0;ivexnum;i+)for(j=0;jvexnum;j+) fscanf(fp,%d,&G-arcsij.adj);fclose(fp);printf(n文件已读出,按任意键返回!);getch();return G;/景点查找void GetVertex(AdjMatrix *G) char name30; int i,p=0; biao(); printf(输入要查找的地点名:); scanf(%s,name); flushall(); for(i=0;ivexnum;i+) if(strcmp(G-vertexi.name,name)=0)

21、 p=1; break; if(p=0) map(); printf(抱歉,您查找的地址不存在!); else map(); printf(地点名:%sn简介:%s,G-vertexi.name,G-vertexi.jianjie) ; printf(nnnn*); printf(n是否继续查找? 1是 2否n请选择:); scanf(%d,&i); if(i=1) Sleep(10000); system(cls); GetVertex(G); /密码登录void mima() AdjMatrix G; int i; char m7; printf(请输入六位数的密码:); for(i=0;

22、i6;i+) mi=getch(); printf(*); m6=0; Sleep(1000); if(strcmp(m,123456)=0) printf(nnnnntt (-) ); printf(ntt ) - - (); printf(ntt / (o _ o) ); printf(ntt ( 0 ) /); printf(ntt -._=_.-_); printf(ntt /;#.-.#; ); printf(ntt_) 密码#正确(_/ ); printf(ntt #. # ); printf(ntt #.欢迎进入 !.# ); printf(ntt / #. .# ); prin

23、tf(ntt _ #. .#/ /_ ); printf(ntt (_) # (_) ); Sleep(1000); system(cls); printf(n); printf( * n); printf( * * n); printf( * 是否创建导游图? * n); printf( * 1是 2否 * n); printf( * * n); printf( * n); printf(n); printf(请选择:); scanf(%d,&i); if(i=1) createUDN(&G); save_inf(&G); else Sleep(1000); system(cls); tui

24、chu(); else Sleep(1000); system(cls); printf(nnntt|/ ); printf(ntt.-.-/ ); printf(ntt (.) ); printf(ntt+-oOOo-(_)-oOOo-+); printf(ntt| |); printf(ntt| 密码输入错误! 请重新输入! |); printf(ntt| |); printf(ntt+-Oooo-+n); mima(); /求离第二个景点最近的点List *second(AdjMatrix *G,int i,int j,List *L2 ) int visitMAX_VERTEX_NUM

25、 ,p,k; List *L1,*L3; L1=(List*)malloc(sizeof(List); InitStack(L1); L3=(List*)malloc(sizeof(List); InitStack(L3); for(k=0;kvexnum;k+) visitk=INFINITY; if(i=j) push(L2,i); return L2; p=i; visitp=p; for(k=0;kvexnum;k+) if(G-arcspk.adjtop!=-1) push(L3,L1-aL1-top); pop(L1); push(L1,k); while(L3-top!=-1)

26、push(L1,L3-aL3-top); pop(L3); /* if(k=j)push(L2,j);push(L2,i);return L2;*/ while(1) p=L1-aL1-top;L1-top-;for(k=0;kvexnum;k+)if(G-arcspk.adjtop!=-1)push(L3,L1-aL1-top);pop(L1);push(L1,k);while(L3-top!=-1)push(L1,L3-aL3-top);pop(L3);if(k=j)push(L2,p);return L2;/求两景点间转折点最少的路径void zzdload(AdjMatrix *G)

27、List *L2; int i,j; char v130,v230; L2=(List*)malloc(sizeof(List);InitStack(L2); biao(); printf(输入第一个景点名:); scanf(%s,v1); flushall(); printf(输入第二个景点名:); scanf(%s,v2); flushall(); i=LocateVertex(G,v1); j=LocateVertex(G,v2); push(L2,j); L2=second(G,i,j,L2); while(L2-aL2-top!=i)L2=second(G,i,L2-aL2-top,

28、L2); printf(最少转折点的路径:); for(L2-top;L2-top-1;L2-top-) i=L2-aL2-top; printf(%s-,G-vertexi.name); printf(endn); map(); printf(n*n); printf(是否继续查找? 1是 2否n请选择:); scanf(%d,&i); if(i=1) Sleep(1000); system(cls); zzdload(G); /路径输出void fond(AdjMatrix *G,int v0,int v1,int j,int k)int n;visitedk=1;if(G-arcsbjv

29、1.adj!=INFINITY)for(n=0;nvertexbn.name); printf(%st,G-vertexv1.name);printf(nnn);return;for(n=0;nvexnum;n+)if(G-arcsbjn.adj!=INFINITY&visitedn=0)visitedn=1; bj+1=n;fond(G,bj+1,v1,j+1,k); visitedn=0;/两景点间的所有路径void allload(AdjMatrix *G) int bMAX_VERTEX_NUM,j,v0,v,i,k,visitedMAX_VERTEX_NUM;char name130

30、,name230;biao(); printf(输入地一个地点:);scanf(%s,name1);flushall();printf(输入第二个地点:);scanf(%s,name2);flushall(); v0=LocateVertex(G,name1);v=LocateVertex(G,name2);/int pmaxsize;/for(i=0;ivexnum;i+)/visitedi=0;b0=v0;j=0;for(i=0;ivexnum;i+)visitedi=0;visitedv0=1;i=G-arcsv0v.adj;k=v0;if(G-arcsv0v.adj!=INFINITY

31、)printf(%st,G-vertexv0.name);printf(%st,G-vertexv.name); printf(nnn);i=G-arcsv0v.adj; G-arcsbjv.adj=INFINITY;fond(G,bj,v,j,k); G-arcsv0v.adj=i;printf(是否继续? 1是 2否n);scanf(%d,&i);Sleep(1000);system(cls);if(i=1)allload(G);/合并线性表SeqList JoinList(SeqList q,SeqList p) int i; for(i=1;i=p.last;i+) q.last+;

32、q.aq.last=p.ai; return q;/两景点的最短路径void zdload(AdjMatrix *G) int distMAX_VERTEX_NUMMAX_VERTEX_NUM,i,j,k,p,q; SeqList pathMAX_VERTEX_NUMMAX_VERTEX_NUM; char name130,name230; for(i=0;ivexnum;i+) for(j=0;jvexnum;j+) / InitList(&pathij); pathij.last=-1; distij=G-arcsij.adj; if(distijINFINITY) AddList(&pa

33、thij,i); AddList(&pathij,j); for(k=0;kvexnum;k+) for(i=0;ivexnum;i+) for(j=0;jvexnum;j+) if(distij(distik+distkj) distij=distik+distkj; pathij=JoinList(pathik,pathkj); do biao(); printf(请输入要查找的开始地点:); scanf(%s,name1); flushall(); printf(请输入要查找的结束地点:); scanf(%s,name2); flushall(); p=LocateVertex(G,na

34、me1); q=LocateVertex(G,name2); for(k=0;k,G-vertexpathpq.ak.name); printf(endn); map(); printf(是否继续查找? 1是 2否n请选择:); scanf(%d,&i); Sleep(1000); system(cls);while(i=1);/游客登录void ykland( AdjMatrix *G)int i;biao(); printf(n);printf( n);printf( 1查找景点 n);printf( n);printf( 2查找两景点间的所有路径 n);printf( n);printf

35、( 3查找两景点间的最小路径 n);printf( n);printf( 4查找两景点间的中转站最少的路径 n);printf( n);printf( 5退出 n);printf( n);printf(n); printf(请选择:);scanf(%d,&i);Sleep(1000);system(cls);switch(i) case 1: GetVertex(G);break; case 2: allload(G);break; case 3: zdload(G);break; case 4: zzdload(G);break; case 5: tuichu();break;if(i!=5)Sleep(1000); system(cls); ykland(G);/管理员登陆void glyland() mima();/进入界面/void tuichu();void jinru() AdjMatrix *G; int i; system(color 3e); G=(AdjMatrix *)malloc(sizeof(AdjMatrix); printf(nnnnnttn); printf(tt n); printf(tt * n); printf(tt * * n); printf(tt *

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!