数据结构课程设计之校园导游系统

放假到现在终于安下心来要搞点学习了,现在对放假前一周的数据结构课设做一个总结,快放假的时候搞数据结构课设,当时满脑子都是期末考试忙着复习,根本没啥心思去做。所以课设一共用了两天时间,基本功能都实现了,麻雀虽小五脏俱全,但是和其他有图形界面的人来说,我的就比较垃圾了,但是用来交差还是可行的。而且c语言弄图形库也是比较麻烦,建议你有充足的时间去做,下面是我对我的课程设计的分析及总结。

设计题目 :校园导游系统

设计目的:在校园建设不断完善的现在,为在校学生提供合适的行走路径,为来访的客人提供各种服务的信息;对于这些问题,可用图结构来表示校园交通网络,编写程序完成校园导游系统。

设计内容: 提供用户以及管理员功能,用户可以对校园地点进行查询,而管理员可以对交通图进行增删查改,同时管理员可以登陆、修改密码等待操作,有一定的交互界面。

设计要求:校园导游图涉及了地点和道路两方面信息,地点信息以及道路信息应存储在文件中,文件的存储格式自己设计。对这两方面进行查找、增加、修改、删除等操作,并同步更新文件。

看完设计要求我们知道,这个课程设计如果不包括图形界面的话,其他的功能就是一些图的操作,例如:图的建立,图的遍历,图的最小生成树,图的最短路径,在就是一些文件的增加和删除。有了这些东西,所有的基本功能就都实现了。

下面是分析及代码展示:

1.图的建立

图的建立有邻接表和邻接矩阵两种,两种建立方式在代码的处理和复杂度上综合来看是差不多的,所以选哪个都一样,我选用的是邻接矩阵。

//邻接矩阵创建无向图

void Creat(MGraph *G)

{

FILE *fp;

int i = 0,j = 0,k,m,index1,index2,weight;

char name1[30], name2[30];

fp=fopen("文件点.txt", "rt"); //文件中读取结点

if (fp == NULL)

{

printf("文件为空,或者文件遭破坏,请呼叫工作人员。按任意退出...");

getchar();

exit(1);

}

while (fscanf(fp, "%s %s", G->vex[i].name,G->vex[i].build_describe) != EOF)

{

G->vex[i].num = i;

i++;

}

fclose(fp);

G->vexnum = i;

for (m = 0; m < G->vexnum; m++) //初始化邻接矩阵

for (k = 0; k < G->vexnum; k++)

G->arcs[m][k] = INFINITY;

fp = fopen("文件边.txt", "rt"); //文件中读取边

if (fp == NULL)

{

printf("文件为空,或者文件遭破坏,请呼叫工作人员。按任意退出...");

getchar();

exit(1);

}

while (fscanf(fp, "%s %s %d", name1,name2,&weight) != EOF)

{

index1 = Index(G, name1);

index2 = Index(G, name2);

G->arcs[index1][index2] = weight;

G->arcs[index2][index1] = weight;

j++;

}

fclose(fp);

G->arcnum = j;

}

2.显示图的基本信息

就是将整个图遍历输出

void Display(MGraph *G) //显示图信息

{

int i, j;

printf("校园各个路径的情况为:\n");

for (i = 0; i < G->vexnum; i++)

for (j = 0; j < i; j++)

{

if (G->arcs[i][j] != INFINITY)

printf("%s%s:%10dm\n", G->vex[i].name, G->vex[j].name, G->arcs[i][j]);

}

}

3.任意两点的最短路径长度

使用Dijkstra算法实现

//Dijkstra算法求从起点到终点的最短路径

void Dijkstra(MGraph *G, int start, int end, int dist[], int path[][MAXVEX])

{

//dist记录各条最短路径长度,path数组记录对应路径上的各顶点

int mindist, i, j, k, t = 1;

for (i = 0; i < G->vexnum; i++) //初始化

{

dist[i] = G->arcs[start][i];

if (G->arcs[start][i] != INFINITY)

path[i][1] = start;

}

path[start][0] = 1;

for (i = 1; i < G->vexnum; i++)

{

mindist = INFINITY;

for(j=0;jvexnum;j++) //选择最小权值路径

if (!path[j][0] && dist[j] < mindist)

{

k = j;

mindist = dist[j];

}

if (mindist == INFINITY)

return;

path[k][0] = 1;

for (j = 0; j < G->vexnum; j++) //修改路线

{

if (!path[j][0] && G->arcs[k][j] < INFINITY&&dist[k] + G->arcs[k][j] < dist[j])

{

dist[j] = dist[k] + G->arcs[k][j];

t = 1;

while (path[j][t] != 0) //记录新的最短路径

{

path[j][t] = path[k][t];

t++;

}

path[j][t] = k;

path[j][t + 1] = 0;

}

}

}

for (i = 0; i < G->vexnum; i++)

if (i == end)

break;

printf("从%s%s的最短路线为:从%s", G->vex[start].name, G->vex[end].name, G->vex[start].name);

for (j = 2; path[i][j] != 0; j++)

printf("->%s", G->vex[path[i][j]].name);

printf("->%s , 距离为: %dm\n", G->vex[end].name, dist[i]);

}

4.提供图中所有地点的最佳布网方案(最小生成树)

使用prim算法实现

void Shortlink(MGraph *G) //寻找最短路线

{

system("cls");

char name[20];

int start, end;

int dist[MAXVEX], path[MAXVEX][MAXVEX] = { 0 };

printf("请输入起点建筑:");

scanf("%s", name);

start = Index(G, name);

printf("请输入终点建筑:");

scanf("%s", name);

end = Index(G, name);

Dijkstra(G, start, end, dist, path);

}

void Prim(MGraph *G, int start) //prim算法求最小生成树

{

struct

{

int adjvex;

int lowcost;

}closedge[MAXVEX];

int i, e, k, m, min;

closedge[start].lowcost = 0;

for(i=0;ivexnum;i++)

if (i!=start)

{

closedge[i].adjvex = start;

closedge[i].lowcost = G->arcs[start][i];

}

for (e = 0; e < G->vexnum - 1; e++)

{

//选择最小权值的边

min = INFINITY;

for (k = 0; k < G->vexnum; k++)

{

if (closedge[k].lowcost != 0 && closedge[k].lowcost < min)

{

m = k;

min = closedge[k].lowcost;

}

}

printf("从%s%s:%dm\n", G->vex[closedge[m].adjvex].name, G->vex[m].name, closedge[m].lowcost);

closedge[m].lowcost = 0;

//当m加入后,更新closedge数组信息

for (i = 0; i < G->vexnum; i++)

{

if (i != m && G->arcs[m][i] < closedge[i].lowcost)

{

closedge[i].lowcost = G->arcs[m][i];

closedge[i].adjvex = m;

}

}

}

}

这是整个系统的基本功能,增删改除等功能由于篇幅太长就不一一列举了。总的来说通过这次课设,使我对于数据结构这门学科有了更深入的了解,并且运用了其中的存储类型进行了实战,虽然只用了两天时间,图形界面没有运用比较遗憾,但是c语言的图形界面不是很好用,有兴趣的话你可以了解一下。

源代码链接

java校院导游程序课程设计_数据结构课程设计之校园导游系统相关推荐

  1. java闹钟程序设计_JAVA课程设计_闹钟的设计与实现项目-报告_附源代码.doc

    JAVA课程设计_闹钟的设计与实现项目-报告_附源代码 第2章 MACROBUTTON AcceptAllChangesInDoc [双击此处键入1级标题] PAGE 2 - PAGE 1 - .. ...

  2. 数据结构java教学计划编排_数据结构课程设计_教学计划编制问题

    数据结构课程设计_教学计划编制问题 (教学计划编制问题)目 录1.需求分析 -------.3-52.概要设计 -------.6-83.详细设计 ------ 8-134.调试分析 ------ 1 ...

  3. java数据结构通讯录管理系统_数据结构课程设计—通讯录管理系统

    浊贤平鲁冠城美华道钉.内急顺美兴华品红缺点清屏!车组悬吊嗉囊沥胆情愿,城东兴荣规划管涌铺板?轻奏便装壳菜蓝坛卵石数据结构课程设计-通讯录管理系统.缪斯朝圣美金放下隆暑路权. 当年绸巾登封轮滑殴伤调理电 ...

  4. 算术表达式求值的程序设计与实现_数据结构课程设计

    以下内容可且仅可供参考,如有错误欢迎指正. 部分思路借鉴算术表达式求值(C语言栈)_夜何其的博客-CSDN博客_c语言利用栈求解算术表达式侵删致歉 <算术表达式求值的程序设计与实现>题目要 ...

  5. 数据结构迷宫代码_数据结构课程设计——迷宫求解(二)

    前言 接上文的介绍,本文将主要介绍如何生成随机迷宫,在网上找到的资源也比较多,这里我选取了随机 Prim 算法生成迷宫,选择这个算法的理由如下: 算法思想简单,易于实现 生成的迷宫比较自然,不会出现明 ...

  6. 家族关系查询系统程序设计算法思路_数据结构课程设计(家族关系查询系统)..doc...

    数据结构课程设计(家族关系查询系统). 1 课程设计介绍 1.1课程设计项目简介 家谱是一种以表谱形式,记载一个以血缘关系为主体的家族世系繁衍和重要人物事迹的特殊图书载体.家谱是中国特有的文化遗产,是 ...

  7. 家族关系查询系统程序设计算法思路_数据结构课程设计--

    数据结构课程设计-- 家族关系查询系统 课 程 设 计 任 务 书 题目题目 家族关系查询系统家族关系查询系统 主要内容.基本要求.主要参考资料等主要内容.基本要求.主要参考资料等 主要内容主要内容 ...

  8. java数据结构课程设计_java数据结构课程设计

    华东交大理工学院 课程设计(论文)任务书 电信分院2009 电子商务专业一班 一.课程设计(论文)题目走迷宫 二.课程设计(论文)工作自 2011 年6月20 日起至 2011 年6月30 日止. 三 ...

  9. python通讯录管理系统设计_数据结构课程设计-通讯录管理系统(C语言版)

    ##数据结构课程设计-通讯录管理系统 一,前言 自从上次C语言课设写完后,这次数据结构课设就写的游刃有余了,很快啊,不足三天就写完了它(年轻人不讲武德),如果你认真看过我之前写的C语言课程设计-球队管 ...

最新文章

  1. 手机拍视频,实时换背景,继马卡龙玩图后,Versa又出了一款更厉害的App
  2. 三星 原生android,原生Android 4.0 三星GALAXY Nexus评测
  3. C#串口通信工作笔记0001---嵌入式_串口通信_数据发送
  4. Linux 命令(87)—— tail 命令
  5. java io 读取配置文件_(转)Java 读写Properties配置文件
  6. [QT入门篇]编程基础知识
  7. 原生JS实现文件上传
  8. 目前颜值最高的开源BI工具-Superset
  9. lc用U盘更新固件_索尼X9000H/X9100H系列机型更新HDMI2.1固件
  10. 路由控制配置network命令解析
  11. JRebel出现ERROR Failed to obtain seat. Unable to connect to license server
  12. 小程序瀑布流-是真的流啊
  13. 推荐一个易学预测、学术研讨、资源分享网站:龙腾易学网
  14. Java HotSpot(TM) 64-Bit Server VM warning:
  15. YARN集群的mapreduce测试(一)
  16. YOLOX改进之模型轻量化(Lite)
  17. Qt之QImage类
  18. DDD - 概述 - (一)
  19. Netty框架之Selector使用详解
  20. 我博士科研经历中的经验和教训

热门文章

  1. ASP.NET仿新浪微博下拉加载更多数据瀑布流效果
  2. Mantis 缺陷管理系统
  3. 探索全新时代的数字艺术市场!了解NFT数字藏品交易平台的运作!
  4. 成都碧水智慧(大屏应用) 问题记录
  5. oxooooooof4蓝屏_蓝屏代码0x000000f4怎么解决?
  6. 互换性与测量技术——表面粗糙度选取和标注方法
  7. 教你把heic格式转化jpg
  8. 如何让歌曲顺序播放html中,怎样让你内存卡里歌曲按照自己顺序播放.doc
  9. 使用HttpClient访问网路数据
  10. linux内核如何修改lowmem,Linux Kernel Tuning for C500k