数据结构 -- 景区旅游信息管理系统
景区旅游信息管理系统
【问题描述】
在旅游景区,经常会遇到游客打听从一个景点到另一个景点的最短路径和最短距离,这类游客不喜欢按照导游图的线路来游览,而是挑选自己感兴趣的景点游览。为于帮助这类游客信息查询,就需要计算出所有景点之间最短路径和最短距离。算法采用迪杰斯特拉算法或弗洛伊德算法均可。建立一个景区旅游信息管理系统,实现的主要功能包括制订旅游景点导游线路策略和制订景区道路铺设策略。
课程
任务中景点分布是一个无向带权连通图,图中边的权值是景点之间的距离。
(1)景区旅游信息管理系统中制订旅游景点导游线路策略,首先通过遍历景点,给出一个入口景点,建立一个导游线路图,导游线路图用有向图表示。遍历采用深度优先策略,这也比较符合游客心理。
(2)为了使导游线路图能够优化,可通过拓朴排序判断图中有无回路,若有回路,则打印输出回路中的景点,供人工优化。
(3)在导游线路图中,还为一些不愿按线路走的游客提供信息服务,比如从一个景点到另一个景点的最短路径和最短距离。在本线路图中将输出任意景点间的最短路径和最短距离。
(4)在景区建设中,道路建设是其中一个重要内容。道路建设首先要保证能连通所有景点,但又要花最小的代价,可以通过求最小生成树来解决这个问题。本任务中假设修建道路的代价只与它的里程相关。
【基本要求】
本任务应有如下功能模块:
创建景区景点分布图;
输出景区景点分布图(邻接矩阵)
输出导游线路图;
判断导游线路图有无回路;
求两个景点间的最短路径和最短距离;
输出道路修建规划图。
主程序用菜单选项供用户选择功能模块。
因为时间很仓促,做的不是很好,判断导游线路图我没用拓扑排序(写了没用) .
然后我的边和景点信息存在工程下目录edge 和 map 两个文件中.
链接:https://pan.baidu.com/s/1fkD5C8Hfp1KsNGDb91pSgw
提取码:9oox
*** 2021/1/2 更新
代码 :
#include <cstdio>
#include <cstdlib>
#include <string>
#include <cstring>
#include <algorithm>
#define path "map.txt"
#include <windows.h>
#include <vector>
#include <iostream>
using namespace std ;
const int MAX = 105 ;
const int inf = 0x3f3f3f;
// 景区旅游信息管理系统typedef struct node{char PlaceName[MAX] ; // 景点的名字 int number ; // 景点编号 char PlaceNum[MAX] ; // 编号 ;
}Node;
typedef struct Tornode{int u ;int v ;int weight ;
}TorNode; // 起点终点和距离 ;
typedef struct matGraph{int map[MAX][MAX] ;int n , e ;
}MatGraph;// 完整的图邻接矩阵类型typedef struct NODE{int key ;// 关键字项Node infor ; // 信息struct NODE *lchild ;struct NODE *rchild ;
}BSTNode;typedef struct ANode{int adjvex ; // 编号struct ANode *nextarc ;int weight ;}ArcNode ; // 边节点的类型
typedef struct Vnode{ArcNode *fitstarc ;int count ;
}VNode; // 邻接表的头结点类型
typedef struct {VNode adjlist[MAX] ;int n , e ; // 边数和顶点数
}AdjGraph;
int vis[MAX] ;
int dis[MAX] ;
int count1 ;
BSTNode *MapVex[MAX] ; // 顶点
void CreatMatGragh(MatGraph > ,int n ,int e , int pot, TorNode Gr[MAX][MAX])
{// 创建导游有向图 ;for(int i = 1 ; i<=n ; i++){for(int j = 1 ; j <=n ;j++){if(i == j ){GT.map[i][j] = 0 ;}GT.map[i][j] = inf ;}}for(int i = 1 ; i<=e ; i++){GT.map[Gr[pot][i].u][Gr[pot][i].v] = Gr[pot][i].weight ;}return ;
}
int cmp(const Node &a , const Node &b)
{return a.number <b.number ;
}
int digit(int x )
{// 计算位数int t = x ;int k = 0 ;while(t){k++;t/=10 ;}return k ;
}
char *transtr(int n)
{//转换成字符串//char t[MAX] ;char t[MAX] ;int i = 0 ,x = n ;while(x){t[digit(n) - i-1] = (x%10) + '0' ;x/=10 ;i++;}return t ;
}
void Read(Node Place[] ,int n ,int e)
{// 读取数据FILE *fp ;fp = fopen(path,"r");if(fp == NULL){perror("fopen\n") ;exit(-1) ;}for(int i = 1 ; i<=n ; i++){fscanf(fp,"%s %d",Place[i].PlaceName,&Place[i].number);int d = digit(Place[i].number) ;char Tmp[MAX] = "000";if(d==1){strcpy(Place[i].PlaceNum,transtr(Place[i].number)) ;strcat(Tmp,Place[i].PlaceNum) ;strcpy(Place[i].PlaceNum,Tmp) ;}else if(d==2){char Tmp[MAX] = "00";strcpy(Place[i].PlaceNum,transtr(Place[i].number)) ;strcat(Tmp,Place[i].PlaceNum) ;strcpy(Place[i].PlaceNum,Tmp) ;}else if(d==3){char Tmp[MAX] = "0";strcpy(Place[i].PlaceNum,transtr(Place[i].number)) ;strcat(Tmp,Place[i].PlaceNum) ;}}return ;
}void MAtToList(MatGraph g , AdjGraph *&G)
{//将邻接矩阵转换成邻接表ArcNode *p ; // 边节点G = (AdjGraph *)malloc(sizeof(AdjGraph)) ;for(int i = 1 ; i<=g.n ; i++){G->adjlist[i].fitstarc = NULL ;}for(int i = 1 ; i<= g.n ; i++){for(int j = g.n ; j >=1 ; j--){if(g.map[i][j]!= 0 && g.map[i][j] !=inf ){p = (ArcNode *)malloc(sizeof(ArcNode)) ;p->adjvex = j ;p->weight = g.map[i][j] ;p->nextarc = G->adjlist[i].fitstarc ;G->adjlist[i].fitstarc = p ;}}}G->n = g.n ;G->e = g.e ;return ;
}
int DispAdj(AdjGraph *G )
{// 输出邻接表ArcNode *p ;int count = 0 ;for(int i = 1 ; i <=G->n ; i++ ){p = G->adjlist[i].fitstarc ;printf("%3d: " ,i ) ;while(p!=NULL ){printf("%3d[%d]-> ", p->adjvex , p->weight ) ;p = p->nextarc ;count++ ;}printf(" ^ \n") ;}return count;
}
BSTNode *SearchBST(BSTNode *bt , int k )
{// 在二叉搜素树中查找 编号为k 的节点// return 节点的地址if(bt == NULL || bt->infor.number == k ){return bt ;}if(k < bt->infor.number){return SearchBST(bt->lchild , k) ;}else{return SearchBST(bt->rchild , k ) ;}}
void TopSort(AdjGraph *G)
{// 拓扑排序 ;int St[MAX] , top = -1 ;ArcNode * p ;for(int i = 1 ; i<=G->n ; i++){G->adjlist[i].count = 0 ; // 初始化}for(int i = 1 ; i<=G->n ; i++){p = G->adjlist[i].fitstarc ;while(p!=NULL){G->adjlist[p->adjvex].count++ ;p = p->nextarc ;}}for(int i = 1 ; i <=G->n ; i++){if(G->adjlist[i].count == 0 ){top++ ;St[top] = i ;}}int i , j ;while(top>-1){i = St[top] ;top -- ;cout<<i<<" " ;p = G->adjlist[i].fitstarc ;while(p!=NULL){j = p->adjvex ;G->adjlist[j].count -- ;if(G->adjlist[j].count ==0 ){top++ ;St[top] = j ;}p = p->nextarc ; // 下一个邻接点 ;}}}void DFS(AdjGraph *G , int v , Node Place[] ,BSTNode *bt )
{// 深度优先搜素ArcNode *p ;BSTNode *Root ;vis[v] = 1 ;//printf("%d ",v);Root = SearchBST(bt,v) ;// 在二叉排序树中找到if(Root!=NULL)// 小心驶得万年船,不加会异常{
// if(vis[p->adjvex] = 0 )cout<<Root->infor.PlaceName <<"-> " ;MapVex[++count1]= Root ;// 将DFS创建的节点依次加入到导游图中// 创建导游图,}p = G->adjlist[v].fitstarc ;while(p!=NULL){if(vis[p->adjvex] == 0 ){vis[p->adjvex] = 1 ; //DFS(G,p->adjvex,Place,bt) ;//vis[p->adjvex] = 0 ; //}p = p->nextarc ;}}
void Display(Node Place[] ,int n)
{// 显示所有景点名字cout<<"景点名字\t 编号\n" ;for(int i = 1 ; i<=n ;i++){printf("%8s\t%8s\n",Place[i].PlaceName,Place[i].PlaceNum);// cout<<Place[i].PlaceName<< "\t"<<Place[i].PlaceNum<<endl;Sleep(100);}}
void CreadMat(MatGraph &Map , int n , int e)
{// 创建邻接矩阵FILE *fp ;fp = fopen("edge.txt","r");for(int i = 1 ; i<=n ; i++){for(int j = 1 ;j<=n ; j++){Map.map[i][j] = inf ;if(i == j )Map.map[i][j] = 0 ;}}Map.n = n ;Map.e = e ;for(int i = 1 ; i<=e ;i++){int u , v ,w ;fscanf(fp,"%d %d %d",&u,&v,&w);Map.map[u][v] = w ;// 无向图Map.map[v][u] = w ;}return ;
}bool InsertBST(BSTNode *&bt , Node k )
{// 二叉排序树插入节点if(bt==NULL){bt = (BSTNode*)malloc(sizeof(BSTNode)) ;bt->infor.number = k.number ;strcpy(bt->infor.PlaceName,k.PlaceName) ;strcpy(bt->infor.PlaceNum,k.PlaceNum);bt->lchild = NULL ;bt->rchild = NULL ;return true ;}else if (k.number == bt->infor.number){return false ;}else if (k.number < bt->infor.number ){return InsertBST(bt->lchild , k) ;}else if (k.number > bt->infor.number ){return InsertBST(bt->rchild , k) ;}}
BSTNode *CreatBST(Node Place[] , int n)
{// 创建二叉排序树 ;BSTNode *bt = NULL;for(int i = 1; i <=n ; i++){InsertBST(bt,Place[i]) ;}return bt ;
}
void Dijkstra(int cur,MatGraph Map,BSTNode *bt ,int End)
{// 最短路Dijkstra 实现int n , e ;int Path[MAX] ;n = Map.n ;e = Map.e ;memset(vis,0,sizeof(vis)) ;memset(Path,0,sizeof(Path)) ;for(int i = 1 ; i<=n ;i++){dis[i] = Map.map[cur][i] ;if(Map.map[cur][i] < inf){Path[i] = cur ;}else{Path[i] = 0 ;}}vis[cur] = 1 ;Path[cur] = 0 ;for(int i = 1 ; i<n ; i++){int minn = inf ;int u = -1 ;for(int j = 1 ; j<=n ; j++){if(!vis[j] && dis[j]<minn){minn = dis[j] ;u = j ;}}if(u !=-1){vis[u] = 1 ;for(int v = 1 ; v <=n; v++){if(Map.map[u][v]<inf && vis[v]== 0){if(dis[v] > dis[u]+Map.map[u][v]){dis[v] = dis[u] + Map.map[u][v] ;Path[v] = u ;}}}}}BSTNode *pfind1 ,*pfind2,*pfind3;int pre ;for(int i=1;i<=n;i++)//输出结果和最短路径{pfind1 = SearchBST(bt,cur) ;pfind2 = SearchBST(bt,i) ;if(pfind1 && pfind2){if(End == pfind2->infor.number){printf("%s 到 %s的最短距离为 ",pfind1->infor.PlaceName,pfind2->infor.PlaceName);printf("%d m\n",dis[i]); //打印结果pre = Path[i];printf("路径:%d",i);}while(pre!=0) //继续找前趋顶点{pfind3 = SearchBST(bt,pre) ;if(pfind1){printf("<——%s",pfind3->infor.PlaceName);pre=Path[pre];}elseexit(0) ;}}else{cout<<"输入错误 "<<endl;exit(0) ;}}return ;
}void Prim(MatGraph Map ,int cur ,BSTNode *bt)
{// 最小生成树int lowcost[MAX] ;int MIN ;int closet[MAX] , i , j , k ;cout<<"道路修建规划 : "<<endl;for( i = 1 ; i<=Map.n ; i++){//cout<<Map.map[cur][i]<<" " ;lowcost[i] = Map.map[cur][i] ;closet[i] = cur ;}for( i = 1 ; i<Map.n ; i++){MIN = inf ;for(j = 1 ; j<=Map.n ; j++)if(lowcost[j]!=0 && lowcost[j] <MIN){MIN = lowcost[j] ;k = j ;}//printf("(%d ,%d) : %d \n ",closet[k],k ,MIN) ;BSTNode *s = SearchBST(bt,closet[k]) ;BSTNode *sz = SearchBST(bt,k) ;if( s!=NULL && sz !=NULL){cout<<s->infor.PlaceName <<" - "<<sz->infor.PlaceName <<endl ;}lowcost[k] = 0 ;for(int j = 1 ;j <=Map.n ; j++){if(lowcost[j] !=0 && Map.map[k][j]<lowcost[j]){lowcost[j] = Map.map[k][j] ;closet[j] = k ;}}}
}
int Find(char *a, Node M[],int n )
{//查找int i ;bool find = false ;for( i = 1 ; i <=n ; i++){if(strcmp(a,M[i].PlaceName)==0){find = true ;break ;}}return find?M[i].number:-1;
}
void InOrder(BSTNode *bt )
{// 中序if(bt!=NULL){InOrder(bt->lchild) ;cout<<bt->infor.number <<" " <<bt->infor.PlaceName <<" "<<bt->infor.PlaceNum <<endl ;InOrder(bt->rchild) ;}return ;
}
void PageInfor()
{system("color A") ;cout<<"\t\t\t *********************************************"<<endl;cout<<"\t\t\t * *"<<endl;cout<<"\t\t\t * *"<<endl;cout<<"\t\t\t *\t 景区旅游信息管理系统 *"<<endl ;cout<<"\t\t\t * 烟台山景区 *"<<endl;cout<<"\t\t\t * *"<<endl;cout<<"\t\t\t * *"<<endl;cout<<"\t\t\t *\t"<<" ☆"<<" 1 创建景区景点分布图 ☆ *"<<endl;cout<<"\t\t\t * *"<<endl;cout<<"\t\t\t *\t"<<" ☆"<<" 2 输出景区景点分布图 ☆ *"<<endl;cout<<"\t\t\t * *"<<endl;cout<<"\t\t\t *\t"<<" ☆"<<" 3 输出导游路线 ☆ *"<<endl;cout<<"\t\t\t * *"<<endl;cout<<"\t\t\t *\t"<<" ☆"<<" 4 输出最佳导游路线 ☆ *"<<endl;cout<<"\t\t\t * *"<<endl;cout<<"\t\t\t *\t"<<" ☆"<<" 5 输出最短路径 ☆ *"<<endl;cout<<"\t\t\t * *"<<endl;cout<<"\t\t\t *\t"<<" ☆"<<" 6 输出道路修建规划图 ☆ *"<<endl;cout<<"\t\t\t * *"<<endl;cout<<"\t\t\t *\t"<<" ☆"<<" 7 退出系统 ☆ *"<<endl;cout<<"\t\t\t * *"<<endl;cout<<"\t\t\t * *"<<endl;cout<<"\t\t\t *********************************************"<<endl;cout<<"功能选择 >> : ";}
void DisplayMenu(int n ,int e )
{TorNode Gr[MAX][MAX] ;MatGraph Map ,TMP ,TorMap;int TourMap[MAX][MAX];AdjGraph *G ;// 邻接表Node Place[MAX] ; // 所有的景点信息char start[MAX] ,end[MAX] ; // 起点和终点BSTNode *bt ; // 二叉排序树根节点cout<<endl<<endl;int num ;Read(Place,n,e) ; // 读入数据PageInfor() ; // 显示页面信息while(cin >> num && num!=7){if(num == 1 ){CreadMat(Map,n,e) ;cout<<"地图创建成功 "<<endl;}else if(num == 2 ){// 显示景点图//Display(Place,n) ;cout<<"☆所有景点信息☆ \n";cout<<"景点名字\t 编号\n" ;for(int i = 1 ; i <=n ; i++){cout<<Place[i].PlaceName<< " : "<<Place[i].number <<" : "<<Place[i].PlaceNum<<endl;}cout<<"景区地图 "<<endl ;for(int i = 1 ; i<= n ; i++){cout<<" "<<i ;}cout<<endl;int k = 1 ;for(int i = 1 ; i <=n ; i++){cout<<k++ <<" ";for(int j = 1 ; j<=n ; j++){if(Map.map[i][j] == inf ){cout<<"∞"<<" " ;}else{printf("%d ",Map.map[i][j]);}}cout<<endl ;}cout<<endl ;}else if(num == 3 ){// 输出所有的旅游路线 ;bt = CreatBST(Place,n); // 创建二叉排序树cout<<"所有景点如下 : "<<endl ;InOrder(bt) ;// 中序遍历二叉树cout<<endl;MAtToList(Map ,G) ; // 转化成邻接表//DispAdj(G) ;//cout<<"dfs "<<endl ;int v = 2 ;printf("所有的导游路线 : \n" ) ;cout<<endl ;int num ;for(int i = 1 ; i<=n; i++){cout<< "方案 "<<i<<" : \n " ;memset(vis,0,sizeof(vis)) ;memset(MapVex,0,sizeof(MapVex) ) ;DFS(G,i,Place,bt) ;count1 = 0 ;cout<<endl<<endl ;for(int j = 1 ; j<=n ; j++){int u = MapVex[j]->infor.number ;TourMap[i][j] = u ;}}}else if (num == 4 ){TorMap.e = e ;TorMap.n = n ;cout<<endl;int StrageWeight[MAX][MAX] ;for(int i = 1 ;i <=n ;i++){for(int j = 1 ;j <=n ;j++){Gr[i][j].u = TourMap[i][j] ;// 起点,Gr[i][j].v = TourMap[i][j+1] ;Gr[i][j].weight = Map.map[TourMap[i][j]][TourMap[i][j+1]] ;//StrageWeight[i][j] = Map.map[TourMap[i][j]][TourMap[i][j+1]] ;}}// 见图MatGraph GT[20] ; // 导游路线图for(int i = 1 ; i<=n ;i++)CreatMatGragh(GT[i],n,e,i,Gr) ;int number ;int edgenum[MAX ] ;int ed = 0 ;for(int k = 1 ; k <=n ;k++){for(int i = 1 ; i <= n ;i++){for(int j = 1 ; j<=n ;j++){if(GT[k].map[i][j]!=inf){edgenum[k]++ ;}}}}for(int i = 1 ; i<=n ; i ++){if(edgenum[i] == n-1){number = i ; // 找到回路图 ;break ;}}cout<<" 最佳导游路线 "<<endl ;for(int i = 1 ;i <=n ; i++){// 二叉搜索树,依次输出景点BSTNode *r = SearchBST(bt,TourMap[number][i]); // 查找最佳路线图cout<<r->infor.PlaceName ;if(i!=n)cout<<" -> ";}cout<<endl ;}else if (num == 5 ){bt = CreatBST(Place,n);BSTNode *pfind1 ,*pfind2 ;cout<<endl;Display(Place,n) ;cout<<endl;printf("输入起点景点 \n");cin >> start ;printf("输入终点景点 \n") ;cin >>end ;int Find_Start_Num = Find(start,Place,Map.n) ;int Find_End_Num = Find(end,Place,Map.n) ;pfind1 = SearchBST(bt,Find_Start_Num) ;//顶点pfind2 = SearchBST(bt,Find_End_Num) ; // 终点if(!pfind1 && !pfind2)exit(ERROR) ;elsecout<<pfind1->infor.PlaceName << " - > " <<pfind2->infor.PlaceName <<endl;if(Find_Start_Num != -1 && Find_End_Num != -1){Dijkstra(Find_Start_Num,Map,bt,Find_End_Num) ;}else{printf("输入错误 \n");exit(-1) ;}}else if (num == 6 ){bt = CreatBST(Place,n);Prim(Map ,1,bt );}else if (num == 7 ){ // 终止程序cout<<"退出系统成功 "<<endl ;exit(0) ;}system("pause") ;PageInfor() ;}return ;
}
int main()
{int n = 13 ;int e = 14 ;DisplayMenu(n,e ) ;return 0 ;}
数据结构 -- 景区旅游信息管理系统相关推荐
- C++综合案例练习--景区旅游信息管理系统
1 问题描述 如今生活水平提高,大家都喜欢在假期中到一个旅游景点参观,在旅游景区中经常听到游客打听从一个景点到另一个景点的最短路径和最短距离,这类不喜欢按照导游图来游览的游客常常需要一个景区管理系统来 ...
- 旅游景区管理信息系统 c语言,[源码和文档分享]基于C++的景区旅游信息管理系统...
1 问题描述 如今生活水平提高,大家都喜欢在假期中到一个旅游景点参观,在旅游景区中经常听到游客打听从一个景点到另一个景点的最短路径和最短距离,这类不喜欢按照导游图来游览的游客常常需要一个景区管理系统来 ...
- 旅游景点信息管理系统C语言,[源码和文档分享]基于C++的景区旅游信息管理系统...
1 问题描述 如今生活水平提高,大家都喜欢在假期中到一个旅游景点参观,在旅游景区中经常听到游客打听从一个景点到另一个景点的最短路径和最短距离,这类不喜欢按照导游图来游览的游客常常需要一个景区管理系统来 ...
- 基于springboot的景区旅游信息管理系统(源代码+数据库)
基于springboot的景区旅游信息管理系统(源代码+数据库) 一.系统介绍 本项目分为管理员与普通用户两种角色 用户登录 前台功能:旅游路线.旅游景点.旅游酒店.旅游车票.旅游保险.旅游策略 管理 ...
- 基于SpringBoot旅游信息管理系统网站
精美的旅游信息管理系统网站 可以在线预订酒店和景点 部分功能登录后才可以使用 设置的端口号是80端口 启动后访问的网址:http://localhost/travel/ 有会员中心和管理员后台 会员可 ...
- 计算机毕业设计ssm基于网络的景区旅游服务管理系统q57ng系统+程序+源码+lw+远程部署
计算机毕业设计ssm基于网络的景区旅游服务管理系统q57ng系统+程序+源码+lw+远程部署 计算机毕业设计ssm基于网络的景区旅游服务管理系统q57ng系统+程序+源码+lw+远程部署 本源码技术栈 ...
- 个人信息管理系统代码_Thymeleaf+SpringBoot+Mybatis实现的易游网旅游信息管理系统...
项目简介 项目源码:麻烦转发后关注@JAVA梦想口服液私信回复[源码]即可获取! 本系统是基于Thymeleaf+SpringBoot+Mybatis.是非常标准的SSM三大框架(SpringBoot ...
- 【附源码】计算机毕业设计SSM宁夏旅游信息管理系统
项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...
- 【附源码】Python计算机毕业设计宁夏旅游信息管理系统
项目运行 环境配置: Pychram社区版+ python3.7.7 + Mysql5.7 + HBuilderX+list pip+Navicat11+Django+nodejs. 项目技术: dj ...
- [附源码]java毕业设计基于的旅游信息管理系统
项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...
最新文章
- python正则表达式(三)
- Dom4j和Xpath(转)
- 6、处理大数据对象(CLOB 数据小说+BLOG 数据图片,电影,音乐)
- 推荐一个非常好用的Chrome扩展应用,用于美化Json字符串 1
- DEV ImageComboxEdit 使用
- android studio修改配置文件夹(.android .gradle .AndroidStudio)位置
- .NET 生态系统的蜕变之 .NET 6
- 为什么 Linux 上的 Asp.NET 5 需要 Kestrel ?
- 39策略模式(Strategy Pattern)
- python 使用 asyncio 包处理并发
- Java学习作业(14.4.21)
- 关于JQuery全选/反选第二次失效的问题
- java txt 分段读取_Java 读取TXT文件的多种方式
- 【ARC112F】Die Siedler(根号分治)(bfs)
- markdown 目录一键生成和转为 word 格式
- 什么是用户标签体系?
- 嵌入式计算机系统简述,嵌入式系统简述
- CAD二次开发:用C#在AutoCAD中插入栅格图像
- STM32普中F103抢答器与抢答器的延时控制
- centos php mcrypt,CentOS下安装Php mcrypt扩展方法
热门文章
- vue-aliplayer 阿里云播放器适配 vue [新]
- [渝粤教育] 西南石油大学 岩体力学 参考 资料
- 计算机基础知识题二,计算机基础知识题库(五)
- vue json对象转数组_如何使用Vue.js渲染JSON中定义的动态组件
- unity 获取屏幕角坐标_Unity3D世界坐标与屏幕坐标
- Oracle cmd sqlplus 命令
- mysql中的cube和rollup_【hive】cube和rollup函数
- word自动生成目录和调整页码字体的方法
- VC6的fatal error C1010解决办法
- 树莓派-电视盒子-投影