?? cancelticketdlg.cpp
字號:
// CancelTicketDlg.cpp : 實現文件
//
#include "stdafx.h"
#include "TicketOffice.h"
#include "CancelTicketDlg.h"
#include ".\cancelticketdlg.h"
// CCancelTicketDlg 對話框
IMPLEMENT_DYNAMIC(CCancelTicketDlg, CDialog)
CCancelTicketDlg::CCancelTicketDlg(CWnd* pParent /*=NULL*/)
: CDialog(CCancelTicketDlg::IDD, pParent)
, m_TicketID(0)
, m_Fi(_T(""))
, m_Date(_T(""))
, m_CardID(_T(""))
, m_SeatType(_T(""))
, m_Price(0)
, m_bBoarding(_T(""))
, m_ReMoney(0)
, m_Workman(_T(""))
{
m_pMainDlg = NULL;
}
CCancelTicketDlg::~CCancelTicketDlg()
{
}
void CCancelTicketDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_COMBO2, m_Why);
DDX_Control(pDX, IDC_BUTTON3, m_BtCancelTicket);
DDX_Text(pDX, IDC_EDIT1, m_TicketID);
DDX_Text(pDX, IDC_EDIT2, m_Fi);
DDX_Text(pDX, IDC_EDIT3, m_Date);
DDX_Text(pDX, IDC_EDIT4, m_CardID);
DDX_Text(pDX, IDC_EDIT5, m_SeatType);
DDX_Text(pDX, IDC_EDIT6, m_Price);
DDX_Text(pDX, IDC_EDIT7, m_bBoarding);
DDX_Text(pDX, IDC_EDIT11, m_ReMoney);
DDX_Text(pDX, IDC_EDIT9, m_Workman);
}
BEGIN_MESSAGE_MAP(CCancelTicketDlg, CDialog)
ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON3, OnBnClickedButton3)
END_MESSAGE_MAP()
// CCancelTicketDlg 消息處理程序
BOOL CCancelTicketDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: 在此添加額外的初始化
m_Why.AddString("退票");
m_Why.SetCurSel(0);
m_BtCancelTicket.EnableWindow(false);
return TRUE; // return TRUE unless you set the focus to a control
}
void CCancelTicketDlg::OnBnClickedButton1()
{
if( UpdateData() == false )
return;
if( m_TicketID == 0 )
{
MessageBox("請輸入機票編號");
return;
}
if( LoadTicketInfo() )
{
if( m_bBoarding == "是" )
{
MessageBox("已經辦理了登記牌,不能在退票");
}
else
{
m_BtCancelTicket.EnableWindow(true);
}
}
}
// 讀取機票信息
bool CCancelTicketDlg::LoadTicketInfo()
{
_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 SaleTicketNote WHERE (ID = %d)",m_TicketID);
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;
}
bool b = true;
if( !pRecordset->adoEOF )
{
try
{
_variant_t value;
COleDateTime time;
CString temp;
value = pRecordset->GetCollect("FlightID");
if( value.vt != VT_NULL )
temp = value.bstrVal;
else
temp = "";
m_Fi = temp.Trim();
value = pRecordset->GetCollect("Date");
if( value.vt != VT_NULL )
time = value.date;
m_Time = time;
m_Date.Format("%d-%02d-%02d",time.GetYear(),time.GetMonth(),time.GetDay());
value = pRecordset->GetCollect("IDCard");
if( value.vt != VT_NULL )
temp = value.bstrVal;
else
temp = "";
m_CardID = temp.Trim();
value = pRecordset->GetCollect("SeatType");
if( value.vt != VT_NULL )
temp = value.bstrVal;
else
temp = "";
m_SeatType = temp.Trim();
value = pRecordset->GetCollect("Price");
if( value.vt != VT_NULL )
m_Price = value.dblVal;
else
m_Price = 0;
BOOL bBoard = false;
value = pRecordset->GetCollect("Boarding");
if( value.vt != VT_NULL )
bBoard = value.boolVal;
if( bBoard )
{
m_bBoarding = "是";
}
else
{
m_bBoarding = "否";
}
UpdateData(false);
}
catch(...)
{
MessageBox("讀取記錄異常","異常",MB_OK );
b = false;
}
}
else
{
MessageBox("沒有該機票信息");
b = false;
}
try
{
pRecordset->Close();
pConnection->Close();
}
catch( _com_error * e )
{
MessageBox(e->ErrorMessage(),"失敗",MB_OK );
}
return b;
}
// 退票
void CCancelTicketDlg::OnBnClickedButton3()
{
if( UpdateData() == false)
return;
if( m_Workman == "" )
{
MessageBox("操作員必須簽名");
return;
}
if( SalNoteInDB() && DelTicketInfo(m_TicketID) && ChangeTicketNum( m_Time, m_Fi ))
{
MessageBox("退票成功");
}
else
{
MessageBox("退票失敗");
}
}
// 交易記錄寫入數據庫
bool CCancelTicketDlg::SalNoteInDB()
{
_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 SaleAnnal");
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;
}
try
{
pRecordset->AddNew();
pRecordset->PutCollect( "ID", _variant_t(m_TicketID) );
COleDateTime t;
SYSTEMTIME SysTime;
GetLocalTime(&SysTime);
t.SetDate( SysTime.wYear,SysTime.wMonth,SysTime.wDay );
pRecordset->PutCollect( "DateTime", _variant_t(t) );
pRecordset->PutCollect( "Handler", _variant_t(m_Workman) );
pRecordset->PutCollect( "Money", _variant_t(m_ReMoney) );
m_Why.GetLBText(m_Why.GetCurSel(),temp );
pRecordset->PutCollect( "Why", _variant_t(temp) );
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;
}
// 刪除指定的機票信息
bool CCancelTicketDlg::DelTicketInfo( long id )
{
_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
{
_variant_t RecordsAffected;
CString temp;
temp.Format("DELETE FROM SaleTicketNote WHERE (ID = %d)",id);
pConnection->Execute( temp.GetBuffer(), &RecordsAffected,adCmdText);
}
catch( _com_error *e)
{
MessageBox(e->ErrorMessage());
return false;
}
try
{
pConnection->Close();
}
catch( _com_error * e )
{
MessageBox(e->ErrorMessage(),"失敗",MB_OK );
}
return true;
}
// 更改航班的售票數
bool CCancelTicketDlg::ChangeTicketNum( COleDateTime t, CString fi )
{
_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,sql;
try
{
// 生成Recordset實例
pRecordset.CreateInstance("ADODB.Recordset");
temp.Format("DateSerial(%d,%d,%d)",t.GetYear(),t.GetMonth(),t.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 num = 0;
// 讀出當前賣票數目
try
{
value = pRecordset->GetCollect("PassengerNum");
if( value.vt != VT_NULL )
num = value.lVal;
else
num = 0;
}
catch(...)
{
MessageBox("讀取記錄異常","異常",MB_OK );
return false;
}
try
{
num--;
if( num < 0 )
num = 0;
pRecordset->PutCollect( "PassengerNum", _variant_t(num) );
pRecordset->Update();
}
catch(...)
{
MessageBox("修改記錄異常","異常",MB_OK );
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 + -