栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构课程设计大作业——江大公交路线查询系统

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构课程设计大作业——江大公交路线查询系统

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录
  • 代码
  • 总结


前言

参考资料【C++期末大作业】数据结构课设 | 智能公交车查询系统_米莱虾的博客-CSDN博客_c++期末大作业

Dijkstra算法详解(完美图解、趣学算法)_wjyGrit的博客-CSDN博客_dijkstra


正文
#include
#include
#include
#include
#define maxstation 100
#define maxbus 20
#define Inf	65535
char station[maxstation][20];
int stanmb=0;     //总站点数 
int busnmb=0;	//总公交线数 
int way[maxbus][maxstation]={{0}};		//记录公交顺序
int versta[maxstation];					//记录公交站对应的图顶点位置 

typedef struct
{
	char vertex[maxstation][20];		//顶点合集 
	int arc[maxstation][maxstation];	//边合集且为权值 
	int vexnum,arcnum;					//顶点数和边数 
}graph;

typedef struct
{
	int busnum;							//公交车序号 
	char stnname[maxstation][20];		//站点名 
	int stationnum;						//站点数量		 
}busline;

graph g;
busline bus[maxbus]; 


bool flag[maxstation];							//dijstra预留空间 
int dist[maxstation],p[maxstation];

void initG()												//图的初始化 
{
	FILE *fp,*fq;
	if((fp=fopen("Vertex.txt","r"))==NULL)
	{printf("地点读取错误");
	exit(0); 
	} 
	if((fq=fopen("graph.txt","r"))==NULL)
	{printf("路线读取错误");
	exit(0);
	}
	
	fscanf(fp,"%d",&g.vexnum);							//导入顶点集 
	for(int i=0;i0)
		{
		printf("该站点属于%d号线n",bus[j].busnum);
		Printbusline(j);
		}
		else ret++;
	}
	
	
	if(ret==busnmb) printf("该站点不属于任何公交线"); 
}
void change(int a,int b)									//换乘 
{
	
	int u,v;									//找到两个站点分别属于哪条公交线 
		for(int i=0;i0)
			u=i;
			if(way[i][b]>0)
			v=i;
		}
		
	int t; 
		int i;
		for(i=0;i0&&way[v][i]>0)
			{
			t=way[u][i]-way[u][a]+way[v][i]-way[v][b];
			break;}
		printf("n在%s乘坐%d号线到达%s后,n换乘%d号线到达%s耗时约为%d分钟n",station[a],bus[u].busnum,station[i],bus[v].busnum,station[b],(t)); 
		
}
void Link(char m[20],char n[20]) 				//直达 
{	
	int a,b;
	for (int i=0;i0&&way[i][b]>0)
		{
			int t=way[i][a]-way[i][b];
			printf("n%s到%s有直达线%d号线,耗时约为%d分钟n",m,n,bus[i].busnum,abs(t));
			ret++;
		}
	}
	if(ret==0) change(a,b);
	
	
}
void dijstra(int u)				//dijstra 算法 
{
	int n=g.vexnum;
	for(int i=0;i(dist[t]+g.arc[t][j]))
				{
					dist[j]=dist[t]+g.arc[t][j];
					p[j]=t;
				}
			}
		}
	}
	
 }
void walk()						//步行距离查询 
{
	char m[20],n[20];
	printf("n请输入起点:"); 
	scanf("%s",m);
	printf("n请输入终点:"); 
	scanf("%s",n);
	
	
	int a,b;
	for (int i=0;idist[versta[i]])
		{
			near=versta[i];
			less=dist[versta[i]]; 
		}
	}
	printf("n%s最近的站点是%s,步行距离为%d,所需时间为%d分钟n",g.vertex[a],g.vertex[near],less,(less/50));
	return	near;
 }
void Mtplan()
{
	
	char start[20],end[20];
	int s,e;							// 记录起点终点对应的值 
	int n1,n2;							//记录最近站点对应的值 
	char m[20],n[20];					//记录最近的站点名字 
	printf("n请输入起点站:  ");
	scanf("%s",start);
	for(int i=0;i",g.vertex[i]);
		for(int j=0;j",g.vertex[x]);
			x=p[x];
			if(x==p[x])break; 
		}
		printf("五棵松n五棵松到%s的距离是%dnnn",g.vertex[i],dist[i]);
	 } 
} 
void writebusline()							//重新写入公交线文件 
{
	FILE *fp;
	fp=fopen("busline.txt","w");
	
	
	for(int i=0;i0)
		{
			for(int j=k[i];jw;j--)
	{
		strcpy(bus[u].stnname[j],bus[u].stnname[j-1]) ;
	}
	strcpy(bus[u].stnname[w],n);
	bus[u].stationnum++;
} 
void menu1()
{
	int select1=0,select2=1;
	printf("******************管理端***********************n");
	printf("*             1.新增公交线                    *n");
	printf("*             2.修改公交线                    *n");
	printf("*             3.删除站点                      *n");
	printf("*             4.增加站点                      *n");
	printf("*             9.退出                          *n");
	printf("***********************************************n");
	scanf("%d",&select1);
	switch(select1)
	{
		case 1:
			while(select2) 
			{
				Newbusline();
				init(); 
				printf("n是否继续?n1.继续 0.退出n");
				scanf("%d",&select2);
			}
			break;
		case 2:
			while(select2)
			{
				modibusline();
				writebusline();
				init();
				printf("n是否继续?n1.继续 0.退出n");
				scanf("%d",&select2); 
			}
			break;
		case 3:
			while(select2)
			{
				deleteStation();
				writestation();
				writebusline();
				init();				 
				printf("n是否继续?n1.继续 0.退出n");
				scanf("%d",&select2); 
			
			}break;
		case 4:
			while(select2)
			{
				AddStation();
				writebusline();
				init();
				printf("n是否继续?n1.继续 0.退出n");
				scanf("%d",&select2); 
			}
			break;
		}
	if(select1>0&&select1<9)
	menu1();	
}
void menu0()
{
	int select1,select2=1;
	printf("******************学生端***********************n");
	printf("*           1.查询站点公交信息                *n");
	printf("*           2.查询所有公交路线信息            *n");
	printf("*           3.公交站点换乘规划                *n");
	printf("*           4.步行路程最短距离                *n");
	printf("*           5.步行和公交最少耗时规划          *n");
	printf("*           6.五棵松到所有站点路程            *n");
	printf("*           9.退出                            *n");
	printf("***********************************************n");
	scanf("%d",&select1);
	switch(select1)
	{
		case 1:
			while(select2)
			{
				stationsearch();
				printf("n是否继续?n1.继续 0.退出n");
				scanf("%d",&select2); 
			}
			break;
		case 2:
			while(select2)
			{
				PrintAllbusline();
				printf("n是否继续?n1.继续 0.退出n");
				scanf("%d",&select2); 
			}
			break;
		case 3:
			while(select2)
			{	char m[20],n[20];
				printf("n请输入起点:"); 
				scanf("%s",m);
				printf("n请输入终点:"); 
				scanf("%s",n);
				Link(m,n);
				printf("n是否继续?n1.继续 0.退出n");
				scanf("%d",&select2); 
			}
			break;
		case 4:
			while(select2)
			{
				walk();
				printf("n是否继续?n1.继续 0.退出n");
				scanf("%d",&select2); 
			}
			break;
		case 5:
			while(select2)
			{
				Mtplan(); 
				printf("n是否继续?n1.继续 0.退出n");
				scanf("%d",&select2); 
			}
			break;
		case 6:
			while(select2)
			{
				Wks();
				printf("n是否继续?n1.继续 0.退出n");
				scanf("%d",&select2); 
			}
			break;		
	}
	if(select1>0&&select1<9)
	menu0();
	else if(select1==666)
	menu1();	
}
int main()
{
	init(); 
	menu0();
	return 0;
	
}

总结

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1002315.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号