⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flight.cpp

📁 课程设计订票系统,原创,今年作课程设计时自己写的,经过多次测试,程序正确,功能齐全,可作为参考!希望对大家有用
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// Flight.cpp: implementation of the Flight class.
//
//////////////////////////////////////////////////////////////////////

#include "Flight.h"
#include<io.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iomanip.h>
#include<iostream.h>

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

Flight::Flight()
{
	flight_count=0;
	client_count=0;
	checked=false;
}

Flight::~Flight()
{

}

//////////////////////////////////////////////////////////////////////
// member function
//////////////////////////////////////////////////////////////////////

//验证密码信息
bool Flight::checkpwd()
{
	char pwd[15];

	int i=1;

	cout<<endl;

	cout<<"请输入密码并以回车键结束 (你有三次尝试机会): ";

	cin>>pwd;          //读取密码

	for(;i<3;i++)
	{
		cout<<endl;

		if(strcmp(pwd,"flight_admin")==0)
		{
			cout<<"登录成功!"<<endl<<endl;

			checked=true;

			return true;
		}

		if(i!=3)

			cout<<"密码错误,你还有"<<(3-i)<<"次机会!请输入密码并以回车键结束: ";

		cin>>pwd;
	}

	if(i==3)
	{
		cout<<endl;

		cout<<"对不起,您没有该权限.请确认您有该权限后再进行操作!"<<endl;

		cout<<endl;

		return	false;
	}

	return true;
}

//确保航班号唯一
bool Flight::check_flight_num_unique(int flight_num)
{
	for(int i=0;i<flight_count;i++)
	{
		if(flight[i].number == flight_num)		return false;
	}
	return true;
}

//录入航班信息
void Flight::input_flight_info()
{

	if(checked || checkpwd())
	{
		print_flight_info();

		char flag;

		cout<<"请按照要求格式依次输入航班信息(航班号不能重复): "<<endl;

		cout<<endl;

		cout<<"--------------------------------------------------------------------------"<<endl;

		cout<<endl;

		for(int i=flight_count;i<FLIGHT_COUNT;i++)
		{
			cout<<"请输入航班编号(如:1,2...):  ";	cin>>flight[i].number;	cout<<endl;

			if(!check_flight_num_unique(flight[i].number)) 
			{
				cout<<"航班号不能重复~~!"<<endl<<endl;

				i--;	continue;
			}

			cout<<"请输入起飞时间(如:13:00...):  ";	cin>>flight[i].take_off_time;	cout<<endl;

			cout<<"请输入降落时间(如:16:00...):  ";	cin>>flight[i].land_time;	cout<<endl;

			cout<<"请输入起飞城市(如:长沙...):  ";	cin>>flight[i].take_off_city;	cout<<endl;

			cout<<"请输入降落城市(如:洛阳...):  ";	cin>>flight[i].land_city;	cout<<endl;

			cout<<"请输入机票价格(如:800.00...):  ";	cin>>flight[i].price;	cout<<endl;

			cout<<"请输入剩余座位(如:80...):  ";	cin>>flight[i].remain_seat_num;	cout<<endl;	

			cout<<"请输入票价折扣(如:0.5...):  ";	cin>>flight[i].discount;	cout<<endl;

			flight_count++;

			cout<<"第"<<flight_count<<"个信息已经输完,是否继续(y继续,n结束)?";

			cin>>flag;

			cout<<endl;

			if(flag=='n') break;

		}
		cout<<endl;

		if(save_flight_info())

			cout<<"航班数据录入成功!"<<endl;

		else
		
			cout<<"航班数据存盘时出现错误!"<<endl;
	}
}

//打印航班信息
void Flight::print_flight_info()
{
	if(flight_count!=0)
	{
		cout<<"现有航班信息如下: "<<endl;

		cout<<endl;

		cout<<setw(10)<<"航班编号"<<setw(10)<<"起飞时间"<<setw(10)<<"降落时间"
			<<setw(10)<<"起飞城市"<<setw(10)<<"降落城市"<<setw(10)<<"机票价格"
			<<setw(10)<<"剩余座位"<<setw(10)<<"票价折扣"<<endl;

		for(int i=0;i<flight_count;i++)
		{
			if(flight[i].number<0) continue;

			cout<<setw(10)<<flight[i].number<<setw(10)<<flight[i].take_off_time
				<<setw(10)<<flight[i].land_time<<setw(10)<<flight[i].take_off_city
				<<setw(10)<<flight[i].land_city<<setw(10)<<flight[i].price
				<<setw(10)<<flight[i].remain_seat_num<<setw(10)<<flight[i].discount;

			cout<<endl;

		}
	}
	else if((_access( "flight_count.dat", 0 )) != -1) 
	{
		if(read_flight_info())
		{
			cout<<"现有航班信息如下: "<<endl;

			cout<<endl;

			cout<<setw(10)<<"航班编号"<<setw(10)<<"起飞时间"<<setw(10)<<"降落时间"
				<<setw(10)<<"起飞城市"<<setw(10)<<"降落城市"<<setw(10)<<"机票价格"
				<<setw(10)<<"剩余座位"<<setw(10)<<"票价折扣"<<endl;

			for(int i=0;i<flight_count;i++)
			{

				cout<<setw(10)<<flight[i].number<<setw(10)<<flight[i].take_off_time
					<<setw(10)<<flight[i].land_time<<setw(10)<<flight[i].take_off_city
					<<setw(10)<<flight[i].land_city<<setw(10)<<flight[i].price
					<<setw(10)<<flight[i].remain_seat_num<<setw(10)<<flight[i].discount;

				cout<<endl;

			}
		}
		else
		{
			cout<<"航班数据读盘时出现错误!"<<endl;
		}
	}
	else
	{
		cout<<endl;

		cout<<"尚无任何航班信息!"<<endl<<endl;
	}
}

//保存航班信息
bool Flight::save_flight_info()
{
	FILE  *fp;

	int i;

	if((fp=fopen("flight_info.dat","wb"))==NULL)//文件打开出错
	{

		cout<<"创建/打开文件失败! "<<endl;

		return false;
	}


	for(i=0;i<flight_count;i++)//利用循环写入每次航班的信息
	{

		if(flight[i].number<0) continue;

		if(fwrite(&flight[i],sizeof(Flight_Info),1,fp)!=1) //在输出的同时检查输出是否成功
		{

				cout<<"写入文件失败! "<<endl;

				fclose(fp);  //关闭文件
				
				return false;

		}

	}

	fclose(fp);  //关闭文件

	if((fp=fopen("flight_count.dat","wb"))==NULL)//打开文件并判断是否出错 
	{

		cout<<"创建/打开文件失败! "<<endl;//打印出错提示

		return false;

	}

	if(fprintf(fp,"%d",flight_count)<0)
	{

		cout<<"写入文件失败! "<<endl;

		fclose(fp);  //关闭文件
				
		return false;
	}
	
	fclose(fp);  //关闭文件

	return true;
}

//读取航班信息
bool Flight::read_flight_info()
{
	FILE  *fp;

	int i;

	if((fp=fopen("flight_count.dat ","rb"))==NULL)//打开文件并判断是否出错
	{

		cout<<"打开文件失败! "<<endl;

		return false;

	}

	if(fscanf(fp,"%d",&flight_count)<0)//读取航班数信息
	{
		cout<<"读取文件失败! "<<endl; 

		fclose(fp);  //关闭文件
				
		return false;
	}

	fclose(fp);  //关闭文件

	if((fp=fopen("flight_info.dat","rb"))==NULL)    //文件打开出错
	{

		cout<<"打开文件失败! "<<endl;

		return false;
	}


	for(i=0;i<flight_count;i++)    //利用循环读取每次航班的信息

	{

		if(fread(&flight[i],sizeof(Flight_Info),1,fp)!=1)
		{
			cout<<"读取文件失败! "<<endl; 

			fclose(fp);		//关闭文件
				
			return false;

		}
		
	}

	fclose(fp);		//关闭文件

	return true;

}

//更新航班信息
void Flight::update_flight_info()
{
	if(checked || checkpwd())
	{
		int flight_num;

		char flag;

		int i;

		cout<<endl;

		do
		{

			print_flight_info();

			if(flight_count == 0)	break;

			else
			{

				cout<<"请输入要更新信息的航班的航班号: ";

				cin>>flight_num;

				cout<<endl;

				for(i=0;i<flight_count;i++)
				{
					if(flight[i].number==flight_num) break;
				}

				if(i>=flight_count)
				{
					cout<<"请输入正确的航班号,再进行更新~!"<<endl;
				}
				
				else
				{
					cout<<"更新前航班信息为: "<<endl;

					cout<<endl;

					cout<<setw(10)<<"航班编号"<<setw(10)<<"起飞时间"<<setw(10)<<"降落时间"
						<<setw(10)<<"起飞城市"<<setw(10)<<"降落城市"<<setw(10)<<"机票价格"
						<<setw(10)<<"剩余座位"<<setw(10)<<"票价折扣"<<endl;
					
					cout<<setw(10)<<flight[i].number<<setw(10)<<flight[i].take_off_time
							<<setw(10)<<flight[i].land_time<<setw(10)<<flight[i].take_off_city
							<<setw(10)<<flight[i].land_city<<setw(10)<<flight[i].price
							<<setw(10)<<flight[i].remain_seat_num<<setw(10)<<flight[i].discount<<endl;


					cout<<"请输入新的航班编号(如:1,2...):  ";	cin>>flight[i].number;	cout<<endl;

					cout<<"请输入新的起飞时间(如:13:00...):  ";	cin>>flight[i].take_off_time;	cout<<endl;

					cout<<"请输入新的降落时间(如:16:00...):  ";	cin>>flight[i].land_time;	cout<<endl;

					cout<<"请输入新的起飞城市(如:长沙...):  ";	cin>>flight[i].take_off_city;	cout<<endl;

					cout<<"请输入新的降落城市(如:洛阳...):  ";	cin>>flight[i].land_city;	cout<<endl;

					cout<<"请输入新的机票价格(如:800.00...):  ";	cin>>flight[i].price;	cout<<endl;

					cout<<"请输入新的剩余座位(如:80...):  ";	cin>>flight[i].remain_seat_num;	cout<<endl;	

					cout<<"请输入新的票价折扣(如:0.5...):  ";	cin>>flight[i].discount;	cout<<endl;

					cout<<"更新后航班信息为: "<<endl;

					cout<<endl;

					cout<<setw(10)<<"航班编号"<<setw(10)<<"起飞时间"<<setw(10)<<"降落时间"
						<<setw(10)<<"起飞城市"<<setw(10)<<"降落城市"<<setw(10)<<"机票价格"
						<<setw(10)<<"剩余座位"<<setw(10)<<"票价折扣"<<endl;
					
					cout<<setw(10)<<flight[i].number<<setw(10)<<flight[i].take_off_time
							<<setw(10)<<flight[i].land_time<<setw(10)<<flight[i].take_off_city
							<<setw(10)<<flight[i].land_city<<setw(10)<<flight[i].price
							<<setw(10)<<flight[i].remain_seat_num<<setw(10)<<flight[i].discount<<endl;

					if(save_flight_info())

						cout<<"该航班信息更新成功!"<<endl<<endl;

					else
			
						cout<<"航班更新后数据存盘时出现错误!"<<endl<<endl;

					cout<<"是否继续(y继续,n结束)?";

					cin>>flag;

					cout<<endl;
				}
			}

		}while(flag=='y');
	}
}

//删除航班信息
void Flight::delete_flight_info()
{
	if(checked || checkpwd())
	{
		int flight_num;

		char flag;

		int i;
 
		cout<<endl;

		do
		{

			print_flight_info();

			if(flight_count == 0)	break;

			else
			{

				cout<<"请输入要删除的航班的航班号(请慎重使用,请勿删除已售票的航班): ";

				cin>>flight_num;

				cout<<endl;

				if(check_flight_can_delete(flight_num)==1)
				{
				
					for(i=0;i<flight_count;i++)
					{
						if(flight[i].number==flight_num) break;
					}

					if(i>=flight_count)
					{
						cout<<"请输入正确的航班号,再进行删除~!"<<endl;
					}
					
					else
					{

						flight[i].number=-1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -