A desktop application for browsing and purchasing media products (Books, CDs, DVDs) built with Java and JavaFX.
| Home Page | Cart / Place Order | Shipping Form |
|---|---|---|
![]() |
![]() |
![]() |
- Browse a catalog of media products: Books, CDs, and DVDs
- Add items to a shopping cart and manage quantities
- Place orders with delivery information
- Process payments via an interbank payment subsystem (credit card)
- View order invoices and transaction history
- Persistent data storage with SQLite
| Layer | Technology |
|---|---|
| Language | Java 11+ |
| UI Framework | JavaFX 15 |
| Database | SQLite (sqlite-jdbc) |
| Testing | JUnit 5 |
| IDE | Eclipse |
AIMS-Student/
βββ src/
β βββ App.java # Application entry point
β βββ common/exception/ # Custom exception classes
β βββ controller/ # Business logic controllers
β βββ entity/ # Domain models (Cart, Media, Order, Payment, β¦)
β βββ subsystem/ # Interbank payment subsystem
β βββ utils/ # Utility classes & configuration
β βββ views/ # JavaFX FXML layouts & screen handlers
βββ test/ # Unit tests
βββ lib/
β βββ linux/javafx-sdk-15/ # JavaFX SDK for Linux
β βββ win/javafx-sdk-15/ # JavaFX SDK for Windows
βββ assets/
βββ db/ # SQLite schema & MySQL Workbench file
βββ images/ # Product and UI images
| Pattern | Where applied | Purpose |
|---|---|---|
| Singleton | Cart, AIMSDB |
Ensure a single shared instance of the cart and database connection across the app |
| MVC | entity/ Β· controller/ Β· views/ |
Cleanly separate domain data, business logic, and UI rendering |
| Facade | InterbankSubsystem |
Expose a simple payment API that hides the internal InterbankSubsystemController complexity |
| Template Method | BaseController β controllers Β· BaseScreenHandler β screens |
Define a common skeleton and let subclasses specialise behaviour |
| Strategy (Interface) | InterbankInterface |
Decouple payment logic from a concrete implementation so the subsystem can be swapped or mocked |
| Inheritance / Polymorphism | Media β Book, CD, DVD |
Share common media attributes while allowing each type to carry its own fields |
Note
Prerequisites β make sure you have all of the following before continuing:
- Java 11 or higher
- Eclipse IDE (recommended)
- JavaFX 15 (bundled under
lib/)
git clone https://github.com/leminhnguyen/AIMS-Student.git
cd AIMS-StudentTip
Go to Eclipse β File β Open Projects from File Systemβ¦ and select the cloned root directory.
Important
You need to add three libraries to the build path.
SQLite JDBC
Project β Properties β Java Build Path β Classpath β Add JARsβ¦
Select sqlite-jdbc-3.7.2.jar from the lib/ directory.
JUnit 5
Project β Properties β Java Build Path β Modulepath β Add Libraryβ¦ β JUnit β Next
JavaFX
Eclipse β Window β Preferences β Java β Build Path β User Libraries β New
Name it (e.g. JavaFX15) and add all JARs from:
β’ Linux : lib/linux/javafx-sdk-15/lib/
β’ Windows: lib/win/javafx-sdk-15/lib/
Then add the user library to the project classpath.
Important
Open Run β Run Configurationsβ¦ β Java Application, select your launch config, and paste the VM arguments below.
Linux
--module-path lib/linux/javafx-sdk-15/lib --add-modules javafx.controls,javafx.fxml
Windows
--module-path lib/win/javafx-sdk-15/lib --add-modules javafx.controls,javafx.fxml
Tip
Import the SQL schema into SQLite using the file at assets/db/aims_sqlite.sql.
Note
Tests are located in the test/ directory and use JUnit 5.
Run them from Eclipse via Run As β JUnit Test.
| Name | Role | Batch |
|---|---|---|
| nguyenlm | Software Engineering Student | K61 |
| manhvd | Software Engineering Student | K61 |
| hieudm | ICT Student | K61 |
This project is intended for educational purposes as part of the Software Engineering curriculum.




