-
Notifications
You must be signed in to change notification settings - Fork 3
/
CoffeeMaker.java
262 lines (228 loc) · 8.45 KB
/
CoffeeMaker.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Scanner;
public class CoffeeMaker {
// public Vessel milkVessel, coffeeVessel, waterVessel, chocolateVessel;
public Vessel rVessel;
public Coffee esp,cap,moc,lat;
public static boolean condition = true;
int qSel = 0;
Coffee[] coffeeTypes = new Coffee[4];
Coffee selectedCoffee;
public CoffeeMaker(){
init();
}
public boolean isEnough(int quantity, Coffee ctype){
int rMilk = quantity * ctype.getMilkAmt();
int rCoffee = (quantity * ctype.getCoffeeAmt());
int rWater = (quantity * ctype.getWaterAmt());
int rChocolate = (quantity * ctype.getChocolateAmt());
boolean isMilk = rMilk <= rVessel.getMilkCurrentVolume();
boolean isCoffee = rCoffee <= rVessel.getCoffeeCurrentVolume();
boolean isWater = rWater <= rVessel.getWaterCurrentVolume();
boolean isChocolate = rChocolate <= rVessel.getChocolateCurrentVolume();
getStock();
System.out.println("\nPlease add the following for your "+ctype.name+"\n"+
"Milk: "+rMilk+", Coffee: "+ rCoffee+", Water: "+rWater+", Chocolate: "+rChocolate+"\n");
return (isMilk && isCoffee && isWater && isChocolate);
}
public void getStock(){
System.out.println("\n\n----------------------Current stock-------------------- \n"+
"The machine currently has: "+
"Milk: "+rVessel.getMilkCurrentVolume()+", Coffee: "+ rVessel.getCoffeeCurrentVolume()+
", Water: "+rVessel.getWaterCurrentVolume()+", Chocolate: "+rVessel.getChocolateCurrentVolume());
}
public void init(){
rVessel = new Vessel(0);
rVessel.setMaxVolume(10);
esp = new Coffee(0, 2, 4, 0, "Espresso");
cap = new Coffee(2, 1, 4, 0, "Cappucino");
moc = new Coffee(1, 2, 3, 1, "Mocha");
lat = new Coffee(3, 2, 4, 0, "Latte");
coffeeTypes[0] = esp;
coffeeTypes[1] = cap;
coffeeTypes[2] = moc;
coffeeTypes[3] = lat;
}
public void mix(int q, Coffee cType){
rVessel.setMilkCurrentVolume(rVessel.getMilkCurrentVolume() - (q * cType.getMilkAmt()));
rVessel.setCoffeeCurrentVolume(rVessel.getCoffeeCurrentVolume() - (q * cType.getCoffeeAmt()));
rVessel.setWaterCurrentVolume(rVessel.getWaterCurrentVolume() - (q * cType.getWaterAmt()));
rVessel.setChocolateCurrentVolume(rVessel.getChocolateCurrentVolume() - (q * cType.getChocolateAmt()));
saveIt();
}
public void load(boolean coffeeIsSelected){
Scanner in_2 = new Scanner(System.in);
System.out.println("\n--------------------Ingredient Refilling Menu-----------------------\n");
int usedMilk = rVessel.getMaxVolume() - rVessel.getMilkCurrentVolume();
int usedCoffee = rVessel.getMaxVolume() - rVessel.getCoffeeCurrentVolume();
int usedWater = rVessel.getMaxVolume() - rVessel.getWaterCurrentVolume();
int usedChocolate = rVessel.getMaxVolume() - rVessel.getChocolateCurrentVolume();
int qMilk,qWater,qCoffee,qChocolate;
if(usedMilk > 0){
System.out.print("Load milk by at most: "+usedMilk + "-units\nPlease input a value: ");
qMilk = in_2.nextInt();
rVessel.setMilkCurrentVolume(rVessel.getMilkCurrentVolume() + overflow(usedMilk, qMilk));
}
if(usedWater > 0){
System.out.print("Load water by at most: "+usedWater + "-units\nPlease input a value: ");
qWater = in_2.nextInt();
rVessel.setWaterCurrentVolume(rVessel.getWaterCurrentVolume() + overflow(usedWater,qWater));
}
if(usedCoffee > 0){
System.out.print("Load coffee by at most: "+ usedCoffee + "-units\nPlease input a value: ");
qCoffee = in_2.nextInt();
rVessel.setCoffeeCurrentVolume(rVessel.getCoffeeCurrentVolume() + overflow(usedCoffee,qCoffee));
}
if(usedChocolate > 0){
System.out.print("Load chocolate by at most: "+usedChocolate + "-units\nPlease input a value: ");
qChocolate = in_2.nextInt();
rVessel.setChocolateCurrentVolume(rVessel.getChocolateCurrentVolume() + overflow(usedChocolate,qChocolate));
}
saveIt();
if(coffeeIsSelected)
makeIt(qSel, selectedCoffee);
}
public int overflow(int max, int input){
if (input > max) {
System.out.println("\n******\nYou provided a quantity greater than what's needed\n"+
"The machine is taking "+max+"-units instead\n******\n");
return max;
} else if (input < 0) {
System.out.println("\n******\nNegative values are considered as ZERO-unit\n******\n");
return 0;
} else{
return input;
}
}
private void makeIt(int q, Coffee cfSelected) {
if (isEnough(q, cfSelected)){
mix(q, cfSelected);
brew(q, cfSelected);
}else{
logIt("Not enough ingredients to make "+cfSelected.getName()+" proceeding to refill");
System.out.println("Refill ingredients to make the " + cfSelected.name);
load(true);
}
}
public void brew(int q, Coffee cfSel){
int i = 0;
while (i < 4){
try{
Thread.sleep(400);
System.out.println("Brewing...");
}catch(InterruptedException e){
Thread.currentThread().interrupt();
}
i++;
}
boolean plural = q > 1;
System.out.println("Here "+(plural ? "are" : "is")+" your " + q + " cup"+(plural ? "s" : "")+" of " + cfSel.getName()+"\n");
getStock();
}
public void saveIt(){
File file = new File("save.txt");
// creates the file
try {
String saveOut = rVessel.getMilkCurrentVolume()+"\n"+ rVessel.getCoffeeCurrentVolume()+
"\n"+rVessel.getWaterCurrentVolume()+"\n"+rVessel.getChocolateCurrentVolume();
file.createNewFile();
FileWriter writer = new FileWriter(file);
writer.write(saveOut);
writer.flush();
writer.close();
logIt("Saved data " + saveOut.replace('\n', ','));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
logIt("file error when saving coffee-maker state to file");
}
}
public void logIt(String mes){
File file = new File("log.txt");
// creates the file
try {
if(!file.exists()){
file.createNewFile();
}
String time = LocalDateTime.now().toString();
//file.i.createNewFile();
FileWriter writer = new FileWriter(file,true);
writer.write(time + " : " + mes+"\n");
writer.flush();
writer.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
public void loadIt(){
Scanner fileIn;
try {
fileIn = new Scanner(new FileReader("save.txt"));
ArrayList<Integer> inFile = new ArrayList<Integer>();
while(fileIn.hasNextLine()){
inFile.add(Integer.parseInt(fileIn.nextLine()));
}
rVessel.setMilkCurrentVolume(inFile.get(0));
rVessel.setCoffeeCurrentVolume(inFile.get(1));
rVessel.setWaterCurrentVolume(inFile.get(2));
rVessel.setChocolateCurrentVolume(inFile.get(3));
logIt("Loading data from file " + inFile.get(0) + ", " + inFile.get(1) + ", "+ inFile.get(2) + ", "+ inFile.get(3));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//main method
public static void main(String[] args){
CoffeeMaker coffeeMaker = new CoffeeMaker();
coffeeMaker.loadIt();
Scanner in = new Scanner(System.in);
int type;
coffeeMaker.getStock();
System.out.print("Welcome. \nWould you like to refill? '1'-YES, '2'-NO ");
if (in.nextInt() == 1) {
coffeeMaker.load(false);
}
while(condition){
condition = false;
try{
System.out.print("\nNumber of cups: - 1 or 2 ");
coffeeMaker.qSel = in.nextInt();
if(coffeeMaker.qSel <= 2 && coffeeMaker.qSel > 0 ){
System.out.print("Coffee type? \n'1' Espresso\n'2' Cappucino\n'3' Mocha\n'4' Latte ");
type = in.nextInt();
if (type < 5 && type > 0){
Coffee cfSelected = coffeeMaker.coffeeTypes[type - 1];
coffeeMaker.selectedCoffee = cfSelected;
System.out.println("You selected "+cfSelected.getName());
//System.out.println("Is enough: "+ coffeeMaker.isEnough(q, coffeeTypes[type - 1]));
coffeeMaker.makeIt(coffeeMaker.qSel, cfSelected);
}
}else{
System.out.println("Please input a quantity greater than 0 and and less than 3");
}
}catch(NumberFormatException e){
System.out.println("Wrong number input entered");
}
System.out.println("Do you want to make another Coffee? \'1' - Yes or '2' - No");
int input = in.nextInt();
if (input == 2) {
System.out.println("Thank you... \nEnjoy your coffee");
break;
}else if(input == 1){
condition = true;
continue;
}else{
System.out.println("Wrong input entered");
}
}
}
}