Laporan Tubes 1 [PDF]

  • 0 0 0
  • Suka dengan makalah ini dan mengunduhnya? Anda bisa menerbitkan file PDF Anda sendiri secara online secara gratis dalam beberapa menit saja! Sign Up

Laporan Tubes 1 [PDF]

1. LAPORAN INTI 1.1. Hasil Tugas 1 1.1.1 Eksplorasi Konsep Vending machine merupakan suatu alat atau mesin yang menjual

8 4 169 KB

Report DMCA / Copyright

DOWNLOAD FILE

File loading please wait...
Citation preview

1. 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.3 Dekomposisi Persoalan Pada rancangan ini, kami akan menggunakan sistem vending machine untuk menawarkan makanan dan minuman, vending machine rancangan kami akan menawarkan Burger, Hotdog, Ayam suwir, Onigiri, Air putih , Coca cola, dan Susu UHT. Satu hal yang membuat vending machine ini unik adalah adanya sistem cleansing, yaitu vending machine secara otomatis akan membersihkan tombol-tombol operasional setelah konsumen melakukan transaksi, sehingga kebersihan vending machine tetap terjaga dan konsumen berikutnya dapat merasa lebih aman dan nyaman ketika menggunakan vending machine tersebut. Selain itu, vending machine ini terintegrasi dengan pembayaran digital seperti Gopay, OVO, Dana, dan ShopeePay sehingga pembayaran menjadi lebih efisien. Vending machine ini nantinya akan diletakkan di tempat yang biasanya ramai orang, seperti di kantin universitas, pintu gerbang universitas, co-working space, dan gedung kuliah umum.



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) from tkinter import * from tkinter import messagebox from tkinter import font import datetime as dt ''' INISIASI VARIABEL ''' list_produk = [["Burger",15000], ["Hotdog",15000], ["Ayam suwir",20000], ["Onigiri",10000], ["Air putih",5000], ["Coca cola",10000], ["Susu UHT",10000]] list_jumlah_produk = [0 for i in range(len(list_produk))] list_total_harga = [0 for i in range(len(list_produk))] ''' 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] total_harga = list_total_harga[0] + list_total_harga[1] + list_total_harga[2] + list_total_harga[3] + list_total_harga[4] + list_total_harga[5] + list_total_harga[6] 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)



''' FUNGSI UNTUK AKSI DARI TOMBOL TAMBAH ''' def tambah_produk_1(): global list_jumlah_produk list_jumlah_produk[0] += 1 label_jumlah() 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() ''' FUNGSI UNTUK AKSI DARI TOMBOL KURANG ''' def kurang_produk_1(): global list_jumlah_produk if list_jumlah_produk[0] > 0: list_jumlah_produk[0] -= 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 list_jumlah_produk = [0 for i in range(len(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.") # FUNGSI UNTUK MENAMBAH SALDO def tambahkan_saldo(): global entry_tambah_saldo global saldo_tambahan global saldo 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) # FUNGSI UNTUK MENAMPILKAN KOLOM def kolom(window_x): ## PILIHAN BARANG label_barang = Label(window_x,text="Barang",bg="yellow") label_barang.place(x=10,y=50,width=120) ## HARGA label_harga = Label(window_x,text="Harga",bg="yellow") label_harga.place(x=132,y=50,width=60) ## JUMLAH BARANG label_jml_barang = Label(window_x,text="Jumlah Barang",bg="yellow") label_jml_barang.place(x=194,y=50,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) ''' ================== FUNGSI UNTUK MENJALANKAN AKSI DI WINDOW 3 ================== ''' def window__3(): global lebar_layar global tinggi_layar global window3 global saldo global total_harga global list_jumlah_produk 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) waktu = dt.datetime.now().strftime('%d/%m/%Y, %H:%M') 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) ''' ================ FUNGSI UNTUK MENJALANKAN AKSI DI WINDOW 2 ================ ''' def window_2(): global lebar_layar global tinggi_layar global window2 global saldo global saldo_tambahan global total_harga global entry_tambah_saldo 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() ''' ============ JUDUL WINDOW2 ============ ''' judul_window2 = Label(window2,text="VENDING MACHINE",font=font.Font(size=16),bg="#B4F0F0") judul_window2.place(x=0,y=10,width=405) kolom(window2) ''' ============ DAFTAR PRODUK ============ ''' ## DAFTAR BARANG label_barang_1 = Label(window2,text=list_produk[0][0]) label_barang_2 = Label(window2,text=list_produk[1][0]) label_barang_3 = Label(window2,text=list_produk[2][0]) label_barang_4 = Label(window2,text=list_produk[3][0])



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) ''' ======================= LABEL ======================= ''' label_saldo = Label(window2,text="SALDO",bg="grey",font=font.Font(size=12)) label_saldo.place(x=296,y=270,width=100) show_saldo = Label(window2,text=f"Rp{saldo:,}",font=font.Font(size=10)) show_saldo.place(x=296,y=295,width=100,height=30) ''' ===================== ENTRY ===================== ''' entry_tambah_saldo = Entry(window2,textvariable=StringVar,font=font.Font(size=10),justify="center") entry_tambah_saldo.place(x=10,y=300,width=205,height=25)



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) # TOMBOL TAMBAH SALDO tombol_tambah_saldo = Button(window2,text="TAMBAH SALDO",font=font.Font(size=10),command=tambahkan_saldo) tombol_tambah_saldo.place(x=10,y=270,width=205) 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) keterangan = Label(window1,text="Masukkan uang Anda (minimal Rp5,000)\nuntuk mengoperasikan mesin ini",font=(font.BOLD,10),bg="red",foreground="white") keterangan.place(y=90,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) if saldo < 5000: show_saldo_kurang = messagebox.showwarning(message=f"Uang yang Anda masukkan sebesar Rp{saldo:,} tidak cukup untuk mengoperasikan mesin ini.\nSilakan ambil kembali uang Anda.") else: window_2() 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. 2.2 Lesson Learned Hal yang dapat dipelajari : -



Dapat mengaplikasikan penggunaan kondisional (if else), looping, array, fungsi dalam program vending machine.



-



Dapat menentukan fitur-fitur yang ada dalam vending machine dengan mengidentifikasi dekomposisi masalah.



-



Dapat menentukan cara kerja vending machine dengan membuat flowchart sistem program.



-



Dapat menyelesaikan dan mengidentifikasi masalah yang ada di sekitar dengan membuat suatu program sebagai solusi dari suatu masalah yang ada.



16



3. PEMBAGIAN TUGAS DALAM KELOMPOK 3.1 Pembagian Tugas Nama Angota



Deskripsi Tugas



Tasya Larasati R. (16722004)



Membuat presentasi dan flowchart



Marvin Manuel



(16722134)



Membuat presentasi dan flowchart



Faaiq Mastyaga



(16722329)



Programming python



Zulfikar Firmanto (16722339)



Membuat laporan dan dekomposisi persoalan



M. Fadil Huseiny (16722354)



Membuat laporan dan dekomposisi persoalan



4. REFERENSI https://youtube.com/playlist?list=PLqJp7pduqafhpC5QO6geYyHo2UOhPNXPv



17