This project manages three types of educational data:
-
Students:
- Student code: Unique 8-digit number
- Name: Max 30 characters (letters only)
-
Courses:
- Course code: 5-digit number
- Name: Max 10 characters (uppercase letters only)
-
Grades:
- Semester: 5-digit number (4 digits year + 1 digit semester 1-3)
- Grade: 0-20 with max 1 decimal digit
Implement CRUD operations using lists:
ADDS [student_code] [name]: Add studentADDC [course_code] [name]: Add courseADDG [student_code] [course_code] [semester] [grade]: Add gradeEDITS/EDITC/EDITG: Edit student/course/gradeDELETES/DELETEC/DELETEG: Delete student/course/gradeNUMBERC [student_code]: Count courses taken by studentNUMBERS [course_code]: Count students who took course
Implement search functionality using:
- Binary Search Trees for name-based searches
- Hash Tables for code-based searches (using universal hashing family)
SEARCHSN [student_name]: Search student by nameSEARCHCN [course_name]: Search course by nameSEARCHSC [student_code]: Search student by codeSEARCHCC [course_code]: Search course by code
- Courses are related if they share >50% of students
- Commands:
ISRELATIVE [code1] [code2]: Check if courses are relatedALLRELATIVE [code]: List all related courses
MINRISK [student_code]: Optimize course sequence based on average grades
COMPARE [code1] [code2]: Compare students based on grades in shared courses
Time Complexity Summary:
- Insert (ADDS, ADDC, ADDG):
O(1) - Edit (EDITS, EDITC, EDITG):
O(n) - Delete (DELETES, DELETEC, DELETEG):
O(n) - Count (NUMBERC, NUMBERS):
O(n)
- Best case (all inserts):
O(T) - Worst case (many edits/deletes):
O(T * n) - Space:
O(S + C + G)
(T = commands, n = list size, S/C/G = students/courses/grades)