公交线路管理
问题描述:
对公交车线路信息的简单模拟,用菜单选择方式完成建立公交路线信息、修改公交路线信息和删除公交路线信息及其他相关功能。
代码:
#include <iostream>
#include <string.h>
#include <malloc.h>
#include <stdio.h>
using namespace std;
typedef struct linknode
{
int num;//车号
char driver[50];//司机
char stime[50];//发车时间
char start[50];//起始站
char end[50];//终点站
int station;//站数
linknode *next;
} Node,*Linklist;//Linklist表示结构体指针
Linklist CreateList(Linklist head);//头插法建立链表
Linklist findval(Linklist L,int k);//按值查找
Linklist Deletenode(Linklist L,int n);//删除第n路公交车
void ShowList(Linklist L);//输出链表内容
void ShowPoint(Linklist L);//输出节点内容
void Alter(Linklist L,int n);//修改公交信息
void Init();//欢迎界面
int main(void)
{
int x,y;
Linklist L1=NULL;
Node *p;
flag:
Init();
cin>>x;
switch(x)
{
case 1:
cout<<"请输入您要添加的信息,按照:车号--司机--发车时间--起始站--终点站--站数的顺序输入"<<endl;
L1=CreateList(L1);
goto flag;
break;
case 2:
cout<<"请输入要查询的车号:"<<endl;
cin>>y;
p=findval(L1,y);
ShowPoint(p);
goto flag;
break;
case 3:
cout<<"请输入要修改的车号:"<<endl;
cin>>y;
Alter(L1,y);
goto flag;
break;
case 4:
cout<<"请输入要删除的车号:"<<endl;
cin>>y;
L1=Deletenode(L1,y);
goto flag;
break;
case 5:
cout<<"所有公交车的信息为:"<<endl;
ShowList(L1);
goto flag;
break;
case 0:
cout<<"感谢您使用本系统,下次再见"<<endl;
break;
}
return 0;
}
Linklist CreateList(Linklist head)
{
Node *e;
int n,s;
char str1[50],str2[50],str3[50],str4[50];
e=(Linklist)malloc(sizeof(Node));
scanf("%d",&n);
scanf("%s%s%s%s",str1,str2,str3,str4);
scanf("%d",&s);
strcpy(e->driver,str1);
strcpy(e->stime,str2);
strcpy(e->start,str3);
strcpy(e->end,str4);
e->num=n;
e->station=s;
e->next=head;
head=e;
return head;
}
Linklist findval(Linklist L,int n)//按值查找
{
while(L!=NULL)
{
if(L->num==n)
break;
L=L->next;
}
if(L!=NULL)
return L;
else
return NULL;
}
Linklist Deletenode(Linklist L,int n)//删除第n路公交车
{
Linklist p,p1,L1,L2;
p=p1=L1=L2=L;
int k=0,x=0;
while(p1!=NULL)
{
k++;
p1=p1->next;
}
if(k==1)
{
p1=NULL;
return p1;
}
else if(L->num==n)
{
L=L->next;
return L;
}
while(L->next->num!=n)
{
x++;
L=L->next;
}
if(x==k-1)
{
L->next=NULL;
return p;
}
else
{
Node *q;
while(L1->next->num!=n)
L1=L1->next;
q=L1->next;
L1->next=q->next;
free(q);
return L2;
}
}
void ShowList(Linklist L)//输出链表内容
{
if(L==NULL)
{
cout<<"没有公交信息"<<endl;
return;
}
while(L)
{
cout<<L->num<<"---"<<L->driver<<"---"<<L->stime<<"---"<<L->start<<"---"<<L->end<<"---"<<L->station<<endl;
L=L->next;
}
}
void ShowPoint(Linklist L)
{
if(L!=NULL)
cout<<L->num<<"---"<<L->driver<<"---"<<L->stime<<"---"<<L->start<<"---"<<L->end<<"---"<<L->station<<endl;
}
void Alter(Linklist L,int n)//修改公交信息
{
int x,a;
char str[50];
Node *p=findval(L,n);
printf("%d号公交车的信息如下:\n",n);
ShowPoint(p);
printf("请输入要修改的内容:\n");
printf("1 车号\n");
printf("2 司机\n");
printf("3 发车时间\n");
printf("4 起始站\n");
printf("5 终点站\n");
printf("6 站数\n");
cin>>x;
switch(x)
{
case 1:
printf("请输入新信息\n");
cin>>a;
p->num=a;
cout<<"信息修改完毕"<<endl;
break;
case 2:
printf("请输入新信息\n");
scanf("%s",str);
strcpy(p->driver,str);
cout<<"信息修改完毕"<<endl;
break;
case 3:
printf("请输入新信息\n");
scanf("%s",str);
strcpy(p->stime,str);
cout<<"信息修改完毕"<<endl;
break;
case 4:
printf("请输入新信息\n");
scanf("%s",str);
strcpy(p->start,str);
cout<<"信息修改完毕"<<endl;
break;
case 5:
printf("请输入新信息\n");
scanf("%s",str);
strcpy(p->end,str);
cout<<"信息修改完毕"<<endl;
break;
case 6:
printf("请输入新信息\n");
cin>>a;
p->station=a;
cout<<"信息修改完毕"<<endl;
break;
}
}
void Init()//欢迎界面
{
cout<<endl<<endl<<endl;
cout<<"\t\t---------欢迎来到公交信息系统---------"<<endl;
cout<<"\t\t-------------1 信息添加--------------"<<endl;
cout<<"\t\t-------------2 信息查询--------------"<<endl;
cout<<"\t\t-------------3 信息修改--------------"<<endl;
cout<<"\t\t-------------4 信息删除--------------"<<endl;
cout<<"\t\t-------------5 查询所有信息----------"<<endl;
cout<<"\t\t-------------0 退出系统--------------"<<endl;
}