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
-
Folder project aplikasi (seluruh file
.py,.html, dan database), dikemas dalam satu file.zip. - Laporan PDF berisi: identitas, tangkapan layar setiap halaman aplikasi, dan penjelasan singkat cara menjalankannya.
-
File
requirements.txt.
Catatan: foldervenv/tidak perlu diikutkan dalam zip (ukurannya besar). Cukup sertakanrequirements.txtagar 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:
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:
-
UAS-data-program-studi.csv— 6 program studi. -
UAS-data-pendaftar.csv— 1.447 pendaftar lintas tahun (2023–2025) agar dashboard tampil bermakna.
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)
-
Buat project Flask dengan
struktur folder rapi (
models/,repository/,templates/,database/) menggunakan virtual environment (Pertemuan 09). -
Buat
skrip pembuatan database
(
setup_database.py) yang membuat kedua tabel beserta relasi Foreign Key-nya (Pertemuan 10).
A2 - Class dan Impor Data (15)
-
Buat class
ProgramStudidanPendaftardi foldermodels/(Pertemuan 11). -
Buat skrip impor
import_data.pyyang membaca kedua file CSV dan mengisi database. Skrip harus:
- Mengisi tabel
program_studilebih dulu. -
Untuk tiap pendaftar, mencari
id_prodiyang sesuai dengannama_prodipada 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):
- Daftar program studi dalam bentuk tabel.
- Tambah program studi baru (form).
- Ubah data program studi.
- Hapus program studi (dengan konfirmasi).
B2 - CRUD Pendaftar (20)
Buat halaman web untuk mengelola pendaftar:
-
Daftar pendaftar (tampilkan nama, prodi, jalur,
nilai, status). Karena datanya banyak, tampilkan
nama prodi (bukan id) menggunakan
JOIN. - Tambah pendaftar baru — prodi dipilih dari dropdown yang berisi daftar program studi.
- Ubah dan Hapus pendaftar.
-
Gunakan
flashuntuk 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.
Daftar Pendaftar
Daftar pendaftar menampilkan nama program studi melalui
JOIN, dilengkapi pencarian atau filter serta tombol
aksi CRUD.
Daftar Program Studi
Daftar program studi menampilkan data prodi, fakultas, kuota, dan tombol aksi CRUD.
---
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:
[ ] 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.