gina's portfolio
Back to featured projects

Data structures & algorithms

Student Advising and Course Planning Application

I developed a C++ command-line application that imports academic course data, validates prerequisite relationships, prints a sorted schedule, and retrieves individual course details. The project compares vectors, hash tables, and binary search trees to select an efficient structure for an advising workflow.

  • C++
  • Binary Search Trees
  • Hash Tables
  • Vectors
  • Algorithms
  • Runtime Analysis
Glowing blue binary search tree organizing academic course records and prerequisite paths

Organizing an academic pathway

A binary search tree connects efficient course lookup with the ordered output advisors need when reviewing a complete program.

Overview

Turning course records into practical advising information

The application was designed for academic advisors who need to review the curriculum in order and quickly answer questions about a specific course. It transforms a structured data file into a searchable model of courses and their prerequisite relationships.

Design goal

Fast lookup with naturally sorted output

The central design decision was selecting a structure that could retrieve course details efficiently while also producing an ordered schedule without a separate sorting pass.

Application capabilities

A focused workflow for academic advisors

01

Load course data

Imports course numbers, titles, and prerequisite relationships from a structured input file.

02

Print a sorted schedule

Traverses the selected data structure to display the full computer science curriculum in course-number order.

03

Find course details

Searches by course number and displays the matching title and prerequisite information.

04

Validate relationships

Checks course records and prerequisite references so incomplete or invalid data can be handled safely.

Data structure analysis

Comparing storage, search, and ordering trade-offs

Vector

O(n)

Strength

Simple contiguous storage makes sequential iteration straightforward and efficient.

Trade-off

Finding a course requires a linear scan, and maintaining sorted order adds extra work.

Hash table

O(1) average

Strength

Course numbers provide direct keys for fast average-case searches, insertions, and deletions.

Trade-off

Entries are not naturally ordered, and collisions can reduce lookup performance.

Binary search tree

O(log n) balanced

Strength

An in-order traversal produces a sorted schedule while preserving efficient searches.

Trade-off

An unbalanced tree can degrade to O(n), so tree shape affects worst-case performance.

Architecture decision

Why a binary search tree fit the advising workflow

A balanced binary search tree supports searches, insertions, and deletions in O(log n) time while an in-order traversal prints every course in O(n) sorted order. That combination directly supports the advisors' two primary needs: finding a course quickly and reviewing the complete curriculum in sequence.

Development process

From pseudocode and analysis to a tested C++ application

01

Defined a course record containing a number, title, and prerequisite list

02

Designed search pseudocode for vectors, hash tables, and binary search trees

03

Analyzed the runtime and memory trade-offs of each structure

04

Selected a binary search tree to support ordered output and efficient lookup

05

Parsed and validated course data from the input file

06

Tested loading, schedule printing, course lookup, and prerequisite output

Application gallery

The command-line interface keeps each advising task clear and provides direct feedback for schedule and prerequisite requests.

Course planning application command-line menu

Command-line menu

A focused menu provides access to data loading, schedule output, individual course lookup, and exit controls.

Command-line output showing a sorted list of computer science courses

Sorted course schedule

The application prints the full computer science schedule in ascending course-number order.

Command-line lookup showing CSCI101 and its CSCI100 prerequisite

Course and prerequisite lookup

A course-number search returns the course title and its required prerequisite.

Validation

Protecting the integrity of the course model

  • Reject input rows that do not contain a course number and title
  • Preserve every prerequisite associated with a course
  • Report missing course searches clearly
  • Confirm that sorted output remains correct after data loading

Key lesson

Data structures should follow the user's access patterns

The fastest isolated lookup was not the only requirement. Evaluating how advisors search, browse, and print course data led to a more balanced architecture decision than choosing a structure from Big O notation alone.

Project outcome

A practical advising tool grounded in algorithm analysis

The completed application demonstrates my ability to translate requirements into data models, compare algorithmic trade-offs, validate imported information, and implement an organized C++ solution that supports real user tasks.