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

📄

📁 一个数据结构的课程设计文件,VC++编写.内容为:交通咨询
💻
📖 第 1 页 / 共 2 页
字号:
#define MAX_VERTEX_NUM 18
#define NULL 0
#define MAX_ARC_SIZE 100
#define MAX_ROUTE_NUM 5
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#define False 0
#define True 1
#define INFINITY 10000
typedef struct
{int number;
 float expenditure;
 int begintime[2];
 int arrivetime[2];
}Vehide;
typedef struct
{Vehide stata[MAX_ROUTE_NUM];
 int last;
}infolist;
typedef struct ArcNode
{int adjvex;
 struct ArcNode *nextarc;
 infolist info;
}ArcNode;//邻接表表接点
typedef struct VNode
{char cityname[10];
 ArcNode *planefirstarc,*trainfirstarc;
}VNode,AdjList[MAX_VERTEX_NUM];//邻接表头接点
typedef struct
{AdjList vertices;
 int vexnum,planearcnum,trainarcnum;
}ALGraph;//邻接表表示的图的信息
typedef struct Node
{int adjvex;
 int route;
 struct Node *next;
}Node;
typedef struct QNode
{int adjvex;
 struct QNode *next;
}QNode;
struct arc
{int co;
 char vt[10];
 char vh[10];
 int bt[2];
 int at[2];
 float mo;
}a[MAX_ARC_SIZE];
char city[MAX_VERTEX_NUM][10];
main()
  //显示程序功能选择界面
{ALGraph G;
 int i;
 printf("\t\t\t\t全国铁路交通咨询系统\n\n");
 printf("您可进行如下操作:\n");
 printf("\t\t1=管理员管理\t 2=用户咨询\t3=显示交通系统\t    4=退出\n");
 printf("\n\n注意:每次开启后请先初始化系统(路径:管理员管理-->初始化交通系统)\n");
 printf("\n请选择:");
 scanf("%d",&i);
 getchar();
 while(i!=4)
 {switch(i)
  {case 1:Administer(&G);break;
   case 2:UserDemand(G);break;
   case 3:PrintGraph(&G);break;
  }
  printf("\n您可进行如下操作:\n");
  printf("\t\t1=管理员管理\t 2=用户咨询\t3=显示交通系统\t    4=退出\n");
  printf("请选择:");
  scanf("%d",&i);
  getchar();
 }
}
Administer(ALGraph *G)
//显示管理员管理项目选择界面
{int i;
 printf("\n请选择管理项目:\n");
 printf("\t\t1=初始化交通系统\t2=城市编辑\t3=返回上一级菜单\n");
 printf("请选择:");
 scanf("%d",&i);
 getchar();
 while(i!=3)
 {switch(i)
  {case 1:initgraph(G);
          break;
   case 2:cityedit(G);
          break;
  }
  printf("\n请选择管理项目:\n");
  printf("\t\t1=初始化交通系统\t2=城市编辑\t3=返回上一级菜单\n");
  printf("请选择:");
  scanf("%d",&i);
  getchar();
 }
}
initgraph(ALGraph *G)
//初始化交通系统方式选择界面
{int i;
 printf("\n请选择初始化方式:\n");
 printf("\t\t1=键盘\t\t2=文档\n");
 printf("请选择:");
 scanf("%d",&i);
 getchar();
 switch(i)
 {case 1:createcityfile();
         createtrainfile();
         CreateGraph(G);
         break;
  case 2:CreateGraph(G);
         break;
 }
}
createcityfile()
//创建城市名称文档
{int i=0;
 int j;
 char flag='y';
 FILE *fp;
 printf("\n请输入城市名称的信息:\n");
 while(flag=='y'||flag=='Y')
 {printf("城市名称:");
  gets(city[i]);
  i++;
  printf("继续输入?(Y/N)");
  scanf("%c",&flag);
  getchar();
 }
 printf("\n");
 if((fp=fopen("city.txt","wb"))==NULL)
 {printf("无法打开文件!\n");
  return;
 }
 for(j=0;j<i;j++)
  fprintf(fp,"%10s",city[j]);
 fclose(fp);
}
createtrainfile()
//创建列车车次文档
{int code,bt[2],at[2];
 float money;
 int i;
 int count;
 char vt[10],vh[10],flag;
 FILE *fp;
 flag='y';
 count=0;
 while(flag=='y'||flag=='Y')
 {printf("请输入列车车次的信息:\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();
  }
  a[count].co=code;
  strcpy(a[count].vt,vt);
  strcpy(a[count].vh,vh);
  a[count].bt[0]=bt[0];
  a[count].bt[1]=bt[1];
  a[count].at[0]=at[0];
  a[count].at[1]=at[1];
  a[count].mo=money;
  count++;
  printf("继续输入?(Y/N)");
  scanf("%c",&flag);
  getchar();
  printf("\n");
 }
 if((fp=fopen("train.txt","wb"))==NULL)
  printf("\n无法打开文件!\n");
 fprintf(fp,"%d",count);
 for(i=0;i<count;i++)
  if(fwrite(&a[i],sizeof(struct arc),1,fp)!=1)
   printf("\n文件写入错误!\n");
 fclose(fp);
}
int LocateVertex(ALGraph *G,char *v)
//城市名在交通系统中定位操作
{int j,k;
 j=-1;
 for(k=0;k<G->vexnum;k++)
  if(strcmp(G->vertices[k].cityname,v)==0)
  {j=k;
   break;
  }
 return(j);
}
CreateGraph(ALGraph *G)
//用city,train两个文档创建城市交通系统
 {int i,j,k;
 int arc_num;
 int count2;//count1;
 int m,t;
 ArcNode *p,*q;
 FILE *fp;
 i=0;
 if((fp=fopen("city.txt","rb"))==NULL)
 {printf("\n无法打开文件!\n");
  return;
 }
 while(!feof(fp))
 {fscanf(fp,"%10s",city[i]);
  i++;
 }
 fclose(fp);
 j=0;
 while(j<i)
 {strcpy(G->vertices[j].cityname,city[j]);
  G->vertices[j].planefirstarc=NULL;
  G->vertices[j].trainfirstarc=NULL;
  j++;
 }
 G->vexnum=i;
 if((fp=fopen("train.txt","rb"))==NULL)
 {printf("\n无法打开文件!\n");
  return;
 }
 k=0;
 fscanf(fp,"%d",&count2);
 while(k<count2)
 {if(fread(&a[k],sizeof(struct arc),1,fp)!=1)
   printf("\n文件读入错误!\n");
  k++;
 }
 fclose(fp);
 k=0;
 arc_num=0;
 while(k<count2)
 {i=LocateVertex(G,a[k].vt);
  j=LocateVertex(G,a[k].vh);
  q=G->vertices[i].trainfirstarc;
  m=0;
  while(q!=NULL)
  {if(q->adjvex==j)
   {t=q->info.last+1;
    q->info.stata[t].number=a[k].co;
    q->info.stata[t].expenditure=a[k].mo;
    q->info.stata[t].begintime[0]=a[k].bt[0];
	q->info.stata[t].begintime[1]=a[k].bt[1];
    q->info.stata[t].arrivetime[0]=a[k].at[0];
	q->info.stata[t].arrivetime[1]=a[k].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=a[k].co;
   p->info.stata[0].expenditure=a[k].mo;
   p->info.stata[0].begintime[0]=a[k].bt[0];
   p->info.stata[0].begintime[1]=a[k].bt[1];
   p->info.stata[0].arrivetime[0]=a[k].at[0];
   p->info.stata[0].arrivetime[1]=a[k].at[1];
   p->info.last=0;
   p->nextarc=G->vertices[i].trainfirstarc;
   G->vertices[i].trainfirstarc=p;
   arc_num++;
  }
  k++;
 }
 G->trainarcnum=arc_num;
}
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("train.txt","wb"))==NULL)
 {printf("\n无法打开文件!\n");
  return;
 }
 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); 
}
cityedit(ALGraph *G)
//显示城市编辑项目选择界面
{int i;
 char q;
 printf("\n请选择城市编辑项目:\n");
 printf("\t\t1=增加城市\t\t2=删除城市\n");
 printf("请选择:");
 scanf("%d",&i);
 getchar();
 if(i==1)
  EnterVertex(G);
 if(i==2)
  DeleteVertex(G);
}
EnterVertex(ALGraph *G)
//增加城市

⌨️ 快捷键说明

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