📄 strategy_2.cpp
字号:
//////////////////////////////////////////////////////////////////////////
//策略二
//
//
#include <fstream.h>
#include "strategy_2.h"
Service_Window_2::Service_Window_2()
{
Service_client = NULL;
}
Service_Window_2::~Service_Window_2()
{
SAFEDELETE(Service_client);
}
int Service_Window_2::Free()
{
SAFEDELETE(Service_client);
return TRUE;
}
Strategy_2::Strategy_2() // 构造函数,将所需数据初始化
{
m_pWindows = NULL;
m_nWindow_num = 0;
m_nWait_time = 0;
m_nWait_client_num = 0;
m_Flag_inputed = FALSE;
m_Flag_simulated = FALSE;
m_nClient_num = 0;
m_nTime = 0;
}
Strategy_2::~Strategy_2() // 析构函数,归还所申请的内存
{
for (int i=0; i<m_nWindow_num; i++)
{
m_pWindows[i].Free();
}
SAFEDELETES(m_pWindows);
}
int Strategy_2::Initial() // 初始化数据
{
SAFEDELETES(m_pWindows);
m_pWindows = NULL;
m_nWindow_num = 0;
m_nWait_client_num = 0;
m_nWait_time = 0;
m_Flag_inputed = FALSE;
m_Flag_simulated = FALSE;
m_nClient_num = 0;
m_nTime = 0;
m_Client.Free();
m_Wait_client.Free();
return TRUE;
}
int Strategy_2::Input_Queue() // 从文件输入队列
{
Initial();
fstream input_client;
input_client.open("custom.txt", ios::in);
if (!input_client)
{
cout << "Warning: File custom.txt can't open!";
return FALSE;
}
input_client >> m_nWindow_num >> m_nClient_num;
m_pWindows = new Service_Window_2[m_nWindow_num];
int narrive_time, ndeal_time;
for (int i=0; i<m_nClient_num; i++)
{
input_client >> narrive_time >> ndeal_time;
m_Client.Join_Queue(narrive_time, ndeal_time);
}
input_client.close();
m_Flag_inputed = TRUE;
return TRUE;
}
int Strategy_2::Simulation() // 模拟策略二
{
if (!m_Flag_inputed)
{
cout << "Input the data first" << endl;
return FALSE;
}
m_nTime = 0;
fstream output_simulation;
output_simulation.open("strategy_simulation_2.txt", ios::out);
if (!output_simulation)
{
cout << "Warning: File strategy_simulation_2.txt can't build!";
return FALSE;
}
output_simulation << "NOTE: (arrive time, deal time)" << endl <<"----------------------------------------------------" << endl;
output_simulation.close();
do
{
int flag_output = FALSE;
while (m_Client.m_pHead && m_Client.m_pHead->m_nArrive_Time==m_nTime) // 判断是否有顾客进入银行
{
flag_output = TRUE;
Client* ptemp;
ptemp = m_Client.m_pHead;
m_Client.m_pHead = m_Client.m_pHead->m_pNext;
if (m_Client.m_pHead)
{
m_Client.m_pHead->m_pPrev = NULL;
}
else
{
m_Client.m_pRear = NULL;
}
m_Wait_client.Push_Client(ptemp);
m_nWait_client_num++;
}
for (int j=0; j<m_nWindow_num; j++) // 判断正在办理业务的顾客是否要离开
{
if (m_pWindows[j].Service_client && m_pWindows[j].Service_client->m_nBegin_deal_time+m_pWindows[j].Service_client->m_nDeal_Time<=m_nTime)
{
flag_output = TRUE;
m_pWindows[j].Free();
}
}
for (int i=0; i<m_nWindow_num; i++) // 判断正在等待的客户是否可以开始办理业务
{
if (!m_pWindows[i].Service_client)
{
if (m_Wait_client.m_pHead)
{
flag_output = TRUE;
m_pWindows[i].Service_client = m_Wait_client.m_pHead;
m_pWindows[i].Service_client->m_nBegin_deal_time = m_nTime;
m_Wait_client.m_pHead = m_Wait_client.m_pHead->m_pNext;
if (m_Wait_client.m_pHead)
{
m_Wait_client.m_pHead->m_pPrev = NULL;
}
else
{
m_Wait_client.m_pRear = NULL;
}
m_pWindows[i].Service_client->m_pNext = NULL;
m_pWindows[i].Service_client->m_pPrev = NULL;
m_nWait_client_num--;
}
}
}
m_nWait_time += m_nWait_client_num;
if (flag_output)
{
Output_Simulation();
}
m_nTime++;
} while(m_Client.m_pHead || m_Wait_client.m_pHead);
m_Flag_simulated = TRUE;
return TRUE;
}
int Strategy_2::Output_Result()
{
if (!m_Flag_inputed)
{
cout << "Input the data first" << endl;
return FALSE;
}
if (!m_Flag_simulated)
{
cout << "Simulate first" << endl;
return FALSE;
}
fstream output_client;
output_client.open("strategy_2.txt", ios::out);
if (!output_client)
{
cout << "Warning: File strategy_2.txt can't build!";
return FALSE;
}
output_client << "strategy 2:" << endl;
cout << "strategy 2:" << endl;
output_client << "service windows number: " << m_nWindow_num << endl;
cout << "service windows number: " << m_nWindow_num << endl;
output_client << "client number: " << m_nClient_num << endl;
cout << "client number: " << m_nClient_num << endl;
output_client << "average wait time: " << (double)m_nWait_time/m_nClient_num << endl;
cout << "average wait time: " << (double)m_nWait_time/m_nClient_num << endl << endl;
output_client.close();
return TRUE;
}
int Strategy_2::Output_Simulation()
{
fstream output_simulation;
output_simulation.open("strategy_simulation_2.txt", ios::app);
if (!output_simulation)
{
cout << "Warning: File strategy_simulation_2.txt can't build!";
return FALSE;
}
output_simulation << "TIME NOW: " << m_nTime << endl;
for (int i=0; i<m_nWindow_num; i++)
{
output_simulation << "window " << i+1 << ": ";
if (m_pWindows[i].Service_client)
{
output_simulation << "(" << m_pWindows[i].Service_client->m_nArrive_Time << ", " << m_pWindows[i].Service_client->m_nDeal_Time << ")";
}
output_simulation << endl;
}
Client* ptemp = m_Wait_client.m_pHead;
output_simulation << "clients: ";
int j = 0;
while (ptemp)
{
j++;
output_simulation << "(" << ptemp->m_nArrive_Time << ", " << ptemp->m_nDeal_Time << "), ";
ptemp = ptemp->m_pNext;
if (j%10==0)
{
output_simulation << endl;
}
}
output_simulation << endl;
output_simulation << endl << "----------------------------------------------------" << endl;
output_simulation.close();
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -