?? findsfdlg.cpp
字號(hào):
// FindSFDlg.cpp : 實(shí)現(xiàn)文件
//
#include "stdafx.h"
#include "TicketOffice.h"
#include "FindSFDlg.h"
#include ".\findsfdlg.h"
#include "TicketOKDlg.h"
// CFindSFDlg 對(duì)話(huà)框
IMPLEMENT_DYNAMIC(CFindSFDlg, CDialog)
CFindSFDlg::CFindSFDlg(CWnd* pParent /*=NULL*/)
: CDialog(CFindSFDlg::IDD, pParent)
, m_UseString(_T(""))
{
m_Index = NULL;
m_CurSlt = -1;
}
CFindSFDlg::~CFindSFDlg()
{
SAFE_DELARRAY( m_Index );
}
void CFindSFDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST1, m_FiInfo);
DDX_Control(pDX, IDC_DATETIMEPICKER1, m_Date);
DDX_Control(pDX, IDC_COMBO1, m_SltType);
DDX_Text(pDX, IDC_EDIT1, m_UseString);
}
BEGIN_MESSAGE_MAP(CFindSFDlg, CDialog)
ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, OnBnClickedButton2)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, OnLvnItemchangedList1)
END_MESSAGE_MAP()
// CFindSFDlg 消息處理程序
BOOL CFindSFDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: 在此添加額外的初始化
m_FiInfo.SetExtendedStyle( LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP );
m_FiInfo.InsertColumn(0,"航班號(hào)",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ī)場(chǎng)",LVCFMT_LEFT,61);
m_FiInfo.InsertColumn(5,"降落機(jī)場(chǎng)",LVCFMT_LEFT,61);
m_FiInfo.InsertColumn(6,"起飛時(shí)間",LVCFMT_LEFT,61);
m_FiInfo.InsertColumn(7,"降落時(shí)間",LVCFMT_LEFT,61);
m_FiInfo.InsertColumn(8,"機(jī)尾號(hào)",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("航班號(hào)");
m_SltType.AddString("起飛地");
m_SltType.SetCurSel(0);
return TRUE;
}
// 檢索
void CFindSFDlg::OnBnClickedButton1()
{
if( UpdateData() == false )
return;
CString sql,temp;
COleDateTime t;
m_Date.GetTime(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ì)劃,寫(xiě)入List
bool CFindSFDlg::LoadInfo(CString sql)
{
if( sql == "" )
return false;
_ConnectionPtr pConnection;
_RecordsetPtr pRecordset;
try
{
HRESULT hr;
// 創(chuàng)建Connection對(duì)象
hr = pConnection.CreateInstance("ADODB.Connection");
if( SUCCEEDED( hr ) )
{
// 連接數(shù)據(jù)庫(kù)
hr = pConnection->Open(m_pMainDlg->m_DBData.Linkbuf.GetBuffer(),
m_pMainDlg->m_DBData.UserName.GetBuffer(),m_pMainDlg->m_DBData.PassWord.GetBuffer(),
adModeUnknown);
}
else
{
MessageBox("創(chuàng)建數(shù)據(jù)庫(kù)連接失敗","失敗",MB_OK);
return false;
}
}
catch( ... )
{
MessageBox( "連接數(shù)據(jù)庫(kù)失敗","失敗",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();
}
// 讀出索引
m_CurNum = i + 1;
SAFE_DELARRAY( m_Index );
m_Index = new long[m_CurNum];
if( !pRecordset->BOF )
pRecordset->MoveFirst();
i = -1;
while( !pRecordset->adoEOF )
{
i++;
value = pRecordset->GetCollect("index");
if( value.vt != VT_NULL )
m_Index[i] = value.lVal;
else
m_Index[i] = 0;
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;
}
// 得到當(dāng)前選擇項(xiàng)
int CFindSFDlg::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; // 沒(méi)有找到選中項(xiàng)
}
void CFindSFDlg::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// TODO: 在此添加控件通知處理程序代碼
*pResult = 0;
m_CurSlt = m_Index[GetCurSltCount()];
}
void CFindSFDlg::OnBnClickedButton2()
{
if( m_CurSlt == -1 )
return;
if( PlaneTicket(1) )
{
MessageBox("請(qǐng)?zhí)顚?xiě)機(jī)票信息");
CTicketOKDlg dlg;
dlg.SetMyOwner( m_pMainDlg );
dlg.SetCurFI( m_CurSlt );
if( dlg.DoModal() == IDOK )
{
MessageBox("已成功訂票");
}
else
{
// 放棄訂票
PlaneTicket(-1);
}
}
else
MessageBox("訂票失敗");
// 刷新當(dāng)前顯示
OnBnClickedButton1();
}
// 訂票、退票處理
bool CFindSFDlg::PlaneTicket(int num )
{
_ConnectionPtr pConnection;
_RecordsetPtr pRecordset;
try
{
HRESULT hr;
// 創(chuàng)建Connection對(duì)象
hr = pConnection.CreateInstance("ADODB.Connection");
if( SUCCEEDED( hr ) )
{
// 連接數(shù)據(jù)庫(kù)
hr = pConnection->Open(m_pMainDlg->m_DBData.Linkbuf.GetBuffer(),
m_pMainDlg->m_DBData.UserName.GetBuffer(),m_pMainDlg->m_DBData.PassWord.GetBuffer(),
adModeUnknown);
}
else
{
MessageBox("創(chuàng)建數(shù)據(jù)庫(kù)連接失敗","失敗",MB_OK);
return false;
}
}
catch( ... )
{
MessageBox( "連接數(shù)據(jù)庫(kù)失敗","失敗",MB_OK);
return false;
}
CString temp;
try
{
// 生成Recordset實(shí)例
pRecordset.CreateInstance("ADODB.Recordset");
temp.Format("SELECT * FROM FlightIDInfo WHERE (index = %d)",m_CurSlt);
pRecordset->Open( temp.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("沒(méi)有人訂過(guò)機(jī)票");
pRecordset->Close();
pConnection->Close();
return false;
}
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;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -