LAPORAN INTI
1.1. Hasil Tugas 1
1.1.1 Eksplorasi Konsep
Vending machine merupakan suatu alat atau mesin yang menjual
barang secara otomatis. Vending machine tidak membutuhkan tenaga operator
(dapat beroperasi secara standalone) untuk menjual dan melayani transaksi
pembelian suatu barang. Keunggulannya, konsumen dapat langsung memilih
sendiri barang yang diinginkan. Dengan begitu, proses jual-beli dapat lebih
mudah, efisiensi, praktis dan tidak menghabiskan waktu yang banyak.
Di masa perkuliahan, waktu merupakan suatu hal yang esensial bagi
mahasiswa, khususnya mahasiswa ITB. Penjualan makanan secara
konvensional terkadang tidak efisien dan menghabiskan banyak waktu seperti
adanya antrian, sistem pembayaran yang kurang efektif, dan penyajian
makanan yang relatif lama sehingga dibutuhkan suatu inovasi untuk mengatasi
masalah tersebut. Oleh karena itu, kami membuat vending machine yang
menjual berbagai makanan dan minuman secara langsung agar mahasiswa
dapat memanfaatkan waktunya secara efektif dan efisien.
1.1.2 Tujuan
Tujuan dari pembuatan program vending machine ini adalah :
2.1.2.1 Memudahkan mahasiswa untuk mendapatkan makanan /
minuman yang dibutuhkan pada saat masa perkuliahan.
2.1.2.2 Menyediakan Burger, Hotdog, Ayam suwir, Onigiri, Air putih ,
Coca cola, dan Susu UHT dengan cepat dan mudah.
1
1.2 Hasil Tugas 2
Pada vending machine ini, kami menjual Burger, Hotdog, Ayam suwir, Onigiri, Air putih,
Coca cola, dan Susu UHT dengan input-proses-output sebagai berikut.
1.2.1 Input
User menginput uang dengan ketentuan diatas Rp 5000,00. Lalu user
menginput barang yang ingin dibeli beserta jumlahnya.
1.2.2 Proses
Mesin akan memproses barang yang dipilih dengan uang yang diinput.
Bila uang yang diinput kurang dari harga barang yang dipilih, maka user akan
diminta untuk mengurangi / mengganti barang yang dipilih. Selain itu, user
bisa menginput kembali uang apabila barang yang dipilih melebihi uang yang
diinput sebelumnya, ataupun bisa user ingin menambah barang yang ingiin
dibeli.
2
1.2.3 Output
Setelah transaksi berhasil, barang yang sudah dipilih akan keluar. dan
menampilkan struk pembelian
3
1.3. Hasil Tugas 3 (Source Code Program)
''' FUNGSI UNTUK OPERASI SERTA MENAMPILKAN JUMLAH BARANG DAN TOTAL HARGA '''
def label_jumlah():
global window2
global list_jumlah_produk
global list_total_harga
global total_harga
for i in range(len(list_total_harga)):
list_total_harga[i] = list_produk[i][1]*list_jumlah_produk[i]
label_jml_barang_1 = Label(window2,text=f"{list_jumlah_produk[0]}")
label_total_harga_1 = Label(window2,text=f"{list_total_harga[0]:,}")
label_jml_barang_1.place(x=194,y=50+20*1,width=60)
label_total_harga_1.place(x=296,y=50+20*1,width=100)
label_jml_barang_2 = Label(window2,text=f"{list_jumlah_produk[1]}")
label_total_harga_2 = Label(window2,text=f"{list_total_harga[1]:,}")
4
label_jml_barang_2.place(x=194,y=50+20*2,width=60)
label_total_harga_2.place(x=296,y=50+20*2,width=100)
label_jml_barang_3 = Label(window2,text=f"{list_jumlah_produk[2]}")
label_total_harga_3 = Label(window2,text=f"{list_total_harga[2]:,}")
label_jml_barang_3.place(x=194,y=50+20*3,width=60)
label_total_harga_3.place(x=296,y=50+20*3,width=100)
label_jml_barang_4 = Label(window2,text=f"{list_jumlah_produk[3]}")
label_total_harga_4 = Label(window2,text=f"{list_total_harga[3]:,}")
label_jml_barang_4.place(x=194,y=50+20*4,width=60)
label_total_harga_4.place(x=296,y=50+20*4,width=100)
label_jml_barang_5 = Label(window2,text=f"{list_jumlah_produk[4]}")
label_total_harga_5 = Label(window2,text=f"{list_total_harga[4]:,}")
label_jml_barang_5.place(x=194,y=50+20*5,width=60)
label_total_harga_5.place(x=296,y=50+20*5,width=100)
label_jml_barang_6 = Label(window2,text=f"{list_jumlah_produk[5]}")
label_total_harga_6 = Label(window2,text=f"{list_total_harga[5]:,}")
label_jml_barang_6.place(x=194,y=50+20*6,width=60)
label_total_harga_6.place(x=296,y=50+20*6,width=100)
label_jml_barang_7 = Label(window2,text=f"{list_jumlah_produk[6]}")
label_total_harga_7 = Label(window2,text=f"{list_total_harga[6]:,}")
label_jml_barang_7.place(x=194,y=50+20*7,width=60)
label_total_harga_7.place(x=296,y=50+20*7,width=100)
label_total_harga = Label(window2,text=f"Rp{total_harga:,}",bg="#8a8787",foreground="black")
label_total_harga.place(x=296,y=50+20*8,width=100)
def tambah_produk_2():
global list_jumlah_produk
5
list_jumlah_produk[1] += 1
label_jumlah()
def tambah_produk_3():
global list_jumlah_produk
list_jumlah_produk[2] += 1
label_jumlah()
def tambah_produk_4():
global list_jumlah_produk
list_jumlah_produk[3] += 1
label_jumlah()
def tambah_produk_5():
global list_jumlah_produk
list_jumlah_produk[4] += 1
label_jumlah()
def tambah_produk_6():
global list_jumlah_produk
list_jumlah_produk[5] += 1
label_jumlah()
def tambah_produk_7():
global list_jumlah_produk
list_jumlah_produk[6] += 1
label_jumlah()
def kurang_produk_2():
global list_jumlah_produk
if list_jumlah_produk[1] > 0:
list_jumlah_produk[1] -= 1
label_jumlah()
6
def kurang_produk_3():
global list_jumlah_produk
if list_jumlah_produk[2] > 0:
list_jumlah_produk[2] -= 1
label_jumlah()
def kurang_produk_4():
global list_jumlah_produk
if list_jumlah_produk[3] > 0:
list_jumlah_produk[3] -= 1
label_jumlah()
def kurang_produk_5():
global list_jumlah_produk
if list_jumlah_produk[4] > 0:
list_jumlah_produk[4] -= 1
label_jumlah()
def kurang_produk_6():
global list_jumlah_produk
if list_jumlah_produk[5] > 0:
list_jumlah_produk[5] -= 1
label_jumlah()
def kurang_produk_7():
global list_jumlah_produk
if list_jumlah_produk[6] > 0:
list_jumlah_produk[6] -= 1
label_jumlah()
''' FUNGSI UNTUK MERESET SEMUA JUMLAH BARANG MENJADI NOL '''
def reset():
global window2
global list_jumlah_produk
label_jumlah()
7
# FUNGSI UNTUK MEMBATALKAN TRANSAKSI
def batal():
global window2
global saldo
reset()
window2.destroy()
show_uang_kembali = messagebox.showinfo(message=f"Uang Anda sebesar Rp{saldo:,} telah
dikembalikan.")
if (entry_tambah_saldo.get()) == "":
show_warning = messagebox.showwarning(message=f"Anda belum memasukkan nominal saldo yang
akan ditambahkan.\nSilakan masukkan nominal terlebih dahulu.")
else:
saldo_tambahan = int(entry_tambah_saldo.get())
entry_tambah_saldo.delete(0,END)
saldo += saldo_tambahan
show_saldo = Label(window2,text=f"Rp{saldo:,}",font=font.Font(size=10))
show_saldo.place(x=296,y=295,width=100)
8
## TOTAL HARGA BELANJA
label_total_belanja = Label(window_x,text="Total Harga",bg="yellow")
label_total_belanja.place(x=296,y=50,width=100)
if total_harga > 0:
if saldo < total_harga:
show_saldo_kurang = messagebox.showwarning(message="Saldo Anda kurang. Silakan tambah saldo
Anda terlebih dahulu.")
else:
konfirmasi = messagebox.askquestion(message="Tindakan ini akan langsung melakukan pembayaran.
Anda yakin ingin lanjut?")
if konfirmasi == "yes":
window3 = Toplevel()
window3.title("STRUK BELANJA")
window3.geometry(f"300x470+{int(lebar_layar/2 - 300/2)}+{int(tinggi_layar/2 - 470/2)}")
window3.resizable(False,False)
window3.configure(bg="white")
list_jumlah_produk_win3 = list_jumlah_produk
total_harga_win3 = total_harga
reset()
window2.destroy()
bayar = saldo
kembali = bayar - total_harga_win3
Label(window3,text="="*50,bg='white').place(y=0,width=300)
judul_struk = Label(window3,text="STRUK BELANJA",bg='white',font=font.Font(size=12))
9
Label(window3,text="="*50,bg='white').place(y=40,width=300)
judul_struk.place(y=20,width=300)
show_waktu = Label(window3,text=waktu,bg="white")
show_waktu.place(y=60,width=300)
Label(window3,text="-"*80,bg="white").place(y=100,width=300)
Label(window3,text="PRODUK",bg="white").place(x=10,y=115)
Label(window3,text="JUMLAH",bg="white").place(x=165,y=115)
Label(window3,text="HARGA",bg="white").place(x=245,y=115)
Label(window3,text="-"*80,bg="white").place(y=130,width=300)
x=1
for i in range(len(list_jumlah_produk_win3)):
if (list_jumlah_produk_win3[i] > 0):
Label(window3,text=list_produk[i][0],bg="white").place(x=10,y=130+20*x)
Label(window3,text=f"x{list_jumlah_produk_win3[i]}",bg="white").place(x=165,y=130+20*x,width=50)
Label(window3,text=f"{(list_produk[i][1])*(list_jumlah_produk_win3[i]):,}",bg="white").place(x=255,y=130+
20*x)
x += 1
Label(window3,text="-"*80,bg="white").place(y=130+20*x,width=300)
x += 1
Label(window3,text="TOTAL",bg="white",justify="right").place(x=10,y=130+20*x)
Label(window3,text=f"Rp{total_harga_win3:,}",bg="white",justify="right").place(x=235,y=130+20*x)
x += 2
Label(window3,text="BAYAR",bg="white").place(x=10,y=130+20*x)
Label(window3,text=f"Rp{bayar:,}",bg="white",justify="right").place(x=235,y=130+20*x)
x += 1
Label(window3,text="KEMBALI",bg="white").place(x=10,y=130+20*x)
Label(window3,text=f"Rp{kembali:,}",bg="white",justify="right").place(x=235,y=130+20*x)
10
x += 2
Label(window3,text="="*50,bg='white').place(y=130+20*x,width=300)
x += 1
Label(window3,text="TERIMA KASIH",bg='white').place(y=130+20*x,width=300)
x += 1
Label(window3,text="="*50,bg='white').place(y=130+20*x,width=300)
window2 = Toplevel()
window2.title("PEMILIHAN PRODUK")
window2.geometry(f"405x400+{int(lebar_layar/2 - 405/2)}+{int(tinggi_layar/2 - 400/2)}")
window2.resizable(False,False)
window2.configure(bg="#B4F0F0")
label_jumlah()
kolom(window2)
11
label_barang_5 = Label(window2,text=list_produk[4][0])
label_barang_6 = Label(window2,text=list_produk[5][0])
label_barang_7 = Label(window2,text=list_produk[6][0])
label_barang_1.place(x=10,y=50+20*1,width=120)
label_barang_2.place(x=10,y=50+20*2,width=120)
label_barang_3.place(x=10,y=50+20*3,width=120)
label_barang_4.place(x=10,y=50+20*4,width=120)
label_barang_5.place(x=10,y=50+20*5,width=120)
label_barang_6.place(x=10,y=50+20*6,width=120)
label_barang_7.place(x=10,y=50+20*7,width=120)
## DAFTAR HARGA
label_harga_1 = Label(window2,text=f"{list_produk[0][1]:,}")
label_harga_2 = Label(window2,text=f"{list_produk[1][1]:,}")
label_harga_3 = Label(window2,text=f"{list_produk[2][1]:,}")
label_harga_4 = Label(window2,text=f"{list_produk[3][1]:,}")
label_harga_5 = Label(window2,text=f"{list_produk[4][1]:,}")
label_harga_6 = Label(window2,text=f"{list_produk[5][1]:,}")
label_harga_7 = Label(window2,text=f"{list_produk[6][1]:,}")
label_harga_1.place(x=132,y=50+20*1,width=60)
label_harga_2.place(x=132,y=50+20*2,width=60)
label_harga_3.place(x=132,y=50+20*3,width=60)
label_harga_4.place(x=132,y=50+20*4,width=60)
label_harga_5.place(x=132,y=50+20*5,width=60)
label_harga_6.place(x=132,y=50+20*6,width=60)
label_harga_7.place(x=132,y=50+20*7,width=60)
show_saldo = Label(window2,text=f"Rp{saldo:,}",font=font.Font(size=10))
show_saldo.place(x=296,y=295,width=100,height=30)
12
''' ======================= TOMBOL ======================= '''
# TOMBOL TAMBAH
tombol_tambah_1 =
Button(window2,text="+",bg="green",foreground="white",font=(font.BOLD,7),command=tambah_produk_1)
tombol_tambah_2 =
Button(window2,text="+",bg="green",foreground="white",font=(font.BOLD,7),command=tambah_produk_2)
tombol_tambah_3 =
Button(window2,text="+",bg="green",foreground="white",font=(font.BOLD,7),command=tambah_produk_3)
tombol_tambah_4 =
Button(window2,text="+",bg="green",foreground="white",font=(font.BOLD,7),command=tambah_produk_4)
tombol_tambah_5 =
Button(window2,text="+",bg="green",foreground="white",font=(font.BOLD,7),command=tambah_produk_5)
tombol_tambah_6 =
Button(window2,text="+",bg="green",foreground="white",font=(font.BOLD,7),command=tambah_produk_6)
tombol_tambah_7 =
Button(window2,text="+",bg="green",foreground="white",font=(font.BOLD,7),command=tambah_produk_7)
tombol_tambah_1.place(x=274,y=50+20*1,width=20)
tombol_tambah_2.place(x=274,y=50+20*2,width=20)
tombol_tambah_3.place(x=274,y=50+20*3,width=20)
tombol_tambah_4.place(x=274,y=50+20*4,width=20)
tombol_tambah_5.place(x=274,y=50+20*5,width=20)
tombol_tambah_6.place(x=274,y=50+20*6,width=20)
tombol_tambah_7.place(x=274,y=50+20*7,width=20)
# TOMBOL KURANG
tombol_kurang_1 =
Button(window2,text="-",bg="red",foreground="white",font=(font.BOLD,7),command=kurang_produk_1)
tombol_kurang_2 =
Button(window2,text="-",bg="red",foreground="white",font=(font.BOLD,7),command=kurang_produk_2)
tombol_kurang_3 =
Button(window2,text="-",bg="red",foreground="white",font=(font.BOLD,7),command=kurang_produk_3)
tombol_kurang_4 =
Button(window2,text="-",bg="red",foreground="white",font=(font.BOLD,7),command=kurang_produk_4)
tombol_kurang_5 =
Button(window2,text="-",bg="red",foreground="white",font=(font.BOLD,7),command=kurang_produk_5)
tombol_kurang_6 =
Button(window2,text="-",bg="red",foreground="white",font=(font.BOLD,7),command=kurang_produk_6)
tombol_kurang_7 =
Button(window2,text="-",bg="red",foreground="white",font=(font.BOLD,7),command=kurang_produk_7)
13
tombol_kurang_1.place(x=254,y=50+20*1,width=20)
tombol_kurang_2.place(x=254,y=50+20*2,width=20)
tombol_kurang_3.place(x=254,y=50+20*3,width=20)
tombol_kurang_4.place(x=254,y=50+20*4,width=20)
tombol_kurang_5.place(x=254,y=50+20*5,width=20)
tombol_kurang_6.place(x=254,y=50+20*6,width=20)
tombol_kurang_7.place(x=254,y=50+20*7,width=20)
# TOMBOL RESET
tombol_reset = Button(window2,text="RESET",bg="#8a8787",font=font.Font(size=7),command=reset)
tombol_reset.place(x=194,y=50+20*8,width=100)
# TOMBOL BATAL
tombol_batal = Button(window2,text="BATAL",font=font.Font(size=10),command=batal)
tombol_batal.place(x=10,y=350,width=100)
# TOMBOL BAYAR
tombol_bayar = Button(window2,text="BAYAR",font=font.Font(size=10),command=window__3)
tombol_bayar.place(x=115,y=350,width=100)
window2.mainloop()
window0 = Tk()
lebar_layar = window0.winfo_screenwidth()
tinggi_layar = window0.winfo_screenheight()
window0.geometry(f"0x0+{int(lebar_layar)}+{int(tinggi_layar)}")
window1 = Toplevel()
lebar_layar = window1.winfo_screenwidth()
tinggi_layar = window1.winfo_screenheight()
window1.title("HOME")
window1.geometry(f"290x250+{int(lebar_layar/2 - 290/2)}+{int(tinggi_layar/2 - 250/2)}")
window1.resizable(False,False)
window1.configure(bg="red")
14
judul_window1 = Label(window1,text="VENDING
MACHINE",bg="red",foreground="white",font=font.Font(size=20))
judul_window1.place(y=30,width=290)
input_uang = Entry(window1,textvariable=StringVar,justify="center")
input_uang.place(x=90,y=135,width=100)
def submit():
global saldo
global input_uang
saldo = int(input_uang.get())
input_uang.delete(0,END)
submit_uang = Button(window1,text="SUBMIT",command=submit)
submit_uang.place(x=90,y=160,width=101)
window1.mainloop()
15
2. KESIMPULAN dan LESSON LEARNED
2.1.Kesimpulan
Seperti yang kita ketahui, bahwa di dunia perkuliahan, waktu sangatlah
berharga. Sehingga, kita sebagai mahasiswa dituntut untuk mengatur waktu
seefektif dan seefisien mungkin. Oleh karena itu, pada tugas besar ini kami
membuat program vending machine sederhana sebagai alternatif mahasiswa
untuk membeli makan secara langsung. Cara kerja dari program kami adalah,
user menginput uang ke vending machine dalam nominal tertentu (uang yang
diinput ≥ 5000). Setelah itu, user akan memilih makanan / minuman dengan
jenis dan jumlah tertentu. Vending machine akan mengeluarkan struk beserta
makanan / minuman yang dipilih. Berdasarkan rangkaian kegiatan yang telah
kami lakukan dimulai dari dekomposisi masalah, sampai kepada pemrograman
akhir, dapat kami simpulkan bahwa bahasa pemrograman python mampu
menjelaskan cara kerja vending machine beserta fitur-fiturnya.
16
3. PEMBAGIAN TUGAS DALAM KELOMPOK
3.1 Pembagian Tugas
4. REFERENSI
https://youtube.com/playlist?list=PLqJp7pduqafhpC5QO6geYyHo2UOhPNXPv
17