author Ahmad Muhardian

Belajar Membuat Aplikasi CRUDS dengan Python dan File CSV


Tutorial Membuat Aplikasi CRUDS dengan CSV

Ini adalah lanjutan dari tutorial sebelumnya:

Pada tutorial ini, kita akan belajar membuat aplikasi CRUDS berbasis CLI dengan file CSV sebagai media penyimpanan datanya.

CRUDS merupakan singkatan dari Craete, Read, Update, Delete, dan Search.

Kurang lebih, kita akan membuat aplikasi untuk melakukan lima hal tersebut.

Mari langsung saja kita mulai…

Membuat Menu Utama

Pertama kita membutuhkan tampilan utama dari aplikasi ini. Kita ingin menampilkan menu-menu atau fitur yang ada di dalam aplikasi.

Mari kita langsung buat..

Silahkan buat program baru bernama app_csv.py, kemudian isi dengan kode berikut:

import csv
import os

csv_filename = 'contacts.csv'

def clear_screen():
    os.system('cls' if os.name == 'nt' else 'clear')

def show_menu():
    clear_screen()
    print("=== APLIKASI KONTAK ===")
    print("[1] Lihat Daftar Kontak")
    print("[2] Buat Kontak Baru")
    print("[3] Edit Kontak")
    print("[4] Hapus Kontak")
    print("[5] Cari Kontak")
    print("[0] Exit")
    print("------------------------")
    selected_menu = input("Pilih menu> ")
    
    if(selected_menu == "1"):
        show_contact()
    elif(selected_menu == "2"):
        create_contact()
    elif(selected_menu == "3"):
        edit_contact()
    elif(selected_menu == "4"):
        delete_contact()
    elif(selected_menu == "5"):
        search_contact()
    elif(selected_menu == "0"):
        exit()
    else:
        print("Kamu memilih menu yang salah!")
        back_to_menu()

def back_to_menu():
    print("\n")
    input("Tekan Enter untuk kembali...")
    show_menu()

Pada kode program tersebut, kita menggunakan dua modul.. yakni: csv dan os.

import csv
import os

Modul csv kita butuhkan untuk membaca dan menulis file CSV.

Lalu modul os kita butuhkan untuk melakukan clear screen.

Kita juga menyiapkan variabel global bernama csv_filename untuk menentukan file CSV yang akan digunakan.

Untuk saat ini, variabel ini belum kita pakai.. karena kita belum membuat fungsi CRUDS.

Selanjutnya coba perhatikan fungsi clear_screen()

def clear_screen():
    os.system('cls' if os.name == 'nt' else 'clear')

Fungsi ini akan kita gunakan untuk membersihkan layar. Fungsi ini sebenarnya akan menjalankan perintah cls (jika di Windows) dan clear (jika di Linux dan Unix).

Berikutnya kita membuat fungsi show_menu() yang akan menampilkan daftar menu dan menjalankan fungsi tertentu sesuai dengan menu yang dipilih oleh user.

Tereakhir kita membuat fungsi back_to_menu() untuk kembali ke menu utama.

Aplikasi ini belum bisa dijalankan, karena kita belum membuat fungsi-fungsi yang lain seperti show_contact(), create_contact(), edit_contact(), delete_contact(), dan search_contact().

Tapi kalau kamu penasaran hasilnya seperti apa..

..ini adalah hasil akhirnya nanti:

Tampilan program akhir yang akan dibuat

Nah sekarang mari kita lanjutkan membuat fungsi menu yang belum ada.

Membuat Fungsi Lihat Data

Fungsi ini akan dijalankan saat user memilih menu 1, yakni melihat daftar kontak.

Silahkan tambahkan fungsi show_contact(), di bawah fungsi back_to_menu().

def show_contact():
    clear_screen()
    contacts = []
    with open(csv_filename) as csv_file:
        csv_reader = csv.reader(csv_file, delimiter=",")
        for row in csv_reader:
            contacts.append(row)
    
    if (len(contacts) > 0):
        labels = contacts.pop(0)
        print(f"{labels[0]} \t {labels[1]} \t\t {labels[2]}")
        print("-"*34)
        for data in contacts:
            print(f'{data[0]} \t {data[1]} \t {data[2]}')
    else:
        print("Tidak ada data!")
    back_to_menu()

Fungsi show_contact() akan membaca file CSV kemudian menampilkan datanya.

Jika tidak ada data di dalam file CSV, maka akan ditampilkan pesan "Tidak ada data!".

Membuat Fungsi Create

Fungsi ini akan dipanggil saat user memilih menu Buat Kontak Baru.

Pada fungsi ini kita akan meminta user untuk menginputkan data baru.

Kemudian data tersebut kita tulis ke dalam file CSV.

Mari kita buat…

Silahkan tambahkan fungsi create_contact() di bawah kode fungsi show_contact().

def create_contact():
    clear_screen()
    with open(csv_filename, mode='a') as csv_file:
        fieldnames = ['NO', 'NAMA', 'TELEPON']
        writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
        
        no = input("No urut: ")
        nama = input("Nama lengkap: ")
        telepon = input("No. Telepon: ")

        writer.writerow({'NO': no, 'NAMA': nama, 'TELEPON': telepon})    
        print("Berhasil disimpan!")
    
    back_to_menu()

Pada fungsi ini, kita menggunakan mode a (append) untuk membuka file CSV.. Karena kita ingin menambah data, bukan menulis ulang.

Membuat Fungsi Cari

Fungsi cari akan dieksekusi saat user memilih menu cari kontak. Silahkan tambah fungsi search_contact() di bawah fungsi create_contact() dengan isi seperti ini:

def search_contact():
    clear_screen()
    contacts = []

    with open(csv_filename, mode="r") as csv_file:
        csv_reader = csv.DictReader(csv_file)
        for row in csv_reader:
            contacts.append(row)

    no = input("Cari berdasrakan nomer urut> ")

    data_found = []

    # mencari contact
    indeks = 0
    for data in contacts:
        if (data['NO'] == no):
            data_found = contacts[indeks]
            
        indeks = indeks + 1

    if len(data_found) > 0:
        print("DATA DITEMUKAN: ")
        print(f"Nama: {data_found['NAMA']}")
        print(f"Telepon: {data_found['TELEPON']}")
    else:
        print("Tidak ada data ditemukan")
    back_to_menu()

Membuat Fungsi Edit

Fungsi edit akan dieksekusi saat user memilih menu edit kontak. Fungsi akan melakukan baca data, lalu mencari data berdasarkan nomer yang diinputkan. Setelah itu, menulis ulang semua data.

Silahkan tambahkan fungsi edit_contact() di bawah fungsi search_contact() dengan isi seperti ini:

def edit_contact():
    clear_screen()
    contacts = []

    with open(csv_filename, mode="r") as csv_file:
        csv_reader = csv.DictReader(csv_file)
        for row in csv_reader:
            contacts.append(row)

    print("NO \t NAMA \t\t TELEPON")
    print("-" * 32)

    for data in contacts:
        print(f"{data['NO']} \t {data['NAMA']} \t {data['TELEPON']}")

    print("-----------------------")
    no = input("Pilih nomer kontak> ")
    nama = input("nama baru: ")
    telepon = input("nomer telepon baru: ")

    # mencari contact dan mengubah datanya
    # dengan data yang baru
    indeks = 0
    for data in contacts:
        if (data['NO'] == no):
            contacts[indeks]['NAMA'] = nama
            contacts[indeks]['TELEPON'] = telepon
        indeks = indeks + 1

    # Menulis data baru ke file CSV (tulis ulang)
    with open(csv_filename, mode="w") as csv_file:
        fieldnames = ['NO', 'NAMA', 'TELEPON']
        writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
        writer.writeheader()
        for new_data in contacts:
            writer.writerow({'NO': new_data['NO'], 'NAMA': new_data['NAMA'], 'TELEPON': new_data['TELEPON']}) 

    back_to_menu()

Pada fungsi edit_contact(), kita menggunakan mode w (write) untuk menulis ulang semua data di CSV.

Membuat Fungsi Delete

Fungsi delete akan dieksekusi saat user memilih menu hapus kontak. Fungsi ini sebenarnya hampir sama dengan fungsi edit_contact().

Fungsi delete akan menghapus data sesuai dengan nomer urut data yang diinputkan user.

Silahkan tambahkan fungsi delete_contact() di bawah fungsi edit_contact() dengan isi seperti ini:

def delete_contact():
    clear_screen()
    contacts = []

    with open(csv_filename, mode="r") as csv_file:
        csv_reader = csv.DictReader(csv_file)
        for row in csv_reader:
            contacts.append(row)

    print("NO \t NAMA \t\t TELEPON")
    print("-" * 32)

    for data in contacts:
        print(f"{data['NO']} \t {data['NAMA']} \t {data['TELEPON']}")

    print("-----------------------")
    no = input("Hapus nomer> ")

    # mencari contact dan mengubah datanya
    # dengan data yang baru
    indeks = 0
    for data in contacts:
        if (data['NO'] == no):
            contacts.remove(contacts[indeks])
        indeks = indeks + 1

    # Menulis data baru ke file CSV (tulis ulang)
    with open(csv_filename, mode="w") as csv_file:
        fieldnames = ['NO', 'NAMA', 'TELEPON']
        writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
        writer.writeheader()
        for new_data in contacts:
            writer.writerow({'NO': new_data['NO'], 'NAMA': new_data['NAMA'], 'TELEPON': new_data['TELEPON']}) 

    print("Data sudah terhapus")
    back_to_menu()

Membuat Main Loop

Main loop kita butuhkan agar program terus berjalan selama kita tidak menutupnya.

Silahkan tambahkan main loop di bagian akhir seperti ini:

if __name__ == "__main__":
    while True:
        show_menu()

Maka sekarang kode lengkap programnya akan menjadi seperti ini:

import csv
import os

csv_filename = 'contacts.csv'

def clear_screen():
    os.system('cls' if os.name == 'nt' else 'clear')

def show_menu():
    clear_screen()
    print("=== APLIKASI KONTAK ===")
    print("[1] Lihat Daftar Kotak")
    print("[2] Buat Kontak Baru")
    print("[3] Edit Kontak")
    print("[4] Hapus Kontak")
    print("[5] Cari Kontak")
    print("[0] Exit")
    print("------------------------")
    selected_menu = input("Pilih menu> ")
    
    if(selected_menu == "1"):
        show_contact()
    elif(selected_menu == "2"):
        create_contact()
    elif(selected_menu == "3"):
        edit_contact()
    elif(selected_menu == "4"):
        delete_contact()
    elif(selected_menu == "5"):
        search_contact()
    elif(selected_menu == "0"):
        exit()
    else:
        print("Kamu memilih menu yang salah!")
        back_to_menu()

def back_to_menu():
    print("\n")
    input("Tekan Enter untuk kembali...")
    show_menu()


def show_contact():
    clear_screen()
    contacts = []
    with open(csv_filename) as csv_file:
        csv_reader = csv.reader(csv_file, delimiter=",")
        for row in csv_reader:
            contacts.append(row)

    if (len(contacts) > 0):
        labels = contacts.pop(0)
        print(f"{labels[0]} \t {labels[1]} \t\t {labels[2]}")
        print("-"*34)
        for data in contacts:
            print(f'{data[0]} \t {data[1]} \t {data[2]}')
    else:
        print("Tidak ada data!")
    back_to_menu()


def create_contact():
    clear_screen()
    with open(csv_filename, mode='a') as csv_file:
        fieldnames = ['NO', 'NAMA', 'TELEPON']
        writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
        
        no = input("No urut: ")
        nama = input("Nama lengkap: ")
        telepon = input("No. Telepon: ")

        writer.writerow({'NO': no, 'NAMA': nama, 'TELEPON': telepon})
        print("Berhasil disimpan!")

    back_to_menu()


def search_contact():
    clear_screen()
    contacts = []

    with open(csv_filename, mode="r") as csv_file:
        csv_reader = csv.DictReader(csv_file)
        for row in csv_reader:
            contacts.append(row)

    no = input("Cari berdasrakan nomer urut> ")

    data_found = []

    # mencari contact
    indeks = 0
    for data in contacts:
        if (data['NO'] == no):
            data_found = contacts[indeks]
            
        indeks = indeks + 1

    if len(data_found) > 0:
        print("DATA DITEMUKAN: ")
        print(f"Nama: {data_found['NAMA']}")
        print(f"Telepon: {data_found['TELEPON']}")
    else:
        print("Tidak ada data ditemukan")
    back_to_menu()
    


def edit_contact():
    clear_screen()
    contacts = []

    with open(csv_filename, mode="r") as csv_file:
        csv_reader = csv.DictReader(csv_file)
        for row in csv_reader:
            contacts.append(row)

    print("NO \t NAMA \t\t TELEPON")
    print("-" * 32)

    for data in contacts:
        print(f"{data['NO']} \t {data['NAMA']} \t {data['TELEPON']}")

    print("-----------------------")
    no = input("Pilih nomer kontak> ")
    nama = input("nama baru: ")
    telepon = input("nomer telepon baru: ")

    # mencari contact dan mengubah datanya
    # dengan data yang baru
    indeks = 0
    for data in contacts:
        if (data['NO'] == no):
            contacts[indeks]['NAMA'] = nama
            contacts[indeks]['TELEPON'] = telepon
        indeks = indeks + 1

    # Menulis data baru ke file CSV (tulis ulang)
    with open(csv_filename, mode="w") as csv_file:
        fieldnames = ['NO', 'NAMA', 'TELEPON']
        writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
        writer.writeheader()
        for new_data in contacts:
            writer.writerow({'NO': new_data['NO'], 'NAMA': new_data['NAMA'], 'TELEPON': new_data['TELEPON']}) 

    back_to_menu()



def delete_contact():
    clear_screen()
    contacts = []

    with open(csv_filename, mode="r") as csv_file:
        csv_reader = csv.DictReader(csv_file)
        for row in csv_reader:
            contacts.append(row)

    print("NO \t NAMA \t\t TELEPON")
    print("-" * 32)

    for data in contacts:
        print(f"{data['NO']} \t {data['NAMA']} \t {data['TELEPON']}")

    print("-----------------------")
    no = input("Hapus nomer> ")

    # mencari contact dan mengubah datanya
    # dengan data yang baru
    indeks = 0
    for data in contacts:
        if (data['NO'] == no):
            contacts.remove(contacts[indeks])
        indeks = indeks + 1

    # Menulis data baru ke file CSV (tulis ulang)
    with open(csv_filename, mode="w") as csv_file:
        fieldnames = ['NO', 'NAMA', 'TELEPON']
        writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
        writer.writeheader()
        for new_data in contacts:
            writer.writerow({'NO': new_data['NO'], 'NAMA': new_data['NAMA'], 'TELEPON': new_data['TELEPON']}) 

    print("Data sudah terhapus")
    back_to_menu()

if __name__ == "__main__":
    while True:
        show_menu()

Waah, lumayan panjang ya..

Oke sekarang mari kita:

Uji Coba Program

Melihat daftar kontak:

Uji coba aplikasi: lihat data

Menambahkan data baru:

Uji coba aplikasi: menambahkan data

Edit Data:

Uji coba aplikasi: edit data

Mencari Data:

Uji coba aplikasi: mencari data

Menghapus Data:

Uji coba aplikasi: menghapus data

Salah Pilih Menu:

Uji coba aplikasi: Salah Pilih Menu

Keluar:

Uji coba aplikasi: keluar

Akhir Kata…

Walapun masih belum sempurna, aplikasi bisa digunakan seperti yang diharapkan. Dari contoh aplikasi ini, kita dapat memahami.. kapan sebaiknya menggunakan mode a, r, dan w dalam membuka file CSV.

Jika ada kesulitan dalam mengikuti tutorial ini, silahkan tanyakan melalui kolom komentar.

Oh iya, source code tutorial ini bisa kamu download di Github.

🎁 [ Download Source Code]

Terimakasih sudah mengikuti tutorial ini sampai akhir 🙏..

📖 untuk tutorial Python yang lainnya, cek di List tutorial Python

Baca Juga ini

Cara Baca dan Parse File CSV di Python (dan Contoh Programnya)

Cara Baca dan Parse File CSV di Python (dan Contoh Programnya)

Pada tutorial ini, kita akan belajar membaca, menulis, dan parsing file CSV dengan Python. Ini penting, karena CSV adalah file yang...

Belajar Python: Membuat Fungsi dengan Lambda Expression

Belajar Python: Membuat Fungsi dengan Lambda Expression

Pada tutorial ini, kita akan membahas konsep dasar lambda di python dilengkapi dengan contohnya agar kamu paham lambda dan bisa menggunakannya dalam program.

Tutorial Python dan MySQL: Membuat Aplikasi CRUDS Berbasis Teks

Tutorial Python dan MySQL: Membuat Aplikasi CRUDS Berbasis Teks

Pada tutorial ini kamu akan belajar cara menggunakan database MySQL dengan Python. Kita juga akan membuat sebuah program berbasis teks.

Belajar Microcontroller dengan MicroPython dan LumpyBoard

Belajar Microcontroller dengan MicroPython dan LumpyBoard

Pada tutorial ini, kamu akan belajar microcontroller dengan MicroPython pada LumpyBoard. Kita akan melakukan eksperimen pertama dengan mnyalakan lampu LED bawaan LumpyBoard.

Kenalan dengan LumpyBoard, Papan Microcontroller Buatan Anak Indonesia

Kenalan dengan LumpyBoard, Papan Microcontroller Buatan Anak Indonesia

LumpyBoard adalah papan microcontroller buatan anak indonesia yang dilengkapi dengan Wifi dan Bluetooth. LumpyBoard menggunakan firmware MicroPython sehingga dapat diprogram menggunakan bahasa pemrograman Python.

Belajar Pemrograman Game dengan PyGame (Tutorial Step-by-step untuk Pemula)

Belajar Pemrograman Game dengan PyGame (Tutorial Step-by-step untuk Pemula)

Pada tutorial ini kita akan belajar membuat game dari nol dengan PyGame. Dijelaskan dengan step-by-step, sehingga akan mudah dipahami pemula.