Skip to content

Latest commit

 

History

History
278 lines (184 loc) · 10.4 KB

File metadata and controls

278 lines (184 loc) · 10.4 KB

Java Learning Journey

A consolidated monorepo of Java projects from CMSC203 (Object-Oriented Programming) and CMSC204 (Data Structures) at Montgomery College, demonstrating progressive mastery of core computer science concepts.

Author: Melvin Sere Institution: Montgomery College Language: Java


Repository Structure

Java-Learning-Journey/
├── Data-Structures/
│   ├── Double-Linked-List
│   ├── Generic-DataSet
│   ├── Graph-Shortest-Path
│   └── Stack-Queue-Notation
├── Object-Oriented-Design/
│   ├── Bar-Chart-Lab
│   ├── Beverage-Shop
│   ├── ESP-Game
│   ├── GradeBook
│   ├── Holiday-Bonus-2D-Arrays
│   ├── Movie-Lab
│   ├── Patient-Records
│   └── Property-Management
├── Algorithms/
│   ├── Caesar-Bellaso-Cipher
│   ├── Password-Checker
│   └── Recursion-Lab
└── Archive/           ← source under recovery; class signatures preserved below
    ├── Course-Database
    ├── Hash-Lab
    └── Morse-Code-Tree

Data Structures

Double-Linked-List

A generic doubly linked list supporting O(1) head/tail insertion and bidirectional traversal, plus a sorted variant that uses a Comparator to maintain order on insert.

Skills: Generic type parameters, node pointer manipulation, ListIterator, Comparator, inheritance (SortedDoubleLinkedList extends BasicDoubleLinkedList)

Key classes: BasicDoubleLinkedList<T>, SortedDoubleLinkedList<T>


Generic-DataSet

Demonstrates bounded generics with a Measurable interface used to compute averages and find maxima over heterogeneous collections (BankAccount, BaseballPlayer).

Skills: <T extends Measurable>, interface-driven design, generic utility classes

Key classes: DataSetGen<T>, Measurable, BankAccount, BaseballPlayer


Graph-Shortest-Path

A weighted undirected graph of Town nodes connected by Road edges, with Dijkstra's algorithm for shortest-path queries exposed through a JavaFX GUI.

Skills: Adjacency-map graph representation, Dijkstra's algorithm, Set/Map collections, JavaFX event handling

Key classes: Graph, TownGraphManager, Town, Road, GraphInterface<V,E>, TownGraphManagerInterface


Stack-Queue-Notation

Custom generic Stack and Queue implementations built on array internals, used by a Notation utility to convert infix expressions to postfix and evaluate them — with a Swing GUI.

Skills: Stack/queue ADTs, infix-to-postfix conversion, custom exception hierarchy (StackOverflowException, QueueUnderflowException, etc.), QueueInterface/StackInterface contracts

Key classes: MyStack<T>, MyQueue<T>, Notation, NotationGui


Object-Oriented Design

Bar-Chart-Lab

Swing-based 2D bar chart that renders a frequency distribution from a two-dimensional integer array, implementing ImageObserver for rendering updates.

Skills: JFrame/Graphics, 2D arrays, ImageObserver, event-driven Swing

Key classes: BarChart, TwoDimArrayPractice


Beverage-Shop

A beverage ordering system modelling a shop that sells Coffee, Alcohol, and Smoothie objects — all subclasses of the abstract Beverage class — with Day and Size enums and a Customer/Order/BevShop business-logic layer.

Skills: Abstract classes, inheritance hierarchy, polymorphism, enums, interface contracts (BevShopInterface, OrderInterface)

Key classes: Beverage (abstract), Coffee, Alcohol, Smoothie, Order, BevShop, Customer


ESP-Game

A console-based ESP colour-guessing game that reads a colour list from a file, picks a random colour each round, and scores the player's guesses over three rounds.

Skills: File I/O with Scanner, Random, loop-based game logic, string comparison

Key classes: ESPGame


GradeBook

An array-backed gradebook that tracks student scores, computes the sum and minimum, and calculates a final score by dropping the lowest grade.

Skills: Array traversal, encapsulation, method decomposition

Key classes: GradeBook


Holiday-Bonus-2D-Arrays

Reads a ragged 2D salary array from a file, computes row/column totals and averages, finds the highest and lowest values, and calculates holiday bonuses for the most- and least-productive stores.

Skills: Ragged (jagged) 2D arrays, file parsing with Scanner, PrintWriter, statistical reduction

Key classes: TwoDimRaggedArrayUtility, HolidayBonus


Movie-Lab

Introductory CMSC203 lab that builds a Movie object from user input (title, rating, tickets sold) and prints a formatted summary — two tasks demonstrating progressive refactoring.

Skills: Object construction, getters/setters, Scanner, toString()

Key classes: MovieDriverTask1, MovieDriverTask2


Patient-Records

Models a patient with full name, address, and emergency contact using multiple constructors and helper methods (buildFullName(), buildFullAddress(), buildEmergencyContact()), plus a Procedure value object.

Skills: Constructor overloading, encapsulation, composed toString(), value objects

Key classes: Patient, Procedure, PatientDriverApp


Property-Management

A management company that tracks up to five rental Property objects positioned on a 10×10 Plot grid. Properties may not overlap; the class computes the highest-rent property and total rent.

Skills: Object composition (Property has-a Plot), input validation, array-backed collection, toString() formatting

Key classes: ManagementCompany, Property, Plot


Algorithms

Caesar-Bellaso-Cipher

Implements two classical substitution ciphers operating over a printable ASCII range (space–underscore): the single-key Caesar cipher and the multi-key Bellaso cipher, with wrap-around arithmetic.

Skills: Character-level arithmetic, modular wrap-around, static utility methods, StringBuilder

Key classes: CryptoManager


Password-Checker

Validates passwords against six rules (length, upper/lowercase, digit, special character, no sequence of same character) and processes a list of passwords from a file, reporting all weak passwords. Includes a JavaFX GUI.

Skills: Custom checked/unchecked exception hierarchy (8 exception classes), ArrayList, Pattern/Matcher, JavaFX

Key classes: PasswordCheckerUtility, InvalidSequenceException, LengthException, NoDigitException, NoUpperAlphaException, NoLowerAlphaException, NoSpecialCharacterException, WeakPasswordException, UnmatchedException


Recursion-Lab

Recursive summation over an Integer[] using an index parameter, with a driver that pre-fills the array and invokes the method.

Skills: Recursive base case / recursive case, call-stack mechanics

Key classes: ArraySum, ArraySumDriver


Archive — Source Under Recovery

The three projects below were committed to their repositories without .java source files (only compiled .class bytecode) or without code at all. Source is being recovered from local backups. The class signatures extracted via javap are preserved here so the design intent is not lost.


Morse-Code-Tree (CMSC204 Assignment 5)

A binary tree that encodes the Morse code alphabet: dots traverse left, dashes traverse right. The MorseCodeConverter utility decodes a Morse string or file into English by traversing the tree.

Skills demonstrated (from bytecode): Binary tree traversal, recursive insert/fetch, generic LinkedConverterTreeInterface<T>, LNR (in-order) output, ArrayList accumulator, File I/O

public class MorseCodeConverter {
  public static String convertToEnglish(File)
  public static String convertToEnglish(String)
  public static String printTree()
}

public class MorseCodeTree implements LinkedConverterTreeInterface<String> {
  public void insert(String morseCode, String letter)
  public String fetch(String morseCode)
  public void buildTree()
  public ArrayList<String> toArrayList()
  public void LNRoutputTraversal(TreeNode<String>, ArrayList<String>)
}

public interface LinkedConverterTreeInterface<T> {
  TreeNode<T> getRoot();
  void insert(T, T);
  T fetch(String);
  void buildTree();
  ArrayList<T> toArrayList();
  void LNRoutputTraversal(TreeNode<T>, ArrayList<T>);
}

Course-Database (CMSC204 — Hash Table Assignment)

A hash-table-backed course database. CourseDBStructure uses separate chaining (array of LinkedList<CourseDBElement>) sized to the nearest prime of the form 4k+3. CourseDBManager wraps it with file-read and search operations exposed through a JavaFX GUI.

Skills demonstrated (from bytecode): Hash table with separate chaining, prime-number sizing (4k+3 form), Comparable, file parsing, JavaFX

public class CourseDBElement implements Comparable<CourseDBElement> {
  // fields: courseID, crn, credits, roomNumber, instructorName
  public int compareTo(CourseDBElement)
  public String toString()
}

public class CourseDBStructure implements CourseDBStructureInterface {
  private LinkedList<CourseDBElement>[] table;
  public int get4kPlus3Prime(int capacity)
  public void add(CourseDBElement)
  public CourseDBElement get(int crn)
  public ArrayList<String> showAll()
}

public class CourseDBManager implements CourseDBManagerInterface {
  public void add(String id, int crn, int credits, String room, String instructor)
  public CourseDBElement get(int crn)
  public void readFile(File)
  public ArrayList<String> showAll()
}

Hash-Lab (CMSC204 Lab)

A hashing lab exercise. Only a PowerPoint presentation (Hashing Lab Melvin Sere.pptx) was committed — no source code.


Viewing Project History

Full commit history from all 18 source repositories is preserved via git subtree add (no --squash). To see the history of any individual project:

git log --oneline -- Data-Structures/Graph-Shortest-Path/
git log --oneline -- Algorithms/Password-Checker/

How to Compile

Each project is self-contained. To compile any project (example):

cd Data-Structures/Stack-Queue-Notation
javac *.java
java StackQueueNotation.NotationGui   # or the appropriate main class

Projects using JavaFX (Graph-Shortest-Path, Password-Checker, Beverage-Shop) require a JavaFX SDK on the module path:

javac --module-path /path/to/javafx/lib --add-modules javafx.controls,javafx.fxml *.java