
<p>//Three classes: OrderController, OrderUI, Order</p>
<p>import java.util.regex.*; //Use of ArrayList
import java.util.*; //Use of ArrayList
import java.io.*; //Use of InputStreamReader and BufferedReader</p>
<p>//Controller class:
//Methods: initiateOrderDetailsAddition():void ; initiateOrderDetailsView():void ; initiateViewBills():void</p>
<p>class OrderController
{</p>
<p> //Contract: initiateOrderDetailsAddition():void
//Controls the addition of order details
public void initiateOrderDetailsAddition() //UC2(a): Add order details
{
OrderUI orderUI=new OrderUI();
double totalPrice;
Order order;
boolean purchase=false;
String temp="";
ArrayList<Object> orderDetails=new ArrayList<Object>();
orderDetails=orderUI.getOrderDetails();
if(orderDetails!=null) //If no system error occurs
{
temp=CDAManufacturers.validateOrderDetails(orderDetails); //Checks if the customer, product id are in their respective lists
if(temp.equals("")) //If the inputs are valid
{ </p>
<pre class="prettyprint"> order=CDAManufacturers.addOrderDetails(orderDetails); //Add order details to the order list
if(order!=null) //If no system error occurs
orderUI.notifyOrderAdditionSuccess(order); //Prompt user successful addition of order details
else
{
orderUI.displayErrorMessage("Order addition aborted!!!"); //Prompt user that his order process has been aborted
orderUI.displayMenu(); //Display clerk's menu
}
</code></pre>
<p> }
else
{
orderUI.displayErrorMessage(temp); //Prompt user the invalid ids
orderUI.displayMenu(); //Display clerk's menu
}
}
else
{
orderUI.notifyOrderFailure(); //Prompt user failure of order details addition due to system error
} <br />
}</p>
<p> //Contract: initiateOrderDetailsView():void
//Controls the viewing of order details
public void initiateOrderDetailsView() //UC2(b): View order details
{</p>
<pre class="prettyprint">BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
OrderUI orderUI=new OrderUI();
Order orderOb=null;
ArrayList<Object> orderDetails=new ArrayList<Object>();
int orderId=orderUI.getOrderId();
if(orderId!=-1) //If system error occurs
{
orderOb=CDAManufacturers.searchOrderList(orderId); //Check order id is in the order list
if(orderOb!=null) //If order id is in the order list
{
orderDetails=CDAManufacturers.returnOrderDetails(orderOb); //Fetch order details from the order list
orderUI.displayOrderDetails(orderDetails); //Display order details
orderUI.displayMenu(); //clerk's menu is displayed
}
else
{
orderUI.displayErrorMessage("Invalid order ID!!!!");
orderUI.displayMenu(); //clerk's menu is displayed
}
}
else
{
orderUI.displayErrorMessage("Sorry!!! unable to display the order details");
orderUI.displayMenu(); //clerk's menu is displayed
}
</code></pre>
<p> }
//Contract: initiateViewBills():void
//Controls the viewing of bill details
public void initiateViewBills()
{</p>
<pre class="prettyprint">BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
OrderUI orderUI=new OrderUI();
Order orderOb=null;
double bill=0;
ArrayList<Object> orderDetails=new ArrayList<Object>();
int orderId=orderUI.getOrderId();
if(orderId!=-1) //If system error occurs
{
orderOb=CDAManufacturers.searchOrderList(orderId); //Check order id is in the order list
if(orderOb!=null) //If order id is in the order list
{
orderDetails=CDAManufacturers.returnOrderDetailsForBill(orderOb); //Fetch order details from the order list
bill=CDAManufacturers.calculateBill(orderDetails);
bill=bill*1.4;
System.out.println("Rs."+bill);
orderUI.displayMenu(); //clerk's menu is displayed
}
else
{
orderUI.displayErrorMessage("Invalid order ID!!!!");
orderUI.displayMenu(); //clerk's menu is displayed
}
}
else
{
orderUI.displayErrorMessage("Sorry!!! unable to display the order details");
orderUI.displayMenu(); //clerk's menu is displayed
}
</code></pre>
<p> }
}</p>
<p>//---------------------------------------------------------------------------------------------------------------</p>
<p>//Class OrderUI:
//Methods: getOrderDetails():List ; showOrderDetailsAdditionScreen():list ; diplayProductList(list):void
// requestOrderAdditionConfirmation():boolean ; displayErrorMessage(String):void ;notifyAddProduct():String
// displayErrorMessage(String):void ; notifyOrderAdditionSuccess(Object):void ; displayOrderId(int):void
// notifyOrderFailure():void ; displayMenu():void ; getOrderId():int ; showOrderIdScreen():int; displayOrderDetails(List):void ; </p>
<p>class OrderUI
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));</p>
<p> //Contract: getOrderDetails():List
//It reads the order details and returns the order details list
public ArrayList<Object> getOrderDetails()
{
ArrayList<Object> orderDetails=showOrderDetailsAdditionScreen(); //Read order details from user
return(orderDetails);
}</p>
<p> //Contract: showOrderDetailsAdditionScreen():list
//Takes order details and validates the inputs
private ArrayList<Object> showOrderDetailsAdditionScreen()
{
String addProductFlag="";
ArrayList<Object> orderDetails=new ArrayList<Object>();
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
boolean flag=false;
String temp;
try
{
System.out.println();
while(flag==false) //Repeatedly asks for customer id until a feasible id is entered
{
System.out.println("");
System.out.println("Enter customer id: ");
temp=br.readLine();
Pattern p=Pattern.compile("[0-9][0-9]*"); //Input must be a positive integer
Matcher m=p.matcher(temp);
if(m.matches())
{
orderDetails.add(temp);
flag=true;
}
else
System.out.println("A positive integer expected..."); //Prompt user if an incorrect input is entered
}
diplayProductList(CDAManufacturers.returnProductList());
addProductFlag=notifyAddProduct();
while(addProductFlag.equalsIgnoreCase("y")) //Checks if the user wants to buy an product
{
flag=false;
while(flag==false) //Repeatedly asks for product id until a feasible id is entered
{
System.out.println("");
System.out.println("Enter the Product Id ");
temp=br.readLine();
Pattern p=Pattern.compile("[0-9][0-9]*"); //Input must be a positive integer
Matcher m=p.matcher(temp);
if(m.matches())
{
orderDetails.add(temp);
flag=true;
}
else
System.out.println("A positive integer expected..."); //Prompt user if an incorrect input is entered
}
flag=false;
while(flag==false) //Repeatedly asks for product id until a feasible id is entered
{
System.out.println("");
System.out.println("Enter the Product quantity(in numbers): ");
temp=br.readLine();
Pattern p=Pattern.compile("[0-9][0-9]*"); //Input must be a positive integer
Matcher m=p.matcher(temp);
if(m.matches())
{
orderDetails.add(temp);
flag=true;
}
else
System.out.println("A positive integer expected..."); //Prompt user if an incorrect input is entered
}
addProductFlag=notifyAddProduct();
}
return orderDetails;
}
catch(Exception e)
{
return null;
}
}</p>
<p> //Contract: diplayProductlList(list):void
//Displays product list as catalogue
private void diplayProductList(ArrayList<Product> productList)
{
System.out.println("The details of the product available:");
System.out.println("");
System.out.println("Product Id \t\tProduct Name");
System.out.println("");
for(Product productOb:productList)
System.out.println(productOb.getProductId()+"\t\t"+productOb.getProductName()); //Display product id and name
}</p>
<p> //Contract: notifyAddProduct():String
//Ask user if he wants to buy an additional product
public String notifyAddProduct()
{
String temp="";
boolean flag=false;
try
{
while(flag==false) //Repeatedly ask for input until a valid value is entered
{
System.out.println("Want to add Product to order? (Y/N)");
temp=br.readLine();
if(temp.equalsIgnoreCase("y")||temp.equalsIgnoreCase("n")) //Input can only be y or n
flag=true;
else
System.out.println("Please enter Y or N..."); //Prompt user of an invalid input
}
return(temp);
}
catch(Exception e)
{
//System.err.println("Exception: "+e);
return("n");
}
} </p>
<p> //Contract: requestOrderAdditionConfirmation():boolean
//Request user for order confirmation
private boolean requestOrderAdditionConfirmation()
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
boolean flag=false;
String cont="";
try
{
while(flag==false) //Repeatedly ask for input until a valid value is entered
{
System.out.println("Are you sure you want to purchase? (Y/N)");
cont=br.readLine();
if(cont.equalsIgnoreCase("y")||cont.equalsIgnoreCase("n")) //Input can only be y or n
flag=true;
else
System.out.println("Please enter Y or N..."); //Prompt user of an invalid input
}
if(cont.equalsIgnoreCase("n"))
return(false);
else
return(true);
}
catch(Exception e)
{
return false;
}
}</p>
<p> //Contract: displayErrorMessage(String):void
//Displays the error message passed
public void displayErrorMessage(String error)
{
System.out.println();
System.err.println(error); //Diplay the error encountered
}</p>
<p> //Contract: notifyOrderAdditionSuccess(Object):void
//Notify user of successful order and display order id
public void notifyOrderAdditionSuccess(Order order)
{
displayOrderId(order.getOrderId()); //Display order id generated
displayMenu(); //Display clerk's menu
}</p>
<p> //Contract: displayOrderId(int):void
//Displays the order id
private void displayOrderId(int orderId)
{
System.out.println();
System.out.println("The customer with order Id: "+orderId+" has ordered the products successfully");
displayMenu(); //Display clerk's menu
}</p>
<p> //Contract: notifyOrderFailure():void
//Notify user of the order failure
public void notifyOrderFailure()
{
System.out.println();
System.out.println("The order process failed");
displayMenu(); //Display clerk's menu
}</p>
<p> //Contract: displayMenu():void
//Display clerk's menu
public void displayMenu()
{
try
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println();
System.out.println("Press any key to continue");
br.readLine();
}
catch(Exception e)
{
System.err.println("Exception: "+e);
}
MainClerkSystem mainclerkSystemOb=new MainClerkSystem();
mainclerkSystemOb.initiateClerkView();
}</p>
<p> //Contract: getOrderId():int
//Takes order id and returns it
public int getOrderId()
{
int orderId;
orderId=showOrderIdScreen(); //Read order id from user
return(orderId);
}</p>
<p> //Contract: showOrderIdScreen():int
//Take a valid order id from user
private int showOrderIdScreen()
{
String temp;
boolean flag=false;
int orderId=-1;
try
{
while(flag==false) //Repeatedly ask user to enter a value until a feasible input is entered
{
System.out.println("");
System.out.println("Enter the order Id:");
temp=br.readLine();
Pattern p=Pattern.compile("[0-9][0-9]*"); //Input must be a positive integer
Matcher m=p.matcher(temp);
if(m.matches())
{
orderId=Integer.parseInt(temp);
flag=true;
}
else
System.out.println("A positive integer expected..."); //Prompt user of an invalid input
}
return(orderId);
}
catch(Exception e)
{
System.err.println("Exception: "+e);
return(-1);
}
}</p>
<p> //Contract:displayOrderDetails(List):void
//Displays the order details which is passed as a list
public void displayOrderDetails(ArrayList<Object> orderDetails)
{
System.out.println("");
System.out.println("Order id :\t\t"+orderDetails.get(0));
System.out.println("Customer name :\t"+orderDetails.get(1));
System.out.println("Order status :\t"+orderDetails.get(2));
System.out.println("Date Of Order :\t"+orderDetails.get(3));
System.out.println("Date Of Delivery :\t"+orderDetails.get(4));
int x=((orderDetails.size()-4)/2);
System.out.println("");
System.out.println("Quantity ordered \t Products ordered");
for(int i=5;i<orderDetails.size()-x;i++)
{
System.out.println("\t"+orderDetails.get(i+x)+"\t"+orderDetails.get(i));
}
} </p>
<p> }</p>
<p>//----------------------------------------------------------------------------------------------------------</p>
<p>//Class Order:
//Attributes: int id ; String status ; String dateOfOrder ; String dateOfDelivery
// int customerId ; Integer[] productIdList ; Integer[] productQuantityList
//Methods: setOrderId(int):void ; getOrderId():int ; setCustomerId(int):void ; getCustomerId():int
// setProductId(List):void ; getProductId():list ; setProductQuantity(List):void ; getProductQuantity():list
// setStatus(String):void ; getStatus():String ; setDateOfOrder(String):void ; getDateOfOrder():String
// setDateOfDelivery(String):void ; getDateOfDelivery():String ; </p>
<p>class Order
{
private int id;
private String status;
private String dateOfOrder;
private String dateOfDelivery;
private int customerId;
private ArrayList<Integer> productIdList=new ArrayList<Integer>();
private ArrayList<Integer> productQuantityList=new ArrayList<Integer>();</p>
<p> //Contract: setOrderId(int):void
//It modifies order id
public void setOrderId(int id)
{
this.id=id;
}</p>
<p> //Contract: getOrderId():int
//It returns order id
public int getOrderId()
{
return id;
}</p>
<p> //Contract: setCustomerId(int):void
//It modifies customer id
public void setCustomerId(int customerId)
{
this.customerId=customerId;
}</p>
<p> //Contract: getCustomerId():int
//It returns customer id
public int getCustomerId()
{
return customerId;
}</p>
<p> //Contract: setProductId(List):void
//It modifies Product id list
public void setProductId(ArrayList<Integer> tempProductId)
{
productIdList.clear();
for(Integer productId:tempProductId)
productIdList.add(productId);
}</p>
<p> //Contract: getProductId():list
//It returns Product id list
public ArrayList<Integer> getProductId()
{
return productIdList;
}</p>
<p>//Contract: setProductQuantity(List):void
//It modifies Product Quantity list
public void setProductQuantity(ArrayList<Integer> tempProductQuantity)
{
productQuantityList.clear();
for(Integer productQuantity:tempProductQuantity)
productQuantityList.add(productQuantity);
}</p>
<p> //Contract: getProductQuantity():list
//It returns Product Quantity list
public ArrayList<Integer> getProductQuantity()
{
return productQuantityList;
}</p>
<p> //Contract: setStatus(String):void
// It modifies order status
public void setStatus(String status)
{
this.status=status;
}</p>
<p> //Contract: getStatus():String
//It returns order status
public String getStatus()
{
return status;
}</p>
<p> //Contract:setDateOfOrder(String):void
// It modifies date of order
public void setDateOfOrder(String dateOfOrder)
{
this.dateOfOrder=dateOfOrder;
}</p>
<p> //Contract: getDateOfOrder():String
//It returns date of order
public String getDateOfOrder()
{
return dateOfOrder;
}</p>
<p> //Contract:setDateOfDelivery(String):void
// It modifies date of delivery
public void setDateOfDelivery(String dateOfDelivery)
{
this.dateOfDelivery=dateOfDelivery;
}</p>
<p> //Contract: getDateOfDelivery():String
//It returns date of delivery
public String getDateOfDelivery()
{
return dateOfDelivery;
}</p>
<p>}</p>