A small, educational desktop application that demonstrates a course registration workflow using Java and Swing. This project is a simple, single-user in-memory system with separate Admin and Student dashboards. It's designed for learning and experimentation — easy to extend with persistence, validation, and tests.
- Clean, focused Swing UI with separate dashboards for Admin and Student.
- Two user roles: Admin (manage courses) and Student (register/drop courses).
- Bi-directional model consistency: registering a course updates both the Course’s enrolled students and the Student’s registered courses.
- Minimal and readable codebase — great starting point for adding persistence, security, or unit tests.
- Admin
- Create, edit, and delete courses
- View course details and enrolled students
- See full courses and view all students
- Student
- Register a new account from the login screen
- Login and see available courses
- Register for courses (capacity-aware)
- Drop registered courses
- View currently registered courses
- Sample course data is preloaded for quick testing.
Main.java— App entry point; configures UI look-and-feel and starts theLoginFrame.CourseRegistrationSystem.java— In-memory manager that storesCourseandStudentlists and provides authentication and CRUD helpers.User.java— Abstract base class forusername,password,firstName,lastNameand basic authentication.Admin.java/AdminOperations.java— Admin implementation and its interface.Student.java/StudentOperations.java— Student implementation (register/drop) and its interface.Course.java— Course model with capacity logic and enrolled students list.LoginFrame.java— Login UI (Admin vs Student) and access point to registration.StudentRegistrationFrame.java— Signup form for new students.AdminFrame.java— Admin dashboard UI and course management actions.StudentFrame.java— Student dashboard UI showing available and registered courses.
- Open a terminal and change into the project directory:
cd /path/to/Course-Registration-System33- Compile all Java sources:
javac *.java- Run the application:
java MainDefault admin credentials:
- Username:
admin - Password:
admin123
Register students using the "Register" button on the login screen.
- Course
courseId(String) — unique identifier used by the UIcourseName,instructor,section,location,maxStudents(int)enrolledStudents(List)
- Student
username,password(plain text in memory),firstName,lastName,studentIdregisteredCourses(List)
The application keeps course and student lists in memory inside CourseRegistrationSystem.
- No persistence: all data is in memory; closing the app discards changes.
- Plain-text passwords (in memory) — not suitable for production.
- No uniqueness check for student usernames during registration (duplicate usernames are allowed).
- Minimal validation; some checks are basic (e.g., number parsing).
- No automated tests included.
If you'd like to extend this project, here are low-risk, high-value changes:
- Add persistence (serialize the
CourseRegistrationSystemto disk or store JSON on exit/startup). - Enforce unique student usernames in
StudentRegistrationFrameandCourseRegistrationSystem.addStudent. - Hash passwords (PBKDF2/BCrypt) instead of storing them as plain text.
- Add unit tests (JUnit) for
Course.addStudent,Student.registerForCourse, andStudent.dropCourse. - Improve UI error handling: show model errors in dialogs rather than printing to console.
- Fork the repo and open a PR for small, self-contained changes.
- Add tests when modifying behavior.
- If adding persistence, include a clear migration or reset option for testing.
Shaurya Raj Mallick
Indian Institute of Information Technology, Allahabad(2028)