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

📄 两次换乘.cpp

📁 07高教杯数学建模b题之北京公交车查询系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include<stdlib.h> 
#include<stdio.h>
#include<string.h>
int l,k=0;
char dang_str[100];
struct zhan
{
    char name[5];
    int n;
}zhandian[3969];


struct Stop_Table
	{
		char Stop_Name[5];
		char Roadway_Name[5];
		int Roadway_No;
	}stop[29886];
	struct Road_Table
	{
		char Roadway_Name[5];
		char Charge_Mode;
		int Stop_Amount;
		char Stop_Name[87][5];
	}road[1041];
	struct Line_Table
	{		
		int Stop_Amount;
		int Change_Amount;
		char Stop_1[5];
		char Way_1[5];
		char Stop_2[5];
		//char Way_2[5];
		//char Stop_3[5];
		//char Way_3[5];
	//	char Stop_4[5];
	}line[20000];
struct Line_Table1
	{		
		int Stop_Amount;
		int Change_Amount;
		char Stop_1[5];
		char Way_1[5];
		char Stop_2[5];
		//char Way_2[5];
		//char Stop_3[5];
		//char Way_3[5];
	//	char Stop_4[5];
	}line1[500];
struct Line_Table2
	{		
		int Stop_Amount;
		int Change_Amount;
		char Stop_1[5];
		char Way_1[5];
		char Stop_2[5];
	//	char Way_2[5];
		//char Stop_3[5];
		//char Way_3[5];
	//	char Stop_4[5];
	}line2[500];
struct Line_Table3
	{		
		int Stop_Amount;
		int Change_Amount;
		char Stop_1[5];
		char Way_1[5];
		char Stop_2[5];
		//char Way_2[5];
		//char Stop_3[5];
		//char Way_3[5];
		//char Stop_4[5];
	}line3[500];
struct Line_Table4
	{		
		int Stop_Amount;
		int Change_Amount;
		char Stop_1[5];
		char Way_1[5];
		char Stop_2[5];
		char Way_2[5];
		char Stop_3[5];
		//char Way_3[5];
	//	char Stop_4[5];
	}line4[5000];
struct Line_Table5
	{		
		int Stop_Amount;
		int Change_Amount;
		char Stop_1[5];
		char Way_1[5];
		char Stop_2[5];
		char Way_2[5];
		char Stop_3[5];
		char Way_3[5];
		char Stop_4[5];
	}line5[20000];


char *JieQu(char c[],int a,int m)//截取字符串
{
	int i;
	char jiequ_str[5];
	for(i=0;i<m;i++)
	{
		jiequ_str[i]=c[a-1+i];
	}
	jiequ_str[i]='\0';
	return(jiequ_str);
}



int	Find_Tow_Stop_Road(char *Start,char *End)
	{
		int i,j,a=0,b=0,sige=0;
		char tm1[5];
		l=0;
		for(i=1;i<atoi(Start);i++)
		{
			a=a+zhandian[i].n;
		}
		for(j=1;j<atoi(End);j++)
		{
			b=b+zhandian[j].n;
		}
		for(int e=a+1;e<=a+zhandian[atoi(Start)].n;e++)
		{
			for(int r=b+1;r<=b+zhandian[atoi(End)].n;r++)
			{
				if(strcmp(stop[e].Roadway_Name,stop[r].Roadway_Name)==0&& (stop[e].Roadway_No<stop[r].Roadway_No || stop[e].Roadway_Name[0]=='H'))
				{
					l++;
					strcpy(line[++k].Stop_1,Start);
					strcpy(line[k].Stop_2,End);
					strcpy(line[k].Way_1,stop[e].Roadway_Name);
					if(stop[e].Roadway_Name[0]!='H'&&stop[r].Roadway_No>stop[e].Roadway_No)
					{	
						line[k].Stop_Amount=stop[r].Roadway_No-stop[e].Roadway_No;
					}
					else if(stop[e].Roadway_Name[0]=='H'&&stop[r].Roadway_No<stop[e].Roadway_No)
					{
						strcpy(tm1,JieQu(stop[e].Roadway_Name,2,3));
						int x=atoi(tm1);
						line[k].Stop_Amount=road[2*x-1].Stop_Amount-(stop[e].Roadway_No-stop[r].Roadway_No)-1;
					}
					else 
					{	
						line[k].Stop_Amount=stop[r].Roadway_No-stop[e].Roadway_No;
					}
					int  n1;
					
					if(stop[e].Roadway_Name[0]=='D')
					{
						strcpy(tm1,JieQu(stop[e].Roadway_Name,2,3));
						n1=2*atoi(tm1);
						if(road[n1].Charge_Mode=='1')
							line[k].Change_Amount=1;
						else if(road[n1].Charge_Mode=='F')
						{
							if(line[k].Stop_Amount<=20)
								line[k].Change_Amount=1;
							else if(line[k].Stop_Amount>20&&line[k].Stop_Amount<=40)
								line[k].Change_Amount=2;
							else
								line[k].Change_Amount=3;
						}
					}
					else
					{
						strcpy(tm1,JieQu(stop[e].Roadway_Name,2,3));
						n1=2*atoi(tm1)-1;
						if(road[n1].Charge_Mode=='1')
							line[k].Change_Amount=1;
						else if(road[n1].Charge_Mode=='F')
						{
							if(line[k].Stop_Amount<=20)
								line[k].Change_Amount=1;
							else if(line[k].Stop_Amount>20&&line[k].Stop_Amount<=40)
								line[k].Change_Amount=2;
							else
								line[k].Change_Amount=3;
						}
						
					}
					{

					}
					sige=1;
				}	
			}
		
		}
		if(sige==0)
		{
			return(0);
		}
		else
			return(1);
	}

void Nonce_Str(FILE *fp)//取当前字符串
{
	char ch;
	int i=0;
	do{
		if(ch=='\n')
			break;
		ch=fgetc(fp);
		dang_str[i]=ch;
		i++;
	}while(ch!='\t');
	dang_str[i-1]='\0';
}
void hh() 
{ 
 	FILE *fp,*fpout;
	char cc[5];
	int N,a;
	fp=fopen("zhandian","r");
	fpout=fopen("zh_ci","w");
	fclose(fpout);
	fpout=fopen("zh_ci","a");
	Nonce_Str(fp);
	strcpy(cc,dang_str);
	fseek(fp,9L,1);
	while(strcmp(dang_str,"end0")!=0)
	{
	a=1;	
	strcpy(cc,dang_str);
	Nonce_Str(fp);
	if(strcmp(cc,dang_str)!=0)
	{
		strcpy(zhandian[atoi(cc)].name,cc);
		zhandian[atoi(cc)].n=a;
		fprintf(fpout,"%s\t%d\n",cc,a);	
		a--;
	}
	fseek(fp,9L,1);
	strcpy(cc,dang_str);
	Nonce_Str(fp);
	while(strcmp(cc,dang_str)==0)
	{
		a++;
		fseek(fp,9L,1);
		Nonce_Str(fp);
	
		//strcpy(cc,dang_str);
	}
	fseek(fp,9L,1);
	a++;
	strcpy(zhandian[atoi(cc)].name,cc);
	zhandian[atoi(cc)].n=a;
	fprintf(fpout,"%s\t%d\n",cc,a);	
	}
	for(int i=1;i<=3956;i++)
	{
		N=N+zhandian[i].n;
	}

	fclose(fp);
	fclose(fpout);
	//MinLu();

}



void main()
{
	FILE *fp1,*fp2;
	char cc[5];
	char aa[5],bb[5];
	char start[5],end[5];
	int i,j,a=0,b=0;
	int sige=0,sige1=0;
	int ss1,ss2=0,q,w,e,r,qm,wm,o=0;
	int  n1,n2,m1,m2,m3;
	char tm1[5],tm2[5];
	///strcpy(start,"1954");
	//strcpy(end,"2568");
	//printf("请输入要查询的两个站点:(每个站点四位数字,回车结束)\n");

	printf("★★★★★★北京公交车查询系统★★★★★★\n");
	printf("●本系统只支持最多换乘2次		●\n");
	printf("●查询结果中\"U\"表示上行,\"D\"表示下行,	●\n●\"H\"表示环形,接着三位数字是线路编号	●\n");
	printf("●\"S\"开头的表示站点编号			●\n");
	printf("●输入要查询的两个站点编号时		●\n●每个站点用四位数字表示请勿加\"S\"	●\n");
	printf("●●●●●●●●●●●●●●●●●●●●●\n");
	printf("\n▲请输入起始站点,回车结束!:");
	scanf("%s",start);
	printf("▲请输入目的站点,回车结束!:");
	scanf("%s",end);
	printf("※请耐心等候!大约需要10秒钟!\n");
	fp1=fopen("E:\\zhandian","r");
	fp2=fopen("E:\\checi","r");
	hh();
	for(i=1;i<=29885;i++)
	{
		fgets(stop[i].Stop_Name,5,fp1);
		fseek(fp1,1L,1);
		fgets(stop[i].Roadway_Name,5,fp1);
		fseek(fp1,1L,1);
		fgets(cc,3,fp1);
		//fseek(fp1,1L,1);
		stop[i].Roadway_No=atoi(cc);	
		fseek(fp1,2L,1);
	}
	for(i=1;i<=1040;i++)
	{

⌨️ 快捷键说明

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