⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.cpp

📁 数据结构课程设计 C++原带么 C++课程设计
💻 CPP
字号:
/********************************************************************/

#define DINGYILG      10000       
#define MAX_LENGH_NUM      40
#define MAX 40
#include<stdlib.h>
#include<stdio.h>
#include<malloc.h>
#include<string.h>

/********************************************************************/

typedef struct JingDianCD                                                   /*景点长度信息函数的定义*/
{
	int lengh;    
}JingDianCD,LenghCD[MAX_LENGH_NUM][MAX_LENGH_NUM];

typedef struct                                                              /*景点名字和简介函数的定义*/
{
	char name[30];
	int num;
	char information[100];
}infotype;

typedef struct                                                              
{
	infotype xinxiNI[MAX_LENGH_NUM];
	LenghCD xinxiLG;
	int NINumber,LGNumber;
}JingDian;
JingDian b;

/********************************************************************/

void XuanZe(void);                                                          /*函数的声明*/
JingDian XinXi(void);
void Menu(void);
void LiuLanQJ(JingDian *X);
void ChaKanLX(JingDian *X);
void ChaKanJD(JingDian *X);

/********************************************************************/

void XuanZe(void)                                                           /*选择函数的定义*/
{
	int i;
	b=XinXi();
	Menu();
	scanf("%d",&i);
	while(i!=4)                                                             /*while循环语句*/
	{                                                                       /*当不等于4时,继续循环,当大于4小于1时选择错误*/
		switch(i)
		{
		case 1:system("cls");LiuLanQJ(&b);Menu();break;
		case 2:system("cls");ChaKanLX(&b);Menu();break;
		case 3:system("cls");ChaKanJD(&b);Menu();break;
		case 4:exit(1);break;
		default:break;
		}
		if(i<=0||i>4)
		{
			printf("选择错误,请重新选择!\n");
		}
		scanf("%d",&i);
	}
}

/********************************************************************/

JingDian XinXi(void)                                                      /*景点信息的定义*/
{
	JingDian X;
	int i,j;
	X.NINumber=10;
	X.LGNumber=14;
	for(i=0;i<X.NINumber;i++)
		X.xinxiNI[i].num=i;
	strcpy(X.xinxiNI[0].name,"华德大饭店");
    strcpy(X.xinxiNI[0].information,"1、2、3、4食堂");
	strcpy(X.xinxiNI[1].name,"实训楼");
	strcpy(X.xinxiNI[1].information,"计算机系学生上实验课的教学楼,各种设施齐全");
	strcpy(X.xinxiNI[2].name,"1、2号学生宿舍楼");
	strcpy(X.xinxiNI[2].information,"全校女生宿舍楼");
    strcpy(X.xinxiNI[3].name,"致远峰");
	strcpy(X.xinxiNI[3].information,"人造假山和人工湖,致远山水甲天下!");
	strcpy(X.xinxiNI[4].name,"图书馆");
	strcpy(X.xinxiNI[4].information,"藏书万册,设施良好,3楼为自习室,环境幽雅");
	strcpy(X.xinxiNI[5].name,"华德大运动场");
	strcpy(X.xinxiNI[5].information,"椭圆形黄土跑道,致使开运动会时环境极其恶劣!");
	strcpy(X.xinxiNI[6].name,"思源大广场");
	strcpy(X.xinxiNI[6].information,"绿树成荫,适宜休息和读书");
	strcpy(X.xinxiNI[7].name,"主教学楼");
	strcpy(X.xinxiNI[7].information,"学院最大的教学楼,共5层,环形建筑,适宜学习");
	strcpy(X.xinxiNI[8].name,"汽配楼");
	strcpy(X.xinxiNI[8].information,"汽车系学生上课的主教学楼,有浓烈汽油味");
	strcpy(X.xinxiNI[9].name,"华德正门");
	strcpy(X.xinxiNI[9].information,"耗资巨大的门面,比较具有观赏性!");
	for(i=0;i<X.NINumber;i++)                                                /*景点长度的定义*/
		for(j=0;j<X.NINumber;j++)
			X.xinxiLG[i][j].lengh=DINGYILG;
		X.xinxiLG[0][1].lengh=400;
		X.xinxiLG[0][2].lengh=20;
		X.xinxiLG[0][6].lengh=40;
		X.xinxiLG[1][7].lengh=100;
		X.xinxiLG[2][3].lengh=120;
		X.xinxiLG[3][6].lengh=100;
		X.xinxiLG[3][4].lengh=400;
		X.xinxiLG[4][5].lengh=100;
		X.xinxiLG[4][9].lengh=250;
		X.xinxiLG[5][9].lengh=300;
		X.xinxiLG[6][7].lengh=60;
		X.xinxiLG[6][9].lengh=200;
		X.xinxiLG[7][8].lengh=100;
		X.xinxiLG[8][9].lengh=200;
		for(i=0;i<X.NINumber;i++)
			for(j=0;j<X.NINumber;j++)
				X.xinxiLG[j][i].lengh=X.xinxiLG[i][j].lengh;
			return X;
}//XinXi end

/********************************************************************/                /*菜单函数的定义*/

void Menu()
{ 
	printf("\n                                      哈工大华德学院导游图\n");
	printf("                           \n");
	printf("                              1.浏览校园全景                       \n");
	printf("                              2.查看所有游览路线                   \n");
	printf("                              3.查看景点信息                       \n");
	printf("                              4.退出系统                           \n");
	printf("                           \n");
	printf("请输入所需操作代号:");
}

/********************************************************************/

void LiuLanQJ(JingDian *X)                                                  /*浏览校园全景函数的定义*/
{
	int v;
	printf("\n");
	printf("编号景点名称        简介                                                      \n");
	for(v=0;v<X->NINumber;v++)                                              /*for循环寻找适合景点*/
		printf("%-4d%-16s%-56s\n",X->xinxiNI[v].num,X->xinxiNI[v].name,X->xinxiNI[v].information);
	printf("\n");
}

/********************************************************************/

void ChaKanLX(JingDian * X)                                                 /*查看所有浏览路线函数的定义*/
{
	int v,w,i,min,t=0,x,flag=1,v0;
    int final[20], D[20], p[20][20];
	while(flag)
	{
		printf("请输入一个起始景点编号:");
		scanf("%d",&v0);
		if(v0<0||v0>X->NINumber)                                            /*if语句判断输入是否正确*/
		{
			printf("景点编号不存在!请重新输入景点编号:");
			scanf("%d",&v0);
		}
		if(v0>=0&&v0<X->NINumber)
			flag=0;
	}
	for(v=0;v<X->NINumber;v++)                                             /*for循环语句依次输出各景点信息,名称和简介*/
	{
		final[v]=0;
		D[v]=X->xinxiLG[v0][v].lengh;
		for(w=0;w<X->NINumber;w++)
			p[v][w]=0;
		if(D[v]<DINGYILG)
		{
			p[v][v0]=1;p[v][v]=1;
		}
	}
	D[v0]=0;final[v0]=1;
	for(i=1;i<X->NINumber;i++)                                            /*for循环语句依次累加各景点的长度并且输出*/
	{
		min=DINGYILG;
		for(w=0;w<X->NINumber;w++)
			if(!final[w])
				if(D[w]<min){v=w;min=D[w];}
				final[v]=1;
				for(w=0;w<X->NINumber;w++)
					if(!final[w]&&(min+X->xinxiLG[v][w].lengh<D[w]))
					{
						D[w]=min+X->xinxiLG[v][w].lengh;
						for(x=0;x<X->NINumber;x++) 
							p[w][x]=p[v][x];
						p[w][w]=1;
					}
	}
	for(v=0;v<X->NINumber;v++)
	{
		if(v0!=v) printf("%s",X->xinxiNI[v0].name);
		for(w=0;w<X->NINumber;w++)
		{
			if(p[v][w]&&w!=v0)  printf("-->%s",X->xinxiNI[w].name);
			t++;
		}
		if(t>X->NINumber-1&&v0!=v)printf("       总路线长%dm\n\n",D[v]);
	}
}//ChaKanLX  end

/********************************************************************/

void ChaKanJD(JingDian *X)                                                    /*查看景点信息函数的定义*/
{
	int k,flag=1;
	while(flag)
	{
		printf("请输入要查询的景点编号:");
		scanf("%d",&k);
		if(k<0||k>X->NINumber)
		{
			printf("景点编号不存在!请重新输入景点编号:");
			scanf("%d",&k);
		}
		if(k>=0&&k<X->NINumber)
			flag=0;
	}
	printf("\n");                                                             /*输出景点信息*/
	printf("编号景点名称        简介                                                    \n");
	printf("%-4d%-16s%-56s\n",X->xinxiNI[k].num,X->xinxiNI[k].name,X->xinxiNI[k].information);
	printf("\n");
}//ChaKanJD end

/********************************************************************/
void main(void)                                                               /*定义主函数*/
{
	system("color 1f");
	system("mode con: cols=100 lines=40");
	XuanZe();
}
/********************************************************************/



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -