用C语言实现高铁客运订票系统

这篇具有很好参考价值的文章主要介绍了用C语言实现高铁客运订票系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、设计目的

二、设计内容与要求

三、自己做的具体项目实现的功能:

四、设计思路

五、实现过程

六、代码:

七、实验报告和ppt:

八、结果展示:

九、我的文档数据:


一、设计目的

1.通过对高铁客运订票系统的程序设计,巩固在数据结构中学习的算法知识,提高对程序的整体设计思路,提高自己的程序设计的能力。同时通过对程序的设计与实现中找出自己在学习上以及在算法的优点和缺点,便于以后的学习与改进。

二、设计内容与要求

  1. 项目设计内容和要求

功能描述

高铁客运订票的业务活动包括:查询客运线和客票预定的信息、

客票预定和办理退票等。设计一个计算机程序,使上述任务能借助计

算机来完成。

【具体要求】

1系统必须存储的数据信息

(1)客运线信息(9个):高铁抵达城市、出发城市、经停站、列车

号、发车时间、票价、总位置和剩余位置、已定票的客户名单。

(2)客户信息(3个):客户姓名、证件号、座位号

A、查询客运线信息:根据列车号,输出列车发车站、目的地点、

经停站、经停时间、票价、剩余票数和位置等信息。

B、查询客户预订信息:根据客户证件号,输出上车城市,目的地,

经停站,列车号和座位号等信息。

  1. 系统能实现的操作和功能
  1. 承办订票业务:

A、基础版:根据客户提出的要求(列车抵达城市、发出时间、订

票数量)查询列车信息(包括票价和余票数量),若满足要求,则为

客户办理订票手续,输出座位号。:

B、进阶版:根据客户提出的要求(列车抵达城市、发出时间、订

票数量)查询列车信息(包括票价和余票数量)列表(所有符合要求

的列车可以选择展示的排列方式:按照价格递增/发车时间递增/总时

间递增)(完成-并入查询功能中).客户可以选择座位号,若满足要

求,则为客户办理订票手续,输出座位号。

  1. 承办退票业务:

A、基础版:根据客户提供的情况(列车号,订票数量),为客户

办理退票手续。

B、进阶版:根据客户提供的情况(列车号,发车时间,身份证

号,订票数量),为客户办理退票手续。

  1. 查询功能:(较高要求)

A、查询客运线信息:根据列车号,输出列车发车站、目的地点、

经停站、经停时间、票价、剩余票数和位置等信息。

B、查询客户预订信息:根据客户证件号,输出上车城市,目的地,

经停站,列车号和座位号等信息。

三、自己做的具体项目实现的功能:

①查询功能:

A、查询客运线信息:根据列车号,输出列车发车站、目的地点、

经停站、经停时间、票价、剩余票数和位置等信息。

B、查询客户预订信息:根据客户证件号,输出上车城市,目的地,

经停站,列车号和座位号等信息。

C、根据客户提出的要求(列车抵达城市、发出时间、订

票数量)查询列车信息(包括票价和余票数量)列表(所有符合要求

的列车可以选择展示的排列方式:按照价格递增/发车时间递增/总时

间递增)(完成-并入查询功能中).

②订票功能:

进阶版:根据客户提出的要求(列车抵达城市、发出时间、订

票数量)查询列车信息(包括票价和余票数量)列表(所有符合要求

的列车可以选择展示的排列方式:按照价格递增/发车时间递增/总时

间递增)(完成-并入查询功能中).客户可以选择座位号,若满足要

求,则为客户办理订票手续,输出座位号。

③退票功能:

A、基础版:根据客户提供的情况(列车号,订票数量),为客户

办理退票手续。

B、进阶版:根据客户提供的情况(列车号,发车时间,身份证

号,订票数量),为客户办理退票手续。如果订购多张票,可以仅退

部分票.(应该采用堆进行存储的,可以方便进行删除

四、设计思路

1、功能设计流程导图:

用C语言实现高铁客运订票系统

将订票要求中的进阶要求中的:

“根据客户提出的要求(列车抵达城市、发出时间、订票数量)查询列车信息(包括票价和余票数量)列表(所有符合要求的列车可以选择展示的排列方式:按照价格递增/发车时间递增/总时间递增)”并入查询功能中。

2、数据流程

①对于高铁的信息:

(1)先进行设置高铁的结构:

列车号(字符类型),发车地点,发出时间,目的地点,经停站,剩余票数

位置(座位)。

(2)经停站和终点站采用同一种结构

经停站的顺序位置(终点不需要),经停站的地点名,经停时间(终点不需要),票价。

(3)票价采用一个结构

一等座的票价,二等座的票价,站座的票价。

(4)座位号将一等座和二等座分别进行定义:

标志:进行判断该座位又没有人。

(5)采用文件将高铁的初始信息进行存储。其中数据之间用“!”进行分割,便于读文件

(6)在执行程序时,先将文件读进数组中用数组进行存储高铁的数据。

②对于客户信息

  1. 不用文档进行存储,直接在程序中进行申请空间进行存储客户信息。
  2. 客户的结构:

客户名字,客户的身份证,客户的订票数量,客户的高铁信息。

  1. 客户的高铁信息结构:

所定的列车号,列出的出发点,终点站,出发时间,客户的座位号。

  1. 客户的座位号结构:

座位的级别(用A,B,C进行区分是几等座),座位的数字号。

3、关键技术的解决方法:

  1. 将地铁所有的数据存储在文档中,精准读出各个对应的数据在程序中:

采用“!”做分割符,读到“!”就是一个数据的结束。

(2)用文件读取中文字符时出现乱码:主要是文件的问题

将txt文本编码格式改成ANSI:打开记事本->文件->另存为->更改编码格式为ANSI->保存。

(3)选择展示的排列方式:按照价格递增/发车时间递增/总时间递增

采用冒泡,快速排序算法进行排序。

(4)不同座位的价格计算:

采用一个统一的公式即可。

五、实现过程

1.文件数据:

用C语言实现高铁客运订票系统

 2.查询功能:

用C语言实现高铁客运订票系统

 六、代码:

注意我这里用到的是文档的操作,所有的信息都是在文档中,因此要使用该程序请先在主函数中的第一行该文档的名字。(在149行进行修改)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 1000

//定义票价
struct Piao_pay {
	int first_pay;
	int second_pay;
	int stand_pay;
};
typedef struct Piao_pay piao_pay;


//终点+过度点的结构
struct Tran_spot {
//	表示是第几站 :方便进行计算价格
	int flag_zhang;
//	地点名
	char place_name[15];
	//时间(在终点不用存)
	int place_time;//单位为分钟
	//票价(结构)
	piao_pay tranpay;
};
typedef struct Tran_spot tran_spot;

//定义票数
struct Piao_num {
	int piao_first;
	int piao_second;
	int piao_stand;
	//总的票数之和
	int piao_sum;
};
typedef struct Piao_num piao_num;

//定义座位号的结构
struct Seat {
	//判断有没有人
	int seat_flag;
//	身份证
	char identify[20];
};
typedef struct Seat seat;


//高铁的整体结构
struct high_speed_rail {
	//标志:表示有没有选到该列车
	int tran_flag;
//	列车号
	char Train_number[10];//常用5个字符
//	发车地点
	char begin_place[20]; //中间隔5个空格做分界 每次读入9个中文
//	发车时间
	char Train_begintime[10];
//	结束时间
	char Tran_finatime[10];
//	经停站
	tran_spot tranplace[100];
	//终点站
	tran_spot finaplace;
//	总时间
	char sumtime[15];
	//票数
	piao_num piaonum;
	//座位号 :一等座的号(以A开头以1~100为数字)
	seat *first_num;
	//座位号:二等座的座位号(以B开头1~100的数字)
	seat *second_num;

};
typedef struct high_speed_rail Tran;

//座位的信息
struct Z {
	char denji;//用于分辨乘坐的那种等级的座位
	int num;
};
typedef struct Z zuowei;

//定义客户乘坐的高铁的信息
struct Gao {
	char liechenum[10];//列车号
	char kehuo_place[10];//出发点
	char kehuo_zongdian[10];//终点站
	char kehuo_time[10];//出发时间
	zuowei kehuo_hao[50];//客户乘坐的座位号,注意站座没有座位号
};
typedef struct Gao gaotie;


//定义客户的结构
typedef struct Custom {
	char name[20];//客户名字
	char identify[20];//客户的身份证
	int sum_piao; //客户订票的数量
	gaotie xinxi;//从一开始存
};
typedef struct Custom custom;



//定义退票的空位置
struct K {
	int num;//数量
	zuowei wezhi[50];//记录空出的位置
};


//全局变量
Tran tran[MAX];
FILE *dt;
int *jinting;//经停站的个数统计 数组下标从1开始存
int tran_sum=0;//总的高铁数
int flag_jinting1[500];//通过列车号进行查询的经停数量
custom kehou_xinxi[100];//客户结构
int kehuo_sum;//统计当前客户的数量方便存入数组从一开始存
struct K kong;



//函数
void duchu(int flag,int i);//读取地铁的文件存入数组中
void piao_price(int i,int num);
void chaxun();
void lieche_hao();
void time_fine(Tran *shu,int longer);
void piaosum_fine(Tran *shu,int longer) ;
void swap(Tran *a,Tran *b);
void Printf(Tran *shu,int N);
void querry_paixu(Tran *shu, int N) ;
void Qsort(Tran *shu,int left,int right);
Tran median3(Tran *shu,int left ,int right);
void xier_paixu(Tran *shu,int N);
void zong_fin(Tran *shu,int longer);
void swap1(int *a,int *b);
void chufa_zondian();
void maopao(Tran *shu,int longer) ;
void dinpaio();
void chaxun_custom();
void tueipiao();


int main() {
//	为什么用16以上的数据不行
	//先用文件将地铁的数据存入
	dt=fopen("高铁数据.txt","r");
	if(dt!=NULL) {
		kong.num=0;
//		printf("文件打开成功啦\n");
		//总的高铁数:不一定是一位数
		char tran_ch;
		while((tran_ch=fgetc(dt))!='!') {
			tran_sum=tran_sum*10;
			tran_sum=tran_sum+(tran_ch-'0');
		}
//		tran_sum=fgetc(dt)-'0';//将字符转化为数字类型
//		printf("总的高铁数:%d\n",tran_sum);
//		为什么用这个有问题呢--》而用数组就没有问题
//		tran=(Tran *)malloc(sizeof(tran)*(tran_sum+1));//从一开始存储高铁
		jinting=(int *)malloc(sizeof(int)*(tran_sum+1)); //经停站的个数
		//直接采用有多少个列车存多少次,不需要进行检测换行
		int flag=1;
		for(int i=1; i<=tran_sum; i++) {
//			printf("i==%d",i);
			//先存入列车号
//			if(i!=1)
			fgetc(dt);//读掉换行符号
			fgets(tran[i].Train_number,6,dt);
//			printf("列车号:%s。",tran[i].Train_number);
			//读出发地点
			flag=1;//读取标志:从出发点开始读
			duchu(flag,i); //传进当前下标和读取位置的标志
			//读出结束地点
			flag++;//2
			duchu(flag,i);
//			读发车时间
			flag++;//3
			duchu(flag,i);
			//结束时间
			flag++;//4
			duchu(flag,i);
//			总时间
			flag++;//5
			duchu(flag,i);
//			读入经停站的个数
			flag++;//6
			duchu(flag,i);
//			为什么用这个有问题呢--》而用数组就没有问题
//			tran[i].tranplace=(tran_spot *)malloc(sizeof(tran_spot)*jinting[i]);//开辟经停站的数组
			//存经停站并计算各个票价的价钱
			flag++;//7
			duchu(flag,i);
//			计算终点站的票价
			tran[i].finaplace.tranpay.first_pay=50*(tran[i].tranplace[jinting[i]-1].flag_zhang+1);
			tran[i].finaplace.tranpay.second_pay=tran[i].finaplace.tranpay.stand_pay=tran[i].finaplace.tranpay.first_pay/2;
//			存票数
			flag++;//8
			duchu(flag,i);
//			printf("\n");
		}
	} else {
		printf("文件打开失败");
		return 0;
	}
//	存完数据后进行页面的设置
	int chose;
	while(1) {
		printf("\t\t        高铁客运系统");

		printf("\n\t\t**************************************\n");

		printf("\n\t\t*          1------查询            *\n");

		printf("\n\t\t*          2------订票业务        *\n");

		printf("\n\t\t*          3------退票业务        *\n");

		printf("\n\t\t*          0------结束            *\n");

		printf("\n\t\t**************************************\n");

		printf("\t\t请选择菜单号(0--3):");
		scanf("%d",&chose);
//		功能选择调用
		switch(chose) {
			case 1: {
				chaxun();
				break;
			}
			case 2: {
				dinpaio();
				break;
			}
			case 3: {
				tueipiao(); 
				break;
			}
			case 0: {
				fclose(dt);
				return 0;
			}
			default:{
				printf("输入错误,没有该选项\n");
				break;
			}
		}

	}



}

//读取地铁的文件存入数组中
//用switch比if更好:更快
void duchu(int flag,int i) {
	int k=0;//下标
	char ch;//过度字符
	switch(flag) {
			//读出发地点
		case 1: {
			fgetc(dt);
			while((ch=fgetc(dt))!='!') {
				tran[i].begin_place[k++]=ch;
			}
			tran[i].begin_place[k]='\0';
//			printf("出发点:%s。",tran[i].begin_place);
			tran[i].tran_flag=0;
			break;
		}
		//			读出结束地点:不用存时间,但没有存票价
		case 2 : {
//				fgetc(dt);不需要在读取一次!。因为它作为上一次的结束标志
			while((ch=fgetc(dt))!='!') {
				tran[i].finaplace.place_name[k++]=ch;
			}
			tran[i].finaplace.place_name[k]='\0';
//			printf("结束点:%s。",tran[i].finaplace.place_name);
			break;

		}
		case 3: {
			while((ch=fgetc(dt))!='!') {
				tran[i].Train_begintime[k++]=ch;
			}
			tran[i].Train_begintime[k]='\0';
//			printf("出发时间:%s。",tran[i].Train_begintime);
			break;
		}
//		结束时间
		case 4: {
			while((ch=fgetc(dt))!='!') {
				tran[i].Tran_finatime[k++]=ch;
			}
			tran[i].Tran_finatime[k]='\0';
//			printf("结束时间:%s。",tran[i].Tran_finatime);
			break;
		}
//		总时间
		case 5: {
			while((ch=fgetc(dt))!='!') {
				tran[i].sumtime[k++]=ch;
			}
			tran[i].sumtime[k]='\0';
//			printf("总时间:%s。",tran[i].sumtime);
			break;
		}
		//统计经过的经停站有几个
		case 6: {
			int sum=0;
			while((ch=fgetc(dt))!='!') {
				sum=sum*10;
				sum=sum+(ch-'0');
			}
			jinting[i]=sum;
//			printf("列测车%d的经停站共有%d个:",i,jinting[i]);
			break;
		}
//		存经停站
		case 7: {
			printf("\n");
			int num=0; //经停站的下标
			int flag=1;//经停站的顺序标志
			while((ch=fgetc(dt))!='!') {
				if(ch=='(') {
					//将停留时间存完
					int sum=0;
					while((ch=fgetc(dt))!=')') {
						sum=sum*10;
						sum=sum+(ch-'0');
					}
					//经停站经停时间
					tran[i].tranplace[num].place_time=sum;
//					printf("%d",tran[i].tranplace[num].place_time);
					//标志
					tran[i].tranplace[num].flag_zhang=flag;
					//该价钱计算
					piao_price(i,num);
					tran[i].tranplace[num].place_name[k]='\0';
//					printf("%s-》",tran[i].tranplace[num].place_name);
					k=0;
					flag++;
					num++;
				} else {
					tran[i].tranplace[num].place_name[k++]=ch;
				}
			}
			break;
		}
//		存票数
		case 8: {
			int sum=0;
			while((ch=fgetc(dt))!='!') {
				sum=sum*10;
				sum=sum+(ch-'0');
			}
			tran[i].piaonum.piao_sum=sum;
//			printf("总的票数:%d",tran[i].piaonum.piao_sum);
			sum=0;
			while((ch=fgetc(dt))!='!') {
				sum=sum*10;
				sum=sum+(ch-'0');
			}
			tran[i].piaonum.piao_first=sum;
//			printf("一等座票数:%d",tran[i].piaonum.piao_first);
			tran[i].first_num=(seat *)malloc(sizeof(seat)*(tran[i].piaonum.piao_first+10));
			if(tran[i].first_num==NULL)
				exit(0);
			sum=0;
			while((ch=fgetc(dt))!='!') {
				sum=sum*10;
				sum=sum+(ch-'0');
			}
			tran[i].piaonum.piao_second=sum;
//			printf("二等座票数:%d",tran[i].piaonum.piao_second);
			tran[i].second_num=(seat *)malloc(sizeof(seat)*(tran[i].piaonum.piao_second+10));
			if(tran[i].second_num==NULL)
				exit(0);
			sum=0;
			while((ch=fgetc(dt))!='!') {
				sum=sum*10;
				sum=sum+(ch-'0');
			}
			tran[i].piaonum.piao_stand=sum;
//			printf("站座票数:%d",tran[i].piaonum.piao_stand);
			break;
		}
	}
}

//每一站的不同等级座位的价钱的换算
void piao_price(int i,int num) {
	tran[i].tranplace[num].tranpay.first_pay=50*tran[i].tranplace[num].flag_zhang;
	tran[i].tranplace[num].tranpay.second_pay=tran[i].tranplace[num].tranpay.stand_pay=tran[i].tranplace[num].tranpay.first_pay/2;
}


//查询函数
void chaxun() {

	int xuanzhe;
	while(1) {
		printf("\n\t\t        高铁客运查询系统");

		printf("\n\t\t**************************************\n");

		printf("\n\t\t*          1------查询列车号      *\n");

		printf("\n\t\t*          2------出发地-目的地   *\n");

		printf("\n\t\t*          3------查询客户预定信息*\n");

		printf("\n\t\t*          0------退出查询        *\n");

		printf("\n\t\t**************************************\n");

		printf("\t\t请选择菜单号(0--3):");

		scanf("%d", &xuanzhe);

		switch(xuanzhe) {
			case 1: {
				lieche_hao();
				break;
			}
			case 2: {
				chufa_zondian();
				break;
			}
			case 3: {
				chaxun_custom();
				break;
			}
			case 0: {
				return ;
				break;
			}
			default: {
				printf("\n\t\t----------------------------------------------------------没有该选项,请重新输入----------------------------------------------------------\n");
				printf("\n");
				break;
			}
		}
	}
}


//通过列车号进行查询
void lieche_hao() {
	int chose;
	char cha[10];
	printf("请输入要查询的列车号:");
	scanf("%s",cha);

	printf("\t\t----------------------------------------------------------以下为%s列车的信息-----------------------------------------------------------------\n",cha);
//	printf("列车号\t\t出发点\t\t终点站\t\t出发时间\t\t到达时间\t\t经停站(经停时间,到达时间)\t\t\t\t\t\t\t一等座票数(价格)\t\t二等座票数(价格)\t\t站座票数(价格)");
//		输出
	for(int i=1; i<=tran_sum; i++) {
		if(stricmp(cha,tran[i].Train_number)==0) {
			tran[i].tran_flag=1;//标记查询的列车号
			printf("\t\t列车号:%s。出发点:%s。终点站:%s。出发时间:%s。到达时间:%s。总时长:%s。\n",tran[i].Train_number,tran[i].begin_place,tran[i].finaplace.place_name,tran[i].Train_begintime,tran[i].Tran_finatime,tran[i].sumtime);

			printf("\t\t\t经停站(经停时间):");
			for(int j=1; j<=jinting[i]; j++) {
				printf("%s(%d分钟)",tran[i].tranplace[j-1].place_name,tran[i].tranplace[j-1].place_time);
			}
			printf("\n");
			printf("\t\t\t一等座票数(价格):%d(%d元)\n",tran[i].piaonum.piao_first,tran[i].finaplace.tranpay.first_pay);
			printf("\t\t\t二等座票数(价格):%d(%d元)\n",tran[i].piaonum.piao_second,tran[i].finaplace.tranpay.second_pay);
			printf("\t\t\t站座票数(价格):%d(%d元)\n",tran[i].piaonum.piao_stand,tran[i].finaplace.tranpay.stand_pay);
		}
	}
//		输出结束
//将标记的数存进数组里方便进行用算法优化
	int longer=0;
	int tran_long=0;
	Tran shu[500];
	for(int i=1; i<=tran_sum; i++) {
		if(tran[i].tran_flag==1) {
			flag_jinting1[++tran_long]=jinting[i];
//			printf("%d+",flag_jinting1[tran_long]);
			shu[++longer]=tran[i];
//			printf("%s++",shu[longer].Train_number);
		}
	}
	while(1) {
//这一部分是共同函数一定用共同的函数来写
		printf("\n\t\t******************************************************\n");

		printf("\n\t\t*          1------根据出发时间查询%s列车   *\n",cha);

		printf("\n\t\t*          2------根据订票数量查询%s列车   *\n",cha);

		printf("\n\t\t*          3------按照价格递增显示%s列车   *\n",cha);

		printf("\n\t\t*          4------按照时间递增显示%s列车   *\n",cha);

		printf("\n\t\t*          5------按照总时间递增显示%s列车 *\n",cha);

		printf("\n\t\t*          0------退出查询%s列车信息       *\n",cha);

		printf("\n\t\t******************************************************\n");

		printf("\t\t请选择菜单号(0--5):");

		scanf("%d",&chose);

		switch(chose) {
			case 1: {
				time_fine(shu,longer);
				break;
			}
			case 2: {
				piaosum_fine(shu,longer);
				break;
			}
			case 3: {
				querry_paixu(shu,longer);
				printf("\t\t----------------------------------------------------------按照价格递增显示列车如下----------------------------------------------------------\n");
				Printf(shu,longer);
				break;
			}
			case 4: {
				xier_paixu(shu,longer);
				printf("\t\t----------------------------------------------------------按照时间递增显示列车如下----------------------------------------------------------\n");
				Printf(shu,longer);
				break;
			}
			case 5: {
				zong_fin(shu,longer);
				printf("\t\t----------------------------------------------------------按照总时间递增显示列车如下----------------------------------------------------------\n");
				Printf(shu,longer);
				break;
			}
			//记得把标记清零
			case 0: {
				for(int i=1; i<=tran_sum; i++) {
					if(tran[i].tran_flag!=0)
						tran[i].tran_flag=0;
				}
				return;
			}
			default: {
				printf("\n\t\t----------------------------------------------------------没有该选项,请重新输入----------------------------------------------------------\n");
				printf("\n");
				break;
			}
		}
	}
}


//出发地-目的地进行查询的
void chufa_zondian() {
	int chose;
	char cha1[12];
	char cha2[12];
	printf("请输入出发点:");
	scanf("%s",cha1);
	printf("请输入目的地:");
	scanf("%s",cha2);
	printf("\n\t\t----------------------------------------------------------以下为从%s到%s的列车的信息-----------------------------------------------------------------\n",cha1,cha2);
//		输出
	for(int i=1; i<=tran_sum; i++) {
		if(stricmp(cha1,tran[i].begin_place)==0 && stricmp(cha2,tran[i].finaplace.place_name)==0) {
			tran[i].tran_flag=1;//标记查询的列车号
			printf("\t\t列车号:%s。出发点:%s。终点站:%s。出发时间:%s。到达时间:%s。总时长:%s。\n",tran[i].Train_number,tran[i].begin_place,tran[i].finaplace.place_name,tran[i].Train_begintime,tran[i].Tran_finatime,tran[i].sumtime);

			printf("\t\t\t经停站(经停时间):");
			for(int j=1; j<=jinting[i]; j++) {
				printf("%s(%d分钟)",tran[i].tranplace[j-1].place_name,tran[i].tranplace[j-1].place_time);
			}
			printf("\n");
			printf("\t\t\t一等座票数(价格):%d(%d元)\n",tran[i].piaonum.piao_first,tran[i].finaplace.tranpay.first_pay);
			printf("\t\t\t二等座票数(价格):%d(%d元)\n",tran[i].piaonum.piao_second,tran[i].finaplace.tranpay.second_pay);
			printf("\t\t\t站座票数(价格):%d(%d元)\n",tran[i].piaonum.piao_stand,tran[i].finaplace.tranpay.stand_pay);
		}
	}
//		输出结束
//将标记的数存进数组里方便进行用算法优化
	int longer=0;
	int tran_long=0;
	Tran shu[500];
	for(int i=1; i<=tran_sum; i++) {
		if(tran[i].tran_flag==1) {
			flag_jinting1[++tran_long]=jinting[i];
//			printf("%d+",flag_jinting1[tran_long]);
			shu[++longer]=tran[i];
//			printf("%s++",shu[longer].Train_number);
		}
	}
	while(1) {
//这一部分是共同函数一定用共同的函数来写
		printf("\n\t\t****************************************************************\n");

		printf("\n\t\t*          1------根据出发时间查询从%s到%s的列车   *\n",cha1,cha2);

		printf("\n\t\t*          2------根据订票数量查询从%s到%s的列车   *\n",cha1,cha2);

		printf("\n\t\t*          3------按照价格递增显示从%s到%s的列车   *\n",cha1,cha2);

		printf("\n\t\t*          4------按照时间递增显示从%s到%s的列车   *\n",cha1,cha2);

		printf("\n\t\t*          5------按照总时间递增显示从%s到%s的列车 *\n",cha1,cha2);

		printf("\n\t\t*          0------退出查询从%s到%s的列车信息       *\n",cha1,cha2);

		printf("\n\t\t****************************************************************\n");

		printf("\t\t请选择菜单号(0--5):");

		scanf("%d",&chose);

		switch(chose) {
			case 1: {
				time_fine(shu,longer);
				break;
			}
			case 2: {
				piaosum_fine(shu,longer);
				break;
			}
			case 3: {
				maopao(shu,longer);
				printf("\t\t----------------------------------------------------------按照价格递增显示列车如下----------------------------------------------------------\n");
				Printf(shu,longer);
				break;
			}
			case 4: {
				xier_paixu(shu,longer);
				printf("\t\t----------------------------------------------------------按照时间递增显示列车如下----------------------------------------------------------\n");
				Printf(shu,longer);
				break;
			}
			case 5: {
				zong_fin(shu,longer);
				printf("\t\t----------------------------------------------------------按照总时间递增显示列车如下----------------------------------------------------------\n");
				Printf(shu,longer);
				break;
			}
			//记得把标记清零
			case 0: {
				for(int i=1; i<=tran_sum; i++) {
					if(tran[i].tran_flag!=0)
						tran[i].tran_flag=0;
				}
				for(int i=1; i<=longer; i++) {
					flag_jinting1[i]=0;
				}
				return;
			}
			default: {
				printf("\n\t\t----------------------------------------------------------没有该选项,请重新输入----------------------------------------------------------\n");
				printf("\n");
				break;
			}
		}
	}
}



//根据出发时间查找
void time_fine(Tran *shu,int longer) {
	char  fine_time[10];
	printf("请输入要查找的出发时间(格式为xx:xx):");
	scanf("%s",fine_time);
	printf("\t\t----------------------------------------------------------以下为出发时间为%s的列车信息----------------------------------------------------------\n",fine_time);
	for(int i=1; i<=longer; i++) {

		if(stricmp(shu[i].Train_begintime,fine_time)==0) {
			printf("\t\t列车号:%s。出发点:%s。终点站:%s。出发时间:%s。到达时间:%s。总时长:%s。\n",shu[i].Train_number,shu[i].begin_place,tran[i].finaplace.place_name,shu[i].Train_begintime,shu[i].Tran_finatime,shu[i].sumtime);

			printf("\t\t\t经停站(经停时间):");
			for(int j=1; j<=flag_jinting1[i]; j++) {
				printf("%s(%d分钟)",shu[i].tranplace[j-1].place_name,shu[i].tranplace[j-1].place_time);
			}
			printf("\n");
			printf("\t\t\t一等座票数(价格):%d(%d元)\n",shu[i].piaonum.piao_first,shu[i].finaplace.tranpay.first_pay);
			printf("\t\t\t二等座票数(价格):%d(%d元)\n",shu[i].piaonum.piao_second,shu[i].finaplace.tranpay.second_pay);
			printf("\t\t\t站座票数(价格):%d(%d元)\n",shu[i].piaonum.piao_stand,shu[i].finaplace.tranpay.stand_pay);
		}

	}
}

//根据订票数量进行查找
void piaosum_fine(Tran *shu,int longer) {
	int sum;
	printf("请输入你要定票的数量:");
	scanf("%d",&sum);
	printf("\t\t----------------------------------------------------------以下为票数大于%d的列车信息----------------------------------------------------------\n",sum);
	for(int i=1; i<=longer; i++) {

		if(shu[i].piaonum.piao_sum>=sum) {
			printf("\t\t列车号:%s。出发点:%s。终点站:%s。出发时间:%s。到达时间:%s。总时长:%s。\n",shu[i].Train_number,shu[i].begin_place,tran[i].finaplace.place_name,shu[i].Train_begintime,shu[i].Tran_finatime,shu[i].sumtime);

			printf("\t\t\t经停站(经停时间):");
			for(int j=1; j<=flag_jinting1[i]; j++) {
				printf("%s(%d分钟)",shu[i].tranplace[j-1].place_name,shu[i].tranplace[j-1].place_time);
			}
			printf("\n");
			printf("\t\t\t一等座票数(价格):%d(%d元)\n",shu[i].piaonum.piao_first,shu[i].finaplace.tranpay.first_pay);
			printf("\t\t\t二等座票数(价格):%d(%d元)\n",shu[i].piaonum.piao_second,shu[i].finaplace.tranpay.second_pay);
			printf("\t\t\t站座票数(价格):%d(%d元)\n",shu[i].piaonum.piao_stand,shu[i].finaplace.tranpay.stand_pay);
		}

	}
}
//价格排序冒泡
void maopao(Tran *shu,int longer) {
	int i,j,flag;
	for(int i=longer; i>1; i--) {
		flag=0;
		for(int j=1; j<i; j++) {
			if(shu[j].finaplace.tranpay.first_pay>shu[j+1].finaplace.tranpay.first_pay) {
				swap(&shu[j],&shu[j+1]);
				swap1(&flag_jinting1[j],&flag_jinting1[j+1]);
				flag=1;
			}
		}
		if(flag==0)
			break;
	}
}
//交换函数
void swap(Tran *a,Tran *b) {
	Tran c;
	c=*a;
	*a=*b;
	*b=c;
}
void swap1(int *a,int *b) {
	int c;
	c=*a;
	*a=*b;
	*b=c;
}

//采用冒泡排序对出发时间进行排序
void xier_paixu(Tran *shu,int N) {
	int i,j,flag=0;
	int tran1,tran2;
	int num1,num2;
	for(i=N; i>1; i--) {
		flag=0;
		for(j=1; j<i; j++) {
//			小时
			tran1=(shu[j].Train_begintime[0]-'0')*10+(shu[j].Train_begintime[1]-'0');
			tran2=(shu[j+1].Train_begintime[0]-'0')*10+(shu[j+1].Train_begintime[1]-'0');
			if(tran1>tran2) {
				swap1(&flag_jinting1[j],&flag_jinting1[j+1]);
				swap(&shu[j],&shu[j+1]);
				flag=1;
			}
//			分钟比较
			else if(tran1==tran2) {
				num1=(shu[j].Train_begintime[3]-'0')*10+(shu[j].Train_begintime[4]-'0');
				num2=(shu[j+1].Train_begintime[3]-'0')*10+(shu[j+1].Train_begintime[4]-'0');
				if(num1>num2) {
					swap1(&flag_jinting1[j],&flag_jinting1[j+1]);
					swap(&shu[j],&shu[j+1]);
					flag=1;
				}
			}
		}
		if(flag==0)
			break;
	}
}
//采用冒泡排序
void zong_fin(Tran *shu,int longer) {
	int i,j,flag;
	int xiaoshi1,xiaoshi2;
	int fenzhong1,fenzhong2;
	for(i=longer; i>=1; i--) {
		flag=0;
		for(j=1; j<i; j++) {
			xiaoshi1=(shu[j].sumtime[0]-'0')*10+(shu[j].sumtime[1]-'0');
			xiaoshi2=(shu[j+1].sumtime[0]-'0')*10+(shu[j+1].sumtime[1]-'0');
			if(xiaoshi1>xiaoshi2) {
				flag=1;
				swap(&shu[j],&shu[j+1]);
				swap1(&flag_jinting1[j],&flag_jinting1[j+1]);
			} else if(xiaoshi1==xiaoshi2) {
				fenzhong1=(shu[j].sumtime[4]-'0')*10+(shu[j].sumtime[5]-'0');
				fenzhong2=(shu[j+1].sumtime[4]-'0')*10+(shu[j+1].sumtime[5]-'0');
				if(fenzhong1>fenzhong2) {
					flag=1;
					swap(&shu[j],&shu[j+1]);
					swap1(&flag_jinting1[j],&flag_jinting1[j+1]);
				}
			}
		}
		if(flag==0)
			break;
	}
}


//排序的输出:输出有问题
void Printf(Tran *shu,int N) {
	for(int i=1; i<=N; i++) {
		printf("\t\t列车号:%s。出发点:%s。终点站:%s。出发时间:%s。到达时间:%s。总时长:%s。\n",shu[i].Train_number,shu[i].begin_place,shu[i].finaplace.place_name,shu[i].Train_begintime,shu[i].Tran_finatime,shu[i].sumtime);
		printf("\t\t\t经停站(经停时间):");
		for(int j=1; j<=flag_jinting1[i]; j++) {
			printf("%s(%d分钟)",shu[i].tranplace[j-1].place_name,shu[i].tranplace[j-1].place_time);
		}
		printf("\n");
		printf("\t\t\t一等座票数(价格):%d(%d元)\n",shu[i].piaonum.piao_first,shu[i].finaplace.tranpay.first_pay);
		printf("\t\t\t二等座票数(价格):%d(%d元)\n",shu[i].piaonum.piao_second,shu[i].finaplace.tranpay.second_pay);
		printf("\t\t\t站座票数(价格):%d(%d元)\n",shu[i].piaonum.piao_stand,shu[i].finaplace.tranpay.stand_pay);

	}
}

//按照价格递增显示列车:采用快速排序:
void querry_paixu(Tran *shu, int N) {
	Qsort(shu,1,N);
}

void Qsort(Tran *shu,int left,int right) {
	if(left>=right)
		return;
	Tran pivot;//主元
	int sum=1000;
//	主元选取
	if (right>sum) {
		pivot=median3(shu,left,right);
		int low,High;
		low=left;
		High=right-1;
		while(1) {
//		为什么相等时进行交换就不行
			while(shu[low].finaplace.tranpay.first_pay<=pivot.finaplace.tranpay.first_pay && low<High)
				low++;
			while(shu[High].finaplace.tranpay.first_pay>=pivot.finaplace.tranpay.first_pay && low<High)
				High--;
			if(low<High) {
				swap(&shu[low],&shu[High]);
				swap1(&flag_jinting1[low],&flag_jinting1[High]);
			} else
				break;
		}
		swap(&shu[low],&shu[right]);
		swap1(&flag_jinting1[low],&flag_jinting1[right]);
		Qsort(shu,left,low-1);
		Qsort(shu,low+1,right);
	} else
		maopao(shu,right);


}
//主元选取
Tran median3(Tran *shu,int left ,int right) {
	int midiume;
	midiume=(left+right)/2;
	if(shu[midiume].finaplace.tranpay.first_pay<shu[left].finaplace.tranpay.first_pay) {
		swap(&shu[midiume],&shu[left]);
		swap1(&flag_jinting1[midiume],&flag_jinting1[left]);
	}
	if(shu[left].finaplace.tranpay.first_pay>shu[right].finaplace.tranpay.first_pay) {
		swap1(&flag_jinting1[left],&flag_jinting1[right]);
		swap(&shu[left],&tran[right]);
	}
	if(shu[midiume].finaplace.tranpay.first_pay>shu[right].finaplace.tranpay.first_pay) {
		swap(&shu[midiume],&shu[right]);
		swap1(&flag_jinting1[midiume],&flag_jinting1[right]);
	}
	swap(&shu[midiume],&shu[right]);
	swap1(&flag_jinting1[midiume],&flag_jinting1[right]);
	return shu[right];
}


//定票 :kehou_xinxi,kehuo_sum
void dinpaio() {
	int chose,jilu,flag=0;
	kehuo_sum++;
	printf("请输入出发点:");
	scanf("%s",kehou_xinxi[kehuo_sum].xinxi.kehuo_place);
	printf("请输入终点:");
	scanf("%s",kehou_xinxi[kehuo_sum].xinxi.kehuo_zongdian);
	printf("请输入出发时间(格式为xx:xx):");
	scanf("%s",kehou_xinxi[kehuo_sum].xinxi.kehuo_time);
	printf("请输入你的名字:");
	scanf("%s",kehou_xinxi[kehuo_sum].name);
	printf("请输入你的身份证号:");
	scanf("%s",kehou_xinxi[kehuo_sum].identify);
//	先找到该列车并记录在去顶座位号
	for(jilu=1; jilu<=tran_sum; jilu++) {
		if(stricmp(kehou_xinxi[kehuo_sum].xinxi.kehuo_place,tran[jilu].begin_place)==0) {
			if(stricmp(kehou_xinxi[kehuo_sum].xinxi.kehuo_zongdian,tran[jilu].finaplace.place_name)==0) {
				if(stricmp(kehou_xinxi[kehuo_sum].xinxi.kehuo_time,tran[jilu].Train_begintime)==0) {
					flag=1;
					strcpy(kehou_xinxi[kehuo_sum].xinxi.liechenum,tran[jilu].Train_number);
					break;
				}
			}
		}
	}
	if(flag==0){
		kehuo_sum--;
		printf("没有该列车,请重新选择\n");
		return;
	}
	printf("该列车号为:%s\n",tran[jilu].Train_number);
	printf("请输入要定的票数:");
	scanf("%d",&kehou_xinxi[kehuo_sum].sum_piao);
	int k=1;
	while(k<=kehou_xinxi[kehuo_sum].sum_piao) {
		printf("\n");
		if(kehou_xinxi[kehuo_sum].sum_piao!=1) {
			printf("\n\t------------------------------------------请选择第%d张票的座位-----------------------------------------------------\n",k);
		}
		printf("\n\t\t        座位号选择");

		printf("\n\t\t********************************************\n");

		printf("\n\t\t*          1------一等座              *\n");

		printf("\n\t\t*          2------二等座              *\n");

		printf("\n\t\t*          3------站座                *\n");

		printf("\n\t\t*          0------退出订票            *\n");

		printf("\n\t\t********************************************\n");

		printf("\t\t请选择菜单号(0--3):");
		scanf("%d",&chose);
		switch(chose) {
			case 1: {
				int num;
				kehou_xinxi[kehuo_sum].xinxi.kehuo_hao[k].denji='A';
				printf("请输入你想选择的一等座的座位号(数字1到%d):",tran[jilu].piaonum.piao_first);
				scanf("%d",&num);
				if(tran[jilu].first_num[num].seat_flag==1) {
					printf("该位置已有人,请重新输入选择\n");
					continue;
				} else {
					printf("选择成功\n");
					tran[jilu].first_num[num].seat_flag=1;
					kehou_xinxi[kehuo_sum].xinxi.kehuo_hao[k].num=num;
					tran[jilu].piaonum.piao_first--;
					tran[jilu].piaonum.piao_sum--;
					printf("你的座位号为:%c%d",	kehou_xinxi[kehuo_sum].xinxi.kehuo_hao[k].denji,kehou_xinxi[kehuo_sum].xinxi.kehuo_hao[k].num);
				}
				break;
			}
			case 2: {
				int num;
				kehou_xinxi[kehuo_sum].xinxi.kehuo_hao[k].denji='B';
				printf("请输入你想选择的二等座的座位号(数字1到%d):",tran[jilu].piaonum.piao_second);
				scanf("%d",&num);
				if(tran[jilu].second_num[num].seat_flag==1) {
					printf("该位置已有人,请重新输入选择\n");
					continue;
				} else {
					printf("选择成功\n");
					tran[jilu].second_num[num].seat_flag=1;
					kehou_xinxi[kehuo_sum].xinxi.kehuo_hao[k].num=num;
					tran[jilu].piaonum.piao_second--;
					tran[jilu].piaonum.piao_sum--;
					printf("你的座位号为:%c%d",kehou_xinxi[kehuo_sum].xinxi.kehuo_hao[k].denji,kehou_xinxi[kehuo_sum].xinxi.kehuo_hao[k].num);
				}
				break;
			}
			case 3: {
				printf("选择成功\n");
				tran[jilu].piaonum.piao_stand--;
				tran[jilu].piaonum.piao_sum--;
				kehou_xinxi[kehuo_sum].xinxi.kehuo_hao[k].denji='C';//站座没有座位号
				break;
			}
			//记得清空该客户的信息
			case 0: {
				kehuo_sum--;
				break;
			}
			default: {
				printf("没有该选项,请重新输入\n");
				continue;
				break;
			}
		}
		k++;
	}
}


//查询客户信息
void chaxun_custom() {
	char sheng[20];
	int i,flag=0;
	printf("请输入你的身份证进行查询:");
	scanf("%s",sheng);
	for(i=1; i<=kehuo_sum; i++) {
		if(stricmp(sheng,kehou_xinxi[i].identify)==0) {
			flag=1;
			break;
		}
	}
	if(flag==0) {
		printf("没有该身份证客户信息");
	} else {
		printf("用户名:%s\n",kehou_xinxi[i].name);
		printf("身份证信息:%s\n",kehou_xinxi[i].identify);
		printf("列车号为:%s\n",kehou_xinxi[i].xinxi.liechenum);
		printf("出发点为:%s\n",kehou_xinxi[i].xinxi.kehuo_place);
		printf("终点站为:%s\n",kehou_xinxi[i].xinxi.kehuo_zongdian);
		printf("发车时间为:%s\n",kehou_xinxi[i].xinxi.kehuo_time);
		printf("你定的票数为:%d\n",kehou_xinxi[i].sum_piao);
		if(kehou_xinxi[i].sum_piao!=1) {
			int k=kehou_xinxi[i].sum_piao;
			for(int j=1; j<=kehou_xinxi[i].sum_piao; j++) {
				printf("你的第%d张票:",j);
				if(kehou_xinxi[i].xinxi.kehuo_hao[j].denji=='C') {
					printf("你买的是站票,没有座位号\n");
				} else
					printf("你的座位号为:%c%d\n",kehou_xinxi[i].xinxi.kehuo_hao[j].denji,kehou_xinxi[i].xinxi.kehuo_hao[j].num);
			}
		} else {
			if(kehou_xinxi[i].xinxi.kehuo_hao[1].denji=='C') {
				printf("你买的是站票,没有座位号\n");
			} else
				printf("你的座位号为:%c%d\n",kehou_xinxi[i].xinxi.kehuo_hao[1].denji,kehou_xinxi[i].xinxi.kehuo_hao[1].num);
		}
//		还要输出经过的站
		int jilu;
		for(jilu=1; jilu<=tran_sum; jilu++) {
			if(stricmp(kehou_xinxi[i].xinxi.kehuo_place , tran[jilu].begin_place)==0) {
				if(stricmp(kehou_xinxi[i].xinxi.kehuo_zongdian , tran[jilu].finaplace.place_name)==0) {
					if(stricmp(kehou_xinxi[i].xinxi.kehuo_time , tran[jilu].Train_begintime)==0) {
						strcpy(kehou_xinxi[i].xinxi.liechenum , tran[jilu].Train_number);
						break;
					}
				}
			}
		}

		printf("经停站:");
		for(int m=0; m<jinting[jilu]; m++) {
			printf("%s(%d分钟)",tran[jilu].tranplace[m].place_name,tran[jilu].tranplace[m].place_time);
			if(m!=jinting[jilu]-1)
			printf("-->");
		}
	}
}




//退票功能 struct Kong kong;kehuo_sum
void tueipiao() {
	int use_flag;
	char tran_gaonum[10];
	char tran_time[10];
	char shenfeng_tran[20];
	printf("请输入要退票的列车号:");
	scanf("%s",tran_gaonum);
	printf("请输入列车的发车时间:");
	scanf("%s",tran_time);
	printf("请输入列车的你的身份证号:");
	scanf("%s",shenfeng_tran) ;
	//找到客户的位置
	for(use_flag=1; use_flag<=kehuo_sum; use_flag++) {
		if(stricmp(shenfeng_tran,kehou_xinxi[use_flag].identify)==0)
			break;
	}
	//找到高铁的位置
	int jilu;
	for(jilu=1; jilu<=tran_sum; jilu++) {
		if(stricmp(tran_gaonum, tran[jilu].Train_number)==0) {
			if(stricmp(tran_time , tran[jilu].Train_begintime)==0) {
				break;
			}
		}
	}

	printf("\n\t\t你当前在%s列车订票信息如下:\n",tran[jilu].Train_number);
	printf("你在该列车订票数量为:%d\n",kehou_xinxi[use_flag].sum_piao);
//		一张票
	if(kehou_xinxi[use_flag].sum_piao==1) {
		int chose;
		printf("是否选择退票:输入1确认,输入0退出:");
		printf("请输入你的选择:");
		scanf("%d",&chose);
		if(chose==1) {
			printf("退票成功\n");
			kong.num++;
			//记录空的位置
			kong.wezhi[kong.num].denji=kehou_xinxi[use_flag].xinxi.kehuo_hao[1].denji;
			kong.wezhi[kong.num].num=kehou_xinxi[use_flag].xinxi.kehuo_hao[1].num;
//				 将该位置变为空

			if(kehou_xinxi[use_flag].xinxi.kehuo_hao[1].denji=='A') {
				tran[jilu].first_num[kehou_xinxi[use_flag].xinxi.kehuo_hao[1].num].seat_flag=0;
				tran[jilu].piaonum.piao_first++;
			} else if(kehou_xinxi[use_flag].xinxi.kehuo_hao[1].denji=='B') {
				tran[jilu].second_num[kehou_xinxi[use_flag].xinxi.kehuo_hao[1].num].seat_flag=0;
				tran[jilu].piaonum.piao_second++;
			} else {
				tran[jilu].piaonum.piao_stand++;
			}
			tran[jilu].piaonum.piao_sum++;
		}
	}
//		多张票 :不用记录空的位置
	else if(kehou_xinxi[use_flag].sum_piao>1) {
		int xuanzhe;
		int sum;
		printf("\n\t\t以下是你座位信息:\n");
		for(int i=1; i<=kehou_xinxi[use_flag].sum_piao; i++) {
			printf("\n列车号:%s,第%d个座位的座位号:%c%d\n",kehou_xinxi[use_flag].xinxi.liechenum , i , kehou_xinxi[use_flag].xinxi.kehuo_hao[i].denji ,kehou_xinxi[use_flag].xinxi.kehuo_hao[i].num );
		}
		printf("你最多退%d张票\n",kehou_xinxi[use_flag].sum_piao-(kehou_xinxi[use_flag].sum_piao-1)) ;
		printf("请输入你要退票的数量:");
		scanf("%d",&sum);
		 
		int shuru;
		char shuru2;
		int flag_shuru;
		for(int i=1; i<=sum; i++) {
			printf("请输入你要退的座位号:");
			getchar();
			scanf("%c%d",&shuru2,&shuru);
//			printf("输入座的数字号码:");
//			scanf("%d",&shuru); 
			if(shuru2=='A') {
//					相同步骤 :移动客户的座位的数组
				for(int j=1; j<=kehou_xinxi[use_flag].sum_piao; j++) {
					if(kehou_xinxi[use_flag].xinxi.kehuo_hao[j].denji=='A') {
						if(kehou_xinxi[use_flag].xinxi.kehuo_hao[j].num==shuru) {
							for(int k=j; k<kehou_xinxi[use_flag].sum_piao; k++) {
								kehou_xinxi[use_flag].xinxi.kehuo_hao[j]=kehou_xinxi[use_flag].xinxi.kehuo_hao[j+1];
							}
							break;
						}
					}
				}
				kehou_xinxi[use_flag].sum_piao--;
				tran[jilu].first_num[shuru].seat_flag=0;
				tran[jilu].piaonum.piao_first++;

			} else if(shuru2=='B') {

				for(int j=1; j<=kehou_xinxi[use_flag].sum_piao; j++) {
					if(kehou_xinxi[use_flag].xinxi.kehuo_hao[j].denji=='B') {
						if(kehou_xinxi[use_flag].xinxi.kehuo_hao[j].num==shuru) {
							for(int k=j; k<kehou_xinxi[use_flag].sum_piao; k++) {
								kehou_xinxi[use_flag].xinxi.kehuo_hao[j]=kehou_xinxi[use_flag].xinxi.kehuo_hao[j+1];
							}
							break;
						}
					}
				}
				kehou_xinxi[use_flag].sum_piao--;
				tran[jilu].second_num[shuru].seat_flag=0;
				tran[jilu].piaonum.piao_second++;

			} else {
				for(int j=1; j<=kehou_xinxi[use_flag].sum_piao; j++) {
					if(kehou_xinxi[use_flag].xinxi.kehuo_hao[j].denji=='C') {
						if(kehou_xinxi[use_flag].xinxi.kehuo_hao[j].num==shuru) {
							for(int k=j; k<kehou_xinxi[use_flag].sum_piao; k++) {
								kehou_xinxi[use_flag].xinxi.kehuo_hao[j]=kehou_xinxi[use_flag].xinxi.kehuo_hao[j+1];
							}
							break;
						}
					}
				}
				kehou_xinxi[use_flag].sum_piao--;
				tran[jilu].piaonum.piao_stand++;
			}
			printf("退票成功\n");
		}
	}
}

七、实验报告和ppt:

用C语言实现高铁客运订票系统ppt:

来自 <https://download.csdn.net/download/m0_61528957/86730518>

八、结果展示:

1、查询

(1)查询列车号

用C语言实现高铁客运订票系统

 用C语言实现高铁客运订票系统

 用C语言实现高铁客运订票系统

用C语言实现高铁客运订票系统

 用C语言实现高铁客运订票系统

(2)快速排序:

 用C语言实现高铁客运订票系统用C语言实现高铁客运订票系统(3)冒泡排序进行排序出发时间和总时间用C语言实现高铁客运订票系统

 用C语言实现高铁客运订票系统

 (4)通过出发点和终点进行查询:

用C语言实现高铁客运订票系统(5)客户信息查询:

用C语言实现高铁客运订票系统

2.订票功能:

用C语言实现高铁客运订票系统

 3.退票功能:

用C语言实现高铁客运订票系统

九、我的文档数据:

14!
G6083!湛江西站!佛山!08:10!14:16!10时37分!10!茂名(2)阳江(2)江门(2)广州南(2)虎门(2)深圳北(4)惠州南(2)汕尾(2)普宁(2)潮汕(4)!1500!700!500!300!
G6083!湛江西站!汕头!05:10!14:16!07时37分!9!茂名(2)阳江(2)江门(2)广州南(2)虎门(2)深圳北(4)惠州南(2)汕尾(2)普宁(2)!1500!700!500!300!
G6083!湛江西站!汕头!06:10!14:16!03时37分!8!茂名(2)阳江(2)江门(2)广州南(2)虎门(2)深圳北(4)惠州南(2)汕尾(2)!1500!700!500!300!
G6083!湛江西站!汕头!01:10!14:16!05时37分!6!茂名(2)阳江(2)江门(2)广州南(2)虎门(2)深圳北(4)!1500!700!500!300!
G6083!湛江西站!汕头!03:10!14:16!02时37分!7!茂名(2)阳江(2)江门(2)广州南(2)虎门(2)深圳北(4)惠州南(2)!1500!700!500!300!
G6083!湛江西站!汕头!08:10!14:16!01时37分!5!茂名(2)阳江(2)江门(2)广州南(2)虎门(2)!1500!700!500!300!
G6083!湛江西站!汕头!08:11!14:16!00时37分!3!茂名(2)阳江(2)江门(2)!1500!700!500!300!
G6083!湛江西站!汕头!08:15!14:16!08时45分!6!茂名(2)阳江(2)江门(2)广州南(2)虎门(2)深圳北(4)!1500!700!500!300!
G6083!湛江西站!汕头!08:09!14:16!05时59分!2!茂名(2)阳江(2)!1500!700!500!300!
G6083!湛江西站!汕头!08:01!14:16!08时50分!1!茂名(2)!1500!700!500!300!
G6083!湛江西站!汕头!08:05!14:16!03时40分!10!茂名(2)阳江(2)江门(2)广州南(2)虎门(2)深圳北(4)惠州南(2)汕尾(2)普宁(2)潮汕(4)!1500!700!500!300!
G6083!湛江西站!汕头!08:06!14:16!03时39分!10!茂名(2)阳江(2)江门(2)广州南(2)虎门(2)深圳北(4)惠州南(2)汕尾(2)普宁(2)潮汕(4)!1500!700!500!300!
G6083!湛江西站!汕头!08:09!14:16!03时38分!9!茂名(2)阳江(2)广州南(2)虎门(2)深圳北(4)惠州南(2)汕尾(2)普宁(2)潮汕(4)!1500!700!500!300!
G6083!湛江西站!汕头!08:10!14:16!03时39分!10!茂名(2)阳江(2)江门(2)广州南(2)虎门(2)深圳北(4)惠州南(2)汕尾(2)普宁(2)潮汕(4)!1500!700!500!300!

用C语言实现高铁客运订票系统

注意:

①写入文档的数据一定要按照我的格式写,后面的感叹号是每一类数据的分割符,方便数据的输入。

②注意数据信息写的的顺序,否则会读错。 文章来源地址https://www.toymoban.com/news/detail-490990.html

到了这里,关于用C语言实现高铁客运订票系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构课程设计之火车票订票系统实现(C语言/C++版本)

    课题描述 编制一个程序,火车票订票的业务活动包括:车次查询、订票、退票、用户管理等。 需求分析 用户信息包括用户姓名、身份证号、用户电话、用户所购列车号、订单号;列车信息包括:列车车站号、车票起点、车票终点、出发时间、到达时间、票价、票数等基本信

    2024年01月19日
    浏览(52)
  • VB客运中心汽车售票管理系统设计与实现

    摘  要:该系统是信息管理系统在售票管理方面的一个分支和具体运用,是为长治客运中心而设计的管理售票、车次、票价及客票收入统计等日常事物的系统。此系统选择Visual Basic 6.0作为开发工具来实现客运中心汽车售票所要求的各种功能。本文主要介绍了开发此管理系统的

    2024年02月14日
    浏览(40)
  • 基于Java汽车客运站管理系统设计实现(源码+lw+部署文档+讲解等)

    博主介绍 : ✌全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到哟 Java项目精品

    2024年02月10日
    浏览(108)
  • 电影院订票售票系统设计与实现

      目的 :本课题主要目标是设计并能够实现一个基于java的电影院订票选座系统,系统整体使用了基于java+MySql的B/S架构,技术上使用了springboot框架;使用浏览器,管理员通过后台添加电影、场次,用户通过浏览器登录系统,查看电影、订购电影票、选择座位。 意义 :影院售

    2024年02月05日
    浏览(48)
  • 旅游景区订票小程序系统设计与实现

    目的:本课题主要目标是设计并能够实现一个基于微信小程序景区景点预约购票系统,前台用户使用小程序,后台管理使用Java+Mysql开发,后台使用了springboot框架;通过后台添加景区资讯、景点介绍,管理用户订单;用户通过小程序登录,查看资讯、查看景区介绍、购买景区

    2024年02月10日
    浏览(38)
  • 基于SpringBoot+vue的火车订票管理系统设计与实现

     博主介绍 :  大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下进行项目开发,具有丰富的项目经验和开发技能。我的

    2024年02月07日
    浏览(49)
  • 基于JSP微信小程序汽车票订票售票系统设计与实现

    第1步(数据库操作):     导入sql数据库 第2步(网站发布):     使用ideal导入管理系统     设置根目录下 conn.jsp的数据库连接 和 网址地址(小程序使用)     运行站点,登录后台测试 第3步(小程序发布):     导入小程序     设置app.js后台管理系统的网址     微信

    2024年02月11日
    浏览(44)
  • 基于微信陕西西安景点订票小程序系统设计与实现 参考文献

     博主介绍 :黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、

    2024年01月25日
    浏览(51)
  • 基于springboot后台微信小程序旅游景区订票售票系统设计与实现

     博主介绍 :黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、

    2024年01月22日
    浏览(46)
  • 基于Java(SpringBoot框架)毕业设计作品成品(05)旅游景区景点售票订票系统设计与实现

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月08日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包