= About: Courses Management System = == Team members: - Viktor Petrovski 231150 - Aleksandar Nikoloski 231082 - Martin Mitevski 231112 == Short description: The Courses Management System (CMS) is a relational database platform designed to support the full academic lifecycle of a higher-education institution. The database contains data about members (students and teachers), academic programs and program enrollment history, courses and their editions, semester enrollments, exercises and exam assessments, grades, lecture materials, announcements, direct messaging between members, and surveys. Students may switch academic programs, with a full historical record of enrollments and disenrollments maintained. All student activity — submissions, exam attempts, grades, and survey responses — is restricted to courses the student is actually enrolled in. Two security mechanisms are built into the design: member passwords are stored as SCRAM-SHA-256 hashes, and semester enrollment records are protected by a blockchain-inspired SHA-256 hash chain that makes retroactive tampering detectable. == Detailed description: The CMS manages the complete academic workflow of a higher-education institution within a single PostgreSQL database. At its core, the system distinguishes between abstract courses (a course as defined in a catalog) and course editions (a concrete offering of that course in a specific academic year and semester). This separation allows the institution to maintain a stable course catalog while independently scheduling and managing each semester's offerings. Members of the system are either students or teachers. A student enrolls in an academic program, and that program defines a curriculum — a set of courses recommended across semesters, some mandatory and some elective. Students may switch academic programs over time; each enrollment and disenrollment is recorded with its respective date, and a student may even re-enroll in a previously attended program. When switching programs, courses that have been declared equivalent across programs are recognised, so that a student does not lose credit for passed work covered by an equivalent course in the new program. Courses may have prerequisites, forming a directed dependency graph across the catalog. Teachers are assigned to course editions, and students who qualify may serve as teaching assistants to teachers. Each semester, a student's enrollment is recorded as a Semester Enrollment, which lists the specific course editions the student is taking that term through individual Course Enrollment records. The Course Enrollment is the central integrity anchor of the system: a student can only submit exercises, attempt exams, receive a final grade, or respond to surveys for a course edition they are concretely enrolled in. Final grades are recorded per course enrollment. Assessment is handled through two mechanisms: exercises (assignments with deadlines, submissions, and grading) and exams (scheduled events composed of individual problems, supporting multiple attempts per student with per-problem answers and points). Course editions also host lecture materials, announcements (which support threaded replies), and surveys (with defined options and student responses). Members can exchange direct private messages with one another. Password security is implemented via SCRAM-SHA-256 hashing. Semester enrollment records are made tamper-evident through a blockchain-inspired hash chain: each record stores the SHA-256 hash of the previous enrollment record for the same student, chained with the current record's data. Both mechanisms are planned for detailed implementation in Phase 5 as the advanced topic. == Who is the database and project intended for? The database and application are intended to be owned and operated by a higher-education institution - such as a faculty or university - and provided as an internal service to its students, teachers, and administrative staff. The institution is responsible for maintaining the course catalog, academic programs, and member accounts. == What problems does it solve? Higher-education institutions typically rely on a fragmented set of tools for course scheduling, enrollment tracking, assessment, communication, and grading. The CMS consolidates all of these into one system, reducing administrative overhead and eliminating data inconsistencies that arise from maintaining multiple disconnected databases. It additionally handles the complexity of students switching academic programs, including the recognition of equivalent courses across programs — a scenario that manual processes typically handle inconsistently. The tamper-evident enrollment chain addresses the integrity concern of retroactive modification of official enrollment records. == What types of users will have access? Three user roles interact with the system: students (who enroll in programs and courses, submit exercises, attempt exams, respond to surveys, and communicate with teachers), teachers (who manage course content, grade submissions, post announcements, and conduct exams), and administrators (who manage the member registry, academic programs, course catalog, and equivalence declarations). Teaching assistants are students who additionally take on a supporting teaching role for a specific teacher. == How is it different from existing solutions? General-purpose learning management systems such as Moodle or Canvas cover some of the same ground, but they are not designed around a structured relational academic data model. They typically lack first-class support for academic program curricula with prerequisite chains, course equivalence across programs, per-semester enrollment records as auditable entities, or fine-grained exam modeling with per-problem attempts and answers. The CMS is designed from the ground up as a data-model-first system, with integrity and auditability as primary concerns, and with the blockchain-inspired enrollment chain as a novel addition not present in standard LMS platforms. == Is it a web, mobile, and/or desktop application? The intended application is a web-based platform, accessible from both desktop and mobile browsers.