数据结构课设(C语言)——校园导航系统

这篇具有很好参考价值的文章主要介绍了数据结构课设(C语言)——校园导航系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

校园导航系统不是很难,因为最短路径已经有了Dijkstra算法,这就可以直接用。

我们需要的只是往这个算法里面加参数还有对界面的创作,这些都很简单。不过用算法还得需要了解算法,所以建议大家还是去理解一下这个算法的内涵。实际运行可能和我的运行结果有出入,应该只是显示的问题。

前期准备:

校园导航系统c语言源代码,数据结构,c语言,算法,链表

呈现结果:

校园导航系统c语言源代码,数据结构,c语言,算法,链表

代码如下:文章来源地址https://www.toymoban.com/news/detail-788054.html

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>//导入头文件

#define MaxLen 1000//define可以定义一个标识符为一个常量,此处将MaxLen定义为无穷大方便后续算法之中使用
#define Max 100//定义最大容量为100

void InitDis();//初始化map数组里面的各种距离信息
void Dijkstra(int v0,int s);//Dijkstra最短路径算法
void MapList();//地图界面
void Welcome();//欢迎界面
void Menu();//菜单界面
void BuildList();//景点信息界面
void Quit();//退出界面
void MenuSystem();//菜单逻辑


int map[Max][Max],Flag[Max],Dis[Max];
char name[37][50]={"","西门","西二门","孝武综合楼","天工/天成楼","湛林体育馆","南三门","湖西路","平桥","校医院","拱桥","西区宿舍","孔子广场","南二门","经法/外语楼",
				"樱花林","体育楼","格物楼","西苑/西霞餐厅","校史馆","教六","北门","图书馆","教一","明德楼","喷泉广场","计科楼","南大门","音乐/美术楼","三里餐厅",
				"三里宿舍","湖东路","东苑餐厅","东区宿舍","广播台","人文广场","东门"};
//此处可以使用结构体也可以使用像我一样的二维数组,但是注意我的二维数组的第一个是空的,以便后续输出的时候序号和建筑物一对一。
 
void InitDis()//初始化距离信息
{
	int i,j;
	for(i=1;i<=36;i++)//初始化map,使得景点自己和自己的距离为0,剩下的距离为无穷大。
		for(j=1;j<=36;j++)
		{
			if(i==j)
				map[i][j]=0;
			else
				map[i][j]=MaxLen;
		}
//此处存储各个景点之间的距离。注意一定要按顺序来,例如不可以先map[2][5]再[2][3],因为后面的for循环会覆盖掉 
	map[1][5]=100;
	map[2][3]=105;map[2][5]=128;map[2][7]=150;map[2][8]=200;
	map[3][6]=50;
	map[4][5]=40;map[4][7]=70;
	map[5][7]=50;
	map[6][9]=30;
	map[7][10]=120;map[7][14]=450;map[7][15]=400;
	map[8][11]=47;
	map[9][12]=120;
	map[10][17]=60;
	map[11][12]=50;map[11][18]=50;
	map[12][13]=50;map[12][20]=50;
	map[14][15]=120;map[14][22]=158;
	map[15][22]=40;
	map[16][17]=30;map[16][18]=120;map[16][23]=150;map[16][31]=300;
	map[17][18]=100;
	map[18][19]=57;
	map[19][20]=200;map[19][23]=40;map[19][24]=34;
	map[20][24]=212;
	map[21][35]=50;
	map[22][35]=50;map[22][28]=106;
	map[23][24]=73;map[23][31]=200;map[23][32]=150;map[23][33]=120;
	map[24][25]=80;map[24][33]=100;
	map[25][26]=30;map[25][27]=100;map[25][34]=40;
	map[28][29]=100;map[28][35]=70;map[28][31]=230;
	map[29][30]=50;map[29][31]=200;
	map[30][31]=200;
	map[31][32]=200;
	map[32][33]=100;map[32][36]=250;
	map[33][34]=170;
	for(i=1;i<=36;i++)
	{
		for(j=1;j<=36;j++)
		{
			map[j][i]=map[i][j];
		}
	}
}

void Dijkstra(int v0,int s)		//v0是起点,s是终点。迪杰斯特拉求最短路径,并输出路线 
{
	int min,i,j,u,v;
	//初始化各个数据
	int p[Max],l[Max];//这里尽可能的定义把数组定义大为了防止出现不够存的现象,坏处就是占用内存。
	memset(p,-1,sizeof(p));//将p的前sizeof(p)个长度的数值都改成unsigned(-1)。unsigned(-1)就是最大数,此处要温习反码补码知识。
	memset(l,0,sizeof(l));//将l的所有长度的数值都改成unsigned(0)也就是0。
	memset(Flag,0,sizeof(Flag));//memset(*,0,sizeof(*))这个函数常常用来清空数组。
	//以下正式开始Djikstra算法,建议先去理解算法的含义再来理解代码。
	for(i=1;i<=36;i++)
	{
		Dis[i]=map[v0][i];
		if(Dis[i]<MaxLen)
		{
			p[i]=v0;
		}
	}
		
	Flag[v0]=1;//标记
	
	for(i=1;i<36;i++)
	{
		min=MaxLen;
		for(j=1;j<=36;j++) 
		{
			if(Flag[j]==0&&Dis[j]<min)
			{
				min=Dis[j];
				u=j;
			}
		}
		Flag[u]=1; 
		for(v=1;v<=36;v++)
		{
			if(Flag[v]==0&&Dis[v]>Dis[u]+map[u][v])
			{
				p[v]=u; 
				Dis[v]=Dis[u]+map[u][v];
			}
		}
	}
	v=s;
	i=1;
	while(p[v]!=v0)
	{
		
		l[i++]=p[v];
		v=p[v];
	}
	printf("\n");
	u=i-1;
	printf("为您规划的最短路线为:");
	printf("%s--->",name[v0]);
	for(i=u;i>=1;i--)
		printf("%s--->",name[l[i]]); 
	printf("%s\n",name[s]);
	printf("全程%d米",Dis[s]);
	printf("   用时%d分钟\n",Dis[s]/60+1);
}


void MapList() //地图界面
{
	printf("                  ┏━━━━━━━━┓  ┏━━━━━━━━━━━━━━━━━━━━━━ 北门━━━━━━┓\n");
	printf("                  ┃        ┃  ┃                     人文广场    ┃\n");
	printf("  【湖北工程学院】┃        ┃  ┃    o经法/外语楼        o        ┗━━┓\n");
	printf("    【本院地图】  ┃        ┃  ┃                                  o ┃音乐/美术楼\n");
	printf("                  ┃        ┃  ┃            樱花林    图书馆        ┗━━━┓\n");
	printf("                  ┃        ┃  ┃              o         o              o┃三里餐厅\n");
	printf("  ┏━━━━━━━━━━━━━━━┛        ┃  ┃                                        ┃\n");
	printf("  ┃                        ┃  ┃                                        ┗━━━━━━┓\n");
	printf("  ┃ 天工/天成楼            ┗━━┛                                               ┃\n");
	printf("  ┃      o                                      【春晖湖】               o    ┃\n");
	printf("  ┃                                                          o湖东路  三里宿舍┃                             \n");
	printf("  ┃                            拱桥                                           ┃                                \n");
	printf(" 西门    湛林       湖西路      o                                             ┃          \n");
	printf("  ┃    体育馆        o                   o体育楼                              ┗━━━━━━━┓                \n");
	printf("  ┃      o                       o格物楼                           o东苑餐厅          ┃     \n");
	printf("  ┃                                                 o教一                            东门        \n");
	printf("  ┃                                o西苑/西霞餐厅                                     ┃  \n");
	printf("西二门          o平桥      o             o校史馆                 o东区宿舍            ┃        \n");
	printf("  ┗┓                    西区宿舍                  o明德楼                             ┃   \n");
	printf("   ┃o孝武综合楼            o      o教六                                               ┃                   \n");
	printf("   ┗━┓            o     孔子广场                 喷泉广场     广播台     ┏━━━━━━━━━━━━┛         \n");
	printf("     ┗━━ 南三门━━━━━━━━━ 南二门━━━━━━━━━━━━━━━┓     o           o┏━━━━━━━┛\n");
	printf("                校医院                        ┃               ┏━━┛                                         \n");
	printf("                                              ┃计科楼    ┏━━━━┛                                               \n");
	printf("                                              ┃  o       ┃                                              \n");
	printf("                                              ┗━━ 南大门━┛                                                           \n\n");
}


void Welcome()//欢迎界面
{
	printf("——————————————————————————————————\n\n");
	printf("                        【湖工校园导航系统】\n\n");
	printf("                     欢迎使用湖工校园导航系统\n");
	printf("                (导航数据仅供参考,并不代表实际)\n\n");
	printf("——————————————————————————————————\n\n");
	system("pause");
	system("cls");
}

void BuildList()//建筑物一览图
{
	printf("——————————————————————————————————\n\n");
	printf("                        【湖工校园导航系统】\n");
	printf("                             校园一览图\n\n");
	printf("(1)西门      (2)西二门    (3)孝武综合楼  (4)天工/天成楼 (5)湛林体育馆\n\n");
	printf("(6)南三门    (7)湖西路    (8)平桥        (9)校医院      (10)拱桥\n\n");
	printf("(11)西区宿舍 (12)孔子广场 (13)南二门     (14)经法/外语楼(15)樱花林\n\n");
	printf("(16)体育楼   (17)格物楼   (18)西苑/霞餐厅(19)校史馆     (20)教六\n\n");
	printf("(21)北门     (22)图书馆   (23)教一       (24)明德楼     (25)喷泉广场\n\n");
	printf("(26)计科楼   (27)南大门   (28)音乐/美术楼(29)三里餐厅   (30)三里宿舍\n\n");
	printf("(31)湖东路   (32)东苑餐厅 (33)东区宿舍   (34)广播台     (35)人文广场\n\n");
	printf("(36)东门\n\n");
	printf("——————————————————————————————————\n\n");
}

void Menu()//菜单界面
{
	system("cls");
	printf("——————————————————————————————————\n\n");
	printf("                         【湖工校园导航系统】\n\n");
	printf("                      (1)     查看地图\n\n");
	printf("                      (2)  查看校园一览图\n\n");
	printf("                      (3)     进入导航\n\n");
	printf("                      (4)   退出导航系统\n\n\n");
	printf("——————————————————————————————————\n\n");
}

void Quit()//退出界面
{
	system("cls");
	printf("——————————————————————————————————\n\n");
	printf("                        【湖工校园导航系统】\n\n");
	printf("                      感谢您使用湖工导航系统!\n\n");
	printf("                       作者:20541班  李小澈\n\n");
	printf("——————————————————————————————————\n\n");
}

void MenuSystem()//菜单逻辑
{
	int n,i;
	while(1)
	{
		int v0=0,s=0;
		Menu();
		printf("请输入您要进行的操作:");
		scanf("%d",&n);
		switch(n)
		{
		case 1:
			{
				system("cls");
				MapList();
				printf("返回主菜单");
				system("pause");
			}break;
		case 2:
			{
				system("cls");
				BuildList();
				printf("返回主菜单");
				system("pause");
			}break;
		case 3:
			{
				system("cls");
				BuildList();
				while(v0<1||v0>36)
				{
					printf("请输入您的起始地:");
					scanf("%d",&v0);
					if(v0<1||v0>36)
					{
						printf("输入有误!请重新输入。\n");
					}
				}
				while(s<1||s>36)
				{
					printf("请输入您的目的地:");
					scanf("%d",&s);
					if(s<1||s>36)
					{
						printf("输入有误!请重新输入。\n");
					}
				}
				system("cls");
				MapList();
				Dijkstra(v0,s);
				printf("返回主菜单");
				system("pause");
			}break;
		case 4:
			{
				Quit();
				exit(-1);
			}break;
		default: 
			{
				printf("输入错误!请重新输入。\n");
				printf("返回主菜单");
				system("pause");
			}break;
		}
	}
}

int main()//主函数
{
	InitDis();
	Welcome();
	MenuSystem();
}

到了这里,关于数据结构课设(C语言)——校园导航系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构课设—C语言实现通讯录管理系统(顺序表实现)

    这个项目是我大一时期数据结构的课程设计,在我潜心研究下出来的,对于当时的我来说算是非常满意啦,哈哈哈哈哈哈哈哈哈哈☆*: .。. o(≧▽≦)o .。.:*☆ 目录 一、引言 1.目的: 2.意义: 3.主要任务: 4.程序功能: 5.编译工具: 二、正文 1.系统模块: 2.算法流程图: 3.各

    2024年02月02日
    浏览(62)
  • 内部排序算法比较-数据结构C语言课设

    名称: 内部排序算法比较 内容: 在教科书中,各种内部排序算法的时间复杂的分析结果只给出了算法执行时间的阶,或大概执行时间。试通过随机数据比较各种算法的比较次数和移动次数,以取得直观感受。 任务: (1)对以下7中常会用的内部排序算法进行比较

    2024年02月12日
    浏览(43)
  • 交通咨询系统源代码(数据结构课设)

      系统的展示和选题在这篇博客:点击这里        (就没有详解啦,代码中的注释已经写的很详细了)          直说了,我使用的软件是vs,但是dev也可以运行,反倒是初次使用vs的同学,没有关掉sdl检查的话运行会报错,说是scanf啥的出问题。解决方法:项目-属性-

    2024年02月11日
    浏览(27)
  • 数据结构课设--图书管理系统(含泪版)

    设计一个计算机管理系统完成图书管理基本业务。 【基本要求】 (1)每种书的登记内容包括书号、书名、著作者、现存量和库存量; (2)对书号建立索引表(线性表)以提高查找效率; (3)采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只

    2024年02月08日
    浏览(31)
  • 数据结构课设----运动会分数统计系统(C++版)

    1.1② 运动会分数统计 【问题描述】 参加运动会的n个学校编号为1~n。比赛分成m个男子项目和w个女子项目,项目编号分别为1~m和m+1~m+w。由于各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5;3,2。写一个统计程序

    2024年02月03日
    浏览(29)
  • C语言数据结构课设:矩阵的运算(转置.求和.求差.矩阵相乘.求逆.数乘),文件读取矩阵

      #include stdio.h #include string.h #includestdlib.h #includemath.h // 定义一个结构体类型,表示一个矩阵 typedef struct matrix {     int nrow; // 矩阵的行数     int ncol; // 矩阵的列数     double data[10][10]; // 矩阵的数据,最大为 10 x 10 } matrix; // 定义一个函数,用于显示一个矩阵的内容  void dis

    2024年03月27日
    浏览(41)
  • 数据结构——校园导游系统

    大二下学期修了数据结构这门课,课设的要求是做一个校园导航系统。详细的要求如下 问题描述: 当我们参观校园时,会遇到如下问题:从当前所处位置去校园另外一个位置,要走什么样的路线距离最短?本课程设计任务要求,在给出校园各主要建筑的名称信息及有路线连

    2024年02月04日
    浏览(27)
  • 数据结构课设——成绩分析问题

    一、实验 题目 【问题描述】 录入、保存一个班级学生多门课程的成绩,并对成绩进行分析。 【基本要求】 (1)通过键盘输入各学生的多门课程的成绩,建立相应的文件 input.dat。 (2)对文件 input.dat 中的数据进行处理,要求具有如下功能:         1) 按各门课程成绩排

    2024年02月07日
    浏览(35)
  • 【数据库课设】图书馆资源管理系统 源码+流程图+结构设计(借还图书 逾期罚款 图书管理 读者管理 信息查询)python实现

    一个管理员编号对应一个密码,且需要有管理员注册密匙。 可以在图书信息表中录入、修改、删除图书。 可以在图书信息表中查询书籍。 可以编辑图书借阅、归还信息。 可以编辑欠款信息。 可以编辑读者信息表。 图书馆注册,获得读者编号。 可以在图书信息表中查阅书籍

    2024年02月10日
    浏览(31)
  • 数据结构课设:图书信息管理--顺序存储和链式存储

    在本实验中,我选择了两种存储结构(顺序存储和链式存储)来对图书信息表的修改问题进行描述,即:3.基于顺序存储结构的图书信息表的修改问题描述 和 13.基于链式存储结构的图书信息表的修改问题描述。 3.基于顺序存储结构的图书信息表的修改问题描述 首先,定

    2024年02月08日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包