A lightweight, MVC-based Java desktop application designed to simulate an end-to-end course registration flow. This project demonstrates how a graphical user interface (GUI) interacts with file-based data storage and external web data scraping to manage student enrollments securely.
🎥 Demo Video: Watch the System in Action on YouTube
- Hierarchical Course Selection & Registration Flow
- Navigate through a hierarchical structure (Campus → College → Department → Lecture) to add desired courses to a "Preliminary Cart" and process the final "Course Registration"
- Persistent Registration Status per Member
- Independently saves and loads the current preliminary cart and finalized registration status for each student account.
- Student Information Viewing & Editing
- Displays basic personal information of the logged-in student and allows users to manually update and modify their details.
- University Website Integration
- Provides a convenient link within the GUI to visit the official university website directly.
- Real-Time Academic Schedule & Weather Scraping
- Utilizes the
Jsouplibrary to crawl the "Academic Schedule for the Month" and real-time weather data from external web pages, displaying them dynamically on the main screen.
- Utilizes the
- Sign-Up & Account Discovery (ID/PW)
- Offers a registration function for new users and a recovery feature to trace and find forgotten IDs and passwords for existing users.
- AES-128 Password Encryption
- Ensures security by avoiding plaintext password storage; passwords are encrypted using the
AES-128algorithm and safely hidden in files.
- Ensures security by avoiding plaintext password storage; passwords are encrypted using the
The project strictly follows the MVC (Model-View-Controller) pattern, separating the core business logic, data models, and presentation layers to decouple responsibilities.
Course_Registration/
│
├── src/
│ ├── View/ # Presentation Layer (GUI Components)
│ │ ├── Main.java # Application entry point
│ │ ├── PMainFrame.java # Main application window
│ │ ├── PLoginDialog.java # User authentication, Sign-up & Find ID/PW UI
│ │ └── ... # Other dialogs and panels
│ │
│ ├── View_Registation/ # Course Registration Specific UI
│ │ ├── PRegistrationPanel.java # Main registration interface (Miridamgi/Sincheong)
│ │ ├── PDirectoryPanel.java # Hierarchical course directory (Campus->College->Dept->Lecture)
│ │ └── PTable.java # Custom table component for displaying courses
│ │
│ ├── Service/ # Controller / Service Layer
│ │ ├── SLogin.java # Handles login, registration, and account discovery logic
│ │ ├── SDirectory.java # Fetches course directory data
│ │ └── SWebData.java # Manages external data fetching (Schedules & Weather)
│ │
│ ├── Entity/ # Data Access & Business Logic Layer (Models)
│ │ ├── ELogin.java # Reads/validates user credentials from files
│ │ ├── EEncryption.java # AES-128 encryption/decryption for passwords
│ │ ├── EMyLecture.java # Manages saved courses (Miridamgi/Sincheong)
│ │ └── EWebData.java # Web scraping using Jsoup (Weather, Schedule)
│ │
│ ├── ValueObject/ # Data Transfer Objects (DTO)
│ │ ├── VAccount.java # User profile data model
│ │ └── VDirectory.java # Course information data model
│ │
│ └── Global/ # Global Configurations
│ ├── Constants.java # System-wide constants (UI dimensions, etc.)
│ └── Locale.java # Static string resources
│
├── account/ # File-based Database for Users & Registrations
├── directory/ # File-based Database for Course Hierarchy
└── libs/ # External Libraries
└── jsoup-1.15.3.jar # Used for web scraping
Handles user authentication, account registration, and credential recovery. Password encryption/decryption is funneled through EEncryption using AES-128 before reading or writing to the flat files.
Users select structural directory Nodes (Campus → College → Dept → Lecture). SDirectory reads files from directory/ to refresh the PTable. Actions in PRegistrationPanel route data into EMyLecture to handle maximum credit limits (18 credits) and differentiate between Preliminary Cart (미리담기) and Final Registration (수강신청).
Triggers a background Jsoup connection to pull the current month's academic schedule and local weather, populating static information zones in PMainFrame.
Any alterations to student info or registration configurations immediately serialize updates back into individual student profile directories inside the account/ container.
- Java SE (JDK 16+): Core runtime environment.
- Swing / AWT: Built-in Java libraries for creating the graphical user interface.
- Jsoup (v1.15.3): External library for HTML parsing to scrape school schedules and weather information.
-
Encoding Format:
MS949 -
Ensure your IDE's workspace text file encoding is set to
MS949(orEUC-KR) to prevent Korean characters from breaking. -
Test Accounts: You can use the existing ID and Password combinations pre-configured in the
account/accounttext file for login testing.
- Java Development Kit (JDK) 16 or higher installed.
- Eclipse IDE (recommended, as
.classpathand.projectare included).
- Clone or extract the repository.
- Open Eclipse and select File > Import > Existing Projects into Workspace.
- Select the
Course_Registrationfolder. - Ensure
libs/jsoup-1.15.3.jaris correctly added to the Build Path. - Set the project text file encoding to
MS949(Right-click Project > Properties > Resource > Text file encoding). - Run
src/View/Main.javaas a Java Application.