c++primer plus清单12.10,12.11,12.12

本文详细介绍了一个基于队列的银行自动柜员机模拟系统的设计与实现。系统采用C++编程,通过定义队列类和客户类,实现了对顾客到达时间、处理时间和队列状态的管理。模拟了不同顾客流量下,队列的平均等待时间和平均队列长度,为银行的客户服务提供了优化建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先
// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
//

#ifndef QUEUE_H_
#define QUEUE_H_
class Customer
{
private:
long arrive;
int processtime;
public:
Customer() { arrive = processtime = 0; }
void set(long when);
long when() const { return arrive; }
int ptime()const { return processtime; }
};
typedef Customer Item;
class Queue
{
private:
struct Node
{
Item item;
struct Nodenext;
};
enum { Q_SIZE = 10 };
Node
front;
Node*rear;
int items;
const int qsize;
Queue(const Queue&q) :qsize(0) {};
Queue&operator=(const Queue&q) { return *this; }
public:
Queue(int qs = Q_SIZE);
~Queue();
bool isempty()const;
bool isfull()const;
int queuecount()const;
bool enqueue(const Item&item);
bool dequeue(Item&item);
};
#endif
其次
#include “queue.h”
#include
Queue::Queue(int qs):qsize(qs)
{
front = rear = NULL;
items = 0;
}
Queue ::~Queue()
{
Node *temp;
while(front!=NULL)
{
temp = front;
front = front->next;
delete temp;

}

}

bool Queue::isempty() const
{
return items==0;
}

bool Queue::isfull() const
{
return items==qsize;
}

int Queue::queuecount() const
{
return items;
}

bool Queue::enqueue(const Item & item)
{if(isfull())
return false;
Node *add = new Node;
add->item = item;
add->next = NULL;
items++;
if (front == NULL)
front = add;
else rear->next = add;
rear = add;
return true;

}

bool Queue::dequeue(Item & item)
{if(front==NULL)
return false;
item = front->item;
items–;
Node*temp = front;
front = front->next;
delete temp;
if (items == 0)
rear = NULL;
return true;

}
void Customer::set(long when)
{
processtime = std::rand() % 3 + 1;
arrive = when;
}
最后
// queue.cpp: 定义控制台应用程序的入口点。
//

#include “queue.h”
#include
#include
#include
#include"queue.h"
const int MIN_PER_HR = 60;
bool newcustomer(double x);
int main()
{
using std::cin;
using std::cout;
using std::endl;
using std::ios_base;
std::srand(std::time(0));
cout << “Case study :Bank of Heather Automatic Teller\n”;
cout << “Enter maxium size of queue :”;
int qs;
cin >> qs;
Queue line(qs);
cout << “Enter the number of simulation hours :”;
int hours;
cin >> hours;
long cyclelimit = MIN_PER_HR*hours;
cout << “Enter the average number of customers per hour:”;
double perhour;
cin >> perhour;
double min_per_cust;
min_per_cust = MIN_PER_HR;
Item temp;
long turnaways = 0;
long customers = 0;
long served = 0;
long sum_line = 0;
int wait_time = 0;
long line_wait = 0;
for(int cycle=0;cycle<cyclelimit;cycle++)
{
if (newcustomer(min_per_cust))
{
if (line.isfull())
turnaways;
else
{
customers++;
temp.set(cycle);
line.enqueue(temp);
}
}
if(wait_time<=0&&!line.isempty())
{
line.dequeue(temp);
wait_time = temp.ptime();
line_wait += cycle - temp.when();
served++;
}
if (wait_time > 0)
wait_time–;
sum_line += line.queuecount();
}
if (customers > 0)
{
cout << “customers accepted : " << customers << endl;
cout << " customers served: " << served << endl;
cout << " turnaways :” << turnaways << endl;
cout << "average queue size : ";
cout.precision(2);
cout.setf(ios_base::fixed, ios_base::floatfield);
cout << (double)sum_line / cyclelimit << endl;
cout << "average wait time " << (double)line_wait / served << “minutes\n”;
}
else
cout << “No customers!\n”;
cout << “Done!\n”;
system(“pause”);
return 0;
}

bool newcustomer(double x)
{
return (std::rand())*x / RAND_MAX < 1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值