X Tutup
Skip to content

Commit d5d138a

Browse files
committed
Added Cafteria Simulation project
1 parent 7b60125 commit d5d138a

File tree

10 files changed

+505
-0
lines changed

10 files changed

+505
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package simulationproject;
2+
3+
import java.util.concurrent.BlockingQueue;
4+
import java.util.concurrent.Callable;
5+
6+
public class Cafeteria implements Callable<String> {
7+
protected BlockingQueue<Customer> queue = null;
8+
9+
public Cafeteria(BlockingQueue<Customer> queue) {
10+
this.queue = queue;
11+
}
12+
13+
@Override
14+
public String call() {
15+
try {
16+
17+
System.out.println("Customer Starting the order ........");
18+
Customer c1 = new Customer();
19+
Customer c2 = new Customer();
20+
Customer c3 = new Customer();
21+
c1.chooseItems();
22+
c2.chooseItems();
23+
c3.chooseItems();
24+
c3.getOrder().calculateTotalCost();
25+
c1.getOrder().calculateTotalCost();
26+
c2.getOrder().calculateTotalCost();
27+
queue.put(c1);
28+
System.out.println("First Customer's Order:" + c1);
29+
queue.put(c2);
30+
System.out.println("Next Customer's Order:" + c2);
31+
32+
queue.put(c3);
33+
System.out.println("Next Customer's Order:" + c3);
34+
35+
System.out.println("Cusomer Order done .........");
36+
System.out.println("");
37+
System.out.println("");
38+
39+
} catch (InterruptedException e) {
40+
e.printStackTrace();
41+
} catch (Exception e) {
42+
e.printStackTrace();
43+
}
44+
return "Items added to the Queue";
45+
}
46+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package simulationproject;
2+
3+
import java.util.HashSet;
4+
import java.util.List;
5+
import java.util.Set;
6+
import java.util.concurrent.ArrayBlockingQueue;
7+
import java.util.concurrent.BlockingQueue;
8+
import java.util.concurrent.Callable;
9+
import java.util.concurrent.ExecutorService;
10+
import java.util.concurrent.Executors;
11+
import java.util.concurrent.Future;
12+
import java.util.concurrent.TimeUnit;
13+
14+
public class CafeteriaTest {
15+
public static void main(String[] args) throws Exception {
16+
17+
// Create a blocking queue of size 10
18+
BlockingQueue<Customer> queue = new ArrayBlockingQueue<Customer>(10);
19+
20+
Cafeteria producer = new Cafeteria(queue);
21+
Consumer consumer = new Consumer(queue);
22+
23+
// Create ExecutorService of fixed thread pool size 2
24+
ExecutorService executorService = Executors.newFixedThreadPool(2);
25+
Set<Callable<String>> callables =new HashSet<>();
26+
27+
// Add the producer and consumer to the callables
28+
callables.add(producer);
29+
callables.add(consumer);
30+
31+
// Invoke all the callables
32+
List<Future<String>> results = executorService.invokeAll(callables);
33+
executorService.shutdown();
34+
executorService.awaitTermination(150, TimeUnit.SECONDS);
35+
36+
// Loop through the array and print the return value
37+
for(int i=0;i < results.size();i++)
38+
{
39+
System.out.println(results.get(i).get());
40+
}
41+
}
42+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package simulationproject;
2+
import java.util.ArrayList;
3+
import java.util.Iterator;
4+
5+
public class Cashier {
6+
7+
private ArrayList<Order> orders;
8+
9+
public Cashier() {
10+
// TODO Auto-generated constructor stub
11+
orders = new ArrayList<>();
12+
}
13+
14+
// Validates the given orders and returns the results
15+
public boolean isValidItems(ArrayList<Order> orders) {
16+
Iterator<Order> it = orders.iterator();
17+
boolean isValid = false;
18+
while(it.hasNext()) {
19+
Order or = it.next();
20+
Menu menu = or.getCustMenu();
21+
isValid = (menu.getDrinks().size() <=1 && menu.getMeals().size() <= 1 && menu.getSalads().size() <= 1);
22+
}
23+
return isValid;
24+
}
25+
26+
27+
/**
28+
* @return the orders
29+
*/
30+
public ArrayList<Order> getOrders() {
31+
return orders;
32+
}
33+
34+
/**
35+
* @param orders the orders to set
36+
*/
37+
public void setOrders(ArrayList<Order> orders) {
38+
this.orders.addAll(orders);
39+
}
40+
41+
42+
// Process the given orders and returns the results
43+
public boolean processOrders(ArrayList<Order> orders) {
44+
if(isValidItems(orders)) {
45+
setOrders(orders);
46+
return true;
47+
}
48+
49+
return false;
50+
}
51+
52+
public double totalAmountProceesed() {
53+
double totalAmount = 0.0;
54+
for(Order or: orders) {
55+
totalAmount += or.getCustCost();
56+
}
57+
return totalAmount;
58+
}
59+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package simulationproject;
2+
3+
import java.util.ArrayList;
4+
import java.util.concurrent.BlockingQueue;
5+
import java.util.concurrent.Callable;
6+
7+
public class Consumer implements Callable<String> {
8+
protected BlockingQueue<Customer> queue = null;
9+
private Cashier cashier = null;
10+
11+
public Consumer(BlockingQueue<Customer> queue) {
12+
this.queue = queue;
13+
this.cashier = new Cashier();
14+
}
15+
16+
17+
@Override
18+
public String call() {
19+
String ret = new String();
20+
try {
21+
Thread.sleep(200);
22+
System.out.println("Cashier Started Processing the order......");
23+
do {
24+
Customer cust = queue.take();
25+
ArrayList<Order> orders = new ArrayList<>(1);
26+
orders.add(cust.getOrder());
27+
if(!cashier.processOrders(orders)) {
28+
ret += "Invalid Items,";
29+
} else {
30+
System.out.println(cust);
31+
ret += "Item Processed,";
32+
}
33+
} while(queue.size() > 0);
34+
35+
System.out.println("Cashier finished processing the order......");
36+
System.out.println("--------------------------------------------");
37+
System.out.println("Total number of items Proceesed Today:");
38+
System.out.println(cashier.getOrders());
39+
System.out.println("Total Amount received is " + cashier.totalAmountProceesed() );
40+
41+
} catch (InterruptedException e) {
42+
e.printStackTrace();
43+
} catch( Exception e) {
44+
e.printStackTrace();
45+
}
46+
return ret;
47+
}
48+
}
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
package simulationproject;
2+
import java.util.ArrayList;
3+
4+
public class Customer {
5+
6+
private Order order;
7+
8+
9+
public Customer() {
10+
// TODO Auto-generated constructor stub
11+
order = new Order();
12+
}
13+
14+
public void chooseItems() {
15+
int randomNum = (int)(Math.random()*3+1); // randomize the selection of orders
16+
Drink dr;
17+
Meal meal;
18+
Salad salad;
19+
ArrayList<Drink> drs = new ArrayList<>();
20+
ArrayList<Meal> meals = new ArrayList<>();
21+
ArrayList<Salad> salads = new ArrayList<>();
22+
Menu menu = new Menu();
23+
switch(randomNum) {
24+
case 1:
25+
dr = Drink.COKE;
26+
meal = Meal.BRIYANI;
27+
salad = Salad.GARDEN_SALAD;
28+
drs.add(dr);
29+
meals.add(meal);
30+
salads.add(salad);
31+
menu.setDrinks(drs);
32+
menu.setMeals(meals);
33+
menu.setSalads(salads);
34+
order.setCustName("CUSTOMER-COKECOMBO");
35+
order.setCustMenu(menu);
36+
return;
37+
case 2:
38+
dr = Drink.PEPSI;
39+
meal = Meal.CHICKENNOODLES;
40+
salad = Salad.GENERAL_SALAD;
41+
drs.add(dr);
42+
meals.add(meal);
43+
salads.add(salad);
44+
menu.setDrinks(drs);
45+
menu.setMeals(meals);
46+
menu.setSalads(salads);
47+
order.setCustName("CUSTOMER-PEPSICOMBO");
48+
order.setCustMenu(menu);
49+
return;
50+
case 3:
51+
dr = Drink.WATER;
52+
meal = Meal.VEGNOODLES;
53+
salad = Salad.MACARONI_SALAD;
54+
drs.add(dr);
55+
meals.add(meal);
56+
salads.add(salad);
57+
menu.setDrinks(drs);
58+
menu.setMeals(meals);
59+
menu.setSalads(salads);
60+
order.setCustName("CUSTOMER-WATERCOMBO");
61+
order.setCustMenu(menu);
62+
return;
63+
default:
64+
dr = Drink.UNSUPPORTED;
65+
meal = Meal.UNSUPPORTED;
66+
salad = Salad.UNSUPPORTED;
67+
drs.add(dr);
68+
meals.add(meal);
69+
salads.add(salad);
70+
menu.setDrinks(drs);
71+
menu.setMeals(meals);
72+
menu.setSalads(salads);
73+
order.setCustName("CUSTOMER-UNSUPPCOMBO");
74+
order.setCustMenu(menu);
75+
return;
76+
}
77+
78+
}
79+
80+
/**
81+
* @return the order
82+
*/
83+
public Order getOrder() {
84+
return order;
85+
}
86+
87+
/**
88+
* @param order the order to set
89+
*/
90+
public void setOrder(Order order) {
91+
this.order = order;
92+
}
93+
94+
/* (non-Javadoc)
95+
* @see java.lang.Object#toString()
96+
*/
97+
@Override
98+
public String toString() {
99+
return "[" + order +"]";
100+
}
101+
102+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package simulationproject;
2+
3+
public enum Drink {
4+
COKE(10),
5+
PEPSI(20),
6+
WATER(30),
7+
UNSUPPORTED(-1);
8+
9+
private double itemPrice = 0.0;
10+
11+
private Drink() {
12+
itemPrice = 0.0;
13+
}
14+
private Drink(double price) {
15+
this.itemPrice = price;
16+
}
17+
18+
public double getPrice()
19+
{
20+
return itemPrice;
21+
}
22+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package simulationproject;
2+
3+
public enum Meal {
4+
BRIYANI(10),
5+
CHICKENNOODLES(20),
6+
VEGNOODLES(30),
7+
UNSUPPORTED(-1);
8+
9+
private double itemPrice = 0.0;
10+
11+
private Meal() {
12+
itemPrice = 0.0;
13+
}
14+
private Meal(double price) {
15+
this.itemPrice = price;
16+
}
17+
18+
public double getPrice()
19+
{
20+
return itemPrice;
21+
}
22+
}

0 commit comments

Comments
 (0)
X Tutup