C++实现景区信息管理系统

本文实例为大家分享了C++实现景区信息管理系统的具体代码,供大家参考,具体内容如下

 1.1 建立主程序应用菜单选项

主程序应用菜单选项包含所实现的所有功能,并且对选项采用数字标识进行选择,对其他错误输入可以进行判别,提示输入错误。

1.2 导游线路图的创建级景区分布图的输出

用邻接链表存储景点分布图的信息,(带权无向)图的邻接链表。输出景区景点分布图(邻接矩阵)。图中边的权值∞用32767表示。

1.3  输出导游线路图

景区旅游信息管理系统中制订旅游景点导游线路策略,首先通过遍历景点,给出一个入口景点,建立一个导游线路图,导游线路图用有向图表示。

1.4  输出导游线路图中是否有回路

景区旅游信息管理系统中,创建好导游路线图后,判断该图中是否存在回路。

1.5 查找及排序

l  查找功能: 可以根据用户输入的关键字进行景点的查找,关键字可以在景点名称也可以在景点介绍中。查找成功则返回景点的相关简介,如果查找不成功请给予正确提示。

l  排序功能:按景点欢迎度,景点的岔路数对景点进行排序并打印出来排序顺序。

1.6  输出两个景点之间最短路径和最短距离

求出两个景点间的最短路径和最短距离,并且输出道路修建规划图。 算法采用迪杰斯特拉算法。

1.7   输出道路修建规划图

道路建设首先要保证能连通所有景点,但又要花最小的代价。

1.8  输出车辆的进出信息

1.8.1 具体需求:

停车场是一个可以停放n辆汽车,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次排列,若车场内已停满n辆车,后来的车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应缴纳的费用和它在停车场内停留的时间。

1.8.2  停车场的管理流程如下:

A.当车辆要进入停车场时,检查停车场是否已满,如果未满则车辆进入停车场;如果停车场已满,则车辆进入便道等候。

B.当车辆要求出栈时,先让在它之后进入停车场的车辆退出停车场为它让路,再让该车退出停车场,让路的所有车辆再按其原来进入停车场的次序进入停车场。之后,再检查在便道上是否有车等候,有车则让最先等待的那辆车进入停车场。

1.8.3 车辆出入清单:

每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。

1.9

退出整个程序。

完整代码如下(直接编译可运行):

#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#define MAX 20 
#define MAX2 2 
#define INFINITY 32767 
int arr1[MAX][MAX]; 
 
using namespace std; 
double arr[MAX][MAX]; 
 
class ArcNode { 
 public: 
  int adjvex; 
  ArcNode *nextarc; 
  double weight; 
}; 
 
 
class VNode { 
 public: 
  string data1; 
  string data2; 
  int wel; 
  bool wc; 
  bool rest; 
  ArcNode *firstarc; 
}; 
 
class ALGraph { 
 public: 
  VNode *vertices; 
  int vexnum, arcnum; 
  ArcNode *arcNode; 
}; 
 
class zanlind 
{ 
public: 
 int number; 
 int hour; 
 int minute; 
}; 
 
 
int LocateVex(ALGraph G, string v) { 
 int i; 
 for(i = 0; v != G.vertices[i].data1 && i < G.vexnum; i++) 
  ; 
 if(i >= G.vexnum) 
  return -1; 
 return i; 
} 
 
int LocateW(ALGraph G, int wel) { 
 int i; 
 for(i = 0; wel != G.vertices[i].wel && i < G.vexnum; i++) 
  ; 
 if(i >= G.vexnum) 
  return -1; 
 return i; 
} 
 
void CreateUDN(ALGraph &G) { 
 G.arcNode=new ArcNode[MAX]; 
 G.vertices=new VNode[MAX]; 
  
 fstream file("info.txt"); 
 if(file.fail()) 
 { 
  cout << "error open!" << endl; 
 } 
 int j; 
 ArcNode *s, *t; 
 cout<<"请输入顶点数和边数:"; 
 cin>>G.vexnum>>G.arcnum; 
 int i=0; 
 cout<>G.vertices[i].data1>>G.vertices[i].data2 >> 
  G.vertices[i].wel>> G.vertices[i].rest>>G.vertices[i].wc; 
  G.vertices[i].firstarc = NULL; 
  i++; 
 }  
 cout<>v1>>v2>>weight; 
   
  int i = LocateVex(G, v1); 
  int j = LocateVex(G, v2); 
 
  s = new ArcNode(); 
  t = new ArcNode(); 
 
  s->adjvex = j; 
  s->nextarc = G.vertices[i].firstarc; 
  s->weight=weight; 
  G.vertices[i].firstarc =s; 
 
  t->adjvex = i; 
  t->nextarc = G.vertices[j].firstarc; 
  t->weight=weight; 
  G.vertices[j].firstarc =t; 
 } 
 file1.close(); 
 file.close(); 
 
} 
 
 
void PrintAdjList(ALGraph &G) { 
 cout<<"下面是图的邻接链表输出:" <nextarc) 
   cout<<"--------->"<adjvex; 
  cout<adjvex]=p->weight; 
    p=p->nextarc; 
   } 
 
  } 
 } 
 cout<<"  "; 
 for(int n1=0; n1 *s=new stack(); 
 
bool isOver(ALGraph G,bool a[MAX]) { 
 for(int i=0; istatus; 
  int n=0; 
  int num = -1; 
  int pk; 
  ArcNode *e; 
  cout << G.vertices[0].data1 << "->"; 
  sta[0] =false; 
  status.push(0); 
  int aa, bb; 
  aa = 0; 
 
  while (n < G.vexnum-1){ 
   e = NULL; 
   num = status.top(); 
   e = G.vertices[num].firstarc; 
   while (e){ 
    if (sta[e->adjvex] == false){ 
     e = e->nextarc; 
    } 
    else{ 
     status.push(e->adjvex); 
     cout << G.vertices[e->adjvex].data1<<"->"; 
     aa = e->adjvex; 
     sta[e->adjvex] = false; 
     n++; 
     break; 
    } 
     } 
   if (e == NULL){ 
    pk = status.top(); 
    bb = pk; 
    if (aa != bb){ 
     cout << G.vertices[pk].data1<<"->"; 
    } 
    
    status.pop(); 
   } 
   if (status.top() == 0){ 
    cout << G.vertices[0].data1 << "->"; 
   } 
  } 
  cout << endl; 
} 
 
bool IsEdge(ALGraph G) { 
 string s1, s2; 
 cin>>s1>>s2; 
 int iA=LocateVex(G,s1); 
 int jA=LocateVex(G,s2); 
 
 ArcNode *p=G.vertices[iA].firstarc; 
 while(p) { 
  if(p->adjvex==jA) { 
   return 1; 
  } else { 
   p=p->nextarc; 
  } 
 } 
 return 0; 
 
 
} 
 
int adjlist[MAX]; 
void FindInDegree( ALGraph &g) { 
 int i; 
 ArcNode *p; 
 for (i=0; iadjvex]++; 
   p=p->nextarc; 
  } 
 } 
} 
void JudgeCir(ALGraph G) { 
 FindInDegree(G); 
 int count=0; 
 int Q[MAX]; 
 int front,rear,v; 
 front=rear=-1; 
 for(int i=0; i0 && arr[v][j]<32767) { 
     adjlist[j]--; 
     if(adjlist[j]==1) { 
      Q[++rear]=j; 
      count++; 
     } 
    } 
   } 
  } else { 
   adjlist[v]=-1; 
  } 
 } 
 
 if(counti; j--) { 
   if(tmp < ary[j]) { 
    ary[i] = ary[j]; 
    ary[j] = tmp; 
    tmp = ary[i]; 
   } 
  } 
 } 
 
 for(int j=0; ji; j--) { 
   if(tmp <= ary[j]) { 
    a[i]=j; 
    ary[i] = ary[j]; 
    a[i]=j; 
    ary[j] = tmp; 
    tmp = ary[i]; 
   }  
    
    
  } 
 } 
 
 for(int j=0;j>s1>>s2; 
 if(isInVe(G,s1) && isInVe(G,s2)) 
 { 
  iA=LocateVex(G,s1); 
  jA=LocateVex(G,s2); 
  ShortestPath_DIJ(G,iA, p, D); 
  cout<<"到各顶点的最短路径及长度为:"<-1) 
     cout< parking; 
stack cars; 
queue waits; 
int z[MAX2]; 
bool isInZan(int zan[],int number) 
{ 
 for(int i=0;i>zan.number; 
 cout<tm_hour;//得到当前时间的小时 
 int m = newtime->tm_min;//得到当前时间的分钟 
 zan.hour=h; 
 zan.minute=m; 
  
  
 cout<<"进场时间为:"; 
 if(zan.minute>=1 && zan.minute<10) 
 { 
  cout<>number; 
  if(isInZan(z,number)) 
  { 
   while(parking.top().number!=number) 
   { 
    cars.push(parking.top()); 
    parking.pop(); 
   } 
    
   int num=indexZ(z,parking.top().number); 
   z[num]=0; 
   /* 
   time_t t = time(0); 
    char tmp[64]; 
    strftime(tmp,sizeof(tmp),"%X ",localtime(&t)); 
    */ 
    struct tm *newtime; 
   time_t long_time; 
   time( &long_time ); //Get time as long integer 
   newtime = localtime( &long_time ); 
   int h = newtime->tm_hour;//得到当前时间的小时 
   int m = newtime->tm_min;//得到当前时间的分钟 
    cout<<"车牌号为:"<:"; 
  char choose; 
  cin>>choose; 
  if(choose=='A' || choose=='D' || choose=='E') 
  { 
   switch(choose) 
   { 
    case 'A': 
     goIn(); 
     goto r2; 
    case 'D': 
     goOut(); 
     goto r2; 
    case 'E': 
     break; 
    } 
  } 
  else 
  { 
   cout<<"您的输入有误,请输入  其中的一项。"; 
   goto r2; 
  } 
} 
 
int main() { 
 int i, j; 
 int iAA; 
 ALGraph *G=new ALGraph(); 
 int choose=0; 
 cout<>choose; 
   
  if(choose<=8 && choose>=0) { 
   if(choose>1 && G->vexnum==0 &&choose!=8) { 
    cout<>ch; 
      string sA; 
      switch(ch) 
      { 
       case 0: 
        cout<<"请输入您要查找的有关景点的关键字:" ; 
        cin>>sA; 
        Search(*G,sA); 
        break; 
       case 1: 
        SortWel(*G); 
        break; 
       case 2: 
        SortN(*G); 
        break; 
       case 3: 
        goto r; 
       default : 
        cout<<"您的输入有误,请重新输入:"< 
 

所需要的两个edge.txt和info.txt文件。(很重要、一定要有!!!)

 C++实现景区信息管理系统_第1张图片C++实现景区信息管理系统_第2张图片

更多学习资料请关注专题《管理系统开发》。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

你可能感兴趣的:(C++实现景区信息管理系统)