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

📄 mypropertypage1.cpp

📁 用VC实现的一个简单的旅行预订系统
💻 CPP
字号:
// MyPropertyPage1.cpp : implementation file
//

#include "stdafx.h"
#include "resource.h"
#include "MyPropertyPage1.h"

#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif

IMPLEMENT_DYNCREATE(CMyPropertyPage1, CPropertyPage)
IMPLEMENT_DYNCREATE(CMyPropertyPage2, CPropertyPage)


/////////////////////////////////////////////////////////////////////////////
// CMyPropertyPage1 property page

CMyPropertyPage1::CMyPropertyPage1() : CPropertyPage(CMyPropertyPage1::IDD,IDS_PROPSHT_FLIGHT1)//更改默认显示字符串
{
	//{{AFX_DATA_INIT(CMyPropertyPage1)
	m_ArrivCity = _T("");
	m_FlightNum = _T("");
	m_Price = _T("");
	m_FromCity = _T("");
	m_NumSeat = _T("");
	m_NumAvail = _T("");
	//}}AFX_DATA_INIT
}
	
CMyPropertyPage1::~CMyPropertyPage1()
{
}

void CMyPropertyPage1::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMyPropertyPage1)
	DDX_Control(pDX, IDC_LIST_FLIGHTAQ, m_FlightAQ);
	DDX_Text(pDX, IDC_EDIT_ARRI_CITY_FLIGHT_AQ, m_ArrivCity);
	DDX_Text(pDX, IDC_EDIT_FLIGHT_NUM_FLIGHT_AQ, m_FlightNum);
	DDX_Text(pDX, IDC_EDIT_FLIGHT_PRICE_FLIGHT_AQ, m_Price);
	DDX_Text(pDX, IDC_EDIT_FROM_CITY_FLIGHT_AQ, m_FromCity);
	DDX_Text(pDX, IDC_EDIT_NUM_SEATE_FLIGHT_AQ, m_NumSeat);
	DDX_Text(pDX, IDC_EDIT_NUM_AVAIL_FLIGHT_AQ, m_NumAvail);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CMyPropertyPage1, CPropertyPage)
	//{{AFX_MSG_MAP(CMyPropertyPage1)
	ON_BN_CLICKED(IDC_BTN_FLIGHT_ADD, OnBtnFlightAdd)
	ON_BN_CLICKED(IDC_BTN_FLIGHT_MODIFY, OnBtnFlightModify)
	ON_NOTIFY(NM_CLICK, IDC_LIST_FLIGHTAQ, OnClickListFlightaq)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CMyPropertyPage2 property page

CMyPropertyPage2::CMyPropertyPage2() : CPropertyPage(CMyPropertyPage2::IDD,IDS_PROPSHT_FLIGHT2)//更改默认显示字符串
{
	//{{AFX_DATA_INIT(CMyPropertyPage2)
	m_strArivCity = _T("");
	m_strFromCity = _T("");
	m_strFlightNum = _T("");
	m_strFlightNumR = _T("");
	m_numRes = _T("");
	m_custName = _T("");
	//}}AFX_DATA_INIT
}

CMyPropertyPage2::~CMyPropertyPage2()
{
}

void CMyPropertyPage2::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMyPropertyPage2)
	DDX_Control(pDX, IDC_LIST_FLIGHT_QR, m_listFlightQR);
	DDX_Control(pDX, IDC_EDIT_FLIGHTNUM_FLIGHTR, m_ctlFlightNum);
	DDX_Control(pDX, IDC_EDIT_FROM_FLIGHTR, m_ctlFromCity);
	DDX_Control(pDX, IDC_EDIT_ARIV_FLIGHTR, m_ctlArivCity);
	DDX_Text(pDX, IDC_EDIT_ARIV_FLIGHTR, m_strArivCity);
	DDX_Text(pDX, IDC_EDIT_FROM_FLIGHTR, m_strFromCity);
	DDX_Text(pDX, IDC_EDIT_FLIGHTNUM_FLIGHTQ, m_strFlightNum);
	DDX_Text(pDX, IDC_EDIT_FLIGHTNUM_FLIGHTR, m_strFlightNumR);
	DDX_Text(pDX, IDC_EDIT_NUM_RES, m_numRes);
	DDX_Text(pDX, IDC_EDIT_CUSTNAME_FLIGHTR, m_custName);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CMyPropertyPage2, CPropertyPage)
	//{{AFX_MSG_MAP(CMyPropertyPage2)
	ON_BN_CLICKED(IDC_BTN_FLIGHTR_Q, OnBtnFlightrQ)
	ON_BN_CLICKED(IDC_BTN_FLIGHTR_RES, OnBtnFlightrRes)
	ON_BN_CLICKED(IDC_RADIO_FLIGHTNUM_FlLIGHTQR, OnRADIOFLIGHTNUMFlLIGHTQR)
	ON_BN_CLICKED(IDC_RADIO_FROMCITY_FLIGHITQR, OnRadioFromcityFlighitqr)
	ON_BN_CLICKED(IDC_RADIO_ARRIVCITY_FLIGHTQR, OnRadioArrivcityFlightqr)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CMyPropertyPage1::OnBtnFlightAdd() 
{
	// TODO: Add your control notification handler code here
	UpdateData();//刷新数据,使编辑框中的值赋给字符串
	if( m_FlightNum.IsEmpty() )
	{
		MessageBox("航班号不能为空!");
		CWnd::GetDlgItem(IDC_EDIT_FLIGHT_NUM_FLIGHT_AQ)->SetFocus();
		return;
	}
	if( m_Price.IsEmpty() )
	{
		m_Price = "0.00";
		return;
	}
	if( m_NumSeat.IsEmpty() )
	{
		m_NumSeat = "0";
		return;
	}
	if( m_NumAvail.IsEmpty() )
	{
		m_NumAvail = "0";
		return;
	}

	if( m_FromCity.IsEmpty() )
	{
		m_FromCity = "未知";
		return;
	}
	if( m_ArrivCity.IsEmpty() )
	{
		m_ArrivCity = "未知";
	}
	strSQL = "insert into FLIGHTS values\
		('"	+ m_FlightNum + "'," + m_Price + ",\
		" + m_NumSeat + "," + m_NumAvail + ",\
		'" + m_FromCity + "','" + m_ArrivCity + "')";

	((CTRSApp*)AfxGetApp())->db.BeginTrans();
	try{
		((CTRSApp*)AfxGetApp())->db.ExecuteSQL(strSQL);
	}
	catch(CDBException e)
	{
		e.ReportError();
		((CTRSApp*)AfxGetApp())->db.Rollback();
		return;
	}
	((CTRSApp*)AfxGetApp())->db.CommitTrans();

	Refresh();
}

void CMyPropertyPage1::Refresh()
{
	CString flightNum,price,numSeats,numAvail,fromCity,arivCity;
	
	m_FlightAQ.DeleteAllItems();
	CRecordset rs(&(((CTRSApp*)AfxGetApp())->db));
	rs.Open(CRecordset::forwardOnly,"select * from FLIGHTS");
	int i=0;
	
	while( !rs.IsEOF() )
	{
		rs.GetFieldValue("flightNum",flightNum);
	    m_FlightAQ.InsertItem(i,flightNum);
	
		rs.GetFieldValue("price",price);
		m_FlightAQ.SetItemText(i,1,price);

		rs.GetFieldValue("numSeats",numSeats);
		m_FlightAQ.SetItemText(i,2,numSeats);

		rs.GetFieldValue("numAvail",numAvail);
		m_FlightAQ.SetItemText(i,3,numAvail);

		rs.GetFieldValue("FromCity",fromCity);
		m_FlightAQ.SetItemText(i,4,fromCity);

		rs.GetFieldValue("ArivCity",arivCity);
		m_FlightAQ.SetItemText(i,5,arivCity);
		
		rs.MoveNext();
		i++;
	}

	rs.Close();
}

void CMyPropertyPage1::OnBtnFlightModify() 
{
	// TODO: Add your control notification handler code here
	int i = m_FlightAQ.GetSelectionMark();
	CString strSQL;
	if( i == -1 )
	{
		MessageBox("请选择一条记录!");
		return;
	}
	else
	{
		UpdateData();
		strSQL = "update FLIGHTS set price = " + m_Price + ",\
					numSeats = " + m_NumSeat + ",\
					numAvail = " + m_NumAvail + ",\
					fromCity = '" + m_FromCity + "',\
					arivCity = '" + m_ArrivCity + "'\
					where flightNum = '" + m_FlightNum +"'";
	}
	((CTRSApp*)AfxGetApp())->db.BeginTrans();
	try{
		((CTRSApp*)AfxGetApp())->db.ExecuteSQL(strSQL);
	}
	catch(CDBException e)
	{
		e.ReportError();
		((CTRSApp*)AfxGetApp())->db.Rollback();
		return;
	}
	((CTRSApp*)AfxGetApp())->db.CommitTrans();
	Refresh();
}

void CMyPropertyPage2::OnBtnFlightrQ() 
{
	// TODO: Add your control notification handler code here
	CString strSQL;
	int choice = CDialog::GetCheckedRadioButton(IDC_RADIO_FLIGHTNUM_FlLIGHTQR,IDC_RADIO_ARRIVCITY_FLIGHTQR);
	UpdateData();
	if( choice == IDC_RADIO_FLIGHTNUM_FlLIGHTQR )
	{
		strSQL = "select * from FLIGHTS where flightNum ='" + m_strFlightNumR + "'";
	}
	else if( choice == IDC_RADIO_FROMCITY_FLIGHITQR )
	{
		strSQL = "select * from FLIGHTS where fromCity ='" + m_strFromCity + "'";
	}
	else if( choice == IDC_RADIO_ARRIVCITY_FLIGHTQR )
	{
		strSQL = "select * from FLIGHTS where arivCity ='" + m_strArivCity + "'";
	}
	else
	{
		strSQL = "select * from FLIGHTS";
	}

CString flightNum,price,numSeats,numAvail,fromCity,arivCity;
	

	m_listFlightQR.DeleteAllItems();
	
	CRecordset rs(&(((CTRSApp*)AfxGetApp())->db));
	rs.Open(CRecordset::forwardOnly,strSQL);

	int i=0;
	while( ! rs.IsEOF() )
	{
		rs.GetFieldValue("flightNum",flightNum);
		m_listFlightQR.InsertItem(i,flightNum);

		rs.GetFieldValue("price",price);
		m_listFlightQR.SetItemText(i,1,price);

		rs.GetFieldValue("numSeats",numSeats);
		m_listFlightQR.SetItemText(i,2,numSeats);

		rs.GetFieldValue("numAvail",numAvail);
		m_listFlightQR.SetItemText(i,3,numAvail);

		rs.GetFieldValue("FromCity",fromCity);
		m_listFlightQR.SetItemText(i,4,fromCity);

		rs.GetFieldValue("ArivCity",arivCity);
		m_listFlightQR.SetItemText(i,5,arivCity);

		rs.MoveNext();
		i++;
	}
	rs.Close();
//	Refresh();
}

void CMyPropertyPage2::OnBtnFlightrRes() 
{
	// TODO: Add your control notification handler code here
	CString strSQL;
	UpdateData();
	strSQL = "select numAvail from FLIGHTS where flightNum = '" + m_strFlightNum + "'";
	
	if( m_custName.IsEmpty() )
	{
		MessageBox("客户名不能为空!",MB_OK);
		return;
	}
	if( m_strFlightNum.IsEmpty() )
	{
		MessageBox("航班号不能为空!",MB_OK);
		return;
	}
	if( m_numRes.IsEmpty() )
	{
		MessageBox("预定数量不能为空!",MB_OK);
		return;
	}
	CRecordset rs(&(((CTRSApp*)AfxGetApp())->db));
	rs.Open(CRecordset::forwardOnly,strSQL); 

	CDBVariant numAvail;
	if( ! rs.IsEOF() )
	{
		rs.GetFieldValue("numAvail",numAvail);
		if(numAvail.m_iVal - atoi(m_numRes) >= 0)
		{	//更新FLIGHTS表
			strSQL.Format("update FLIGHTS set numAvail = %d where\
				flightNum = '" + m_strFlightNum + "'",numAvail.m_iVal - atoi(m_numRes));

			((CTRSApp*)AfxGetApp())->db.ExecuteSQL(strSQL);
			//添加RESERVATIONS表
			strSQL = "insert into RESERVATIONS(custName,resvType,flightNum) values('"\
				+ m_custName + "',1,'" + m_strFlightNum + "')";
		//	MessageBox(strSQL);
			((CTRSApp*)AfxGetApp())->db.ExecuteSQL(strSQL);
			Refresh();
		}
		else
		{
			MessageBox("没有足够的座位!",MB_OK);
		}
	}
//	else
//	{
//		MessageBox("该航班不存在!",MB_OK);
//	}
	rs.Close();
//	MessageBox(m_strFlightNumR,MB_OK);
}



void CMyPropertyPage2::Refresh()
{
	CString flightNum,price,numSeats,numAvail,fromCity,arivCity;
	

	m_listFlightQR.DeleteAllItems();
	
	CRecordset rs(&(((CTRSApp*)AfxGetApp())->db));
	rs.Open(CRecordset::forwardOnly,"select * from FLIGHTS");

	int i=0;
	while( ! rs.IsEOF() )
	{
		rs.GetFieldValue("flightNum",flightNum);
		m_listFlightQR.InsertItem(i,flightNum);

		rs.GetFieldValue("price",price);
		m_listFlightQR.SetItemText(i,1,price);

		rs.GetFieldValue("numSeats",numSeats);
		m_listFlightQR.SetItemText(i,2,numSeats);

		rs.GetFieldValue("numAvail",numAvail);
		m_listFlightQR.SetItemText(i,3,numAvail);

		rs.GetFieldValue("FromCity",fromCity);
		m_listFlightQR.SetItemText(i,4,fromCity);

		rs.GetFieldValue("ArivCity",arivCity);
		m_listFlightQR.SetItemText(i,5,arivCity);

		rs.MoveNext();
		i++;
	}
	rs.Close();
}

BOOL CMyPropertyPage1::OnInitDialog() 
{
	CPropertyPage::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_FlightAQ.InsertColumn(0,"航班号");
	m_FlightAQ.InsertColumn(1,"价格");
	m_FlightAQ.InsertColumn(2,"座位数");
	m_FlightAQ.InsertColumn(3,"剩余座位");
	m_FlightAQ.InsertColumn(4,"出发地");
	m_FlightAQ.InsertColumn(5,"目的地");

	RECT rect;
	m_FlightAQ.GetWindowRect(&rect);
	int rectWidth=rect.right-rect.left;
	m_FlightAQ.SetColumnWidth(0,rectWidth/6);
	m_FlightAQ.SetColumnWidth(1,rectWidth/6);
	m_FlightAQ.SetColumnWidth(2,rectWidth/6);
	m_FlightAQ.SetColumnWidth(3,rectWidth/6);
	m_FlightAQ.SetColumnWidth(4,rectWidth/6);
	m_FlightAQ.SetColumnWidth(5,rectWidth/6);

	m_FlightAQ.SetExtendedStyle(LVS_EX_FULLROWSELECT);//单行选中
	Refresh();
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

BOOL CMyPropertyPage2::OnInitDialog() 
{
	CPropertyPage::OnInitDialog();
	
	// TODO: Add extra initialization here
	CWnd::GetDlgItem(IDC_EDIT_FLIGHTNUM_FLIGHTR)->EnableWindow(false);
	CWnd::GetDlgItem(IDC_EDIT_FROM_FLIGHTR)->EnableWindow(false);
	CWnd::GetDlgItem(IDC_EDIT_ARIV_FLIGHTR)->EnableWindow(false);

	m_listFlightQR.InsertColumn(0,"航班号");
	m_listFlightQR.InsertColumn(1,"价格");
	m_listFlightQR.InsertColumn(2,"座位数");
	m_listFlightQR.InsertColumn(3,"剩余座位");
	m_listFlightQR.InsertColumn(4,"出发地");
	m_listFlightQR.InsertColumn(5,"目的地");

	RECT rect;
	m_listFlightQR.GetWindowRect(&rect);
	int listWidth = rect.right - rect.left;
	m_listFlightQR.SetColumnWidth(0,listWidth/6);
	m_listFlightQR.SetColumnWidth(1,listWidth/6);
	m_listFlightQR.SetColumnWidth(2,listWidth/6);
	m_listFlightQR.SetColumnWidth(3,listWidth/6);
	m_listFlightQR.SetColumnWidth(4,listWidth/6);
	m_listFlightQR.SetColumnWidth(5,listWidth/6);

	m_listFlightQR.SetExtendedStyle(LVS_EX_FULLROWSELECT);//单行选中
	Refresh();
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CMyPropertyPage1::OnClickListFlightaq(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	int i = m_FlightAQ.GetSelectionMark();

	if( i == -1 )
	{
		MessageBox("请选择一条记录!");
		return;
	}
	else		//选中的记录出现在编辑框中
	{
		m_FlightAQ.SetHotItem(i);//选中的行高亮
		m_FlightNum = m_FlightAQ.GetItemText(i,0);
		m_Price = m_FlightAQ.GetItemText(i,1);
		m_NumSeat = m_FlightAQ.GetItemText(i,2);
		m_NumAvail = m_FlightAQ.GetItemText(i,3);
		m_FromCity = m_FlightAQ.GetItemText(i,4);
		m_ArrivCity = m_FlightAQ.GetItemText(i,5);
		UpdateData(false);
	}
	*pResult = 0;
}

void CMyPropertyPage2::OnRADIOFLIGHTNUMFlLIGHTQR() 
{
	// TODO: Add your control notification handler code here
	CDialog::CheckRadioButton(IDC_RADIO_FLIGHTNUM_FlLIGHTQR,IDC_RADIO_ARRIVCITY_FLIGHTQR,IDC_RADIO_FLIGHTNUM_FlLIGHTQR);
	CWnd::GetDlgItem(IDC_EDIT_FLIGHTNUM_FLIGHTR)->EnableWindow(true);
	CWnd::GetDlgItem(IDC_EDIT_FROM_FLIGHTR)->EnableWindow(false);
	CWnd::GetDlgItem(IDC_EDIT_ARIV_FLIGHTR)->EnableWindow(false);
}

void CMyPropertyPage2::OnRadioFromcityFlighitqr() 
{
	// TODO: Add your control notification handler code here
	CDialog::CheckRadioButton(IDC_RADIO_FLIGHTNUM_FlLIGHTQR,IDC_RADIO_ARRIVCITY_FLIGHTQR,IDC_RADIO_FROMCITY_FLIGHITQR);
	CWnd::GetDlgItem(IDC_EDIT_FLIGHTNUM_FLIGHTR)->EnableWindow(false);
	CWnd::GetDlgItem(IDC_EDIT_FROM_FLIGHTR)->EnableWindow(true);
	CWnd::GetDlgItem(IDC_EDIT_ARIV_FLIGHTR)->EnableWindow(false);
}

void CMyPropertyPage2::OnRadioArrivcityFlightqr() 
{
	// TODO: Add your control notification handler code here
	CDialog::CheckRadioButton(IDC_RADIO_FLIGHTNUM_FlLIGHTQR,IDC_RADIO_ARRIVCITY_FLIGHTQR,IDC_RADIO_ARRIVCITY_FLIGHTQR);
	CWnd::GetDlgItem(IDC_EDIT_FLIGHTNUM_FLIGHTR)->EnableWindow(false);
	CWnd::GetDlgItem(IDC_EDIT_FROM_FLIGHTR)->EnableWindow(false);
	CWnd::GetDlgItem(IDC_EDIT_ARIV_FLIGHTR)->EnableWindow(true);
}

⌨️ 快捷键说明

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