📄 garagelistview.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 + -