全国交通咨询模拟系统

第一天写了400行代码,没写完

#include<stdio.h>
#include<stdlib.h>
#include <string>
#include <iostream>
//需要包含cstring的字符串
#include <cstring>
#define Max 100
#define wuqiong 0
//清空文件要包含的函数 
#include <fcntl.h>
#include <unistd.h>
using namespace std;
typedef struct{
	int vexnum;
	int arcnum;
	int list[Max][Max];
	int list2[Max][Max];
	string vex[Max];
}amgraph;
//邻接矩阵的dfs算法
typedef int Boolean;
Boolean visited[Max];
//函数的声明 
void init(amgraph &G);
void ma(void);
void guanliyuan(void);
int locate(amgraph G,char a);
void search(amgraph G);
void addcity(amgraph &G);
void delectcity(amgraph G);
void user(void);
void dij(amgraph &G);
void dij2(amgraph &G);
void creat(amgraph &G,int v);
void addroad(amgraph G);
void delectroad(amgraph G);
void init(amgraph &G){
	FILE *fpdot; 
	FILE *fpxian;
	FILE *fpcity;
	FILE *fp3;
	//"C:\Users\蒋雨铭\Desktop\数据结构\1.txt"
	int i;
	string a[Max];
	int info1;
	int info2;
	int q;
	int w;
	int j;
	int re;
	string b[Max];
	int inf1[Max];
	int inf2[Max];
	int num;
	if((fpdot=fopen("C:\\Users\\蒋雨铭\\Desktop\\数据结构\\txt\\dot.txt","r"))==NULL){
		printf("error\n");
		exit(0);
	}
	if((fpxian=fopen("C:\\Users\\蒋雨铭\\Desktop\\数据结构\\txt\\xian.txt","r"))==NULL){
		printf("error\n");
		exit(0);
	}
	if((fpcity=fopen("C:\\Users\\蒋雨铭\\Desktop\\数据结构\\txt\\city.txt","r"))==NULL){
		printf("error\n");
		exit(0);
	}
	if((fp3=fopen("C:\\Users\\蒋雨铭\\Desktop\\数据结构\\txt\\map.txt","r"))==NULL){
		printf("error\n");
		exit(0);
	}
	fscanf(fpdot,"%d",&G.vexnum);
	fscanf(fpxian,"%d",&G.arcnum);
	//printf("%d",G.vexnum);
	for(i=0;i<G.vexnum;i++){
		fscanf(fpcity,"%s",G.vex[i].c_str());
	} 
//	for(i=0;i<G.vexnum;i++){
//		printf("%s ",G.vex[i].c_str());
//	}
	for(i=0;i<G.vexnum;i++){
		for(j=0;j<G.vexnum;j++){
			G.list[i][j]=wuqiong;
		}
	}
	for(i=0;i<G.arcnum;i++){
		fscanf(fp3,"%s%s%d%d",a[i].c_str(),b[i].c_str(),&inf1[i],&inf2[i]);
	}

	for(i=0;i<G.arcnum;i++){
		for(j=0;j<G.vexnum;j++){
			re=strcmp(a[i].c_str(),G.vex[j].c_str());//不知道为啥作比较只能用这个方式做比较 
			if(re==0) q=j;
		}
		//printf("%d\n",q);
		for(j=0;j<G.vexnum;j++){
			re=strcmp(b[i].c_str(),G.vex[j].c_str());
			if(re==0) w=j;
		}
		//printf("%d\n",q);
		G.list[q][w]=inf1[i];
		G.list[w][q]=inf1[i];
		G.list2[q][w]=inf2[i];
		G.list2[w][q]=inf2[i];
	}
	//printf("%d",G.list[1][1]);
	//printf("%d",G.vexnum);
//	for(i=0;i<G.vexnum;i++){
//		for(j=0;j<G.vexnum;j++){
//			printf("%d ",G.list[i][j]);
//		}
//		printf("\n");
//	}
    fclose(fpdot);
    fclose(fpcity);
    fclose(fpxian);
    fclose(fp3);
}
void addcity(amgraph &G){
//	int a;
	FILE *fpdot; 
	FILE *fpcity; 
	char string[16] = {0};
	char string2[16]={0};
	if((fpdot=fopen("C:\\Users\\蒋雨铭\\Desktop\\数据结构\\txt\\dot.txt","r+"))==NULL){
		printf("error\n");
		exit(0);
	}
	if((fpcity=fopen("C:\\Users\\蒋雨铭\\Desktop\\数据结构\\txt\\city.txt","a"))==NULL){//追加的方式 
		printf("error\n");
		exit(0);
	}
	 printf("请输入你想添加的城市\n");
	scanf("%s",&string2);

	fscanf(fpdot,"%d",&G.vexnum);
	fseek(fpdot,0, SEEK_SET);
	G.vexnum+=1;
	fputs(" ",fpcity);
	fputs(string2,fpcity);
	itoa(G.vexnum,string,10);
   fputs(string, fpdot);
  // puts(string); 
   fclose(fpdot);
   fclose(fpcity);
}
void delectcity(amgraph G){
	int i;
	int re;
	int flag=1;
	int j;
	int k=0; 
	int num;
	FILE *fpdot; 
	FILE *fpcity1;
	FILE *fpcity;
	char string[16] = {0};
	char string2[16]={0};
	if((fpdot=fopen("C:\\Users\\蒋雨铭\\Desktop\\数据结构\\txt\\dot.txt","r+"))==NULL){
		printf("error\n");
		exit(0);
	}
	if((fpcity1=fopen("C:\\Users\\蒋雨铭\\Desktop\\数据结构\\txt\\city.txt","r+"))==NULL){
		printf("error\n");
		exit(0);
	}
	if((fpcity=fopen("C:\\Users\\蒋雨铭\\Desktop\\数据结构\\txt\\city.txt","w+"))==NULL){
		printf("error\n");
		exit(0);
	}
	printf("请输入你要删除的城市\n");
	scanf("%s",&string2);
	//读取 
	fscanf(fpdot,"%d",&G.vexnum);
	fseek(fpdot,0,SEEK_SET);
	for(i=0;i<G.vexnum;i++){
		fscanf(fpcity1,"%s",G.vex[i].c_str());
	}
//	for(i=0;i<G.vexnum;i++){
//		printf("%s ",G.vex[i].c_str());
//	}用city1才能正确读出 
	//判断 
	for(i=0;i<G.vexnum;i++){
		re=strcmp(string2,G.vex[i].c_str());
		if(re==0){
			flag=1;
			num=i; 
		}
	}	
	if(flag==1){
		printf("删除成功\n");
		//对dot文件进行操作 
		G.vexnum=G.vexnum-1;
			printf("%d\n",G.vexnum);
			itoa(G.vexnum,string,10);
			//fputs(string,fpdot);
		//对city文件进行操作
		for(j=0;j<num;j++) {
			G.vex[k++]=G.vex[j];
		}
		for(j=num+1;j<G.vexnum+1;j++){
			G.vex[k++]=G.vex[j];
		}
//		for(i=0;i<G.vexnum;i++){
//			printf("%s ",G.vex[i].c_str());
//		}
        //先清空文件 
	
        
//		for(i=0;i<G.vexnum;i++){
//			printf("%s ",G.vex[i].c_str());
//		}
        //然后再打印内容
//		 for(i=0;i<G.vexnum-1;i++){
//		 	fputs(G.vex[i].c_str(),fpcity);
//		 	fputs(" ",fpcity);
//		 } 
//        fputs(G.vex[G.vexnum].c_str(),fpcity);
		fclose(fpcity);
		fclose(fpcity1);
	}
	else{
		printf("删除失败\n");
	}
   fclose(fpdot);
   
}
void addroad(amgraph G){
	FILE *fpmap;
	FILE *fpxian;
	char string[16]={0};
	char city1[16]={0};
	char city2[16]={0};
	int info1;
	int info2; 
	char in1[16]={0};
	char in2[16]={0};
	if((fpmap=fopen("C:\\Users\\蒋雨铭\\Desktop\\数据结构\\txt\\map.txt","a"))==NULL){
		printf("error\n");
		exit(0);
	}
	if((fpxian=fopen("C:\\Users\\蒋雨铭\\Desktop\\数据结构\\txt\\xian.txt","r+"))==NULL){
		printf("error\n");
		exit(0);
	}
	//对xian文本进行修改
	fscanf(fpxian,"%d",&G.arcnum) ;
	fseek(fpxian,0,SEEK_SET);
	G.arcnum+=1;
	itoa(G.arcnum,string,10);
	fputs(string,fpxian);
	//对map文本进行修改
	 printf("请输入第一个城市结点\n");
	 scanf("%s",&city1);
	 printf("请输入第二个城市结点\n");
	 scanf("%s",&city2);
	 printf("请输入路程权值\n");
	 scanf("%d",&info1);
	 printf("请输入费用权值\n");
	 scanf("%d",&info1);
	 itoa(info1,in1,10);
	 itoa(info2,in2,10);
	 fputs("\n",fpmap);
	 fputs(city1,fpmap);
	 fputs(" ",fpmap);
	 fputs(city2,fpmap);
	 fputs(" ",fpmap);
	 fputs(in1,fpmap);
	 fputs(" ",fpmap);
	 fputs(in2,fpmap);
	fclose(fpmap);
	fclose(fpxian);
}
void creat(amgraph &G,int v){
	int j;
	visited[i]=TRUE;
	printf("%s->",G.vex[i]) ;
	for(j=0;j<G.vexnum;j++){
		if(G.list[i][j]==1&&!visited[j])
		   creat(G,j); 
	}
}
void search(amgraph G){
	FILE *fpcity;
	FILE *fpdot;
	FILE *fpxian; 
//	FILE *fp3;
	//"C:\Users\蒋雨铭\Desktop\数据结构\1.txt"
	int i;
	int num;
	if((fpcity=fopen("C:\\Users\\蒋雨铭\\Desktop\\数据结构\\txt\\city.txt","r"))==NULL){
		printf("error\n");
		exit(0);
	}
	if((fpdot=fopen("C:\\Users\\蒋雨铭\\Desktop\\数据结构\\txt\\dot.txt","r"))==NULL){
		printf("error\n");
		exit(0);
	}
	if((fpxian=fopen("C:\\Users\\蒋雨铭\\Desktop\\数据结构\\txt\\xian.txt","r"))==NULL){
		printf("error\n");
		exit(0);
	}
	fscanf(fpdot,"%d",&G.vexnum);
	fscanf(fpxian,"%d",&G.arcnum);
	//printf("%d",G.vexnum);
	for(i=0;i<G.vexnum;i++){
		fscanf(fpcity,"%s",G.vex[i].c_str());
	} 
		for(i=0;i<G.vexnum;i++){
		printf("%s ",G.vex[i].c_str());
	}
	printf("\n");
    fclose(fpdot);
    fclose(fpxian);
    fclose(fpcity);
}
void dij(amgraph G){
	
}
void dij2(amgraph G){
	
}
void addroad(){
	FILE *fp; 
	char a[10];
	char b[10];
	int c;
	int d;
	gets(a);
	if((fp=fopen("C:\\Users\\蒋雨铭\\Desktop\\数据结构\\map2.txt","r+"))==NULL){
		printf("error\n");
		exit(0);
	}
	fputs(a, stdout);
	fclose(fp);
}
void ma(){
	int choose=-1;
	while(choose!=0){
	printf("****************welcome to 全国交通管理系统***********************\n");
	printf("****************1.用户******2.管理员*****3.退出*******************\n");
	printf("******************************************************************\n");
	scanf("%d",&choose);
			switch(choose){
				case 1:user();
				break;
				case 2:guanliyuan(); break;
			}
	}
	
}  
void guanliyuan(){
	amgraph G;
	//int v=0;
	char a[10];
	int choose=-1;
	while(choose!=0){
		
	printf("******************************************************************\n");
	printf("请输入你的操作指令:1.创建交通网络 2.查看当前网络已有的城市 3.添加城市 4.删除城市 5.添加指定交通路线 6.删除指定交通路线 7.返回主界面*******************\n");
	printf("******************************************************************\n");
	scanf("%d",&choose);
			switch(choose){
				case 1:init(G);
				 break;
				case 2:search(G);
				//printf("hh");
				break;
				case 3:
			
					addcity(G);
				break;
				case 4:
					delectcity(G);
				break;
				case 5:
					addroad(G);
				break;
				case 6:
					//delectroad(G);
				break;
				case 7:ma(); break;
			}
	}
}
void user(){
	amgraph G;
	int v;
	int choose=-1;
	while(choose!=0){
	printf("******************************************************************\n");
	printf("请输入你的操作指令:1.加载交通网络 2.查询距离最短路线 3.费用最少路线 4.中转次数最少路线 5.返回主界面*******************\n");
	printf("******************************************************************\n");
	scanf("%d",&choose);
			switch(choose){
				case 1:
					v=1;
					printf("请输入起始点\n");
					printf("请输入结束点\n"); 
					creat(G,v);
					break;
				case 2:
					
				break;
				case 3:
					//dij(G);
				break;
				case 4:
				//	dij2(G);
				break;
				case 5:ma();
				break;
			}
	}
}
int main(){
	ma();
} 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
题目描述:处于对不同目的的旅客对交通工具有不同的要求。例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则希望旅费尽可能省,而老年旅客则要求中转次数最少。编制一个全国城市间的交通咨询程序为旅客提供两种或三种最优决策的交通咨询。 功能要求及说明: (1)提供对城市信息进行编辑(如:添加或删除)的功能。 (2)城市之间有两种交通工具:火车和飞机。提供对列车时刻表和飞机航班进行编辑(增设或删除)的功能。 (3)提供两种最优决策:最快到达或最省钱到达。全程只考虑一种交通工具。 (4)旅途中耗费的总时间应该包括中转站的等候时间。 (5)咨询以用户和计算机的对话方式进行。由用户输入起始站、终点站、最优决策原则和交通工具,输出信息:最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。 【实现提示】 (1)对全国城市交通图和班车时刻表及飞机航班表的编辑,应该提供文件形式输入和键盘输入两种方式。飞机航班表的信息应包括:起始站的出发时间、终点站的到达时间和票价;列车时刻表则需根据交通图给出各个路段的详细信息,例如:对于从北京到上海的火车,需给出北京至天津、天津至徐州及徐州至各段的出发时间、到达时间和票价信息。 (2)以邻接表作交通图的存储结构,表示边的结点内除含有邻接点的信息外,包括交通工具、路程中消耗的时间和花费以及出发和到达的时间等多项属性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值