資源簡介
客戶業務分為兩種,
第一種是申請從銀行得到一筆資金,即取款或者借款。
第二種是向銀行投入一筆資金,即存款或者還款。
Void Action()
銀行有兩個服務窗口,相應的有兩個隊列。
客戶到達銀行后先排第一個隊。queue q1;
處理每個客戶業務時,如果屬于第一種,且申請額超
出銀行現存資金總額而得不到滿足,則立即排入第二個隊 queue q2;
等候,直至滿足時才離開銀行
;否則業務處理完后立即離開銀行。
每接待完一個第二種業務的客戶,則順序檢查和處理
(如果可能)第二個隊列中的客戶,對能滿足的申請者予以滿足,不能滿足的者重新排到
第二個隊列的隊尾。
注意: 在此檢查過程中,一旦銀行的資金總額少于或者等于剛才第一個隊列中最后一個客
戶(第二種業務)被接待之前的數額,或者本次已將第二個隊列檢查或處理了一遍,就停
止檢查(因為此時已不可能還有能滿足者)轉而繼續接待第一個隊列客戶。任何時刻都只
開一個窗口。假設檢查不需要時間。營業時間結束時所有客戶立即離開銀行。
【基本要求】 利用動態存儲結構實現模擬。
【測試數據】 一天營業開始時銀行擁有的款額為10000(元)
初始化total=10000;
,營業時間為600(分鐘)。
設定營業時間為早上9:00-晚上19:00
其他模擬參量自定,注意測定兩種極端的情況:一是兩個到達事件之間的間隔時間很短,
而客戶的交易時間很長,另一個恰好相反,設置兩個到達事件的間隔時間很長,而客戶的
交易時間很短。這個有點焦慮
【實現提示】 事件有兩類:到達銀行的和離開銀行。初始時銀行現存資金總額為total。開
始營業后的第一個事件是客戶到達,
設定一個計數器count來計算一天內客戶人數,初始化為0
營業時間從0到closetime。到達事件發生時隨機地設置
此客戶的交易時間和距下一到達事件之間的時間間隔。每一個客戶要辦理的款額也是隨機
確定的,用負值和正值分別表示第一類和第二類業務。
個人覺得用0、1、2、3分別表示取款、借款、存款、還款比較好。
變量total,closetime以及上述兩個隨機量的上下界均交互地從終端讀入,作為模擬參數。
兩個隊列和一個事件表均要用動態存儲結構實現。需考慮設置離開事件,以及如何設
計第二個隊列的存儲結構以獲得較高的效率。注意:事件表是按時間順序有序的。
void getTime();

代碼片段和文件信息
#include“Client.h“
#include
#include
using?namespace?std;
int?Client::getNum()?
{
return?num;
}
string?Client::getAction()?
{
return?action;
}
int?Client::getMoney?()
{
return?money;
}
void?Client::setNum?(int?value)
{
num=value;
}
void?Client::setAction?(string?value)
{
action=value;
}
void?Client::setMoney(int?value)?
{
money=value;
}
void?Client::Acction(Client?&c)
{
int?m;//客戶交易的錢
int?r;//表示隨機數
long?seed=long(time(0));//隨機數生成器的種子
srand(seed);
r=rand();
r=r%4;
if(r==0)?//表示第一類業務的取款
{
num++;
m=rand();
m=m%10000;
c.setNum(num);
c.num=c.getNum();
c.setAction(“取款“);
c.action=c.getAction();
c.setMoney(m);
c.money=c.getMoney();
????}
????else?if(r==1)???//表示第一類業務的借款
{
num++;
m=rand();
????????m=m%10000;
c.setNum(num);
c.num=c.getNum();
c.setAction?(“借款“);
c.action=c.getAction();
c.setMoney(m);
c.money=c.getMoney();
}
else?if(r==2)??//表示第二類業務的存款
{
num++;
m=rand();
m=m%10000;
c.setNum(num);
c.num=c.getNum();
c.setAction(“存款“);
c.action=c.getAction();
c.setMoney(m);
c.money=c.getMoney();
}
else????//表示第二類業務的還款
{
num++;
m=rand();
m=m%10000;
c.setNum(num);
c.num=c.getNum();
???? c.setAction?(“還款“);
c.action=c.getAction();
c.setMoney(m);
c.money?=c.getMoney();
}
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1493??2010-12-29?16:01??銀行業務模擬\Client.cpp
?????文件????????413??2010-12-29?16:01??銀行業務模擬\Client.h
?????文件??????14997??2010-12-29?16:01??銀行業務模擬\Main.cpp
?????文件???????2440??2010-12-29?15:50??銀行業務模擬\Time.cpp
?????文件????????615??2010-12-23?21:29??銀行業務模擬\Time.h
?????目錄??????????0??2011-10-16?14:48??銀行業務模擬
-----------?---------??----------?-----??----
????????????????19958????????????????????6
- 上一篇:8位乘法器的設計
- 下一篇:SmartRF04EB仿真器驅動
評論
共有 條評論