def main(): # Program utama F14 # Admin memasukkan ID Wahana dan dikeluarkan riwayat penggunaan wahana tersebut. wahana = load.use ("wahana.csv") penggunaan = load.use ("penggunaan.csv") id_wahana = str(input("Masukkan ID Wahana: ")) wahana_found = aux.find_baris_first(wahana.data, "ID_Wahana", id_wahana) while wahana_found == [] : id_wahana = input("Tidak ditemukan wahana dengan ID \"" + id_wahana + '\". Mohon diulang: ') wahana_found = aux.find_baris_first(wahana.data, "ID_Wahana", id_wahana) riwayat = [] for i in range(1, aux.length(penggunaan.data)): if str(penggunaan.data[i][aux.find_idx(penggunaan.data, "ID_Wahana")]) == id_wahana: tanggal_guna = penggunaan.data[i][aux.find_idx(penggunaan.data, "Tanggal_Penggunaan")] username = penggunaan.data[i][aux.find_idx(penggunaan.data, "Username")] tiket = penggunaan.data[i][aux.find_idx(penggunaan.data, "Jumlah_Tiket")] riwayat_baru = (tanggal_guna, username, tiket) riwayat = aux.konsDot(riwayat, riwayat_baru) print("Riwayat penggunaan " + str(wahana_found[aux.find_idx(wahana.data, "Nama_Wahana")]) + ": ") for i in range(aux.length(riwayat)): print(str(riwayat[i][0]) + " | " + str(riwayat[i][1]) + " | " + str(riwayat[i][2])) return
def main(userfile): # function main (userfile : F01.Rekaman) -> array [0..1] of array [0..6] of string # Me-loginkan user yang sudah terdaftar ke dalam sistem. # KAMUS LOKAL # isUser, findpassword : boolean # username, password, spw : string # finduser : array [0..6] of string # user : array [0..1] of array [0..6] of string # ALGORITMA isUser = False while (isUser == False): username = str(input("Masukkan username: "******"Masukkan password: "******"Username", username) if (finduser != []): # Cek apakah password valid spw = finduser[flib.find_idx(userfile.data, "Password")] findpassword = B01.verify(spw, password) if (findpassword == True): isUser = True print("") print("Selamat bersenang-senang, " + finduser[flib.find_idx(userfile.data, "Nama")] + "!") print("") if (isUser == False): print("Username/Password salah") user = [userfile.data[0], finduser] return user
def main(): # PROCEDURE main () # Pencarian pemain pada sistem # KAMUS LOKAL # isUserValid = boolean # y = string # user = array[0..1] of array[0..6] of string # finduser = array[0..6] of string # ALGORITMA userfile = load.use("user.csv") isUserValid = False while isUserValid == False: y = str(input("Masukkan username: "******"Username", y) if finduser != []: isUserValid = True print("") print("Nama Pemain: " + finduser[aux.find_idx(userfile.data, "Nama")]) print("Tinggi Pemain: " + finduser[aux.find_idx(userfile.data, "Tinggi_Badan")]) print("Tanggal Lahir Pemain: " + finduser[aux.find_idx(userfile.data, "Tanggal_Lahir")]) else: isUserValid = False print("Username tidak ditemukan, silahkan coba lagi.")
def main(): # procedure main(input/output user : Rekaman) # I.S. user abstrak # F.S. Jika top-up berjalan, user akan diupdate. # KAMUS LOKAL # user : Rekaman # username : string # user_found : array [0..6] of string # balance, topup, new_balance : integer # ALGORITMA user = load.use("user.csv") # Input dan validasi Username: username = input("Masukkan username: "******"Username", username) if user_found == []: print("Tidak ditemukan pengguna dengan username \"" + username + '\".') return user_real_name = str(user_found[aux.find_idx(user.data, "Nama")]) balance = int(user_found[aux.find_idx(user.data, "Saldo")]) # Input dan validasi penambahan saldo topup = int(input("Jumlah saldo yang di-top up: ")) while topup <= 0: if topup == 0: cancel_topup = input("Batalkan top up? [Y/N] ") while cancel_topup.upper() != 'Y' or cancel_topup.upper() != 'N': cancel_topup = input("Masukan salah. Batalkan top up? [Y/N] ") if cancel_topup == 'Y': return else: # cancel_topup == 'N' topup = int(input("Jumlah saldo yang di-top up: ")) else: topup = int( input("Jumlah saldo harusnya bukan negatif. Mohon diulang: ")) new_balance = balance + topup # Baris kepemilikan tiket pengguna diganti dengan banyak tiket baru. row_to_be_changed = aux.find_baris_idx( user.data, user_found) # Baris user yang ingin diganti idx_col_saldo = aux.find_idx(user.data, "Saldo") new_user = user.data new_user[row_to_be_changed][idx_col_saldo] = str( new_balance) # Penggantian baris load.store("user.csv", new_user) print("Top up berhasil. Saldo " + user_real_name + " bertambah menjadi " + str(new_balance) + ".") return
def main(): # PROCEDURE main () # I.S tiket dan wahana sudah terdefinisi # F.S ditampilkan ID Wahana, Nama Wahana, dan jumlah tiket suatu user (user yang dicari inputan dari admin) # KAMUS LOKAL # userfile, wahana, tiket = Rekaman # name = string # finduser, user_in_db = Rekaman.data # i = integer # name = string userfile = load.use("user.csv") wahana = load.use("wahana.csv") tiket = load.use("tiket.csv") name = str(input("Masukkan username: "******"Username", name) user_in_db = aux.find_baris_first(userfile.data, "Username", name) if user_in_db == []: print("Tidak ditemukan pengguna dengan username \"" + name + "\".") elif finduser == [[]]: print(name + " tidak memiliki tiket satupun.") else: print("Kepemilikan tiket pemain: ") for i in range(aux.length(finduser)): detect_ID = finduser[i][aux.find_idx(tiket.data, "ID_Wahana")] print(str(detect_ID) + " | ", end='') findwahana = aux.find_baris_first(wahana.data, "ID_Wahana", detect_ID) print(str(findwahana[aux.find_idx(wahana.data, "Nama_Wahana")]) + ' | ', end='') print(str(finduser[i][aux.find_idx(tiket.data, "Jumlah_Tiket")])) return
def main(): # PROCEDURE main (output user : Rekaman) # I.S. user abstrak # F.S. user diganti satu barisnya sehingga kolom "Role" berisi "Gold" # KAMUS LOKAL # username_upgraded : string # user_found : array[0..1] of array[0..6] of string # new_user : Rekaman.data # row_to_be_changed : array[0..6] of string # idx_col_role : integer # ALGORITMA user = load.use("user.csv") username_upgraded = input("Masukkan username yang ingin di-upgrade: ") user_found = aux.find_baris_first(user.data, "Username", username_upgraded) while user_found == []: if user_found == []: print("Tidak ditemukan pengguna dengan username \"" + username_upgraded + '\".') return if user_found[aux.find_idx(user.data, "Role")] == "Gold": print("Pemain " + username_upgraded + " sudah memiliki akun Gold.") elif user_found[aux.find_idx(user.data, "Role")] == "Admin": print("Admin tidak bisa menjadi akun Gold.") else: # Meng-update file user.csv sesuai upgrade akun pemain. new_user = user.data row_to_be_changed = aux.find_baris_idx( new_user, user_found) # Baris user yang ingin diganti idx_col_role = aux.find_idx(new_user, "Role") new_user[row_to_be_changed][idx_col_role] = "Gold" load.store("user.csv", new_user) print("Akun pemain " + username_upgraded + " telah di-upgrade.") return
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(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.")
def main(userfile): # procedure main (input/output userfile : load.Rekaman, output user.data : Custom.data) # I.S. userfile terdefinisi # F.S. ditambahkan suatu data baru ke userfile # KAMUS LOKAL # user : Custom # isUsernameOK, isBirthdayOK, isHeightOK, isEmpty : boolean # i : integer # sandi : string # ALGORITMA user = Custom() isUsernameOK = False isBirthdayOK = False isHeightOK = False isEmpty = False while ((isUsernameOK == False) or (isBirthdayOK == False) or (isHeightOK == False) or (isEmpty == True)): # Setiap pengulangan loop, semua field harus dicek ulang isUsernameOK = False isBirthdayOK = False isHeightOK = False isEmpty = False for i in range(user.datacount): # Handling username (tidak boleh ada 2 username sama) if (user.datadesc[i] == "username pemain"): user.data[i] = (str( input("Masukkan " + user.datadesc[i] + ": "))).lower() if (flib.find_baris_first(userfile.data, "Username", user.data[i]) == []): isUsernameOK = True # Handling tanggal lahir (harus sesuai format DD/MM/YYYY) elif (user.datadesc[i] == "tanggal lahir pemain (DD/MM/YYYY)"): user.data[i] = str(input("Masukkan " + user.datadesc[i] + ": ")) isBirthdayOK = flib.validate_date(user.data[i]) # Handling tinggi badan (tidak boleh bilangan negatif) elif (user.datadesc[i] == "tinggi badan pemain (cm)"): user.data[i] = str(input("Masukkan " + user.datadesc[i] + ": ")) try: if (int(user.data[i]) >= 0): isHeightOK = True except ValueError: isHeightOK = False # Handling role (semua user yang di-generate dengan cara ini adalah "Pemain") elif (user.datadesc[i] == "role pemain"): user.data[i] = str("Pemain") # Handling saldo (semua "Pemain" memiliki saldo awal 0) elif (user.datadesc[i] == "saldo pemain"): user.data[i] = str("0") # BONUS 1! Handling password (di-hash via B01) elif (user.datadesc[i] == "password pemain"): sandi = str(input("Masukkan " + user.datadesc[i] + ": ")) user.data[i] = B01.hash_pass(sandi) # Handling semua field yang tidak butuh penanganan khusus else: user.data[i] = str(input("Masukkan " + user.datadesc[i] + ": ")) # Beritahu user jika ada field yang tidak terisi for i in range(user.datacount): if ((user.data[i] == "") or (sandi == "") ): # (sandi == "") ditambahkan untuk mengakomodasi BONUS 1 isEmpty = True if (isEmpty == True): print("Ada field yang lupa Anda isi. Silakan ulangi pengisian.") else: # Beritahu user jika ia salah meng-input suatu field if (isUsernameOK == False): print( "Username sudah terdaftar. Silakan pilih username yang lain." ) if (isBirthdayOK == False): print("Tanggal lahir Anda tidak valid. Silakan ulangi lagi.") if (isHeightOK == False): print("Tinggi badan Anda tidak valid. Silakan ulangi lagi.") # Simpan data user baru ke database load.store(userfile.name, flib.konsDot(userfile.data, user.data)) print("Selamat menjadi pemain, " + user.data[0] + ". Selamat bermain.")