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

📄 serverview.cpp

📁 网吧管理系统VC源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// ServerView.cpp : implementation of the CServerView class
//

#include "stdafx.h"
#include "Server.h"

#include "ServerDoc.h"
#include "ServerView.h"
#include "MainFrm.h"
#include "DlgBar.h"

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

/////////////////////////////////////////////////////////////////////////////
// CServerView

IMPLEMENT_DYNCREATE(CServerView, CListView)

BEGIN_MESSAGE_MAP(CServerView, CListView)
	//{{AFX_MSG_MAP(CServerView)
	ON_NOTIFY_REFLECT(NM_RCLICK, OnRclick)
	ON_WM_CREATE()
	ON_NOTIFY_REFLECT(LVN_ITEMCHANGED, OnItemChanged)
	ON_WM_LBUTTONDBLCLK()
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CListView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CListView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CListView::OnFilePrintPreview)
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CServerView construction/destruction

CServerView::CServerView()
{
	// TODO: add construction code here
	m_bUpdate = FALSE;
}

CServerView::~CServerView()
{
}

BOOL CServerView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	return CListView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CServerView drawing

void CServerView::OnDraw(CDC* pDC)
{
	CServerDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
}

/////////////////////////////////////////////////////////////////////////////
// CServerView printing

BOOL CServerView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CServerView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CServerView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CServerView diagnostics

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

void CServerView::Dump(CDumpContext& dc) const
{
	CListView::Dump(dc);
}

CServerDoc* CServerView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CServerDoc)));
	return (CServerDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CServerView message handlers


//初始化视图
void CServerView::OnInitialUpdate() 
{
	char * ItemName[] ={ "计算机名", "开始时间", "预交金额", "限时(分钟)",
		"会员卡号",	"已用时间", "费 用", "附加费用", "状 态", "异常情况", "备 注" };
	LV_COLUMN lv;

	m_pDaoRecord = &GetDocument()->m_daoRecord;
	m_pDaoRecordFree = &GetDocument()->m_daoHistoryFree;

	CListCtrl & clc = GetListCtrl();
	clc.ModifyStyle(NULL, LVS_REPORT);
	int nColumnCount = clc.GetHeaderCtrl()->GetItemCount();

	// Delete all of the columns.
	for (int i=0;i < nColumnCount;i++)
	{
		clc.DeleteColumn(0);
	}

	CImageList ImageList;
	ImageList.Create(IDB_STATUS_SMALL_BITMAP, 16, 0, RGB(255,255,255));
	clc.SetImageList(&ImageList, LVSIL_SMALL);
	ImageList.Detach();
	ImageList.Create(IDB_STATUS_BIG_BITMAP, 32, 0, RGB(255,255,255));
	clc.SetImageList(&ImageList, LVSIL_NORMAL);
	ImageList.Detach();

    lv.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH ;
    lv.fmt = LVCFMT_LEFT ;
	
	for (i = 0; i <= 10; i++)
	{
		lv.cx =  4 * clc.GetStringWidth(ItemName[i]) / 3;
		lv.pszText = ItemName[i];
		clc.InsertColumn(i, &lv);
	}
	clc.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);//|LVS_EX_HEADERDRAGDROP);
	clc.ModifyStyleEx(0, WS_EX_CLIENTEDGE);

	bool bReCover = false;
	m_pDaoRecord = &GetDocument()->m_daoRecord;
	if (!(m_pDaoRecord->IsBOF() && m_pDaoRecord->IsEOF()))
	{
		m_pDaoRecord->MoveLast();
		int nCount = m_pDaoRecord->GetRecordCount();
		m_pDaoRecord->MoveFirst();
		for(int i = 0; i < nCount; i++)
		{
			if (m_pDaoRecord->m_nStatus == CLIENT_WORKING)
			{
				if(AfxMessageBox("上次系统意外关闭,是否恢复数据?", MB_OKCANCEL) == IDOK)
					bReCover = true;	
				break;
			}
			m_pDaoRecord->MoveNext();
		}
	}

	if(!bReCover)
	{
		int recordCount;
		if(m_pDaoRecord->GetRecordCount() == 0)
			return;
		m_pDaoRecord->MoveLast();
		recordCount = m_pDaoRecord->GetRecordCount();
		m_pDaoRecord->MoveFirst();
		for (int i = 0; i < recordCount; i++)
		{
			m_pDaoRecord->Edit();
			m_pDaoRecord->m_timeStart.SetTime(0,0,0);
			m_pDaoRecord->m_fPrepay = 0.0;
			m_pDaoRecord->m_nLimitTime = 0;
			m_pDaoRecord->m_strCardNum.Empty();
			m_pDaoRecord->m_nWorkTime = 0;
			m_pDaoRecord->m_fFree = 0.0;
			m_pDaoRecord->m_fAddtionalFree = 0.0;
			m_pDaoRecord->m_strBak.Empty();
			m_pDaoRecord->m_nStatus = CLIENT_UNKNOW;
			m_pDaoRecord->m_SOCKET = 0;
			m_pDaoRecord->Update();
			m_pDaoRecord->MoveNext();
		}
	}	
	CListView::OnInitialUpdate();
}


//更新视图
void CServerView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
{
	CListCtrl & clc = GetListCtrl();

	CString str;
	int recordCount;

	m_pDaoRecord->MoveLast();
	recordCount = m_pDaoRecord->GetRecordCount();
	m_pDaoRecord->MoveFirst();
	clc.DeleteAllItems();
	
	for (int i = 0; i < recordCount; i++)
	{
		clc.InsertItem(i, m_pDaoRecord->m_strName, m_pDaoRecord->m_nStatus);
		
		clc.SetItemText(i, 1, m_pDaoRecord->m_timeStart.Format(VAR_TIMEVALUEONLY));
		
		str.Format("%.1f", m_pDaoRecord->m_fPrepay);
		clc.SetItemText(i, 2, str);
		
		str.Format("%d", m_pDaoRecord->m_nLimitTime);
		clc.SetItemText(i, 3, str);
		
		clc.SetItemText(i, 4, m_pDaoRecord->m_strCardNum);

		if(m_pDaoRecord->m_nStatus == CLIENT_WORKING)
		{
			CTime time;
			time = CTime::GetCurrentTime();
			int nHour = time.GetHour() - m_pDaoRecord->m_timeStart.GetHour();
			if (nHour < 0)
				nHour = 24 + nHour;
			int nMinute = time.GetMinute() - m_pDaoRecord->m_timeStart.GetMinute();
			int nSecond = time.GetSecond() - m_pDaoRecord->m_timeStart.GetSecond();
			m_pDaoRecord->Edit();
			m_pDaoRecord->m_nWorkTime = nHour * 3600 + nMinute * 60 + nSecond;
			m_pDaoRecord->Update();
		}	
		
		str = ConvertString(m_pDaoRecord->m_nWorkTime/3600);
		str +=":";
		int ntemp = m_pDaoRecord->m_nWorkTime % 3600;
		str += ConvertString(m_pDaoRecord->m_nWorkTime/60);
		str +=":";
		str += ConvertString(m_pDaoRecord->m_nWorkTime%60);

		clc.SetItemText(i, 5, str);
		
		str.Format("%3.1f", m_pDaoRecord->m_fFree);
		clc.SetItemText(i, 6, str);

		switch(m_pDaoRecord->m_nStatus)
		{
		case CLIENT_UNKNOW:
			str.LoadString(IDS_CLIENT_UNKNOW);
			break;
		case CLIENT_WORKING:
			str.LoadString(IDS_CLIENT_WORKING);
			break;
		case CLIENT_LOCKING:
			str.LoadString(IDS_CLIENT_LOCKING);
			break;
		case CLIENT_WAITING:
			str.LoadString(IDS_CLIENT_WAITING);
		}

		clc.SetItemText(i, 8, str);

		str.Format("%3.1f", m_pDaoRecord->m_fAddtionalFree);
		clc.SetItemText(i, 7, str);

		clc.SetItemText(i, 9, " ");
		clc.SetItemText(i, 10, m_pDaoRecord->m_strBak);

		m_pDaoRecord->MoveNext();
	}	

}


//接收新的客户端
void CServerView::ReceiveData(SMessage& msg, CCommSocket* pCommSocket)
{

	switch(msg.IDCode)
	{
		case CLIENT_IP_SEND:
		{
			CString strFilter("[计算机名]=\"");
			strFilter += pCommSocket->m_strClientName;
			strFilter += '\"';
	
			if(m_pDaoRecord->FindFirst(strFilter))
			{
				m_pDaoRecord->Edit();
				m_pDaoRecord->m_SOCKET = (long)pCommSocket;
				ASSERT((CCommSocket*)m_pDaoRecord->m_SOCKET == pCommSocket);
				m_pDaoRecord->Update();

				if(m_pDaoRecord->m_nStatus == CLIENT_WORKING)
				{
					SMessage pMsg;
					strcpy(pMsg.str,"Start Working!");
					pMsg.IDCode = CLIENT_START_WORK;
					pCommSocket->Send(&pMsg, sizeof(SMessage));
				}
				else
				{
					SMessage pMsg;
					strcpy(pMsg.str,"Locking!");
					pMsg.IDCode = CLIENT_LOCK;

					m_pDaoRecord->Edit();
					m_pDaoRecord->m_nStatus = CLIENT_LOCKING;
					m_pDaoRecord->Update();
					pCommSocket->Send(&pMsg, sizeof(SMessage));
				}
			}
			else
			{
				m_pDaoRecord->AddNew();
				m_pDaoRecord->m_strName = pCommSocket->m_strClientName;
				pCommSocket->m_nRecordNum = m_pDaoRecord->GetAbsolutePosition();
				m_pDaoRecord->m_nStatus = CLIENT_LOCKING;
				m_pDaoRecord->m_timeStart.SetTime(0,0,0);
				m_pDaoRecord->m_SOCKET = (long)pCommSocket;
				ASSERT((CCommSocket*)m_pDaoRecord->m_SOCKET == pCommSocket);
				m_pDaoRecord->Update();
			
				SMessage pMsg;
				strcpy(pMsg.str,"Lock Computer!");
				pMsg.IDCode = CLIENT_LOCK;
				pCommSocket->Send(&pMsg, sizeof(SMessage));
			}
			break;
		}
		case CLIENT_TIME_REPORT:
		{
			m_pDaoRecord->MoveFirst();
			m_pDaoRecord->Move(pCommSocket->m_nRecordNum);
			m_pDaoRecord->Edit();
			m_pDaoRecord->m_nWorkTime ++;
			m_pDaoRecord->Update();
			Refurbish(m_pDaoRecord->GetAbsolutePosition());
		}
	}
	Refurbish(pCommSocket->m_strClientName);	
}


//刷新视图
void CServerView::Refurbish(CString strName)
{
	LVFINDINFO info;
	info.flags = LVFI_STRING;
	info.psz = strName;
	CString str;
	CListCtrl & clc = GetListCtrl();
	int iRecordNum = clc.FindItem(&info);
	if(iRecordNum == -1)
	{
		iRecordNum = clc.GetItemCount();
		clc.InsertItem(iRecordNum, strName, 0);
	}
	else
	{
		LVITEM lvi;
		//lvi.mask = LVIF_STATE;
		lvi.iItem = iRecordNum;
		lvi.iSubItem = 0;
		//lvi.stateMask = LVIS_STATEIMAGEMASK;
		clc.GetItem( &lvi );
		lvi.mask |= LVIF_IMAGE;
		//lvi.stateMask = LVIS_STATEIMAGEMASK;
		lvi.iImage = m_pDaoRecord->m_nStatus;
		if (m_pDaoRecord->m_nStatus == CLIENT_ALL_NIGHT)
			lvi.iImage = 2;
		clc.SetItem(&lvi);
	}
	
	CString strFilter("[计算机名]=\"");
	strFilter += strName;
	strFilter += '\"';
	if(m_pDaoRecord->FindFirst(strFilter))
	{
		clc.SetItemText(iRecordNum, 1, m_pDaoRecord->m_timeStart.Format(VAR_TIMEVALUEONLY));


		str.Format("%3.1f", m_pDaoRecord->m_fPrepay);
		clc.SetItemText(iRecordNum, 2, str);
	
		str.Format("%d", m_pDaoRecord->m_nLimitTime);
		clc.SetItemText(iRecordNum, 3, str);
	
		clc.SetItemText(iRecordNum, 4, m_pDaoRecord->m_strCardNum);
	
		if(m_pDaoRecord->m_nStatus == CLIENT_WORKING)
		{
			CTime time;

⌨️ 快捷键说明

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