机票管理系统C++完整代码 订退票、界面、文件存取、查找、排序、增加航班 票务管理 航班管理

大一的时课设,这是简单的1.0版本,可供参考框架和思路。那时候喜欢用拼音做变量名函数名,介意的望海涵。
还不会上传资源,完整代码在最后。
功能全面升级的完整版我过几天会整理上来。

实现功能:
机票管理系统C++完整代码 订退票、界面、文件存取、查找、排序、增加航班 票务管理 航班管理_第1张图片机票管理系统C++完整代码 订退票、界面、文件存取、查找、排序、增加航班 票务管理 航班管理_第2张图片机票管理系统C++完整代码 订退票、界面、文件存取、查找、排序、增加航班 票务管理 航班管理_第3张图片机票管理系统C++完整代码 订退票、界面、文件存取、查找、排序、增加航班 票务管理 航班管理_第4张图片机票管理系统C++完整代码 订退票、界面、文件存取、查找、排序、增加航班 票务管理 航班管理_第5张图片机票管理系统C++完整代码 订退票、界面、文件存取、查找、排序、增加航班 票务管理 航班管理_第6张图片

具体实现:
1、头文件、结构体和函数如下:

#include 
#include		//包含字符串函数处理头文件
#include		//包含access函数的头文件
#include
#include
#include
#include
#include
#define N 9999			//定义最多的航班数
#define PRINT s[i].num<<"\t\t"<//宏定义输出格式
using namespace std;


struct air         	//定义航班信息结构体数组
{
	int num;				//定义航班号
	char start[20];		    //航班起始站
	char over[20];			//终点站
	char time[10];			//飞行时间
	int count;				//机票数量
}s[N];

int i,a,m=0;				//定义全局变量
char ii[10];

void add();		//函数声明增加航班信息函数
void print(); 		//显示航班信息
bool search();		//查找航班信息
void dingpiao();	//订票业务
void tuipiao();		//退票
void Read();		//读取文件
void save();		//保存文件
void output();		//输出格式
void paixu();		//航班排序
void chushihua();	//系统初始化
void build();		//建立数据文件
void paixu1();		//按航班号从小到大排序
void paixu2();		//从大到小
int head ();		//进入订票系统

要点:
宏定义输出格式:可以让代码方便简洁
结构体数组:保存多组信息

2、主函数

int main()		//主函数
{
	int j;
	system("color b0");    //这里可以调整颜色
	chushihua();		//系统初始化判断是否存在原始数据文件
	system("cls");
    head();	//打印出系统主界面
	system("cls");
	do
	{
	 cout<<"================================================================================ ";
	 cout<<"\n\t\t\t\t1.增加航班信息\n\t\t"
		 "\t\t2.浏览航班信息\n\t\t"
		 "\t\t3.查找航班信息(按航班号)\n\t\t"
		 "\t\t4.航班排序(按航班号)\n\t\t"
		 "\t\t5.订票业务\n\t\t"
         "\t\t6.退票业务\n\t\t"
         "\t\t0.退出\n";
	cout<<"================================================================================ " ;
	cout<<"\n请在0-6中选择以回车键结束: " ;
	cin>>j ;
	switch(j)
	{
		case 1: add();	system("cls");		//调用增加航班函数
			break;
		case 2:print();	system("cls");//调用显示模块
			break;
		case 3:search();system("cls");	//调用查找模块
			break;
		case 4:paixu(); system("cls");	//调用排序函数
			break;
		case 5:dingpiao();system("cls");	//调用订票模块
			break;
		case 6:tuipiao();system("cls");	//调用退票模块
			break;
		case 0:				//退出系统
				save();system("cls");
				cout<<"\n\n\n\t\t\t\t\n\n\t谢谢使用,再见! ";
				cout<<"\n\n\n\n\n\n\n\n\n\n\n\n\n";
			break;
	}
	}while(j!=0);		//判断是否调用其他函数

 }

要点:
打印主界面,选择后跳转各个功能函数。

3、建立数据文件
用于保存航班信息


void build()		//定义建立数据文件函数
{
	FILE *fp;		//定义文件指针
	if((fp=fopen("hangban.dat","wb"))==NULL)		//打开文件并判定是否出错
	{
		cout<<"创建文件失败! " ;		//打印出错提示
		getchar();
		return;
	}
	cout<<"请依次输入航班信息(以回车键结束):\n" ;      //打印提示信息
	cout<<"-------------------------------------------------------------------------- \n" ;
	for(i=0;i<N;i++)
	{
		cout<<"请输入航班号: " ;
		cin>>s[i].num ;		//输入航班号
		cout<<"请输入起始站: " ;
		cin>>s[i].start ;		//输入起始站
		cout<<"请输入终点站: " ;
		cin>>s[i].over ;		//输入终点站
		cout<<"请输入时间(星期几 : " ;
		cin>>s[i].time ;		//输入时间
		cout<<"请输入机票数: " ;
		cin>>s[i].count ;	//输入机票数
		fwrite(&s[i],sizeof(struct air),1,fp);
		m++;
		cout<<"添加完毕,是否继续添加?请键入y或n以回车键结束:";
		cin>>ii ;
		if(strcmp(ii,"y")!=0)			//判断是否继续添加航班信息
		{
			fclose(fp);			//关闭文件
			return;
		}
	}
}

要点:
定义文件指针,打开(或创建文件)
保存到结构体,循环用结构体写文件fwrite(&s[i],sizeof(struct air),1,fp);
不再添加信息,则关闭文件。

4、退出前保存信息
使用系统后,更改数据到文件


void save() 		//定义保存函数
{
	FILE *fp;
	if((fp=fopen("hangban.dat","wb"))==NULL)
	{
		cout<<"创建文件失败! ";
		getchar();
		return;
	}
	for(i=0;i<m;i++)			//逐块保存数据
		fwrite(&s[i],sizeof(struct air),1,fp);
	fclose(fp);
	cout<<"正在保存数据并退出";
	for(a=0;a<3;a++)
		{
			cout<<"." ;
			Sleep(200);
		}
	cout<<"\n";
	cout<<"\n" ;

}

要点:
定义文件指针。打开或创建文件。
逐个保存航班信息,写文件。

5、读取信息

void Read()	//定义读取文件函数
{
	FILE *fp;
	if((fp=fopen("hangban.dat","r"))==NULL)
	{
		cout<<"创建文件失败! " ;
		getchar();
		return;
	}
	i=0;
	while(!feof(fp))
	{
		fread(&s[i],sizeof(struct air),1,fp);		//逐块读取数据
		i++;
		m++;		//计算存在航班数
	}
	m--;
	fclose(fp);
	cout<<"请稍候,正在初始化" ;
	for(a=0;a<3;a++)
		{
			cout<<"." ;
			Sleep(200);
		}
		cout<<"\n";
}

要点:
定义文件指针,打开文件。
逐个结构体读取,同时计数。

添加航班信息:
保存信息到结构体,指针后移即可。
订票退票:
先查找到航班,修改结构体数组上的数据即可。

完整代码如下:

#include 
#include		//包含字符串函数处理头文件
#include		//包含access函数的头文件
#include
#include
#include
#include
#include
#define N 9999			//定义最多的航班数
#define PRINT s[i].num<<"\t\t"<//宏定义输出格式
using namespace std;


struct air         	//定义结构体数组
{
	int num;				//定义航班号
	char start[20];		    //航班起始站
	char over[20];			//终点站
	char time[10];			//飞行时间
	int count;				//机票数量
}s[N];

int i,a,m=0;				//定义全局变量
char ii[10];

void add();		//函数声明增加航班信息函数
void print(); 		//显示航班信息
bool search();		//查找航班信息
void dingpiao();	//订票业务
void tuipiao();		//退票
void Read();		//读取文件
void save();		//保存文件
void output();		//输出格式
void paixu();		//航班排序
void chushihua();	//系统初始化
void build();		//建立数据文件
void paixu1();		//按航班号从小到大排序
void paixu2();		//从大到小
int head ();		//进入订票系统

int main()		//主函数
{
	int j;
	system("color b0");
	chushihua();		//系统初始化判断是否存在原始数据文件
	system("cls");
    head();	//打印出系统主界面
	system("cls");
	do
	{
	 cout<<"================================================================================ ";
	 cout<<"\n\t\t\t\t1.增加航班信息\n\t\t"
		 "\t\t2.浏览航班信息\n\t\t"
		 "\t\t3.查找航班信息(按航班号)\n\t\t"
		 "\t\t4.航班排序(按航班号)\n\t\t"
		 "\t\t5.订票业务\n\t\t"
         "\t\t6.退票业务\n\t\t"
         "\t\t0.退出\n";
	cout<<"================================================================================ " ;
	cout<<"\n请在0-6中选择以回车键结束: " ;
	cin>>j ;
	switch(j)
	{
		case 1: add();	system("cls");		//调用增加航班函数
			break;
		case 2:print();	system("cls");//调用显示模块
			break;
		case 3:search();system("cls");	//调用查找模块
			break;
		case 4:paixu(); system("cls");	//调用排序函数
			break;
		case 5:dingpiao();system("cls");	//调用订票模块
			break;
		case 6:tuipiao();system("cls");	//调用退票模块
			break;
		case 0:				//退出系统
				save();system("cls");
				cout<<"\n\n\n\t\t\t\t\n\n\t谢谢使用,再见! ";
				cout<<"\n\n\n\n\n\n\n\n\n\n\n\n\n";
			break;
	}
	}while(j!=0);		//判断是否调用其他函数

 }



void chushihua()		//定义系统初始化函数
{
	if(access("hangban.dat",0))
	{
		build();
	}
	else
		Read();
}

void build()		//定义建立数据文件函数
{
	FILE *fp;		//定义文件指针
	if((fp=fopen("hangban.dat","wb"))==NULL)		//打开文件并判定是否出错
	{
		cout<<"创建文件失败! " ;		//打印出错提示
		getchar();
		return;
	}
	cout<<"请依次输入航班信息(以回车键结束):\n" ;      //打印提示信息
	cout<<"-------------------------------------------------------------------------- \n" ;
	for(i=0;i<N;i++)
	{
		cout<<"请输入航班号: " ;
		cin>>s[i].num ;		//输入航班号
		cout<<"请输入起始站: " ;
		cin>>s[i].start ;		//输入起始站
		cout<<"请输入终点站: " ;
		cin>>s[i].over ;		//输入终点站
		cout<<"请输入时间(星期几 : " ;
		cin>>s[i].time ;		//输入时间
		cout<<"请输入机票数: " ;
		cin>>s[i].count ;	//输入机票数
		fwrite(&s[i],sizeof(struct air),1,fp);
		m++;
		cout<<"添加完毕,是否继续添加?请键入y或n以回车键结束:";
		cin>>ii ;
		if(strcmp(ii,"y")!=0)			//判断是否继续添加航班信息
		{
			fclose(fp);			//关闭文件
			return;
		}
	}
}

void Read()	//定义读取文件函数
{
	FILE *fp;
	if((fp=fopen("hangban.dat","r"))==NULL)
	{
		cout<<"创建文件失败! " ;
		getchar();
		return;
	}
	i=0;
	while(!feof(fp))
	{
		fread(&s[i],sizeof(struct air),1,fp);		//逐块读取数据
		i++;
		m++;		//计算存在航班数
	}
	m--;
	fclose(fp);
	cout<<"请稍候,正在初始化" ;
	for(a=0;a<3;a++)
		{
			cout<<"." ;
			Sleep(200);
		}
		cout<<"\n";
}

void save() 		//定义保存函数
{
	FILE *fp;
	if((fp=fopen("hangban.dat","wb"))==NULL)
	{
		cout<<"创建文件失败! ";
		getchar();
		return;
	}
	for(i=0;i<m;i++)			//逐块保存数据
		fwrite(&s[i],sizeof(struct air),1,fp);
	fclose(fp);
	cout<<"正在保存数据并退出";
	for(a=0;a<3;a++)
		{
			cout<<"." ;
			Sleep(200);
		}
	cout<<"\n";
	cout<<"\n" ;

}


void add()		//定义增加航班信息函数
{
	do{
		cout<<"请依次输入您要增加的航班信息(以回车键结束):  \n" ;      //打印提示信息
		cout<<"-------------------------------------------------------------------------- \n" ;
			cout<<"请输入航班号: " ;
			cin>>s[m].num ;		//读取航班号
			cout<<"请输入起始站: " ;
			cin>>s[m].start ;		//读取起始站
			cout<<"请输入终点站: " ;
			cin>>s[m].over ;		//读取终点站
			cout<<"请输入时间(星期几): " ;
			cin>>s[m].time ;		//读取时间
			cout<<"请输入机票数: " ;
			cin>>s[m].count ;	//读取机票数
			m++;
		cout<<"添加完毕,是否继续添加?请键入y或n以回车键结束:" ;
		cin>>ii ;
	}while(!strcmp(ii,"y"));		//判断是否继续添加
	cout<<"正在保存,请稍候" ;
	for(a=0;a<5;a++)
		{
			cout<<"." ;
			Sleep(600);
		}
		cout<<"\n" ;
}

void output()		//定义输出格式函数
{

	cout<<"航班号\t\t起始站\t\t终点站\t\t时间\t\t机票数\n" ;		//信息标题
 	for(i=0;i<m;i++)
		cout<<PRINT;//打印出信息

}

void print()		//定义显示航班信息函数
{
	cout<<"正在加载,请稍候" ;
		for(a=0;a<5;a++)
			{
				cout<<"." ;
				Sleep(400);
			}
			cout<<"\n" ;
		system("cls");
	cout<<"\n目前我们有如下航班:\n\n" ;
	output();			//调用输出格式函数
	cout<<"\n请按回车键返回上层菜单 " ;
	getchar();
	getchar();

}



bool search()		//定义查询函数
{
	int n;
	do
	{
		cout<<"\n请输入航班号: " ;
		cin>>n;		//输入查询的航班号
		cout<<"正在查询" ;
			for(a=0;a<5;a++)
				{
					cout<<"." ;
					Sleep(400);
				}
				cout<<"\n" ;
		for(i=0;i<m;i++)
		{
			if(s[i].num==n)	//按航班号判定输出条件
			{
				cout<<"\n您所查找的航班信息为:\n " ;
				cout<<"航班号\t\t起始站\t\t终点站\t\t时间\t\t机票数 \n\n" ;
				cout<<PRINT ;		//显示信息
				cout<<"\n查询完毕,按回车键继续" ;
				getchar();
				getchar();
				return true;
			}
	}
	cout<<"\n对不起,没有您需要的信息!\n " ;
	cout<<"是否重新查找?请键入y或n以回车键结束 " ;
	cin>>ii ;
	}while(!strcmp(ii,"y"));//判定是否重新查找

}


void dingpiao()		//定义订票业务函数
{
	int n,x;
	char a[10]="y";
	do
	{

		if(!search())
		{
			cout<<"对不起!没有找到您所需要的航班,所以不能订票。\n" ;	//未查找到所需航班
			cout<<"\n请按回车键返回上层菜单 " ;
			getchar();
			getchar();
			strcpy(ii,"n");
			break;
		}
		do
		{
			cout<<"请输入您要订的机票数(以回车键结束): " ;
			cin>>n ;		//输入所订机票数
			cout<<"请稍候,正在订票" ;
			for(x=0;x<3;x++)
				{
					cout<<"." ;
					Sleep(600);
				}
			cout<<"\n" ;
			if(n<=0)			//判定机票数是否出错
			{
				cout<<"输入错误!至少需订1张机票。\n" ;
			}
			else if(s[i].count==0)//判定机票是否售完
			{
				cout<<"对不起,你所选择的航班的机票已售完!\n" ;
				break;
			}
			else if(s[i].count!=0&&s[i].count>=n)	//判定机票数是否大于等于订票数
			{
				s[i].count=s[i].count-n;
				cout<<"订票成功! " ;
				break;
			}
			else if(s[i].count<n)//判定机票数是否小于订票数
			{
				cout<<"对不起,你所选择的航班只剩"<<s[i].count<<"张机票\n";
				cout<<"是否需要重新输入机票数?\n请输入y或n以回车键结束: " ;//判定是否重新输入订票数
				cin>>a ;
				cout<<"请稍候,正在订票" ;
				for(x=0;x<3;x++)
					{
						cout<<"." ;
						Sleep(600);
					}
				cout<<"\n" ;
			}
		}while(!strcmp(a,"y"));
		cout<<"是否需要订其他航班的机票?\n请输入y或n以回车键结束: " ;
		cin>>a ;
	}while(!strcmp(a,"y" )) ;		//判定是否继续订票
}


void tuipiao()	//定义退票函数
{
	int n,x;
	char a[10];
	do
	{

		if(!search())
		{
			cout<<"对不起!没有找到您所需要的航班,所以不能退票。\n";
			cout<<"\n请按回车键返回上层菜单 " ;
			getchar();
			getchar();
			strcpy(ii,"n");
			break;
		}
		cout<<"请输入您要退的机票数目: " ;
		cin>>n ;			//输入所退票数
		cout<<"请稍候,正在退票" ;
		for(x=0;x<3;x++)
			{
				cout<<"." ;
				Sleep(600);
			}
			cout<<"\n" ;
		if(n<=0)			//判定票数是否有效
			cout<<"输入错误!至少需退1张机票。 " ;
		else
		{
			s[i].count=s[i].count+n;
			cout<<"退票成功! " ;
		}
		cout<<"是否继续? 请键入y或n以回车键结束: " ;		//判定是否继续退票
		cin>>a ;
	}while(!strcmp(a,"y"));		//判定并跳出循环


}


void paixu()		//定义排序函数
{
	int n;

	cout<<"\n******************************************************************************** " ;
	 cout<<"\n\t\t1.按航班号从小到大排序\t\t\n"
		 "\t\t2.按航班号从大到小排序\t\t\n" ;
	cout<<"******************************************************************************** " ;
	cout<<"请在1-2中选择以回车键结束: " ;
	cin>>n ;		//输入排序方式
	switch(n)
	{
		case 1:paixu1();//调用从小到大排序函数
			break;
		case 2:paixu2();//调用从大到小排序函数
			break;
	}
	cout<<"排序后的航班信息为:\n" ;
	output();			//显示排序后航班信息
	cout<<"\n请按回车键返回上层菜单 " ;
 	getchar();
	getchar();
	/*for(a=0;a<5;a++)
			{
				cout<<"." ;
				Sleep(400);
			}
			cout<<"\n" ;*/
}

void paixu1()		//定义从小到大排序函数
{
	int k,j;
	struct air t;
	for(i=0;i<m;i++)	//选择排序
	{
		k=i;
		for(j=i+1;j<m;j++)
			if(s[k].num>s[j].num)
				k=j;
		if(i!=k)
		{
			t=s[k];
			s[k]=s[i];
			s[i]=t;
		}
	}
	cout<<"正在排序,请稍后" ;
	for(a=0;a<5;a++)
		{
			cout<<"." ;
			Sleep(400);
		}
		cout<<"\n" ;

}

void paixu2()		//定义从大到小排序函数
{
	int k,j;
	struct air t;
	for(i=0;i<m;i++)
	{
		k=i;
		for(j=i+1;j<m;j++)
			if(s[k].num<s[j].num)
				k=j;
		if(i!=k)
		{
			t=s[k];
			s[k]=s[i];
			s[i]=t;
		}
	}
	cout<<"正在排序,请稍后" ;
     for(a=0;a<5;a++)
	{
		cout<<"." ;
		Sleep(400);
	}
	cout<<"\n" ;
}

int head ()		 	//进入订票系统
{
	cout<<"=================================================================\n" ;
	cout<<"*                                                               *\n" ;
	cout<<"*                       欢迎使用机票订票管理系统                *\n" ;
	cout<<"*                                                               *\n" ;
	cout<<"*                                                               *\n" ;
	cout<<"=================================================================\n" ;
	cout<<"请按回车键进入界面" ;
	getchar();
	cout<<"正在进入系统选项" ;
	for(a=0;a<3;a++)
	{
		cout<<"." ;
		Sleep(600);
	}
	cout<<"\n" ;
	return 0;
}

你可能感兴趣的:(c++,算法,数据结构,程序设计,leetcode)