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(): # 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(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(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 (input kritiksaran : Rekaman) # Mengeluarkan data kritiksaran yang sudah diurut berdasarkan sorting_key # KAMUS LOKAL # sorting_key : string # sorting_idx, i, j, minpos : int # temp : array of string # ALGORITMA kritiksaran = load.use("kritiksaran.csv") sorting_key = "ID_Wahana" sorting_idx = aux.find_idx( kritiksaran.data, sorting_key) # Mencari indeks kolom <sorting_key> for i in range(1, aux.length(kritiksaran.data)): minpos = i for j in range(i, aux.length(kritiksaran.data)): if (kritiksaran.data[j][sorting_idx]) < ( kritiksaran.data[minpos][sorting_idx]): minpos = j temp = kritiksaran.data[i] kritiksaran.data[i] = kritiksaran.data[minpos] kritiksaran.data[minpos] = temp print("Kritik dan saran semua wahana: ") for i in range(1, aux.length(kritiksaran.data)): print(str(kritiksaran.data[i][2]) + ' | ', end='') print(str(kritiksaran.data[i][1]) + ' | ', end='') print(str(kritiksaran.data[i][0]) + ' | ', end='') print(str(kritiksaran.data[i][3])) return
def total_sold_tickets(wahana_id): # function total_sold_tickets (wahana_id : string) -> integer # Menghasilkan total tiket wahana yang telah terjual. # KAMUS LOKAL # pembelian : Rekaman # tickets_sold, i : integer # ALGORITMA pembelian = load.use("pembelian.csv") tickets_sold = 0 for i in range(1, aux.length(pembelian.data)): if str(pembelian.data[i][aux.find_idx(pembelian.data, "ID_Wahana")]) == wahana_id: tickets_sold += int(pembelian.data[i][aux.find_idx( pembelian.data, "Jumlah_Tiket")]) return tickets_sold
def main(): # procedure main () # I.S. Abstrak # F.S. Dikeluarkan tiga wahana 'terbaik' (diurut sesuai jumlah tiket terjual) # Syarat: Pasti sudah ada wahana sebanyak >= N_best pada wahana.csv # KAMUS LOKAL # wahana : Rekaman # wahana_ticket_data : array of tuple (string, string, integer) # constant N_best : integer = 3 # i, j, maks_idx : integer # wahana_id, wahana_name : string # wahana_tickets : integer # ALGORITMA wahana = load.use("wahana.csv") wahana_ticket_data = [("", "", 0) for i in range(1, aux.length(wahana.data))] for i in range(1, aux.length(wahana.data)): wahana_id = wahana.data[i][aux.find_idx(wahana.data, "ID_Wahana")] wahana_name = wahana.data[i][aux.find_idx(wahana.data, "Nama_Wahana")] wahana_tickets = total_sold_tickets(wahana_id) wahana_ticket_data[i - 1] = (wahana_id, wahana_name, wahana_tickets) # Sorting sesuai jumlah tiket yang terjual for i in range(0, aux.length(wahana_ticket_data)): maks_idx = i for j in range(i, aux.length(wahana_ticket_data)): if wahana_ticket_data[maks_idx][2] < wahana_ticket_data[j][2]: maks_idx = j temp = wahana_ticket_data[i] wahana_ticket_data[i] = wahana_ticket_data[maks_idx] wahana_ticket_data[maks_idx] = temp # Output terbaik N_best = 3 # konstanta, menyatakan berapa wahana terbaik yang dikeluarkan ke layar. for i in range(0, N_best): # Yang dikeluarkan ke layar: "Urutan | ID Wahana | Nama Wahana | Jumlah Tiket" print(i + 1, end=' | ') # Urutan print(wahana_ticket_data[i][0], end=' | ') # ID Wahana print(wahana_ticket_data[i][1], end=' | ') # Nama Wahana print(wahana_ticket_data[i][2]) # 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(): # 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(pengguna) : # FUNCTION main (input/output userfile : array of array [0..3] of string) # I.S. kritiksaran sudah terdefinisi # F.S. ditambahkan suatu data baru ke kritiksaran # KAMUS LOKAL kritiksaran = load.use("kritiksaran.csv") array_kritik_baru = ["","","",""] array_kritik_baru[0] = pengguna[1][aux.find_idx(pengguna,"Username")] array_kritik_baru[1] = str(input("Masukkan tanggal hari ini: ")) array_kritik_baru[2] = str(input("Masukkan ID Wahana: ")) array_kritik_baru[3] = str(input("Masukkan kritik dan saran: ")) kritik_added = aux.konsDot(kritiksaran.data,array_kritik_baru) kritiksaran.data = kritik_added print("") print("Kritik dan saran Anda kami terima.") return kritiksaran
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 (): # 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) # 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 getuserdata(user, dataname): # function getuserdata (user : array [0..1] of array [0..6] of string, dataname : string) -> string # Mengambil data dari user yang telah login # KAMUS LOKAL # ALGORITMA return user[1][flib.find_idx(user, str(dataname))]
# Login sebagai admin: # Username: wangkypro # Password: coklatenaknol print("$ login") whoami = login.main(load.use("user.csv")) # Dideklarasi exit_flag (boolean) yang menandakan apabila user sudah mau keluar dari program # Awalnya exit_flag = False if (whoami != []): exit_flag = False # Looping while not exit_flag: print("Anda ter-logged in sebagai " + str(whoami[1][flib.find_idx(whoami, "Username")]) + ".") # Loop pemain if (whoami[1][flib.find_idx(whoami, "Role")] == "Pemain" or whoami[1][flib.find_idx(whoami, "Role")] == "Gold"): print("Anda adalah seorang Pemain.") if whoami[1][flib.find_idx(whoami, "Role")] == "Gold": print("Anda memiliki Golden Account (harga tiket diskon 50%).") print( "Apa yang mau anda lakukan? (Ketik \"list\" untuk melihat daftar command)" ) try: command = input("$ ").lower() if (command == "list"): flib.command_pemain() elif (command == "save"):