Write a program to simulate a queue at a bank. The program should be menu driven
ID: 3564591 • Letter: W
Question
Write a program to simulate a queue at a bank. The program should be menu driven and have the following options:
1) Display queue (Displays customer number and arrival time in a tabular form)
2) New customer arrives (Queue increases in size by one and arrival time is logged)
3) Customer leaves (Should calculate total waiting time and average waiting time)
4) Get data (Should display the total waiting time, average waiting time, number of customers serviced and present time)
Use the
Explanation / Answer
# include <iostream>
# include <time.h>
using namespace std;
// Link list created
struct link_list
{
int customer_no;
time_t arrival_time;
struct link_list *next;
};
// Class Queuue
class queue
{
link_list *list,*head;
public:
queue()
{
head=NULL;
}
void display();
void insert(int);
int size();
time_t delete_element();
};
// Insertion for Queue
void queue :: insert(int coust_no)
{
link_list *newnode;
newnode=new link_list;
newnode->customer_no=coust_no;
newnode->arrival_time=time(0);
newnode->next=NULL;
list=head;
if(head==NULL)
{
head=newnode;
}
else
{
while(list->next!=NULL)
{
list=list->next;
}
list->next= newnode;
}
}
// Display element of Queue
void queue :: display()
{
if(head==NULL)
{
cout<<"No customer in queue !!!";
return;
}
list=head;
cout<<"Customer No."<<" "<<"Arrival Time"<<" ";
while(list!=NULL)
{
cout<<list->customer_no<<" "<<list->arrival_time<<" ";
list=list->next;
}
}
//Delete element of queue
time_t queue :: delete_element()
{
if(head==NULL)
{
cout<<"Empty Queue !!!";
return 0;
}
else
{
link_list *temp = new link_list;
temp=head;
head=head->next;
time_t t =temp->arrival_time;
delete(temp);
return t;
}
}
//Size of present queue
int queue :: size(){
int qSize=0;
list=head;
while(list!=NULL)
{
qSize++;
list=list->next;
}
return qSize;
}
// Class customer using Queue
class customer{
queue cQueue;
int serv_count,present_count,avg_time,total_time,count;
public:
customer(){
count=1;
serv_count=0;
present_count=0;
avg_time=0;
total_time=0;
}
void display_queue();
void newCustomer();
void cusotmerLeave();
void getData();
};
//Display queue (Displays customer number and arrival time in a tabular form)
void customer :: display_queue(){
cQueue.display();
}
//New customer arrives (Queue increases in size by one and arrival time is logged)
void customer :: newCustomer(){
cQueue.insert(count);
count++;
}
//Customer leaves (Should calculate total waiting time and average waiting time)
void customer :: cusotmerLeave(){
time_t arr_time=cQueue.delete_element();
time_t dep_time=time(0);
serv_count++;
total_time+=dep_time-arr_time;
avg_time=total_time/serv_count;
}
//Get data (Should display the total waiting time, average waiting time, number of customers serviced and present time)
void customer :: getData(){
cout<<"Total waiting time:"<<total_time<<" ";
cout<<"Average waiting time:"<<avg_time<<" ";
cout<<"Number of customers serviced:"<<serv_count<<" ";
cout<<"Number of customers present time:"<<cQueue.size()<<" ";
}
//To check value
int display_menu()
{
int ch;
cout<<endl;
cout<<"[ 1 ] Insert"<<endl;
cout<<"[ 2 ] Delete"<<endl;
cout<<"[ 3 ] Display"<<endl;
cout<<"[ 4 ] Get Info"<<endl;
cout<<"Enter your choice :";
cin>>ch;
return ch;
}
int main()
{
customer c1;
while(1)
{
switch(display_menu())
{
case 1:c1.newCustomer();
break;
case 2:c1.cusotmerLeave();
break;
case 3:c1.display_queue();
break;
case 4: c1.getData();
break;
default: return 0;
}
}
return 0;
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.