代码.docx
《代码.docx》由会员分享,可在线阅读,更多相关《代码.docx(53页珍藏版)》请在冰豆网上搜索。
代码
#include
#include
#include
#include
#include
#defineMAX1000
usingnamespacestd;
classPrint
{
public:
virtualvoiddisplay()const=0;//纯虚函数,输出
};
//建立航班信息类
classFlight:
publicPrint
{
friendostream&operator<<(ostream&output,Flight&cp);//友元重载"<<"
public:
voidsetNum(stringnum);//航班号设置函数
voidsetTime(stringtime);//起飞时间设置函数
voidsetStar(stringstar);//起飞站设置函数
voidsetDestination(stringdestination);//终点站设置函数
voidsetPrice(doubleprice);//票价设置函数
voidsetSeat(intseat);//满载人数设置函数
voidsetRema(intrema);//剩票设置函数
voidsetState(stringstate);//航班状态设置函数
stringgetNum();//航班号获取函数
stringgetTime();//起飞时间获取函数
stringgetStar();//起飞站获取函数
stringgetDestination();//终点站获取函数
doublegetPrice();//票价获取函数
intgetSeat();//满载人数获取函数
intgetRema();//剩票获取函数
stringgetState();//航班状态获取函数
Flightoperator-(intn);//重载"-"
Flightoperator+(intn);//重载"+"
virtualvoiddisplay()const;//虚函数继承
private:
stringm_fnum;//航班号
stringm_ftime;//起飞时间
stringm_fstar;//起点站
stringm_fdestination;//终点站
doublem_fprice;//票价
intm_fseat;//票数
intm_frema;//余票
stringm_fstate;//飞机是否起飞
};
classTraffic:
publicFlight
{
public:
//修改航班信息
voidRevamp(intn);
voidAdd();//添加航班信息
voidFound();//创建航班信息
voidBook(intn);//订票
voidRefound(intn);//退票
voidY_Scanner();//浏览用户已购买的航班票
voidSearch(intn);//查找
voidmanage();//验证管理员
voidDelete();//删除航班信息
boolIf_Takeoff(Flight&flight);//判断飞机是否起飞
};
//菜单
classMenu
{
public:
voidinput1(intn);//管理员菜单
voidinput2(intn);//用户菜单
};
//建立用户信息类
classUser:
publicPrint
{
public:
~User(){}//User的析构函数
voidsetNam(stringnam);//用户姓名设置函数
voidsetId(stringid);//用户身份证号设置函数
voidsetNumm(stringnumm);//用户所买航班票航班的设置函数
stringgetNam();//用户姓名获取函数
stringgetId();//用户身份证号获取函数
stringgetNumm();//航班号获取函数
virtualvoiddisplay()const;//继承Print
private:
stringu_nam;//姓名
stringu_id;//证件号
stringu_numm;//订票的航班编号
};
FlightmyFlight[MAX];
FILE*fp,*fpp;
TrafficmyTraffic;
MenumyMenu;
UsermyUser[MAX];
voidUser:
:
setNam(stringnam)
{
u_nam=nam;
}
voidUser:
:
setId(stringid)
{
u_id=id;
}
voidUser:
:
setNumm(stringnumm)
{
u_numm=numm;
}
stringUser:
:
getNam()
{
returnu_nam;
}
stringUser:
:
getId()
{
returnu_id;
}
stringUser:
:
getNumm()
{
returnu_numm;
}
voidUser:
:
display()const
{
cout<}
voidFlight:
:
setNum(stringnum)
{
m_fnum=num;
}
voidFlight:
:
setTime(stringtime)
{
m_ftime=time;
}
voidFlight:
:
setStar(stringstar)
{
m_fstar=star;
}
voidFlight:
:
setDestination(stringdestination)
{
m_fdestination=destination;
}
voidFlight:
:
setPrice(doubleprice)
{
m_fprice=price;
}
voidFlight:
:
setSeat(intseat)
{
m_fseat=seat;
}
stringFlight:
:
getNum()
{
returnm_fnum;
}
stringFlight:
:
getTime()
{
returnm_ftime;
}
stringFlight:
:
getStar()
{
returnm_fstar;
}
stringFlight:
:
getDestination()
{
returnm_fdestination;
}
doubleFlight:
:
getPrice()
{
returnm_fprice;
}
intFlight:
:
getSeat()
{
returnm_fseat;
}
voidFlight:
:
setRema(intrema)
{
if(rema>m_fseat)
{
m_frema=m_fseat;
}
elseif(rema<0)
{
m_frema=0;
}
else
{
m_frema=rema;
}
}
voidFlight:
:
setState(stringstate)
{
if(state=="YES"||state=="yes")
{
m_fstate="YES";
}
else
{
m_fstate="NO";
}
}
intFlight:
:
getRema()
{
returnm_frema;
}
FlightFlight:
:
operator-(intn)
{
m_frema-=n;
return*this;
}
FlightFlight:
:
operator+(intn)
{
m_frema+=n;
return*this;
}
ostream&operator<<(ostream&output,Flight&cp)
{
output<returnoutput;
}
stringFlight:
:
getState()
{
returnm_fstate;
}
voidFlight:
:
display()const
{
cout<}
//判断飞机是否起飞
boolTraffic:
:
If_Takeoff(Flight&flight)
{
if(flight.getState()=="YES")
{
returntrue;
}
else
{
returnfalse;
}
}
//身份验证
voidTraffic:
:
manage()
{
charpassword[20];//用于存贮密码
inttimes=3;
cout<<"登录系统需验证密码!
"<//验证密码。
三次错误后,就自动退出程序
do
{
times--;
cout<<"请输入密码:
(默认000)";
cin>>password;
if(strcmp(password,"000")==0)//密码是"000"
{
times=-1;
break;
}
elseif(times>0)
{
cout<<"密码错误!
\n剩余"<"<}
}while(times>0);
if(times!
=-1)
{
cout<<"对不起!
\n您不是管理员!
不能使用此系统!
"<}
}
//删除模块
voidTraffic:
:
Delete()
{
intseat,i,rema,k,d,m,c=0,e=0;
charstate[3],num[20],time[20],destination[20],star[20];
charname[12],ID[18],number[20];
doubleprice;
stringnumm;
if((fp=fopen("flight.txt","r"))==NULL)
{
cout<<"Cannotopenflight.txt."<exit(0);
}
i=0;
while(!
feof(fp))
{
fscanf(fp,"%s",num);
fscanf(fp,"%s",time);
fscanf(fp,"%s",star);
fscanf(fp,"%s",destination);
fscanf(fp,"%s",state);
fscanf(fp,"%lf%d",&price,&seat);
fscanf(fp,"%d",&rema);
myFlight[i].setNum(num);
myFlight[i].setTime(time);
myFlight[i].setStar(star);
myFlight[i].setDestination(destination);
myFlight[i].setPrice(price);
myFlight[i].setSeat(seat);
myFlight[i].setRema(rema);
myFlight[i].setState(state);
i++;
}
k=i-1;
fclose(fp);
cout<<"请输入航班号:
";
cin>>numm;
for(i=0;i{
if(myFlight[i].getNum()==numm)
{
e=1;
}
}
if(e!
=1)
{
cout<<"无此航班的信息"<}
fp=fopen("flight.txt","w+");
for(i=0;i{
if(myFlight[i].getNum()==numm)
{
c=1;
continue;
}
else
{
fprintf(fp,"%s",myFlight[i].getNum().c_str());
fprintf(fp,"%s",myFlight[i].getTime().c_str());
fprintf(fp,"%s",myFlight[i].getStar().c_str());
fprintf(fp,"%s",myFlight[i].getDestination().c_str());
fprintf(fp,"%s",myFlight[i].getState().c_str());
fprintf(fp,"%.2lf",myFlight[i].getPrice());
fprintf(fp,"%d",myFlight[i].getSeat());
fprintf(fp,"%d\n",myFlight[i].getRema());
}
}
fclose(fp);
fpp=fopen("ticket.txt","r");
i=0;
while(!
feof(fpp))
{
fscanf(fpp,"%s",name);
fscanf(fpp,"%s",ID);
fscanf(fpp,"%d",&d);
fscanf(fpp,"%s",number);
myUser[i].setNam(name);
myUser[i].setId(ID);
myUser[i].setNumm(number);
i++;
}
m=i-1;
fclose(fpp);
fpp=fopen("ticket.txt","w+");
for(i=0;i{
if(myUser[i].getNumm()==numm)
{
c=1;
continue;
}
else
{
fprintf(fpp,"%s",myUser[i].getNam().c_str());
fprintf(fpp,"%s",myUser[i].getId().c_str());
fprintf(fpp,"%d",d);
fprintf(fpp,"%s\n",myUser[i].getNumm().c_str());
}
}
if(c==1)
{
cout<<"删除成功"<}
fclose(fpp);
}
//查询模块
voidTraffic:
:
Search(intn)
{
charch;
intcm,i;
cin>>cm;
switch(cm)
{
case1:
{
stringinfo;
//输入要查询的航班号
cout<<"Enterastring:
";
cin>>info;
cout<<"航班号"<<""<<"起飞时间"<<""<<"起飞站"<<""<<"终点站"<<""<<"状态"<<""<<"票价"<<""<<"票数"<<""<<"余票"<for(i=0;i{
if(info==myFlight[i].getNum())
{
myFlight[i].display();
}
}
cout<<"是否返回上一级(y/n)?
"<cin>>ch;
if(ch=='y')
{
cout<<"请输入你的选择:
";
Search(n);
}
break;
}
case2:
{
stringstart,last;
//输入要查询的起始站
cout<<"Enterastartstation:
";
cin>>start;
//输入要查询的终点站
cout<<"Enteralaststation:
";
cin>>last;
cout<<"航班号"<<""<<"起飞时间"<<""<<"起飞站"<<""<<"终点站"<<""<<"状态"<<""<<"票价"<<""<<"票数"<<""<<"余票"<for(i=0;i{
if((start==myFlight[i].getStar())&&(last==myFlight[i].getDestination()))
{
myFlight[i].display();
}
}
cout<<"是否返回上一级(y/n)?
"<cin>>ch;
if(ch=='y')
{
cout<<"请输入你的选择:
";
Search(n);
}
break;
}
default:
{
cout<<"输入错误!
请重新输入"<Search(n);
}
}
}
//更改航班信息
voidTraffic:
:
Revamp(intn)
{
intcp,i;
stringFnum,Snum;
stringStime;
stringSstar;
stringSdestination,Sstate;
doubleSprice;
intSseat;
charch;
cin>>cp;
switch(cp)
{
case1:
{
if((fpp=fopen("ticket.txt","r"))==NULL)
{
cout<<"Cannotopenticket.txt"<exit(0);
}
intm,d;
charname[12],ID[12],number[12];
i=0;
while(!
feof(fpp))
{
fscanf(fpp,"%s",name);
fscanf(fpp,"%s",ID);
fscanf(fpp,"%d",&d);
fscanf(fpp,"%s",number);
myUser[i].setNam(name);
myUser[i].setId(ID);
myUser[i].setNumm(number);
i++;
}
m=i-1;
if(fclose(fpp))
{
cout<<"Cannotcloseticket.txt"<exit(0);
}
cout<<"输入需要更改的航班号:
"<cin>>Fnum;
cout<<"输入更改后的航班号:
"<cin>>Snum;
for(i=0;i{
if(Fnum==myFlight[i].getNum())
{
myFlight[i].setNum(Snum);
cout<<"航班号"<<""<<"起飞时间"<<""<<"起飞站"<<""<<"终点站"<<""<<"状态"<<""<<"票价"<<""<<"票数"<<""<<"余票"<cout<}
}
if((fpp=fopen("ticket.txt","w+"))==NULL)
{
cout<<"Cannotopenticket.txt"<exit(0);
}
for(i=0;i{
if(Fnum==myUser[i].getNumm())
{
myUser[i].setNumm(Snum);
}
fprintf(fpp,"%s",myUser[i].getNam().c_str());
fprintf(fpp,"%s",myUser[i].getId().c_str());
fprintf(fpp,"%d",d);
fprintf(fpp,"%s\n",myUser[i].getNumm().c_str());
}
if(fclose(fpp))
{
cout<<"Cannotcloseticket.txt"<exit(0);
}
break;
}
case2:
{
cout<<"输入需要更改的航班号:
"<cin>>Fnum;
cout<<"输入更改后的起飞时间:
"<cin>>Stime;
for(i=0;i{
if(Fnum