📄 flight.cpp
字号:
// 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 + -