Absensi adalah proses penting dalam banyak organisasi dan institusi untuk melacak kehadiran dan kegiatan karyawan atau siswa. Dalam tutorial ini, kita akan belajar bagaimana membuat aplikasi absensi sederhana menggunakan Python dan menyimpan data absensi dalam database JSON lokal.

Persiapan

Sebelum memulai, pastikan Anda telah menginstal Python di komputer Anda. Selain itu, Anda juga membutuhkan editor teks seperti Visual Studio Code atau Sublime Text untuk menulis kode.

Langkah-langkah

  1. Membuat absensi.json

    {
        "siswa": [],
        "absensi": {}
    }

  2. Install modul yang dibutuhkan

    pip install prettytabl
  3. Buat file baru main.py

    Catatan: File ini harus satu folder dengan absensi json.

  4. Import modul yang dibutuhkan

    import json
    import os
    from datetime import datetime
    from prettytable import PrettyTable

  5. Buat fungsi untuk membaca database JSON

    def load_database():
        if not os.path.exists('absensi.json'):
            with open('absensi.json', 'w') as file:
                json.dump({"siswa": [], "absensi": {}}, file)
        with open('absensi.json', 'r') as file:
            return json.load(file)

    Fungsi ini memeriksa apakah file database JSON ('absensi.json') ada atau tidak. Jika tidak ada, maka file tersebut akan dibuat dengan struktur awal yang diperlukan, yaitu daftar siswa kosong dan daftar absensi kosong. Kemudian, fungsi membaca file JSON dan mengembalikan datanya.

  6. Buat fungsi untuk menyimpan database JSON

    def save_database(data):
        with open('absensi.json', 'w') as file:
            json.dump(data, file)

    Fungsi ini digunakan untuk menyimpan data ke dalam file database JSON ('absensi.json').

  7. Buat Fungsi untuk menambahkan siswa

    def tambah_siswa():
        database = load_database()
        siswa_baru = input("Masukkan nama siswa (pisahkan dengan koma jika lebih dari satu): ").split(',')
        for siswa in siswa_baru:
            if siswa.strip():
                database['siswa'].append({"nama": siswa.strip()})
        save_database(database)
        print("Siswa berhasil ditambahkan.")

    Fungsi ini memungkinkan pengguna untuk menambahkan satu atau lebih siswa ke dalam database. Pengguna diminta untuk memasukkan nama siswa, yang kemudian dipisahkan dan ditambahkan ke dalam struktur data JSON.

  8. Buat fungsi untuk melakukan absensi

    def absen():
        database = load_database()
        print("Daftar Siswa:")
        siswa_table = PrettyTable()
        siswa_table.field_names = ["ID", "Nama"]
        for i, siswa in enumerate(database['siswa']):
            siswa_table.add_row([i + 1, siswa['nama']])
        siswa_table.align = "l"
        print(siswa_table)
        id_siswa_input = input("Masukkan ID siswa yang ingin diabsen (pisahkan dengan koma jika lebih dari satu): ")
        id_siswa_list = [int(x.strip()) for x in id_siswa_input.split(',') if x.strip()]
        timestamp = datetime.now().strftime("%H:%M/%d-%m-%Y")
        if timestamp not in database['absensi']:
            database['absensi'][timestamp] = []
        for id_siswa in id_siswa_list:
            if 0 <= id_siswa < len(database['siswa']):
                database['absensi'][timestamp].append({"nama": database['siswa'][id_siswa]['nama'], "hadir": True})
            else:
                print(f"ID siswa {id_siswa} tidak valid.")
        save_database(database)
        print("Absensi berhasil.")

    Fungsi ini memungkinkan pengguna untuk melakukan absensi. Mereka diminta untuk memilih siswa yang ingin diabsen berdasarkan ID, dan absensi mereka dicatat di database bersama dengan waktu absen.

  9. Buat fungsi untuk lihat absensi

    def lihat_absensi():
        database = load_database()
        absensi_table = PrettyTable()
        absensi_table.field_names = ["Tanggal", "Jam", "Nama", "Status"]
        for timestamp, absensi in database['absensi'].items():
            jam, tanggal = timestamp.split("/")
            for siswa in database['siswa']:
                hadir = next((absen['hadir'] for absen in absensi if absen['nama'] == siswa['nama']), False)
                absensi_table.add_row([tanggal, jam, siswa['nama'], 'Hadir' if hadir else 'Tidak Hadir'])
        absensi_table.align = "l"
        print("Daftar Absensi:")
        print(absensi_table)

    Fungsi ini digunakan untuk melihat absensi yang telah dicatat dalam database. Ini mencetak tabel yang menampilkan tanggal, jam, nama siswa, dan status kehadiran mereka.

  10. Buat fungsi untuk menampilkan daftar siswa

    def daftar_siswa():
        database = load_database()
        siswa_table = PrettyTable()
        siswa_table.field_names = ["ID", "Nama"]
        siswa_table.align = "l"
        print("Daftar Siswa:")
        for i, siswa in enumerate(database['siswa']):
            siswa_table.add_row([i + 1, siswa['nama']])
        print(siswa_table)

    Fungsi ini memungkinkan pengguna untuk melihat daftar siswa yang ada dalam database.

  11. Buat fungsi untuk menampilkan menu

    def display_menu():
        menu_table = PrettyTable()
        menu_table.field_names = ["Pilihan", "Deskripsi"]
        menu_table.align = "l"
        menu_table.add_row(["1", "Tambah Siswa"])
        menu_table.add_row(["2", "Daftar Siswa"])
        menu_table.add_row(["3", "Absen"])
        menu_table.add_row(["4", "Lihat Absensi"])
        menu_table.add_row(["5", "Keluar"])
        print("Menu:")
        print(menu_table)

    Fungsi ini menampilkan menu utama aplikasi, yang mencakup pilihan untuk menambah siswa, melihat daftar siswa, melakukan absensi, melihat absensi, dan keluar dari program.

  12. Buat fungsi utama

    def main_menu():
        while True:
            display_menu()
            pilihan = input("Pilih menu: ")

            if pilihan == '1':
                tambah_siswa()
            elif pilihan == '2':
                daftar_siswa()
            elif pilihan == '3':
                absen()
            elif pilihan == '4':
                lihat_absensi()
            elif pilihan == '5':
                print("Terima kasih!")
                break
            else:
                print("Pilihan tidak valid. Silakan coba lagi.")

    Fungsi utama ini menjalankan aplikasi dengan menampilkan menu kepada pengguna dan memproses pilihan mereka.

  13. Buat fungsi menjalankan program

    if __name__ == "__main__":
        main_menu()

    Bagian ini memastikan bahwa aplikasi dijalankan ketika file ini dijalankan langsung, bukan diimpor sebagai modul ke dalam program lain. Itu memanggil fungsi main_menu() untuk memulai eksekusi program.

  14. Jalankan program

    python main.py

Dengan langkah-langkah sederhana ini, Anda telah membuat aplikasi absensi sederhana menggunakan Python dan menyimpan data absensi dalam database JSON lokal.

Selamat mencoba!