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

📄 ticketokdlg.cpp

📁 使用Visual C++ .NET实现简单了一个票务管理系统
💻 CPP
字号:
// TicketOKDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "TicketOffice.h"
#include "TicketOKDlg.h"
#include ".\ticketokdlg.h"
#include "PassagerInfo.h"

// CTicketOKDlg 对话框

IMPLEMENT_DYNAMIC(CTicketOKDlg, CDialog)
CTicketOKDlg::CTicketOKDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CTicketOKDlg::IDD, pParent)
	, m_TicketID(0)
	, m_ToDate(_T(""))
	, m_Fi(_T(""))
	, m_CardID(_T(""))
	, m_Price(0)
	, m_Agio(0)
	, m_EffectTime(_T(""))
	, m_NameC(_T(""))
	, m_NameE(_T(""))
	, m_Sex(_T(""))
	, m_Workman(_T(""))
{
	m_bValidate = false;
	m_CurSlt = -1;
}

CTicketOKDlg::~CTicketOKDlg()
{
}

void CTicketOKDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_EDIT4, m_TicketID);
	DDX_Text(pDX, IDC_EDIT1, m_ToDate);
	DDX_Text(pDX, IDC_EDIT2, m_Fi);
	DDX_Text(pDX, IDC_EDIT3, m_CardID);
	DDX_Control(pDX, IDC_COMBO1, m_SeatType);
	DDX_Text(pDX, IDC_EDIT6, m_Price);
	DDX_Text(pDX, IDC_EDIT7, m_Agio);
	DDX_Text(pDX, IDC_EDIT8, m_EffectTime);
	DDX_Control(pDX, IDOK, m_kBtOK);
	DDX_Text(pDX, IDC_EDIT11, m_NameC);
	DDX_Text(pDX, IDC_EDIT12, m_NameE);
	DDX_Text(pDX, IDC_EDIT13, m_Sex);
	DDX_Text(pDX, IDC_EDIT9, m_Workman);
	DDX_Control(pDX, IDC_COMBO2, m_Why);
	DDX_Control(pDX, IDC_EDIT3, m_kCardID);
	DDX_Control(pDX, IDC_BUTTON7, m_kBtTicket);
}


BEGIN_MESSAGE_MAP(CTicketOKDlg, CDialog)
	ON_BN_CLICKED(IDC_BUTTON5, OnBnClickedButton5)
	ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
	ON_BN_CLICKED(IDOK, OnBnClickedOk)
	ON_BN_CLICKED(IDC_BUTTON7, OnBnClickedButton7)
	ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel)
END_MESSAGE_MAP()


// CTicketOKDlg 消息处理程序

BOOL CTicketOKDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// TODO:  在此添加额外的初始化
	m_kBtOK.EnableWindow( m_bValidate );
	m_kBtTicket.EnableWindow( m_bValidate );
	m_SeatType.AddString( "经济舱" );
	m_SeatType.AddString( "公务舱" );
	m_SeatType.AddString( "头等舱" );
	m_SeatType.SetCurSel(0);
	m_Why.AddString("购票");
	m_Why.AddString("退票");
	m_Why.AddString("升舱");
	m_Why.SetCurSel(0);

	if( m_CurSlt != -1 )
	{
		SetFiAndDate( m_CurSlt );
	}
	return TRUE;  // return TRUE unless you set the focus to a control
}
// 根据航班编号确定航班号和日期
bool CTicketOKDlg::SetFiAndDate(int 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;
	}

	CString temp;
	try
	{
		// 生成Recordset实例
		pRecordset.CreateInstance("ADODB.Recordset");

		temp.Format("SELECT * FROM FlightIDInfo WHERE (index = %d)",id);
		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;
		CString temp;
		try
		{
			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 )
				m_Time = value.date;
			m_ToDate.Format("%d-%02d-%02d",m_Time.GetYear(),m_Time.GetMonth(),m_Time.GetDay() );
			m_EffectTime.Format("%d-%02d-%02d",m_Time.GetYear()+1,m_Time.GetMonth(),m_Time.GetDay() );

			UpdateData(false);
		}
		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 CTicketOKDlg::OnBnClickedButton5()
{
	CPassagerInfo dlg;
	dlg.SetMyOwner(m_pMainDlg);
	dlg.LockCardID( m_CardID );
	if( dlg.DoModal() == IDOK )
		OnBnClickedButton1();
}
// 身份证验证
void CTicketOKDlg::OnBnClickedButton1()
{
	if( UpdateData() == false )
		return;
	if( m_CardID == "" )
	{
		MessageBox("请填写身份证号");
		return;
	}
	m_bValidate = GetCardIDInfo( m_CardID );
	m_kBtOK.EnableWindow( m_bValidate );
	m_kBtTicket.EnableWindow( m_bValidate );
	m_kCardID.SetReadOnly( m_bValidate );
	if( m_bValidate == false )
	{
		MessageBox("没有该用户信息,请添加");
	}
}
// 读取身份信息,返回用户身份是否找到
bool CTicketOKDlg::GetCardIDInfo(CString id)
{
	bool bFind = 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;
	}

	CString temp;
	try
	{
		// 生成Recordset实例
		pRecordset.CreateInstance("ADODB.Recordset");

		temp.Format("SELECT * FROM PassagerInfo WHERE (IDCard = '%s')",id);
		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 )
	{
		// 没有改旅客的信息,需要添加
		try
		{
			_variant_t value;
			CString temp;
			value = pRecordset->GetCollect("Name");
			if( value.vt != VT_NULL )
				temp = value.bstrVal;
			else
				temp = "";
			m_NameC = temp.Trim();
			value = pRecordset->GetCollect("NameE");
			if( value.vt != VT_NULL )
				temp = value.bstrVal;
			else
				temp = "";
			m_NameE = temp.Trim();
			value = pRecordset->GetCollect("Sex");
			if( value.vt != VT_NULL )
				temp = value.bstrVal;
			else
				temp = "";
			m_Sex = temp.Trim();
		}
		catch(...)
		{
			MessageBox("添加记录异常","异常",MB_OK );
			pRecordset->Close();
			pConnection->Close();
			return false;
		}
		bFind = true;
		UpdateData(false);
	}

	try
	{
		pRecordset->Close();
		pConnection->Close();
	}
	catch( _com_error * e )
	{
		MessageBox(e->ErrorMessage(),"失败",MB_OK );
	}
	return bFind;
}
// 机票信息记录写入数据库
bool CTicketOKDlg::TicketAndSalInDB()
{
	_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");
		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( "FlightID", _variant_t(m_Fi) );
		COleDateTime t;
		t.SetDate(m_Time.GetYear(),m_Time.GetMonth(),m_Time.GetDay() );
		pRecordset->PutCollect( "Date", _variant_t(t) );
		pRecordset->PutCollect( "IDCard", _variant_t(m_CardID) );
		m_SeatType.GetLBText(m_SeatType.GetCurSel(),temp );
		pRecordset->PutCollect( "SeatType", _variant_t(temp) );
		pRecordset->PutCollect( "Price", _variant_t(m_Price) );
		pRecordset->PutCollect( "Agio", _variant_t(m_Agio) );
		t.SetDate(m_Time.GetYear()+1,m_Time.GetMonth(),m_Time.GetDay() );
		pRecordset->PutCollect( "EffectTime", _variant_t(t) );
		bool b = false;
		pRecordset->PutCollect( "Boarding", _variant_t(b) );
		pRecordset->Update();
	}
	catch(...)
	{
		MessageBox("添加记录异常","异常",MB_OK );
		pRecordset->Close();
		pConnection->Close();
		return false;
	}
	// 得到机票的唯一编号
	try
	{
		_variant_t value;
		value = pRecordset->GetCollect("ID");
		if( value.vt != VT_NULL )
			m_TicketID = value.lVal;
		else
			m_TicketID = 0;
		UpdateData(false);
	}
	catch( _com_error * e )
	{
		MessageBox(e->ErrorMessage(),"失败",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 CTicketOKDlg::OnBnClickedButton7()
{
	if( UpdateData() == false )
		return;
	// 将交易信息写入数据库
	if( TicketAndSalInDB() )
	{
		MessageBox("交易成功");
	}
	else
	{
		MessageBox("交易失败");
	}
}

void CTicketOKDlg::OnBnClickedOk()
{
	if( UpdateData() == false )
		return;
	if( m_Workman == "" )
	{
		MessageBox("操作员必须签名");
		return;
	}
	if( SalNoteInDB() )
		OnOK();
	else
		OnBnClickedCancel();
}
// 交易记录写入数据库
bool CTicketOKDlg::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_Price) );
		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;
}

void CTicketOKDlg::OnBnClickedCancel()
{
	// 删除加入的机票信息
	DelTicketInfo( m_TicketID );
	OnCancel();
}
// 删除指定的机票信息
bool CTicketOKDlg::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;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -