📄 airlinedlg.cpp
字号:
// airlineDlg.cpp : implementation file
//
#include "stdafx.h"
#include "airline.h"
#include "airlineDlg.h"
#include "newcity.h"
#include "newflight.h"
#include "newper.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAirlineDlg dialog
CAirlineDlg::CAirlineDlg(CWnd* pParent /*=NULL*/)
: CDialog(CAirlineDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CAirlineDlg)
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CAirlineDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAirlineDlg)
DDX_Control(pDX, IDC_LISTPOS, m_pos);
DDX_Control(pDX, IDC_LISTWAIT, m_wait);
DDX_Control(pDX, IDC_LISTPAY, m_pay);
DDX_Control(pDX, IDC_LISTCITY, m_city);
DDX_Control(pDX, IDC_LISTFLIGHT, m_flight);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAirlineDlg, CDialog)
//{{AFX_MSG_MAP(CAirlineDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_ABOUT, OnAbout)
ON_LBN_SELCHANGE(IDC_LISTCITY, OnSelchangeListcity)
ON_BN_CLICKED(IDC_ADDCITY, OnAddcity)
ON_BN_CLICKED(IDC_DELCITY, OnDelcity)
ON_BN_CLICKED(IDC_ADDFLIGHT, OnAddflight)
ON_BN_CLICKED(IDC_DELFLIGHT, OnDelflight)
ON_NOTIFY(NM_DBLCLK, IDC_LISTFLIGHT, OnDblclkListflight)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LISTFLIGHT, OnItemchangedListflight)
ON_NOTIFY(NM_DBLCLK, IDC_LISTPAY, OnDblclkListpay)
ON_NOTIFY(NM_DBLCLK, IDC_LISTWAIT, OnDblclkListwait)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LISTPAY, OnItemchangedListpay)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LISTWAIT, OnItemchangedListwait)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAirlineDlg message handlers
BOOL CAirlineDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
//加入初始数据
city *c;
c=a.addcity("北京");
c->addflight("北京","BJ0001","PL0001",1,30,40,50);
c->addflight("北京","BJ0002","PL0002",5,20,45,55);
c=a.addcity("广州");
c->addflight("广州","GZ0001","PL0011",3,35,40,45);
c->addflight("广州","GZ0002","PL0012",6,10,55,55);
c=a.addcity("上海");
c->addflight("上海","SH0002","PL0021",2,40,40,50);
c->addflight("上海","SH0002","PL0022",7,25,60,60);
c=a.addcity("重庆");
c->addflight("重庆","CQ0001","PL0031",2,30,60,55);
c->addflight("重庆","CQ0002","PL0032",4,40,50,50);
c=a.addcity("哈尔滨");
c->addflight("哈尔滨","HR0002","PL0041",3,45,45,50);
c->addflight("哈尔滨","HR0002","PL0042",5,15,30,70);
c=a.addcity("香港");
c->addflight("香港","HK0002","PL0051",1,50,45,40);
c->addflight("香港","HK0002","PL0052",6,40,55,30);
m_flight.InsertColumn(0,"航班号",LVCFMT_LEFT,80);
m_flight.InsertColumn(1,"飞机号",LVCFMT_LEFT,80);
m_flight.InsertColumn(2,"飞行周日",LVCFMT_CENTER,60);
m_flight.InsertColumn(3,"1等舱",LVCFMT_CENTER,55);
m_flight.InsertColumn(4,"2等舱",LVCFMT_CENTER,55);
m_flight.InsertColumn(5,"3等舱",LVCFMT_CENTER,55);
m_pay.InsertColumn(0,"姓名",LVCFMT_LEFT,80);
m_pay.InsertColumn(1,"票数",LVCFMT_CENTER,50);
m_pay.InsertColumn(2,"等级",LVCFMT_CENTER,40);
m_wait.InsertColumn(0,"姓名",LVCFMT_LEFT,80);
m_wait.InsertColumn(1,"票数",LVCFMT_CENTER,50);
m_wait.InsertColumn(2,"等级",LVCFMT_CENTER,40);
curcity=-1;
curflight=-1;
curpay=-1;
curwait=-1;
return TRUE; // return TRUE unless you set the focus to a control
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CAirlineDlg::OnPaint()
{
CDialog::OnPaint();
//刷新所有列表
showcity();
}
HCURSOR CAirlineDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CAirlineDlg::OnAbout() //按"关于"时执行此函数
{
MessageBox("航空客运售票系统\n\n作者:Dwing\n班级:xxxx\n学号:xx\n指导教师:XXX");
}
void CAirlineDlg::OnAddcity()
{
newcity dlg;
int r=dlg.DoModal();
if(r==IDOK)
{
a.addcity(dlg.m_newcity.GetBuffer(dlg.m_newcity.GetLength()));
curcity=m_city.GetCount();
curflight=-1;
curwait=-1;
curpay=-1;
showcity();
showflight();
}
}
void CAirlineDlg::OnDelcity()
{
city *c=a.get(curcity);
if(c==NULL)
{
MessageBox("请先选择城市!","提示!",MB_ICONWARNING);
return;
}
char m[100];
sprintf(m,"请确认是否删除终点:%s\n\n注意:删除此终点会丢失\n其航班及客户所有信息!",c->name);
int r=MessageBox(m,"警告!",MB_YESNO|MB_ICONWARNING|MB_DEFBUTTON2);
if(r==IDYES)
{
a.delcity(c->name);
if(curcity==m_city.GetCount()) curcity--;
curflight=-1;
curwait=-1;
curpay=-1;
showcity();
showflight();
}
}
void CAirlineDlg::OnAddflight()
{
city *c=a.get(curcity);
if(c==NULL)
{
MessageBox("请先选择城市!","提示!",MB_ICONWARNING);
return;
}
newflight dlg;
dlg.m_fixcity=c->name;
int r=dlg.DoModal();
if(r==IDOK)
{
c->addflight(c->name,dlg.m_newf.GetBuffer(11),dlg.m_newp.GetBuffer(11),
dlg.weekday,dlg.m_new1,dlg.m_new2,dlg.m_new3);
curflight=m_flight.GetItemCount()-1;
curpay=-1;
curwait=-1;
showflight();
}
}
void CAirlineDlg::OnDelflight()
{
city *c=a.get(curcity);
if(c==NULL)
{
MessageBox("请先选择终点!","提示!",MB_ICONWARNING);
return;
}
flight *f=c->get(curflight);
if(f==NULL)
{
MessageBox("请先选择航班!","提示!",MB_ICONWARNING);
return;
}
char m[100];
sprintf(m,"请确认是否删除航班:%s\n\n注意:删除此终点会丢失\n其客户所有信息!",f->name);
int r=MessageBox(m,"警告!",MB_YESNO|MB_ICONWARNING|MB_DEFBUTTON2);
if(r==IDYES)
{
a.get(curcity)->delflight(f->name);
curflight=m_flight.GetItemCount()-1;
curpay=-1;
curwait=-1;
showflight();
}
}
void CAirlineDlg::OnDblclkListflight(NMHDR* pNMHDR, LRESULT* pResult)
{
flight *f=a.get(curcity)->get(curflight);
if(f==NULL)
{
MessageBox("请先选择航班!","提示!",MB_ICONWARNING);
return;
}
newper dlg;
dlg.m_fixflight=f->name;
int r=dlg.DoModal();
if(r==IDOK)
{
if(f->num[dlg.level]<dlg.m_num)
MessageBox("此等舱座位不足!","注意!",MB_ICONWARNING);
else
{
if(f->space[dlg.level]<dlg.m_num)
{
int rr=MessageBox("余票不足,是否候补?","注意!",MB_YESNO|MB_ICONWARNING);
if(rr==IDYES)
{
f->wait.addperson(dlg.m_name.GetBuffer(11),dlg.m_num,dlg.level);
showwait();
}
return;
}
person *p=f->addperson(dlg.m_name.GetBuffer(11),dlg.m_num,dlg.level);
curwait=-1;
curpay=f->findpay(p);
showflight();
}
}
*pResult = 0;
}
void CAirlineDlg::OnDblclkListpay(NMHDR* pNMHDR, LRESULT* pResult)
{
flight *f=a.get(curcity)->get(curflight);
person *p=f->getpay(curpay);
if(p==NULL)
{
MessageBox("请先选择客户!","提示!",MB_ICONWARNING);
return;
}
int r=MessageBox("请确认是否退票","警告!",MB_YESNO|MB_ICONWARNING|MB_DEFBUTTON2);
if(r==IDYES)
{
a.get(curcity)->get(curflight)->delperson(p->name);
a.get(curcity)->get(curflight)->movewtop();
showflight();
m_flight.SetItemState(curflight,LVIS_SELECTED,LVIS_SELECTED);
}
*pResult = 0;
}
void CAirlineDlg::OnDblclkListwait(NMHDR* pNMHDR, LRESULT* pResult)
{
flight *f=a.get(curcity)->get(curflight);
person *p=f->getwait(curwait);
if(p==NULL)
{
MessageBox("请先选择客户!","提示!",MB_ICONWARNING);
return;
}
int r=MessageBox("请确认是否取消候补","警告!",MB_YESNO|MB_ICONWARNING|MB_DEFBUTTON2);
if(r==IDYES)
{
a.get(curcity)->get(curflight)->delperson(p->name);
showwait();
}
*pResult = 0;
}
void CAirlineDlg::OnItemchangedListpay(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
int i;
for(i=0;i<m_pay.GetItemCount();i++)
if(m_pay.GetItemState(i,LVIS_SELECTED)==LVIS_SELECTED)
break;
if(i==m_pay.GetItemCount())
curpay=0;
else
curpay=i;
showpaypos();
*pResult = 0;
}
void CAirlineDlg::OnItemchangedListwait(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
int i;
for(i=0;i<m_wait.GetItemCount();i++)
if(m_wait.GetItemState(i,LVIS_SELECTED)==LVIS_SELECTED)
break;
if(i==m_wait.GetItemCount())
curwait=0;
else
curwait=i;
*pResult = 0;
}
void CAirlineDlg::OnItemchangedListflight(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
int i;
for(i=0;i<m_flight.GetItemCount();i++)
if(m_flight.GetItemState(i,LVIS_SELECTED)==LVIS_SELECTED)
break;
if(i==m_flight.GetItemCount())
curflight=0;
else
curflight=i;
curpay=0;
showpay();
showwait();
*pResult = 0;
}
void CAirlineDlg::OnSelchangeListcity()
{
curcity=m_city.GetCurSel();
curflight=-1;
curpay=-1;
curwait=-1;
showflight();
m_pos.ResetContent();
}
void CAirlineDlg::showpay()
{
m_pay.DeleteAllItems();
city *c=a.get(curcity);
if(c==NULL)
return;
flight *f=c->get(curflight);
if(f==NULL)
return;
person *p=f->pay.first;
int i=0;
char s[15];
while(p)
{
m_pay.InsertItem(i,p->name);
sprintf(s,"%d",p->num);
m_pay.SetItemText(i,1,s);
sprintf(s,"%d",p->level+1);
m_pay.SetItemText(i,2,s);
p=(person *)p->next;
i++;
}
// m_pay.SetItemState(curpay,LVIS_SELECTED,LVIS_SELECTED);
showpaypos();
}
void CAirlineDlg::showwait()
{
m_wait.DeleteAllItems();
city *c=a.get(curcity);
if(c==NULL)
return;
flight *f=c->get(curflight);
if(f==NULL)
return;
person *p=f->wait.first;
int i=0;
char s[15];
while(p)
{
m_wait.InsertItem(i,p->name);
sprintf(s,"%d",p->num);
m_wait.SetItemText(i,1,s);
sprintf(s,"%d",p->level+1);
m_wait.SetItemText(i,2,s);
p=(person *)p->next;
i++;
}
// m_wait.SetItemState(curwait,LVIS_SELECTED,LVIS_SELECTED);
}
void CAirlineDlg::showcity()
{
m_city.ResetContent();
city *c=a.first;
while(c)
{
m_city.AddString(c->name);
c=c->next;
}
m_city.SetCurSel(curcity);
}
void CAirlineDlg::showflight()
{
int i;
m_flight.DeleteAllItems();
city *c=a.get(curcity);
if(c==NULL)
return;
flight *f=c->first;
i=0;
char s[15];
while(f)
{
m_flight.InsertItem(i,f->name);
m_flight.SetItemText(i,1,f->pname);
sprintf(s,"%d",f->day);
m_flight.SetItemText(i,2,s);
sprintf(s,"%d/%d",f->space[0],f->num[0]);
m_flight.SetItemText(i,3,s);
sprintf(s,"%d/%d",f->space[1],f->num[1]);
m_flight.SetItemText(i,4,s);
sprintf(s,"%d/%d",f->space[2],f->num[2]);
m_flight.SetItemText(i,5,s);
f=f->next;
i++;
}
m_flight.SetItemState(curflight,LVIS_SELECTED,LVIS_SELECTED);
showpay();
showwait();
}
void CAirlineDlg::showpaypos()
{
char t[10];
m_pos.ResetContent();
city *c=a.get(curcity);
if(c==NULL)
return;
flight *f=c->get(curflight);
if(f==NULL)
return;
person *p=f->getpay(curpay);
if(p==NULL)
return;
for(short i=1;i<=f->num[p->level];i++)
if(f->pos[p->level][i]==p->index)
{
sprintf(t,"%d-%d",p->level+1,i);
m_pos.AddString(t);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -