Implementasi fitur siswa naik kelas
Fitur siswa naik kelas ini sebetulnya cukup simpel secara teori, tapi relatif susah jika diterapkan pada sebuah aplikasi, khususnya rancangan database atau struktur tabelnya
Saya menghabiskan berjam-jam untuk mencari tahu rancangan database yang bisa digunakan, saya rangkum semuanya disini agar nanti tidak kesulitan jika ketemu dengan studi kasus ini lagi, dan semoga bisa membantu anda juga
Setelah banyak melamun dan membayangkannya di pikiran untuk semua case sebagai pertimbangan, pada akhirnya bahan yang diperlukan cukup buku raport siswa saja, dari situ sudah terpampang jelas kebutuhan input dan output nya
Struktur tabel
Implementasi fitur siswa naik kelas harus disesuaikan dengan struktur tabel yang digunakan pada database nya
Berikut ini contoh struktur tabel yang saya buat agar bisa menerapkan fitur siswa naik kelas
Struktur tabel database nya relatif kompleks tapi sudah saya tes dan hasilnya fleksibel dan bisa digunakan pada sistem informasi sekolah atau sistem informasi akademik
Struktur tabel siswa
Tabel siswa sebagai data master siswa, atribut yang digunakan seperti informasi yang ada di halaman pertama raport siswa, atribut bisa disesuaikan dengan kebutuhan, disini contoh saya cantumkan beberapa saja
No | Atribut | Keterangan |
---|---|---|
1 | id | Primary key |
2 | nama | |
3 | jenis_kelamin | |
4 | tanggal_lahir | |
5 | tanggal_masuk | Tanggal masuk atau tahun masuk atau angkatan |
6 | status | Aktif, Lulus, Pindah |
Atribut status itu opsional, bisa digunakan jika ingin menerapkan fitur siswa pindah atau ingin menyimpan data siswa setelah lulus
Jadi saat siswa baru masuk maka statusnya otomatis Aktif, jika sudah lulus statusnya bisa di set ke Lulus, dan jika ada siswa yang pindah bisa di set ke Pindah, semua data siswa yang lulus dan pindah juga akan tersimpan
Kenapa tidak ada atribut kelas di tabel siswa?
Memang alur yang paling sederhana adalah menambahkan atribut kelas di tabel siswa, jadi nanti data siswanya bisa di ambil per kelas, untuk demo atau pembelajaran ini bisa diterapkan
Tapi tidak untuk fitur siswa naik kelas. Atribut kelas harus dipisah dari data siswa. Jika tidak, maka akan sulit untuk update datanya jika siswa tersebut naik atau pindah kelas
Struktur tabel kelas
No | Atribut | Keterangan |
---|---|---|
1 | id | Primary key |
2 | nama | Contoh kelas 7.1, 7.2, 8.1, dst |
Master data kelas untuk menyimpan semua kelas yang ada di sekolah
Struktur tabel mata pelajaran
No | Atribut | Keterangan |
---|---|---|
1 | id | Primary key |
2 | kode | Contoh: MP001, MP002, dst |
3 | nama |
Tabel mp sebagai master data mata pelajaran yang digunakan untuk nilai siswa
Struktur tabel guru
No | Atribut | Keterangan |
---|---|---|
1 | id | Primary key |
2 | nip | |
3 | nama | |
4 | pengguna_id | Foreign key |
Contoh beberapa atribut yang sering digunakan, bisa dilengkapi dengan data diri guru
Master data guru untuk arsip data guru atau digunakan untuk data wali kelas, jika ingin menerapkan fitur wali kelas untuk input nilai misalnya
Atribut pengguna_id juga opsional, bisa digunakan dengan relasi dari tabel pengguna sehingga guru tersebut punya akun di data pengguna dan bisa login
Struktur tabel pengguna
No | Atribut | Keterangan |
---|---|---|
1 | id | Primary key |
2 | nama | |
3 | username | |
4 | password | |
5 | role | Admin, Guru |
Atribut role atau level pengguna bisa dipisahkan juga ke tabel role, jadi nanti di tabel pengguna ada foreign key role_id
Jadi untuk cek role apa yang login bisa diambil dari atribut tersebut, baik menggunakan role seperti tabel diatas, atau menggunakan role_id jika membuat tabel role terpisah, alurnya sama saja
Struktur tabel tahun ajaran
No | Atribut | Keterangan |
---|---|---|
1 | id | Primary key |
2 | nama | Contoh: 2023/2024 |
Proses kenaikan kelas siswa itu terjadi satu kali di setiap tahun ajaran baru, jadi sudah pasti harus ada master data tahun ajaran untuk menyimpan semua data tahun ajaran
Struktur tabel tahun ajaran – kelas
No | Atribut | Keterangan |
---|---|---|
1 | id | Primary key |
2 | tahun_ajaran_id | Foreign key |
3 | kelas_id | Foreign key |
4 | guru_id | Foreign key, nullable |
Tabel relasi antara tahun ajaran dan tabel kelas, untuk menyimpan semua data kelas per tahun ajaran
Atribut guru_id opsional, disini digunakan sebagai data wali kelas, jadi riwayat data wali kelas per tahun ajarannya bisa tersimpan
Tabel ta_kelas ini bisa digunakan atau direlasikan dengan tabel lainnya yang membutuhkan riwayat data per tahun ajarannya, misalnya daftar siswa dan nilai
Struktur tabel tahun ajaran kelas – siswa
No | Atribut | Keterangan |
---|---|---|
1 | id | Primary key |
2 | ta_kelas_id | Foreign key |
3 | siswa_id | Foreign key |
Tabel ta_siswa digunakan untuk menyimpan data siswa per tahun ajaran untuk setiap kelas
Jadi data siswa untuk setiap tahun ajaran tersimpan riwayatnya dia ada di kelas mana saja selama tahun ajaran tersebut
Struktur tabel nilai siswa
No | Atribut | Keterangan |
---|---|---|
1 | id | Primary key |
2 | ta_kelas_id | Foreign key |
3 | siswa_id | Foreign key |
4 | mp_id | Foreign key |
5 | semester | Semester 1 (ganjil) / 2 (genap) |
6 | nilai_uts | |
7 | nilai_uas | |
8 | nilai_akhir |
Tabel ini bisa menampung semua nilai siswa berdasarkan tahun ajaran dan kelas nya
Contoh untuk mengambil data nilai siswa tahun ajaran 2023/2024 kelas 7.1, bisa di select dari ta_kelas dan ambil ta_kelas_id, lalu select dari tabel ini berdasarkan ta_kelas_id
Jika ingin per siswa tinggal tambahkan siswa_id kedalam seleksinya
Contoh atribut nilai yang biasa digunakan yaitu nilai UTS, UAS dan nilai akhir, bisa disesuaikan dengan kebutuhan di sekolahnya
Contoh UI (tampilan)
Untuk UI harusnya masalah selera, tapi hanya membayangkan sebuah alur aplikasi dari struktur tabel akan cukup sulit dilakukan
Berikut ini saya tampilkan tangkapan layar dari contoh struktur tabel yang sudah dijelaskan diatas
Tampilan master data
Semua tampilan master data sama saja dalam bentuk CRUD, contoh untuk menu data siswa
Menu kelas, mata pelajaran, pengguna dan guru, semuanya seperti diatas, beda di atributnya saja
Tampilan menu tahun ajaran
Untuk tahun ajaran sedikit berbeda, karena semuanya berawal dari sini, data riwayat siswa dan nilai siswa semuanya berawal dari menu tahun ajaran
Setelah tahun ajaran baru ditambahkan, maka record baru ditambahkan juga kedalam tabel ta_kelas sebanyak jumlah kelas yang ada dengan atribut guru_id yang masih null
Selanjutnya pengguna harus menambahkan data wali kelas untuk tahun ajaran tersebut
Di setiap tahun ajaran, wali kelas harus ditentukan untuk masing-masing kelas, bisa dilakukan dengan tombol pilih wali kelas yang nantinya akan menampilkan daftar data guru dan setelah disimpan, tabel ta_kelas di update untuk atribut guru_id yang null tadi
Proses siswa naik kelas itu dilakukan di menu ini, siswa naik kelas itu artinya siswa tersebut dimasukkan kedalam kelas baru untuk tahun ajaran baru
Di menu ini, siswa bisa ditambahkan ke kelas terpilih, contoh diatas siswa dimasukkan ke kelas 7.1 untuk tahun ajaran 2022/2023
Jika tahun depan ada kenaikan kelas lagi, maka tinggal masukkan saja data siswa nya ke kelas selanjutnya, kelas 8.1 misalnya
Bagaimana jika siswanya sudah lulus, berarti tidak usah dimasukkan lagi ke kelas baru di tahun ajaran selanjutnya, di set saja status di data siswanya ke ‘Lulus’
Jadi data riwayat kelas siswa tersebut tersimpan dengan baik kedalam 3 tahun ajaran
Di menu daftar siswa ini mengambil data dari tabel ta_siswa berdasarkan ta_kelas_id yang diambil dari tahun ajaran dan kelas terpilih
Contoh diatas untuk menambahkan siswa kedalam kelas baru di tahun ajaran baru satu per satu
Opsi lainnya bisa menggunakan cara import atau pindahkan data siswa, jadi tidak usah pilih siswa satu per satu, karena akan sangat melelahkan jika harus input ratusan siswa
Di tombol tersebut nanti tinggal tampilkan select tahun ajaran dan select kelas lama, lalu select kelas baru, dan tombol import
Jadi prosesnya dia select dari tabel ta_siswa untuk tahun ajaran dan kelas lama, lalu di looping saja dan insert ke tabel ta_siswa untuk tahun ajaran baru dan kelas baru
Saya belum implementasikan fitur ini, tapi kira-kira logikanya seperti itu
Sampai sini harusnya fitur siswa naik kelas sudah bisa dilakukan, jadi data siswa untuk setiap tahun ajaran dan kelasnya tersimpan semua riwayatnya
Untuk seleksi datanya kurang lebih seperti ini, ambil tahun_ajaran_id dan kelas_id dari tabel ta_kelas sesuai dengan pilihan pengguna, nantinya bisa didapatkan ta_kelas_id nya
Selanjutnya di select dari tabel ta_siswa berdasarkan ta_kelas_id tersebut
Tampilan menu nilai siswa
Logika serupa seperti menu riwayat data siswa bisa diterapkan untuk menu nilai siswa, bedanya ada tambahan semesternya, untuk penilaian siswa per semester
Dari menu ini, data nilai siswa per tahun ajaran, per kelas dan per semester, semuanya tersimpan riwayatnya dan bisa dilihat
Keterangan nilai raport (sudah/belum) hanya informasi saja jika siswa tersebut sudah dinilai atau belum, jadi bisa ketahuan siswa mana yang belum di nilai, untuk memudahkan wali kelas atau pengguna yang akan input data nilai siswa
Menu ini bisa digunakan wali kelas untuk input nilai siswa untuk setiap mata pelajaran, jadi nilainya di input satu per satu sesuai dengan mata pelajarannya
Nilai akhir bisa di set readonly dan otomatis terisi jika mengisi nilai UTS dan nilai UAS
Setelah siswa dinilai, harusnya datanya bisa dicetak sebagai laporan nilai raport siswa
Kesimpulan
Dari yang sudah dijelaskan pada artikel ini fitur siswa naik kelas bisa diterapkan dengan rancangan database dan struktur yang benar
Secara garis besar, saya hanya memisahkan master data, dan membuat tabel relasi untuk kebutuhan riwayat data yang ingin disimpan
Tabel ta_kelas dan ta_siswa untuk menyimpan riwayat data siswa per tahun ajaran
Tabel ta_kelas dan nilai untuk menyimpan riwayat data nilai siswa per tahun ajaran
Sebagai informasi tambahan, aplikasi yang saya buat ini menggunakan CodeIgniter 3, database MySQL, dan Bootstrap 5 untuk tampilannya