Background Project :
Business Problem : Andi ingin membuat sistem kasir self-service untuk supermarket miliknya. Sehingga, Andi membutuhkan programmer yang bisa membuat fitur-fitur yang dibutuhkan supaya sistem kasir self-service di supermarket nya berjalan dengan lancar.
Solution Problem : Membuat sistem program kasir self-service dimana customer bisa langsung memasukkan item yang dibeli, jumlah item yang dibeli dan harga item yang dibeli dan fitur yang lain.
-
Sistem untuk menambahkan item dengan quantity (qty) dan price per item dengan method add_item()
-
Sistem untuk Update nama Item dengan method update_item_name()
-
Sistem untuk Update Quantity (qty) dengan method update_item_qty()
-
Sistem untuk Update Price dengan method update_item_price()
-
Sistem untuk Menghapus Item dengan method delete_item()
-
Sistem untuk melakukan Reset pada Order dengan method reset_transaction()
-
Melakukan check pada Order dengan method check_order()
-
Sistem untuk menghitung total price dan diskon dengan method total_price()
-
Fitur Tambahan : Sistem untuk menapilkan Tabel Item Belanja seperti Nota Sederhana dengan method table_belanja()
Petunjuk Pengerjaan:
1. Download module cashier.py
2. lalu ketik from cashier import Transaction untuk mengakses module cashier dan class Transaction()
3. lalu buat variabel untuk memangil class Transaction() , misal: transaksi_001 = Transaction()
4. Lalu gunakan variabel untuk mengakses method add_item() --> transaksi_001.add_item()
Demo Test Case bisa dilihat disini : Youtube: Oktavio Reza Putra - Final Project Python JPP MAX Pacmann AI
Berisi penjelasan atribut dan fungsi yang digunakan dalam sistem fungsi super cashier ini
- Final Project ini menggunakan module yang dinamakan cashier.py
- cashier.py berisi class yang bernama Transaction()
Penjelasan fungsi dan atribut adalah sebagai berikut:
-
Class Transaction()
Berisi Method dan atribut yang digunakan untuk menjalankan Program Super Cashier
Class Transaction() memiliki atribut yang bernama list_item yang digunakan untuk menyimpan input item belanja yang dimasukkan oleh customer
-
Method add_item()
a. Method add_item digunakan untuk menginput satu atau lebih item Belanja yang meliputi nama item, jumlah item dan harga per satuan item
b. Setelah semua input item belanja setiap item dimasukkan, maka secara otomatis langsung menghitung total_harga tiap item secara keseluruhan -->total_harga_per_item = int(harga_per_satuan_item * jumlah_item)
c. Setelah melakukan input item belanja, maka customer akan diarahkan untuk melakukan update item, menghapus item, melakukan reset transaksi, melakukan pengecekan transaksi dan opsi untuk kembali melakukan input item belanja
d. Jika tidak ada item yang ingin dimasukkan lagi maka akan ditentukan total harga dalam transaksi melalui method total_price() dan terbentuk nota transaksi dalam bentuk tabel
#Fitur Add Item Belanja---------------------------------Code by : Oktavio Reza Putra--------------------------------------------------------------------------------------------- def add_item(self): """ fitur (method) add_item() digunakan sebagai method untuk memasukkan item belanja customer 1. batas input belanja hanya sampai 20 list item 2. setelah selesai melakukan input item belanja, maka nama_item diisi "selesai" 3. setelah itu customer diberikan fasilitas pilihan untuk melakukan : a. Sistem untuk Update nama Item dengan method update_item_name() b. Sistem untuk Update Quantity (qty) dengan method update_item_qty() c. Sistem untuk Update Price dengan method update_item_price() d. Sistem untuk Menghapus Item dengan method delete_item() e. Sistem untuk melakukan Reset pada Order dengan method reset_transaction() f. Melakukan check pada Order dengan method check_order() g. Sistem untuk menghitung total price dan diskon dengan method total_price() yang diarahkan secara otomatis """ #ingin menginput item belanja untuk pertama kalinya? input_item = str(input('Input Item Belanja? (Yes/No) : ')) print(' ') if input_item.lower() == 'yes': #jika ingin menginput item belanja untuk pertama kalinya while True: try: nama_item = input('Item Name : ') if nama_item.lower()=='selesai': #jika input item sudah selesai maka nama_item harus diinput "selesai" print('Terima kasih....Input Item Belanja Anda Sudah Selesai!') print(' ') while True: #ingin melakukan update? update_confirmation = str(input('Apakah Anda ingin mengganti Nama Item, Jumlah Item, atau Harga per Item yang sudah dimasukkan? (Yes / No) : ')) if update_confirmation.lower() == 'yes': while True: update_type = str(input('Bagian Mana yang ingin Anda Update? (Pilih Salah Satu : Item Name, Jumlah Item, Harga per Item) : ')) if update_type.title() == 'Item Name': self.update_item_name() break elif update_type.title() == 'Jumlah Item': self.update_item_qty() break elif update_type.title() == 'Harga Per Item': self.update_item_price() break else: print(' ') print('⚠️Warning : ') print('Mohon Maaf! Input yang Anda masukkan Tidak Terdaftar dalam Fitur Kami 🙏') print('Silakan Coba Lagi! 🙏') print(' ') break elif update_confirmation.lower() == 'no': while True: #ingin melakukan penghapusan item belanja yang sudah diinput? deletion_order_confirmation = str(input('Apakah anda Ingin Menghapus Salah Satu Item Belanja Anda? (Yes/No) : ')) if deletion_order_confirmation.lower() == 'yes': self.delete_item() break elif deletion_order_confirmation.lower() == 'no': while True: #ingin melakukan cek order check_order_confirmation = str(input('Apakah anda Ingin Melakukan Pengecekan Item Belanja Anda? (Yes/No) : ')) if check_order_confirmation.lower() == 'yes': self.check_order() break elif check_order_confirmation.lower() == 'no': while True: #ingin melakukan reset order? reset_order_confirmation = str(input('Apakah anda Ingin Reset Input Item Belanja Anda? (Yes/No) : ')) if reset_order_confirmation.lower() == 'yes': self.reset_transaction() break elif reset_order_confirmation.lower() == 'no': while True: #ingin menginput lagi item belanja? input_again_confirmation = str(input('Apakah anda Ingin Melakukan Input Kembali Item Belanja Anda? (Yes/No) : ')) if input_again_confirmation.lower() == 'yes': self.add_item() break elif input_again_confirmation.lower() == 'no': #jika tidak ingin melakukan input item lagi #dan tidak ingin menggunakan fasilitas lainnya #maka langsung diarahkan ke method total_price() untuk mendapatkan harga keseluruhan #beserta diskonnya (jika masuk kriteria diskon) print(' ') self.total_price() print('Note : Jika ada yang ingin diinput kembali silakan buat ID Transaksi Baru 🙏🥰') break else: #ketika input tidak tertulis Yes dan No, maka akan diulangi kembali print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break jumlah_item = int(input('Jumlah Item : ')) harga_per_satuan_item = int(input('Harga per Item Quantity : ')) total_harga_per_item = int(harga_per_satuan_item * jumlah_item) print(' ') self.list_item.append([nama_item.upper(), jumlah_item, harga_per_satuan_item, total_harga_per_item]) if len(self.list_item) == 20: #batas nya hanya smapai 20 list item #jika sudah melebihi batas input #akan keluar notifikasi sebagai berikut: print(' ') print(f'Kapasitas Input Item Belanja sudah Mencapai Batas Maksimum : ({len(self.list_item)} Jenis Item)') #namun masih bisa mengisi input item belanja lagi input_item_again = str(input('Apakah Anda masih ingin melakukan Input Item Belanja Kembali? (Yes/No) : ')) if input_item_again.lower() == 'yes': print(' ') self.add_item() elif input_item_again.lower() == 'no': break except ValueError: #jika terjadi kesalahan input jumlah item atau harga per satuan item #misalnya kosong atau diisi dengan tipe data lain #maka akan diarahkan kembali untuk mengisi item belanja di method add_item() print(' ') print('⚠️Warning : ') print('Input Jumlah Item, Harga per Satuan Item tidak boleh kosong') print('atau diinput dengan nilai selain angka!') print('Silakan Ulangi Kembali Input Item Belanja Anda! 🙏') print(' ') self.add_item() elif input_item.lower()=='no': #jika tidak ingin menginput item belanja untuk pertama kalinya if self.list_item != []: #jika list sebelumnya sudah terisi? while True: #ingin melakukan update? update_confirmation = str(input('Apakah Anda ingin mengganti Nama Item, Jumlah Item, atau Harga per Item yang sudah dimasukkan? (Yes / No) : ')) if update_confirmation.lower() == 'yes': while True: update_type = str(input('Bagian Mana yang ingin Anda Update? (Pilih Salah Satu : Item Name, Jumlah Item, Harga per Item) : ')) if update_type.title() == 'Item Name': self.update_item_name() break elif update_type.title() == 'Jumlah Item': self.update_item_qty() break elif update_type.title() == 'Harga Per Item': self.update_item_price() break else: print(' ') print('⚠️Warning : ') print('Mohon Maaf! Input yang Anda masukkan Tidak Terdaftar dalam Fitur Kami 🙏') print('Silakan Coba Lagi! 🙏') print(' ') break elif update_confirmation.lower() == 'no': while True: #ingin menghapus item belanja? deletion_order_confirmation = str(input('Apakah anda Ingin Menghapus Salah Satu Item Belanja Anda? (Yes/No) : ')) if deletion_order_confirmation.lower() == 'yes': self.delete_item() break elif deletion_order_confirmation.lower() == 'no': while True: #ingin cek order? check_order_confirmation = str(input('Apakah anda Ingin Melakukan Pengecekan Item Belanja Anda? (Yes/No) : ')) if check_order_confirmation.lower() == 'yes': self.check_order() break elif check_order_confirmation.lower() == 'no': while True: #ingin reset order? reset_order_confirmation = str(input('Apakah anda Ingin Reset Input Item Belanja Anda? (Yes/No) : ')) if reset_order_confirmation.lower() == 'yes': self.reset_transaction() break elif reset_order_confirmation.lower() == 'no': while True: #ingin menginput lagi item belanja? input_again_confirmation = str(input('Apakah anda Ingin Melakukan Input Kembali Item Belanja Anda? (Yes/No) : ')) if input_again_confirmation.lower() == 'yes': self.add_item() break elif input_again_confirmation.lower() == 'no': #jika tidak ingin melakukan input item lagi #dan tidak ingin menggunakan fasilitas lainnya #maka langsung diarahkan ke method total_price() untuk mendapatkan harga keseluruhan #beserta diskonnya (jika masuk kriteria diskon) print(' ') self.total_price() print('Note : Jika ada yang ingin diinput kembali silakan buat ID Transaksi Baru 🙏🥰') break else: #ketika input tidak tertulis Yes dan No, maka akan diulangi kembali print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break elif self.list_item == []: #jika list sebelumnya kosong? atau tidak jadi mengisi untuk pertama kalinya self.table_belanja() pass else: #ketika input ingin input belanja tidak terisi yes atau no print('Input Salah! Silakan Ulangi Kembali! 🙏') self.add_item()
-
Method update_item_name()
Method ini berfungsi mengganti (update) nama item yang sudah diinput dalam List Belanja menjadi nama item baru yang diinput
Cara kerjanya adalah sebagai berikut:
a. Menginput nama item sebelumnya diinput dalam method add_item() yang disimpan pada atribut list_item
b. Jika nama item yang diinput ada di dalam atribut list_item, maka akan dilakukan update nama item berdasarkan input nama item baru (jika terjadi kesalahan input maka akan diulangi kembali penginputan itemnya)
c. Setelah itu diberikan opsi apakah ingin melakukan update item kembali, menghapus item, melakukan reset transaksi, melakukan pengecekan transaksi atau opsi untuk kembali melakukan input item belanja
d. Jika tidak ada opsi yang dipakai kembali pada poin C maka akan ditentukan total harga dalam transaksi melalui method total_price() dan terbentuk nota transaksi dalam bentuk tabel
#Fitur Update Item Name-------------------------------------Code by : Oktavio Reza Putra---------------------------------------------------------------- def update_item_name(self): print(' ') print(' ') print('🛍️ Fitur Update Item Name 🛍️') print('---------------------------------------------') #menampilkan tabel belanja yang sudah dinput self.table_belanja() print(' ') #memasukkan nama item sebelumnya old_item = str(input('Nama Item Lama yang mau diganti : ')) found = False for i in range(len(self.list_item)): #cek apakah ada di dalam nilai atribut list_item if old_item.upper() == self.list_item[i][0]: found = True #Jika Ada new_item = str(input('Input Item Baru : ')) #masukkan nama item baru yang ingin disimpan self.list_item[i][0] = new_item.upper() #menyimpan nama item yang baru, menggantikan nama item lama print(' ') while True: #ingin melakukan update? update_confirmation = str(input('Apakah Anda ingin mengganti Nama Item, Jumlah Item, atau Harga per Item yang sudah dimasukkan? (Yes / No) : ')) if update_confirmation.lower() == 'yes': while True: update_type = str(input('Bagian Mana yang ingin Anda Update? (Pilih Salah Satu : Item Name, Jumlah Item, Harga per Item) : ')) if update_type.title() == 'Item Name': self.update_item_name() break elif update_type.title() == 'Jumlah Item': self.update_item_qty() break elif update_type.title() == 'Harga Per Item': self.update_item_price() break else: print(' ') print('⚠️Warning : ') print('Mohon Maaf! Input yang Anda masukkan Tidak Terdaftar dalam Fitur Kami 🙏') print('Silakan Coba Lagi! 🙏') print(' ') break elif update_confirmation.lower() == 'no': while True: #ingin melakukan penghapusan item belanja yang sudah diinput? deletion_order_confirmation = str(input('Apakah anda Ingin Menghapus Salah Satu Item Belanja Anda? (Yes/No) : ')) if deletion_order_confirmation.lower() == 'yes': self.delete_item() break elif deletion_order_confirmation.lower() == 'no': while True: #ingin melakukan cek order check_order_confirmation = str(input('Apakah anda Ingin Melakukan Pengecekan Item Belanja Anda? (Yes/No) : ')) if check_order_confirmation.lower() == 'yes': self.check_order() break elif check_order_confirmation.lower() == 'no': while True: #ingin melakukan reset order? reset_order_confirmation = str(input('Apakah anda Ingin Reset Input Item Belanja Anda? (Yes/No) : ')) if reset_order_confirmation.lower() == 'yes': self.reset_transaction() break elif reset_order_confirmation.lower() == 'no': while True: #ingin menginput lagi item belanja? input_again_confirmation = str(input('Apakah anda Ingin Melakukan Input Kembali Item Belanja Anda? (Yes/No) : ')) if input_again_confirmation.lower() == 'yes': self.add_item() break elif input_again_confirmation.lower() == 'no': #jika tidak ingin melakukan input item lagi #dan tidak ingin menggunakan fasilitas lainnya #maka langsung diarahkan ke method total_price() untuk mendapatkan harga keseluruhan #beserta diskonnya (jika masuk kriteria diskon) print(' ') self.total_price() print('Note : Jika ada yang ingin diinput kembali silakan buat ID Transaksi Baru 🙏🥰') break else: #ketika input tidak tertulis Yes dan No, maka akan diulangi kembali print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break if found == False: #jika nama yang diinput salah maka harus melakukan input ulang! print('⚠️Warning : ') print('Input Nama Item Salah! 🙅') print('Penyebab : Nama Item sudah Diganti atau Tidak ada Dalam Input Item Belanja Anda 🥲') print('Silakan Ulangi! 🙏') self.update_item_name()
-
Method update_item_qty()
Method ini berfungsi mengganti (update) jumlah item pada Item Belanja dengan menginput jumlah item yang baru dan nama Item yang ingin diganti jumlah item nya
Cara kerjanya adalah sebagai berikut:
a. Menginput nama item sebelumnya diinput dalam method add_item() yang disimpan pada atribut list_item
b. Jika nama item yang diinput ada di dalam atribut list_item, maka akan dilakukan update jumlah item berdasarkan input nama item yang diinput (jika terjadi kesalahan input maka akan diulangi kembali penginputan itemnya)
c. Kemudian jumlah item yang baru langsung dikalikan dengan harga per satuan pada item tersebut untuk mencari total harga item nya
d. Setelah itu diberikan opsi apakah ingin melakukan update item kembali, menghapus item, melakukan reset transaksi, melakukan pengecekan transaksi atau opsi untuk kembali melakukan input item belanja
e. Jika tidak ada opsi yang dipakai kembali pada poin C maka akan ditentukan total harga dalam transaksi melalui method total_price() dan terbentuk nota transaksi dalam bentuk tabel#Fitur Update Item Quantity---------------------------------Code by : Oktavio Reza Putra-------------------------------------------------------------------- def update_item_qty(self): print(' ') print(' ') print('🔖1️⃣ Fitur Update Item Quantity 1️⃣🔖') print('---------------------------------------------') #ditampilkan tabel input item belanja hasil input self.table_belanja() print(' ') #input nama item sebelumnya yang ingin diganti jumlah item nya input_item = str(input('Nama Item yang ingin diganti Jumlah (Qty) Itemnya : ')) found = False for i in range(len(self.list_item)): #apakah nama item yang dimasukkan di input_item ada di atribut list_item if input_item.upper() == self.list_item[i][0]: found = True new_qty = int(input('Input Jumlah (Qty) per Item Baru : ')) self.list_item[i][1] = new_qty #menyimpan jumlah item baru self.list_item[i][3] = int(new_qty * self.list_item[i][2]) #dikalikan dengan harga per satuan item print(' ') while True: #ingin melakukan update? update_confirmation = str(input('Apakah Anda ingin mengganti Nama Item, Jumlah Item, atau Harga per Item yang sudah dimasukkan? (Yes / No) : ')) if update_confirmation.lower() == 'yes': while True: update_type = str(input('Bagian Mana yang ingin Anda Update? (Pilih Salah Satu : Item Name, Jumlah Item, Harga per Item) : ')) if update_type.title() == 'Item Name': self.update_item_name() break elif update_type.title() == 'Jumlah Item': self.update_item_qty() break elif update_type.title() == 'Harga Per Item': self.update_item_price() break else: print(' ') print('⚠️Warning : ') print('Mohon Maaf! Input yang Anda masukkan Tidak Terdaftar dalam Fitur Kami 🙏') print('Silakan Coba Lagi! 🙏') print(' ') break elif update_confirmation.lower() == 'no': while True: #ingin melakukan penghapusan item belanja yang sudah diinput? deletion_order_confirmation = str(input('Apakah anda Ingin Menghapus Salah Satu Item Belanja Anda? (Yes/No) : ')) if deletion_order_confirmation.lower() == 'yes': self.delete_item() break elif deletion_order_confirmation.lower() == 'no': while True: #ingin melakukan cek order check_order_confirmation = str(input('Apakah anda Ingin Melakukan Pengecekan Item Belanja Anda? (Yes/No) : ')) if check_order_confirmation.lower() == 'yes': self.check_order() break elif check_order_confirmation.lower() == 'no': while True: #ingin melakukan reset order? reset_order_confirmation = str(input('Apakah anda Ingin Reset Input Item Belanja Anda? (Yes/No) : ')) if reset_order_confirmation.lower() == 'yes': self.reset_transaction() break elif reset_order_confirmation.lower() == 'no': while True: #ingin menginput lagi item belanja? input_again_confirmation = str(input('Apakah anda Ingin Melakukan Input Kembali Item Belanja Anda? (Yes/No) : ')) if input_again_confirmation.lower() == 'yes': self.add_item() break elif input_again_confirmation.lower() == 'no': #jika tidak ingin melakukan input item lagi #dan tidak ingin menggunakan fasilitas lainnya #maka langsung diarahkan ke method total_price() untuk mendapatkan harga keseluruhan #beserta diskonnya (jika masuk kriteria diskon) print(' ') self.total_price() print('Note : Jika ada yang ingin diinput kembali silakan buat ID Transaksi Baru 🙏🥰') break else: #ketika input tidak tertulis Yes dan No, maka akan diulangi kembali print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break if found == False: #jika nama yang diinput salah maka harus melakukan input ulang! print('⚠️Warning : ') print('Input Nama Item Salah! 🙅') print('Penyebab : Nama Item sudah Diganti atau Tidak ada Dalam Input Item Belanja Anda 🥲') print('Silakan Ulangi! 🙏') self.update_item_qty()
-
Method update_item_price()
Method ini berfungsi mengganti (update) harga per satuan item pada Item Belanja dengan menginput harga per satuan item yang baru dan nama Item yang ingin diganti harga per satuan item nya
Cara kerjanya adalah sebagai berikut:
a. Menginput nama item sebelumnya diinput dalam method add_item() yang disimpan pada atribut list_item
b. Jika nama item yang diinput ada di dalam atribut list_item, maka akan dilakukan update harga per satuan item berdasarkan input nama item yang diinput (jika terjadi kesalahan input maka akan diulangi kembali penginputan itemnya)
c. Kemudian harga per satuan item yang baru langsung dikalikan dengan jumlah_item item tersebut untuk mencari total harga item nya
d. Setelah itu diberikan opsi apakah ingin melakukan update item kembali, menghapus item, melakukan reset transaksi, melakukan pengecekan transaksi atau opsi untuk kembali melakukan input item belanja
e. Jika tidak ada opsi yang dipakai kembali pada poin C maka akan ditentukan total harga dalam transaksi melalui method total_price() dan terbentuk nota transaksi dalam bentuk tabel#Fitur Update Item Price---------------------------------Code by : Oktavio Reza Putra-------------------------------------------------------------------- def update_item_price(self): print(' ') print(' ') print('🏷️Fitur Update Item Price🏷️') print('---------------------------------------------') #ditampilkan tabel belanja hasil input self.table_belanja() print(' ') #input nama item yang ingin diganti harga per satua itemnya input_item = str(input('Nama Item yang ingin diganti Harga per Itemnya : ')) found = False for i in range(len(self.list_item)): #apakah item yang diinput ada di atribut list_item? if input_item.upper() == self.list_item[i][0]: found = True #jika ada maka masukkan harga per satuan item yang baru new_price = int(input('Input Harga per Item Baru : ')) self.list_item[i][2] = new_price #masukkan harga per satuan item yang baru self.list_item[i][3] = int(new_price * self.list_item[i][1]) #dikalikan dengan jumlah item print(' ') while True: #ingin melakukan update? update_confirmation = str(input('Apakah Anda ingin mengganti Nama Item, Jumlah Item, atau Harga per Item yang sudah dimasukkan? (Yes / No) : ')) if update_confirmation.lower() == 'yes': while True: update_type = str(input('Bagian Mana yang ingin Anda Update? (Pilih Salah Satu : Item Name, Jumlah Item, Harga per Item) : ')) if update_type.title() == 'Item Name': self.update_item_name() break elif update_type.title() == 'Jumlah Item': self.update_item_qty() break elif update_type.title() == 'Harga Per Item': self.update_item_price() break else: print(' ') print('⚠️Warning : ') print('Mohon Maaf! Input yang Anda masukkan Tidak Terdaftar dalam Fitur Kami 🙏') print('Silakan Coba Lagi! 🙏') print(' ') break elif update_confirmation.lower() == 'no': while True: #ingin melakukan penghapusan item belanja yang sudah diinput? deletion_order_confirmation = str(input('Apakah anda Ingin Menghapus Salah Satu Item Belanja Anda? (Yes/No) : ')) if deletion_order_confirmation.lower() == 'yes': self.delete_item() break elif deletion_order_confirmation.lower() == 'no': while True: #ingin melakukan cek order check_order_confirmation = str(input('Apakah anda Ingin Melakukan Pengecekan Item Belanja Anda? (Yes/No) : ')) if check_order_confirmation.lower() == 'yes': self.check_order() break elif check_order_confirmation.lower() == 'no': while True: #ingin melakukan reset order? reset_order_confirmation = str(input('Apakah anda Ingin Reset Input Item Belanja Anda? (Yes/No) : ')) if reset_order_confirmation.lower() == 'yes': self.reset_transaction() break elif reset_order_confirmation.lower() == 'no': while True: #ingin menginput lagi item belanja? input_again_confirmation = str(input('Apakah anda Ingin Melakukan Input Kembali Item Belanja Anda? (Yes/No) : ')) if input_again_confirmation.lower() == 'yes': self.add_item() break elif input_again_confirmation.lower() == 'no': #jika tidak ingin melakukan input item lagi #dan tidak ingin menggunakan fasilitas lainnya #maka langsung diarahkan ke method total_price() untuk mendapatkan harga keseluruhan #beserta diskonnya (jika masuk kriteria diskon) print(' ') self.total_price() print('Note : Jika ada yang ingin diinput kembali silakan buat ID Transaksi Baru 🙏🥰') break else: #ketika input tidak tertulis Yes dan No, maka akan diulangi kembali print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break if found == False: #jika nama yang diinput salah maka harus melakukan input ulang! print('⚠️Warning : ') print('Input Nama Item Salah! 🙅') print('Penyebab : Nama Item sudah Diganti atau Tidak ada Dalam Input Item Belanja Anda 🥲') print('Silakan Ulangi! 🙏') self.update_item_price()
-
Method delete_item()
Method delete_item() digunakan untuk menghapus item belanja
Cara kerjanya adalah sebagai berikut:
a. Menginput nama item sebelumnya yang ingin dihapus
b. Jika nama item yang diinput ada di dalam atribut list_item, maka akan dilakukan penghapusan item (jika terjadi kesalahan input maka akan diulangi kembali penginputan itemnya)
c. Kemudian harga per satuan item yang baru langsung dikalikan dengan jumlah_item item tersebut untuk mencari total harga item nya
d. Setelah itu diberikan opsi apakah ingin melakukan update item kembali, menghapus item, melakukan reset transaksi, melakukan pengecekan transaksi atau opsi untuk kembali melakukan input item belanja
e. Jika tidak ada opsi yang dipakai kembali pada poin C maka akan ditentukan total harga dalam transaksi melalui method total_price() dan terbentuk nota transaksi dalam bentuk tabel#Fitur Menghapus List Item Belanja----------------------------Code by : Oktavio Reza Putra------------------------------------------------------------------------- def delete_item(self): print(' ') print(' ') print('-----------------------------------------------------------------------------------------') print('Fitur Delete Item') print('-----------------------------------------------------------------------------------------') #ditampilkan tabel belanja hasil input self.table_belanja() print(' ') #input item yang ingin dihapus input_item = str(input('Input Nama Item yang ingin Dihapus : ')) found = False for i in range(len(self.list_item)): #mengecek apakah item yang dimasukkan ada di atribut list_item if input_item.upper() == self.list_item[i][0]: found = True #jika ada maka item yang dimasukkan akan dihapus beserta jumlah item, harga per satuan item #dan total harga itemnya self.list_item.remove(self.list_item[i]) print(' ') print('Terima kasih. Item yang Anda Input sudah Terhapus! 🙏') print(' ') while True: #ingin melakukan update? update_confirmation = str(input('Apakah Anda ingin mengganti Nama Item, Jumlah Item, atau Harga per Item yang sudah dimasukkan? (Yes / No) : ')) if update_confirmation.lower() == 'yes': while True: update_type = str(input('Bagian Mana yang ingin Anda Update? (Pilih Salah Satu : Item Name, Jumlah Item, Harga per Item) : ')) if update_type.title() == 'Item Name': self.update_item_name() break elif update_type.title() == 'Jumlah Item': self.update_item_qty() break elif update_type.title() == 'Harga Per Item': self.update_item_price() break else: print(' ') print('⚠️Warning : ') print('Mohon Maaf! Input yang Anda masukkan Tidak Terdaftar dalam Fitur Kami 🙏') print('Silakan Coba Lagi! 🙏') print(' ') break elif update_confirmation.lower() == 'no': while True: #ingin melakukan penghapusan item belanja yang sudah diinput? deletion_order_confirmation = str(input('Apakah anda Ingin Menghapus Salah Satu Item Belanja Anda? (Yes/No) : ')) if deletion_order_confirmation.lower() == 'yes': self.delete_item() break elif deletion_order_confirmation.lower() == 'no': while True: #ingin melakukan cek order check_order_confirmation = str(input('Apakah anda Ingin Melakukan Pengecekan Item Belanja Anda? (Yes/No) : ')) if check_order_confirmation.lower() == 'yes': self.check_order() break elif check_order_confirmation.lower() == 'no': while True: #ingin melakukan reset order? reset_order_confirmation = str(input('Apakah anda Ingin Reset Input Item Belanja Anda? (Yes/No) : ')) if reset_order_confirmation.lower() == 'yes': self.reset_transaction() break elif reset_order_confirmation.lower() == 'no': while True: #ingin menginput lagi item belanja? input_again_confirmation = str(input('Apakah anda Ingin Melakukan Input Kembali Item Belanja Anda? (Yes/No) : ')) if input_again_confirmation.lower() == 'yes': self.add_item() break elif input_again_confirmation.lower() == 'no': #jika tidak ingin melakukan input item lagi #dan tidak ingin menggunakan fasilitas lainnya #maka langsung diarahkan ke method total_price() untuk mendapatkan harga keseluruhan #beserta diskonnya (jika masuk kriteria diskon) print(' ') self.total_price() print('Note : Jika ada yang ingin diinput kembali silakan buat ID Transaksi Baru 🙏🥰') break else: #ketika input tidak tertulis Yes dan No, maka akan diulangi kembali print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break if found == False: #jika nama yang diinput salah maka harus melakukan input ulang! print('⚠️Warning : ') print('Input Nama Item Salah! 🙅') print('Penyebab : Nama Item sudah Diganti atau Tidak ada Dalam Input Item Belanja Anda 🥲') print('Silakan Ulangi! 🙏') self.delete_item()
-
Method reset_transaction()
Method reset_transaction() digunakan untuk melakukan reset input item sehingga seluruh Item Belanja yang diinput akan dihapus
Cara kerjanya adalah sebagai berikut:
a. Menghapus seluruh input item belanja yang dimasukkan
b. Customer diberikan opsi untuk melakukan input item kembali
c. Jika YES, maka sistem akan mengarahkan ke method add_item()
d. Jika NO, maka sistem akan mengarahkan ke method table_belanja() dan menghasilkan tabel nota kosong#Fitur Reset Transaction----------------------------------------Code by : Oktavio Reza Putra------------------------------------------------------------- def reset_transaction(self): print(' ') print(' ') print('-----------------------------------------------------------------------------------------') print('Fitur Reset Transaction') print('-----------------------------------------------------------------------------------------') #menghapus semua item pada atribut list_item self.list_item.clear() #diberikan opsi untuk input kembali item belanja lagi confirmation_input = str(input('Ingin Melakukan Input kembali Item Belanja? (Yes / No) : ')) if confirmation_input.lower() == 'yes': self.add_item() elif confirmation_input.lower() == 'no': self.table_belanja() else: #selain yes dan no tidak valid, maka harus kembali ke confirmation input print("Input tidak valid. Harap masukkan Yes atau No. 🙏") self.reset_transaction()
-
Method check_order()
Method check_order() digunakan untuk melakukan pengecekan atas input item belanja yang sudah dimasukkan
Cara kerjanya adalah sebagai berikut:
a. Jika Nama Item tidak Kosong maka akan muncul notifikasi untuk Melakukan Pengecekan apakah Data sudah benar?
b. Setelah itu diberikan opsi apakah ingin melakukan update item kembali, menghapus item, melakukan reset transaksi, atau opsi untuk kembali melakukan input item belanja
c. Jika tidak ada opsi yang dipakai kembali pada poin B maka akan ditentukan total harga dalam transaksi melalui method total_price() dan terbentuk nota transaksi dalam bentuk tabel
d. Jika Nama Item Kosong maka akan muncul notifikasi kesalahan dalam penginputan data
e. Lalu diberikan Opsi untuk menghapus Item yang Nama Item nya Kosong, atau melakukan Reset Transaksi atau bisa juga melakukan input Item Belanja lagi kemudian menghapus Item yang Nama Item nya Kosong#Fitur Cek Transaksi-------------------------------------------Code by : Oktavio Reza Putra---------------------------------------------------------- def check_order(self): print(' ') print(' ') print('-----------------------------------------------------------------------------------------') print('Fitur Check Order') print('-----------------------------------------------------------------------------------------') for i in range(len(self.list_item)): #ditampilkan tabel belanja hasil input self.table_belanja() if self.list_item[i][0] != '': #jika nama item tidak kosong print('Silakan Cek apakah Data Anda Sudah Benar?') print(' ') while True: #diberikan opsi update item lagi update_item_again = str(input('Apakah ingin Melakukan Update Item Belanja Lagi? (Yes/No) : ')) if update_item_again.lower() == 'yes': #jika iya print(' ') while True: update_type = str(input('Bagian Mana yang ingin Anda Update? (Pilih Salah Satu : Item Name, Jumlah Item, Harga per Item) : ')) if update_type.title() == 'Item Name': self.update_item_name() break elif update_type.title() == 'Jumlah Item': self.update_item_qty() break elif update_type.title() == 'Harga Per Item': self.update_item_price() break else: print(' ') print('⚠️Warning : ') print('Mohon Maaf! Input yang Anda masukkan Tidak Terdaftar dalam Fitur Kami 🙏') print('Silakan Coba Lagi! 🙏') print(' ') break elif update_item_again.lower() == 'no': #jika tidak while True: #diberikan opsi hapus item deletion_order_confirmation = str(input('Apakah anda Ingin Menghapus Salah Satu Item Belanja Anda? (Yes/No) : ')) if deletion_order_confirmation.lower() == 'yes': self.delete_item() break elif deletion_order_confirmation.lower() == 'no': while True: #diberikan opsi reset order reset_order_confirmation = str(input('Apakah anda Ingin Reset Input Item Belanja Anda? (Yes/No) : ')) if reset_order_confirmation.lower() == 'yes': self.reset_transaction() break elif reset_order_confirmation.lower() == 'no': while True: #diberikan opsi input item lagi input_again_confirmation = str(input('Apakah anda Ingin Melakukan Input Kembali Item Belanja Anda? (Yes/No) : ')) if input_again_confirmation.lower() == 'yes': self.add_item() break elif input_again_confirmation.lower() == 'no': print(' ') print('Yeay!👏🏼👏🏼👏🏼') print("🚀Selamat! Pesanan sudah Benar!🚀") print(' ') print(' ') self.total_price() print(' ') print('Note : Jika ada yang ingin diinput kembali silakan buat ID Transaksi Baru 🙏🥰') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break elif self.list_item[i][0] == '': #jika nama item kosong print(' ') print('Yahh... Terdapat kesalahan input data nih! 🥲') print(' ') print('Silakan Bisa Menghapus Item Belanja, Reset Input Item Belanja atau Melakukan Input Kembali') print('Opsi Melakukan Input Kembali bisa Anda lakukan jika ingin melakukan input Belanja kembali sebelum menghapus input yang nama item nya kosong 🙏') print(' ') while True: #diberikan opsi menghapus item deletion_order_confirmation = str(input('Apakah anda Ingin Menghapus Salah Satu atau Seluruh Item Belanja Anda? (Yes/No) : ')) if deletion_order_confirmation.lower() == 'yes': self.delete_item() break elif deletion_order_confirmation.lower() == 'no': while True: #diberikan opsi reset transaksi reset_order_confirmation = str(input('Apakah anda Ingin Reset Input Item Belanja Anda? (Yes/No) : ')) if reset_order_confirmation.lower() == 'yes': self.reset_transaction() break elif reset_order_confirmation.lower() == 'no': while True: #diberikan opsi untuk input item belanja lagi sebelum menghapus nama item yang kosong input_again_confirmation = str(input('Apakah anda Ingin Melakukan Input Kembali Item Belanja Anda? (Yes/No) : ')) if input_again_confirmation.lower() == 'yes': self.add_item() break elif input_again_confirmation.lower() == 'no': print(' ') print(' ') self.total_price() break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ') break else: print(' ') print('⚠️Warning : ') print("Jawaban tidak valid. Silakan jawab 'Yes' atau 'No'.") print(' ')
-
Method total_price()
Method total_price() digunakan untuk menghitung total harga transaksi yang harus dibayarkan oleh Customer
Method ini muncul secara otomatis jika semua opsi sudah selesai digunakan atau tidak digunakan oleh customer
Cara kerjanya adalah sebagai berikut:
a. Menghitung Total Harga Transaksi yang harus dibayar Customer
b. Jika Total Harga Transaksi di atas 200.000 maka akan mendapatkan diskon 5%
c. Jika Total Harga Transaksi di atas 300.000 maka akan mendapatkan diskon 8%
d. Jika Total Harga Transaksi di atas 500.000 maka akan mendapatkan diskon 10%#Fitur Melihat Total Harga Keseluruhan def total_price(self): total_transaksi = 0 #menyimpan niali total transaksi total_transaksi_sebelum_diskon = [] #menyimpan list transaksi sebelum diskon total_diskon = [] #menyimpan list total_diskon total_transaksi_final = [] #total transaksi final setelah dikurangi diskon for i in range(len(self.list_item)): total_transaksi += self.list_item[i][3] if total_transaksi > 500000: #jika transaksi di atas 500 ribu total_transaksi_sebelum_diskon = ['', 'Total Harga :','',total_transaksi] total_diskon = ['','Diskon:','10%',int((total_transaksi * 0.1) * (-1))] total_transaksi_final = ['', 'Total Harga Setelah Diskon:', '(Disc 10%)',int(total_transaksi - (total_transaksi * 0.1))] elif total_transaksi > 300000: #jika transaksi di atas 300 ribu total_transaksi_sebelum_diskon = ['', 'Total Harga :','',total_transaksi] total_diskon = ['','Diskon:','8%',int((total_transaksi * 0.08) * (-1))] total_transaksi_final = ['', 'Total Harga Setelah Diskon : ','(Disc 8%)',int(total_transaksi - (total_transaksi * 0.08))] elif total_transaksi > 200000: #jika transaksi di atas 200 ribu total_transaksi_sebelum_diskon = ['', 'Total Harga :','',total_transaksi] total_diskon = ['','Diskon:','5%',int((total_transaksi * 0.05) * (-1))] total_transaksi_final = ['','Total Harga Setelah Diskon : ' , '(Disc 5%)',int(total_transaksi - (total_transaksi * 0.05))] elif total_transaksi <= 200000: #jika transaksi di bawah atau sama dengan 200 ribu total_transaksi_sebelum_diskon = ['', 'Total Harga :','',total_transaksi] total_diskon = ['','Diskon:','0%',''] total_transaksi_final =['', 'Total Harga Setelah Diskon : ', '(No Disc)', int(total_transaksi)] self.list_item.append(total_transaksi_sebelum_diskon) #menambahkan listl transaksi sebelum diskon self.list_item.append(total_diskon) #menambah list diskon self.list_item.append(total_transaksi_final) #menambah list total transaksi final self.table_belanja() #menampilkan nota transaksi dalam bentuk tabel
-
Method table_belanja()
a. Method table_belanja() digunakan untuk menampilkan tabel input item belanja atau nota transaksi setelah dijalankan di method total_price()
b. Method ini menyimpan tables (item yang disimpan pada atribut list_item) dan headers (yang menyimpan nama kolom)#Fitur Menampilkan Tabel List Item Belanja----------------------------Code by : Oktavio Reza Putra------------------------------------------------------------------------- def table_belanja(self): print(' ') print('‧₊˚ ☁️⋅♡🪐༘⋆---Supermarket Cak Andi---‧₊˚ ☁️⋅♡🪐༘⋆') print('Berikut adalah List Transaksi yang dibeli :') #membuat variabel header untuk menyimpan niali yang digunakan sebagai nama kolom header = ['Item', 'Jumlah Item', 'Harga per Item (Rp)','Total Harga Keseluruhan (Rp)'] #membuat variabel tabel untuk menyimpan nilai di dalam atribut list_item table = tabulate(self.list_item, header, tablefmt='grid') #menampilkan tabel input belanja atau nota transaksi print(table)
- Perlu adanya penambahan item seperti List Belanja dan jumlah Stok yang tersedia saat ini di Toko Supermarket Cak Andi
- Perlu adanya Input yang digunakan untuk memasukkan ID Transaksi yang Berbeda
- Perlu adanya input yang bisa digunakan untuk memasukkan lebih dari satu item sekaligus