https://github.com/srujayreddy/subsgredient-app
Java-based application that helps users find and substitute ingredients efficiently.
https://github.com/srujayreddy/subsgredient-app
algorithm-optimization csv-integration data-structures educational-project full-stack java junit5 red-black-tree team-collaboration
Last synced: about 1 month ago
JSON representation
Java-based application that helps users find and substitute ingredients efficiently.
- Host: GitHub
- URL: https://github.com/srujayreddy/subsgredient-app
- Owner: SrujayReddy
- License: mit
- Created: 2025-01-18T03:53:23.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2025-01-18T05:00:09.000Z (4 months ago)
- Last Synced: 2025-02-13T01:55:37.557Z (3 months ago)
- Topics: algorithm-optimization, csv-integration, data-structures, educational-project, full-stack, java, junit5, red-black-tree, team-collaboration
- Language: Java
- Homepage:
- Size: 52.7 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Subsgredient
**Subsgredient** is a Java-based application for discovering and substituting ingredients quickly and efficiently. It uses a Red-Black Tree (with multi-key nodes) for optimized data lookup and insertion, powered by a CSV dataset of 2,000+ ingredients.
---
## Table of Contents
1. [Project Overview](#project-overview)
2. [Features](#features)
3. [Technologies & Tools](#technologies--tools)
4. [Setup & Installation](#setup--installation)
5. [Usage](#usage)
6. [Testing](#testing)
7. [Project Structure](#project-structure)
8. [Contributors](#contributors)
9. [License](#license)---
## Project Overview
This project allows users to:
- Insert and store large numbers of ingredients.
- Retrieve potential substitutions or related ingredient data.
- Enjoy fast search times due to an underlying Red-Black Tree implementation.You’ll find additional logs and the `out/` directory included in this repository for reference and demonstration.
---
## Features
- **Ingredient Data Management**: Load ingredients from `ingredients.csv` and manage them in a Red-Black Tree.
- **Multiple Duplicates Handling**: Stores duplicates within a single node (using a KeyList structure).
- **Frontend & Backend Separation**: Clear distinction between the user interface (`FrontendDev`) and the core logic (`BackendImplementation`).
- **Extensive Testing**: Includes JUnit-based test suites for both frontend and backend functionalities.---
## Technologies & Tools
- **Java (11+)**
- **JUnit 5** for testing
- **Makefile** for builds and running tests
- **CSV** for ingredient datasets
- **Git** for version control---
## Setup & Installation
1. **Clone the repository**:
~~~~bash
git clone https://github.com/SrujayReddy/Subsgredient-App.git
cd Subsgredient-App
~~~~2. **Ensure Java 11+** is installed.
If you plan to run tests locally, you may need the `junit5.jar` in your parent folder or configured in your IDE.3. **Review the files** to confirm presence of `.java` files, `Makefile`, `ingredients.csv`, etc.
---
## Usage
You can compile and run using the **Makefile** or standard `javac`/`java` commands.
- **Compile & run the backend**:
~~~~bash
make run
~~~~This compiles `BackendImplementation.java` and runs it.
Alternatively, compile everything manually:
~~~~bash
javac *.java
java BackendImplementation
~~~~*(Adjust class name if you want to run the frontend instead.)*
---
## Testing
We have two main sets of tests: **`BackendDeveloperTests`** and **`FrontendTests`**.
- **Backend Tests**:
~~~~bash
make runBDTests
~~~~Compiles and runs all JUnit 5 tests for the backend.
- **Frontend Tests**:
~~~~bash
make runFDTests
~~~~Compiles and runs all JUnit 5 tests for the frontend.
---
## Project Structure
```
Subsgredient/
├── backend/
│ ├── BackendImplementation.java
│ ├── BackendInterface.java
│ ├── BinarySearchTree.java
│ ├── RedBlackTree.java
│ ├── SortedCollectionInterface.java
│ ├── Ingredient.java
│ ├── IngredientInterface.java
│ ├── IngredientPlaceholder.java
│ ├── IterableMultiKeyRBT.java
│ ├── KeyList.java
│ └── KeyListInterface.java
├── frontend/
│ ├── FrontendDev.java
│ ├── FrontendInterface.java
│ └── TextUITester.java
├── tests/
│ ├── BackendDeveloperTests.java
│ └── FrontendTests.java
├── data/
│ └── ingredients.csv
├── log
├── out/
├── Makefile
├── .gitignore
└── README.md
```- **`out/`** and **`log`** are included for demonstration logs, class outputs, etc.
---
## Contributors
- **Srujay Reddy Jakkidi** *(Backend)*
- **Katie** *(Frontend)*---
## License
This project was developed as part of the **CS 537: Introduction to Operating Systems** course at the University of Wisconsin–Madison. It is shared strictly for educational and learning purposes only.
**Important Notes:**
- Redistribution or reuse of this code for academic submissions is prohibited and may violate academic integrity policies.
- The project is licensed under the [MIT License](https://opensource.org/licenses/MIT). Any usage outside academic purposes must include proper attribution.