📄 busmanager.cpp
字号:
// BusManager.cpp: implementation of the CBusManager class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Ticket.h"
#include "BusManager.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
#include "Bus.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
IMPLEMENT_SERIAL(CBusManager, CObject, 1);
CBusManager::CBusManager()
{
m_BusCount=0;
m_pHead=new CBus;
}
CBusManager::~CBusManager()
{
CBus* pb=m_pHead,*pf;
while(pb)
{
pf=pb->m_pNext;
delete pb;
pb=pf;
}
}
bool CBusManager::AddBus(int nBusNumber, CString strCity, int nYear, int nMonth, int nDay, int nHour, int nMinute, int nSeatTotal)
{
CBus* pBus=new CBus;
if(!pBus->Create(nBusNumber,nSeatTotal)){
delete pBus;
return false;
}
pBus->SetProp(strCity,nYear,nMonth,nDay,nHour,nMinute);
CBus* pb=m_pHead,*pf=pb->m_pNext;
while(pf){
if(CompareBus(pBus,pf)==0&&nBusNumber==pf->m_BusNumber){
delete pBus;
return false;
}
if(CompareBus(pBus,pf)<0)
break;
pb=pf;pf=pf->m_pNext;
}
pb->m_pNext=pBus;pBus->m_pNext=pf;
m_BusCount++;
return true;
}
bool CBusManager::AddBus(CBus* pBus)
{
CBus* pb=m_pHead,*pf=pb->m_pNext;
while(pf){
if(CompareBus(pBus,pf)<0)
break;
pb=pf;pf=pf->m_pNext;
}
pb->m_pNext=pBus;pBus->m_pNext=pf;
m_BusCount++;
return true;
}
void CBusManager::CheckBus()
{
CTime time=CTime::GetCurrentTime();
CBus* pb=m_pHead,*pf=pb->m_pNext;
CBus bus;
bus.SetProp("",time.GetYear(),time.GetMonth(),time.GetDay(),0,0);
while(pf){
if(CompareBus(pf,&bus)<0){
pb->m_pNext=pf->m_pNext;
delete pf;
m_BusCount--;
pf=pb->m_pNext;
}else{
pb=pf;pf=pf->m_pNext;
}
}
}
int CBusManager::CompareBus(CBus* p0, CBus* p1)
{
if(p0->m_Year!=p1->m_Year)
return p0->m_Year-p1->m_Year;
else if(p0->m_Month!=p1->m_Month)
return p0->m_Month-p1->m_Month;
else if(p0->m_Day!=p1->m_Day)
return p0->m_Day-p1->m_Day;
else if(p0->m_Hour!=p1->m_Hour)
return p0->m_Hour-p1->m_Hour;
else
return p0->m_Minute-p1->m_Minute;
}
bool CBusManager::DeleteBus(CBus* pBus)
{
CBus* pb=m_pHead,*pf=pb->m_pNext;
while(pf){
if(pBus->m_BusNumber==pf->m_BusNumber&&CompareBus(pBus,pf)==0){
pb->m_pNext=pf->m_pNext;
delete pf;
m_BusCount--;
return true;
}
pb=pf;pf=pf->m_pNext;
}
return false;
}
CBus* CBusManager::FindBus(int nBusNumber, int nYear, int nMonth, int nDay, int nHour, int nMinute)
{
CBus* pBus=new CBus;
pBus->Create(nBusNumber,1);
pBus->SetProp("",nYear,nMonth,nDay,nHour,nMinute);
CBus* pb=m_pHead,*pf=pb->m_pNext;
while(pf){
if(nBusNumber==pf->m_BusNumber&&CompareBus(pBus,pf)==0){
delete pBus;
return pf;
}
pb=pf;pf=pf->m_pNext;
}
delete pBus;
return NULL;
}
void CBusManager::Reset()
{
CBus* pb=m_pHead->m_pNext,*pf;
while(pb)
{
pf=pb->m_pNext;
delete pb;
pb=pf;
}
m_BusCount=0;
m_pHead->m_pNext=NULL;
}
void CBusManager::Serialize(CArchive& ar)
{
CObject::Serialize(ar);
if(ar.IsStoring()){
CheckBus();
ar<<m_BusCount<<m_FoundTime<<m_pHead;
}else{
ar>>m_BusCount>>m_FoundTime>>m_pHead;
CheckBus();
}
}
void CBusManager::ViewBus(CListView* pView, CBus *pBus)
{
CListCtrl& rList=pView->GetListCtrl();
while(rList.DeleteColumn(0));
rList.DeleteAllItems();
rList.InsertColumn(0,"余票数",LVCFMT_LEFT,100);
rList.InsertColumn(1,"座号",LVCFMT_LEFT,50);
rList.InsertColumn(2,"座号",LVCFMT_LEFT,50);
rList.InsertColumn(3,"座号",LVCFMT_LEFT,50);
rList.InsertColumn(4,"座号",LVCFMT_LEFT,50);
rList.InsertColumn(5,"座号",LVCFMT_LEFT,50);
rList.InsertColumn(6,"座号",LVCFMT_LEFT,50);
rList.InsertColumn(7,"座号",LVCFMT_LEFT,50);
rList.InsertColumn(8,"座号",LVCFMT_LEFT,50);
CString str;
str.Format("%d",pBus->m_SeatLeft);
rList.InsertItem(0,str);
int count=8;
for(int i=0;i<pBus->m_SeatTotal;i++)
if(!pBus->SeatSell(i)){
str.Format("%d",i+1);
if(count%8==0)
rList.InsertItem(count/8,"");
rList.SetItem(count/8,count%8+1,LVIF_TEXT,str,0,0,0,NULL);
count++;
}
}
void CBusManager::ViewBusList(CListView* pView)
{
CListCtrl& rList=pView->GetListCtrl();
while(rList.DeleteColumn(0));
rList.DeleteAllItems();
rList.InsertColumn(0,"班次号",LVCFMT_LEFT,100);
rList.InsertColumn(1,"终点城市",LVCFMT_LEFT,100);
rList.InsertColumn(2,"发车时间",LVCFMT_LEFT,150);
rList.InsertColumn(3,"座位数",LVCFMT_LEFT,100);
rList.InsertColumn(4,"余票数",LVCFMT_LEFT,100);
CString str;
CBus* pBus=m_pHead->m_pNext;
int i=0;
while(pBus){
str.Format("%d",pBus->m_BusNumber);
rList.InsertItem(i,str);
rList.SetItem(i,1,LVIF_TEXT,pBus->m_City,0,0,0,NULL);
str.Format("%d-%d-%d , %d:%d",pBus->m_Year,pBus->m_Month,pBus->m_Day,pBus->m_Hour,pBus->m_Minute);
rList.SetItem(i,2,LVIF_TEXT,str,0,0,0,NULL);
str.Format("%d",pBus->m_SeatTotal);
rList.SetItem(i,3,LVIF_TEXT,str,0,0,0,NULL);
str.Format("%d",pBus->m_SeatLeft);
rList.SetItem(i++,4,LVIF_TEXT,str,0,0,0,NULL);
pBus=pBus->m_pNext;
}
}
void CBusManager::ViewPassenger(CListView* pView, CBus *pBus)
{
CListCtrl& rList=pView->GetListCtrl();
while(rList.DeleteColumn(0));
rList.DeleteAllItems();
rList.InsertColumn(0,"姓名",LVCFMT_LEFT,100);
rList.InsertColumn(1,"身份证号",LVCFMT_LEFT,150);
rList.InsertColumn(2,"座号",LVCFMT_LEFT,100);
CString str;
int j=0;
for(int i=0;i<pBus->m_SeatTotal;i++)
if(pBus->SeatSell(i)){
rList.InsertItem(j,pBus->m_pPassenger[i].m_Name);
rList.SetItem(j,1,LVIF_TEXT,pBus->m_pPassenger[i].m_IDCard,0,0,0,NULL);
str.Format("座号 : %d",i+1);
rList.SetItem(j++,2,LVIF_TEXT,str,0,0,0,NULL);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -