PPB C - Pertemuan 13 - CRUD Registrasi Siswa

 5025221103 | Hilmi Fawwaz Sa'ad | Pertemuan 13 | PPB C

CRUD Registrasi Siswa

Pada tugas kali ini, saya membuat sebuah aplikasi CRUD Registrasi Siswa menggunakan bahasa pemrograman Kotlin pada Android Studio dengan memanfaatkan Jetpack Compose untuk membangun antarmuka pengguna yang modern dan responsif. Aplikasi ini menerapkan Room Database sebagai media penyimpanan data lokal untuk menyimpan informasi mahasiswa berupa nama, NRP/NIM, email, jurusan, dan IPK, serta menggunakan arsitektur MVVM (Model-View-ViewModel) dan Repository Pattern agar struktur kode lebih terorganisir, modular, dan mudah dikembangkan. Fitur utama pada aplikasi meliputi menambahkan, menampilkan, mengubah, menghapus, serta mencari data mahasiswa secara real-time. Selain itu, aplikasi juga memanfaatkan Navigation Compose untuk navigasi antar halaman, LazyColumn untuk menampilkan daftar data secara efisien, validasi form termasuk validasi format email, serta coroutine, Flow, StateFlow, dan MutableStateFlow untuk mendukung pengelolaan data secara asynchronous dan reaktif sehingga perubahan data dapat langsung tercermin pada UI secara otomatis. Dengan penerapan teknologi dan arsitektur tersebut, aplikasi CRUD Registrasi Siswa ini dapat berjalan dengan lebih efisien, terstruktur, dan memberikan pengalaman pengguna yang lebih baik.

Repository Github: CRUD Registrasi Siswa

1. Buka Android Studio

2. Pilih "Project Baru"

3. Pilih "Empty Activity" dan pilih "Next"


4. Isi konfigurasi sesuai dengan project yang dikerjakan dan pilih "Finish"

5. Buat file Student.kt pada direktori data/entities/ untuk mendefinisikan struktur entitas database. Pada file ini menggunakan anotasi @Entity(tableName = "students") agar Room mengenali kelas ini sebagai tabel, serta @PrimaryKey(autoGenerate = true) pada field id agar nilai primary key dibuat otomatis. Kelas ini merupakan data class dengan field: name, studentId, email, major, dan gpa bertipe Double.

6. Buat file StudentDao.kt pada direktori data/dao/ untuk mendefinisikan semua operasi database yang diizinkan terhadap tabel students. Pada file ini menggunakan interface dengan anotasi @Dao, dan mendefinisikan fungsi getAllStudents() serta searchStudents() yang mengembalikan Flow<List<Student>> agar UI dapat bereaksi otomatis saat data berubah. Fungsi write seperti insert, update, dan delete ditandai suspend agar berjalan di dalam coroutine.

7. Buat file AppDatabase.kt pada direktori data/ untuk mengonfigurasi Room Database dan memastikan hanya ada satu instance database di seluruh siklus hidup aplikasi. Pada file ini menggunakan anotasi @Database(entities = [Student::class], version = 1) serta pola singleton dengan @Volatile dan blok synchronized(this) untuk menjamin thread-safety (double-checked locking).

8. Buat file StudentRepository.kt pada direktori data/repositories/ untuk menjadi lapisan abstraksi antara ViewModel dan DAO. Pada file ini, repository menerima StudentDao melalui constructor dan meneruskan semua operasi ke DAO, sehingga ViewModel tidak perlu mengetahui secara langsung dari mana data berasal. Pola ini juga mempermudah unit testing karena repository dapat di-mock.

9.  Buat file StudentViewModel.kt pada direktori viewmodels/ untuk mengelola state UI dan logika bisnis aplikasi. Pada file ini menggunakan MutableStateFlow<StudentUiState> yang di-expose sebagai StateFlow (immutable) ke UI, serta menerapkan debounce(300ms) dan flatMapLatest pada fitur pencarian agar query lama dibatalkan otomatis ketika query baru masuk. File ini juga mendefinisikan StudentViewModelFactory untuk menyuntikkan repository ke ViewModel.

10.  Buat file NavGraph.kt pada direktori ui/screens/ untuk mendefinisikan struktur navigasi antar screen menggunakan Navigation Compose. Pada file ini menggunakan object Routes yang menyimpan semua konstanta rute (STUDENT_LIST, STUDENT_ADD, STUDENT_EDIT/{studentId}) serta fungsi helper studentEdit(id) untuk membangun rute edit secara type-safe, menghindari penggunaan string literal langsung.

11. Buat file StudentListScreen.kt pada direktori ui/screens/ untuk menampilkan daftar seluruh data mahasiswa beserta fitur pencarian dan aksi CRUD. Pada file ini menggunakan LazyColumn agar hanya item yang terlihat di layar yang dirender, serta collectAsState() untuk mengkonversi StateFlow dari ViewModel menjadi State<T> Compose sehingga UI otomatis recompose setiap kali data berubah.

12. Buat file StudentFormScreen.kt pada direktori ui/screens/ untuk menangani formulir tambah dan edit mahasiswa dalam satu screen (dual-purpose form). Pada file ini menggunakan LaunchedEffect(studentId) untuk memuat data eksisting saat mode edit, validasi real-time pada setiap field termasuk validasi format email menggunakan android.util.Patterns.EMAIL_ADDRESS, serta komponen OutlinedTextField dengan isError dan supportingText untuk menampilkan pesan error di bawah field.

13. Buat file MainActivity.kt pada direktori root package sebagai entry point aplikasi yang bertanggung jawab menginisialisasi seluruh dependency dan memulai UI. Pada file ini menggunakan delegasi by viewModels { factory } agar ViewModel bersifat lifecycle-aware dan tetap hidup saat terjadi rotasi layar, serta memanggil setContent { CRUDSiswaTheme { StudentNavGraph(viewModel) } } untuk merender UI root aplikasi.

14. Hasil Preview
      
15. Video Demo CRUD Registrasi Siswa

Referensi

Komentar

Postingan populer dari blog ini

PPB C - Pertemuan 12 - Login App (MVVM)

PPB C - Pertemuan 7 - Halaman Login Sederhana

PPB C - Pertemuan 11 - Marketplace Siswa