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

📄 garagelistview.cpp

📁 是一款车库模拟控制系统,可以实现对当前车库存车状态的实时描述.
💻 CPP
字号:
// GarageListView.cpp : implementation file
//

#include "stdafx.h"
#include "Garage.h"
#include "GarageListView.h"
#include "GarageDoc.h"
#include "Login.h"
#include "Smallcardia.h"
#include "Middlecardia.h"
#include "GetOutDia.h"
#include "Bigcardia.h"
#include "SearchCarDia.h"
#include "Trcuk.h"
#include "Modification.h"
#include "SmallCar.h"
#include "MiddleCar.h"
#include "BigCar.h"
#include "Truck.h"
#include "Carbarn.h"


#ifdef _DEBUG
//#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CGarageListView

IMPLEMENT_DYNCREATE(CGarageListView, CListView)

CGarageListView::CGarageListView()
{
	m_AveCharWidth=0;
	m_enter=false;
	m_carbarn=new CCarbarn();
}

CGarageListView::~CGarageListView()
{
}


BEGIN_MESSAGE_MAP(CGarageListView, CListView)
	//{{AFX_MSG_MAP(CGarageListView)
	ON_COMMAND(ID_SYSTEM_LOGIN, OnSystemLogin)
	ON_COMMAND(ID_SYSTEM_LOGOUT, OnSystemLogout)
	ON_COMMAND(ID_CAR_BIG, OnCarBig)
	ON_UPDATE_COMMAND_UI(ID_CAR_BIG, OnUpdateCarBig)
	ON_COMMAND(ID_CAR_LEAVE, OnCarLeave)
	ON_UPDATE_COMMAND_UI(ID_CAR_LEAVE, OnUpdateCarLeave)
	ON_COMMAND(ID_CAR_MIDDLE, OnCarMiddle)
	ON_UPDATE_COMMAND_UI(ID_CAR_MIDDLE, OnUpdateCarMiddle)
	ON_COMMAND(ID_CAR_SMALL, OnCarSmall)
	ON_UPDATE_COMMAND_UI(ID_CAR_SMALL, OnUpdateCarSmall)
	ON_UPDATE_COMMAND_UI(ID_SEARCH_CAR, OnUpdateSearchCar)
	ON_COMMAND(ID_SEARCH_SEAT, OnSearchSeat)
	ON_UPDATE_COMMAND_UI(ID_SEARCH_SEAT, OnUpdateSearchSeat)
	ON_COMMAND(ID_CAR_TRUCK, OnCarTruck)
	ON_UPDATE_COMMAND_UI(ID_CAR_TRUCK, OnUpdateCarTruck)
	ON_COMMAND(ID_CONFIG_PRICE, OnConfigPrice)
	ON_UPDATE_COMMAND_UI(ID_CONFIG_PRICE, OnUpdateConfigPrice)
	ON_COMMAND(ID_SEARCH_ALL, OnSearchAll)
	ON_UPDATE_COMMAND_UI(ID_SEARCH_ALL, OnUpdateSearchAll)
	ON_COMMAND(ID_SEARCH_CAR, OnSearchCar)
	ON_NOTIFY_REFLECT(LVN_COLUMNCLICK, OnColumnclick)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CGarageListView drawing

void CGarageListView::OnDraw(CDC* pDC)
{
	CDocument* pDoc = GetDocument();
	// TODO: add draw code here
}

/////////////////////////////////////////////////////////////////////////////
// CGarageListView diagnostics

#ifdef _DEBUG
void CGarageListView::AssertValid() const
{
	CListView::AssertValid();
}

void CGarageListView::Dump(CDumpContext& dc) const
{
	CListView::Dump(dc);
}
CGarageDoc* CGarageListView::GetDocument()
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGarageDoc)));
	return (CGarageDoc*)m_pDocument;
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CGarageListView message handlers

void CGarageListView::OnInitialUpdate() 
{
	GetListCtrl().ModifyStyle(0,LVS_REPORT|LVS_SHOWSELALWAYS|LVS_SORTASCENDING);
	GetListCtrl().SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
	GetListCtrl().InsertColumn(0,"车牌号",LVCFMT_LEFT,GetTextExtent(15),0);
	GetListCtrl().InsertColumn(1,"入库时间",LVCFMT_LEFT,GetTextExtent(30),1);
	GetListCtrl().InsertColumn(2,"出库时间",LVCFMT_LEFT,GetTextExtent(30),2);
	GetListCtrl().InsertColumn(3,"车位",LVCFMT_LEFT,GetTextExtent(15),3);
	GetListCtrl().InsertColumn(4,"费用",LVCFMT_LEFT,GetTextExtent(20),4);
	GetListCtrl().InsertColumn(5,"货物",LVCFMT_LEFT,GetTextExtent(20),5);
	CListView::OnInitialUpdate();
}
int CGarageListView::GetTextExtent(int len)
{
	CDC* dc = GetDC();
	
	if (! m_AveCharWidth)
	{
		TEXTMETRIC tm;
		dc->GetTextMetrics(&tm);
		m_AveCharWidth = tm.tmAveCharWidth;
	}
	CSize size(m_AveCharWidth * len, 0);
	dc->LPtoDP(&size);
	ReleaseDC(dc);
	return size.cx;
}

void CGarageListView::OnUpdate(CView* pSender,LPARAM lHint, CObject* pHint)
{
	CList<CCarInfo*,CCarInfo*> *pList=GetDocument()->GetInfoList();
	GetListCtrl().DeleteAllItems();
	for (POSITION pos = pList->GetHeadPosition(); pos; )
	{
		CCarInfo *pInfo = pList->GetNext(pos);
		AddItem(-1,pInfo);
	}
}


void CGarageListView::AddItem(int i,CCarInfo *pInfo)
{
	if (i==-1)
	{
		i=GetListCtrl().InsertItem(0, pInfo->m_sCarNo);
	}
	else
	{
		GetListCtrl().SetItemText(i, 0,  pInfo->m_sCarNo);
	}

	GetListCtrl().SetItemText(i, 1,pInfo->m_sInTime);
	GetListCtrl().SetItemText(i, 2,pInfo->m_sOutTime);
	GetListCtrl().SetItemText(i, 3,pInfo->m_sParkPlace);
	GetListCtrl().SetItemText(i, 4,pInfo->m_sFee);
	GetListCtrl().SetItemText(i, 5,pInfo->m_sGood);
	GetListCtrl().SetItemData(i,(DWORD)pInfo);
}


void CGarageListView::OnSystemLogin() 
{
	Login dlg;
	dlg.DoModal();
	m_enter=true;
}

void CGarageListView::OnSystemLogout() 
{
	AfxMessageBox("欢迎您的使用!");
	exit(0);	
}

void CGarageListView::OnCarBig() 
{
	Bigcardia dlg;
	CString a;
	if(dlg.DoModal()==IDOK){
		a=dlg.m_sEnterTime;
		AfxMessageBox("车牌号码:"+dlg.m_sCarNo+"\n时间是:"+dlg.m_sEnterTime);
		CBigCar *aBigCar=new CBigCar(dlg.m_sCarNo,a);
		m_carbarn->park(aBigCar);
		CString b;
		b.Format("%d号车位",aBigCar->parkPlace);
		CCarInfo *pInfo=new CCarInfo(aBigCar->numberPlate,a," ",b,"0");
		CList<CCarInfo*,CCarInfo*> *pList=GetDocument()->GetInfoList();
		pList->AddHead(pInfo);
		AddItem(-1,pInfo);
	}
}

void CGarageListView::OnUpdateCarBig(CCmdUI* pCmdUI) 
{
	if(!m_enter)
		pCmdUI->Enable(false);
}

void CGarageListView::OnCarLeave() 
{
	CGetOutDia dlg;
	if(dlg.DoModal()==IDOK)
	{
		int b=m_carbarn->exit(dlg.m_sCarNo);
		CString c;
		c.Format("%d",b);
		CList<CCarInfo*,CCarInfo*>*pList=GetDocument()->GetInfoList();
		GetListCtrl().DeleteAllItems();
		for(POSITION pos=pList->GetHeadPosition();pos;)
		{
			CCarInfo *pInfo=pList->GetNext(pos);
			if((pInfo->m_sCarNo)==dlg.m_sCarNo){
				CString a=COleDateTime::GetCurrentTime().Format("20%y年%m月%d日 %H:%M");
				pInfo->m_sOutTime=a;
				pInfo->m_sFee=c;
			}
			AddItem(-1,pInfo);
		}
	}

	
}

void CGarageListView::OnUpdateCarLeave(CCmdUI* pCmdUI) 
{
	if(!m_enter)
		pCmdUI->Enable(false);
}

void CGarageListView::OnCarMiddle() 
{
	Middlecardia dlg;
	CString a;
	if(dlg.DoModal()==IDOK){
		a=dlg.m_sEnterTime;
		AfxMessageBox("车牌号码:"+dlg.m_sCarNo+"\n时间是:"+dlg.m_sEnterTime);
		CMiddleCar *aMiddleCar=new CMiddleCar(dlg.m_sCarNo,a);
		m_carbarn->park(aMiddleCar);
		CString b;
		b.Format("%d号车位",aMiddleCar->parkPlace);
		CCarInfo *pInfo=new CCarInfo(aMiddleCar->numberPlate,a," ",b,"0");
		CList<CCarInfo*,CCarInfo*> *pList=GetDocument()->GetInfoList();
		pList->AddHead(pInfo);
		AddItem(-1,pInfo);
	}
}

void CGarageListView::OnUpdateCarMiddle(CCmdUI* pCmdUI) 
{
	if(!m_enter)
		pCmdUI->Enable(false);
}

void CGarageListView::OnCarSmall() 
{
	Smallcardia dlg;
	CString a;
	if(dlg.DoModal()==IDOK){
		a=dlg.m_sEnterTime;
		AfxMessageBox("车牌号码:"+dlg.m_sCarNo+"\n时间是:"+dlg.m_sEnterTime);
		CSmallCar *aSmallCar=new CSmallCar(dlg.m_sCarNo,a);
		m_carbarn->park(aSmallCar);
		CString b;
		b.Format("%d号车位",aSmallCar->parkPlace);
		CCarInfo *pInfo=new CCarInfo(aSmallCar->numberPlate,a," ",b,"0");
		CList<CCarInfo*,CCarInfo*> *pList=GetDocument()->GetInfoList();
		pList->AddHead(pInfo);
		AddItem(-1,pInfo);
	}
}

void CGarageListView::OnUpdateCarSmall(CCmdUI* pCmdUI) 
{
	if(!m_enter)
		pCmdUI->Enable(false);
}

void CGarageListView::OnSearchCar() 
{
	m_carbarn->findCurrentCar();
}

void CGarageListView::OnUpdateSearchCar(CCmdUI* pCmdUI) 
{
	if(!m_enter)
		pCmdUI->Enable(false);
}

void CGarageListView::OnSearchSeat() 
{
	m_carbarn->findEmptySeats();	
}

void CGarageListView::OnUpdateSearchSeat(CCmdUI* pCmdUI) 
{
	if(!m_enter)
		pCmdUI->Enable(false);
}

void CGarageListView::OnCarTruck() 
{
	CTrcuk dlg;
	CString a;
	if(dlg.DoModal()==IDOK){
		a=dlg.m_sEnterTime;
		AfxMessageBox("车牌号码:"+dlg.m_sCarNo+"\n时间是:"+dlg.m_sEnterTime+"\n货物是:"+dlg.m_sGood);
		CTruck *aSmallCar=new CTruck(dlg.m_sCarNo,a,dlg.m_sGood);
		m_carbarn->park(aSmallCar);
		CString b;
		b.Format("%d号车位",aSmallCar->parkPlace);
		CCarInfo *pInfo=new CCarInfo(aSmallCar->numberPlate,a," ",b,"0",dlg.m_sGood);
		CList<CCarInfo*,CCarInfo*> *pList=GetDocument()->GetInfoList();
		pList->AddHead(pInfo);
		AddItem(-1,pInfo);
	}
}

void CGarageListView::OnUpdateCarTruck(CCmdUI* pCmdUI) 
{
	if(!m_enter)
		pCmdUI->Enable(false);
}

void CGarageListView::OnConfigPrice() 
{
	CModification dlg;
	dlg.m_chargeForSmall=m_carbarn->charge[0];
	dlg.m_chargeForMiddle=m_carbarn->charge[1];
	dlg.m_chargeForBig=m_carbarn->charge[2];
	dlg.m_chargeForGood=m_carbarn->keepCharge;
	if(dlg.DoModal()==IDOK){
		int a=dlg.m_chargeForSmall;
		int b=dlg.m_chargeForMiddle;
		int c=dlg.m_chargeForMiddle;
		int d=dlg.m_chargeForGood;
		m_carbarn->adjust(a,b,c);
		m_carbarn->setKeepFee(d);
	}
	
	
}

void CGarageListView::OnUpdateConfigPrice(CCmdUI* pCmdUI) 
{
	if(!m_enter)
		pCmdUI->Enable(false);
}

void CGarageListView::OnSearchAll() 
{
	m_carbarn->findAllInfo();
}

void CGarageListView::OnUpdateSearchAll(CCmdUI* pCmdUI) 
{
	if(!m_enter)
		pCmdUI->Enable(false);
}



int CALLBACK CompareColumnItems(CCarInfo* pItem1,CCarInfo* pItem2,LPARAM lCol);
void CGarageListView::OnColumnclick(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	CList<CCarInfo*,CCarInfo*> *pList=GetDocument()->GetInfoList();
	GetListCtrl().SortItems((PFNLVCOMPARE)CompareColumnItems,pNMListView->iSubItem);


	*pResult = 0;
}

int CALLBACK CompareColumnItems(CCarInfo* pItem1,CCarInfo* pItem2,LPARAM lCol)
{
	int nCmp=0;
	switch(lCol){
	case 0:
		nCmp=pItem1->m_sCarNo.CompareNoCase(
			pItem2->m_sCarNo);
		break;
	case 1:
		nCmp=pItem1->m_sInTime.CompareNoCase(
			pItem2->m_sInTime);
		break;
	case 2:
		nCmp=pItem1->m_sOutTime.CompareNoCase(
			pItem2->m_sOutTime);
		break;
	case 3:
		nCmp=pItem1->m_sParkPlace.CompareNoCase(
			pItem2->m_sParkPlace);
		break;
	}
	return nCmp;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -