问题描述
- C++简单民航票数系统的买票、退票功能
-
这是要求:(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)
退票类似
解决方案二:
票的信息你用的什么?数组还是链表?
针对这两个的删除方法应该不一样的,也就是退票的方式应该不同