iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++如何实现景区旅游信息管理系统
  • 907
分享到

C++如何实现景区旅游信息管理系统

2023-06-29 12:06:13 907人浏览 安东尼
摘要

这篇文章主要介绍c++如何实现景区旅游信息管理系统,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下1 问题描述如今生活水平提高,大家都喜欢在假期中到一个旅游景点参观,在旅游景区中经常听到游客打听从一个景点到

这篇文章主要介绍c++如何实现景区旅游信息管理系统,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

具体内容如下

1 问题描述

如今生活水平提高,大家都喜欢在假期中到一个旅游景点参观,在旅游景区中经常听到游客打听从一个景点到另一个景点的最短路径和最短距离,这类不喜欢按照导游图来游览的游客常常需要一个景区管理系统来挑选自己喜欢的旅游景点,再规划一个最短路径和最短距离来游览,一边节省时间跟提高旅游效率。

2 数据结构的设计

建立一个景区旅游信息管理系统,实现如下功能:

1、创建景区景点分布图

通过一个邻接矩阵(实质是一个二维数组,m[i][j]表示从i到j的权值大小,为零表示没有直达的路径)记录景区景点的分布图.

2、输出景区景点分布图(邻接矩阵)

通过扫描邻接矩阵输出景区景点分布图

3、输出导游线路图:深度优先策略

首先通过遍历景点,通过用户给出的一个入口景点c,建立一个导游线路图,导游线路图用有向图表示。遍历采用深度优先策略(递归),这个也是正常的游客的心理

4、判断导游线路图有无回路:拓扑排序(查找入度大于1的景点)

为了使导游线路图能够优化,可以通过拓扑排序判断图中有无回路,若有回路则打印输出回路中的景点,供人工优化

5、求两个景点间的最短路径和最短距离:floyd算法

在导游线路图中,还为一些不愿按线路走的游客提供信息服务,比如从一个景点到另一个景点的最短路径和最短距离。在本线路图中将输出任意景点间的最短路径和最短距离

6、输出道路修建规划图:prime算法

在景区建设中,道路建设是其中一个重要的内容。道路建设首先要保证能连通所有景点,但又要花最小的代价,可以通过求最小生成树来解决这个问题,通过prime算法来求最小生成树
通过修改后添加的功能:

7、将景区景点分布图安装指定的文件名(可以景区名字命名)保存到默认的目录file下
在这里我遇到了路径格式问题,通过查询资料得以解决这个问题

8、从默认目录file下读取指定文件名的景区景点分布图

这样就减少了每次都要创建景区景点分布图,也方便从已有的景区景点分布图导入系统,不用手动新建,实际应用中更加的方便人性化

9、为当前的景区添加景点道路

一开始没有将景区景点的路径清零,以至于添加景点道路后,再从新导入景点较少的景区景点分布图,再添加景点道路的时候发现之前的道路依然存在,因此在添加景点道路之前要将道路景区清零

3 算法设计(核心代码)

//深度优先搜索导游线路int visited[M]={0};int np=0;//找到的景点个数int p[M];//表示各个景点的入度值void DFS(int c){    //c为景点编号    np++;//每递归调用一次就自加一次,作为判断是否到了最后一个景点    p[c]++;    if(np==S.count){        //到了最后一个景点        cout<<S.mat.Pname[c]<<endl;        returnMainFace();    }else{       cout<<S.mat.Pname[c]<<"-->";    }     visited[c]=1;     for(int i=0;i<S.count;i++){        if(S.mat.m[c][i]>0&&visited[i]==0){             DFS(i);             if(S.count>np){                 cout<<S.mat.Pname[c]<<"-->";                 p[c]++;             }         }     }     if(np==S.count)         returnMainFace();}void guide_line()//导游线路{     checked();     cout<<"\n*请输入起始景点的景点编号:";     int c;     cin>>c;     c--;     for(int i=0;i<S.count;i++){         visited[i]=0;         p[i]=0;//入度置初值为0     }     np=0;     cout<<"*形成的导游线路图(采取深度优先策略)如下所示:\n\n\t";     DFS(c);}//Floyd(佛洛依德)算法,A[M][M]表示最短距离,path[M][M]表示辅助数组,记住前驱void Floyd(int A[M][M],int path[M][M]){     int i,j,k;     for(i=0;i<S.count;i++){         for(j=0;j<S.count;j++){            if(S.mat.m[i][j]==0&&i!=j){                 //如果两点之间没有边相连,则权为无穷大                 A[i][j]=INF;//INF=999666333             }else if(i==j){                 A[i][j]=0;             }else{                 //S.mat.m[i][j]表示两个景点之间的道路长度                A[i][j]=S.mat.m[i][j];             }             //给所有的path[i][j]赋值             if(i!=j&&S.mat.m[i][j]<INF){                 path[i][j]=i;             }else{                 //(i==j&&S.mat.m[i][j]=INF                 path[i][j]=-1;             }         }     }        //k注意放到最外层,让A[i][j]检测都经过每一个k         for(k=0;k<S.count;k++){             for(i=0;i<S.count;i++){                for(j=0;j<S.count;j++){                    if(A[i][j]>A[i][k]+A[k][j]){//如果i->j的权值大于i->k->j的权值                        A[i][j]=A[i][k]+A[k][j];                        path[i][j]=path[k][j];//path[k][j]=k前驱?k是指向的下一个景点                     }                 }             }         }}void min_distance()//最短路径、距离{     checked();     int A[M][M],path[M][M];     Floyd(A,path);//A是一个景点到另一个景点的最短路径的长度     while(true){         Num_Name();//编号对应的景点名称         int i,j,k,s;         int apath[M],d;//apath[M]是记录路径的数组         bool flag=true;         while(flag){             cout<<"\t-景点1:";             cin>>i;             i--;            if(i<0||i>S.count-1){                 cout<<"*请输入合法的景点编号:\n";             }else{                 flag=false;             }         }         flag=true;         while(flag){             cout<<"\t-景点2:";             cin>>j;             j--;            if(j<0||j>S.count-1){                 cout<<"*请输入合法的景点编号:\n";             }else{                 flag=false;             }         }        if(A[i][j]<INF&&i!=j){             k=path[i][j];//k是指向的下一个景点             d=0;//路径有d+2个景点,是数组apath的下标             //将待输出的路径的点存放在栈apath中             apath[d]=j;//最后一个景点            while(k!=-1&&k!=i){                 d++;                 apath[d]=k;                 //再继续判断还有没有景点                 k=path[i][k];             }             d++;             apath[d]=i;//加上第一点             cout<<"\n*从 "<<S.mat.Pname[i]<<" 到"<<S.mat.Pname[j]<<" 最短路径为:";             cout<<S.mat.Pname[apath[d]];//apath[M]数组最后一个,就是第一个起点,相当于栈             for(s=d-1;s>=0;s--){//将剩下的景点(apath[M]数组剩下的元素)打印出来                 cout<<"-->"<<S.mat.Pname[apath[s]];             }             cout<<" ,最短距离为:"<<A[i][j]<<endl;//Floyd算法已经将最短路径算出来存放到了A[i][j](将INF的值用最短路径代替了)         }else if(i==j){             cout<<"\n*景点输入不合法,输入的两个景点不能相同!\n";         }else{             cout<<"\n*这两个景点间不存在路径\n";         }         cout<<"\n是否继续执行最短路径和最短距离的查询(Y/N)";         Y_N();     }     returnMainFace();}//道路修建规划图、最小生成树(prime算法)void build_road(){     checked();     cout<<"\n*道路修建规划图(prime算法)规划如下:\n";     //Ai[M]表示待选边的权值,邻接矩阵的一行,closest[M]:点编号数组,记录下一条路的起点景点的编号     intAi[M],min,closest[M],i,j,k,sum=0,num=0;//num表示第几条路     int A[M][M];     //赋权值     for(i=0;i<S.count;i++){         for(j=0;j<S.count;j++){            if(S.mat.m[i][j]==0&&i!=j){                 A[i][j]=INF;             }else if(i==j){                 A[i][j]=0;             }else{                A[i][j]=S.mat.m[i][j];             }         }     }     for(i=0;i<S.count;i++){         Ai[i]=A[0][i];//取第一行存四个Ai[i],就是一个景点到所有景点的权值         closest[i]=0;//0     }     for(i=1;i<S.count;i++){         min=INF;         //从Ai[j]中选出最小的值存放在min         for(j=0;j<S.count;j++){            if(Ai[j]!=0&&Ai[j]<min){                 min=Ai[j];                 k=j;//记录最小的值的列j:k=j,为了下面标志此路已选             }         }         if(min<INF){             cout<<"\t-第 "<<++num<<" 条路: 从"<<S.mat.Pname[closest[k]]<<" 到"<<S.mat.Pname[k]<<" , 该道路长度为:"<<min<<endl;             sum+=min;//sum累计道路长度,即是已选的权值         }         Ai[k]=0;//标志为已选的边的权值,避免重复选择         //例子:对比a到c和b到c的权值,取最小存进Ai[j]中         for(j=0;j<S.count;j++){            if(A[k][j]!=0&&A[k][j]<Ai[j]){                 Ai[j]=A[k][j];                 closest[j]=k;//点编号数组,记录下一条路的起点景点的编号             }         }     }     cout<<"*修建道路的总长度为:"<<sum<<endl;     returnMainFace();}

以上是“C++如何实现景区旅游信息管理系统”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网其他教程频道!

--结束END--

本文标题: C++如何实现景区旅游信息管理系统

本文链接: https://www.lsjlt.com/news/324993.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++如何实现景区旅游信息管理系统
    这篇文章主要介绍C++如何实现景区旅游信息管理系统,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下1 问题描述如今生活水平提高,大家都喜欢在假期中到一个旅游景点参观,在旅游景区中经常听到游客打听从一个景点到...
    99+
    2023-06-29
  • C++实现景区旅游信息管理系统
    本文实例为大家分享了C++实现景区旅游信息管理系统的具体代码,供大家参考,具体内容如下 1 问题描述 如今生活水平提高,大家都喜欢在假期中到一个旅游景点参观,在旅游景区中经常听到游客...
    99+
    2024-04-02
  • C++实现信息管理系统
    本文实例为大家分享了C++实现信息管理系统的具体代码,供大家参考,具体内容如下 有一个信息管理系统,要求检查每一个登录系统的用户(User)的用户名和口令,系统检查合格以后方可登录系...
    99+
    2024-04-02
  • 基于C++如何实现信息管理系统
    这篇“基于C++如何实现信息管理系统”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“基于C++如何实现信息管理系统”文章吧。使...
    99+
    2023-06-29
  • C++如何实现学生信息管理系统
    本篇内容主要讲解“C++如何实现学生信息管理系统”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++如何实现学生信息管理系统”吧!实现功能上面的功能基本完全实现目前的程序其实还存在两个问题:无法...
    99+
    2023-06-30
  • 如何使用C++实现信息管理系统
    小编给大家分享一下如何使用C++实现信息管理系统,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下有一个信息管理系统,要求检查每一个登录系统的用户(Use...
    99+
    2023-06-29
  • C语言实现旅游资讯管理系统
    本文实例为大家分享了C语言实现旅游资讯管理系统的具体代码,供大家参考,具体内容如下 题目: 一、主体功能点要求 1.设计主菜单实现用户交互 a、添加旅游资讯记录 每条记录至少包含如下...
    99+
    2024-04-02
  • 微信旅游景区景点评论小程序系统设计与实现
          项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于微信景区景点旅游攻略小程序系统,前台用户使用小程序,小程序使用微信开发者工具开发;后台管理使用基PP+MySql的B/S架构,开发工具使用phpstorm;通过后...
    99+
    2023-09-01
    小程序 微信 旅游
  • C/C++实现图书信息管理系统
    本文实例为大家分享了c/c++实现图书信息管理系统的具体代码,供大家参考,具体内容如下 程序流程图 源代码 #include <stdio.h> #include ...
    99+
    2024-04-02
  • C++实现职工信息管理系统
    本文实例为大家分享了c++实现职工信息管理系统的具体代码,供大家参考,具体内容如下 1、项目需求 2、功能实现的具体思路为: (1) 经行职工信息的读入,用while循环进行读入,...
    99+
    2024-04-02
  • C++实现图书信息管理系统
    本文实例为大家分享了C++实现图书信息管理系统的具体代码,供大家参考,具体内容如下 1.题目: 类型有:编号:ISBN书名:name价格:price 完成如下的功能: ①录入:从键盘...
    99+
    2024-04-02
  • 基于C++实现信息管理系统
    基于c++设计的信息管理系统,供大家参考,具体内容如下 1、使用类+函数实现2、使用STL容器的vector3、fstream的文件存储方式4、xls文件读入 写出5、数据的四大功能...
    99+
    2024-04-02
  • C++实现简单信息管理系统
    本文实例为大家分享了C++实现简单信息管理系统的具体代码,供大家参考,具体内容如下 信息管理系统 因为学校布置了写一个信息管理系统的作业,所以写下了这个信息管理系统,这是用cpp写的...
    99+
    2024-04-02
  • Python如何实现信息管理系统
    本文小编为大家详细介绍“Python如何实现信息管理系统”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python如何实现信息管理系统”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。具体代码如下"&qu...
    99+
    2023-06-30
  • C++如何实现旅馆住宿管理系统
    本文小编为大家详细介绍“C++如何实现旅馆住宿管理系统”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++如何实现旅馆住宿管理系统”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一:课程设计要实现的目的1.预定房...
    99+
    2023-06-30
  • 如何使用C++实现图书信息管理系统
    小编给大家分享一下如何使用C++实现图书信息管理系统,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体内容如下1.题目:类型有:编号:ISBN书名:name价格:price完成如下的功能:①录入:从键盘输入(或从文件读入)...
    99+
    2023-06-29
  • C++实现教职工信息管理系统
    本文实例为大家分享了C++实现教职工信息管理系统的具体代码,供大家参考,具体内容如下 一.问题描述 一个小公司包含四类人员:经理,技术人员,销售人员和销售经理,各类人员的工资计算方法...
    99+
    2024-04-02
  • C++实现学生信息管理系统(Map实现)
    本文实例为大家分享了C++实现学生信息管理系统的具体代码,供大家参考,具体内容如下 1、 作品的功能描述: 实现一个学生信息管理系统,通过对学生信息类中的成员进行增、删、改、查从而实...
    99+
    2024-04-02
  • 如何使用C++实现教职工信息管理系统
    这篇文章主要介绍如何使用C++实现教职工信息管理系统,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下一.问题描述一个小公司包含四类人员:经理,技术人员,销售人员和销售经理,各类人员的工资计算方法如下:经理:...
    99+
    2023-06-29
  • Python实现信息管理系统
    本文实例为大家分享了Python实现信息管理系统的具体代码,供大家参考,具体内容如下 """ 项目名称 = 'python' 文件名= '学生信息管理系统' 作者 = '向日葵' "...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作