校园导游系统界面超级棒.docx
《校园导游系统界面超级棒.docx》由会员分享,可在线阅读,更多相关《校园导游系统界面超级棒.docx(18页珍藏版)》请在冰点文库上搜索。
校园导游系统界面超级棒
一、课程设计的目的
本实习突出了数据结构加操作的程序设计观点,希望达到熟悉各种存储机构结构的特性,以及如何应用树和图机构解决具体问题的目的。
二、课程设计内容
设计目的:
了解数据结构,熟悉图的应用,并利用迪杰斯特拉算法求得2点之间的最短路径。
设计技术参数:
(1)设计你的学校的校园平面图,所含景点不小于10个。
以图中的顶点表示学校的各个景点,存放景点名称,代号,简介等信息;以边表示路径,存放路径,存放路径的长度等相关信息。
(2)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的最短的简单路径。
(3)为来访客人提供图中任意景点的相关信息的查询。
/*********************************************************
*设计题目:
校园导游咨询系统
*设计人:
中南林业科技大学杨海波
*制导老师:
杨卫民,陈超云
*时间:
2005年7月20日
*********************************************************/
/*程序中用到的库函数所在头文件应用#include命令包含进来*/
#include"stdio.h"
#include"math.h"
#include"graphics.h"
#include"conio.h"/*gotoxy*/
#include"bios.h"
/**********************************************************/
/*定义符号常量*/
#defineNULL0
#definenum20
#definemaxdist10000
/**********************************************************/
/*定义数据结构*/
typedefstruct{
chardata[num];
doubleedges[num][num];
}graph;
/**********************************************************/
/*定义全局变量*/
intx[num],y[num];
chara[num],ab[num][num];
/**********************************************************/
/*自定义函数原型说明*/
voidshowmsg(charmsg[]);/*逐步显示文字*/
voiddijkstra(graphg,intn,inti,intd[num],intp[num]);
voidopdijk(intv1,intv0,intn,intd[],intp[]);
voidinfo_welcome();
/**********************************************************/
/*功能:
逐步显示文字*/
voidshowmsg(charmsg[]){
inti=0;
while(msg[i]!
=’\0’){
printf("%c",msg[i]);
i++;
delay(30000);
}
}
/**********************************************************/
/*功能:
用迪杰思特拉算法求图的最短路径*/
voiddijkstra(graphg,intn,inti,intd[num],intp[num]){
ints[num];
doublemindist,dist;
intj,k,u,w;
for(j=0;j{d[j]=g.edges[i][j];
s[j]=0;
if((d[j]=0))
p[j]=i;/*可到达的路径*/
else
p[j]=-1;/*设空路径*/
}
s[i]=1;
for(j=0;j{mindist=maxdist;
u=i;
for(k=0;kif((s[k]==0)&&(d[k]{u=k;
mindist=d[k];
}
s[u]=1;
for(k=0;k{if(s[k]==0)
{dist=d[u]+g.edges[u][k];
if(dist{d[k]=dist;
p[k]=u;
}
}
}
}
}
/**********************************************************/
/*功能:
打印出图的最短路径*/
voidopdijk(intv1,intv0,intn,intd[],intp[]){
inti,i_1,j,k,pre;
intpoint_x,point_y;
for(i=0;iif(i!
=v0&&i==v1){
gotoxy(5,24);
printf("%c",a[i]);
point_x=x[i];
point_y=y[i];
pre=p[i];
while(pre!
=-1){
setcolor(RED);
/**********************************/
/**闪烁终点的颜色*/
for(i_1=0;i_1<10;i_1++)
{
setcolor(GREEN);
circle(x[pre]*30,y[pre]*30,3);
delay(90000);
setcolor(RED);
circle(x[pre]*30,y[pre]*30,3);
delay(90000);
setcolor(GREEN);
line(point_x*30,point_y*30,x[pre]*30,y[pre]*30);
delay(90000);
setcolor(RED);
line(point_x*30,point_y*30,x[pre]*30,y[pre]*30);
delay(90000);
}
/**********************************/
point_x=x[pre];
point_y=y[pre];
printf("-->%c",a[pre]);/****************************/
pre=p[pre];
}
if(d[i]==maxdist)
/*line(point_x*30,point_y*30,x[v0]*30,y[v0]*30);*/
printf("-->%c",a[v0]);
/*printf("\tshortestway:
%5f",d[i]);*/
}
}
/******************************************************/
/*功能:
打印出程序的帮助和欢迎信息*/
voidinfo_welcome(){
inti,j;
char*Msg[]=
{
"WelcometoCSFU!
",
"",
"ADDRESS:
CentralSouth",
"ForestryUniversity",
"Changsha,Hunan,China",
"",
"TEL:
+86-731-5623172",
"",
"",
"[HELP]",
"FindOUTTHESHORTEST",
"PATH:
Forf",
"",
"EXIT:
Qorq",
NULL,
};
/*显示操作键说明*/
i=0;
textcolor(WHITE);
delay(90000);
while(Msg[i]!
=NULL)
{
gotoxy(56,3+i);
printf(Msg[i]);
i++;
}
printf("\n\n\n");
textcolor(GREEN);
gotoxy(5,18);
i=0;
showmsg("Welcometouseschool_wizard.");
gotoxy(5,20);
showmsg("Youcanchoose’F’or’Q’:
");
}
/***************************************************/
/*功能:
*/
main(){
graphg;
inti,j,k,n,m,i_1,i_2,i_3;
intdriver,mode;
introad_x,road_y;
charnu,b,i_str,m_str;
intd[num],p[num],sd[num][num],sp[num][num];
FILE*map_f,*road_f;
clrscr();
/*初始化变量g.edges[][]*/
for(i_1=0;i_1for(i_2=0;i_2g.edges[i_1][i_2]=maxdist;
}
}
/*********************************************************/
/*读取文件map.dat(园地图的景点)&&描绘校园地图的路径*/
if((map_f=fopen("map.dat","r"))==0){
printf("Cannotopenthefileofmap.dat.\n");
exit
(1);
}
fscanf(map_f,"%d",&n);
for(i=0;ifscanf(map_f,"%d",&nu);
fscanf(map_f,"%d",&nu);
fscanf(map_f,"%d",&nu);
fscanf(map_f,"%c",&a[i]);
fscanf(map_f,"%d",&x[i]);
fscanf(map_f,"%d",&y[i]);
}
fclose(map_f);
/*********************************************************/
/*在屏幕上描绘校园地图的景点*/
loop:
driver=VGA,mode=VGAHI;
initgraph(&driver,&mode,"");
setbkcolor(BLUE);
for(i=0;isetfillstyle(1,62);
circle(x[i]*30,y[i]*30,3);
floodfill(x[i]*30,y[i]*30,WHITE);
gotoxy(x[i]*4+2,y[i]*2);
printf("%c",a[i]);
/*printf("a[%d]=%c\nx[%d]=%d\ty[%d]=%d\n",i,a[i],i,x[i],i,y[i]);/*调试校园地图的景点*/
}
setcolor(BROWN);
rectangle(3,3,n*30+100,(n-2)*30);
rectangle(n*30+100,3,getmaxx()-3,(n-2)*30);
/*printf("n=%d\n",n);
/*********************************************************/
/*调用其他函数*/
info_welcome();
/***********************************************************/
/*读取文件road.dat(园地图的路径)*/
for(i=0;ifor(j=0;jg.edges[i][j]=maxdist;
if((road_f=fopen("road.dat","r"))==0){
printf("Cannotopenthefileofroad.dat.\n");
exit
(1);
}
fscanf(road_f,"%c",&b);
for(i=0;i/*printf("\n%c",b);*/
if(b==’@’){
fscanf(road_f,"%c",&b);
/*printf("\n%c",b);*/
ab[i][0]=b;
for(i_1=0;i_1if(b==a[i_1]){
/*road_x=x[i_1];
road_y=y[i_1];*/
break;
/*printf("\n1%c,%d,%d",a[i_1],road_x,road_y);*/
}
if(b==’@’){
break;
}
}
for(i_2=0;i_2fscanf(road_f,"%c",&b);
for(i_3=0;i_3if(b==a[i_3]){
ab[i][i_2+1]=b;
setcolor(WHITE);
line(x[i_1]*30,y[i_1]*30,x[i_3]*30,y[i_3]*30);
/**********************************************************/
g.edges[i_1][i_3]=hypot((double)(x[i_1]-x[i_3]),(double)(y[i_1]-y[i_3]));
/**********************************************************/
/*printf("\n2%d,%d%c,%d,%d",road_x,road_y,a[i_3],x[i_3],y[i_3]);*/
}
if(b==’@’){
break;
}
}
if(b==’@’){
break;
}
}
}else{
for(i_2=0;i_2if(b==’@’){
break;
}
}
}
}
fclose(road_f);
/*********************************************************/
/*clrscr();*/
/*
for(i_1=0;i_1printf("\n");
for(i_2=0;i_2printf("%3f",g.edges[i_1][i_2]);
}
}
*/
/*
for(i_1=0;i_1printf("\t");
printf("%d,%d",x[i_1],y[i_1]);
}
*/
/*********************************************************/
/*循环等待用户输入*/
do{
switch(toupper(getchar())){
case’Q’:
exit(0);
case’F’:
{
getchar();
gotoxy(100,n);
/*
for(i_1=0;i_1printf("a[%d]=%c\n",i_1,a[i_1]);
}
*/
gotoxy(5,21);
showmsg("WhereareyouNOW?
:
");
/*scanf("%d",&m);*/
scanf("%c",&m_str);
getchar();
for(i_1=0;i_1if(toupper(m_str)==a[i_1]){
m=i_1;
}
}
/**********************************/
/**闪烁源点的颜色*/
for(i_1=0;i_1<10;i_1++)
{
setcolor(GREEN);
circle(x[m]*30,y[m]*30,3);
delay(90000);
setcolor(RED);
circle(x[m]*30,y[m]*30,3);
delay(90000);
}
/*********************************/
gotoxy(5,22);
showmsg("WhereareyouGO?
:
");
/*scanf("%d",&i);*/
scanf("%c",&i_str);
getchar();
for(i_1=0;i_1if(toupper(i_str)==a[i_1]){
i=i_1;
}
}
/**********************************/
/**闪烁终点的颜色*/
for(i_1=0;i_1<10;i_1++)
{
setcolor(GREEN);
circle(x[i]*30,y[i]*30,3);
delay(90000);
setcolor(RED);
circle(x[i]*30,y[i]*30,3);
delay(90000);
}
/*********************************/
gotoxy(5,23);
printf("TheshortestpathFROM%cTO%cis:
",a[i],a[m]);
dijkstra(g,n,i,d,p);
opdijk(m,i,n,d,p);
printf("\n\n\n");
system("pause");
clrscr();
gotoloop;
break;
}
}
;
}while
(1);
}
附件:
文件名:
map.dat(用TAB键隔开)
11
A106
B84
C51
D53
E55
F56
G57
H46
I24
J14
K18
map.dat文件数据
map.dat文件的解释
11
A106
B84
C51
D53
E55
F56
G57
H46
I24
J14
K18
总共有多少个景点
AX坐标Y坐标
BX坐标Y坐标
CX坐标Y坐标
DX坐标Y坐标
EX坐标Y坐标
FX坐标Y坐标
GX坐标Y坐标
HX坐标Y坐标
IX坐标Y坐标
JX坐标Y坐标
KX坐标Y坐标
文件名:
road.dat
@AEBFG
@BCDEA
@CDB
@DCEB
@EDIHFAB
@FEHGA
@GFHKA
@HIKGFE
@IJHDC
@JKI
@KJGH
本文来自CSDN博客,转载请标明出处: