www.pudn.com > ssproj03.zip > Page1.cpp


// Page1.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "db.h" 
#include "mainfrm.h" 
#include "ssproj03.h" 
#include "airinfo.h" 
#include "city.h" 
#include "dlg.h" 
#include "syspara.h" 
#include "wrapperView.h" 
#include "ticketnum.h" 
#include "ticketnums.h" 
#include "Page1.h" 
#include "bookinfo.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CPage1 property page 
 
IMPLEMENT_DYNCREATE(CPage1, CPropertyPage) 
 
CPage1::CPage1() : CPropertyPage(CPage1::IDD) 
{ 
	//{{AFX_DATA_INIT(CPage1) 
	//}}AFX_DATA_INIT 
	m_Num1=0; 
	m_PriceFlag=1; 
	m_Total=0; 
	m_TotalPrice=0; 
	m_Serial=1; 
//	m_pPrint=new CPrint(); 
	m_YesFlag=false; 
	m_dbAirInfo=new CAirInfo(&m_DB); 
	m_dbCity=new CCity(&m_DB); 
	m_dbSyspara=new CSyspara(&m_DB); 
	m_dbBookInfo=new CBookInfo(&m_DB); 
	m_dbTicketNum=new CTicketNum(&m_DB); 
	m_TicketNums=new CTicketNums; 
} 
 
CPage1::~CPage1() 
{ 
	delete m_dbAirInfo; 
	delete m_dbCity; 
	delete m_dbSyspara; 
	delete m_dbBookInfo; 
	delete m_dbTicketNum; 
	delete m_TicketNums; 
} 
 
void CPage1::DoDataExchange(CDataExchange* pDX) 
{ 
	CPropertyPage::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CPage1) 
	DDX_Control(pDX, IDC_YES, m_btnYes); 
	DDX_Control(pDX, IDC_OK, m_OK); 
	DDX_Control(pDX, IDC_BOOKERPHONE, m_BookerPhone); 
	DDX_Control(pDX, IDC_BOOKERPASSNO, m_BookerPassNo); 
	DDX_Control(pDX, IDC_BOOKERNAME, m_BookerName); 
	DDX_Control(pDX, IDC_BOOKERGETDATE, m_BookerGetDate); 
	DDX_Control(pDX, IDC_SRERIAL, m_stSerial); 
	DDX_Control(pDX, IDC_NUM, m_stNum); 
	DDX_Control(pDX, IDC_TOTALPRICE, m_stTotalPrice); 
	DDX_Control(pDX, IDC_RADIO2, m_Second); 
	DDX_Control(pDX, IDC_RADIO1, m_Third); 
	DDX_Control(pDX, IDC_RADIO3, m_First); 
	DDX_Control(pDX, IDC_START, m_Start); 
	DDX_Control(pDX, IDC_NAME, m_Name); 
	DDX_Control(pDX, IDC_PASSNO, m_PassNo); 
	DDX_Control(pDX, IDC_INFO, m_Info); 
	DDX_Control(pDX, IDC_AIRNO, m_AirNo); 
	DDX_Control(pDX, IDC_DATE, m_Date); 
	DDX_Control(pDX, IDC_TARGET, m_Target); 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(CPage1, CPropertyPage) 
	//{{AFX_MSG_MAP(CPage1) 
	ON_WM_CANCELMODE() 
	ON_CBN_SELCHANGE(IDC_START, OnSelchangeStart) 
	ON_CBN_SELCHANGE(IDC_TARGET, OnSelchangeTarget) 
	ON_NOTIFY(NM_CLICK, IDC_AIRNO, OnClickAirno) 
	ON_EN_CHANGE(IDC_NAME, OnChangeName) 
	ON_EN_CHANGE(IDC_PASSNO, OnChangePassno) 
	ON_NOTIFY(DTN_CLOSEUP, IDC_DATE, OnCloseupDate) 
	ON_BN_CLICKED(IDC_RADIO1, OnRadio1) 
	ON_BN_CLICKED(IDC_RADIO2, OnRadio2) 
	ON_BN_CLICKED(IDC_RADIO3, OnRadio3) 
	ON_NOTIFY(NM_DBLCLK, IDC_INFO, OnDblclkInfo) 
	ON_BN_CLICKED(IDC_YES, OnYes) 
	ON_BN_CLICKED(IDC_OK, OnOk) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CPage1 message handlers 
 
BOOL CPage1::OnInitDialog()  
{ 
	CPropertyPage::OnInitDialog(); 
	 
	::SendMessage(m_AirNo.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, 
				LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT); 
	::SendMessage(m_Info.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, 
		LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT); 
	m_hAccel = ::LoadAccelerators(AfxGetResourceHandle(), 
		MAKEINTRESOURCE(IDR_ACCELERATOR1)); // use same resource name as dialog 
	ASSERT(m_hAccel); 
	InitAll(); 
	m_OK.EnableWindow(false); 
	return TRUE; 
} 
 
void CPage1::OnCancelMode()  
{ 
	CPropertyPage::OnCancelMode(); 
	 
	// TODO: Add your message handler code here 
	 
} 
 
 
 
void CPage1::OnSelchangeStart()  
{ 
	// TODO: Add your control notification handler code here 
	m_Start.GetWindowText(struInfo.sStart); 
//	int nIndex=m_Target.FindString(0,struInfo.sStart); 
//	m_Target.DeleteString(nIndex); 
//	AddToInfo(4,struInfo.sStart); 
//	GetAirInfo(struInfo.sStart,struInfo.sTarget); 
} 
 
void CPage1::OnSelchangeTarget()  
{ 
	// TODO: Add your control notification handler code here 
	m_Target.GetWindowText(struInfo.sTarget); 
	m_Start.GetWindowText(struInfo.sStart); 
//	AddToInfo(5,struInfo.sTarget); 
	GetAirInfo(struInfo.sStart,struInfo.sTarget); 
} 
////////////////////////////////////////////////////// 
// 
// 将航班信息添加到航班信息表中(m_AirNo) 
// 
////////////////////////////////////////////////////// 
//void CPage1::AddAirInfo(int nIndex,CString No, CString St, CString Tg,  
//						CString Time,CString Price1,CString Price2,CString Price3,CString LeftNum) 
void CPage1::AddAirInfo() 
{ 
		LV_ITEM lvi; 
		int Count; 
		CString str; 
 
		Count=m_AirNo.GetItemCount(); 
		lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE; 
		lvi.iItem = Count; 
		lvi.iSubItem = 0; 
		lvi.pszText ="" ; 
		lvi.stateMask = LVIS_STATEIMAGEMASK|LVIF_TEXT|LVS_EX_GRIDLINES; 
		lvi.state = INDEXTOSTATEIMAGEMASK(1); 
 
		m_AirNo.InsertItem(&lvi); 
//		len=Time.GetLength(); 
//		if(m_LastLenm_AirNo);		//航班号 
		m_AirNo.SetItemText(Count,1,m_dbAirInfo->m_Start);		//出发地 
		m_AirNo.SetItemText(Count,2,m_dbAirInfo->m_Target);		//目的地 
		m_AirNo.SetItemText(Count,3,m_dbAirInfo->m_StartTime);		//起飞时间 
		m_AirNo.SetItemText(Count,4,m_dbAirInfo->m_Price1);	//经济舱价格 
		m_AirNo.SetItemText(Count,5,m_dbAirInfo->m_Price2);	//商务舱价格 
		m_AirNo.SetItemText(Count,6,m_dbAirInfo->m_Price3);	//头等舱价格 
		GetAllTicketNum(m_dbAirInfo->m_AirNo); 
 
		str.Format("%d",m_TicketNums->Num1); 
		m_AirNo.SetItemText(Count,7,str);	//经济舱剩余票数 
		str.Format("%d",m_TicketNums->Num2); 
		m_AirNo.SetItemText(Count,8,str);	//商务剩余票数 
		str.Format("%d",m_TicketNums->Num3); 
		m_AirNo.SetItemText(Count,9,str);	//头等舱剩余票数 
		m_AirNo.EnsureVisible( Count, 0 ); 
 
} 
 
void CPage1::OnClickAirno(NMHDR* pNMHDR, LRESULT* pResult)  
{ 
	// TODO: Add your control notification handler code here 
	 
	CString str; 
	CString str1; 
	int nItem; 
	CDlg dlg; 
	CString AirNo; 
 
//	::SendMessage(m_AirNo.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, 
//				LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT); 
 
     
	if(struInfo.sName==""||struInfo.sPassNo==""){ 
		AfxMessageBox("姓名或身份证号位设置"); 
		return; 
	} 
	POSITION pos = m_AirNo.GetFirstSelectedItemPosition(); 
	if (pos == NULL) 
		return; 
	else 
	{ 
		while (pos) 
		{ 
			 nItem = m_AirNo.GetNextSelectedItem(pos); 
		  TRACE1("Item %d was selected!\n", nItem); 
      // you could do your own processing on nItem here 
		} 
	} 
 
	struInfo.sNum="1"; 
	AirNo=m_AirNo.GetItemText(nItem,0); 
	GetNumOfTicket(AirNo); //取航班信息表中地剩余票数 
	int n; 
	switch(m_PriceFlag){ 
		case 1: 
			n=m_TicketNums->Num1; 
			break; 
		case 2: 
			n=m_TicketNums->Num2; 
			break; 
		case 3: 
			n=m_TicketNums->Num3; 
			break; 
		default: 
			break; 
	} 
	int n1=n-atol(struInfo.sNum); 
	if(n1<0){ 
		str.Format("本航班只有%d张可售.",n); 
		AfxMessageBox(str); 
		return; 
	} 
	//设置价格 
	str.Format("%d",n1); 
	switch(m_PriceFlag){ 
		case 1: 
			m_AirNo.SetItemText(nItem,7,str.GetBuffer(0)); 
			break; 
		case 2: 
			m_AirNo.SetItemText(nItem,8,str.GetBuffer(0)); 
			break; 
		case 3: 
			m_AirNo.SetItemText(nItem,9,str.GetBuffer(0)); 
			break; 
		default: 
			break; 
	} 
 
	str=m_AirNo.GetItemText(nItem,0); 
	struInfo.sAirNo=str; 
	str=m_AirNo.GetItemText(nItem,1); 
	struInfo.sStart=str; 
	str=m_AirNo.GetItemText(nItem,2); 
	struInfo.sTarget=str; 
	str=m_AirNo.GetItemText(nItem,3); 
	struInfo.sTime=str; 
	m_Date.GetWindowText(str); 
	struInfo.sDate=str; 
	switch(m_PriceFlag){ 
		case 1: 
			str=m_AirNo.GetItemText(nItem,4); 
			str1="经济舱"; 
			break; 
		case 2: 
			str=m_AirNo.GetItemText(nItem,5); 
			str1="商务舱"; 
			break; 
		case 3: 
			str=m_AirNo.GetItemText(nItem,6); 
			str1="头等舱"; 
			break; 
		default:; 
	} 
	struInfo.sPrice=str; 
	struInfo.sClass=str1; 
	AddToInfo(); 
	UpdateTicketNum(nItem,AirNo); 
	m_Name.SetWindowText(""); 
	m_PassNo.SetWindowText(""); 
	*pResult = 0; 
	m_btnYes.EnableWindow(); 
} 
 
 
////////////////////////////////////////////////////// 
// 
// 姓名改变或新加时,将姓名添加到订票信息结构中 
// 
////////////////////////////////////////////////////// 
 
void CPage1::OnChangeName()  
{ 
	// TODO: If this is a RICHEDIT control, the control will not 
	// send this notification unless you override the CPropertyPage::OnInitDialog() 
	// function and call CRichEditCtrl().SetEventMask() 
	// with the ENM_CHANGE flag ORed into the mask. 
	 
	// TODO: Add your control notification handler code here 
	CString s; 
	m_Name.GetWindowText(s); 
	struInfo.sName=s; 
} 
////////////////////////////////////////////////////// 
// 
// 身份证号改变或新加时,将身份证号添加到订票信息结构中 
// 
////////////////////////////////////////////////////// 
 
void CPage1::OnChangePassno()  
{ 
	// TODO: If this is a RICHEDIT control, the control will not 
	// send this notification unless you override the CPropertyPage::OnInitDialog() 
	// function and call CRichEditCtrl().SetEventMask() 
	// with the ENM_CHANGE flag ORed into the mask. 
	 
	// TODO: Add your control notification handler code here 
	CString s; 
	m_PassNo.GetWindowText(s); 
	struInfo.sPassNo=s; 
} 
////////////////////////////////////////////////////// 
// 
// 日期改变或新加时,将日期添加到订票信息结构中 
// 
////////////////////////////////////////////////////// 
 
void CPage1::OnCloseupDate(NMHDR* pNMHDR, LRESULT* pResult)  
{ 
	// TODO: Add your control notification handler code here 
	CTime Time; 
	CString AirNo; 
	int i; 
	CString str; 
 
 	m_Date.GetTime((CTime&)Time); 
	struInfo.sDate=Time.Format("%Y年%m月%d日"); 
 
	for(i=0;iNum1);//经济舱价格 
		m_AirNo.SetItemText(i,7,str); 
		str.Format("%d",m_TicketNums->Num2);//商务舱价格 
		m_AirNo.SetItemText(i,8,str); 
		str.Format("%d",m_TicketNums->Num3);//头等舱价格 
		m_AirNo.SetItemText(i,9,str); 
 
	} 
	 
	*pResult = 0; 
} 
 
 
 
 
 
 
////////////////////////////////////////////////////// 
// 
// 设置订票信息表的表头 
// 
////////////////////////////////////////////////////// 
 
void CPage1::InitInfo() 
{ 
		CString str; 
 
	//为订票信息(ListCtrl)添加项目标题 
	m_Info.InsertColumn(0,"姓名",LVCFMT_LEFT,100,0); 
	m_Info.InsertColumn(1,"身份证号",LVCFMT_LEFT,100,0); 
	m_Info.InsertColumn(2,"航班号",LVCFMT_LEFT,100,0); 
	m_Info.InsertColumn(3,"出发地",LVCFMT_LEFT,100,0); 
	m_Info.InsertColumn(4,"目的地",LVCFMT_LEFT,100,0); 
	m_Info.InsertColumn(5,"起飞日期",LVCFMT_LEFT,100,0); 
	m_Info.InsertColumn(6,"起飞时间",LVCFMT_LEFT,100,0); 
	m_Info.InsertColumn(7,"等级",LVCFMT_LEFT,100,0); 
	m_Info.InsertColumn(8,"价格",LVCFMT_LEFT,100,0); 
	m_Info.InsertColumn(9,"订票数",LVCFMT_LEFT,100,0); 
} 
 
 
////////////////////////////////////////////////////// 
// 
// 打开数据库 
// 
////////////////////////////////////////////////////// 
 
void CPage1::Ini() 
{ 
	CString str; 
 
	//从注册表取打开数据库参数串 
	str=AfxGetApp()->GetProfileString("DataBase","DSN","AirLine"); 
	TRY{ 
		if(!m_DB.IsOpen()){ 
			if(!m_DB.Open(str)){ 
				m_DB.Open(NULL); 
			} 
		} 
	} 
	CATCH(CDBException, e) 
	{ 
				m_DB.Open(NULL);	//显示数据库参数设置窗口(ODBC) 
 
	} 
	END_CATCH 
 
	str=m_DB.GetConnect(); 
	AfxGetApp()->WriteProfileString("DataBase","DSN",str); 
	//设置按钮,选中经济舱 
	m_Third.SetCheck(true); 
	m_Second.SetCheck(false); 
	m_First.SetCheck(false); 
 
	str="select * from sys"; 
	if(m_dbSyspara->IsOpen()) 
		m_dbSyspara->Close(); 
	m_dbSyspara->Open(AFX_DB_USE_DEFAULT_TYPE,str); 
	m_dbSyspara->MoveFirst(); 
	m_Serial=m_dbSyspara->m_SerialNo; 
	str.Format("%06d",m_Serial); 
	m_stSerial.SetWindowText(str); 
 
	 
 
	GetCity();	//从数据库取出城市名 
	str=m_dbSyspara->m_Local; 
	int index=m_Start.FindString(0,str); 
	m_Start.SetCurSel(index); 
	m_btnYes.EnableWindow(false); 
} 
////////////////////////////////////////////////////// 
// 
// 将航班信息从数据库中取出,并添加到航班信息表中(m_AirNo) 
// 
////////////////////////////////////////////////////// 
 
void CPage1::GetAirInfo(CString Start, CString Target) 
{ 
	CString SQL; 
	int i; 
	CString str; 
	CString Pr; 
 
	i=0; 
	if(Start=="" || Target==""|| Start==Target) 
		SQL="select * from airinfo"; 
	else 
		SQL="select * from airinfo where Start='"+Start+"' and Target='"+Target+"'"; 
	if(m_dbAirInfo->IsOpen()) 
		m_dbAirInfo->Close(); 
	m_dbAirInfo->Open(AFX_DB_USE_DEFAULT_TYPE,SQL); 
	if(m_dbAirInfo->GetRecordCount()==0){ 
		m_AirNo.DeleteAllItems(); 
//		AddAirInfo(); 
		return; 
	} 
	m_AirNo.DeleteAllItems(); 
	m_dbAirInfo->MoveFirst(); 
	do{ 
//		str=m_dbAirInfo->m_StartTime.Format("%H:%M"); 
//		double f=atof(m_dbAirInfo->m_Price1); 
//		Pr.Format("%.2f",f); 
//		str.Format("%d",m_dbAirInfo->m_LeftNum); 
//		AddAirInfo(i,m_dbAirInfo->m_AirNo,m_dbAirInfo->m_Start, 
//			m_dbAirInfo->m_Target,m_dbAirInfo->m_StartTime,m_dbAirInfo->m_Price1,m_dbAirInfo->m_Price2, 
//			m_dbAirInfo->m_Price3,str); 
		AddAirInfo(); 
		i++; 
		m_dbAirInfo->MoveNext(); 
	}while(!m_dbAirInfo->IsEOF()); 
	m_dbAirInfo->Close(); 
	if(m_AirNo.GetItemCount()>m_AirNo.GetCountPerPage()){ 
		CRect rect; 
		m_AirNo.GetItemRect(0,rect,LVIR_BOUNDS); 
		int h=rect.Height()*(m_AirNo.GetItemCount()-m_AirNo.GetCountPerPage()); 
		CSize s(0,-h); 
		m_AirNo.Scroll(s); 
	} 
} 
////////////////////////////////////////////////////// 
// 
// 从数据库中取出城市名并将其添加到出发地和目的地框中 
// 
////////////////////////////////////////////////////// 
 
void CPage1::GetCity() 
{ 
	CString SQL; 
	int i; 
	CString str; 
	CString Pr; 
 
	i=0; 
	SQL="select * from City;"; 
	if(m_dbCity->IsOpen()) 
		m_dbCity->Close(); 
	m_dbCity->Open(AFX_DB_USE_DEFAULT_TYPE,SQL); 
	if(m_dbCity->GetRecordCount()==0){ 
		return; 
	} 
	m_dbCity->MoveFirst(); 
	do{ 
		str=m_dbCity->m_CityName; 
		AddCity(str); 
		m_dbCity->MoveNext(); 
	}while(!m_dbCity->IsEOF()); 
 
m_Start.SetCurSel(0); 
} 
////////////////////////////////////////////////////// 
// 
// 将城市名添加到出发地和目的地COMBOX中(m_Start,m_Target) 
// 
////////////////////////////////////////////////////// 
 
void CPage1::AddCity(CString str) 
{ 
	m_Start.AddString(str); 
	m_Target.AddString(str); 
} 
////////////////////////////////////////////////////// 
// 
// 经济舱改变时设置 
// 
////////////////////////////////////////////////////// 
 
void CPage1::OnRadio1()  
{ 
	// TODO: Add your control notification handler code here 
	m_Third.SetCheck(true); 
	m_Second.SetCheck(false); 
	m_First.SetCheck(false); 
	m_PriceFlag=1; 
} 
////////////////////////////////////////////////////// 
// 
// 商务舱改变时设置 
// 
////////////////////////////////////////////////////// 
 
void CPage1::OnRadio2()  
{ 
	// TODO: Add your control notification handler code here 
	m_Third.SetCheck(false); 
	m_Second.SetCheck(true); 
	m_First.SetCheck(false); 
	m_PriceFlag=2; 
	 
} 
////////////////////////////////////////////////////// 
// 
// 头等舱改变时设置 
// 
////////////////////////////////////////////////////// 
 
void CPage1::OnRadio3()  
{ 
	// TODO: Add your control notification handler code here 
	m_Third.SetCheck(false); 
	m_Second.SetCheck(false); 
	m_First.SetCheck(true); 
	m_PriceFlag=3; 
	 
} 
////////////////////////////////////////////////////// 
// 
// 将选中的航班信息添加到订票信息表中(m_Info) 
// 
////////////////////////////////////////////////////// 
 
void CPage1::AddToInfo() 
{ 
		LV_ITEM lvi; 
		int Count; 
		CString str; 
 
		Count=m_Info.GetItemCount(); 
		lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE; 
		lvi.iItem = Count; 
		lvi.iSubItem = 0; 
		lvi.pszText ="" ; 
		lvi.stateMask = LVIS_STATEIMAGEMASK|LVIF_TEXT|LVS_EX_GRIDLINES; 
		lvi.state = INDEXTOSTATEIMAGEMASK(1); 
 
		m_Info.InsertItem(&lvi); 
		 
// set item text for additional columns 
		m_Info.SetItemText(Count,0,struInfo.sName); 
		m_Info.SetItemText(Count,1,struInfo.sPassNo); 
		m_Info.SetItemText(Count,2,struInfo.sAirNo); 
		m_Info.SetItemText(Count,3,struInfo.sStart); 
		m_Info.SetItemText(Count,4,struInfo.sTarget); 
		m_Info.SetItemText(Count,5,struInfo.sDate); 
		m_Info.SetItemText(Count,6,struInfo.sTime); 
		m_Info.SetItemText(Count,7,struInfo.sClass); 
		m_Info.SetItemText(Count,8,struInfo.sPrice); 
		m_Info.SetItemText(Count,9,struInfo.sNum); 
		float f=atof(struInfo.sPrice.GetBuffer(0)); 
		int i=atol(struInfo.sNum); 
		m_Total+=i; 
		m_TotalPrice+=f*i; 
		str.Format("%d",m_Total); 
		m_stNum.SetWindowText(str); 
 
		str.Format("%f",m_TotalPrice); 
		m_stTotalPrice.SetWindowText(str); 
 
		m_Info.EnsureVisible( Count, 0 ); 
 
} 
////////////////////////////////////////////////////// 
// 
// 双击订票信息时删除该项 
// 
////////////////////////////////////////////////////// 
 
void CPage1::OnDblclkInfo(NMHDR* pNMHDR, LRESULT* pResult)  
{ 
	// TODO: Add your control notification handler code here 
	CString str; 
	CString str1; 
	LVFINDINFO FindInfo; 
	int nItem,nItem1; 
	 
	 
	POSITION pos = m_Info.GetFirstSelectedItemPosition(); 
	if (pos == NULL) 
		return; 
	else 
	{ 
		while (pos) 
		{ 
			 nItem = m_Info.GetNextSelectedItem(pos); 
		  TRACE1("Item %d was selected!\n", nItem); 
      // you could do your own processing on nItem here 
		} 
	} 
/////////////////////////////////////////////////////////////////////// 
 
	str=m_Info.GetItemText(nItem,2); //取航班号 
 
	FindInfo.flags=LVFI_STRING; 
	FindInfo.psz=str; 
	nItem1=m_AirNo.FindItem(&FindInfo); 
	 
	int n; 
	if(m_Info.GetItemText(nItem,7)=="经济舱"){ 
		str=m_AirNo.GetItemText(nItem1,7); //取航班信息表中地剩余票数 
		n=atol(str.GetBuffer(0)); 
		n++; 
		str.Format("%d",n); 
		m_AirNo.SetItemText(nItem1,7,str.GetBuffer(0)); 
	} 
	if(m_Info.GetItemText(nItem,7)=="商务舱"){ 
		str=m_AirNo.GetItemText(nItem1,8); //取航班信息表中地剩余票数 
		n=atol(str.GetBuffer(0)); 
		n++; 
		str.Format("%d",n); 
		m_AirNo.SetItemText(nItem1,8,str.GetBuffer(0)); 
	} 
	if(m_Info.GetItemText(nItem,7)=="头等舱"){ 
		str=m_AirNo.GetItemText(nItem1,9); //取航班信息表中地剩余票数 
		n=atol(str.GetBuffer(0)); 
		n++; 
		str.Format("%d",n); 
		m_AirNo.SetItemText(nItem1,9,str.GetBuffer(0)); 
	} 
	UpdateTicketNum(nItem1,m_AirNo.GetItemText(nItem1,0)); 
 
////////////////////////////////////////////////////////////////////// 
	str=m_Info.GetItemText(nItem,9);	//订票数 
	n=atol(str.GetBuffer(0)); 
	if(m_Total >=n ) 
		m_Total-=n; 
	else 
		m_Total=0; 
	str.Format("%d",m_Total); 
	m_stNum.SetWindowText(str); 
 
	str=m_Info.GetItemText(nItem,8);	//金额 
	if(m_TotalPrice >= atof(str.GetBuffer(0))*n) 
		m_TotalPrice-=atof(str.GetBuffer(0))*n; 
	else 
		m_TotalPrice=0; 
	str.Format("%f",m_TotalPrice); 
	m_stTotalPrice.SetWindowText(str); 
//	struInfo.sNum="0"; 
	m_Info.DeleteItem(nItem);	 
	*pResult = 0; 
} 
////////////////////////////////////////////////////// 
// 
// 单击订票信息时删除该项 
// 
////////////////////////////////////////////////////// 
 
 
 
void CPage1::OnYes()  
{ 
	// TODO: Add your control notification handler code here 
	CString str; 
 
	if(Check()==-1){ 
		AfxMessageBox("无订票信息"); 
		return; 
	} 
	m_PreFrame = new CMainFrame(Drawf,this,this,FALSE);	 
	m_OK.EnableWindow(); 
//	m_PreFrame = new CMainFrame(Drawf,this,m_pPrint,FALSE);	 
} 
////////////////////////////////////////// 
// 
//	修改航班剩余票数 
// 
////////////////////////////////////////// 
void CPage1::UpdateDB() 
{ 
	CString SQL; 
	int i,nItem; 
	CString str; 
	CString Pr; 
	LVFINDINFO FindInfo; 
	CString N1; 
	CString N2; 
	CString N3; 
	CString Y; 
	CString M; 
	CString D; 
	int st,ed,nIndex; 
	for(i=0;iPrintInfo(pDC,pInfo);	 
//	((CPrint*)pVoid)->OnPrint(pDC,pInfo);	 
} 
//////////////////////////////////////////////// 
// 
//	保存订票信息到数据库 
// 
//////////////////////////////////////////////// 
void CPage1::SaveInfo() 
{ 
	CString SQL; 
	CString SQL1; 
	int i,j; 
	CString str[10]; 
	CString Pr; 
	CString wkstr; 
	CString s; 
	CTime tm; 
	CString bkstr; 
	CString bkstr1; 
 
	m_BookerName.GetWindowText(bkstr);	 
	bkstr1="'"+bkstr+"'"; 
	m_BookerPassNo.GetWindowText(bkstr); 
	bkstr1+=",'"+bkstr+"'"; 
	m_BookerPhone.GetWindowText(bkstr);	 
	bkstr1+=",'"+bkstr+"'"; 
	m_BookerGetDate.GetWindowText(bkstr); 
	bkstr1+=",'"+bkstr+"'"; 
 
	Pr.Format("%06d",m_Serial); 
	SQL1="INSERT INTO booker (Serial,BookerName,BookerPassNo,BookerPhone,BookerGetDate) VALUES('"+Pr+"',"; 
	SQL="INSERT INTO info (Serial,Name,PassNo,AirNo,Start,Target,startDate,StartTime,Class,Price,Num,ToDay,Getted) VALUES('"+Pr+"'"; 
	for(i=0;i0) 
		return 1; 
	else 
		return-1; 
} 
 
void CPage1::PrintInfo(CDC *pDC, CPrintInfo *pInfo) 
{ 
	CRect Rect(10,10,80,20); 
	int x,y,x1; 
	CFont font1; 
	CString SQL; 
	int i,j; 
	CString str[10]; 
	CString Pr; 
	CTime Time=CTime::GetCurrentTime();						 
 
	font1.CreateFont(80,80,0,0,400,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS, 
		CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,"黑体"); 
	CFont* pOldFont=(CFont*)pDC->SelectObject(&font1); 
	pDC->TextOut(1000,300,"预定单"); 
	pDC->SelectObject(pOldFont); 
	 
	 
	x=400; 
	y=500; 
	x1=x+1000; 
	pDC->TextOut(x,y,"订单号:"); 
	pDC->TextOut(x1,y,"日期:"); 
	Pr.Format("%06d",m_Serial); 
	pDC->TextOut(x+400,y,Pr); 
	pDC->TextOut(x1+400,y,struInfo.sDate); 
	y+=100; 
	pDC->TextOut(x,y,"订票人姓名:"); 
	pDC->TextOut(x1,y,"取票日期:"); 
	m_BookerName.GetWindowText(Pr); 
	pDC->TextOut(x+400,y,Pr); 
	m_BookerGetDate.GetWindowText(Pr); 
	pDC->TextOut(x1+400,y,Pr); 
	 
	int start=(pInfo->m_nCurPage-1)*4; 
	int end=pInfo->m_nCurPage*4; 
	int c=m_Info.GetItemCount(); 
	if(end>=c){ 
		end=c; 
		m_IsPrinted=TRUE; 
	}else 
		m_IsPrinted=FALSE; 
 
	for(i=start;i3799){ 
			y=600; 
		} 
	} 
} 
 
void CPage1::GetBookInfo() 
{ 
	CString SQL; 
	int i; 
	CString str; 
	CString Pr; 
 
	i=0; 
	str.Format("%d",m_Serial); 
	SQL="select * from info where serial='"+str+"'";; 
	if(m_dbBookInfo->IsOpen()) 
		m_dbBookInfo->Close(); 
	m_dbBookInfo->Open(AFX_DB_USE_DEFAULT_TYPE,SQL); 
	if(m_dbBookInfo->GetRecordCount()==0){ 
		str.Format("没有找到订票信息。订单号=%06d",m_Serial); 
		AfxMessageBox(str); 
		return; 
	} 
	m_dbBookInfo->MoveFirst(); 
	do{ 
		struInfo.sAirNo=m_dbBookInfo->m_AirNo; 
		struInfo.sName=m_dbBookInfo->m_Name; 
		struInfo.sClass=m_dbBookInfo->m_Class; 
		struInfo.sDate=m_dbBookInfo->m_StartDate; 
		struInfo.sTime=m_dbBookInfo->m_StartTime; 
		struInfo.sStart=m_dbBookInfo->m_Start; 
		struInfo.sTarget=m_dbBookInfo->m_Target; 
		struInfo.sPassNo=m_dbBookInfo->m_PassNo; 
		struInfo.sPrice=m_dbBookInfo->m_Price; 
		struInfo.sNum=m_dbBookInfo->m_Num; 
//		PrintData(x,y,pDC); 
		m_dbBookInfo->MoveNext(); 
	}while(!m_dbBookInfo->IsEOF()); 
	m_dbBookInfo->Close(); 
 
} 
 
void CPage1::PrintData(int x, int y,CDC* pDC) 
{ 
	int x1; 
	CString str; 
 
//	str=Time.Format("%Y/%m/%d");	 
//	x=400; 
//	y=500; 
	y+=100; 
	pDC->TextOut(x,y,"姓名:"); 
	pDC->TextOut(x+400,y,struInfo.sName); 
	y+=100; 
	pDC->TextOut(x,y,"身份证号:"); 
	pDC->TextOut(x+400,y,struInfo.sPassNo); 
	y+=100; 
	pDC->TextOut(x,y,"订票金额:"); 
	pDC->TextOut(x+400,y,struInfo.sPrice); 
	y+=100; 
	pDC->TextOut(x,y,"订票信息"); 
	x1=x+1000; 
	pDC->TextOut(x,y,"航班号  :");	 
	pDC->TextOut(x1,y,"舱位等级:"); 
	pDC->TextOut(x+400,y,struInfo.sAirNo);	 
	pDC->TextOut(x1+400,y,struInfo.sClass); 
	y+=100; 
	pDC->TextOut(x,y,"起飞日期:");	 
	pDC->TextOut(x1,y,"起飞时间:");	 
	pDC->TextOut(x+400,y,struInfo.sDate);	 
	pDC->TextOut(x1+400,y,struInfo.sTime); 
	y+=100; 
	pDC->TextOut(x,y,"始发地  :");	 
	pDC->TextOut(x1,y,"目的地  :");	 
	pDC->TextOut(x+400,y,struInfo.sStart);	 
	pDC->TextOut(x1+400,y,struInfo.sTarget); 
} 
 
 
 
void CPage1::OnOk()  
{ 
	// TODO: Add your control notification handler code here 
	CString str; 
	CString SQL; 
 
	if(Check()==-1){ 
		AfxMessageBox("无订票信息"); 
		return; 
	} 
	if(m_IsPrinted==FALSE){ 
		AfxMessageBox("请打印订票单"); 
		return; 
	} 
 
	SaveInfo(); 
	UpdateDB(); 
	Cleardsp(); 
	m_Serial++; 
	str.Format("%06d",m_Serial); 
	m_stSerial.SetWindowText(str); 
	SQL="UPDATE sys SET SerialNo='"+str+"'; "; 
	m_DB.ExecuteSQL(SQL); 
	m_OK.EnableWindow(false); 
	 
} 
 
 
 
 
 
void CPage1::ClearAll() 
{ 
	m_AirNo.DeleteAllItems(); 
	m_Info.DeleteAllItems(); 
	m_Start.ResetContent(); 
	m_Target.ResetContent(); 
	m_Name.SetWindowText("");; 
	m_PassNo.SetWindowText(""); 
	m_BookerName.SetWindowText(""); 
	m_BookerPassNo.SetWindowText(""); 
	m_BookerPhone.SetWindowText(""); 
} 
 
void CPage1::InitAll() 
{ 
	Ini(); 
	//设置当前日期 
	SetDate(); 
 
 
	//为航班信息(ListCtrl)添加项目标题 
 
	m_AirNo.InsertColumn(0,"航班号",LVCFMT_LEFT,100,0);  
	m_AirNo.InsertColumn(1,"出发地",LVCFMT_LEFT,100,0); 
	m_AirNo.InsertColumn(2,"目的地",LVCFMT_LEFT,100,0); 
	m_AirNo.InsertColumn(3,"起飞时间",LVCFMT_LEFT,100,0); 
	m_AirNo.InsertColumn(4,"经济舱价格",LVCFMT_LEFT,100,0); 
	m_AirNo.InsertColumn(5,"商务舱价格",LVCFMT_LEFT,100,0); 
	m_AirNo.InsertColumn(6,"头等舱价格",LVCFMT_LEFT,100,0); 
	m_AirNo.InsertColumn(7,"经济剩余票数",LVCFMT_LEFT,100,0); 
	m_AirNo.InsertColumn(8,"商务剩余票数",LVCFMT_LEFT,100,0); 
	m_AirNo.InsertColumn(9,"头等剩余票数",LVCFMT_LEFT,100,0); 
	 
//	GetCity();	//从数据库取出城市名 
	InitInfo(); //初始 
	return ;  // return TRUE unless you set the focus to a control 
	              // EXCEPTION: OCX Property Pages should return FALSE 
 
} 
////////////////////////////////////////// 
// 
//	从数据库中取出剩余票数 
// 
//////////////////////////////////////////// 
void CPage1::GetNumOfTicket(CString AirNo) 
{ 
	CString SQL; 
	CString str; 
	int Days; 
 
	SQL="SELECT * FROM num WHERE AirNo='"+AirNo+"'"; 
	if(m_dbTicketNum->IsOpen()) 
		m_dbTicketNum->Close(); 
	m_dbTicketNum->Open(AFX_DB_USE_DEFAULT_TYPE,SQL); 
	CTime BookDay; 
	m_Date.GetTime(BookDay); 
	Days=CalcDays(BookDay)-1; 
	switch(Days){ 
		case 0: 
			switch(m_PriceFlag){ 
				case 1: 
					m_TicketNums->Num1=m_dbTicketNum->m_N01; 
					break; 
				case 2: 
					m_TicketNums->Num2=m_dbTicketNum->m_N02; 
					break; 
				case 3: 
					m_TicketNums->Num3=m_dbTicketNum->m_N03; 
					break; 
				default: 
					break; 
			} 
			 
			break; 
		case 1: 
			switch(m_PriceFlag){ 
				case 1: 
					m_TicketNums->Num1=m_dbTicketNum->m_N11; 
					break; 
				case 2: 
					m_TicketNums->Num2=m_dbTicketNum->m_N12; 
					break; 
				case 3: 
					m_TicketNums->Num3=m_dbTicketNum->m_N13; 
					break; 
				default: 
					break; 
			} 
			break; 
		case 2: 
			switch(m_PriceFlag){ 
					m_TicketNums->Num1=m_dbTicketNum->m_N21; 
				case 1: 
					break; 
				case 2: 
					m_TicketNums->Num2=m_dbTicketNum->m_N22; 
					break; 
				case 3: 
					m_TicketNums->Num3=m_dbTicketNum->m_N23; 
					break; 
				default: 
					break; 
			} 
			break; 
		case 3: 
			switch(m_PriceFlag){ 
				case 1: 
					m_TicketNums->Num1=m_dbTicketNum->m_N31; 
					break; 
				case 2: 
					m_TicketNums->Num2=m_dbTicketNum->m_N32; 
					break; 
				case 3: 
					m_TicketNums->Num3=m_dbTicketNum->m_N33; 
					break; 
				default: 
					break; 
			} 
			break; 
		case 4: 
			switch(m_PriceFlag){ 
				case 1: 
					m_TicketNums->Num1=m_dbTicketNum->m_N41; 
					break; 
				case 2: 
					m_TicketNums->Num2=m_dbTicketNum->m_N42; 
					break; 
				case 3: 
					m_TicketNums->Num3=m_dbTicketNum->m_N43; 
					break; 
				default: 
					break; 
			} 
			break; 
		case 5: 
			switch(m_PriceFlag){ 
				case 1: 
					m_TicketNums->Num1=m_dbTicketNum->m_N51; 
					break; 
				case 2: 
					m_TicketNums->Num2=m_dbTicketNum->m_N52; 
					break; 
				case 3: 
					m_TicketNums->Num3=m_dbTicketNum->m_N53; 
					break; 
				default: 
					break; 
			} 
			break; 
		case 6: 
			switch(m_PriceFlag){ 
				case 1: 
					m_TicketNums->Num1=m_dbTicketNum->m_N61; 
					break; 
				case 2: 
					m_TicketNums->Num2=m_dbTicketNum->m_N62; 
					break; 
				case 3: 
					m_TicketNums->Num3=m_dbTicketNum->m_N63; 
					break; 
				default: 
					break; 
			} 
			break; 
		default: 
			break; 
	} 
	m_dbTicketNum->Close(); 
return ;	 
} 
 
int CPage1::CalcDays(CTime BookDay) 
{ 
	int Month[12]; 
	CTime Today; 
//	CTime BookDay; 
	int Days; 
 
	Today=CTime::GetCurrentTime(); 
//	m_Date.GetTime(BookDay); 
 
	 
	int BookDays=BookDay.GetDay(); 
	int BookMonth=BookDay.GetMonth(); 
	int TodayDays=Today.GetDay(); 
	int TodayMonth=Today.GetMonth(); 
	int StartYear=Today.GetYear(); 
	if(StartYear%4==0) 
		Month[2]=29; 
	else 
		Month[2]=28; 
	Month[4]=Month[6]=Month[9]=Month[11]=30; 
	Month[1]=Month[3]=Month[5]=Month[7]=Month[8]=Month[10]=Month[12]=31; 
	 
	if(BookDays==TodayDays){ 
		AfxMessageBox("仅可预订明日以后7日内的票."); 
		return -1; 
	} 
 
	if(BookDays>TodayDays) 
		Days=BookDays-TodayDays; 
	else 
		Days=BookDays+Month[TodayMonth]-TodayDays; 
 
	if(Days>7){ 
		AfxMessageBox("预订天数不可以超过7日."); 
		return -1; 
	} 
	return Days; 
} 
///////////////////////////////////////////////// 
// 
//	设置时间控件的日期范围为7天 
// 
/////////////////////////////////////////////////// 
void CPage1::SetDate() 
{ 
	CTime Time; 
 
	Time=CTime::GetCurrentTime(); 
	int Year=Time.GetYear(); 
	int Month=Time.GetMonth(); 
	int Day=Time.GetDay(); 
	int Day1=Day; 
	int Hour=Time.GetHour(); 
	int Minute=Time.GetMinute(); 
 
	switch(Month){ 
		case 1: 
		case 3: 
		case 5: 
		case 7: 
		case 8: 
		case 10: 
			if(Day==31){ 
				Day=1; 
				Month++; 
			}else 
				Day++; 
			break; 
		case 4: 
		case 6: 
		case 9: 
		case 11: 
			if(Day==30){ 
				Day=1; 
				Month++; 
			}else 
				Day++; 
			break;		 
		case 2: 
			if(Year%4==0){ 
				if(Day==29){ 
					Month++; 
					Day=1; 
				}else 
					Day++; 
			}else{ 
				if(Day==28){ 
					Month++; 
					Day=1; 
				}else 
					Day++; 
			} 
			break; 
		case 12: 
			if(Day==31){ 
				Year++; 
				Month=1; 
				Day=1; 
			}else 
				Day++; 
			break; 
		default: 
			break; 
	} 
	CTime MinTime(Year,Month,Day,0,0,0); 
 
	switch(Month){ 
		case 1: 
		case 3: 
		case 5: 
		case 7: 
		case 8: 
		case 10: 
			if(Day1>24){ 
				Day1=Day1+7-31; 
				Month++; 
			}else 
				Day1+=7; 
			break; 
		case 4: 
		case 6: 
		case 9: 
		case 11: 
			if(Day1>23){ 
				Day1=Day1+7-30; 
				Month++; 
			}else 
				Day1+=7; 
			break;		 
		case 2: 
			if(Year%4==0){ 
				if(Day>22){ 
					Month++; 
					Day1=Day1+7-29; 
				}else 
					Day1+=7; 
			}else{ 
				if(Day>21){ 
					Month++; 
					Day1=Day1+7-28; 
				}else 
					Day1+=7; 
			} 
			break; 
		case 12: 
			if(Day>24){ 
				Year++; 
				Month=1; 
				Day1=Day1+7-31; 
			}else 
				Day1+=7; 
			break; 
		default: 
			break; 
	} 
	 
	CTime MaxTime(Year,Month,Day1,0,0,0); 
	 
	m_Date.GetTime((CTime&)Time);		 
	m_Date.SetRange(&MinTime,&MaxTime); 
} 
 
void CPage1::GetAllTicketNum(CString AirNo) 
{ 
	CString SQL; 
	CString str; 
	int Days; 
 
	SQL="SELECT * FROM num WHERE AirNo='"+AirNo+"'"; 
	if(m_dbTicketNum->IsOpen()) 
		m_dbTicketNum->Close(); 
	m_dbTicketNum->Open(AFX_DB_USE_DEFAULT_TYPE,SQL); 
	CTime BookDay; 
	m_Date.GetTime(BookDay); 
	Days=CalcDays(BookDay)-1; 
	switch(Days){ 
		case 0: 
					m_TicketNums->Num1=m_dbTicketNum->m_N01; 
					m_TicketNums->Num2=m_dbTicketNum->m_N02; 
					m_TicketNums->Num3=m_dbTicketNum->m_N03; 
			 
			break; 
		case 1: 
					m_TicketNums->Num1=m_dbTicketNum->m_N11; 
					m_TicketNums->Num2=m_dbTicketNum->m_N12; 
					m_TicketNums->Num3=m_dbTicketNum->m_N13; 
			break; 
		case 2: 
					m_TicketNums->Num1=m_dbTicketNum->m_N21; 
					m_TicketNums->Num2=m_dbTicketNum->m_N22; 
					m_TicketNums->Num3=m_dbTicketNum->m_N23; 
			break; 
		case 3: 
					m_TicketNums->Num1=m_dbTicketNum->m_N31; 
					m_TicketNums->Num2=m_dbTicketNum->m_N32; 
					m_TicketNums->Num3=m_dbTicketNum->m_N33; 
			break; 
		case 4: 
					m_TicketNums->Num1=m_dbTicketNum->m_N41; 
					m_TicketNums->Num2=m_dbTicketNum->m_N42; 
					m_TicketNums->Num3=m_dbTicketNum->m_N43; 
			break; 
		case 5: 
					m_TicketNums->Num1=m_dbTicketNum->m_N51; 
					m_TicketNums->Num2=m_dbTicketNum->m_N52; 
					m_TicketNums->Num3=m_dbTicketNum->m_N53; 
			break; 
		case 6: 
					m_TicketNums->Num1=m_dbTicketNum->m_N61; 
					m_TicketNums->Num2=m_dbTicketNum->m_N62; 
					m_TicketNums->Num3=m_dbTicketNum->m_N63; 
			break; 
		default: 
			break; 
	} 
	m_dbTicketNum->Close(); 
return ;	 
 
} 
 
void CPage1::UpdateTicketNum(int nItem,CString AirNo) 
{ 
	CString SQL; 
//	int nItem; 
	CString str; 
	CString Pr; 
	CString N1; 
	CString N2; 
	CString N3; 
	int Days; 
		 
	 
	CTime BookDay; 
	m_Date.GetTime(BookDay); 
		Days=CalcDays(BookDay); 
		SQL="UPDATE num SET "; 
		N1=m_AirNo.GetItemText(nItem,7); //取航班信息表中地剩余票数 
		N2=m_AirNo.GetItemText(nItem,8); //取航班信息表中地剩余票数 
		N3=m_AirNo.GetItemText(nItem,9); //取航班信息表中地剩余票数 
		switch(Days-1){ 
			case 0: 
					SQL+="N01='" + N1 + "',N02='" + N2 +"',N03='" +N3 +"'"; 
				break; 
			case 1: 
					SQL+="N11='" + N1 + "',N12='" + N2 +"',N13='" +N3+"'"; 
				break; 
			case 2: 
					SQL+="N21='" + N1 + "',N22='" + N2 +"',N23='" +N3+"'"; 
				break; 
			case 3: 
					SQL+="N31='" + N1 + "',N32='" + N2 +"',N33='" +N3+"'"; 
				break; 
			case 4: 
					SQL+="N41='" + N1 + "',N42='" + N2 +"',N43='" +N3+"'"; 
				break; 
			case 5: 
					SQL+="N51='" + N1 + "',N52='" + N2 +"',N53='" +N3+"'"; 
				break; 
			case 6: 
					SQL+="N61='" + N1 + "',N62='" + N2 +"',N63='" +N3+"'"; 
				break; 
		default: 
			break; 
	} 
 
		SQL+=" where AirNo='"+ AirNo +"'; "; 
		m_DB.ExecuteSQL(SQL); 
	 
 
} 
 
BOOL CPage1::PreTranslateMessage(MSG* pMsg)  
{ 
	// TODO: Add your specialized code here and/or call the base class 
	if (WM_KEYFIRST <= pMsg->message && pMsg->message <= WM_KEYLAST) { 
		HACCEL hAccel = m_hAccel; 
		if (hAccel && ::TranslateAccelerator(m_hWnd, hAccel, pMsg)) 
			return TRUE; 
	} 
	 
	return CPropertyPage::PreTranslateMessage(pMsg); 
}