Prompt:
Saya adalah seorang siswa smk program keahlian pemasaran. dalam gak ini berperan sebagai seorang kasir di supermarket. buatkan aplikasi/program dengan menggunakan bahasa python untuk membuat aplikasi kasir, yang inputannya berupa dropdown terdiri dari nama barang, jumlah, harga, satuan, Harga total keseluruhan dan total pembayarannya. lengkapi dengan penjelasan setiap barisnya agar mudah untuk dipahami. tampilan dibuat secara GUI dan tiga Dimensi yang Elegan tema ELEGAN Aesthetic
Karena belum lengkap jadi buatlagi dengan memasukkan hal yang kurang
total harga, jumlah bayar dan cetak struknya belum ada lengkapi ya
Hasil Struk:
Prompt:
import tkinter as tkfrom tkinter import ttk, messageboxfrom datetime import datetime# --- Data Barang (Nama : (Harga, Satuan)) ---data_barang = {"Sabun Mandi": (5000, "buah"),"Shampo Botol": (15000, "botol"),"Beras 5kg": (65000, "karung"),"Minyak Goreng 1L": (18000, "liter"),"Gula Pasir 1kg": (16000, "kg"),"Teh Celup": (12000, "kotak")}# --- List transaksi ---daftar_transaksi = []# --- Fungsi Tambah Barang ke Transaksi ---def tambah_barang():try:barang = combo_barang.get()jumlah = int(entry_jumlah.get())if barang not in data_barang:messagebox.showwarning("Peringatan", "Pilih barang yang valid!")returnharga, satuan = data_barang[barang]total = jumlah * hargadaftar_transaksi.append((barang, jumlah, harga, satuan, total))tampilkan_transaksi()except ValueError:messagebox.showerror("Error", "Jumlah harus berupa angka!")# --- Fungsi Menampilkan Data Transaksi di Listbox ---def tampilkan_transaksi():listbox_transaksi.delete(0, tk.END)total_belanja = 0for i, (barang, jumlah, harga, satuan, total) in enumerate(daftar_transaksi, start=1):listbox_transaksi.insert(tk.END, f"{i}. {barang} ({jumlah} {satuan}) - Rp {total:,}")total_belanja += totallabel_total_belanja.config(text=f"Rp {total_belanja:,}")# --- Fungsi Hitung Kembalian ---def hitung_kembalian():try:total_belanja = sum(t[4] for t in daftar_transaksi)bayar = int(entry_bayar.get())if bayar < total_belanja:messagebox.showwarning("Peringatan", "Uang tidak cukup untuk membayar!")returnkembalian = bayar - total_belanjalabel_kembalian.config(text=f"Rp {kembalian:,}")except ValueError:messagebox.showerror("Error", "Masukkan jumlah bayar dalam angka!")# --- Fungsi Cetak Struk ke File ---def cetak_struk():if not daftar_transaksi:messagebox.showwarning("Peringatan", "Belum ada transaksi untuk dicetak!")returntotal_belanja = sum(t[4] for t in daftar_transaksi)bayar = entry_bayar.get()kembalian = label_kembalian.cget("text")waktu = datetime.now().strftime("%d-%m-%Y %H:%M:%S")# Membuat isi strukstruk = []struk.append("========== STRUK PEMBAYARAN ==========\n")struk.append(f"SMK BP SUBULUL HUDA - KASIR SUPERMARKET\n")struk.append(f"Waktu: {waktu}\n")struk.append("---------------------------------------\n")for barang, jumlah, harga, satuan, total in daftar_transaksi:struk.append(f"{barang} ({jumlah} {satuan}) Rp {harga:,} -> Rp {total:,}\n")struk.append("---------------------------------------\n")struk.append(f"Total Belanja : Rp {total_belanja:,}\n")struk.append(f"Jumlah Bayar : Rp {bayar}\n")struk.append(f"Kembalian : {kembalian}\n")struk.append("=======================================\n")struk.append("Terima Kasih Telah Berbelanja 🙏\n")# Simpan ke filewith open("struk_kasir.txt", "w", encoding="utf-8") as f:f.writelines(struk)messagebox.showinfo("Struk Disimpan", "✅ Struk berhasil disimpan sebagai 'struk_kasir.txt'")# --- GUI UTAMA ---root = tk.Tk()root.title("🛒 Aplikasi Kasir Elegan - SMK BP Subulul Huda")root.geometry("650x550")root.configure(bg="#f9f6f2")# --- FRAME UTAMA (3D Aesthetic) ---frame = tk.Frame(root, bg="#ffffff", relief="raised", bd=6)frame.place(relx=0.5, rely=0.5, anchor="center", width=580, height=500)judul = tk.Label(root, text="💳 Kasir Supermarket Elegan", font=("Poppins", 16, "bold"), bg="#f9f6f2", fg="#4e342e")judul.pack(pady=10)# --- Bagian Input Barang ---tk.Label(frame, text="Nama Barang:", font=("Poppins", 11), bg="#ffffff").place(x=30, y=30)combo_barang = ttk.Combobox(frame, values=list(data_barang.keys()), state="readonly", width=25)combo_barang.place(x=160, y=30)combo_barang.current(0)tk.Label(frame, text="Jumlah:", font=("Poppins", 11), bg="#ffffff").place(x=30, y=70)entry_jumlah = ttk.Entry(frame, width=10)entry_jumlah.place(x=160, y=70)btn_tambah = tk.Button(frame, text="Tambah Barang", command=tambah_barang, bg="#4e342e", fg="white", font=("Poppins", 10, "bold"), relief="raised", bd=4)btn_tambah.place(x=160, y=105)# --- Daftar Transaksi ---tk.Label(frame, text="Daftar Transaksi:", font=("Poppins", 11, "bold"), bg="#ffffff", fg="#4e342e").place(x=30, y=150)listbox_transaksi = tk.Listbox(frame, width=55, height=10, font=("Consolas", 10), bg="#f4f0ec", relief="sunken", bd=3)listbox_transaksi.place(x=30, y=180)# --- Total Belanja ---tk.Label(frame, text="Total Belanja:", font=("Poppins", 11), bg="#ffffff").place(x=30, y=370)label_total_belanja = tk.Label(frame, text="Rp 0", font=("Poppins", 11, "bold"), bg="#ffffff", fg="#00695c")label_total_belanja.place(x=160, y=370)# --- Input Jumlah Bayar ---tk.Label(frame, text="Jumlah Bayar:", font=("Poppins", 11), bg="#ffffff").place(x=30, y=400)entry_bayar = ttk.Entry(frame, width=15)entry_bayar.place(x=160, y=400)# --- Kembalian ---tk.Label(frame, text="Kembalian:", font=("Poppins", 11), bg="#ffffff").place(x=30, y=430)label_kembalian = tk.Label(frame, text="-", font=("Poppins", 11, "bold"), bg="#ffffff", fg="#c2185b")label_kembalian.place(x=160, y=430)# --- Tombol Aksi ---btn_kembalian = tk.Button(frame, text="Hitung Kembalian", command=hitung_kembalian, bg="#00695c", fg="white", font=("Poppins", 10, "bold"), relief="raised", bd=4)btn_kembalian.place(x=350, y=400)btn_cetak = tk.Button(frame, text="🧾 Cetak Struk", command=cetak_struk, bg="#8e24aa", fg="white", font=("Poppins", 10, "bold"), relief="raised", bd=4)btn_cetak.place(x=350, y=440)# --- Footer ---footer = tk.Label(root, text="SMK BP Subulul Huda | Program Keahlian Pemasaran", font=("Poppins", 9), bg="#f9f6f2", fg="#8d6e63")footer.pack(side="bottom", pady=10)root.mainloop()