校园导游

#include<iostream>//数据结构课程设计 11、校园导游咨询(***)
#include<string>
#include<fstream>
#include<iomanip>
using namespace std;
#include<windows.h>
#define WHITE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
//↑设置文字显示颜色为白色
#define YELLOW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
//↑设置文字显示颜色为黄色
#define RED SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
//↑设置文字显示颜色为红色
#define GREEN SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_INTENSITY);
//↑设置文字显示颜色为绿色
#define BLUE SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
//↑设置文字显示颜色为蓝色

#define MAX 15//最大景点数量
typedef struct{//结构图用于储存景点信息
 int num;//景点代号
 string name;//名称
 string jianjie;//简介
}node;
typedef struct{
 node dingdian[MAX];//储存顶点的数组
 int arcs[MAX][MAX];//邻接矩阵,元素值储存权值
 int dnum,bnum;//顶点数量、边数量
}Graph;//无向网

void menu();//显示主菜单
void initGraph(Graph &G);//初始化网
void show(Graph &G);//显示所有景点信息
int getSuffix(Graph &G,int num);//传入序号,返回该序号顶点在数组中的下标
void numFind(Graph &G,int num);//根据代号查询景点信息
void nameFind(Graph &G,string name);//根据名称查询景点信息
void DIJ(Graph &G,int m,int n);//迪杰斯特拉算法,输出代号为m、n之间的顶点的最短路径

int main()
{
 WHITE
 int i,j,k,m,n;
 string str;
 fstream fs;
 Graph G;
 initGraph(G);
 fs.open("data.txt",ios::in);//打开文件
 if(!fs)
 {
  cout<<"打开文件失败!data.txt\n";
  return 0;
 }
 i=0;
 while(true)
 {
  fs>>m;
  if(m==-1)//景点信息读取结束
   break;
  G.dingdian[i].num=m;//序号
  fs>>G.dingdian[i].name;//名称
  fs>>G.dingdian[i++].jianjie;//简介
  G.dnum++;//顶点数量计数
 }
 //cout<<G.dnum<<endl;//测试:打印顶点数量
 while(true)
 {
  fs>>i;
  if(!fs)//文件读取结束
   break;
  fs>>j>>k;//边的两个顶点序号、权值
  //cout<<i<<" "<<j<<"--";
  i=getSuffix(G,i);//i为序号i的顶点的数组下标
  j=getSuffix(G,j);
  //cout<<i<<" "<<j<<endl;
  G.bnum++;//边数量计数
  //cout<<G.bnum<<endl;//测试:打印边数量
  G.arcs[i][j]=G.arcs[j][i]=k;//权值存入矩阵,矩阵沿对角线对称,arcs[i][j]=arcs[j][i]均为i、j间边的权值
 }
 /*for(i=0;i<MAX;i++)//测试:打印邻接矩阵
 {
  for(j=0;j<MAX;j++)
   cout<<G.arcs[i][j]<<"  ";
  cout<<endl;
 }*/
 fs.close();
 while(true)
 {
 
  

 


  cin>>i;
  switch(i)
  {
  case 1:show(G);break;
  case 2:
   cout<<"请输入景点代号:";
   cin>>j;
   numFind(G,j);break;
  case 3:
   cout<<"请输入景点名称:";
   cin>>str;
   nameFind(G,str);break;
  case 4:
   cout<<"请分别输入出发地、目的地景点代号(以空格间隔):\n";
   cin>>m>>n;
  default: return 0;
 }
 }
}


void DIJ(Graph &G,int m,int n)//迪杰斯特拉算法,输出代号为m、n之间的顶点的最短路径
{
}

 

 

 

 

 


void numFind(Graph &G,int num)//根据代号查询景点信息
{
 GREEN
 int i;
 cout<<"查找结果:\n";
 for(i=0;i<G.dnum;i++)
 {
  if(G.dingdian[i].num==num)
  {
   cout<<"代号:"<<G.dingdian[i].num<<"  名称:"<<G.dingdian[i].name<<"  简介:"<<G.dingdian[i].jianjie<<endl;
   break;
  }
 }
 if(i==G.dnum)
  cout<<"无符合条件的景点!\n";
 WHITE
}
void nameFind(Graph &G,string name)//根据名称查询景点信息
{
 GREEN
 int i;
 cout<<"查找结果:\n";
 for(i=0;i<G.dnum;i++)
 {
  if(G.dingdian[i].name==name)
  {
   cout<<"代号:"<<G.dingdian[i].num<<"  名称:"<<G.dingdian[i].name<<"  简介:"<<G.dingdian[i].jianjie<<endl;
   break;
  }
 }
 if(i==G.dnum)
  cout<<"无符合条件的景点!\n";
 WHITE
}
void show(Graph &G)//显示所有景点信息
{
 cout.setf(ios::left);//靠左对齐
 RED
 cout<<setw(5)<<"代号"<<setw(20)<<"名称"<<"简介"<<endl;
 GREEN
 for(int i=0;i<G.dnum;i++)
  cout<<setw(5)<<G.dingdian[i].num<<setw(20)<<G.dingdian[i].name<<G.dingdian[i].jianjie<<endl;
 WHITE
}
void initGraph(Graph &G)//初始化网
{
 G.bnum=G.dnum=0;
 int i,j;
 for(i=0;i<MAX;i++)
  for(j=0;j<MAX;j++)
   G.arcs[i][j]=-1;//邻接矩阵初始化为-1,表示i、j之间无边
 /*for(i=0;i<MAX;i++)
  for(j=0;j<MAX;j++)
   cout<<G.arcs[i][j]<<endl;*/
}
int getSuffix(Graph &G,int num)//传入序号,返回该序号顶点在数组中的下标
{
 int i;
 for(i=0;i<G.dnum;i++)
 {
  if(G.dingdian[i].num==num)
   return i;
 }
}
void menu()//显示主菜单
{  RED
 cout<<"╔═════════════主菜单═════════════╗\n";
 cout<<"║请选择操作:                                              ║\n";
 cout<<"║1、显示所有景点信息;                                     ║\n";
 cout<<"║2、输入代号查询景点信息;                                 ║\n";
 cout<<"║3、输入名称查询景点信息;                                 ║\n";
 cout<<"║4、最短路线查询;                                         ║\n";
 cout<<"║输入其它数字可退出系统。                                  ║\n";
 cout<<"╚═════════════════════════════╝\n";
 WHITE
}

posted @ 2013-12-20 10:57  迷雾森林-  阅读(381)  评论(0编辑  收藏  举报