這是要求:(1)預售票及退票功能:當查詢到某航班寓於剽竊在行把起飛前15日方可訂票且距離起飛還有超過四小時的情況下才可以預訂票,訂票時需提供18位身份證號,不符合要求的身份證號無法預訂,並且每人每次最多預訂兩張機票,超過數量將無法預訂;退票時必須保證在本航班起飛前至少四小時並且該身份證號已預訂過機票的情況下才可以退票。預售票及退票成功後自動更新庫中該航班的余票數票。(2)信譽功能:對客戶的失信次數(即在航班起飛後未進行取票)進行記載,寫到costumer.Txt文檔中。如果失信次數超過兩次將無法進行機票的預定。
這是我的部分代碼:
struct visitor
{
char IDnumber[18];//游客身份證號
int boughtnum;//你所買的票的數目,最多兩張
int costumer;//你的失信次數
};
struct flight
{
string flightnumber;//航班號
string flightcompany;//航空公司
int startmonth;//起飛時間(月)
int startday;//起飛時間(日)
int starthour;//起飛時間(時)
int startminute;//起飛時間(分)
string overtime;//到達時間
string startplace;//起點
string overplace;//終點
int ticketprice;//票價
int ticketnumber;//余票數量
bool islate;//是否晚點
};
void SouthFlight::Buy( flight myflight )
{
int a = SearchByFlightnumber(myflight);
if( a != -1 )
{
char IDnumber[] = "123456789098765432"; //默認的身份證號
string inIDnumber; //用於存儲鍵盤輸入身份證號
bool judge = false; //用於判斷身份證號是否輸入正確
char array[19] = {0};
cout<<"請輸入18位身份證號碼: "<<endl;
for( int i = 0 ; i < 18 ; i++ )
{
array[i] = getch();
cout<<array[i];
}
cout<<endl;
if( !strcmp (IDnumber,array) )
{
judge = true;
}
else
{
while( !judge )
{
cout<<"輸入錯誤,請重新輸入18位身份證號碼: ";
for( int i = 0 ; i < 18 ; i++)
{
array[i] = getch();
cout<<array[i];
}
cout<<endl;
if( !(strcmp (IDnumber,array) ) )
judge = true;
}
}
/*if( xx.data1[0].costumer >= 2 )
{
cout<<"你的信譽過低,無法買票!"<<endl;
}
else
{*/
if( OK() && OK1() )
{
data[i].ticketnumber--;
data1[0].boughtnum++;
}
else
cout<<"現在不是該航班的購票時間!"<<endl;
//}
}
}
void SouthFlight::Refund( flight myflight )
{
//如果已購買該車票,並在發車前4小時之前
/*cout<<"請輸入你的身份證號:"<
cin>>IDnumber[18];
for ( int j = 0 ; j < (int)data1.size() ; j++ )
{
//*************
if( data1[j].IDnumber == )
{
cout<<"請輸入需要退票的航班號:"<<endl;
for ( int i = 0 ; i <(int)data.size() ; i++ )
{
if ( data[i].flightnumber == flightnumber )
{
data[i].ticketnumber++;
}
else
}
Save();
Save1();*/
}
思路有點混亂,希望能有人指點一下。
代碼不全,只能簡單看到幾點問題
1 結構參數最好傳指針或引用
購票流程應該如下:
(1)驗證買票人的身份證號
(2)驗證買票人是否失信超過2次
(3)驗證買票人是否已經買超過2張票
(4) 查找是否有票
(5)驗證是否提前15天
(6)條件全部滿足執行買票邏輯(記錄買票人,買票數+1,代售票數減1)
退票類似