import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.io.*;
import java.util.Scanner;
public class Application{
public static void main (String[] args)
{
try{
//Input File
File input = new File ("squalmart.in");
if (!input.exists() && !input.isFile()) {
System.err.println("File " + input.getName() + " does not exist.");
System.exit(1);
}
Scanner inputFile = new Scanner(input);
inputFile.useDelimiter("\t");
int totalLines = inputFile.nextInt();
int n = 0;
product[] p = new product [totalLines];
for (int i = 0; i < totalLines; i++) {
String Product_Category = inputFile.next();
String Product_Name = inputFile.next();
int Quantity_On_Hand=0;
if (inputFile.hasNextInt()) {
Quantity_On_Hand = inputFile.nextInt();
}
else{
System.err.println ("The Quantity_On_Hand for this product is not a valid integer value. The input line has been discarded.");
inputFile.nextLine();
continue;
}
int Number_Sold = 0;
if (inputFile.hasNextInt()) {
Number_Sold = inputFile.nextInt();
}
else{
System.err.println ("The Number_Sold for this product is not a valid integer value. The input line has been discarded.");
inputFile.nextLine();
continue;
}
float Product_Price = 0;
if (inputFile.hasNextFloat()) {
Product_Price = inputFile.nextFloat();
}
else{
System.err.println ("The Product_Price for this product is not a valid value. The input line has been discarded.");
inputFile.nextLine();
continue;
}
float Product_Cost = 0;
if (inputFile.hasNextFloat()) {
Product_Cost = inputFile.nextFloat();
}
else{
System.err.println ("The Product_Cost for this product is not a valid value. The input line has been discarded.");
inputFile.nextLine();
continue;
}
if (Product_Category.equals("Shoes") || Product_Category.equals("Men's Wear") || Product_Category.equals("Women's Wear") || Product_Category.equals("Household") || Product_Category.equals("Home and Garden") || Product_Category.equals("Automotive")) {
p[n]=new product();
p[n].nproduct (Product_Category, Product_Name, Quantity_On_Hand, Number_Sold, Product_Price, Product_Cost);
n++;
System.out.println(n);
}
else {
System.err.println("The category does not match one of the possible categories. The input line has been discarded.");
System.err.println(Product_Category + Product_Name + Quantity_On_Hand + Number_Sold + Product_Price + Product_Cost);
inputFile.nextLine();
continue;
}
p[n]=new product();
p[n].nproduct (Product_Category, Product_Name, Quantity_On_Hand, Number_Sold, Product_Price, Product_Cost);
n++;
}
System.out.println("howdy");
//Starts output file
String outputFile = "squalmart.out";
PrintWriter outputStream = new PrintWriter(outputFile);
//Category Report
outputStream.println("Category Report:");
outputStream.println("================");
outputStream.println(" Item Price # In Stock");
outputStream.println(" -------------------------------------------------");
outputStream.flush();
DecimalFormat fmt = new DecimalFormat ("$####.00");
for (int j=0; j<n; j++) {
if (p[j].skip()) {
continue;
}
outputStream.println(p[j].Product_Category());
if (p[j].Quantity_On_Hand()==0) {
outputStream.println("\t" + p[j].Product_Name() + "\t\t " + fmt.format(p[j].Product_Price()) + "\t\tCurrently out of stock");
}
else {
outputStream.println("\t" + p[j].Product_Name() + "\t\t " + fmt.format(p[j].Product_Price()) + "\t\t" + p[j].Quantity_On_Hand());
}
for (int k=j+1; k<n; k++) {
if (p[j].Product_Category().equals(p[k].Product_Category())) {
if (p[k].Quantity_On_Hand()==0) {
outputStream.println("\t" + p[k].Product_Name() + "\t\t " + fmt.format(p[k].Product_Price()) + "\t\tCurrently out of stock");
}
else {
outputStream.println("\t" + p[k].Product_Name() + "\t\t " + fmt.format(p[k].Product_Price()) + "\t\t" + p[k].Quantity_On_Hand());
}
p[k].skip(true);
}
}
}
//Sales Report
outputStream.println("Sales Report:");
outputStream.println("==============");
outputStream.println(" Item Revenue Profit");
outputStream.println(" -----------------------------------------------------");
for (int j=0; j<n; j++) {
if (p[j].skip()) {
continue;
}
outputStream.println(p[j].Product_Category());
if (p[j].Number_Sold() == 0) {
outputStream.println("\t" + p[j].Product_Name() + " Not Sold");
}
else {
outputStream.println("\t" + p[j].Product_Name() + " " + fmt.format(p[j].Revenue()) + " " + fmt.format(p[j].Profit()));
}
for (int k=j+1; k<n; k++) {
if (p[j].Product_Category() .equals(p[k].Product_Category())) {
outputStream.println(" " + p[k].Product_Name() + " " + fmt.format(p[k].Revenue()) + " " + fmt.format(p[k].Profit()));
}
}
}
//Manager's Report
outputStream.println("Manager's Report:");
outputStream.println("=================");
outputStream.println(" Total Number of Products Sold Gross Sales");
outputStream.println(" ------------------------------------------------------");
float totalSales=0;
int totalSold=0;
for (int j=0; j<n; j++) {
totalSold=totalSold+p[j].Number_Sold();
totalSales=totalSales+p[j].Revenue();
}
outputStream.println(" " + totalSold + " " + fmt.format(totalSales));
outputStream.flush();
}
catch (IOException e) {
System.err.println("Caught IOException: " + e.getMessage());
}
}
}