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

📄 交通咨询.txt

📁 交通管理系统
💻 TXT
📖 第 1 页 / 共 4 页
字号:
 G->trainarcnum=arc_num;
}

int save(ALGraph *G)
/*
  保存城市交通系统到相应的文档
*/
{
 int i,j,k,t;
 ArcNode *q;
 FILE *fp;
 j=0;
 while(j<G->vexnum)
 {
  strcpy(city[j],G->vertices[j].cityname);
  j++;
 }
 i=0;
 if((fp=fopen("city.txt","wb"))==NULL)
printf("\n错误,无法打开文件!\n");
 while(i<G->vexnum)
 {
  fprintf(fp,"%10s",city[i]);
  i++;
 }
 fclose(fp);
 k=0;
 for(i=0;i<G->vexnum;i++)
 {
  q=G->vertices[i].planefirstarc;
  while(q!=NULL)
  {
   for(t=0;t<=q->info.last;t++)
   {
     strcpy(a[k].vt,G->vertices[i].cityname);
     strcpy(a[k].vh,G->vertices[q->adjvex].cityname);
     a[k].co=q->info.stata[t].number;
     a[k].mo=q->info.stata[t].expenditure;
     a[k].bt[0]=q->info.stata[t].begintime[0];
     a[k].bt[1]=q->info.stata[t].begintime[1];
     a[k].at[0]=q->info.stata[t].arrivetime[0];
     a[k].at[1]=q->info.stata[t].arrivetime[1];
    k++;
   }
   q=q->nextarc;
  }
 }
 if((fp=fopen("plane.txt","wb"))==NULL)
 {
  printf("\n无法打开文件!\n");
  return 0;
 }
 i=0;
 fprintf(fp,"%d",k);
 while(i<k)
 {
  if(fwrite(&a[i],sizeof(struct arc),1,fp)!=1)
  printf("\n文件写入错误!\n");
  i++;
 }
 fclose(fp);
 k=0;
 for(i=0;i<G->vexnum;i++)
 {
  q=G->vertices[i].trainfirstarc;
  while(q!=NULL)
  {
    for(t=0;t<=q->info.last;t++)
   {
    strcpy(a[k].vt,G->vertices[i].cityname);
    strcpy(a[k].vh,G->vertices[q->adjvex].cityname);
    a[k].co=q->info.stata[t].number;
    a[k].mo=q->info.stata[t].expenditure;
    a[k].bt[0]=q->info.stata[t].begintime[0];
    a[k].bt[1]=q->info.stata[t].begintime[1];
    a[k].at[0]=q->info.stata[t].arrivetime[0];
    a[k].at[1]=q->info.stata[t].arrivetime[1];
    k++;    
   }
   q=q->nextarc;
  }
 }
 if((fp=fopen("train.txt","wb"))==NULL)
 {
  printf("\n无法打开文件!\n");
  return 0;
 }
 i=0;
 fprintf(fp,"%d",k);
 while(i<k)
 {
  if(fwrite(&a[i],sizeof(struct arc),1,fp)!=1)
  printf("\n文件写入错误!\n");
  i++;
 }
 fclose(fp); 
 return 1;
}

void cityedit(ALGraph *G)
/*
  显示城市编辑项目选择界面
*/
{
 int i;
 printf("\n请选择城市编辑项目:\n");
 printf("1=增加城市\n2=删除城市\n");
 printf("选择?");
 scanf("%d",&i);
 getchar();
 if(i==1)
  EnterVertex(G);
 if(i==2)
  DeleteVertex(G);
}

void EnterVertex(ALGraph *G)
/*
  增加城市
*/
{char v[10],c;
 int i;
 printf("\n请输入新增城市的名称:");
 gets(v);
 i=LocateVertex(G,v);
 if(i>=0&&i<G->vexnum)
 {
  printf("\n错误!此城市已存在\n");
  return;
 }
 else
 {
  printf("\n确认?(Y/N)");
  c=getchar();
  getchar();
  if(c=='Y'||c=='y')
  {
   i=G->vexnum;
   strcpy(G->vertices[i].cityname,v);
   G->vertices[i].planefirstarc=NULL;
   G->vertices[i].trainfirstarc=NULL;
   G->vexnum=i+1;
   save(G);
  }
  else
   return;
 }
}

void DeleteVertex(ALGraph *G) // G是程序头部定义的结构体
/*
  删除城市
*/
{ 
 int i,j,k,n;
 char v[10],c;
 ArcNode *p,*q,*m;
 printf("\n请输入删除的城市:"); //提示"输入删除城市名"
 gets(v);
 printf("\n确认?(Y/N)");  //提示"是否确定要删除(Y/N)"
 c=getchar();
 getchar();
 if(c=='Y'||c=='y')
 {
  n=0;           //0是记数标志,控制循环次数
  while(n<G->vexnum&&strcmp(G->vertices[n].cityname,v)!=0) //n<图G表头接点总个数&&图G的存储城市名与v不同,G表头结点总个数比实际大1
   n++; //记数值n+1
  if(n==G->vexnum)  //n==图G表头结点总个数
   printf("\n错误!无法找到此城市!\n"); //提示"无法找到此城市"
  else
  {
   i=LocateVertex(G,v);  //利用G函数找到此城市名所处在G中位置
   p=G->vertices[i].planefirstarc;
   while(p!=NULL)
   {
    q=p;
    p=p->nextarc;
    free(q);  //删除从此结点出发的所有航班弧
   }
   p=G->vertices[i].trainfirstarc;
   while(p!=NULL)
   {
    q=p;
    p=p->nextarc;
    free(q);    //删除从此结点出发的所有列车弧
   }
   for(j=i;j<G->vexnum-1;j++)
   {
    strcpy(G->vertices[j].cityname,G->vertices[j+1].cityname); //将G第j个结点的信息依前移1位
    G->vertices[j].planefirstarc=G->vertices[j+1].planefirstarc;
    G->vertices[j].trainfirstarc=G->vertices[j+1].trainfirstarc;
   }
   G->vertices[j].planefirstarc=NULL;  //将G第j个结点的信息置空
   G->vertices[j].trainfirstarc=NULL;
   for(k=0;k<G->vexnum-1;k++) //以下是删除所有指向此结点的航班弧
   {
    p=G->vertices[k].planefirstarc;
    while(p!=NULL)
    {
     if(p->adjvex>i)
     {
      p->adjvex=p->adjvex-1;
      q=p;
      p=p->nextarc; //p指向下一条飞机弧
     }
     else if(p->adjvex==i) //该弧指向的顶点位置(p->adjvex )== i
     { 
       if(p==G->vertices[k].planefirstarc) //p指向图G中k结点的第一条飞机弧
      {
       m=p;
       G->vertices[k].planefirstarc=p->nextarc; //将图G中k结点的第二条飞机弧改为第一弧
       p=p->nextarc; //p指向下一条飞机弧
       free(m);  //释放(m)
      }
      else
      {
       q->nextarc=p->nextarc;  //将p的下一条弧赋给q的下一条弧
       m=p;
       p=p->nextarc;  //p指向下一条飞机弧
       free(q);  //释放(q)
      }
     }
     else
     {
      q=p;
      p=p->nextarc;  //p指向下一条飞机弧
     }
    }
   }
   for(k=0;k<G->vexnum-1;k++)  ///*以下是删除所有指向此结点的列车弧*/
   {
    p=G->vertices[k].trainfirstarc; //p指向图G中k结点的第一条列车弧
    while(p!=NULL)
    {
      if(p->adjvex>i)  //该弧指向的顶点位置(p->adjvex)>i
     {
      p->adjvex=p->adjvex-1; //将该弧指向顶点位置-1
      q=p;
      p=p->nextarc;  //p指向下一条列车弧
     }
     else if(p->adjvex==i)  //该弧指向的顶点位置(p->adjvex)==i
     {
       if(p==G->vertices[k].trainfirstarc)//p指向图G中k结点的第一条列车
      {
       m=p;
       G->vertices[k].trainfirstarc=p->nextarc;  //将图G中k结点的第二条列车弧改为第一弧
       p=p->nextarc;
       free(m);
      }
      else
      {
	q->nextarc=p->nextarc;
        m=p;
        p=p->nextarc;
        free(q);
      }
     }
     else
     {
	q=p;
        p=p->nextarc;
     }
    }
   }
  }
  G->vexnum--;
  save(G);
 }
 else
  return;
}

void flightedit(ALGraph *G)
/*
  飞机航班编辑项目选择界面
*/
{int i;
// char q;
 printf("\n请选择飞机航班编辑项目:\n");
 printf("1=新增航班\n2=删除航班\n");
 printf("选择?");
 scanf("%d",&i);
 getchar();
 if(i==1)
  EnterplaneArc(G);
 if(i==2)
  DeleteplaneArc(G);
}

void trainedit(ALGraph *G)
/* 
  列车车次编辑项目选择界面
*/
{int i;
 //char q;
 printf("\n请选择列车车次编辑项目:\n");
 printf("1=新增车次\n2=删除车次\n");
 printf("选择?");
 scanf("%d",&i);
 getchar();
 if(i==1)
  EntertrainArc(G);
 if(i==2)
  DeletetrainArc(G);
}

void EnterplaneArc(ALGraph *G)
/*
  增加飞机航班
*/
{int i,j,bt[2],at[2];
 int code;
 float money;
 int m,t;
 char vt[10],vh[10],c;
 ArcNode *p,*q;
 printf("\n请输入新增飞机航班的信息:\n");
 printf("飞机航班编号:");
 scanf("%d",&code);
 getchar();
 printf("起始城市:");
 gets(vt);
 printf("目的城市:");
 gets(vh);
 printf("航班费用:");
 scanf("%f",&money);
 getchar();
 printf("起飞时间:");
 scanf("%d:%d",&bt[0],&bt[1]);
 getchar();
 while(bt[0]<0||bt[0]>=24||bt[1]<0||bt[1]>=60)
 {
  printf("\n时间输入有误,请重新输入\n");
  scanf("%d:%d",&bt[0],&bt[1]);
  getchar();
 }
 printf("到达时间:");
 scanf("%d:%d",&at[0],&at[1]);
 getchar();
 while(at[0]<0||at[0]>=24||at[1]<0||at[1]>=60)
 {
  printf("\n时间输入有误,请重新输入\n");
  scanf("%d:%d",&at[0],&at[1]);
  getchar();
 }
 printf("\n确认?(Y/N)");
 c=getchar();
 getchar();
 if(c=='Y'||c=='y')
 {
  i=LocateVertex(G,vt);
  j=LocateVertex(G,vh);
  if(i==-1)
  {
   printf("\n错误!无法找到起始城市\n");
   return;
  }
  if(j==-1)
  {
   printf("\n错误!无法找到到达城市\n");
   return;
  }
  q=G->vertices[i].planefirstarc;
  m=0;
  while(q!=NULL)
  {
   if(q->adjvex==j)
   {
    t=q->info.last+1;
    q->info.stata[t].number=code;
    q->info.stata[t].expenditure=money;
    q->info.stata[t].begintime[0]=bt[0];
    q->info.stata[t].begintime[1]=bt[1];
    q->info.stata[t].arrivetime[0]=at[0];
    q->info.stata[t].arrivetime[1]=at[1];
    q->info.last=t;
    m=1;
    break;
   }
   q=q->nextarc;
  }
  if(m==0)
  {
   p=(ArcNode*)malloc(sizeof(ArcNode));
   p->adjvex=j;
   p->info.stata[0].number=code;
   p->info.stata[0].expenditure=money;
   p->info.stata[0].begintime[0]=bt[0];
   p->info.stata[0].begintime[1]=bt[1];
   p->info.stata[0].arrivetime[0]=at[0];
   p->info.stata[0].arrivetime[1]=at[1];
   p->info.last=0;
   p->nextarc=G->vertices[i].planefirstarc;
   G->vertices[i].planefirstarc=p;
   G->planearcnum++;
  }
  save(G);
 }
 else
  return;
}
void EntertrainArc(ALGraph *G)
/*
  增加列车车次
*/
{int i,j,bt[2],at[2];
 int code;
 float money;
 int m,t;
 char vt[10],vh[10],c;
 ArcNode *p,*q;
 printf("\n请输入新增列车车次的信息:\n");
 printf("列车车次编号:");
 scanf("%d",&code);
 getchar();
 printf("起始城市:");
 gets(vt);
 printf("目的城市:");
 gets(vh);
 printf("车次费用:");
 scanf("%f",&money);
 getchar();
 printf("发车时间:");
 scanf("%d:%d",&bt[0],&bt[1]);
 getchar();
 while(bt[0]<0||bt[0]>=24||bt[1]<0||bt[1]>=60)
 {
  printf("\n时间输入有误,请重新输入\n");
  scanf("%d:%d",&bt[0],&bt[1]);
  getchar();
 }
 printf("到达时间:");
 scanf("%d:%d",&at[0],&at[1]);
 getchar();
 while(at[0]<0||at[0]>=24||at[1]<0||at[1]>=60)
 {
  printf("\n时间输入有误,请重新输入\n");
  scanf("%d:%d",&at[0],&at[1]);
  getchar();
 }
 printf("\n确认?(Y/N)");
 c=getchar();
 getchar();
 if(c=='Y'||c=='y')
 {
  i=LocateVertex(G,vt);
  j=LocateVertex(G,vh);
  if(i==-1)
  {
   printf("\n错误!无法找到起始城市\n");
   return;
  }
  if(j==-1)
  {
   printf("\n错误!无法找到到达城市\n");
   return;
  }
  q=G->vertices[i].trainfirstarc;
  m=0;
  while(q!=NULL)
  {
   if(q->adjvex==j)
   {
    t=q->info.last+1;
    q->info.stata[t].number=code;
    q->info.stata[t].expenditure=money;
    q->info.stata[t].begintime[0]=bt[0];
    q->info.stata[t].begintime[1]=bt[1];
    q->info.stata[t].arrivetime[0]=at[0];
    q->info.stata[t].arrivetime[1]=at[1];
    q->info.last=t;
    m=1;
    break;
   }
   q=q->nextarc;
  }
  if(m==0)
  {
   p=(ArcNode*)malloc(sizeof(ArcNode));
   p->adjvex=j;
   p->info.stata[0].number=code;
   p->info.stata[0].expenditure=money;
   p->info.stata[0].begintime[0]=bt[0];
   p->info.stata[0].begintime[1]=bt[1];
   p->info.stata[0].arrivetime[0]=at[0];
   p->info.stata[0].arrivetime[1]=at[1];
   p->info.last=0;
   p->nextarc=G->vertices[i].trainfirstarc;
   G->vertices[i].trainfirstarc=p;
   G->trainarcnum++;
  }
  save(G);
 }
 else
  return;
}

int DeleteplaneArc(ALGraph *G)
/*
  删除飞机航班
*/
{
 int i,j;
 int code;
 char vt[10],vh[10],c;
 int n;
 int k;
 ArcNode *p,*q;
 printf("\n请输入删除飞机航班的信息:\n");
 printf("飞机航班的编号:");
 scanf("%d",&code);
 getchar();
 printf("起始城市:");
 gets(vt);
 printf("目的城市:");
 gets(vh);
 printf("\n确认?(Y/N)");
 c=getchar();
 getchar();
 if(c=='Y'||c=='y')

⌨️ 快捷键说明

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