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

📄 associatordlg.cpp

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

#include "stdafx.h"
#include "BoardingSys.h"
#include "AssociatorDlg.h"
#include ".\associatordlg.h"


// CAssociatorDlg 对话框

IMPLEMENT_DYNAMIC(CAssociatorDlg, CDialog)
CAssociatorDlg::CAssociatorDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CAssociatorDlg::IDD, pParent)
	, m_TicketID(0)
	, m_Fi(_T(""))
	, m_Date(_T(""))
	, m_Agio(0)
	, m_CurVoyage(0)
	, m_AssoID(0)
	, m_Voyage(0)
	, m_Number(0)
	, m_Type(_T(""))
	, m_SeatType(_T(""))
	, m_NameC(_T(""))
{
}

CAssociatorDlg::~CAssociatorDlg()
{
}

void CAssociatorDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	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_Agio);
	DDX_Text(pDX, IDC_EDIT8, m_CurVoyage);
	DDX_Text(pDX, IDC_EDIT5, m_AssoID);
	DDX_Text(pDX, IDC_EDIT6, m_Voyage);
	DDX_Text(pDX, IDC_EDIT7, m_Number);
	DDX_Text(pDX, IDC_EDIT9, m_Type);
	DDX_Control(pDX, IDC_BUTTON4, m_BtAddAoyage);
	DDX_Text(pDX, IDC_EDIT10, m_SeatType);
	DDX_Text(pDX, IDC_EDIT11, m_NameC);
}


BEGIN_MESSAGE_MAP(CAssociatorDlg, CDialog)
	ON_BN_CLICKED(IDC_BUTTON4, OnBnClickedButton4)
	ON_BN_CLICKED(IDC_BUTTON2, OnBnClickedButton2)
END_MESSAGE_MAP()


// CAssociatorDlg 消息处理程序
void CAssociatorDlg::SetTicketID( long id )
{
	m_TicketID = id;
}

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

	// TODO:  在此添加额外的初始化
	if( m_TicketID != 0 )
	{
		GetVoyageInfo( m_TicketID );
	}
	m_BtAddAoyage.EnableWindow(false);

	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常: OCX 属性页应返回 FALSE
}
// 根据机票编号确定里程信息
bool CAssociatorDlg::GetVoyageInfo( long id )
{
	_ConnectionPtr pConnection;
	_RecordsetPtr pRecordset;
	CString sql,temp;

	try
	{
		HRESULT hr;

		// 创建Connection对象
		hr = pConnection.CreateInstance("ADODB.Connection");
		if( SUCCEEDED( hr ) )
		{
			// 连接数据库
			hr = pConnection->Open(m_pDlg->m_DBData.Linkbuf.GetBuffer(),
				m_pDlg->m_DBData.UserName.GetBuffer(),m_pDlg->m_DBData.PassWord.GetBuffer(),
				adModeUnknown);
		}
		else
		{
			MessageBox("创建数据库连接失败","失败",MB_OK);
			return false;
		}
	}
	catch( ... )
	{
		MessageBox( "连接数据库失败","失败",MB_OK);
		return false;
	}

	try
	{
		// 生成Recordset实例
		pRecordset.CreateInstance("ADODB.Recordset");
		sql.Format("SELECT SaleTicketNote.ID, SaleTicketNote.FlightID, SaleTicketNote.Date, SaleTicketNote.Agio, SaleTicketNote.SeatType, FlightIDInfo.Distance FROM SaleTicketNote INNER JOIN FlightIDInfo ON SaleTicketNote.FlightID = FlightIDInfo.FlightID WHERE (((SaleTicketNote.ID)=%d) AND ((SaleTicketNote.FlightID)=[FlightIDInfo].[FlightID]) AND ((SaleTicketNote.Date)=[FlightIDInfo].[Date]))",id);

		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;
	}

	_variant_t value;
	COleDateTime t;

	bool b = true;
	if( !pRecordset->adoEOF )
	{
		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 )
				t = value.date;
			m_Date.Format("%d-%02d-%02d",t.GetYear(),t.GetMonth(),t.GetDay());
			value = pRecordset->GetCollect("Agio");
			if( value.vt != VT_NULL )
				m_Agio = (float)value.dblVal;
			else
				m_Agio = 0;
			value = pRecordset->GetCollect("SeatType");
			if( value.vt != VT_NULL )
				temp = value.bstrVal;
			else
				temp = "";
			m_SeatType = temp.Trim();
			value = pRecordset->GetCollect("Distance");
			if( value.vt != VT_NULL )
				m_CurVoyage = value.lVal;
			else
				m_CurVoyage = 0;
		}
		catch(...)
		{
			MessageBox("读取记录异常","异常",MB_OK );
			b = false;
		}
	}
	else
	{
		b = false;
	}

	// 计算里程
	double m = 1.0;
	if( m_SeatType == "头等舱")
		m = 1.5;
	else if( m_SeatType == "公务舱" )
		m = 1.3;
	m_CurVoyage = (long)(((double)m_CurVoyage * m_Agio )*m);
	UpdateData(false);

	try
	{
		pRecordset->Close();
		pConnection->Close();
	}
	catch( _com_error * e )
	{
		MessageBox(e->ErrorMessage(),"失败",MB_OK );
		b = false;
	}
	return b;
}

void CAssociatorDlg::OnBnClickedButton2()
{
	if( UpdateData() == false )
		return;
	if( m_AssoID == 0 )
	{
		MessageBox("请输入会员ID号");
		return;
	}
	if( FindAssoInfo( m_AssoID ) )
		m_BtAddAoyage.EnableWindow(true);
}
// 检索会员信息
bool CAssociatorDlg::FindAssoInfo( long id )
{
	_ConnectionPtr pConnection;
	_RecordsetPtr pRecordset;
	CString sql,temp;

	try
	{
		HRESULT hr;

		// 创建Connection对象
		hr = pConnection.CreateInstance("ADODB.Connection");
		if( SUCCEEDED( hr ) )
		{
			// 连接数据库
			hr = pConnection->Open(m_pDlg->m_DBData.Linkbuf.GetBuffer(),
				m_pDlg->m_DBData.UserName.GetBuffer(),m_pDlg->m_DBData.PassWord.GetBuffer(),
				adModeUnknown);
		}
		else
		{
			MessageBox("创建数据库连接失败","失败",MB_OK);
			return false;
		}
	}
	catch( ... )
	{
		MessageBox( "连接数据库失败","失败",MB_OK);
		return false;
	}

	try
	{
		// 生成Recordset实例
		pRecordset.CreateInstance("ADODB.Recordset");
		sql.Format("SELECT AssociatorInfo.AssociatorID, AssociatorInfo.Voyage, AssociatorInfo.Number, AssociatorInfo.Type, PassagerInfo.Name FROM AssociatorInfo INNER JOIN PassagerInfo ON (AssociatorInfo.IDCard = PassagerInfo.IDCard) AND (AssociatorInfo.AssociatorID = PassagerInfo.AssociatorID) WHERE (((AssociatorInfo.AssociatorID)=%d) AND ((AssociatorInfo.IDCard)=[PassagerInfo].[IDCard]))",id);

		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;
	}

	_variant_t value;
	COleDateTime t;

	bool b = true;
	if( !pRecordset->adoEOF )
	{
		try
		{
			value = pRecordset->GetCollect("Voyage");
			if( value.vt != VT_NULL )
				m_Voyage = value.lVal;
			else
				m_Voyage = 0;
			value = pRecordset->GetCollect("Number");
			if( value.vt != VT_NULL )
				m_Number = value.lVal;
			else
				m_Number = 0;
			value = pRecordset->GetCollect("Type");
			if( value.vt != VT_NULL )
				temp = value.bstrVal;
			else
				temp = "";
			m_Type = temp;
			value = pRecordset->GetCollect("Name");
			if( value.vt != VT_NULL )
				temp = value.bstrVal;
			else
				temp = "";
			m_NameC = temp.Trim();
		}
		catch(...)
		{
			MessageBox("读取记录异常","异常",MB_OK );
			b = false;
		}
	}
	else
	{
		b = false;
	}
	UpdateData(false);

	try
	{
		pRecordset->Close();
		pConnection->Close();
	}
	catch( _com_error * e )
	{
		MessageBox(e->ErrorMessage(),"失败",MB_OK );
		b = false;
	}
	return b;
}
// 添加里程
void CAssociatorDlg::OnBnClickedButton4()
{
	if( AddVoyage() )
	{
		m_BtAddAoyage.EnableWindow(false);
		MessageBox("里程添加成功");
	}
	else
	{
		MessageBox("里程添加失败");
	}
}
// 添加里程
bool CAssociatorDlg::AddVoyage()
{
	_ConnectionPtr pConnection;
	_RecordsetPtr pRecordset;
	CString sql,temp;

	try
	{
		HRESULT hr;

		// 创建Connection对象
		hr = pConnection.CreateInstance("ADODB.Connection");
		if( SUCCEEDED( hr ) )
		{
			// 连接数据库
			hr = pConnection->Open(m_pDlg->m_DBData.Linkbuf.GetBuffer(),
				m_pDlg->m_DBData.UserName.GetBuffer(),m_pDlg->m_DBData.PassWord.GetBuffer(),
				adModeUnknown);
		}
		else
		{
			MessageBox("创建数据库连接失败","失败",MB_OK);
			return false;
		}
	}
	catch( ... )
	{
		MessageBox( "连接数据库失败","失败",MB_OK);
		return false;
	}

	try
	{
		// 生成Recordset实例
		pRecordset.CreateInstance("ADODB.Recordset");
		sql.Format("SELECT * FROM AssociatorInfo WHERE AssociatorID = %d",m_AssoID);

		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;
	}

	_variant_t value;
	COleDateTime t;

	bool b = true;
	long num,v;
	if( !pRecordset->adoEOF )
	{
		try
		{
			// 读出当前的飞行次数和里程数
			value = pRecordset->GetCollect("Number");
			if( value.vt != VT_NULL )
				num = value.lVal;
			else
				num = 0;
			num++;
			m_Number = num;
			value = pRecordset->GetCollect("Voyage");
			if( value.vt != VT_NULL )
				v = value.lVal;
			else
				v = 0;
			v += m_CurVoyage;
			m_Voyage = v;

			// 输入新的飞行次数和里程数
			pRecordset->PutCollect("Number",variant_t( num ) );
			pRecordset->PutCollect("Voyage",variant_t( v ) );
			pRecordset->Update();
		}
		catch(...)
		{
			MessageBox("读取记录异常","异常",MB_OK );
			b = false;
		}
	}
	else
	{
		b = false;
	}
	UpdateData(false);

	try
	{
		pRecordset->Close();
		pConnection->Close();
	}
	catch( _com_error * e )
	{
		MessageBox(e->ErrorMessage(),"失败",MB_OK );
		b = false;
	}
	return b;
}

⌨️ 快捷键说明

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