64,639
社区成员
发帖
与我相关
我的任务
分享
// BankWnd.h
#pragma once
#include <queue>
#include "Client.h"
class CBankWnd
{
public:
CBankWnd(void);
~CBankWnd(void);
public:
void push(const CClient&);
void pop(void);
void clear(void);
size_t size(void) const;
bool empty(void) const;
private:
std::queue<CClient> m_queueClients;
};
// BankWnd.cpp
#include "BankWnd.h"
CBankWnd::CBankWnd(void)
{
}
CBankWnd::~CBankWnd(void)
{
}
void CBankWnd::push( const CClient& client)
{
m_queueClients.push(client);
}
void CBankWnd::pop( void )
{
m_queueClients.pop();
}
bool CBankWnd::empty( void ) const
{
return m_queueClients.empty();
}
size_t CBankWnd::size( void ) const
{
return m_queueClients.size();
}
void CBankWnd::clear( void )
{
while(!m_queueClients.empty()){
m_queueClients.pop();
}
}
// Bank.h
#pragma once
#include <ctime>
#include "BankWnd.h"
#include "Client.h"
class CBank
{
public:
CBank(void);
~CBank(void);
public:
void onWork(void);
void offWork(void);
void inBank(const CClient& client);
void outBank(void);
size_t clientTotal(void) const;
size_t stayTimeTotal(void) const;
size_t aveStayTime(void) const;
private:
static const int UNIT_TIME = 20;
static const int NUM_WND = 3;
private:
CBankWnd m_bankWnds[NUM_WND];
size_t m_nClient; // current client number
size_t m_nStayTimeTotal;
size_t m_nClientTotal;
};
// Bank.cpp
#include "Bank.h"
CBank::CBank(void)
:m_nClient(0), m_nClientTotal(0), m_nStayTimeTotal(0)
{
srand((unsigned)time(NULL));
}
CBank::~CBank(void)
{
}
void CBank::inBank(const CClient& client)
{
size_t minLengthWnd(0);
for (size_t idx(0); idx != NUM_WND; ++idx){
if(m_bankWnds[idx].size() < m_bankWnds[minLengthWnd].size()){
minLengthWnd = idx;
}
}
m_bankWnds[minLengthWnd].push(client);
m_nStayTimeTotal += UNIT_TIME;
m_nClientTotal += 1;
m_nClient += 1;
}
void CBank::outBank( void )
{
switch(rand() % NUM_WND){
case 1:
if (!m_bankWnds[0].empty()){
m_bankWnds[0].pop();
m_nClient -= 1;
}
break;
case 2:
if (!m_bankWnds[1].empty()){
m_bankWnds[1].pop();
m_nClient -= 1;
}
break;
case 3:
if (!m_bankWnds[2].empty()){
m_bankWnds[2].pop();
m_nClient -= 1;
}
break;
}
m_nStayTimeTotal += m_nClient * UNIT_TIME;
}
size_t CBank::aveStayTime( void ) const
{
if (m_nClientTotal == 0){
return 0;
}
else{
return m_nStayTimeTotal / m_nClientTotal;
}
}
void CBank::onWork( void )
{
m_nClient = 0;
m_nClientTotal = 0;
m_nStayTimeTotal = 0;
}
void CBank::offWork( void )
{
for (size_t idx(0); idx != NUM_WND; ++idx){
m_bankWnds[idx].clear();
}
m_nClient = 0;
}
size_t CBank::clientTotal( void ) const
{
return m_nClientTotal;
}
size_t CBank::stayTimeTotal( void ) const
{
return m_nStayTimeTotal;
}
// client.h
#pragma once
class CClient
{
public:
CClient(void);
~CClient(void);
};
bool operator<(const CClient& lClient,const CClient& rClient);
bool operator==(const CClient& lClient,const CClient& rClient);
bool operator!=(const CClient& lClient,const CClient& rClient);
// client.cpp
#include "Client.h"
CClient::CClient(void)
{
}
CClient::~CClient(void)
{
}
bool operator<(const CClient& lClient,const CClient& rClient)
{
return false;
}
bool operator==( const CClient& lClient,const CClient& rClient )
{
return false;
}
bool operator!=( const CClient& lClient,const CClient& rClient )
{
return true;
}
#include "Bank.h"
#include "Client.h"
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
CBank myBank;
CClient client;
myBank.onWork();
for (size_t i(0); i != 10; ++i){
for (size_t j(0); j != 5; ++j){
if (rand() % 100 > 50){
myBank.inBank(client);
}
}
for (size_t j(0); j != 5; ++j){
myBank.outBank();
}
}
myBank.offWork();
std::cout <<myBank.clientTotal() << '\n';
std::cout << myBank.stayTimeTotal() << '\n';
std::cout << myBank.aveStayTime() << '\n';
return 0;
}