www.pudn.com > ssproj03.zip > Page4.cpp
// Page4.cpp : implementation file
//
#include "stdafx.h"
#include "ssproj03.h"
#include "Page4.h"
#include "city.h"
#include "syspara.h"
#include "resource.h"
#include "myedit.h"
#include "airinfo.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPage4 property page
IMPLEMENT_DYNCREATE(CPage4, CPropertyPage)
CPage4::CPage4() : CPropertyPage(CPage4::IDD)
{
//{{AFX_DATA_INIT(CPage4)
//}}AFX_DATA_INIT
m_dbAirInfo=new CAirInfo(&m_DB);
m_dbCity=new CCity(&m_DB);
m_dbSyspara=new CSyspara(&m_DB);
}
CPage4::~CPage4()
{
delete m_dbCity;
delete m_dbSyspara;
delete m_dbAirInfo;
}
void CPage4::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPage4)
DDX_Control(pDX, IDC_DELETE, m_BtnDelAirInfo);
DDX_Control(pDX, IDC_AIRINFOSAVE, m_BtnAirSave);
DDX_Control(pDX, IDC_START, m_Start);
DDX_Control(pDX, IDC_NEWCITY, m_NewCity);
DDX_Control(pDX, IDC_CITY, m_City);
DDX_Control(pDX, IDC_EDITAIRNO, m_AirNo);
DDX_Control(pDX, IDC_COMBOTARGET, m_AirTarget);
DDX_Control(pDX, IDC_COMBOSTART, m_AirStart);
DDX_Control(pDX, IDC_TIMEPICKER, m_StartTime);
DDX_Control(pDX, IDC_EDITDISCOUNT1, m_Discount1);
DDX_Control(pDX, IDC_EDITDISCOUNT2, m_Discount2);
DDX_Control(pDX, IDC_EDITDISCOUNT3, m_Discount3);
DDX_Control(pDX, IDC_EDITLEFTNUM1, m_LeftNum1);
DDX_Control(pDX, IDC_EDITLEFTNUM2, m_LeftNum2);
DDX_Control(pDX, IDC_EDITLEFTNUM3, m_LeftNum3);
DDX_Control(pDX, IDC_EDITPRICE1, m_Price1);
DDX_Control(pDX, IDC_EDITPRICE2, m_Price2);
DDX_Control(pDX, IDC_EDITPRICE3, m_Price3);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPage4, CPropertyPage)
//{{AFX_MSG_MAP(CPage4)
ON_CBN_EDITCHANGE(IDC_CITY, OnEditchangeCity)
ON_CBN_EDITUPDATE(IDC_CITY, OnEditupdateCity)
ON_BN_CLICKED(IDC_ADDCITY, OnAddcity)
ON_LBN_DBLCLK(IDC_CITY, OnDblclkCity)
ON_BN_CLICKED(IDC_CREATEDB, OnCreatedb)
ON_BN_CLICKED(IDC_DELETECITY, OnDeletecity)
ON_CBN_SELCHANGE(IDC_START, OnSelchangeStart)
ON_COMMAND(ID_VRETURN, OnMyEnter)
ON_COMMAND(ID_VCANCEL, OnMyCancel)
ON_EN_KILLFOCUS(IDC_SERIAL, OnKillfocusSerial)
ON_BN_CLICKED(IDC_AIRINFOSAVE, OnAirinfosave)
ON_EN_KILLFOCUS(IDC_EDITAIRNO, OnKillfocusEditairno)
ON_BN_CLICKED(IDC_DELETE, OnDelete)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPage4 message handlers
BOOL CPage4::OnInitDialog()
{
CPropertyPage::OnInitDialog();
// TODO: Add extra initialization here
m_hAccel = ::LoadAccelerators(AfxGetResourceHandle(),
MAKEINTRESOURCE(IDR_ACCELERATOR1)); // use same resource name as dialog
ASSERT(m_hAccel);
MyEdit.SubclassDlgItem(IDC_SERIAL,this);
m_BtnAirSave.EnableWindow();
m_BtnDelAirInfo.EnableWindow(false);
Ini();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CPage4::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());
}
void CPage4::Ini()
{
CString str;
//从注册表取打开数据库参数串
str=AfxGetApp()->GetProfileString("DataBase","DSN","111");
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_dbBookInfo=new CBookInfo(&m_DB);
str="select * from sys";
if(m_dbSyspara->IsOpen())
m_dbSyspara->Close();
m_dbSyspara->Open(AFX_DB_USE_DEFAULT_TYPE,str);
m_dbSyspara->MoveFirst();
str.Format("%d",m_dbSyspara->m_SerialNo);
MyEdit.SetWindowText(str);
GetCity(); //从数据库取出城市名
int index=m_Start.FindString(0,m_dbSyspara->m_Local);
m_Start.SetCurSel(index);
m_AirStart.SetCurSel(index);
m_AirTarget.SetCurSel(index);
}
void CPage4::AddCity(CString str)
{
m_City.AddString(str);
m_Start.AddString(str);
m_AirStart.AddString(str);
m_AirTarget.AddString(str);
}
void CPage4::OnEditchangeCity()
{
// TODO: Add your control notification handler code here
}
void CPage4::OnEditupdateCity()
{
// TODO: Add your control notification handler code here
CString str;
int index;
m_City.GetWindowText(str);
index=m_City.FindString(0,str);
if(index==-1){
if(str==""){
// AfxMessageBox("是否删除
}
m_City.AddString(str);
str="INSERT INTO City (CityName) VALUES('"+str+"');";
m_DB.ExecuteSQL(str);
}else
m_City.SetCurSel(index);
}
void CPage4::OnAddcity()
{
// TODO: Add your control notification handler code here
CString str;
int index;
m_NewCity.GetWindowText(str);
if(str.IsEmpty()){
str="机场名不能为空.";
AfxMessageBox(str);
return;
}
index=m_City.FindString(0,str);
if(index!=-1){
str="<"+str+">已存在.";
AfxMessageBox(str);
return;
}
m_City.AddString(str);
m_AirStart.AddString(str);
m_AirTarget.AddString(str);
str="INSERT INTO City (CityName) VALUES('"+str+"');";
m_DB.ExecuteSQL(str);
m_NewCity.SetWindowText("");
}
void CPage4::OnDblclkCity()
{
// TODO: Add your control notification handler code here
CString str;
int index;
index=m_City.GetCurSel();
if(index<0){
str="请选择要取消的机场.";
AfxMessageBox(str);
return;
}
m_City.GetText(index,str);
index=m_City.DeleteString(index);
str="DELETE FROM city where cityname='"+str+"';";
m_DB.ExecuteSQL(str);
}
void CPage4::OnCreatedb()
{
// TODO: Add your control notification handler code here
CString DSN;
CString DRV;
// DSN="AirLine1";
// DRV="Microsoft Access Driver (*.mdb)";
// bool b=SQLCreateDataSource(this->m_hWnd, DSN);
//SQLManageDataSources(this->m_hWnd);
// DSN="AirLine2";
// if( SQLWriteDSNToIni(DSN,DRV)){
// CreateTables();
// };
if (SQLConfigDataSource(NULL, ODBC_ADD_DSN, "Microsoft Access Driver (*.mdb)", "DSN=AirLineBook\0DBQ=D:\\aaa.mdb\0Description=机票预定\0FIL=MicrosoftAccess\0DEFAULTDIR=D:\\Database1\0\0"))
{
// m_DB.Open("airlinebook");
}
}
void CPage4::CreateTables()
{
CString str;
str="";
}
void CPage4::OnDeletecity()
{
// TODO: Add your control notification handler code here
OnDblclkCity();
}
void CPage4::OnSelchangeStart()
{
// TODO: Add your control notification handler code here
CString SQL;
CString str;
m_Start.GetWindowText(str);
SQL="UPDATE sys SET Local='"+str+"'";
m_DB.ExecuteSQL(SQL);
}
void CPage4::OnCancel()
{
// TODO: Add your specialized code here and/or call the base class
CPropertyPage::OnCancel();
}
void CPage4::OnMyEnter()
{
CWnd* w=this->GetFocus();
this->NextDlgCtrl();
}
void CPage4::OnMyCancel()
{
CWnd* w=this->GetFocus();
}
BOOL CPage4::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);
}
void CPage4::OnKillfocusSerial()
{
// TODO: Add your control notification handler code here
CString SQL;
CString str;
MyEdit.GetWindowText(str);
if(str.IsEmpty()){
str="机场名不能为空.";
AfxMessageBox(str);
return;
}
SQL="UPDATE sys SET SerialNo='"+str+"'";
m_DB.ExecuteSQL(SQL);
}
void CPage4::Clear()
{
m_City.ResetContent();
m_Start.ResetContent();
m_AirStart.ResetContent();
m_AirTarget.ResetContent();
}
void CPage4::OnAirinfosave()
{
// TODO: Add your control notification handler code here
CString SQL;
CString str;
if(m_IsUpdate==true){
UpdateAirInfo();
}else{
InsertAirInfo();
m_AirNo.SetWindowText("");
}
}
void CPage4::OnKillfocusEditairno()
{
// TODO: Add your control notification handler code here
CString SQL;
CString str;
SQL="SELECT * FROM airinfo WHERE airno='";
m_AirNo.GetWindowText(str);
SQL+=str+"'";
if(m_dbAirInfo->IsOpen())
m_dbAirInfo->Close();
m_dbAirInfo->Open(AFX_DB_USE_DEFAULT_TYPE,SQL);
if(m_dbAirInfo->GetRecordCount()>0){
m_Price1.SetWindowText(m_dbAirInfo->m_Price1);
m_Price2.SetWindowText(m_dbAirInfo->m_Price2);
m_Price3.SetWindowText(m_dbAirInfo->m_Price3);
m_Discount1.SetWindowText(m_dbAirInfo->m_Discount1);
m_Discount2.SetWindowText(m_dbAirInfo->m_Discount2);
m_Discount3.SetWindowText(m_dbAirInfo->m_Discount3);
str.Format("%d",m_dbAirInfo->m_LeftNum1);
m_LeftNum1.SetWindowText(str);
str.Format("%d",m_dbAirInfo->m_LeftNum2);
m_LeftNum2.SetWindowText(str);
str.Format("%d",m_dbAirInfo->m_LeftNum3);
m_LeftNum3.SetWindowText(str);
m_AirStart.SelectString(0,m_dbAirInfo->m_Start);
m_AirTarget.SelectString(0,m_dbAirInfo->m_Target);
m_IsUpdate=true;
m_BtnAirSave.SetWindowText("更新");
m_BtnDelAirInfo.EnableWindow();
}else{
m_BtnAirSave.SetWindowText("添加");
m_BtnDelAirInfo.EnableWindow(false);
m_IsUpdate=false;
}
}
void CPage4::InsertAirInfo()
{
CString SQL;
CString str;
SQL="INSERT INTO AirInfo (AirNo,Start,Target,StartTime,Price1,Price2,Price3,";
SQL+="Discount1,Discount2,Discount3,LeftNum1,LeftNum2,LeftNum3)";
SQL+=" VALUES('";
m_AirNo.GetWindowText(str); //航班号
SQL+=str+"','";
m_AirStart.GetWindowText(str); //出发港
SQL+=str+"','";
m_AirTarget.GetWindowText(str); //目的港
SQL+=str+"','";
m_StartTime.GetWindowText(str); //起飞时间
SQL+=str+"','";
m_Price1.GetWindowText(str); //经济舱价格
SQL+=str+"','";
m_Price2.GetWindowText(str); //商务舱价格
SQL+=str+"','";
m_Price3.GetWindowText(str); //头等舱价格
SQL+=str+"','";
m_Discount1.GetWindowText(str); //经济舱折扣
SQL+=str+"','";
m_Discount2.GetWindowText(str); //商务舱折扣
SQL+=str+"','";
m_Discount3.GetWindowText(str); //头等舱折扣
SQL+=str+"','";
m_LeftNum1.GetWindowText(str); //经济舱位数
SQL+=str+"','";
m_LeftNum2.GetWindowText(str); //商务舱位数
SQL+=str+"','";
m_LeftNum3.GetWindowText(str); //头等舱位数
SQL+=str+"')";
m_DB.ExecuteSQL(SQL);
SQL.GetBufferSetLength(512);
SQL="INSERT INTO num (AirNo,N01,N02,N03,";
SQL+="N11,N12,N13,N21,N22,N23,";
SQL+="N31,N32,N33,N41,N42,N43,";
SQL+="N51,N52,N53,N61,N62,N63)";
SQL+=" VALUES('";
m_AirNo.GetWindowText(str);
SQL+=str+"'";
for(int i=0;i<7;i++){
m_LeftNum1.GetWindowText(str);
SQL+=",'"+str+"'";
m_LeftNum2.GetWindowText(str);
SQL+=",'"+str+"'";
m_LeftNum3.GetWindowText(str);
SQL+=",'"+str+"'";
}
SQL+=")";
m_DB.ExecuteSQL(SQL);
}
void CPage4::UpdateAirInfo()
{
CString str;
CString SQL;
CString n1;
CString n2;
CString n3;
SQL="UPDATE AirInfo SET AirNo='";
m_AirNo.GetWindowText(str); //航班号
SQL+=str+"',Start='";
m_AirStart.GetWindowText(str); //出发港
SQL+=str+"',Target='";
m_AirTarget.GetWindowText(str); //目的港
SQL+=str+"',StartTime='";
m_StartTime.GetWindowText(str); //起飞时间
SQL+=str+"',Price1='";
m_Price1.GetWindowText(str); //经济舱价格
SQL+=str+"',Price2='";
m_Price2.GetWindowText(str); //商务舱价格
SQL+=str+"',Price3='";
m_Price3.GetWindowText(str); //头等舱价格
SQL+=str+"',Discount1='";
m_Discount1.GetWindowText(str); //经济舱折扣
SQL+=str+"',Discount2='";
m_Discount2.GetWindowText(str); //商务舱折扣
SQL+=str+"',Discount3='";
m_Discount3.GetWindowText(str); //头等舱折扣
SQL+=str+"',LeftNum1='";
m_LeftNum1.GetWindowText(str); //经济舱位数
SQL+=str+"',LeftNum2='";
m_LeftNum2.GetWindowText(str); //商务舱位数
SQL+=str+"',LeftNum3='";
m_LeftNum3.GetWindowText(str); //头等舱位数
SQL+=str+"' WHERE AirNo='";
m_AirNo.GetWindowText(str); //航班号
SQL+=str+"'";
m_DB.ExecuteSQL(SQL);
SQL.GetBufferSetLength(512);
SQL="UPDATE num SET AirNo='";
m_AirNo.GetWindowText(str);
SQL+=str+"'";
m_LeftNum1.GetWindowText(n1);
m_LeftNum2.GetWindowText(n2);
m_LeftNum3.GetWindowText(n3);
for(int i=0;i<7;i++){
str.Format("N%d",i);
SQL+=","+str+"1='"+n1+"',"+str+"2='"+n2+"',"+str+"3='"+n3+"'";
}
m_AirNo.GetWindowText(str);
SQL+="WHERE AirNo='"+str+"'";
m_DB.ExecuteSQL(SQL);
}
void CPage4::OnDelete()
{
// TODO: Add your control notification handler code here
CString SQL;
CString str;
m_AirNo.GetWindowText(str);
SQL="DELETE FROM AirInfo WHERE AirNo='"+str+"'";
m_DB.ExecuteSQL(SQL);
SQL="DELETE FROM Num WHERE AirNo='"+str+"'";
m_DB.ExecuteSQL(SQL);
OnKillfocusEditairno();
}