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

上传人:PIYPING 文档编号:10843485 上传时间:2021-06-07 格式:DOC 页数:30 大小:333KB
返回 下载 相关 举报
数据结构课程设计报告-学校导游系统.doc_第1页
第1页 / 共30页
数据结构课程设计报告-学校导游系统.doc_第2页
第2页 / 共30页
数据结构课程设计报告-学校导游系统.doc_第3页
第3页 / 共30页
数据结构课程设计报告-学校导游系统.doc_第4页
第4页 / 共30页
数据结构课程设计报告-学校导游系统.doc_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《数据结构课程设计报告-学校导游系统.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计报告-学校导游系统.doc(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)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1