首页 > 学院 > 开发设计 > 正文

cpp12.10

2019-11-11 03:59:22
字体:
来源:转载
供稿:网友

queue.h

#PRagma onceclass 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 Node*next; };	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);};queue.cpp

#include"queue.h"#include<cstdlib>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;}

bank.cpp

#include<iostream>#include<cstdlib>#include<ctime>#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 Stady: Bank of Heather Automatic Teller/n";	cout << "Enter maximum 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 hours: ";	double perhour;	cin >> perhour;	double min_per_cust;	min_per_cust = MIN_PER_HR / perhour;	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);}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表