MECS0023 Data Structure & Algorithm mini project — a console dashboard that
tracks e-learning events (quizzes, assignments) with deadlines, reminders, and
overdue alerts, persisted to events.csv.
The data structures are hand-rolled on purpose (the point of the assignment):
- Singly-linked list, kept sorted by due date — the event store (
Dashboard) - Queue — pending reminders (
ReminderQueue) - Stack — overdue alerts (
OverdueStack) - Selection sort — sort events by date / subject / status
CSV reading/writing uses the vendored, header-only rapidcsv library.
.
├── include/ # our headers (interfaces)
│ ├── constants.h
│ ├── date.h
│ ├── event.h
│ ├── node.h
│ ├── reminder_queue.h
│ ├── overdue_stack.h
│ └── dashboard.h
├── src/ # implementations
│ ├── date.cpp
│ ├── event.cpp
│ ├── reminder_queue.cpp
│ ├── overdue_stack.cpp
│ ├── dashboard.cpp
│ └── main.cpp # file loading + menu loop
├── third_party/ # vendored dependencies
│ └── rapidcsv.h # single-header CSV library (BSD-3-Clause)
├── CMakeLists.txt # cross-platform build (Windows / macOS / Linux)
└── Makefile # convenience build for Unix-like shells
cmake -S . -B build # configure
cmake --build build # compile -> build/dashboard (build/dashboard.exe on Windows)
./build/dashboard # runOn Windows this generates the right project for your toolchain (Visual Studio, MinGW, Ninja, …); no Unix shell required.
make # compile and link -> ./dashboard
make run # build, then run
make clean # remove obj/ and the binaryRequires a C++17 compiler. On first run, if events.csv is absent the program
says so; it creates the file when you add or save events.
events.csv has a header row followed by one event per line:
title,subject,type,day,month,year,completed
Quiz 1,Math,Quiz,1,6,2026,0
"Report, final",Science,Assignment,10,6,2026,1
completedis1(done) or0(pending); the column is optional on load and defaults to0.- Fields containing commas or quotes are quoted automatically (standard CSV).
- Completing an event sets its status to
Completedrather than deleting it, so the record is kept for traceability.