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);}
新闻热点
疑难解答