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