?? changefidlg.cpp
字號:
// ChangeFiDlg.cpp : 實(shí)現(xiàn)文件
//
#include "stdafx.h"
#include "TicketOffice.h"
#include "ChangeFiDlg.h"
#include ".\changefidlg.h"
// CChangeFiDlg 對話框
IMPLEMENT_DYNAMIC(CChangeFiDlg, CDialog)
CChangeFiDlg::CChangeFiDlg(CWnd* pParent /*=NULL*/)
: CDialog(CChangeFiDlg::IDD, pParent)
, m_UseString(_T(""))
, m_Fi(_T(""))
, m_DateString(_T(""))
{
m_pFI = NULL;
m_pTime = NULL;
}
CChangeFiDlg::~CChangeFiDlg()
{
}
void CChangeFiDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_FIINFOLIST, m_FiInfo);
DDX_Control(pDX, IDC_DATETIMEPICKER1, m_Date);
DDX_Control(pDX, IDC_COMBO1, m_SltType);
DDX_Text(pDX, IDC_EDIT1, m_UseString);
DDX_Text(pDX, IDC_EDIT2, m_Fi);
DDX_Text(pDX, IDC_EDIT3, m_DateString);
DDX_Control(pDX, IDC_BUTTON3, m_kChangeBt);
}
BEGIN_MESSAGE_MAP(CChangeFiDlg, CDialog)
ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
ON_BN_CLICKED(IDOK, OnBnClickedOk)
ON_BN_CLICKED(IDC_BUTTON3, OnBnClickedButton3)
ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel)
END_MESSAGE_MAP()
// CChangeFiDlg 消息處理程序
// 設(shè)置航班號和時(shí)間
void CChangeFiDlg::LockValue( CString &fi, COleDateTime &t )
{
m_pFI = &fi;
m_pTime = &t;
m_CurSltTime = t;
}
BOOL CChangeFiDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_FiInfo.SetExtendedStyle( LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP );
m_FiInfo.InsertColumn(0,"航班號",LVCFMT_LEFT,50);
m_FiInfo.InsertColumn(1,"日期",LVCFMT_CENTER,80);
m_FiInfo.InsertColumn(2,"始發(fā)城市",LVCFMT_LEFT,61);
m_FiInfo.InsertColumn(3,"目的城市",LVCFMT_LEFT,61);
m_FiInfo.InsertColumn(4,"起飛機(jī)場",LVCFMT_LEFT,61);
m_FiInfo.InsertColumn(5,"降落機(jī)場",LVCFMT_LEFT,61);
m_FiInfo.InsertColumn(6,"起飛時(shí)間",LVCFMT_LEFT,61);
m_FiInfo.InsertColumn(7,"降落時(shí)間",LVCFMT_LEFT,61);
m_FiInfo.InsertColumn(8,"機(jī)尾號",LVCFMT_LEFT,61);
m_FiInfo.InsertColumn(9,"最大人數(shù)",LVCFMT_LEFT,61);
m_FiInfo.InsertColumn(10,"實(shí)際人數(shù)",LVCFMT_LEFT,61);
m_FiInfo.InsertColumn(11,"距離",LVCFMT_LEFT,61);
m_SltType.AddString("目的地");
m_SltType.AddString("航班號");
m_SltType.AddString("起飛地");
m_SltType.SetCurSel(0);
if( m_pFI != NULL && m_pTime != NULL )
{
m_Fi = *m_pFI;
m_DateString.Format("%d-%02d-%02d",m_CurSltTime.GetYear(),m_CurSltTime.GetMonth(),m_CurSltTime.GetDay());
UpdateData(false);
}
return TRUE; // return TRUE unless you set the focus to a control
// 異常: OCX 屬性頁應(yīng)返回 FALSE
}
void CChangeFiDlg::OnBnClickedButton1()
{
if( UpdateData() == false )
return;
CString sql,temp;
COleDateTime t;
m_Date.GetTime(t);
m_CurSltTime = t;
temp.Format("DateSerial(%d,%d,%d)",t.GetYear(),t.GetMonth(),t.GetDay() );
sql.Format("SELECT * FROM FlightIDInfo WHERE (Date = %s)",temp);
if( m_UseString != "" )
{
temp = "";
switch( m_SltType.GetCurSel() )
{
case 0:
temp.Format("(LandingPlace LIKE '%%%s%%')", m_UseString);
break;
case 1:
temp.Format("(FlightID LIKE '%%%s%%')", m_UseString);
break;
case 2:
temp.Format("(TakeoffPlace LIKE '%%%s%%')", m_UseString);
break;
default:
break;
}
if( temp != "" )
{
sql = sql + " AND " + temp;
}
}
LoadInfo( sql );
}
// 讀入航班計(jì)劃,寫入List
bool CChangeFiDlg::LoadInfo(CString sql)
{
if( sql == "" )
return false;
_ConnectionPtr pConnection;
_RecordsetPtr pRecordset;
try
{
HRESULT hr;
// 創(chuàng)建Connection對象
hr = pConnection.CreateInstance("ADODB.Connection");
if( SUCCEEDED( hr ) )
{
// 連接數(shù)據(jù)庫
hr = pConnection->Open(m_pDlg->m_DBData.Linkbuf.GetBuffer(),
m_pDlg->m_DBData.UserName.GetBuffer(),m_pDlg->m_DBData.PassWord.GetBuffer(),
adModeUnknown);
}
else
{
MessageBox("創(chuàng)建數(shù)據(jù)庫連接失敗","失敗",MB_OK);
return false;
}
}
catch( ... )
{
MessageBox( "連接數(shù)據(jù)庫失敗","失敗",MB_OK);
return false;
}
try
{
// 生成Recordset實(shí)例
pRecordset.CreateInstance("ADODB.Recordset");
pRecordset->Open( sql.GetBuffer(),
_variant_t((IDispatch*)pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
}
catch( _com_error * e )
{
pConnection->Close();
MessageBox( e->ErrorMessage(),"異常",MB_OK );
return false;
}
m_FiInfo.DeleteAllItems();
_variant_t value;
COleDateTime t;
CString temp;
try
{
if( !pRecordset->BOF )
pRecordset->MoveFirst();
int i = -1;
while( !pRecordset->adoEOF )
{
i++;
value = pRecordset->GetCollect("FlightID");
if( value.vt != VT_NULL )
temp = value.bstrVal;
else
temp = "";
m_FiInfo.InsertItem( i, temp, 0 );
value = pRecordset->GetCollect("Date");
if( value.vt != VT_NULL )
{
t = value.date;
temp.Format("%d-%02d-%02d",t.GetYear(),t.GetMonth(),t.GetDay());
}
else
temp = "";
m_FiInfo.SetItemText( i, 1, temp );
value = pRecordset->GetCollect("TakeoffPlace");
if( value.vt != VT_NULL )
temp = value.bstrVal;
else
temp = "";
m_FiInfo.SetItemText( i, 2, temp );
value = pRecordset->GetCollect("LandingPlace");
if( value.vt != VT_NULL )
temp = value.bstrVal;
else
temp = "";
m_FiInfo.SetItemText( i, 3, temp );
value = pRecordset->GetCollect("TakeoffAir");
if( value.vt != VT_NULL )
temp = value.bstrVal;
else
temp = "";
m_FiInfo.SetItemText( i, 4, temp );
value = pRecordset->GetCollect("LandingAir");
if( value.vt != VT_NULL )
temp = value.bstrVal;
else
temp = "";
m_FiInfo.SetItemText( i, 5, temp );
value = pRecordset->GetCollect("TakeoffTime");
if( value.vt != VT_NULL )
{
t = value.date;
temp.Format("%02d:%02d",t.GetHour(),t.GetMinute());
}
else
temp = "";
m_FiInfo.SetItemText( i, 6, temp );
value = pRecordset->GetCollect("LandingTime");
if( value.vt != VT_NULL )
{
t = value.date;
temp.Format("%02d:%02d",t.GetHour(),t.GetMinute());
}
else
temp = "";
m_FiInfo.SetItemText( i, 7, temp );
value = pRecordset->GetCollect("Plane");
if( value.vt != VT_NULL )
temp = value.bstrVal;
else
temp = "";
m_FiInfo.SetItemText( i, 8, temp );
value = pRecordset->GetCollect("MaxPassengerNum");
if( value.vt != VT_NULL )
temp.Format("%d",value.lVal);
else
temp = "0";
m_FiInfo.SetItemText( i, 9, temp );
value = pRecordset->GetCollect("PassengerNum");
if( value.vt != VT_NULL )
temp.Format("%d",value.lVal);
else
temp = "0";
m_FiInfo.SetItemText( i, 10, temp );
value = pRecordset->GetCollect("Distance");
if( value.vt != VT_NULL )
temp.Format("%d",value.lVal);
else
temp = "0";
m_FiInfo.SetItemText( i, 11, temp );
pRecordset->MoveNext();
}
}
catch(...)
{
MessageBox("讀取記錄異常","異常",MB_OK );
pRecordset->Close();
pConnection->Close();
return false;
}
try
{
pRecordset->Close();
pConnection->Close();
}
catch( _com_error * e )
{
MessageBox(e->ErrorMessage(),"失敗",MB_OK );
}
return true;
}
// 變更航班
void CChangeFiDlg::OnBnClickedButton3()
{
int k = GetCurSltCount();
if( k == -1 )
{
MessageBox("必須選擇航班");
return;
}
m_Fi = m_FiInfo.GetItemText( k, 0 );
// 變更機(jī)票預(yù)定數(shù)量
if( ChangeTicketNum( m_Fi, m_CurSltTime, 1 ) )
{
m_DateString.Format("%d-%02d-%02d",m_CurSltTime.GetYear(),m_CurSltTime.GetMonth(),m_CurSltTime.GetDay());
UpdateData(false);
MessageBox( "航班已變更" );
OnBnClickedButton1();
// 防止多次修改
m_kChangeBt.EnableWindow(false);
}
else
{
MessageBox("訂票失敗");
UpdateData(true);
}
}
void CChangeFiDlg::OnBnClickedOk()
{
// 變更機(jī)票預(yù)定數(shù)量
ChangeTicketNum( *m_pFI, *m_pTime, -1 );
*m_pFI = m_Fi;
*m_pTime = m_CurSltTime;
OnOK();
}
void CChangeFiDlg::OnBnClickedCancel()
{
// 變更機(jī)票預(yù)定數(shù)量
ChangeTicketNum( m_Fi, m_CurSltTime, -1 );
OnCancel();
}
// 得到當(dāng)前選擇項(xiàng)
int CChangeFiDlg::GetCurSltCount()
{
// 是否有選中項(xiàng)
if(m_FiInfo.GetSelectedCount() <= 0)
return -1;
for(int i =0;i<m_FiInfo.GetItemCount();i++ )
{
if(m_FiInfo.GetItemState(i,LVIS_SELECTED)==LVIS_SELECTED)//選中狀態(tài)。。
{
return i;
}
}
return -1; // 沒有找到選中項(xiàng)
}
// 更改指定航班的機(jī)票數(shù)量
bool CChangeFiDlg::ChangeTicketNum( CString fi, COleDateTime date, int num )
{
_ConnectionPtr pConnection;
_RecordsetPtr pRecordset;
try
{
HRESULT hr;
// 創(chuàng)建Connection對象
hr = pConnection.CreateInstance("ADODB.Connection");
if( SUCCEEDED( hr ) )
{
// 連接數(shù)據(jù)庫
hr = pConnection->Open(m_pDlg->m_DBData.Linkbuf.GetBuffer(),
m_pDlg->m_DBData.UserName.GetBuffer(),m_pDlg->m_DBData.PassWord.GetBuffer(),
adModeUnknown);
}
else
{
MessageBox("創(chuàng)建數(shù)據(jù)庫連接失敗","失敗",MB_OK);
return false;
}
}
catch( ... )
{
MessageBox( "連接數(shù)據(jù)庫失敗","失敗",MB_OK);
return false;
}
CString temp;
CString sql;
try
{
// 生成Recordset實(shí)例
pRecordset.CreateInstance("ADODB.Recordset");
temp.Format("DateSerial(%d,%d,%d)",date.GetYear(),date.GetMonth(),date.GetDay() );
sql.Format("SELECT * FROM FlightIDInfo WHERE (Date = %s) AND (FlightID='%s')",temp,fi);
pRecordset->Open( sql.GetBuffer(),
_variant_t((IDispatch*)pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
}
catch( _com_error * e )
{
pConnection->Close();
MessageBox( e->ErrorMessage(),"異常",MB_OK );
return false;
}
if( !pRecordset->adoEOF )
{
_variant_t value;
long max = 0;
long cursum = 0;
try
{
value = pRecordset->GetCollect("MaxPassengerNum");
if( value.vt != VT_NULL )
max = value.lVal;
else
max = 0;
value = pRecordset->GetCollect("PassengerNum");
if( value.vt != VT_NULL )
cursum = value.lVal;
else
cursum = 0;
cursum += num;
if( cursum > max )
{
MessageBox("機(jī)票已經(jīng)售完","票已售完");
pRecordset->Close();
pConnection->Close();
return false;
}
if( cursum < 0 )
{
MessageBox("沒有人訂過機(jī)票");
pRecordset->Close();
pConnection->Close();
return true;
}
pRecordset->Update();
pRecordset->PutCollect( "PassengerNum", _variant_t(cursum) );
pRecordset->Update();
}
catch(...)
{
MessageBox("讀取記錄異常","異常",MB_OK );
pRecordset->Close();
pConnection->Close();
return false;
}
}
try
{
pRecordset->Close();
pConnection->Close();
}
catch( _com_error * e )
{
MessageBox(e->ErrorMessage(),"失敗",MB_OK );
}
return true;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -