⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 busmanager.cpp

📁 利用MFC编写的一个可运行的车站售票系统
💻 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 + -