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

📄 mainfrm.cpp

📁 网吧管理系统VC源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
				{
					clc.SetItemState(i,LVIS_FOCUSED | LVIS_SELECTED ,LVIS_FOCUSED | LVIS_SELECTED);
					LimitLockClient(i);
				}

				if (IsLeaguer)  //会员
				{
					if (nWorkTime % (nLeaguer_intervals * 60) == 1 && nWorkTime != (nNormal_intervals * 60) && nWorkTime > (m_daoPayProperty.m_MiniSecond * 60)) 
					{
						CString strFree = clc.GetItemText(i,6);
						float nFree = (float)atof(strFree);
						nFree += 0.5;
				
						CString strCardNum = clc.GetItemText(i, 4);
						CDaoLeaguer& DaoLeaguerRecord = ((CServerDoc*)GetActiveDocument())->m_daoLeaguer;
						DaoLeaguerRecord.MoveFirst();
						
						//会员卡中余额不足
						CString strFilter; 
						strFilter = "[用户名称]=\"";
						strFilter += strCardNum;
						strFilter += '\"';
						DaoLeaguerRecord.FindFirst(strFilter);
						if (nFree >= DaoLeaguerRecord.m_fMoney)
						{
							OutOfMoneyCheckOut(i);
							continue;
						}
						strFree.Format("%.1f",nFree);
						clc.SetItemText(i,6,strFree);


						str = clc.GetItemText(i, 0);
						strFilter = "[计算机名]=\"";
						strFilter += str;
						strFilter += '\"';
						if(DaoRecordFree.FindFirst(strFilter))
						{
							DaoRecordFree.Edit();
							DaoRecordFree.m_fFree = nFree;
							DaoRecordFree.Update();
						}						
					}
				}
				else //非会员
				{
					if (nWorkTime % (nNormal_intervals * 60) == 1 && nWorkTime != (nNormal_intervals * 60) && nWorkTime != 1 && nWorkTime > (m_daoPayProperty.m_MiniSecond * 60))  	
					{
						CString strFree = clc.GetItemText(i,6);
						float nFree = (float)atof(strFree);
						nFree = (float)atof(strFree);
						nFree += 0.5;

						strFree.Format("%.1f",nFree);
						clc.SetItemText(i,6,strFree);
						str = clc.GetItemText(i, 0);
						CString strFilter("[计算机名]=\"");
						strFilter += str;
						strFilter += '\"';
						if(DaoRecordFree.FindFirst(strFilter))
						{
							DaoRecordFree.Edit();
							DaoRecordFree.m_fFree = nFree;
							DaoRecordFree.Update();
						}
					}	
				}
			}
		}
		str.Format("当前 %d 台机器有消息",RecMsgCount);
		m_wndStatusBar.SetPaneText(2, str);
	}


	if(nIDEvent == 3)  //计算时间间隔
	{
		CountIntervals();
	}


	if (nIDEvent == 4)  //检测客户端是否掉线
	{
		CListCtrl & clc = ((CServerView*)GetActiveView())->GetListCtrl();
		int nCount = clc.GetItemCount();
		CString strException;
		for(int i = 0; i < nCount; i++)
		{
			if(clc.GetItemText(i, 8) == "工作中" || clc.GetItemText(i, 8) == "锁定")
			{
				strException = clc.GetItemText(i, 9);
				if(strException == "" || strException == "掉线")
				{
					clc.SetItemText(i, 9, "掉线");
				}
				else
					clc.SetItemText(i, 9, "");
			}
		}
	}
	CFrameWnd::OnTimer(nIDEvent);
}


void CMainFrame::OnSize(UINT nType, int cx, int cy) 
{
	CFrameWnd::OnSize(nType, cx, cy);
}


//开始计费
void CMainFrame::OnStartTiming() 
{
	CListCtrl & clc = ((CServerView*)GetActiveView())->GetListCtrl();
	int nIndex;
	POSITION pos = clc.GetFirstSelectedItemPosition();
	if(pos == NULL)
	{
		AfxMessageBox("请选择一台计算机!", MB_ICONINFORMATION | MB_OK);
		return;
	}

	CString str;
	CDaoRecord& DaoRecord = ((CServerDoc*)GetActiveDocument())->m_daoRecord;
	DaoRecord.MoveFirst();
	int nCount;
	nCount = clc.GetSelectedCount();
	
	while (pos)
	{
		nIndex = clc.GetNextSelectedItem(pos);

		str = clc.GetItemText(nIndex, 0);
		CString strFilter("[计算机名]=\"");
		strFilter += str;
		strFilter += '\"';
        DaoRecord.FindFirst(strFilter);
		if(DaoRecord.m_nStatus == CLIENT_WORKING)
		{
			str += "处于工作状态,不能重复计费!";
			AfxMessageBox(str, MB_ICONINFORMATION | MB_OK);
			continue;
		}

		if(DaoRecord.m_nStatus == CLIENT_UNKNOW)
		{
			str += "处于未知状态,不能计费!";
			AfxMessageBox(str, MB_ICONINFORMATION | MB_OK);
			continue;
		}

		CRegisterDlg dlg;
		CCommSocket * pSocket = (CCommSocket*)DaoRecord.m_SOCKET;
		if(dlg.DoModal() == IDOK)
		{
			SMessage msg;
			CTime time;
			strcpy(msg.str,"Start Work!");
			msg.IDCode = CLIENT_START_WORK;
			pSocket->Send(&msg, sizeof(SMessage));
			
			DaoRecord.Edit();
			DaoRecord.m_nStatus = CLIENT_WORKING;
			DaoRecord.m_fFree = 0.0;
			DaoRecord.m_strCardNum = dlg.m_strCardNum;
			DaoRecord.m_strBak = dlg.m_strBak;
			DaoRecord.m_fPrepay =(float)atof(dlg.m_strPrepay);
			
			DaoRecord.m_nLimitTime = (short)atoi(dlg.m_strLimitMinute);
			
			time = CTime::GetCurrentTime();
			DaoRecord.m_timeStart.SetDateTime(time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond());

			DaoRecord.Update();
			((CServerView*)GetActiveView())->Refurbish(DaoRecord.GetAbsolutePosition());
			SetStatusText();
		}
	}
}


//客户端登陆,开始计费
LRESULT CMainFrame::OnStartWork(WPARAM wParam, LPARAM lParam)
{
	bool CanStartWork = true;

	SMessage* pMsg = (SMessage*)lParam;

	CListCtrl & clc = ((CServerView*)GetActiveView())->GetListCtrl();

	int nCount = clc.GetItemCount();
	CString str;
	for( int i = 0; i < nCount; i++)
	{
		str = clc.GetItemText(i, 0);
		if (pMsg->str == str)
		{
			clc.SetItemState(i, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
			break;
		}
	}

	CDaoLeaguer DaoLeaguerRecord;
	DaoLeaguerRecord.Open();
	DaoLeaguerRecord.MoveFirst();
    CString strFilter;

	CString strCardID = CString(pMsg->cardID);
	if (strCardID != "")
	{
		strFilter = "[用户名称]=\"";
		strFilter += pMsg->cardID;
		strFilter += '\"';
		strFilter += " and [会员密码]=\"";
		strFilter += pMsg->cardPass;
		strFilter += '\"';

		if (DaoLeaguerRecord.FindFirst(strFilter) != 0)
			;
		else
			CanStartWork = false;
	}
	else
	{
		CString strOldPass = AfxGetApp()->GetProfileString("PassWord","OldPassWord");
		if (strOldPass == pMsg->cardPass)
		{
			CanStartWork = true;
			strcpy(pMsg->cardID, "管理员");
		}
		else
			CanStartWork = false;
	}

	CDaoRecord& DaoRecord = ((CServerDoc*)GetActiveDocument())->m_daoRecord;
	DaoRecord.MoveFirst();

	nCount = clc.GetSelectedCount();
	strFilter = "[计算机名]=\"";
	strFilter += pMsg->str;
	strFilter += '\"';
	DaoRecord.FindNext(strFilter);

	CRegisterDlg dlg;
	CCommSocket * pSocket = (CCommSocket*)DaoRecord.m_SOCKET;
	SMessage msg;

	CTime Currenttime = CTime::GetCurrentTime();

	CTime Endtime = CTime(DaoLeaguerRecord.m_EndDate.GetYear(), DaoLeaguerRecord.m_EndDate.GetMonth(), DaoLeaguerRecord.m_EndDate.GetDay(), Currenttime.GetHour(), Currenttime.GetMinute(), Currenttime.GetSecond());
	

	if (!CanStartWork)
	{
		strcpy(msg.str,"Error!");
	    msg.IDCode = CLIENT_CARD_ERROR;
		pSocket->Send(&msg, sizeof(SMessage));
		return false;
	}
	else if (DaoLeaguerRecord.m_lStatus == 1 && strCardID != "")
	{
		strcpy(msg.str,"Error!");
	    msg.IDCode = LEAGUER_PAUSE;
		pSocket->Send(&msg, sizeof(SMessage));
		return false;
	}
	else if (DaoLeaguerRecord.m_lStatus == 2 && strCardID != "")
	{
		strcpy(msg.str,"Error!");
	    msg.IDCode = LEAGUER_LOSS;
		pSocket->Send(&msg, sizeof(SMessage));
		return false;
	}
	else if (Currenttime > Endtime && strCardID != "")
	{
		strcpy(msg.str,"Error!");
	    msg.IDCode = LEAGUER_OUT_DATE;
		pSocket->Send(&msg, sizeof(SMessage));
		return false;		
	}
	else if (DaoLeaguerRecord.m_fMoney < 0.5 && strCardID != "")
	{
		strcpy(msg.str,"Error!");
	    msg.IDCode = LEAGUER_NOT_MONEY;
		pSocket->Send(&msg, sizeof(SMessage));
		return false;	
	}
	else if (DaoLeaguerRecord.m_WorkStatus == 1)
    {
		strcpy(msg.str,"Error!");
	    msg.IDCode = LEAGUER_WORKING;
		pSocket->Send(&msg, sizeof(SMessage));
		return false;
	}

	DaoLeaguerRecord.m_WorkStatus = 1;
	DaoLeaguerRecord.Close();
	
	strcpy(msg.str,"Start Work!");
	msg.IDCode = CLIENT_START_WORK;
	pSocket->Send(&msg, sizeof(SMessage));

	DaoRecord.Edit();
	DaoRecord.m_nStatus = CLIENT_WORKING;
	DaoRecord.m_fFree = 0.0;
	DaoRecord.m_strCardNum = pMsg->cardID;
	DaoRecord.m_strBak = dlg.m_strBak;
	DaoRecord.m_fPrepay =(float)atof(dlg.m_strPrepay);
	DaoRecord.m_nLimitTime = (short)atof(dlg.m_strLimitTime)*60;

	CTime time = CTime::GetCurrentTime();
	DaoRecord.m_timeStart.SetDateTime(time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond());
	DaoRecord.Update();
	((CServerView*)GetActiveView())->Refurbish(DaoRecord.GetAbsolutePosition());
	SetStatusText();
	return true;
}


//给客户端发送使用信息
LRESULT CMainFrame::OnTimeReport(WPARAM wParam, LPARAM lParam)
{
	SMessage* pMsg = (SMessage*)lParam;

	CListCtrl & clc = ((CServerView*)GetActiveView())->GetListCtrl();
	SMessage msg;
	int nCount = clc.GetItemCount();
	CString str;
	for( int i = 0; i < nCount; i++)
	{
		str = clc.GetItemText(i, 0);
		if (pMsg->str == str)
		{
			strcpy(msg.str, "开始时间:" + clc.GetItemText(i,1) + "    ");
			strcat(msg.str, "已用时间:" + clc.GetItemText(i,5) + "    ");
			strcat(msg.str, "费    用:" + clc.GetItemText(i,6) + "    ");
			strcat(msg.str, "附加费用:" + clc.GetItemText(i,7));
			break;
		}
	}	

	CDaoRecord& DaoRecord = ((CServerDoc*)GetActiveDocument())->m_daoRecord;
	DaoRecord.MoveFirst();

	CString strFilter = "[计算机名]=\"";
	strFilter += pMsg->str;
	strFilter += '\"';
	DaoRecord.FindNext(strFilter);

	CCommSocket * pSocket = (CCommSocket*)DaoRecord.m_SOCKET;

	msg.IDCode = CLIENT_TIME_REPORT;
	pSocket->Send(&msg, sizeof(SMessage));
	return true;
}


//会员结账
LRESULT CMainFrame::OnLeaguerCheckOut(WPARAM wParam, LPARAM lParam)
{
	SMessage* pMsg = (SMessage*)lParam;

	CListCtrl & clc = ((CServerView*)GetActiveView())->GetListCtrl();


	LVFINDINFO info;
	info.flags = LVFI_STRING;
	info.psz = pMsg->str;

	int iRecordNum = clc.FindItem(&info);
	
	CTime time;
	time = CTime::GetCurrentTime();

	CDaoHistoryFree & DaoHistoryFree = ((CServerDoc*)GetActiveDocument())->m_daoHistoryFree;
	DaoHistoryFree.AddNew();
	DaoHistoryFree.m_strName = clc.GetItemText(iRecordNum, 0);

	CDaoRecord& DaoRecord = ((CServerDoc*)GetActiveDocument())->m_daoRecord;
	DaoRecord.MoveFirst();

	CString strFilter("[计算机名]=\"");
	strFilter += pMsg->str;
	strFilter += '\"';

    DaoRecord.FindFirst(strFilter);

	CCommSocket * pSocket = (CCommSocket*)DaoRecord.m_SOCKET;

	DaoHistoryFree.m_StartTime.SetDateTime(DaoRecord.m_timeStart.GetYear(),DaoRecord.m_timeStart.GetMonth(),DaoRecord.m_timeStart.GetDay(), DaoRecord.m_timeStart.GetHour(),DaoRecord.m_timeStart.GetMinute(),DaoRecord.m_timeStart.GetSecond());
		        
	DaoHistoryFree.m_EndTime.SetDateTime(time.GetYear(),time.GetMonth(),time.GetDay(), time.GetHour(),time.GetMinute(),time.GetSecond());
			
	DaoHistoryFree.m_CardNum = clc.GetItemText(iRecordNum, 4);
	float nFree = (float)atof(clc.GetItemText(iRecordNum, 6));
	DaoHistoryFree.m_Free = nFree;
	nFree = (float)atof(clc.GetItemText(iRecordNum, 7));
	DaoHistoryFree.m_AddtionalFree = nFree;
		
	CString strTime = clc.GetItemText(iRecordNum,5);
	int nWorkTime = atoi(strTime.Mid(0,2)) * 3600 + atoi(strTime.Mid(3,2)) * 60 + atoi(strTime.Mid(6,2));
	DaoHistoryFree.m_CountTime = nWorkTime;
	DaoHistoryFree.m_strBak = clc.GetItemText(iRecordNum, 9);
	DaoHistoryFree.Update();

	CString strLeaguerCard = clc.GetItemText(iRecordNum, 4); 

	if (strLeaguerCard == "" || strLeaguerCard == "管理员")
	{
		SMessage msg;
		strcpy(msg.str, "Not check out!");
		msg.IDCode = LEAGUER_NOT_CHECK_OUT;
		pSocket->Send(&msg, sizeof(SMessage));
		return true;
	}

	CString strCardID = DaoRecord.m_strCardNum;
	float fFree = DaoRecord.m_fFree;
	float fAddtionalFree = DaoRecord.m_fAddtionalFree;
	DaoRecord.Edit();
	DaoRecord.m_nStatus = CLIENT_LOCKING;
	DaoRecord.m_fFree = 0.0f;
	DaoRecord.m_strCardNum = "";
	DaoRecord.m_fAddtionalFree = 0.0f;
	DaoRecord.m_fPrepay = 0.0f;
	DaoRecord.m_nWorkTime = 0;
	DaoRecord.m_timeStart.SetTime(0,0,0);
	DaoRecord.m_strBak = "";
	DaoRecord.Update();

	((CServerView*)GetActiveView())->Refurbish(DaoRecord.GetAbsolutePosition());

	SetStatusText();
	CDaoLeaguer m_daoLeaguer;
	m_daoLeaguer.Open();
	m_daoLeaguer.MoveFirst();

	strFilter = CString("[用户名称]=\"");
	strFilter += strLeaguerCard;
	strFilter += '\"';
    m_daoLeaguer.FindFirst(strFilter);
	
	m_daoLeaguer.Edit();
	m_daoLeaguer.m_fMoney -= fFree;
	m_daoLeaguer.m_fMoney -= fAddtionalFree;
		
	m_daoLeaguer.m_fCountMoney += fFree;

⌨️ 快捷键说明

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