docs: add README
This commit is contained in:
@@ -0,0 +1,191 @@
|
||||
# Sixth Assignment — Exceptions and Files
|
||||
|
||||
## Introduction
|
||||
|
||||
In this assignment, you will practice working with:
|
||||
- File reading and writing
|
||||
- Exception handling
|
||||
- CSV data processing
|
||||
- Validation of user/file input
|
||||
- Basic report generation
|
||||
|
||||
The goal is to build a small sales report system that reads product and order information from CSV files, validates the data, calculates totals, and generates a final report file.
|
||||
|
||||
This assignment focuses heavily on using exceptions and file operations correctly while keeping the program stable even when invalid data exists in the input files.
|
||||
|
||||
---
|
||||
|
||||
# Objectives
|
||||
|
||||
By completing this assignment, you should be able to:
|
||||
|
||||
- Read data from CSV files using Java file handling tools
|
||||
- Parse and process text-based data
|
||||
- Use exception handling (`try-catch`) to manage invalid input safely
|
||||
- Validate numeric and logical data
|
||||
- Skip invalid rows without stopping the entire program
|
||||
- Generate and save reports into output files
|
||||
- Organize code into multiple classes and methods
|
||||
- Use Git and GitHub/Gitea workflows professionally
|
||||
|
||||
---
|
||||
|
||||
# Tasks
|
||||
|
||||
## Part 1 — Load Product Data
|
||||
|
||||
Implement the `loadProducts()` method in `Main.java`.
|
||||
|
||||
Requirements:
|
||||
- Read product data from `products.csv`
|
||||
- Each line follows this format:
|
||||
|
||||
```text
|
||||
[productId],[name],[price]
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```text
|
||||
1,Apple iPhone 16,999.99
|
||||
```
|
||||
|
||||
Notes:
|
||||
- The product file data is guaranteed to be valid.
|
||||
- Every line contains exactly two commas.
|
||||
- No additional validation is required for this file.
|
||||
|
||||
You should:
|
||||
- Read each line
|
||||
- Parse the values
|
||||
- Create `Product` objects
|
||||
- Store them inside `productCatalog`
|
||||
|
||||
---
|
||||
|
||||
## Part 2 — Process Order File
|
||||
|
||||
Implement the `processFile()` method in `ReportGenerator.java`.
|
||||
|
||||
The order details file follows this format:
|
||||
|
||||
```text
|
||||
[productId],[quantity],[discountPercent]
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```text
|
||||
1,2,10
|
||||
3,5,25
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Validation Rules
|
||||
|
||||
A line is considered invalid if:
|
||||
- `quantity` is not a valid integer
|
||||
- `discountPercent` is not a valid integer
|
||||
- `quantity <= 0`
|
||||
- `discountPercent` is outside the range `0–99`
|
||||
- The `productId` does not exist in `productCatalog`
|
||||
|
||||
If even one field is invalid, the entire line must be skipped.
|
||||
|
||||
---
|
||||
|
||||
### Important Requirement
|
||||
|
||||
You are strongly encouraged to use:
|
||||
- `try-catch`
|
||||
- exception handling
|
||||
- `NumberFormatException`
|
||||
|
||||
to safely process invalid rows without terminating the program.
|
||||
|
||||
The program should continue processing the remaining lines even if some rows are invalid.
|
||||
|
||||
---
|
||||
|
||||
### Calculations
|
||||
|
||||
For every valid row:
|
||||
|
||||
```text
|
||||
subtotal = quantity × productPrice
|
||||
|
||||
discountValue = subtotal × discountPercent / 100
|
||||
|
||||
finalCost = subtotal - discountValue
|
||||
```
|
||||
|
||||
Update the following totals:
|
||||
|
||||
- `totalQuantity`
|
||||
- `totalFinalCost`
|
||||
- `totalDiscountValue`
|
||||
- `totalInvalidLines`
|
||||
|
||||
---
|
||||
|
||||
## Part 3 — Generate Report
|
||||
|
||||
Implement the `saveReport()` method.
|
||||
|
||||
The generated report should contain:
|
||||
- Total quantity
|
||||
- Total final cost
|
||||
- Total discount value
|
||||
- Number of invalid lines
|
||||
|
||||
Example:
|
||||
|
||||
```text
|
||||
===== SALES REPORT =====
|
||||
|
||||
Total Quantity: 25
|
||||
Total Final Cost: 1520.50
|
||||
Total Discount Value: 210.75
|
||||
Invalid Lines: 3
|
||||
```
|
||||
|
||||
Save the report into an output file.
|
||||
|
||||
---
|
||||
|
||||
# Submission ⌛
|
||||
|
||||
Before submitting:
|
||||
|
||||
- Add your mentor as a contributor to the repository
|
||||
- Create a `develop` branch for implementation
|
||||
- Use Git regularly with meaningful commits
|
||||
- Push all code to the remote repository
|
||||
- Push the answers/documentation file if required
|
||||
- Create a Pull Request from `develop` → `main`
|
||||
|
||||
---
|
||||
|
||||
# Additional Resources 📚
|
||||
|
||||
## TA Explanations
|
||||
-
|
||||
|
||||
## Java File Handling
|
||||
- https://docs.oracle.com/javase/tutorial/essential/io/
|
||||
|
||||
## Java Exceptions
|
||||
- https://docs.oracle.com/javase/tutorial/essential/exceptions/
|
||||
|
||||
## Scanner Class
|
||||
- https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html
|
||||
|
||||
## Try-Catch in Java
|
||||
- https://www.w3schools.com/java/java_try_catch.asp
|
||||
|
||||
## Git Branching
|
||||
- https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell
|
||||
|
||||
## CSV Basics
|
||||
- https://en.wikipedia.org/wiki/Comma-separated_values
|
||||
Reference in New Issue
Block a user