def main(pengguna): # PROCEDURE main (input pengguna : array [0..1] of array [0..6] of string, # output tiket : Rekaman, output penggunaan : Rekaman) # I.S. tiket dan penggunaan abstrak # F.S. Jika input lolos ujian, tiket dan penggunaan akan diupdate. # KAMUS LOKAL # wahana, tiket, penggunaan: Rekaman # username : string # height, balance : integer # id_wahana : string # wahana_found : array[0..4] of string # date_now : string # tickets, owned_tickets: integer # cancel_use : character # data_penggunaan : array [0..3] of string # new_penggunaan, previously_bought : Rekaman.data # ALGORITMA wahana = load.use("wahana.csv") tiket = load.use("tiket.csv") penggunaan = load.use("penggunaan.csv") username = str(pengguna[1][aux.find_idx(pengguna, "Username")]) # Input dan validasi ID Wahana: id_wahana = input("Masukkan ID wahana: ") wahana_found = aux.find_baris_first(wahana.data, "ID_Wahana", id_wahana) if wahana_found == []: print("Tidak ditemukan wahana dengan ID \"" + id_wahana + '\".') return wahana_name = wahana_found[aux.find_idx(wahana.data, "Nama_Wahana")] # Input dan validasi tanggal hari ini date_now = aux.input_date("Masukkan tanggal hari ini: ") # Input dan validasi jumlah tiket yang ingin digunakan tickets = int(input("Jumlah tiket yang digunakan: ")) while tickets <= 0: if tickets == 0: cancel_use = input("Batalkan menggunakan tiket? [Y/N] ") while cancel_use.upper() != 'Y' or cancel_use.upper() != 'N': cancel_use = input( "Masukan salah. Batalkan menggunakan tiket? [Y/N] ") if cancel_use == 'Y': return else: # cancel_use == 'N' tickets = int(input("Jumlah tiket yang digunakan: ")) else: tickets = int(input("Jumlah tiket harusnya bukan negatif. Mohon diulang: ")) # Mengecek apakah pengguna sudah membeli tiket pada wahana previously_bought = aux.merge([tiket.data[0]], aux.find_baris_all(tiket.data, "Username", username)) ticket_id_wahana = aux.find_baris_first(previously_bought, "ID_Wahana", id_wahana) if ticket_id_wahana == []: # Jika pengguna belum pernah membeli tiket di id_wahana, pengguna tidak diperbolehkan memakai tiket. print("Anda belum pernah membeli tiket terkait.") print("Alasan: Belum membeli tiket pada wahana " + wahana_name + ".") return owned_tickets = int(ticket_id_wahana[aux.find_idx(tiket.data, "Jumlah_Tiket")]) if int(owned_tickets) < tickets: # Jika pengguna meminta tiket lebih banyak daripada yang sebenarnya ia punya, pengguna tidak diperbolehkan memakai tiket. print("Anda belum pernah membeli tiket terkait.") print("Alasan: Anda hanya memiliki " + str(owned_tickets) + " tiket pada wahana " + wahana_name + ".") else: # Jika pengguna memiliki tiket yang cukup pada wahana, pengguna menggunakan tiket tersebut. # File penggunaan tiket diupdate, sesuai banyak tiket yang dipakai. data_penggunaan = [username, date_now, id_wahana, tickets] new_penggunaan = aux.konsDot(penggunaan.data, data_penggunaan) load.store("penggunaan.csv", new_penggunaan) # File kepemilikan tiket diupdate, banyak tiket yang dimiliki pengguna dikurangi banyak tiket yang dipakai. if owned_tickets == tickets: # Jika pengguna kehabisan tiket pada wahana tersebut, baris tersebut dihapus. row_to_be_changed = aux.find_baris_idx(tiket.data, ticket_id_wahana) # Baris tiket yang ingin dihapus new_tiket = aux.merge(tiket.data[:row_to_be_changed], tiket.data[row_to_be_changed+1:]) # Penghapusan baris else: # Baris kepemilikan tiket pengguna diganti dengan banyak tiket baru. row_to_be_changed = aux.find_baris_idx(tiket.data, ticket_id_wahana) # Baris tiket yang ingin diganti idx_col_jml_tiket = aux.find_idx(tiket.data, "Jumlah_Tiket") new_tiket = tiket.data new_tiket[row_to_be_changed][idx_col_jml_tiket] = str(int(owned_tickets) - int(tickets)) # Penggantian baris load.store("tiket.csv", new_tiket) print("Terima kasih telah bermain.") print("Selamat bersenang-senang di " + wahana_name + "!") return
def main(pengguna): # PROCEDURE main (input pengguna : array [0..1] of array [0..6] of string # output tiket : Rekaman, output pembelian : Rekaman) # I.S. pembelian dan tiket abstrak # F.S. Jika input lolos ujian, tiket dan pembelian akan diupdate. # KAMUS LOKAL # wahana, pembelian, tiket : Rekaman # username, date_of_birth, role : string # height, balance : integer # id_wahana : string # wahana_found : array[0..4] of string # date_now : string # age : integer # tickets : integer # cancel_buy : character # wahana_age_group, wahana_height_group : string # tickets_price : integer # data_pembelian : array [0..3] of string # new_pembelian, previously_bought : Rekaman.data # ALGORITMA wahana = load.use("wahana.csv") pembelian = load.use("pembelian.csv") tiket = load.use("tiket.csv") username = str(pengguna[1][aux.find_idx(pengguna, "Username")]) date_of_birth = str(pengguna[1][aux.find_idx(pengguna, "Tanggal_Lahir")]) height = int(pengguna[1][aux.find_idx(pengguna, "Tinggi_Badan")]) balance = int(pengguna[1][aux.find_idx(pengguna, "Saldo")]) role = str(pengguna[1][aux.find_idx(pengguna, "Role")]) # Input dan validasi ID Wahana id_wahana = input("Masukkan ID wahana: ") wahana_found = aux.find_baris_first(wahana.data, "ID_Wahana", id_wahana) if wahana_found == []: print("Tidak ditemukan wahana dengan ID \"" + id_wahana + '\".') return # Input dan validasi tanggal hari ini date_now = aux.input_date("Masukkan tanggal hari ini: ") age = aux.years_since_then(date_of_birth, date_now) # Menentukan umur dari pengguna # Input dan validasi jumlah tiket yang ingin dibeli tickets = int(input("Jumlah tiket yang dibeli: ")) while tickets <= 0: if tickets == 0: cancel_buy = input("Batalkan pembelian tiket? [Y/N] ") while cancel_buy.upper() != 'Y' and cancel_buy.upper() != 'N': cancel_buy = input( "Masukan salah. Batalkan pembelian tiket? [Y/N] ") if cancel_buy == 'Y': return else: # cancel_buy == 'N' tickets = int(input("Jumlah tiket yang dibeli: ")) else: tickets = int( input("Jumlah tiket harusnya bukan negatif. Mohon diulang: ")) # Mengecek apakah umur pengguna sudah memenuhi batasan umur wahana. wahana_age_group = wahana_found[aux.find_idx(wahana.data, "Batasan_Umur")] # Wahana untuk anak-anak, tetapi pengguna dewasa if wahana_age_group == "anak-anak" and age >= 17: print("Batasan umur: Anak-anak (< 17 tahun)") print("Umur Anda: " + str(age)) print("Anda tidak memenuhi persyaratan untuk memainkan wahana ini." + "\nSilakan menggunakan wahana lain yang tersedia.") return # Wahana untuk dewasa, tetapi pengguna anak-anak elif wahana_age_group == "dewasa" and age < 17: print("Batasan umur: Dewasa (>= 17 tahun)") print("Umur Anda: " + str(age)) print("Anda tidak memenuhi persyaratan untuk memainkan wahana ini." + "\nSilakan menggunakan wahana lain yang tersedia.") return # Mengecek apakah tinggi pengguna sudah memenuhi batasan tinggi wahana. wahana_height_group = wahana_found[aux.find_idx(wahana.data, "Batasan_Tinggi")] # Wahana untuk pemain >170cm, tetapi pengguna <=170cm. if wahana_height_group == ">170" and height <= 170: print("Anda tidak memenuhi persyaratan untuk memainkan wahana ini." + "\nSilakan menggunakan wahana lain yang tersedia.") return # Mengecek apakah pengguna memiliki saldo yang cukup. tickets_price = tickets * int(wahana_found[aux.find_idx( wahana.data, "Harga_Tiket")]) # Jika pengguna adalah pemain dengan golden account, harga jadi setengah. if role == "Gold": tickets_price = round(tickets_price * 0.5) if tickets_price > balance: # Saldo pengguna tidak cukup untuk membeli tiket print("Harga tiket total: " + str(tickets_price)) print("Saldo: " + str(balance)) print("Saldo anda tidak cukup.") print("Silakan mengisi saldo Anda.") return # Jika lolos semua pengecekan, akan dimulai proses penyetoran data pembelian tiket. # Menuliskan pembelian baru ke rekaman pembelian.csv data_pembelian = [username, date_now, id_wahana, tickets] new_pembelian = aux.konsDot(pembelian.data, data_pembelian) load.store("pembelian.csv", new_pembelian) # Menambahkan kepemilikan tiket ke rekaman tiket.csv previously_bought = aux.merge([tiket.data[0]], aux.find_baris_all(tiket.data, "Username", username)) if previously_bought[1:] == [[]]: # Jika pengguna belum pernah membeli tiket sama sekali, ditambahkan entry baru. data_tiket = [username, id_wahana, tickets] new_tiket = aux.konsDot(tiket.data, data_tiket) else: # Pengguna sudah pernah membeli tiket sebelumnya. ticket_id_wahana = aux.find_baris_first(previously_bought, "ID_Wahana", id_wahana) if ticket_id_wahana == []: # Jika pengguna belum pernah membeli tiket di id_wahana yang sama sebelumnya, ditambahkan entry baru. data_tiket = [username, id_wahana, tickets] new_tiket = aux.konsDot(tiket.data, data_tiket) else: # Jika pengguna pernah membeli tiket di id_wahana yang sama sebelumnya, baris tersebut diperbarukan. new_tiket = tiket.data row_to_be_changed = aux.find_baris_idx( new_tiket, ticket_id_wahana) # Baris tiket yang ingin diganti idx_col_jml_tiket = aux.find_idx(new_tiket, "Jumlah_Tiket") new_tiket[row_to_be_changed][idx_col_jml_tiket] = str( int(new_tiket[row_to_be_changed][idx_col_jml_tiket]) + tickets) load.store("tiket.csv", new_tiket) # Mengurangi saldo pengguna dengan harga tiket yang dibayar. pengguna[1][aux.find_idx(pengguna, "Saldo")] = str(balance - tickets_price) print("Prosedur pembelian tiket telah selesai." + "\nSelamat bersenang-senang di " + wahana_found[aux.find_idx(wahana.data, "Nama_Wahana")] + "!") return
def main(pengguna): # PROCEDURE main (input pengguna) # I.S. kehilangan dan tiket abstrak # F.S. Jika input lolos ujian, tiket dan kehilangan akan diupdate. # KAMUS LOKAL # ALGORITMA user = load.use("user.csv") wahana = load.use("wahana.csv") kehilangan = load.use("hilang.csv") tiket = load.use("tiket.csv") username_typing = str(pengguna[1][aux.find_idx(pengguna, "Username")]) are_they_an_admin = (str(pengguna[1][aux.find_idx(pengguna, "Role")]) == "Admin" ) # Mengecek apakah pengguna admin # Input dan validasi username print( "Jika Anda bukan admin, Anda tidak bisa melaporkan kehilangan tiket untuk pengguna lain." ) username_lost_tickets = str(input("Masukkan username: "******"Jika Anda bukan admin, Anda tidak bisa melaporkan kehilangan tiket untuk pengguna lain." ) username_lost_tickets = str(input("Masukkan username *Anda*: ")) else: # Admin boleh melaporkan kehilangan tiket untuk pengguna lain. user_found = aux.find_baris_first(user.data, "Username", username_lost_tickets) if user_found == []: print("Tidak ditemukan pengguna dengan username \"" + username_lost_tickets + '\".') return # Input dan validasi tanggal hari ini date_now = aux.input_date("Masukkan tanggal hari ini: ") # Input dan validasi ID Wahana id_wahana = input("Masukkan ID wahana: ") wahana_found = aux.find_baris_first(wahana.data, "ID_Wahana", id_wahana) if wahana_found == []: print("Tidak ditemukan wahana dengan ID \"" + id_wahana + '\".') return wahana_name = wahana_found[aux.find_idx(wahana.data, "Nama_Wahana")] # Input dan validasi jumlah tiket yang hilang tickets = int(input("Jumlah tiket yang dihilangkan: ")) while tickets <= 0: if tickets == 0: cancel_buy = input("Batalkan melapor kehilangan? [Y/N] ") while cancel_buy.upper() != 'Y' or cancel_buy.upper() != 'N': cancel_buy = input( "Masukan salah. Batalkan melapor kehilangan? [Y/N] ") if cancel_buy == 'Y': return else: # cancel_buy == 'N' tickets = int(input("Jumlah tiket yang dihilangkan: ")) else: tickets = int( input("Jumlah tiket harusnya bukan negatif. Mohon diulang: ")) # Mengecek apakah pengguna sudah pernah membeli tiket di wahana yang dimasukkan previously_bought = aux.merge([tiket.data[0]], aux.find_baris_all(tiket.data, "Username", username_lost_tickets)) ticket_id_wahana = aux.find_baris_first(previously_bought, "ID_Wahana", id_wahana) if ticket_id_wahana == []: # Jika pengguna belum pernah membeli tiket di id_wahana, pengguna tidak diperbolehkan memakai tiket. print("Tiket Anda tidak valid dalam sistem kami.") print("Alasan: Belum membeli tiket pada wahana " + wahana_name + ".\n") return owned_tickets = str(ticket_id_wahana[aux.find_idx(tiket.data, "Jumlah_Tiket")]) if int(owned_tickets) < tickets: # Jika pengguna meminta tiket lebih banyak daripada yang sebenarnya ia punya, pengguna tidak bisa melaporkan kehilangan tiket. print("Tiket Anda tidak valid dalam sistem kami.") print("Alasan: Anda hanya memiliki " + owned_tickets + " tiket pada wahana " + wahana_name + ".\n") else: # Jika pengguna memiliki tiket yang cukup pada wahana, laporan kehilangan berlanjut. # File kehilangan tiket diupdate, sesuai banyak tiket yang dipakai. data_lost = [username_lost_tickets, date_now, id_wahana, tickets] new_lost = aux.konsDot(kehilangan.data, data_lost) load.store("hilang.csv", new_lost) # File kehilangan tiket diupdate, banyak tiket yang dimiliki pengguna dikurangi banyak tiket yang hilang. if int(owned_tickets) == tickets: # Jika pengguna kehabisan tiket pada wahana tersebut, baris tersebut dihapus. row_to_be_changed = aux.find_baris_idx( tiket.data, ticket_id_wahana) # Baris tiket yang ingin dihapus new_tiket = aux.merge(tiket.data[:row_to_be_changed], tiket.data[row_to_be_changed + 1:]) # Penghapusan baris else: # Baris kepemilikan tiket pengguna diganti dengan banyak tiket baru. row_to_be_changed = aux.find_baris_idx( tiket.data, ticket_id_wahana) # Baris tiket yang ingin diganti idx_col_jml_tiket = aux.find_idx(tiket.data, "Jumlah_Tiket") new_tiket = tiket.data new_tiket[row_to_be_changed][idx_col_jml_tiket] = str( int(owned_tickets) - int(tickets)) # Penggantian baris load.store("tiket.csv", new_tiket) print("Laporan kehilangan tiket Anda telah direkam.\n\n") return
def main (): # procedure main () # I.S. Abstrak # F.S. Wahana sesuai batasan pencarian ditampilkan. # Program utama F06 wahana = load.use ("wahana.csv") print ("Jenis batasan umur: ") print ("1. Anak-anak (<17 tahun)") print ("2. Dewasa (>=17 tahun)") print ("3. Semua umur") print (" ") print ("Jenis batasan tinggi badan: ") print ("1. Lebih dari 170 cm") print ("2. Tanpa batasan") print (" ") while True: umur = int(input("Batasan umur pemain: ")) if isBatasUmurTrue(umur): # 1, 2, 3 break else: # selain 1, 2, 3 print("Batasan umur tidak valid!") return while True: tinggi = int(input("Batasan tinggi pemain: ")) if isBatasTinggiTrue(tinggi): # 1, 2 break else: # selain 1, 2 print("Batasan tinggi tidak valid!") return # data_wahana = load.use(wahanafile) if umur == 1 : if tinggi == 1: u = "anak-anak" t = ">170" elif tinggi == 2: u = "anak-anak" t = "tanpa batasan" elif umur == 2: if tinggi == 1: u = "dewasa" t = ">170" elif tinggi == 2: u = "dewasa" t = "tanpa batasan" elif umur == 3: if tinggi == 1: u = "semua umur" t = ">170" elif tinggi == 2: u = "semua umur" t = "tanpa batasan" umur_true = aux.merge([wahana.data[0]], aux.find_baris_all(wahana.data, "Batasan_Umur", u)) if umur_true[1:] == []: print("Tidak ada wahana sesuai batasan yang dimasukkan.") return validasi = aux.find_baris_all(umur_true, "Batasan_Tinggi", t) if validasi == [[]]: print("Tidak ada wahana sesuai batasan yang dimasukkan.") return print("Hasil pencarian: ") for i in range(aux.length(validasi)): id_wahana = validasi[i][aux.find_idx(wahana.data, "ID_Wahana")] nama_wahana = validasi[i][aux.find_idx(wahana.data, "Nama_Wahana")] harga_tiket = validasi[i][aux.find_idx(wahana.data, "Harga_Tiket")] print (id_wahana, "|", nama_wahana, "|", harga_tiket) return
def main(pengguna): # PROCEDURE main (input pengguna : array [0..1] of array [0..6] of string, # output tiket : Rekaman, output refund : Rekaman) # I.S. tiket dan refund abstrak # F.S. Jika input lolos ujian, tiken dan refund akan diupdate. # KAMUS LOKAL # wahana, tiket, refund: Rekaman # username, role : string # balance : integer # id_wahana : string # wahana_found : array[0..4] of string # date_now : string # tickets, owned_tickets: integer # cancel_refund : character # data_refund : array [0..3] of string # new_refund, previously_bought : Rekaman.data # ALGORITMA wahana = load.use("wahana.csv") tiket = load.use("tiket.csv") refund = load.use("refund.csv") username = str(pengguna[1][aux.find_idx(pengguna, "Username")]) balance = int(pengguna[1][aux.find_idx(pengguna, "Saldo")]) role = str(pengguna[1][aux.find_idx(pengguna, "Role")]) # Input dan validasi ID Wahana: id_wahana = input("Masukkan ID wahana: ") wahana_found = aux.find_baris_first(wahana.data, "ID_Wahana", id_wahana) if wahana_found == []: print("Tidak ditemukan wahana dengan ID \"" + id_wahana + '\".') return wahana_name = wahana_found[aux.find_idx(wahana.data, "Nama_Wahana")] # Input dan validasi tanggal hari ini date_now = aux.input_date("Masukkan tanggal hari ini: ") # Input dan validasi jumlah tiket yang ingin digunakan tickets = int(input("Jumlah tiket yang di-refund: ")) while tickets <= 0: if tickets == 0: cancel_refund = input("Batalkan refund tiket? [Y/N] ") while cancel_refund.upper() != 'Y' or cancel_refund.upper() != 'N': cancel_refund = input( "Masukan salah. Batalkan refund tiket? [Y/N] ") if cancel_refund == 'Y': return else: # cancel_refund == 'N' tickets = int(input("Jumlah refund yang digunakan: ")) else: tickets = int( input("Jumlah tiket harusnya bukan negatif. Mohon diulang: ")) # Mengecek apakah pengguna sudah membeli tiket pada wahana previously_bought = aux.merge([tiket.data[0]], aux.find_baris_all(tiket.data, "Username", username)) ticket_id_wahana = aux.find_baris_first(previously_bought, "ID_Wahana", id_wahana) if ticket_id_wahana == []: # Jika pengguna belum pernah membeli tiket di id_wahana, pengguna tidak diperbolehkan memakai tiket. print("Tiket Anda tidak valid dalam sistem kami.") print("Alasan: Belum membeli tiket pada wahana " + wahana_name + ".") return owned_tickets = str(ticket_id_wahana[aux.find_idx(tiket.data, "Jumlah_Tiket")]) if int(owned_tickets) < tickets: # Jika pengguna meminta tiket lebih banyak daripada yang sebenarnya ia punya, pengguna tidak diperbolehkan me-refund tiket. print("Tiket Anda tidak valid dalam sistem kami.") print("Alasan: Anda hanya memiliki " + owned_tickets + " tiket pada wahana " + wahana_name + ".") else: # Jika pengguna memiliki tiket yang cukup pada wahana, pengguna boleh me-refund tiket. # File refund tiket diupdate, sesuai banyak tiket yang dipakai. data_refund = [username, date_now, id_wahana, tickets] new_refund = aux.konsDot(refund.data, data_refund) load.store("refund.csv", new_refund) # File refund tiket diupdate, banyak tiket yang dimiliki pengguna dikurangi banyak tiket yang di-refund if int(owned_tickets) == tickets: # Jika pengguna kehabisan tiket pada wahana tersebut, baris tersebut dihapus. row_to_be_changed = aux.find_baris_idx( tiket.data, ticket_id_wahana) # Baris tiket yang ingin dihapus new_tiket = aux.merge(tiket.data[:row_to_be_changed], tiket.data[row_to_be_changed + 1:]) # Penghapusan baris else: # Baris kepemilikan tiket pengguna diganti dengan banyak tiket baru. row_to_be_changed = aux.find_baris_idx( tiket.data, ticket_id_wahana) # Baris tiket yang ingin diganti idx_col_jml_tiket = aux.find_idx(tiket.data, "Jumlah_Tiket") new_tiket = tiket.data new_tiket[row_to_be_changed][idx_col_jml_tiket] = str( int(owned_tickets) - int(tickets)) # Penggantian baris load.store("tiket.csv", new_tiket) # Memberi refund ke saldo akun pengguna single_ticket_price = int(wahana_found[aux.find_idx( wahana.data, "Harga_Tiket")]) refund_percentage = 0.8 # Konstanta persentase dari harga tiket if role == "Gold": # Jika pengguna merupakan pemain dengan golden account, refund disesuaikan harga gold. refund_percentage *= 0.8 refund_amount = round(tickets * refund_percentage * single_ticket_price) pengguna[1][aux.find_idx(pengguna, "Saldo")] = str(balance + refund_amount) print("Uang refund sudah kami berikan pada akun Anda.")