?? 1.cpp
字號:
if(ch!='#')
{
lines[i].replacehead->front=new replaceman;
lines[i].replacehead->rear=lines[i].replacehead->front;
replacep=lines[i].replacehead->front;
}
else
lines[i].replacehead->front=lines[i].replacehead->rear=NULL;
while(ch!='#')
{
f>>replacep->name>>replacep->bill[1]>>replacep->bill[2]>>replacep->bill[3];
replacep->next=NULL;
f.get(ch);
if(ch!='#')
{
replacep=new replaceman;
replacep->next=NULL;
lines[i].replacehead->rear->next=replacep;
lines[i].replacehead->rear=replacep;
}
}
f.close();
i++;
}
}
void returnbill(vector<airline> &lines)
{
string flightn;
string name;
cout<<"請輸入航班號:";
cin>>flightn; //航班號
cout<<"請輸入姓名:";
cin>>name; //姓名
int i=0;
int degreen[3]={1,6,11}; //幾等艙位的第一個座位座號
orderman *orderp;
orderman *befororderp;
Orderbill *billp;
Orderbill *destroybill;
replaceman *replacep;
replaceman *beforreplace;
char ch;
int n,j,k,m;
int flag1=0,flag2=0; //標記是否找到航班號和客戶姓名
while(i<lines.size())
{
if(lines[i].flightnumber==flightn) //退票
{
orderp=lines[i].orderhead;
if(orderp==NULL)
cout<<"此航班中無你訂的票.\n";
else
{
while(orderp!=NULL)
{
if(orderp->name==name)
{
cout<<"你所訂票的座號為:";
billp=orderp->billhead;
j=0;
do
{
cout<<billp->number<<" ";
billp=billp->next;
j++;
}while(billp!=NULL);
cout<<endl<<"是否要全部都退(Y/N):";
cin.get(ch);
ch=readchar();
if(ch=='y'||ch=='Y')
{
billp=orderp->billhead;
while(billp!=NULL)
{
destroybill=billp;
lines[i].seat[destroybill->number]=0;
billp=billp->next;
if(destroybill->number<=5)
{
lines[i].ordernumber[1]--;
lines[i].remainnumber[1]++;
}
else if(destroybill->number>5&&destroybill->number<=10)
{
lines[i].ordernumber[2]--;
lines[i].remainnumber[2]++;
}
else
{
lines[i].ordernumber[3]--;
lines[i].remainnumber[3]++;
}
delete destroybill;
}
if(orderp==lines[i].orderhead)
{
lines[i].orderhead=orderp->next;
delete orderp;
orderp=lines[i].orderhead;
}
else
{
befororderp->next=orderp->next;
delete orderp;
orderp=befororderp;
}
}//if(ch=='y'||ch=='Y')結束
else
{
cout<<"請輸入要退的票數:";
n=judgeint();
while(n<0||n>j)
{
cout<<"輸入有誤請重新輸入:";
n=judgeint();
}
billp=orderp->billhead;
for(j=0;j<n;j++)
{
destroybill=billp;
lines[i].seat[destroybill->number]=0;
billp=billp->next;
if(destroybill->number<=5)
{
lines[i].ordernumber[1]--;
lines[i].remainnumber[1]++;
}
else if(destroybill->number>5&&destroybill->number<=10)
{
lines[i].ordernumber[2]--;
lines[i].remainnumber[2]++;
}
else
{
lines[i].ordernumber[3]--;
lines[i].remainnumber[3]++;
}
delete destroybill;
}
orderp->billhead=billp;
}//else結束
flag1=1;
orderp=orderp->next;
}//if(orderp->name==name)結束
else
{
befororderp=orderp;
orderp=orderp->next;
}
}//while(orderp!=NULL)結束
if(flag1==0)
cout<<"此航班中無你訂的票.\n";
else //處理候補
{
replacep=lines[i].replacehead->front;
if(lines[i].replacehead->front!=NULL)
{
while(replacep!=NULL)
{
if(replacep->bill[1]<=lines[i].remainnumber[1]&&replacep->bill[2]<=lines[i].remainnumber[2]
&&replacep->bill[3]<=lines[i].remainnumber[3])
{
befororderp=lines[i].orderhead;
while(befororderp->next!=NULL)
befororderp=befororderp->next;
orderp=new orderman;
orderp->name=replacep->name;
orderp->next=NULL;
orderp->billhead=new Orderbill;
billp=orderp->billhead;
m=0;
for(k=1;k<4;k++)
{
for(n=degreen[k-1],j=0;j<replacep->bill[k];n++)
{
if(lines[i].seat[n]==0)
{
lines[i].seat[n]=1;
if(m==0)
{
billp->seatdegree=k;
billp->number=n;
billp->next=NULL;
lines[i].ordernumber[k]++;
lines[i].remainnumber[k]--;
}
else
{
destroybill=new Orderbill;
destroybill->seatdegree=k;
destroybill->number=n;
destroybill->next=NULL;
billp->next=destroybill;
billp=destroybill;
lines[i].ordernumber[k]++;
lines[i].remainnumber[k]--;
}
j++;
m++;
}
}
}//for(int k=1;k<4;k++)結束
befororderp->next=orderp;
if(replacep==lines[i].replacehead->front)
{
if(replacep==lines[i].replacehead->rear)
lines[i].replacehead->rear=lines[i].replacehead->front=replacep->next;
else
lines[i].replacehead->front=replacep->next;
}
else if(replacep==lines[i].replacehead->rear)
lines[i].replacehead->rear=beforreplace;
else
beforreplace->next=replacep;
beforreplace=replacep;
replacep=replacep->next;
delete replacep;
}//if結束
else
{
beforreplace=replacep;
replacep=replacep->next;
}
}//while(replacep!=NULL)結束
}
}//else結束
}//else結束
flag2=1;
}//if(lines[i].flightnumber==flightn)結束
i++;
}//while(i<lines.size())
if(flag2==0)
cout<<"無此航班.\n";
}
void witerfile(vector<airline> lines) //寫入文件
{
ofstream f;
orderman *orderp;
Orderbill *billp;
replaceman *replacep;
int i,j,n;
string file[]={"011.txt","012.txt","021.txt","022.txt","031.txt","032.txt","041.txt","042.txt","051.txt","052.txt"}; //儲存已訂票及等候替補客戶信息的文件的文件名數組
f.open("airline.txt"); //寫入航線信息的文件
if(f.fail())
{
cout<<"寫入文件失敗\n";
exit(1);
}
for(i=0;i<lines.size();i++)
{
f<<lines[i].end<<" "<<lines[i].flightnumber<<" "<<lines[i].aircraftnumber<<" "<<lines[i].week<<" ";
f<<lines[i].ordernumber[1]<<' '<<lines[i].ordernumber[2]<<' '<<lines[i].ordernumber[3]<<' ';
f<<lines[i].remainnumber[1]<<' '<<lines[i].remainnumber[2]<<' '<<lines[i].remainnumber[3]<<' ';
for(j=0;j<19;j++)
f<<lines[i].seat[j]<<' ';
if(i==lines.size()-1)
f<<lines[i].seat[j]<<'#';
else
f<<lines[i].seat[j]<<endl;
}
f.close();
i=0;n=0;
for(n=0;n<2*lines.size();n++)
{
f.open(file[n].c_str()); //寫入已訂票客戶的信息
if(f.fail())
{
cout<<"寫入文件失敗\n";
exit(1);
}
orderp=lines[i].orderhead;
if(orderp==NULL)
f<<'#';
while(orderp!=NULL)
{ // cout<<orderp->name<<endl;
f<<orderp->name<<' '; //已訂票客戶的名字
billp=orderp->billhead; //此客戶票的頭指針
while(billp!=NULL)
{
f<<billp->seatdegree<<' '<<billp->number;
if(billp->next==NULL)
if(orderp->next!=NULL)
f<<'$'<<endl;
else
f<<'$';
else
f<<' ';
billp=billp->next;
}
if(orderp->next==NULL)
f<<'#';
orderp=orderp->next;
}
f.close();
n++;
f.open(file[n].c_str()); //寫入等候替補客戶的信息
if(f.fail())
{
cout<<"寫入文件失敗\n";
exit(1);
}
replacep=lines[i].replacehead->front;
if(replacep==NULL)
f<<'#';
while(replacep!=NULL)
{
f<<replacep->name<<' '<<replacep->bill[1]<<' '<<replacep->bill[2]<<' '<<replacep->bill[3];
if(replacep->next==NULL)
f<<'#';
else
f<<endl;
replacep=replacep->next;
}
f.close();
i++;
}
}
void menu()
{
cout<<" ┌───────────────────────────┐\n";
cout<<" │ *****請輸入要操作的序號**** │\n";
cout<<" ├───────────────────────────┤\n";
cout<<" │ 1.**********查詢航線 │\n";
cout<<" ├───────────────────────────┤\n";
cout<<" │ 2.**********承辦訂票業務 │\n";
cout<<" ├───────────────────────────┤\n";
cout<<" │ 3.**********承辦退票業務 │\n";
cout<<" ├───────────────────────────┤\n";
cout<<" │ 0.**********退出系統 │\n";
cout<<" └───────────────────────────┘\n";
}
void main()
{
int n;
char ch;
vector<airline> lines; //航線信息向量
readfile(lines);
do{
do{
system("cls");
system("color 1e");
menu();
n=judgeint();
if(n<0||n>3)
cout<<"輸入有誤,請重新輸入.";
}while(n<0||n>3);
switch(n)
{
case 1:
searchairline(lines,lines.size());
break;
case 2:
orderbill(lines);
break;
case 3:
returnbill(lines);
break;
case 0:
cout<<"謝謝使用......\n";
witerfile(lines);
exit(0);
}
cin.get(ch);
cout<<endl<<"請按任意鍵回到主菜單....\n";
cin.get(ch);
}while(1);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -