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

📄 findsfdlg.cpp

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