📄 findsfdlg.cpp
字号:
// FindSFDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "TicketOffice.h"
#include "FindSFDlg.h"
#include ".\findsfdlg.h"
#include "TicketOKDlg.h"
// CFindSFDlg 对话框
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,"航班号",LVCFMT_LEFT,50);
m_FiInfo.InsertColumn(1,"日期",LVCFMT_CENTER,80);
m_FiInfo.InsertColumn(2,"始发城市",LVCFMT_LEFT,61);
m_FiInfo.InsertColumn(3,"目的城市",LVCFMT_LEFT,61);
m_FiInfo.InsertColumn(4,"起飞机场",LVCFMT_LEFT,61);
m_FiInfo.InsertColumn(5,"降落机场",LVCFMT_LEFT,61);
m_FiInfo.InsertColumn(6,"起飞时间",LVCFMT_LEFT,61);
m_FiInfo.InsertColumn(7,"降落时间",LVCFMT_LEFT,61);
m_FiInfo.InsertColumn(8,"机尾号",LVCFMT_LEFT,61);
m_FiInfo.InsertColumn(9,"最大人数",LVCFMT_LEFT,61);
m_FiInfo.InsertColumn(10,"实际人数",LVCFMT_LEFT,61);
m_FiInfo.InsertColumn(11,"距离",LVCFMT_LEFT,61);
m_SltType.AddString("目的地");
m_SltType.AddString("航班号");
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 );
}
// 读入航班计划,写入List
bool CFindSFDlg::LoadInfo(CString sql)
{
if( sql == "" )
return false;
_ConnectionPtr pConnection;
_RecordsetPtr pRecordset;
try
{
HRESULT hr;
// 创建Connection对象
hr = pConnection.CreateInstance("ADODB.Connection");
if( SUCCEEDED( hr ) )
{
// 连接数据库
hr = pConnection->Open(m_pMainDlg->m_DBData.Linkbuf.GetBuffer(),
m_pMainDlg->m_DBData.UserName.GetBuffer(),m_pMainDlg->m_DBData.PassWord.GetBuffer(),
adModeUnknown);
}
else
{
MessageBox("创建数据库连接失败","失败",MB_OK);
return false;
}
}
catch( ... )
{
MessageBox( "连接数据库失败","失败",MB_OK);
return false;
}
try
{
// 生成Recordset实例
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;
}
// 得到当前选择项
int CFindSFDlg::GetCurSltCount()
{
// 是否有选中项
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)//选中状态。。
{
return i;
}
}
return -1; // 没有找到选中项
}
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("请填写机票信息");
CTicketOKDlg dlg;
dlg.SetMyOwner( m_pMainDlg );
dlg.SetCurFI( m_CurSlt );
if( dlg.DoModal() == IDOK )
{
MessageBox("已成功订票");
}
else
{
// 放弃订票
PlaneTicket(-1);
}
}
else
MessageBox("订票失败");
// 刷新当前显示
OnBnClickedButton1();
}
// 订票、退票处理
bool CFindSFDlg::PlaneTicket(int num )
{
_ConnectionPtr pConnection;
_RecordsetPtr pRecordset;
try
{
HRESULT hr;
// 创建Connection对象
hr = pConnection.CreateInstance("ADODB.Connection");
if( SUCCEEDED( hr ) )
{
// 连接数据库
hr = pConnection->Open(m_pMainDlg->m_DBData.Linkbuf.GetBuffer(),
m_pMainDlg->m_DBData.UserName.GetBuffer(),m_pMainDlg->m_DBData.PassWord.GetBuffer(),
adModeUnknown);
}
else
{
MessageBox("创建数据库连接失败","失败",MB_OK);
return false;
}
}
catch( ... )
{
MessageBox( "连接数据库失败","失败",MB_OK);
return false;
}
CString temp;
try
{
// 生成Recordset实例
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("机票已经售完","票已售完");
pRecordset->Close();
pConnection->Close();
return false;
}
if( cursum < 0 )
{
MessageBox("没有人订过机票");
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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -