Ứng dụng Android cho phép người dùng duyệt phim, chọn rạp chiếu, chọn suất chiếu, chọn ghế và đặt vé. Toàn bộ hoạt động offline với dữ liệu lưu trữ cục bộ.
| Trang chủ | Đăng nhập | Danh sách phim |
|---|---|---|
![]() |
![]() |
![]() |
| Trang chủ (đã đăng nhập) | Chi tiết phim | Chọn suất chiếu |
|---|---|---|
![]() |
![]() |
![]() |
| Chọn ghế | Danh sách rạp | Phim tại rạp |
|---|---|---|
![]() |
![]() |
![]() |
| Vé đã đặt | Chi tiết vé |
|---|---|
![]() |
![]() |
Người dùng đăng nhập bằng tài khoản và mật khẩu. Sau khi đăng nhập thành công, thông tin phiên được
lưu lại để duy trì trạng thái qua các lần mở app. Khi đăng xuất, phiên bị xóa và giao diện trở về
trạng thái chưa đăng nhập. Có 2 tài khoản demo sẵn có: an, linh (mật khẩu: 123456).
Hiển thị danh sách 20 phim với poster, tên, thời lượng và mô tả ngắn. Nhấn vào phim để xem chi tiết đầy đủ bao gồm nội dung phim và danh sách diễn viên.
Hiển thị 4 rạp chiếu tại TP.HCM. Mỗi rạp có danh sách phim đang chiếu cuộn ngang. Có thể xem toàn bộ phim tại một rạp cụ thể.
Từ màn hình chi tiết phim, người dùng chọn rạp muốn xem, sau đó chọn ngày và giờ chiếu phù hợp. Mỗi suất chiếu thuộc một phòng chiếu cụ thể (Phòng 1, Phòng 2, IMAX, 4DX, v.v.).
Sơ đồ ghế hiển thị 40 ghế chia thành 3 loại với giá khác nhau:
- Ghế thường (hàng A, B, C): 75.000đ
- Ghế VIP (hàng D): 110.000đ
- Ghế Couple (hàng E): 150.000đ
Ghế đã được người khác đặt hiển thị mờ và không thể chọn. Người dùng có thể chọn nhiều ghế cùng lúc. Danh sách ghế đã chọn hiển thị tên ghế, loại ghế, giá từng ghế và tổng tiền theo thời gian thực. Nhấn "Đặt vé" để xác nhận toàn bộ ghế đã chọn trong một lần.
Tất cả ghế trong cùng một lần đặt được gộp thành một vé duy nhất. Danh sách vé hiển thị tên phim, rạp chiếu, giờ chiếu, danh sách ghế và tổng tiền. Nhấn vào vé để xem chi tiết đầy đủ bao gồm phòng chiếu, từng ghế kèm loại và giá, thời điểm đặt.
Ứng dụng hỗ trợ cả Light Mode và Dark Mode. Người dùng có thể chuyển đổi bằng nút toggle trên màn hình trang chủ.
- Kotlin
- Gradle với Kotlin DSL
- KSP (Kotlin Symbol Processing) — xử lý annotation cho Room
- MVVM (Model-View-ViewModel)
- Repository Pattern — tách biệt data layer khỏi UI
- Single Activity, multi-Fragment
- Room Database (SQLite) — toàn bộ dữ liệu lưu local
- SharedPreferences — lưu trạng thái đăng nhập
- Material Design 3
- View Binding
- Navigation Component với Safe Args
- RecyclerView, ConstraintLayout, LinearLayout
- Glide — load ảnh từ URL và base64
- Kotlin Coroutines
- LiveData
7 bảng với quan hệ như sau:
Users
Movies ──── TheaterMovieCrossRef ──── Theaters
Movies ──── Showtimes ──────────────── Theaters
Showtimes ── Seats
Users + Movies + Showtimes + Seats ──── Tickets
Bảng Tickets có thêm trường bookingRef để nhóm các ghế đặt cùng lúc thành một vé.
Yêu cầu: Android Studio, JDK 17+, Android SDK API 24+.
- Clone repo
- Mở project trong Android Studio
- Sync Gradle
- Chạy trên emulator hoặc thiết bị thật (API 24+)
| Username | Password | Tên hiển thị |
|---|---|---|
| an | 123456 | Nguyễn Văn An |
| linh | 123456 | Trần Mỹ Linh |
| Mục | Thông tin |
|---|---|
| Platform | Android |
| Min SDK | API 24 (Android 7.0) |
| Target SDK | API 36 |
| Ngôn ngữ | Kotlin |
| Build system | Gradle KTS + KSP |










