⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cancelticketdlg.cpp

📁 使用Visual C++ .NET实现简单了一个票务管理系统
💻 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 + -