UAS

UAS

Ujian Akhir Semester membangun aplikasi web CRUD dan dashboard untuk Penerimaan Mahasiswa Baru.

Ketentuan Umum

  • Sifat ujian: Take Home (proyek aplikasi).
  • Pengumpulan: sesuai jadwal yang ditentukan dosen.
  • Alat: VS Code, Python, Flask, SQLite.
  • Data: unduh data pendaftar dan unduh data program studi.
  • Cakupan materi: Pertemuan 09–15.

Berkas yang Dikumpulkan

  1. Folder project aplikasi (seluruh file .py, .html, dan database), dikemas dalam satu file .zip.
  2. Laporan PDF berisi: identitas, tangkapan layar setiap halaman aplikasi, dan penjelasan singkat cara menjalankannya.
  3. File requirements.txt.
Catatan: folder venv/ tidak perlu diikutkan dalam zip (ukurannya besar). Cukup sertakan requirements.txt agar penguji dapat memasang ulang library.

Latar Belakang

Pada UTS, Anda telah mengolah data penerimaan mahasiswa menggunakan Pandas di Google Colab — sebatas membaca dan mengolah data yang sudah ada.

Sekarang tugasnya naik satu tingkat: membangun aplikasinya. Anda akan membuat sebuah aplikasi web yang memungkinkan petugas penerimaan menambah, mengubah, menghapus data pendaftar, serta melihat dashboard ringkasan penerimaan. Ini adalah penerapan seluruh keterampilan paruh kedua (Pertemuan 09–15) pada studi kasus yang sudah Anda kenal.

Deskripsi Proyek

Sistem Penerimaan Mahasiswa Baru (PMB) sebuah universitas perlu mengelola data pendaftar dan program studi. Sistem harus mampu:

  • Mengelola data program studi (nama, fakultas, kuota).
  • Mengelola data pendaftar (identitas, prodi yang dipilih, jalur masuk, nilai ujian, status seleksi).
  • Menampilkan dashboard ringkasan penerimaan.

Struktur Data

Aplikasi memakai dua tabel dengan relasi:

text
program_studi (1) --------< (N) pendaftar

Tabel program_studi:

Kolom Tipe Keterangan
id_prodi INTEGER Primary Key
nama_prodi TEXT Nama program studi
fakultas TEXT Fakultas
kuota INTEGER Daya tampung

Tabel pendaftar:

Kolom Tipe Keterangan
id_pendaftar INTEGER Primary Key
nama TEXT Nama pendaftar
jenis_kelamin TEXT L / P
asal_sekolah TEXT Sekolah asal
tanggal_daftar TEXT Tanggal mendaftar
id_prodi INTEGER Foreign Key ke program_studi
jalur_masuk TEXT Reguler / Beasiswa / Prestasi / Transfer
nilai_ujian REAL Nilai ujian masuk (0–100)
status TEXT Diterima / Ditolak

Data Awal

Dua berkas CSV berikut disediakan untuk mengisi database:

Anda diminta membuat skrip impor (import_data.py) yang membaca kedua CSV tersebut dan memasukkannya ke database. (Perhatikan: CSV pendaftar memakai nama prodi, sehingga skrip perlu mencari id_prodi yang sesuai sebelum menyimpan.)

---

BAGIAN A - Fondasi (bobot 25)

A1 - Struktur Project dan Database (10)

  1. Buat project Flask dengan struktur folder rapi (models/, repository/, templates/, database/) menggunakan virtual environment (Pertemuan 09).
  2. Buat skrip pembuatan database (setup_database.py) yang membuat kedua tabel beserta relasi Foreign Key-nya (Pertemuan 10).

A2 - Class dan Impor Data (15)

  1. Buat class ProgramStudi dan Pendaftar di folder models/ (Pertemuan 11).
  2. Buat skrip impor import_data.py yang membaca kedua file CSV dan mengisi database. Skrip harus:
  • Mengisi tabel program_studi lebih dulu.
  • Untuk tiap pendaftar, mencari id_prodi yang sesuai dengan nama_prodi pada CSV.
  • Menampilkan jumlah baris yang berhasil diimpor.

---

BAGIAN B - CRUD (bobot 45)

B1 - CRUD Program Studi (15)

Buat halaman web untuk mengelola program studi (Pertemuan 12, 14, 15):

  1. Daftar program studi dalam bentuk tabel.
  2. Tambah program studi baru (form).
  3. Ubah data program studi.
  4. Hapus program studi (dengan konfirmasi).

B2 - CRUD Pendaftar (20)

Buat halaman web untuk mengelola pendaftar:

  1. Daftar pendaftar (tampilkan nama, prodi, jalur, nilai, status). Karena datanya banyak, tampilkan nama prodi (bukan id) menggunakan JOIN.
  2. Tambah pendaftar baru — prodi dipilih dari dropdown yang berisi daftar program studi.
  3. Ubah dan Hapus pendaftar.
  4. Gunakan flash untuk notifikasi setiap aksi berhasil.

B3 - Pencarian atau Filter (10)

Tambahkan salah satu fitur berikut pada halaman daftar pendaftar:

  • Pencarian pendaftar berdasarkan nama, atau
  • Filter pendaftar berdasarkan program studi atau status (Diterima/Ditolak).

---

BAGIAN C - Dashboard (bobot 30)

C1 - Kartu Ringkasan / KPI (10)

Buat halaman dashboard dengan minimal empat kartu KPI, misalnya:

  • Total pendaftar
  • Jumlah diterima
  • Jumlah program studi
  • Rata-rata nilai ujian

Seluruh angka dihitung dengan SQL agregasi (COUNT, SUM, AVG) — Pertemuan 13.

C2 - Grafik (20)

Tambahkan minimal tiga grafik pada dashboard menggunakan Matplotlib/Seaborn (Pertemuan 04–06, 15). Pilih dari:

  • Jumlah pendaftar per program studi (bar chart).
  • Jumlah pendaftar per tahun atau per bulan (line/bar chart).
  • Proporsi pendaftar per jenis kelamin atau per jalur masuk (pie chart).
  • Heatmap jumlah pendaftar Tahun × Bulan.
  • Perbandingan Diterima vs Ditolak per program studi.
Penting: dashboard hanya perlu menampilkan angka dan grafik dari data yang ada — tidak perlu analisis, interpretasi, atau kesimpulan tertulis. Fokus pada kemampuan teknis menyajikannya.

Contoh Tampilan

Contoh berikut merupakan referensi kelengkapan halaman. Tata letak, warna, dan gaya aplikasi boleh berbeda selama seluruh fitur wajib berfungsi.

Dashboard

Dashboard menampilkan empat kartu KPI dan tiga visualisasi dari data pendaftar.

Contoh dashboard PMB

Daftar Pendaftar

Daftar pendaftar menampilkan nama program studi melalui JOIN, dilengkapi pencarian atau filter serta tombol aksi CRUD.

Contoh halaman daftar pendaftar

Daftar Program Studi

Daftar program studi menampilkan data prodi, fakultas, kuota, dan tombol aksi CRUD.

Contoh halaman daftar program studi

---

Bobot Penilaian

Bagian Komponen Bobot
A A1 Struktur & Database 10
A A2 Class & Impor Data 15
B B1 CRUD Program Studi 15
B B2 CRUD Pendaftar 20
B B3 Pencarian/Filter 10
C C1 Kartu KPI 10
C C2 Grafik Dashboard 20
Total 100

Kriteria Penilaian Tiap Komponen

Kriteria Porsi
Berfungsi tanpa error 50%
Sesuai ketentuan soal 30%
Kerapian kode & tampilan (struktur berlapis, template rapi) 20%

Nilai Tambahan (Bonus, maksimal +10)

Dikerjakan bila fitur wajib sudah selesai:

  • Pindahkan database ke MySQL (lihat Bonus Materi MySQL). (+5)
  • Tambahkan validasi lengkap (nilai 0–100, kuota tidak negatif) dengan pesan flash. (+3)
  • Tampilan yang dirapikan melebihi contoh (tema, ikon, navigasi). (+2)

Ketentuan Anti-Kecurangan

  • Aplikasi harus dapat dijalankan oleh penguji. Aplikasi yang tidak bisa jalan kehilangan porsi "Berfungsi tanpa error".
  • Setiap mahasiswa membuat aplikasi sendiri. Kemiripan struktur boleh (karena mengikuti modul), tetapi data, tata letak, dan gaya kode yang identik antar-mahasiswa akan ditinjau.
  • Saat pengumpulan, mahasiswa dapat diminta menjalankan dan menjelaskan kodenya secara singkat.

Checklist Pengumpulan

Sebelum mengumpulkan, pastikan:

text
[ ] Project berjalan dengan: python app.py
[ ] Database sudah terisi lewat import_data.py (data pendaftar tampil)
[ ] CRUD Program Studi berfungsi (tambah/ubah/hapus)
[ ] CRUD Pendaftar berfungsi, prodi tampil sebagai nama (JOIN)
[ ] Fitur pencarian atau filter berjalan
[ ] Dashboard menampilkan minimal 4 KPI dan 3 grafik
[ ] requirements.txt disertakan
[ ] venv/ TIDAK diikutkan dalam zip
[ ] Laporan PDF berisi tangkapan layar tiap halaman

Penutup

UAS ini menutup seluruh perjalanan mata kuliah: dari mengolah data mentah di Google Colab (paruh pertama), hingga membangun aplikasi web utuh dengan database, CRUD, dan dashboard (paruh kedua). Anda memakai kembali domain data yang sama seperti UTS — penerimaan mahasiswa — tetapi kini bukan sekadar membacanya, melainkan membangun sistem yang mengelolanya. Selamat mengerjakan.