📄 mainfrm.cpp
字号:
{
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 + -