数据结构课程设计——公交线路图,包含源代码和注释,任务和报告文档,手绘图,以及一个演示视频,视频里的编译环境是codeblocks

57 阅读3分钟

数据结构课程设计——公交线路图,包含源代码和注释,任务和报告文档,手绘图,以及一个演示视频,视频里的编译环境是codeblocks 1、数据格式

用了四个txt文件:

第一个:BUSES.txt

 

第一列为公交线路的名称,第二列为起点,第三列为终点。

比如第一行代表

一路上行公交从余店路开往中百超市

第二个:

STATIONS.txt

 

记录如图的站点信息。

第三个:

ROUTES.txt

线路编号 站点编号 站点编号 距离

00001. 01 500
意思是一路上行,从余店路开往中山公园,距离为500
第四个:
MAPNUM.txt

 

分别记录 BUSES,STATIONS, ROUTES的大小
2、数据结构(读文件创建图)
通过函数load_data()把文件里的数据读到全局变量数组中
int load_data()
{
FILE* f1;
FILE* f2;
FILE* f3;
FILE* f4;
f1 =fopen("D:\MyWorkSpace\c\公交线路图\ROUTES.txt","r");
f2 =fopen("D:\MyWorkSpace\c\公交线路图\BUSES.txt","r");
f3 =fopen("D:\MyWorkSpace\c\公交线路图\STATIONS.txt","r");
f4 =fopen("D:\MyWorkSpace\c\公交线路图\MAPNUM.txt","r");
if(f1==NULL)
{
printf("load ROUTES.txt errer!\n");
exit(0);
}
else if(f2==NULL)
{
printf("load BUSES.txt errer!\n");
exit(0);
}
else if(f3==NULL)
{
printf("load STATIONS.txt errer!\n");
exit(0);
}
else if(f4==NULL)
{
printf("load MAPNUM.txt errer!\n");
exit(0);
}
else
{
fscanf(f4,"%d%d%d",&BUS_NUM,&STATION_NUM,&ROUTE_NUM);
fclose(f4);
ROUTES= malloc(sizeof(int)ROUTE_NUM * 4);
BUSES= malloc(sizeof(char
)BUS_NUM 3);
STATIONS= (char**)malloc(sizeof(char*)STATION_NUM);
int i;
for(i=0;i<ROUTE_NUM;i++)
{
fscanf(f1,"%d%d%d%d",&ROUTES[i][0],&ROUTES[i][1],&ROUTES[i][2],&ROUTES[i][3]);
}
for(i=0;i<BUS_NUM;i++)
{
BUSES[i][0]= (char
)malloc(20sizeof(char));
BUSES[i][1]= (char
)malloc(20sizeof(char));
BUSES[i][2]= (char
)malloc(20sizeof(char));
fscanf(f2,"%s%s%s",BUSES[i][0],BUSES[i][1],BUSES[i][2]);
}
for(i=0;i<STATION_NUM;i++)
{
STATIONS[i]= (char
)malloc(20sizeof(char));
fscanf(f3,"%s",STATIONS[i]);
}
}
fclose(f1);
fclose(f2);
fclose(f3);
return 0;
}
采用邻接表储存公交线路图:
通过void LoadMapDate()函数把数组的数据载入全局变量g_sMap中。
typedef struct Bus
{
char
name; //公交线路名
int start; //起点
int end; //终点
int* stations; //公交线路站点索引数组
int station_num;//站点个数
}Bus;
//2、定义结构体STATION代表一个站点
typedef struct Stati

3、查询公交线路和站点信息
(1) 查询公交线路
通过QueryBus函数查询
int QueryBus(char* pBus,char** stations)
{
int sum=2; //记录站点个数,起点和终点没算
//1、查找公交
int flagBus=FindBus(pBus); //找到公交线路的索引
//2、找到公交及信息
char* nStart=BUSES[flagBus][1];
char* nEnd=BUSES[flagBus][2];
//3、输出起始站点
printf("[%s线路]\t从[%s]开往[%s]\n",pBus,nStart,nEnd);
//4、输出各站点
int flagStart = FindStation(nStart); //找到起点的索引,从而找到后面路线
int flagEnd = FindStation(nEnd);
Station* pStStation = &g_sMap.stations[flagStart];
Route* pStRoute = pStStation->routes;
while(pStRoute->bus!=flagBus) //找到该公交线路的第一条路线
{
pStRoute=pStRoute->next;
}
printf("%s->",nStart); //输出起始站点
while(pStRoute->station!=flagEnd) //如果路线不是最后一条路线
{
printf("%s->",*(stations+(pStRoute->station)));
sum++;
pStStation = &g_sMap.stations[pStRoute->station]; //换到下一个路线的站点
pStRoute = pStStation->routes; //下一个站点的第一条路线,不是该公交线路的第一条路线
while(pStRoute->bus!=flagBus)
{
pStRoute=pStRoute->next;
}
}
printf("%s\n",nEnd);
return sum;
}
运行结果为:

 

00001. 查询站点信息

函数代码如下:

//创建QueryStation函数,实现查询站点信息,输出该站点所经线路信息

int QueryStation(char* pStation,char** buses)