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
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
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>
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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.
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>);
}
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()
}
A hashing lab exercise. Only a PowerPoint presentation (Hashing Lab Melvin Sere.pptx) was committed — no source code.
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/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 classProjects 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