2021-04-14

#include <bits/stdc++.h>
#define status int
#define MaxSize 50
using namespace std;
typedef struct buslin
{
int num;//站点
char name[20];//站名
int kmshang;//到上一站的距离
int kmxia;//到下一站的距离
}ElemType;
typedef struct
{
ElemType data[MaxSize];
int length=0;
}SqList;
ElemType a[MaxSize];

void CreateList (SqList **List,ElemType A[],int n,int s)
{
int i=List[s]->length,k=List[s]->length;
while(i<n)
{
List[s]->data[k]=A[i];
k++,i++;
}
List[s]->length=k;
}
void Route(SqList **L,int s)
{
int i=L[s]->length;
int num;
char name[20],n;
int kmshang;
int kmxia;
memset(&a,0,sizeof(a));
num=L[s]->length;
while(1)
{
if(i>=MaxSize){
printf(“超出储存范围!!!\n”);
break;
}
else{
printf(“请输入站点信息\n”);
cout<<“第”<<++num<<“站”<<endl;
printf(“站点名称\n”);
cin>>name;
printf(“请输入该站到下一站的距离\n”);
cin>>kmxia;
a[i].num=num;
strcpy(a[i].name,name);
if(i0) a[i].kmshang=0;
else if(i
L[s]->length&&i!=0) a[i].kmshang=L[s]->data[i-1].kmxia;
else a[i].kmshang=a[i-1].kmxia;
a[i].kmxia=kmxia;
printf(“终止请输入’0’!!!\n”);
cin>>n;
if(n==‘0’) break;
i++;
}
}
CreateList(L,a,i+1,s);
}
void save(SqList **L,int s)
{
FILE*fp1,*fp2;
int i;
if(s==0){
if((fp1=fopen(“Buslin_1.txt”,“w”))==NULL)
{
cout<<“17路: “;
printf(“Can’t open the file!\n”);
return ;
}
fprintf(fp1,”%d\n”,L[0]->length);
for(i=0;i<L[0]->length;i++)
{
fprintf(fp1,"%d\t%s\t%d\t%d\n",L[0]->data[i].num,L[0]->data[i].name,L[0]->data[i].kmshang,L[0]->data[i].kmxia);
}

fclose(fp1);
}
if(s==1){
    if((fp2=fopen("Buslin_2.txt","w"))==NULL)
{
     cout<<"51路:  ";
    printf("Can't open the file!\n");
    return ;
}
fprintf(fp2,"%d\n",L[1]->length);
for(i=0;i<L[1]->length;i++)
{
   fprintf(fp2,"%d\t%s\t%d\t%d\n",L[1]->data[i].num,L[1]->data[i].name,L[1]->data[i].kmshang,L[1]->data[i].kmxia);
}

fclose(fp2);
}

}
bool load(SqList **L,int s)
{
FILE *fp1,*fp2;
SqList *F;
int i=0;
F=new SqList;
if(s==0)
{
if((fp1=fopen(“Buslin_1.txt”, “r”))NULL)
{
cout<<“17路: “;
printf(“Can’t open the file!\n”);
return false;
}
if(!feof(fp1))
fscanf(fp1,”%d\n”,&L[0]->length);
while(i<L[0]->length)feof()函数 判断文件是否结束
{
fscanf(fp1,"%d\t%s\t%d\t%d\n",&L[0]->data[i].num,L[0]->data[i].name,&L[0]->data[i].kmshang,&L[0]->data[i].kmxia);
i++;
}
fclose(fp1);
}
if(s
1)
{
if((fp2=fopen(“Buslin_2.txt”, “r”))NULL)
{
cout<<“51路: “;
printf(“Can’t open the file!\n”);
return false;
}
if(!feof(fp2))
fscanf(fp2,”%d\n”,&L[1]->length);
while(i<L[1]->length)feof()函数 判断文件是否结束
{
fscanf(fp2,"%d\t%s\t%d\t%d\n",&L[1]->data[i].num,L[1]->data[i].name,&L[1]->data[i].kmshang,&L[1]->data[i].kmxia);
i++;
}
fclose(fp2);
}
return true;
}
bool ListInsert(SqList **List,int i,ElemType e,int s)
{
int j;
if(i<1||i>List[s]->length+1||List[s]->length
MaxSize)
return false;
i–;
for(j=List[s]->length;j>i;j–){
List[s]->data[j]=List[s]->data[j-1];
List[s]->data[j].num++;
}
List[s]->data[i]=e;
List[s]->data[i].kmshang=List[s]->data[i+1].kmshang;
List[s]->data[i+1].kmshang=List[s]->data[i].kmxia;
List[s]->length++;
return true;
}
bool ListModify(SqList **List,int i,ElemType e,int s)
{
int j;
if(i<1||i>List[s]->length)
return false;
i–;
List[s]->data[i]=e;
List[s]->data[i].kmshang=List[s]->data[i-1].kmxia;
List[s]->data[i+1].kmshang=List[s]->data[i].kmxia;
return true;
}
void Xianshi(SqList **List,int s)
{
for(int i=0;i<List[s]->length;i++)
{
cout<<“第”<<List[s]->data[i].num<<“站”<<" “<<List[s]->data[i].name<<” 据上一站有"<<List[s]->data[i].kmshang<<" 千米"<<" "<<"据下一站有 "<<List[s]->data[i].kmxia<<“千米”<<endl;
}
cout<<“站数”<<List[s]->length<<endl;
}
void Charu(SqList **List,int s)
{

ElemType e;
int h,q,i=0;
bool flag=false;
printf("请输入你要插入的站点序号!!!\n");
scanf("%d",&h);
if(h<=List[s]->length){
    cout<<"请输入该站的名字"<<" "<<"请输入到下一站的距离"<<endl;
    cin>>e.name>>e.kmxia;
    e.num=h;
}
if(h==List[s]->length+1)
{
    cout<<"此站默认为最后一站"<<endl;
    cout<<"请输入站点名称"<<" "<<"到下一站的距离自动保存为0!!!!"<<endl;
    cin>>e.name;
    e.num=h;
    e.kmxia=0;

}
flag=ListInsert(List,h,e,s );
if(flag) cout<<"插入成功!!!"<<endl;
else cout<<"插入失败!!! "<<endl;

}

void Xiugai(SqList **List,int s)
{
ElemType e;
int i,h;
bool flag;
cout<<“请输入你要修改的序号”<<endl;
cin>>h;
if(h<=List[s]->length){
cout<<“请输入该站的名字”<<" "<<“请输入到下一站的距离”<<endl;
cin>>e.name>>e.kmxia;
e.num=h;
}
flag=ListModify(List,h,e,s);
if(flag) cout<<“修改成功!!!”<<endl;
else cout<<"修改失败!!! "<<endl;
}
void judge(SqList **List,int s,char name_1[],char name_2[],int &i_1,int &i_2)
{
int i;
for(i=0;i<List[s]->length;i++)
{
if(strcmp(List[s]->data[i].name,name_1)==0)
{
i_1=i;
}

    if(strcmp(List[s]->data[i].name,name_2)==0)
    {
        i_2=i;
    }

}

}
int Chaxun(SqList **List,int s,char name_1[20],char name_2[20])
{
if(s0)
{
cout<<“17路”<<endl;
}
if(s
1)
{
cout<<“51路”<<endl;
}
int sum_1=0,sum_2=0;
int station_1,station_2;
int i_1=-1,j_1=-1,i_2=-1,j_2=-1;
int i,j;
bool flag_1=false,flag_2=false;

if(List[s]->length==0)
{
    cout<<"未查询到该车辆!!!"<<endl;
    return 0;
}
judge(List,s,name_1,name_2,i_1,j_1);
if(i_1==-1&&j_1==-1)
{
    cout<<"未查询到站点信息!!!"<<endl;
    return 0;
}
if(i_1==-1)
{
    cout<<"未查找到你当前的站点!!!"<<endl;
    return 1;
}
if(j_1==-1)
{
    cout<<"未查找到你要到达的站点!!!"<<endl;
    return 2;
}
if(i_1<j_1)
{
    for(i=i_1;i<j_1;i++)
    {
       cout<<List[s]->data[i].name<<endl;
       sum_1+=List[s]->data[i].kmxia;
    }
    cout<<List[s]->data[i].name<<endl;
    station_1=j_1-i_1;
}
if(i_1>j_1)
{
    for(i=i_1;i>j_1;i--)
    {
        cout<<List[s]->data[i].name<<endl;
        sum_1+=List[s]->data[i].kmshang;
    }
    cout<<List[s]->data[i].name<<endl;
    station_1=i_1-j_1;
}
cout<<"两地相距"<<sum_1<<"千米"<<endl;
cout<<"两地有"<<station_1<<"站"<<endl;
return 3;

}
int Delete(SqList **List)
{
int k;
cout<<“不清空文件请输入:0 清空当前文件请输入:1 清空所有文件请输入:2 !!”<<endl;
cin>>k;
if(k0) return 0;
FILE *file_1,*file_2;
if(k
1)
{
file_1=fopen(“Buslin_1.txt”,“w”);
return 0;
}
if(k2)
{
file_1=fopen(“Buslin_1.txt”,“w”);
file_2=fopen(“Buslin_2.txt”,“w”);
return 0;
}
}
int huancheng(SqList **List,int s,char name_1[],char name_2[])
{
int sum=0,station=0;
int ii_1=-1,jj_1=-1,ii_2=-1,jj_2=-1,ii=-1,jj=-1;
int i,j,p=-1,q=-1;
int ss;
bool f=false,g=true;
judge(List,s,name_1,name_2,ii_1,jj_1);
judge(List,1-s,name_1,name_2,ii_2,jj_2);
if(ii_1!=-1&&jj_2!=-1)
{
ss=s;
ii=ii_1;
jj=jj_2;
}
if(ii_2!=-1&&jj_1!=-1)
{
ss=1-s;
ii=ii_2;
jj=jj_1;
}
if(ii
-1||jj==-1) return 1;
for(i=0;i<List[ss]->length;i++)
{
if(iii)
continue;
for(j=0;j<List[1-ss]->length;j++)
{
if(j
jj)
continue;
for(int iii=0;iii<strlen(List[ss]->data[i].name);iii++)
{
if(strlen(List[ss]->data[i].name)!=strlen(List[1-ss]->data[j].name))
{
g=false;
break;
}
else
{
if(List[ss]->data[i].name[iii]!=List[1-ss]->data[j].name[iii])
{
g=false;
break;
}
}
}
if(g)
{
p=i;
q=j;
f=true;
break;
}
g=true;
}
if(ftrue) break;
}
if(ss
0)
cout<<“请先坐 17路”<<endl;
if(ss1)
cout<<“请先坐 51路”<<endl;
if(ii<p){
station+=p-ii;
for(i=ii;i<p;i++)
{
sum+=List[ss]->data[i].kmxia;
cout<<List[ss]->data[i].name<<endl;
}
cout<<List[ss]->data[i].name<<endl;
}
if(ii>p){
station+=ii-p;
for(i=ii;i>p;i–)
{
sum+=List[ss]->data[i].kmshang;
cout<<List[ss]->data[i].name<<endl;
}
cout<<List[ss]->data[i].name<<endl;
}
if(ss
1)
cout<<“请再坐 17路”<<endl;
if(ss0)
cout<<“请再坐 51路”<<endl;
if(q<jj){
station+=jj-q;
for(j=q;j<jj;j++)
{
sum+=List[1-ss]->data[j].kmxia;
cout<<List[1-ss]->data[j].name<<endl;
}
cout<<List[1-ss]->data[j].name<<endl;
}
if(q>jj){
station+=q-jj;
for(j=q;j>jj;j–)
{
sum+=List[1-ss]->data[j].kmshang;
cout<<List[1-ss]->data[j].name<<endl;
}
cout<<List[1-ss]->data[j].name<<endl;
}
cout<<endl;
cout<<“两地相距”<<sum<<“千米”<<endl;
cout<<“两地有”<<station<<“站”<<endl;
return 2;
}
void menu_2(SqList **List,int s)
{
char c;
int a,b;
char name_1[20],name_2[20];
cout<<“请输入你当前的站点名称”<<endl;
cin>>name_1;
cout<<“请输入你要到达的站点名称”<<endl;
cin>>name_2;
a=Chaxun(List,s,name_1,name_2);
cout<<endl;
b=Chaxun(List,1-s,name_1,name_2);
cout<<endl;
if(a
0||b0||ab&&a!=3)
{
cout<<“无法换乘!!!”<<endl;
return ;
}
if(a1&&b2||a2||b1){
cout<<“你可以考虑换乘!!!”<<endl;
if(c==‘0’) return ;
int w=huancheng(List,s,name_1,name_2);
if(w==1)
cout<<“没有找到乘方案!!!”<<endl;
}
}

void menu()
{
printf(“\n");
printf("\t 公交管理系统\t\n");
printf("
\n”);
printf("\t0.退出界面\t\n");
printf(“\n");
printf("\t1.输入公交路线信息\t\n");
printf("
\n”);
printf("\t2.显示公交线路信息\t\n");
printf(“\n");
printf("\t3.增加公交车线路信息\t\n");
printf("
\n”);
printf("\t4.删除公交车线路信息\t\n");
printf(“\n");
printf("\t5.修改公交车线路信息\t\n");
printf("
\n”);
printf("\t6.查询公交车线路信息\t\n");
printf("*************************************\n");

}
int jiemian(SqList *L,int s)
{
int choice;
int z=1;
while(1)
{
menu();
printf(“请输入菜单序号:\n”);
scanf("%d",&choice);
if(0==choice) break;
switch(choice)
{
case 1:Route(L,s);break;
case 2:Xianshi(L,s);break;
case 3:Charu(L,s);break;
case 4:Delete(L);break;
case 5:Xiugai(L,s);break;
case 6:menu_2(L,s);break;
default:printf(“输入错误!!!\n”);break;
}
}
save(L,s);
}
int main()
{
SqList L[2];
int i;
int s;
char c;
L[0]=(SqList
)malloc(sizeof(SqList));
L[1]=(SqList
)malloc(sizeof(SqList));
if(load(L,0)){}
if(load(L,1)){}
while(1)
{
cout<<“请输入你要操作的路线”<<endl;
cout<<"(0) 17路;(1)51路"<<endl;
cin>>s;
jiemian(L,s);
cout<<“退出系统按0,继续操作请按其他键!!!”<<endl;
cin>>c;
if(c==‘0’) break;
}

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值