用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、功能设计流程导图:

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

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

2、数据流程

①对于高铁的信息:

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

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

位置(座位)。

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

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

(3)票价采用一个结构

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

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

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

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

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

②对于客户信息

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

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

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

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

  1. 客户的座位号结构:

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

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

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

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

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

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

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

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

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

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

五、实现过程

1.文件数据:

 2.查询功能:

 六、代码:

注意我这里用到的是文档的操作,所有的信息都是在文档中,因此要使用该程序请先在主函数中的第一行该文档的名字。(在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)查询列车号

 

 

 

(2)快速排序:

 (3)冒泡排序进行排序出发时间和总时间

 

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

(5)客户信息查询:

2.订票功能:

 3.退票功能:

九、我的文档数据:

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!

注意:

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

②注意数据信息写的的顺序,否则会读错。 

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小丞啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值