diff --git a/src/.idea/.gitignore b/src/.idea/.gitignore
new file mode 100644
index 0000000..ab1f416
--- /dev/null
+++ b/src/.idea/.gitignore
@@ -0,0 +1,10 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Ignored default folder with query files
+/queries/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/src/.idea/misc.xml b/src/.idea/misc.xml
new file mode 100644
index 0000000..a20905f
--- /dev/null
+++ b/src/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/.idea/modules.xml b/src/.idea/modules.xml
new file mode 100644
index 0000000..3d0bbe7
--- /dev/null
+++ b/src/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/.idea/vcs.xml b/src/.idea/vcs.xml
new file mode 100644
index 0000000..6c0b863
--- /dev/null
+++ b/src/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/Main.java b/src/main/java/Main.java
index 148a46e..8117402 100644
--- a/src/main/java/Main.java
+++ b/src/main/java/Main.java
@@ -13,17 +13,20 @@ public class Main {
if (input == null) {
throw new IOException("products.csv not found");
}
+
Scanner scanner = new Scanner(input);
- // TODO:
- // - Read each line from products.csv
- // - For each line, parse productId, name, and price
- // - The format of the file is like this:
- // [productId],[name],[price]
- // - Store Product objects in the productCatalog ArrayList
+ while (scanner.hasNextLine())
+ {
+ String line = scanner.nextLine();
+ String[] parts = line.split(",");
+ int id = Integer.parseInt(parts[0].trim());
+ String name = parts[1].trim();
+ Double price = Double.parseDouble(parts[2].trim());
- // NOTE
- // - The data in products.csv is guaranteed to be valid.
+ productCatalog.add(new Product(id, name, price));
+ }
+ scanner.close();
}
public static void main(String[] args)
diff --git a/src/main/java/ReportGenerator.java b/src/main/java/ReportGenerator.java
index 8eb458b..c07130f 100644
--- a/src/main/java/ReportGenerator.java
+++ b/src/main/java/ReportGenerator.java
@@ -1,4 +1,10 @@
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.PrintWriter;
import java.util.List;
+import java.util.Scanner;
+import java.util.SortedMap;
public class ReportGenerator {
@@ -17,67 +23,84 @@ public class ReportGenerator {
public void processFile()
{
- // TODO:
- // 1. Open the order details CSV file
- // 2. Read the file line by line
- // 3. Split each line using comma delimiter
- // (each line is guaranteed to contain exactly two commas)
- // 4. Each line contains exactly 3 values in the format:
- // [productId],[quantity],[discountPercent]
- // 5. Attempt to convert values:
- // - productId -> int
- // - quantity -> int
- // - discountPercent -> int
- // NOTE:
- // - quantity and discountPercent may contain invalid characters
- // (e.g., letters instead of numbers).
- // - If parsing any value fails (NumberFormatException),
- // the entire line must be considered invalid.
- // - Use try-catch blocks and exception handling to safely
- // handle parsing and validation errors without stopping
- // the processing of the remaining lines.
- // 6. Validate parsed values:
- // - productId must be greater than 0
- // - quantity must be greater than 0
- // - discountPercent must be between 0 and 99 inclusive
- // 7. Look for a Product in productList that matches productId
- // 8. If no Product with that ID exists in the catalog,
- // the entire line is considered invalid
- // 9. If all values are valid and the product exists, calculate:
- // subtotal = quantity * product price
- // discountValue = subtotal * discountPercent / 100
- // finalCost = subtotal - discountValue
- // 10. Update report totals:
- // - totalQuantity += quantity
- // - totalFinalCost += finalCost
- // - totalDiscountValue += discountValue
- // 11. If any parsing error, validation failure, or missing product occurs:
- // - increment totalInvalidLines
- // - skip the line and continue processing the next line
- // 12. Close all file resources
+ try (Scanner scanner = new Scanner(new File(ordersFilePath)))
+ {
+ while (scanner.hasNextLine())
+ {
+ String line = scanner.nextLine();
+ String[] parts = line.split(",");
+
+ try
+ {
+ int productId = Integer.parseInt(parts[0].trim());
+ int quantity = Integer.parseInt(parts[1].trim());
+ int discountPercent = Integer.parseInt(parts[2].trim());
+
+ if (productId <= 0 || discountPercent > 99 || discountPercent < 0 || quantity <= 0)
+ {
+ totalInvalidLines++;
+ continue;
+ }
+
+ Product product = null;
+ for (Product p: productList)
+ {
+ if (p.getProductID() == productId)
+ {
+ product = p;
+ break;
+ }
+ }
+
+ if (product == null)
+ {
+ totalInvalidLines++;
+ continue;
+ }
+ else
+ {
+ double subtotal = quantity * product.getPrice();
+ double discountValue = subtotal * discountPercent / 100;
+ double finalCost = subtotal - discountValue;
+
+ totalQuantity += quantity;
+ totalFinalCost += finalCost;
+ totalDiscountValue += discountValue;
+ }
+ }
+ catch (NumberFormatException e)
+ {
+ totalInvalidLines++;
+ continue;
+ }
+ }
+ }
+ catch (FileNotFoundException e)
+ {
+ System.err.println("Not found");
+ return;
+ }
}
public void saveReport()
{
- // TODO:
- // 1. Build a formatted report string
- // 2. Include:
- // - total quantity
- // - total final cost
- // - total discount value
- // - total invalid lines
- // 3. Create/open output report file (name it report.txt)
- // 4. Write report string into file
- // 5. Handle file writing exceptions
- // 6. Close writer resources
+ try
+ {
+ PrintWriter writer = new PrintWriter("report.txt");
- /* Example Structure
- ========= SALES REPORT =========
- Total Quantity Sold: 42
- Total Final Cost: $1520.75
- Total Discount Value: $230.50
- Invalid Rows: 3
- ================================
- */
+ writer.println("===== SALES REPORT =====");
+ writer.println("Total Quantity Sold: " + totalQuantity);
+ writer.println("Total Final Cost: " + String.format("%.2f", totalFinalCost));
+ writer.println("Total Discount Value: " + String.format("%.2f", totalDiscountValue));
+ writer.println("Invalid Rows: " + totalInvalidLines);
+
+ writer.close();
+
+ System.out.println("Report has written successfuly");
+ }
+ catch (IOException e)
+ {
+ System.err.println("Failed to write the report!");
+ }
}
}
\ No newline at end of file