FMFI Schedule Manager
About the Project
Why I Built This
Choosing courses at FMFI usually involves a messy spreadsheet and a lot of guessing. I wanted to build something that actually prevents you from signing up for two classes at the same time.
I chose C++17 for this project intentionally. Most of my work is in Python or TypeScript, so I wanted to force myself to deal with memory management, strict typing, and build systems without a safety net. It was a good reminder of what's happening under the hood.
How It Works
The core logic revolves around interval checking. When you try to add a course, the EventManager scans your existing timeline for overlaps. If there's a collision, it rejects the event.
I structured the code using Manager classes (EventManager, PersonManager) to keep the business logic separate from data storage. It's not a microservice architecture, but it taught me about separation of concerns without overengineering a local CLI tool.
The Hard Parts
- Memory Safety: Managing pointers without leaking memory was tricky. I relied heavily on RAII principles to clean up resources automatically.
- Build System: CMake is powerful but verbose. Configuring it to link GoogleTest correctly took more time than I expected.
- Testing: I wrote unit tests with GoogleTest for the date validation and collision logic. Catching edge cases (like events spanning midnight) early saved me a lot of debugging later.
Current State
It's a console application. There's no GUI, because I'd rather spend time on the logic than fighting with UI libraries. It supports importing/exporting courses via text files and has basic role-based access (Admin vs. User).
It's not a product I'm selling, but it's a solid reference for how I handle data structures and system design when performance and control matter more than development speed.
What I'd Do Differently
If I revisited this today, I'd probably swap the file I/O for SQLite to handle concurrent writes better. I'd also add a CI pipeline to run the tests on every push—something I learned to appreciate after working with Python pipelines.