import java.util.*;
public class SnackBar
{
// Only one KeyboardInput object needs to be created. It can be
// shared amongst the methods by storing a reference to it in
// an instance variable.
private KeyboardInput in;
// The menu used by an instance of this class.
private Menu menu;
// The order list
private OrderList orderList;
public SnackBar()
{
in = new KeyboardInput();
menu = new Menu();
orderList = new OrderList();
}
/**
* The main loop of the program. Keep asking the user to enter
* a command number until the user quits.
*/
public void go()
{
while (true)
{
displayCommands();
int command = getCommand();
if (quitSelected(command))
{
break;
}
runCommand(command);
}
}
private void displayCommands()
{
System.out.println("\nSnack Bar");
System.out.println("1. Display Menu");
System.out.println("2. Add Menu Item");
System.out.println("3. Remove Menu Item");
System.out.println("4. Change Price of Menu Item");
System.out.println("5. Save Menu");
System.out.println("6. Load Menu");
System.out.println("7. Enter Order");
System.out.println("8. Display Order");
System.out.println("9. Quit");
}
private int getCommand()
{
System.out.print("\nSelect command: ");
return in.readInteger();
}
private boolean quitSelected(int n)
{
return (n == 9)? true : false;
}
private void runCommand(int item)
{
switch (item)
{
case 1:
displayMenu();
break;
case 2:
addMenuItem();
break;
case 3:
removeMenuItem();
break;
case 4:
changePrice();
break;
case 5:
saveMenu();
break;
case 6:
loadMenu();
break;
case 7:
enterOrder();
break;
case 8:
displayOrder();
break;
default:
System.out.println("\nSorry - don't recognise that input, try again");
}
}
/**
* Display the food menu.
*/
private void displayMenu()
{
System.out.println("Snack Bar Menu");
System.out.println("--------------");
ArrayList items = menu.getMenuItems();
for (int i = 0; i < items.size(); i++)
{
MenuItem item = (MenuItem) items.get(i);
System.out.println((i + 1) + ". " + item.getName() + "\t\t"
+ item.getPrice());
}
}
private void addMenuItem()
{
System.out.println("\nAdd Menu Item");
System.out.print("Name: ");
String name = in.readString();
System.out.print("Price (in pence): ");
int price = in.readInteger();
menu.addItem(name, price);
}
private void removeMenuItem()
{
displayMenu();
ArrayList items = menu.getMenuItems();
int toRemove = 0;
System.out.print("Enter number of menu item to remove: ");
toRemove = in.readInteger();
if ((toRemove > 0) && (toRemove <= items.size()))
{
menu.removeItem(toRemove - 1);
}
else
{
System.out.println("Invalid item number, nothing done");
}
}
private void changePrice()
{
displayMenu();
ArrayList items = menu.getMenuItems();
int toChange = 0;
System.out.print("Enter number of menu item to change price of: ");
toChange = in.readInteger();
if ((toChange > 0) && (toChange <= items.size()))
{
System.out.println("Enter new price: ");
int newPrice = in.readInteger();
menu.changeItemPrice(toChange - 1, newPrice);
}
else
{
System.out.println("Invalid item number, nothing done");
}
}
private void saveMenu()
{
System.out.print("Enter file name: ");
String fileName = in.readString();
FileOutput output = new FileOutput(fileName);
menu.save(output);
output.close();
}
private void loadMenu()
{
System.out.print("Enter file name: ");
String fileName = in.readString();
FileInput input = new FileInput(fileName);
menu.load(input);
input.close();
}
private void enterOrder()
{
System.out.println("\nNew Order");
System.out.println("---------");
Order order = enterOrderItems();
orderList.addOrder(order);
}
private Order enterOrderItems()
{
Order order = new Order();
ArrayList items = menu.getMenuItems();
while (true)
{
displayMenu();
System.out.print("Enter menu item number or press ENTER only to stop: ");
int menuitem = in.readInteger();
if (menuitem == 0)
{
break;
}
if ((menuitem > 0) && (menuitem <= items.size()))
{
order.addOrderItem((MenuItem) items.get(menuitem - 1));
}
}
return order;
}
private void displayOrder()
{
ArrayList orders = orderList.getOrders();
if (orders.size() == 0)
{
System.out.println("There are no orders");
}
else
{
System.out.println("There are " + orders.size() + " orders");
System.out.println("numbered from 1 to " + orders.size());
System.out.print("Enter number of order to display: ");
int orderNumber = in.readInteger();
if ((orderNumber > 0) && (orderNumber <= orders.size()))
{
Order order = (Order) orders.get(orderNumber - 1);
displayOrderItems(order);
}
}
}
private void displayOrderItems(Order order)
{
System.out.println("Order contains:");
ArrayList orderItems = order.getOrderItems();
for (int i = 0; i < orderItems.size(); i++)
{
MenuItem item = (MenuItem) orderItems.get(i);
System.out.println(item.getName() + "\t\t" + item.getPrice());
}
System.out.println("Total: " + order.getTotal());
}
// The main method is as simple as possible, just creating
// a PhoneBook object and calling its go method.
public static void main(String[] args)
{
SnackBar snackBar = new SnackBar();
snackBar.go();
}
}