機票管理系統C++完整代碼 訂退票、界面、文件存取、查找、排序、增加航班 票務管理 航班管理

大一的時課設,這是簡單的1.0版本,可供參考框架和思路。那時候喜歡用拼音做變量名函數名,介意的望海涵。
還不會上傳資源,完整代碼在最後。
功能全面升級的完整版我過幾天會整理上來。

實現功能:
在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述

具體實現:
1、頭文件、結構體和函數如下:

#include <iostream>
#include<cstring>		//包含字符串函數處理頭文件
#include<process.h>		//包含access函數的頭文件
#include<io.h>
#include<cstdlib>
#include<windows.h>
#include<conio.h>
#include<fstream>
#define N 9999			//定義最多的航班數
#define PRINT s[i].num<<"\t\t"<<s[i].start<<"\t\t"<<s[i].over<<"\t\t星期"<<s[i].time<<"\t\t"<<s[i].count<<endl   //宏定義輸出格式
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 <iostream>
#include<cstring>		//包含字符串函數處理頭文件
#include<process.h>		//包含access函數的頭文件
#include<io.h>
#include<cstdlib>
#include<windows.h>
#include<conio.h>
#include<fstream>
#define N 9999			//定義最多的航班數
#define PRINT s[i].num<<"\t\t"<<s[i].start<<"\t\t"<<s[i].over<<"\t\t星期"<<s[i].time<<"\t\t"<<s[i].count<<endl   //宏定義輸出格式
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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章