university-enrollment-system
University Enrollment System Team
The software a university student uses to sign up for classes: log in, enter a six-digit code emailed to you, then add, drop, or swap courses, with clashes and full sections blocked and the timetable exported to Excel. Two students built it as a coursework project: the accounts are invented, and passwords sit in the database as plain readable text, fine for a classroom demo, not for real credentials.
A two-person team: our founder, Salman Adnan, and Shayan Wasif. Salman's areas were the email verification (login MFA) flow, the attendance module with email confirmations, Docker packaging, and integration and bug fixing across the screens. This is a coursework demo database; the accounts are fake and passwords are stored in plaintext, so the scheme is not for real credentials.
Overview
A desktop course-registration app built with PyQt6 and SQLAlchemy over SQLite. A student logs in, confirms an emailed code, then enrolls in sections, adds, drops, and swaps courses with clash and capacity checks, and exports a weekly schedule to Excel.
Built as the semester project for the Databases course at Habib University.
Key features
- Login with email and password, followed by a 6-digit verification code sent over SMTP.
- Enrollment in sections with capacity tracking (a section closes when full) and add, drop, and swap with schedule-clash detection.
- A weekly and per-day schedule view, exportable to Excel via pandas and openpyxl.
- An attendance screen that emails the student a confirmation for each change.
- An activity log recording every add, drop, swap, and attendance change with timestamps.
- Each screen is a QMainWindow paired with a Qt Designer .ui file loaded at runtime, over one data-access layer.
Results
Verified by clicking through the app; email sending is optional and prints the code to the terminal when no credentials are set. A Dockerfile and per-OS run scripts are included.
Tech stack
A challenge worth noting
The login MFA and attendance confirmations go out over Gmail SMTP, but a fresh clone has no app password. The fix reads sender credentials from the environment and branches before touching smtplib, printing the code to the terminal when they are missing. A Qt app also turned out to be testable without a display: an offscreen platform plus monkeypatched dialog methods make a click-through app a scriptable smoke test.