Mini Project: Aplikasi Manajemen Daftar Siswa
Tujuan Pembelajaran
Section titled “Tujuan Pembelajaran”Setelah mini project ini, kamu dapat menggabungkan variabel, tipe data, operator, loop, function, dan method array untuk membangun aplikasi simulasi manajemen siswa.
Pendahuluan
Section titled “Pendahuluan”Kita akan membuat aplikasi Manajemen Daftar Siswa berbasis terminal. Aplikasi ini akan mengelola database siswa sederhana di memori, menyediakan fungsi untuk menambah, menghapus, mencari, dan mengurutkan siswa.
Fitur Aplikasi
Section titled “Fitur Aplikasi”- Tampilkan semua siswa terdaftar
- Tambah siswa baru di akhir daftar (
push()) - Hapus siswa berdasarkan nama (
splice()) - Cari siswa berdasarkan kata kunci (
includes()/find()) - Urutkan nama siswa A–Z (
sort()) - Tampilkan statistik (total siswa)
Visual Architecture
Section titled “Visual Architecture”Database Siswa (Array) │ ├── tambahSiswa(nama) ──► push() ├── hapusSiswa(nama) ──► indexOf() + splice() ├── cariSiswa(keyword) ──► filter() + includes() ├── urutkanSiswa() ──► slice() + sort() └── tampilkanSemua() ──► forEach()Mari Mencoba
Section titled “Mari Mencoba”Buat src/bab5/aplikasi-siswa.ts:
// =====================================================// MINI PROJECT: APLIKASI MANAJEMEN DAFTAR SISWA// Menggabungkan BAB 1 s.d. BAB 5// =====================================================
// Database siswa awallet databaseSiswa: string[] = ["Budi", "Andi", "Citra", "Dian"]
function tampilkanSemua(daftar: string[] = databaseSiswa): void { console.log("-".repeat(35)) if (daftar.length === 0) { console.log(" (Daftar siswa kosong)") console.log("-".repeat(35)) return }
daftar.forEach((nama, indeks) => { console.log(` ${indeks + 1}. ${nama}`) }) console.log(` Total: ${daftar.length} siswa`) console.log("-".repeat(35))}
function tambahSiswa(nama: string): void { const namaBersih = nama.trim() if (namaBersih === "") { console.log("⚠ Nama tidak boleh kosong!") return }
// Cek duplikasi if (databaseSiswa.includes(namaBersih)) { console.log(`⚠ Siswa bernama "${namaBersih}" sudah terdaftar!`) return }
databaseSiswa.push(namaBersih) console.log(`✓ Siswa "${namaBersih}" berhasil ditambahkan.`)}
function hapusSiswa(nama: string): void { const pos = databaseSiswa.indexOf(nama)
if (pos === -1) { console.log(`⚠ Siswa "${nama}" tidak ditemukan di database!`) return }
databaseSiswa.splice(pos, 1) console.log(`✓ Siswa "${nama}" berhasil dihapus.`)}
function cariSiswa(kataKunci: string): void { const keyword = kataKunci.toLowerCase().trim() const hasil = databaseSiswa.filter((nama) => nama.toLowerCase().includes(keyword) )
console.log(`\n=== Hasil Pencarian: "${kataKunci}" ===`) tampilkanSemua(hasil)}
function tampilkanTerurut(): void { // Salin lalu sort agar databaseSiswa tidak rusak urutannya const terurut = databaseSiswa.slice().sort() console.log("\n=== Daftar Siswa Terurut A-Z ===") tampilkanSemua(terurut)}
// ── Simulasi Aplikasi ──────────────────────────────────console.log("===================================")console.log(" Amanah Student Manager v1.0")console.log("===================================")
console.log("\nDatabase Awal:")tampilkanSemua()
console.log("\n[Aksi 1] Menambah siswa baru:")tambahSiswa("Eko")tambahSiswa("Andi") // Tes duplikasitampilkanSemua()
console.log("\n[Aksi 2] Menghapus siswa:")hapusSiswa("Citra")hapusSiswa("Zaki") // Tes nama tidak adatampilkanSemua()
console.log("\n[Aksi 3] Mengurutkan siswa:")tampilkanTerurut()
console.log("\n[Aksi 4] Mencari siswa:")cariSiswa("an") // harus mencocokkan Andi dan DiancariSiswa("eko") // harus mencocokkan Eko
console.log("\nDatabase Akhir:")tampilkanSemua()Jalankan:
tsx src/bab5/aplikasi-siswa.tsOutput (sebagian)
Section titled “Output (sebagian)”=================================== Amanah Student Manager v1.0===================================
Database Awal:---
-------------------------------- 1. Budi 2. Andi 3. Citra 4. Dian Total: 4 siswa---
--------------------------------...Penjelasan Bagian Penting
Section titled “Penjelasan Bagian Penting”Default Parameter
Section titled “Default Parameter”function tampilkanSemua(daftar: string[] = databaseSiswa): void {Jika parameter daftar tidak dikirim, function otomatis memakai databaseSiswa. Ini membuat function fleksibel: bisa menampilkan database utama atau array hasil filter pencarian.
Duplication Check
Section titled “Duplication Check”if (databaseSiswa.includes(namaBersih)) {includes() digunakan untuk mencegah nama siswa yang sama dimasukkan dua kali ke database.
Hapus berdasarkan Nama
Section titled “Hapus berdasarkan Nama”const pos = databaseSiswa.indexOf(nama)databaseSiswa.splice(pos, 1)Kita mencari nomor indeks nama tersebut menggunakan indexOf(). Jika ditemukan (pos !== -1), kita memotong 1 elemen di posisi indeks tersebut menggunakan splice().
Pencarian fleksibel (Case Insensitive)
Section titled “Pencarian fleksibel (Case Insensitive)”nama.toLowerCase().includes(keyword)Mengubah nama dan keyword menjadi huruf kecil semua (toLowerCase()) agar pencarian "an" tetap bisa menemukan "Andi" (huruf besar A).
Latihan
Section titled “Latihan”Kembangkan aplikasi ini:
- Tambahkan fitur untuk mengedit nama siswa (
editSiswa(namaLama, namaBaru)). - Tambahkan fitur untuk mengosongkan seluruh database sekaligus.
Ringkasan
Section titled “Ringkasan”- Aplikasi manajemen siswa modular dibangun dengan memisahkan fungsi database.
push()dansplice()menangani penambahan dan penghapusan data.includes()danfilter()mengelola pencarian dan validasi duplikasi..slice().sort()mengurutkan data tanpa merusak database utama.