Files
HW-06-exceptions-and-file-h…/README.md
T
2026-05-15 18:41:05 +00:00

177 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 `099`
- 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 📚
## Assignment Explanation Videos
- https://drive.meshcomp.ir/d/15b6b853da8d4ade97de/
## Exception and Files Workshop
- https://git.meshcomp.ir/AdvancedProgramming1404/WS-05-exceptions-and-file-handling/