公交车管理系统C语言

翻网盘的时候翻出来大一做的一个公交车管理系统的C语言课设,给大家分享下

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<windows.h>
#define len sizeof(struct bus)
char password1[100]={'1','2','3','4','5','6'};
//定义结构体类型 
struct bus
{
	struct bus *next;/*连接站点指针*/ 
	struct bus *next2;/*连接公交车指针*/
	int num;//站号 
	char name[100];//站名 
};
/*创建第一辆公交车*/
struct bus* creat()
{
	struct bus *p1,*p2,*head=NULL;
	char n[100];
	printf("请输入该线路总站数以及车次\n");
	p1=p2=(struct bus*)malloc(len);
	scanf("%s%s",n,p1->name);
	//输入的字符串以#结尾
	//先输入字符串,如果字符串不为#,再将其转化为数字赋给结构体里的序号 
	while(n[0]!='#')
	{
		//将字符串转化为数字形式 
		p1->num=atoi(n);
		if(head==NULL)
		{
			head=p1;
		}
		else
		{
			p2->next=p1;
			p2=p1;
		}
		p1=(struct bus*)malloc(len);
		printf("请输入站点序号及站点信息(输入#结束输入)\n");
		scanf("%s%s",n,p1->name);
	}
	p2->next=NULL;
	return head;
}
/*创建第二辆公交车*/
struct bus* creatbus(struct bus *head1)
{
	struct bus *p1,*p2,*head=NULL;
	char n[100];
	printf("请输入该线路总站数以及车次\n");
	p1=p2=(struct bus*)malloc(len);
	scanf("%s%s",n,p1->name);
	while(n[0]!='#')
	{
		p1->num=atoi(n);
		if(head==NULL)
		{
			head=p1;
		}
		else
		{
			p2->next=p1;
			p2=p1;
		}
		p1=(struct bus*)malloc(len);
		printf("请输入站点序号及站点信息(输入#结束输入)\n");
		scanf("%s%s",n,p1->name);
	}
	p2->next=NULL;
	head1->next2=head;
	return head;
}
/*显示函数*/
void list(struct bus *head)
{
	struct bus *temp;
	temp=head;
	while(temp!=NULL)
	{
		if(temp==head)
		printf("\t\t总站数:%d 车次:%s\n",temp->num,temp->name);
		else
		printf("\t\t站点序号:%d 站点名称:%s\n",temp->num,temp->name);
		temp=temp->next;
	}
 } 
 /*删除站点函数*/
struct bus* del(struct bus *head)
{
 	struct bus *p1,*p2;
 	char n[100];
 	printf("\t\t输入你要删除站点的名称\n");
 	printf("\t\t");
 	scanf("%s",n);
 	if(head==NULL)
 	printf("链表为空\n");
 	else
 	{
 		p1=head;
 		while(strcmp(n,p1->name)!=0&&p1->next!=NULL)
		{
		 	p2=p1;
		 	p1=p1->next;
		}	
		if(strcmp(n,p1->name)==0)
		{
			if(head==p1)
			{
				head=head->next;
			}
			else
			{
				p2->next=p1->next;
			}
			p1=p1->next;
			while(p1!=NULL)
			{
				p1->num=p1->num-1;
				p1=p1->next;
			}
		}
		else
		{
			printf("\t\t没有该站点\n");
		}
	}
	return head;
}
 /*加入新站点*/
 struct bus* insert(struct bus *head)
 {
 	struct bus *temp,*p1,*p2;
 	int n;
 	printf("\t\t请输入你想添加到那个站点前(站点序号)\n");
 	printf("\t\t");
 	scanf("%d",&n);
 	printf("\t\t请输入站点序号及站点信息\n");
 	temp=(struct bus*)malloc(len);
 	printf("\t\t");
	scanf("%d%s\n",&temp->num,temp->name);
	temp->next=NULL;
 	if(head==NULL)
	{
 		head=temp;
 	}
 	else
 	{
 			p1=head;
 		while(n!=p1->num&&p1->next!=NULL)
 		{
 			p2=p1;
 			p1=p1->next;
		}
		if(n==p1->num)
		{	
				p2->next=temp;
				temp->next=p1;
				while(p1!=NULL)
				{
					p1->num=p1->num+1;
					p1=p1->next;
				}	
		}
		else
		{
			printf("\t\t没有该节点");
		}
	 }
 	return head;
 }
 //保存数据 
void save(struct bus *head1,struct bus *head2) 
{
	FILE *fp;
	struct bus *p1,*p2,*p3; 
	p3=(struct bus*)malloc(len);
	p3->num=21568;
	if((fp=fopen("bus.txt","wb"))==NULL) 
	{ 
		printf("打不开文件\n"); 
		exit(0);
	}
	else
	{
		printf("\n保存中\n"); 
		p1=head1;
		p2=head2;
	while(1) 
	{ 
		fwrite(p1,len,1,fp); 
		
		p1=p1->next;
		if(p1==NULL)
		{
			break;
		}
		
	}
	fwrite(p3,len,1,fp);
	while(1) 
	{ 
		fwrite(p2,len,1,fp); 
		p2=p2->next;
		if(p2==NULL)
		{
			break;	
		}
	}
		fclose(fp);
		printf("保存成功\n");
	}
}
//读取车站信息 
struct bus* load() 
{
	struct bus *p1,*p2,*head1=NULL,*p3,*p4,*head2=NULL; 
	FILE *fp; 
	p1=(struct bus*)malloc(len);  
	p3=(struct bus*)malloc(len);
	head1=p1; 
	head2=p3;
	fp=fopen("bus.txt","rb");
	while(!feof(fp)) 
	{ 
		if(fread(p1,sizeof(struct bus),1,fp)!=1) 
		{
			break; 
		}
		if(p1->num==21568)
		{
			break;
		}
		p1->next=(struct bus*)malloc(len); 
			p2=p1; 
			p1=p1->next; 
	}
	p2->next=NULL;
	while(!feof(fp)) 
	{ 
		if(fread(p3,sizeof(struct bus),1,fp)!=1) 
		break;
		p3->next=(struct bus*)malloc(len); 
			p4=p3; 
			p3=p3->next; 
	}
	p4->next=NULL;
	fclose(fp); 
	printf("打开文件夹成功\n");
	head1->next2=head2;
	return head1;
}
/*修改站点信息函数*/
struct bus* edit(struct bus *head)
{
	struct bus *p1,*p2;
	char n[100];
	printf("\t\t请输入您想修改的站点名称\n");
	printf("\t\t");
	scanf("%s",n);
	if(head==NULL)
	{
		printf("\t\t信息为空\n"); 
	} 
	else
	{
		p1=head;
		while(strcmp(n,p1->name)!=0&&p1->next!=NULL)
		{
			p2=p1;
			p1=p1->next;
		}
		if(strcmp(n,p1->name)==0)
		{
			printf("\t\t请输入修改后的站点名称\n");
			printf("\t\t");
			scanf("%s",p1->name);
		}
		else
		{
			printf("\t\t没有找到该站点");
		}
	}
	return head;
}
void pa();
/*管理员菜单*/ 
void manage(struct bus *head)
{
	int n;
	int c,e;
	while(1)
	{
	
	printf("\t\t-------------------------!欢迎您,管理员!--------------------------------\n");
	printf("\t\t---------------------------------------------------------------------------\n");
	printf("\t\t-------------------------输入1创建新公交线路-------------------------------\n");
	printf("\t\t-------------------------输入2删除公交站点---------------------------------\n");
	printf("\t\t-------------------------输入3插入新公交站点-------------------------------\n");
	printf("\t\t-------------------------输入4储存公交线路---------------------------------\n");
	printf("\t\t-------------------------输入5输出站点信息---------------------------------\n");
	printf("\t\t-------------------------输入6修改站点信息---------------------------------\n");
	printf("\t\t-------------------------输入7修改密码-------------------------------------\n");
	printf("\t\t-------------------------输入8返回主菜单-------------------------------------\n");
	printf("\t\t---------------------------------------------------------------------------\n");
	printf("\t\t");
	scanf("%d",&n);
		switch(n)
		{
			case 1:head=creat();break;
			case 2:
				while(1)
				{
				
					printf("\t\t请选择你要操作的公交车102/29\n");
					printf("\t\t");
					scanf("%d",&c);
					if(c==102)
					{
						head=del(head);
					}
					else
					{
						head->next2=del(head->next2);
					}
					printf("\t\t是否要继续删除1/0\n");
					printf("\t\t");
					scanf("%d",&e);
					if(e==0)
					{
						break;
					}
				}
					break;
			case 3:
					printf("\t\t请选择你要操作的公交车102/29\n");
					printf("\t\t");
					scanf("%d",&c);
					if(c==102)
					{
						head=insert(head);
					}
					else
					{
						head->next2=insert(head->next2);
					}
					break;
			case 4:save(head,head->next2);break;
			case 5:
				printf("\t\t请选择你要输出的公交车102/29\n");
				printf("\t\t");
				scanf("%d",&c);
				if(c==102)
				{
					list(head);
				}
				else
				{
					list(head->next2);
				}
				break;
			case 6:
				printf("\t\t请选择你要修改的的公交车102/29\n");
				printf("\t\t");
				scanf("%d",&c);
				if(c==102)
				{
					head=edit(head);
				}
				else
				{
					head->next2=edit(head->next2);
				}
				break; 
			case 7:/*修改密码*/pa();break;
			default:return;
		}
		if(n==8)
		break;
	}
}
void search(struct bus *head);
/*乘客查询菜单*/ 
void find(struct bus *head)
{
	int n,c;
	printf("\t\t---------------------------------------------------------------------------\n");
	printf("\t\t------------------------输入1查询公交线路----------------------------------\n");
	printf("\t\t-------------------------输入2查询公交车途经的公交站点---------------------\n");
	printf("\t\t-------------------------输入3输出公交线路---------------------------------\n");
	printf("\t\t---------------------------------------------------------------------------\n");
	printf("\t\t");
	scanf("%d",&n);
	switch(n)
	{
		case 1:search(head);break;
		case 2:head=del(head);break;
		case 3:
			printf("\t\t请选择你要输出的公交车102/29\n");
			printf("\t\t");
			scanf("%d",&c);
			if(c==102)
			{
				list(head);
			}
			else
			{
				list(head->next2);
			}
			break;
	}
}
void password(struct bus *head)
{
	char a[100];
	int i;
	printf("\t\t请输入您的密码\n");
	printf("\t\t");
	for(i=0;i<100;i++)
	{
		a[i]=getch();
		if(a[i]=='\r')
		break;
		printf("*");
	}
	a[i]='\0';
	printf("\n");
	if(strcmp(a,password1)==0)
	{
		manage(head);
	}
	else
	{
		printf("密码错误\n");
	}
}
//修改密码函数 
void pa()
{
	char a[100],b[100],c[100];
	int i;
	while(1)
	{
	//判断原密码是否正确 
		printf("请输入您的原密码\n");
		for(i=0;i<100;i++)
		{
			a[i]=getch();
			if(a[i]=='\r')
			{
				break;
			}
			printf("*");
		}
		a[i]='\0';
		printf("\n");
		if(strcmp(a,password1)!=0)
		{
			printf("密码错误,请再次输入");
		}
		if(strcmp(a,password1)==0)
		{
			//输入密码为原密码时跳出循环 
			break;
		}
	}
	//两次密码不一致 
	while(1)
	{
		printf("请输入您修改后的密码\n");
		for(i=0;i<100;i++)
		{
			b[i]=getch();
			if(b[i]=='\r')
			{
			break;
			}
			printf("*");
		}
		b[i]='\0';
		printf("\n");
		printf("请再次输入修改后的密码\n");
			for(i=0;i<100;i++)
		{
			c[i]=getch();
			if(c[i]=='\r')
			{ 
				break;
			} 
			printf("*");
		}
		c[i]='\0';
		printf("\n");
		if(strcmp(b,c)!=0)
		{
			printf("两次输入的密码不一致,请重新输入\n");
		}
		else
		{
			//两次密码输入一致时跳出循环 
			break; 
		}
	}
			strcpy(password1,c);
			printf("修改成功\n");
}
//链表逆序函数
struct bus *oppsite(struct bus *head)
{
		int c=head->num,d;
		struct bus *p1,*p2,*p3;
		while(c--)
		{
			p1=head;//p1指向第一个 
			p2=head->next;//p2指向第二个 
			p3=p2->next;//p3指向第三个 
			d=c;
			while(d!=0)
			{
				
				d--;
				if(p3!=NULL&&p1!=NULL&&p2!=NULL)
				{
				
					if(p2->num<p3->num)
					{
						p2->next=p3->next;//如果第二个大于第三个两个交换,p2的next给p3 
						p1->next=p3;//p1的下个等于p3 
						p3->next=p2;	//p3后面为p2,则p2在三位,p3在二位 
						p1=p3;//p1再从原先的二位置p3开始
						p3=p2->next;//p3为p2的后面第四个位置 
					}
					else
					{
						p1=p2;//如果p2小于p3整体向后移 
						p2=p3;
						p3=p3->next;
					}
				}
			}
		}
		return head;
	}
//用户查询公交线路函数 
void search(struct bus *head)
{
	struct bus *head1,*head2,*o1,*o2;
	struct bus *p1,*p2,*p3,*p4,*p5,*p6;
	struct bus *q1,*q2,*q3,*q4,*q5,*q6,*p7;
	int flag[4],i,j,flag2[4];
	char a[100],b[100];
	for(i=0;i<4;i++)
	{
		flag[i]=0;
	}
	head1=head;
	head2=head->next2;
	printf("\t\t请输入您的起点\n");
	printf("\t\t");
	scanf("%s",a);
	printf("\t\t请输入您的终点\n");
	printf("\t\t");
	scanf("%s",b);
	// p1先是公交1的头结点,然后利用P1遍历公交1链表查找,P2记录P1找到的位置。
	//p3用于遍历公交1中的终点 P4记录P3最终位置 
	//p6也用来记录P1的位置,之后再利用P6查找两辆公交车相同站点 
	// q1先是公交1的头结点,然后利用q1遍历公交1链表查找,q2记录q1找到的位置
	//q3用来遍历公交2的结点的终点 
	p1=head1;
	p3=head1;
	p5=head1;
	q1=head2;
	q5=head2;
	q3=head2; 
	/*--------------------------------------------正序------------------------------*/ 
	//找第一辆公交车的起点
	while(strcmp(a,p1->name)!=0&&p1->next!=NULL)
	{
		p1=p1->next;
	}
	if(strcmp(a,p1->name)==0)
	{
	//如果找到,则标记变量为1 
		flag[0]=1;
		p2=p1;
		p6=p1;
	}
	//找第一辆公交车的终点 
	while(strcmp(b,p3->name)!=0&&p3->next!=NULL)
	{
		p3=p3->next;
	}
	if(strcmp(b,p3->name)==0)
	{
		flag[1]=1;
		p4=p3;
		p7=p3;
	}
	//找第二辆公交车的起点 
	while(strcmp(a,q1->name)!=0&&q1->next!=NULL)
	{
		q1=q1->next;
	}
	if(strcmp(a,q1->name)==0)
	{
		flag[2]=1;
		q2=q1;
		q6=q1;
	}
	//找第二辆公交车的终点 
	while(strcmp(b,q3->name)!=0&&q3->next!=NULL)
	{
		q3=q3->next;
	}
	if(strcmp(b,q3->name)==0)
	{
		flag[3]=1;
		q4=q3;
	}
	//判断正逆序 
	//如果为正序,不进行操作,如果为逆序,将链表进行逆序操作 
	//第一辆公交车 
	if(flag[1]==1&&flag[0]==1)
	{
		//同一辆车上判断站点序号大小来确定正序逆序 
		if(p1->num>p3->num)
		{
			
			head1=oppsite(head1);
			p1=head1;
			p3=head1;
		//------------------------------------
			while(strcmp(a,p1->name)!=0&&p1->next!=NULL)
			{
				p1=p1->next;
			}
			if(strcmp(a,p1->name)==0)
			{
			//如果找到,则标记变量为1 
				flag[0]=1;
				p2=p1;
				p6=p1;
			}
			//找第一辆公交车的终点 
			while(strcmp(b,p3->name)!=0&&p3->next!=NULL)
			{
				p3=p3->next;
			}
			if(strcmp(b,p3->name)==0)
			{
				flag[1]=1;
				p4=p3;
				p7=p3;
			}
			
//----------------------------------------------------	
		}
	}
	//第二辆公交车判断开始 
	if(flag[2]==1&&flag[3]==1)
	{
		if(q1->num>q3->num)
		{
			head2=oppsite(head2);
			q1=head2;
			q3=head2; 
			//--------------------------------------
			//找第二辆公交车的起点 
			while(strcmp(a,q1->name)!=0&&q1->next!=NULL)
			{
				q1=q1->next;
			}
			if(strcmp(a,q1->name)==0)
			{
				flag[2]=1;
				q2=q1;
				q6=q1;
			}
			//找第二辆公交车的终点 
			while(strcmp(b,q3->name)!=0&&q3->next!=NULL)
			{
				q3=q3->next;
			}
			if(strcmp(b,q3->name)==0)
			{
				flag[3]=1;
				q4=q3;
			}
			//-------------------------------------
		}
		
	}
	//----第二辆结束 
	//-----起点在第一辆,终点在第二辆 
	if(flag[0]==1&&flag[1]==0&&flag[2]==0&&flag[3]==1)
	{
		o1=head1;
		while(1)
		{
			o2=head2;
			while(1)
			{
				if(strcmp(o1->name,o2->name)==0||o2->next==NULL)
				{
					break;
				}
				o2=o2->next;
			}
			
			if(strcmp(o1->name,o2->name)==0||o1->next==NULL)
			{
				break;
			}
			o1=o1->next;
		}
		if(p1->num>o1->num&&q3->num<o1->num)
		{
			head1=oppsite(head1);
			head2=oppsite(head2);
			p1=head1;
			q3=head2;
			//找第一辆公交车的起点
			while(strcmp(a,p1->name)!=0&&p1->next!=NULL)
			{
				p1=p1->next;
			}
			if(strcmp(a,p1->name)==0)
			{
			//如果找到,则标记变量为1 
				flag[0]=1;
				p2=p1;
				p6=p1;
			}
			//找第二辆公交车的终点 
			while(strcmp(b,q3->name)!=0&&q3->next!=NULL)
			{
				q3=q3->next;
			}
			if(strcmp(b,q3->name)==0)
			{
				flag[3]=1;
				q4=q3;
			}	
		}
		if(p1->num<o1->num&&q3->num>o1->num)
		{
			//正序 
		}
		if(p1->num>o1->num&&q3->num>o1->num)
		{
			//先逆序再正序
			head1=oppsite(head1);
			p1=head1;
			q3=head2;
			//找第一辆公交车的起点
			while(strcmp(a,p1->name)!=0&&p1->next!=NULL)
			{
				p1=p1->next;
			}
			if(strcmp(a,p1->name)==0)
			{
			//如果找到,则标记变量为1 
				flag[0]=1;
				p2=p1;
				p6=p1;
			}
			//找第二辆公交车的终点 
			while(strcmp(b,q3->name)!=0&&q3->next!=NULL)
			{
				q3=q3->next;
			}
			if(strcmp(b,q3->name)==0)
			{
				flag[3]=1;
				q4=q3;
			}
		}
		if(p1->num<o1->num&&q3->num<o1->num)
		{
			//先正序再逆序
			head2=oppsite(head2);
			p1=head1;
			q3=head2;
			//找第一辆公交车的起点
			while(strcmp(a,p1->name)!=0&&p1->next!=NULL)
			{
				p1=p1->next;
			}
			if(strcmp(a,p1->name)==0)
			{
			//如果找到,则标记变量为1 
				flag[0]=1;
				p2=p1;
				p6=p1;
			}
			//找第二辆公交车的终点 
			while(strcmp(b,q3->name)!=0&&q3->next!=NULL)
			{
				q3=q3->next;
			}
			if(strcmp(b,q3->name)==0)
			{
				flag[3]=1;
				q4=q3;
			}	 
		}
		
		}
		
	//-----起点在第二辆,终点在第一辆 
	if(flag[0]==0&&flag[1]==1&&flag[2]==1&&flag[3]==0)
	{
		o1=head1;
		while(1)
		{
			o2=head2;
			while(1)
			{
				if(strcmp(o1->name,o2->name)==0||o2->next==NULL)
				{
					break;
				}
				o2=o2->next;
			}
			if(strcmp(o1->name,o2->name)==0||o1->next==NULL)
				{
					break;
				}
			o1=o1->next;
		}
		if(q1->num<o1->num&&p3->num>o1->num)
		{
			//正序 
		}
		if(q1->num>o1->num&&p3->num>o1->num)
		{
			//先逆后正
			head1=oppsite(head1);
			q1=head2;
			p3=head1;
			//找第一辆公交车的终点 
			while(strcmp(b,p3->name)!=0&&p3->next!=NULL)
			{
				p3=p3->next;
			}
			if(strcmp(b,p3->name)==0)
			{
				flag[1]=1;
				p4=p3;
				p7=p3;
			}
			//找第二辆公交车的起点 
			while(strcmp(a,q1->name)!=0&&q1->next!=NULL)
			{
				q1=q1->next;
			}
			if(strcmp(a,q1->name)==0)
			{
				flag[2]=1;
				q2=q1;
				q6=q1;
			}
		}
		if(q1->num<o1->num&&p3->num<o1->num)
		{
			//先正后逆 
			head2=oppsite(head2);
			q1=head2;
			p3=head1;
			//找第一辆公交车的终点 
			while(strcmp(b,p3->name)!=0&&p3->next!=NULL)
			{
				p3=p3->next;
			}
			if(strcmp(b,p3->name)==0)
			{
				flag[1]=1;
				p4=p3;
				p7=p3;
			}
			//找第二辆公交车的起点 
			while(strcmp(a,q1->name)!=0&&q1->next!=NULL)
			{
				q1=q1->next;
			}
			if(strcmp(a,q1->name)==0)
			{
				flag[2]=1;
				q2=q1;
				q6=q1;
			}
		}
		if(q1->num>o1->num&&p3->num<o1->num)
		{
			head1=oppsite(head1);
			head2=oppsite(head2);
			q1=head2;
			p3=head1;
			//找第一辆公交车的终点 
			while(strcmp(b,p3->name)!=0&&p3->next!=NULL)
			{
				p3=p3->next;
			}
			if(strcmp(b,p3->name)==0)
			{
				flag[1]=1;
				p4=p3;
				p7=p3;
			}
			//找第二辆公交车的起点 
			while(strcmp(a,q1->name)!=0&&q1->next!=NULL)
			{
				q1=q1->next;
			}
			if(strcmp(a,q1->name)==0)
			{
				flag[2]=1;
				q2=q1;
				q6=q1;
			}
		}
	}
	//当在两辆车上的起点终点都被找到时,计算哪辆车上经过的站数较少 
	//优先推荐站数较少的方法 
	if(flag[0]==1&&flag[1]==1&&flag[2]==1&&flag[3]==1)
	{
		i=0;
		j=0;
		while(1)
		{
			i++;
			if(p1==p3)
			{
				break;
			}
			p1=p1->next;
		}
		while(1)
		{
			j++;
			if(q1==q3)
			{
				break;
			}
			q1=q1->next;
		}
		if(i>j)
		{
			while(1)
			{
				printf("%d%s",q2->num,q2->name);
				if(q2==q3)
				{
					break;
				}
				q1=q1->next;
			}
		}
		else
		{
			while(1)
			{
				printf("%d%s",p2->num,p2->name);
				if(p2==p3)
				{
					break;
				}
				p1=p1->next;
			}
		}
	}
	//当起点终点都在第一辆车找到时 
	if((flag[0]==1&&flag[1]==1&&flag[2]==0&&flag[3]==0)||(flag[0]==1&&flag[1]==1&&flag[2]==1&&flag[3]==0)||(flag[0]==1&&flag[1]==1&&flag[2]==0&&flag[3]==1))
	{
		
		while(1)
		{
			
			printf("%d.%s->",p2->num,p2->name);
				if(p2==p3)
				{
					break;
				}
				p2=p2->next;
		}
	}
	//当起点终点都在第二辆车找到时 
	if((flag[0]==1&&flag[1]==0&&flag[2]==1&&flag[3]==1)||(flag[0]==0&&flag[1]==1&&flag[2]==1&&flag[3]==1)||(flag[0]==0&&flag[1]==0&&flag[2]==1&&flag[3]==1))
	{
		printf("乘坐%s车\n",head2->name);
		while(1)
		{
			printf("%d%s",q2->num,q2->name);
				if(q2==q3)
				{
					break;
				}
				q2=q2->next;
		}
	}
	//当在第一辆公交车找到起点,第二辆公交车找到终点 
	if(flag[0]==1&&flag[1]==0&&flag[2]==0&&flag[3]==1)
	{
		//找两辆公交车的相同站点 
		while(1)
		{
			q5=head2; 
			while(1)
			{								
				//当站点名称相同或q5走到 q4时跳出内层循环 
				if(strcmp(q5->name,p6->name)==0||q5==q4)
				{
					printf("1");
					break;
				}
				q5=q5->next;
			}
			//当站点名称相同时,跳出外层循环
			if(strcmp(q5->name,p6->name)==0)
				break;
			p6=p6->next;
			
		}
		//输出公交1起点到达转车站的路线 
		printf("尊敬的乘客朋友\n以下是我们为您规划的路线\n");
		printf("先乘坐%s\n",head1->name);
		while(1)
		{
			printf("%d %s-->",p2->num,p2->name);
			if(p2==p6)
			break;
			p2=p2->next;
		}
		printf("\n");
		//输出转车站到终点的路线 
		printf("再乘坐%s\n",head2->name);
		while(1)
		{
			printf("%d %s-->",q5->num,q5->name);
			if(q4==q5)
			{
				printf("\n");
				break;
			}
			q5=q5->next;
		}
	}
//起点在二路上,终点在一路车上
	if(flag[0]==0&&flag[1]==1&&flag[2]==1&&flag[3]==0)
	{
	
		//找两辆公交车的相同站点
		//p4为在第一辆公交车找到的终点位置 
		//q6和q2为在第二辆公交车的起点位置 
		while(1)
		{
			p4=head1; 
			while(1)
			{								
				//当站点名称相同或q5走到 q4时跳出内层循环 
				if(strcmp(q6->name,p4->name)==0||p4==p7)
				{
					break;
				}
				p4=p4->next;
			}
			//当站点名称相同时,跳出外层循环
			if(strcmp(q6->name,p4->name)==0)
			{ 
				break;
			} 
			q6=q6->next;
			
		}
		//输出公交1起点到达转车站的路线 
		printf("尊敬的乘客朋友\n以下是我们为您规划的路线\n");
		printf("先乘坐%s\n",head2->name);
		while(1)
		{
			printf("%d %s-->",q2->num,q2->name);
			if(q2==q6)
			{ 
				break; 
			} 
			q2=q2->next;
		}
		printf("\n");
		//输出转车站到终点的路线 
		printf("再乘坐%s\n",head1->name);
		while(1)
		{
			printf("%d %s-->",p4->num,p4->name);
			if(p4==p7)
			{ 
			printf("\n");
				break;
			} 
			p4=p4->next;
		}
		 
	}
	/*-------------------------------正序------------------------------------------*/
	/*-------------------------------逆序------------------------------------------*/
	
	/*-------------------------------逆序------------------------------------------*/
	 
}
void login()
{
	
}
int main()
{
	struct bus *head1,*head2;
	head1=load();
	int a;
	while(1)
	{
		printf("\t\t*************************欢迎光临公交车管理系统*****************************\n");
		printf("\t\t*                                                                          *\n");
		printf("\t\t*                                                                          *\n");
		printf("\t\t*                                                                          *\n");
		printf("\t\t*                           输入1管理员登录                                *\n");
		printf("\t\t*                            输入2乘客查询                                 *\n");
		printf("\t\t*                                                                          *\n");
		printf("\t\t*                                                                          *\n");
		printf("\t\t*                                                                          *\n");
		printf("\t\t****************************************************************************\n");
		printf("\t\t");scanf("%d",&a);
		switch(a)
		{
			case 1:password(head1);break;
			case 2:find(head1);break;
			default:printf("请输入正确的数字\n");
		}
	}
	
}
/*
28 102路 
1 葛家庄 
2 和平路燕子山路 
3 燕子山小区 
4 和平路山大路 
5 和平路历山东路 
6 和平路山师东路 
7 山东新闻大厦 
8 大街 
9 银座商城 
10 泉城广场
11 趵突泉南门
12 饮虎池
13 杆石桥
14 经七纬二
15 经七纬四
16 经七路小纬
17  经七纬八
18 经七纬十二
19 经七路振兴
20 经七路西口
21 南辛庄
22 南辛庄街南
23 试验机厂 
24 王官庄
25 王官庄小区
26 青龙山小区
27 后龙
28 济南大学 
*/ 
/*
25 29路
1 天桥南
2 站前路南口
3 大观园
4 经四纬三
5 山东省眼科医院
6 省立医院
7 经四纬十
8 纬十二路经
9 纬十二路经
10 经十路德兴街
11 经十路经七路
12 南辛庄
13 南辛庄西路
14 试验机厂
15 王官庄
16 王官庄小区
17 青龙山长途客运站
18 后龙
19 济南大学
20 七贤广场
21 七贤庄
22 文庄
23 文庄西
24 石房峪山隧道
25 文贤居 
*/ 

 

  • 24
    点赞
  • 171
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
C语言公交卡管理系统是一种应用程序,用于管理公交卡的信息和交易记录。 该系统具有以下功能: 1. 公交卡信息管理:可以添加、编辑和删除公交卡的相关信息,例如卡号、持卡人姓名、余额等。可以通过卡号查询公交卡的详细信息。 2. 余额充值:可以为公交卡充值余额,输入充值金额后,系统会相应地更新余额,并生成交易记录。 3. 乘车记录:可以记录乘车时间、路线和费用。每次刷卡后,系统会自动记录下相关信息,并扣除该次乘车费用。 4. 交易记录管理:可以查询和打印公交卡的交易记录,包括充值和乘车记录。 5. 查询功能:可以根据不同的条件查询公交卡的信息和交易记录,例如按卡号、持卡人姓名、时间范围等。 6. 公交卡挂失:在用户挂失公交卡后,会将该卡标记为挂失状态,并停止卡的使用,防止盗刷。 7. 系统安全性保障:对于用户的敏感信息和交易记录,需要进行加密存储和传输,确保数据的安全性。 8. 系统界面友好:为用户提供直观、易操作的界面,方便用户进行各种功能的使用。 C语言公交卡管理系统可以提高公交运营的效率和便利性,减少人工操作,并能够及时追踪公交卡的相关信息。同时,通过系统的交易记录和查询功能,可以对公交卡的使用情况进行统计分析,为公交运营提供数据支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值