def connect(attrmanager, bghtmanager, rfndmanager): attractionids = (attrmanager.getAttractions())[0] attractions = (attrmanager.getAttractions())[1] boughtdata = bghtmanager.get() if panjangArray(boughtdata) > 0: for x in boughtdata: idnumber = cariArray( x[2], attractionids ) # mencari idwahana yang terdaftar di pembelian pada array id wahana if idnumber != None: # jika idnumber ditemukan (attractions[idnumber]).newSale( int(x[3]) ) # masukkan attraksi pada idnumber sebanyak data pembelian # Lakukan yang sama dengan refund hanya dibuat minus # karena pengurangan pembelian refunddata = rfndmanager.get() if panjangArray(refunddata) > 0: for x in refunddata: idnumber = cariArray( x[2], attractionids ) # mencari idwahana yang terdaftar di pembelian pada array id wahana if idnumber != None: # jika idnumber ditemukan (attractions[idnumber]).newSale( (-1) * int(x[3]) ) # masukkan attraksi pada idnumber sebanyak data pembelian
def pecahbagian(string): if panjangArray(string) % 2 == 1: # ganjil midn = int(panjangArray(string)/2)+1 head = string[0:(midn-1)] mid = string[midn-1] tail = string[midn:panjangArray(string)] return [head,mid,tail] else: # genap midn = int(panjangArray(string)/2) head = string[0:midn] tail = string[midn:panjangArray(string)] return [head,None,tail]
def Decrypt(string): isinteger = False if string[0] == "$" and string[1] == "!" and string[2] == "%": string = string[3:panjangArray(string)] isinteger = True result = "" for i in range(panjangArray(string)): result += str(decryptAlphabet(string[i], int(1+(i^i)%5))) if isinteger: return int(susunurutan(result)) else: return susunurutan(result)
def history(user, usermanager, attrmanager, usedmanager): if (user != None): # Jika user sudah login if (user.getRole() != Role.Admin): #Jika user bukan admin print("Maaf! Anda bukan admin.") else: # User adalah admin # Input idwahana = input("Masukkan ID Wahana\t\t\t: ") print() # Validasi untuk input ID Wahana # ID Wahana harus bisa ditemukan # Ketik 'exit' untuk membatalkan while not (attrmanager.findAttraction(idwahana)): print( "ID Wahana yang dimasukkan tidak valid.\nKetik 'exit' untuk membatalkan." ) idwahana = input("Masukkan ID Wahana\t\t\t: ") if idwahana.lower() == 'exit': print("Pembelian tiket dibatalkan.") return print() # Memanggil data dari ticketmanager penggunaan histories = usedmanager.get() # Inisiasi matrix kosong match = [] for each in histories: if each[2] == idwahana: # Jika idwahana sama dengan yang dicari match = elAdd(match, each) if panjangArray(match) == 0: # Jika tidak ditemukan apa-apa print("Belum ada yang bermain di wahana tersebut.") else: # Setidaknya ada satu penemuan print("Riwayat:") #judul for each in match: if panjangArray( each[0] ) < 8: # Jika panjang username kurang dari 8, tab 2x username = each[0] + "\t\t | \t " else: username = each[0] + "\t | \t " print(f"{each[1]}\t | \t{username}{each[3]}") else: # Jika belum login print("Anda belum login.")
def showInventory(user, usermanager, attrmanager): if (user != None): # sudah login if (user.getRole() != Role.Admin): # bukanadmin print("Maaf! Anda bukan admin.") else: #Input username = input("Masukkan Username\t: ") # Validasi user sederhana # untuk mencari user sampai ketemu # 'exit' untuk keluar while (usermanager.findUser(username) == False): print( f"Username {username} tidak ditemukan.\nKetik 'exit' untuk membatalkan." ) username = input("Masukkan username pemain\t: ") if (username.lower()) == 'exit': print("Melihat jumlah tiket dibatalkan.") return # mendapatkan tiket dari username tersebut tickets = (usermanager.getUser(username)).getTickets() ticketids = (usermanager.getUser(username)).getTicketIDs() if panjangArray(tickets) > 0: #Jika panjang lebih dari 0 print( "Kepemilikan Tiket:\n ID Wahana\t | \tNama Wahana\t | \tJumlah Tiket" ) for i in range(panjangArray(tickets)): attr = attrmanager.getAttraction(ticketids[i]) if panjangArray( attr.getName() ) < 8: # Kalau panjang nama wahan kurang dari 8 tambah tab wahana = attr.getName() + "\t" else: wahana = attr.getName( ) # kalau panjang nama wahana lebih dari 8 tidak tab print( f" {ticketids[i]}\t\t | \t{wahana}\t | \t{tickets[i]}") else: print("Pemain tersebut tidak memiliki tiket.") else: #belum login print("Anda belum login.")
def load(self): self.__data = (self.__file).read() if panjangArray(self.__data) > 0: for i in self.__data: try: self.modify(i[0], i[1], int(i[2])) except ValueError as e: continue #Jika jumlah tiket bukan integer maka akan di skip
def sortiralphabet(array): n = panjangArray(array) for i in range(n): for j in range(0, n - i - 1): if array[j] > array[j + 1]: array[j], array[j + 1] = array[j + 1], array[j] return array
def load(self): self.__data = (self.__file).read() if panjangArray(self.__data) > 0: x = 0 for u in self.__data: newuser = User(u[0], u[1], int(u[2]), u[4], u[5], int(u[6])) self.__userids = elAdd(self.__userids, ((u[3]).lower())) self.__users = elAdd(self.__users, newuser)
def getAllUsersInventoryAsList(self): userids = ((self.__um).getAllUsers())[0] users = ((self.__um).getAllUsers())[1] result = [] for i in range(panjangArray(userids)): for idwahana in users[i].getTicketIDs(): if users[i].getTicket(idwahana) > 0: # Jika tiket positif tak nol result = elAdd(result, [userids[i], idwahana, users[i].getTicket(idwahana)]) return result
def refundticket(user, usermanager, attrmanager, rfndmanager, invtmanager, refundpercent): #sebanyak refund% dari harga tiket akan dikembalikan kepada user if (user != None): # User sudah login # Input idwahana = input("Masukkan ID Wahana\t\t\t: ") datetoday = input("Masukkan Tanggal Hari ini (DD/MM/YYYY)\t: ") amount = input("Jumlah Tiket yang direfund\t\t: ") print() # Validasi Sederhana untuk Date # Setidaknya harus berformat x/x/x d = list(map(int, (datetoday).strip().split('/'))) while (panjangArray(d) != 3): print("Tanggal hari ini tidak valid.") datetoday = input("Masukkan Tanggal Hari ini (DD/MM/YYYY)\t: ") d = list(map(int, (datetoday).strip().split('/'))) # Validasi untuk input integer while True: try: amount = abs(int(amount)) break except: print("Jumlah tiket tidak valid.") amount = input("Jumlah Tiket yang direfund\t\t: ") # Validasi untuk input ID Wahana # ID Wahana harus bisa ditemukan # Ketik 'exit' untuk membatalkan while not(attrmanager.findAttraction(idwahana)): print("ID Wahana yang dimasukkan tidak valid.\nKetik 'exit' untuk membatalkan.") idwahana = input("Masukkan ID Wahana\t\t\t: ") if idwahana.lower() == 'exit': print("Pembelian tiket dibatalkan.") return print() # Karena user = pengguna = pembeli # sehingga harus dicari username dengan user tersebut pada UserManager username = usermanager.findUserbyObject(user) attr = attrmanager.getAttraction(idwahana) # User harus memiliki tiket untuk direfund if user.getTicket(idwahana) >= amount: invtmanager.modify(username, idwahana, ((-1)*amount), True, refundpercent) # Menambah tiket sebanyak minus akan mengurangi tiket user tersebut # Harga minus supaya uang menjadi kembali rfndmanager.add(username, datetoday, idwahana, amount) # Menambah hal refund ini ke data refund print(f"Uang refund sudah kami berikan pada akun Anda.\nBerhasil me-refund {amount} tiket.\nTotal penjualan tiket pada wahana ini: {attr.getSale()} tiket.") else: # User tidak memiliki tiket print("Anda tidak memiliki tiket terkait.") else: # User belum login print("Anda belum login.")
def lostticket(user, usermanager, attrmanager, lostmanager, invtmanager): if (user != None): # User sudah login # Input idwahana = input("Masukkan ID Wahana\t\t\t: ") datetoday = input("Masukkan Tanggal Hari ini (DD/MM/YYYY)\t: ") amount = input("Jumlah Tiket yang dihilangkan\t\t: ") print() # Validasi Sederhana untuk Date # Setidaknya harus berformat x/x/x d = list(map(int, (datetoday).strip().split('/'))) while (panjangArray(d) != 3): print("Tanggal hari ini tidak valid.") datetoday = input("Masukkan Tanggal Hari ini (DD/MM/YYYY)\t: ") d = list(map(int, (datetoday).strip().split('/'))) # Validasi untuk input integer while True: try: amount = abs(int(amount)) break except: print("Jumlah tiket tidak valid.") amount = input("Jumlah Tiket yang digunakan\t\t: ") # Validasi untuk input ID Wahana # ID Wahana harus bisa ditemukan # Ketik 'exit' untuk membatalkan while not (attrmanager.findAttraction(idwahana)): print( "ID Wahana yang dimasukkan tidak valid.\nKetik 'exit' untuk membatalkan." ) idwahana = input("Masukkan ID Wahana\t\t\t: ") if idwahana.lower() == 'exit': print("Pembelian tiket dibatalkan.") return print() username = usermanager.findUserbyObject( user) #mencari username dengan user yang menggunakan prosedur ini if user.getTicket( idwahana) >= amount: # Jika tiket memiliki sesuai jumlah invtmanager.modify(username, idwahana, (-1) * amount) # Kurangi tiket lostmanager.add(username, datetoday, idwahana, amount) # Tambahkan ke data kehilangan print("Laporan kehilangan tiket Anda telah direkam.") else: # Tidak memiliki tiket print("Anda tidak memiliki tiket terkait.") else: # Belum login print("Anda belum login.")
def load(self): self.__data = (self.__file).read() if panjangArray(self.__data)> 0: for a in self.__data: try: # Jika ada error, maka akan diskip newattraction = Attraction(a[1], int(a[2]), a[3], a[4]) self.__idlist = elAdd(self.__idlist, a[0]) self.__attractions = elAdd(self.__attractions, newattraction) except: # error continue
def load(self): self.__data = (self.__file).read() if panjangArray(self.__data) > 0: for c in self.__data: try: c[3] = int(c[3]) except ValueError as e: c[3] = 0 # Kalau Jumlah Tiket bukan Integer, maka akan diubah menjadi 0 self.__history = elAdd(self.__history, c)
def search(batasumur, batastinggi): result = [] attractionlist = (attrmanager.getAttractions())[1] attractionids = (attrmanager.getAttractions())[0] for i in range(panjangArray(attractionlist)): attr = attractionlist[i] idwahana = attractionids[i] if (attr.getAR() == AgeRestriction(batasumur)) and (attr.getHR( ) == HeightRestricton(batastinggi)): # Jika Wahana tersebut sesuai attrstr = str( idwahana ) + "\t\t | \t" # Formatting nama dengan tab supaya rapih if panjangArray( attr.getName()) < 8: # Jika panjang nama kurang dari 8 attrstr = attrstr + attr.getName() + "\t\t | \t" else: # panjang nama lebih dari 8 attrstr = attrstr + attr.getName() + "\t | \t" attrstr = attrstr + str(attr.getTicketPrice()) result = elAdd(result, attrstr) return result
def read(self): try: with open("Data/" + self.__file + '.csv', mode='r', newline='') as f: reader = csv.reader(f, dialect='excel') result = [] # Inisiasi Array Hasil i = 0 for row in reader: newrow = [] if (row != []): # Jika baris ada isi for x in range(panjangArray(row)): now = row[x] try: newrow = elAdd( newrow, int(now)) # coba convert ke integer except ValueError: newrow = elAdd( newrow, now) # kalau gagal convert jadi integer else: # Jika baris tidak ada isi for x in range(panjangArray(self.__defaultempty)): now = self.__defaultempty[x] try: newrow = elAdd( newrow, int(now)) # coba convert ke integer except ValueError: newrow = elAdd(newrow, (now).replace( "(index)", str(i) )) # kalau gagal convert jadi integer result += [newrow] i += 1 except: result = [ ] # Jika file tidak ditemukan, mengembalikan array kosong return result
def getAttractionsAsList(self): result = [] for i in range(panjangArray(self.__idlist)): attr = self.__attractions[i] arr = [] # ini adalah array dalam satu baris arr = elAdd(arr, self.__idlist[i]) # penambahan elemen tiap baris arr = elAdd(arr, attr.getName()) # hal yang sama dengan atas arr = elAdd(arr, attr.getTicketPrice()) # hal yang sama dengan atas arr = elAdd(arr, attr.getAR()) # hal yang sama dengan atas arr = elAdd(arr, attr.getHR()) # hal yang sama dengan atas result = elAdd(result, arr) # masukkan kedalam kolom return result
def Encrypt(string): isinteger = False if type(string) == int: string = str(string) isinteger = True acak = acakurutan(string) result = "" for i in range(panjangArray(acak)): result += str(encryptAlphabet(acak[i], int(1+(i^i)%5))) if isinteger is True: return "$!%" + result else: return result
def getAsListOfString(): result = [] for each in feedmanager.get(): if panjangArray( str(each[0] )) < 8: # Jika panjang username kurang dari 8, tab 2x username = str(each[0]) + "\t" else: username = str(each[0]) dstr = str(each[2]) + "\t\t | \t" + str( each[1]) + "\t | \t" + username + "\t | \t" + str(each[3]) result = elAdd(result, dstr) return result
def listFeedback(user, feedmanager): # Fungsi Lokal getAsListOfString() # menghasilkan array of string def getAsListOfString(): result = [] for each in feedmanager.get(): if panjangArray( str(each[0] )) < 8: # Jika panjang username kurang dari 8, tab 2x username = str(each[0]) + "\t" else: username = str(each[0]) dstr = str(each[2]) + "\t\t | \t" + str( each[1]) + "\t | \t" + username + "\t | \t" + str(each[3]) result = elAdd(result, dstr) return result # Fungsi sortir dengan algoritma bubble sort # menghasilkan array def sortiralphabet(array): n = panjangArray(array) for i in range(n): for j in range(0, n - i - 1): if array[j] > array[j + 1]: array[j], array[j + 1] = array[j + 1], array[j] return array if (user != None): # Jika user sudah login if (user.getRole() == Role.Admin): # Jika user adalah admin if panjangArray(getAsListOfString()) > 0: # Setidaknya ada satu print( "Kritik dan saran: \nID Wahana\t | \tTanggal Kritik\t | \tUsername\t | \tIsi Kritik" ) for s in sortiralphabet(getAsListOfString()): print(s) else: # tidak ada apapun print("Tidak ada laporan.") else: # Bukan admin print("Maaf! Anda bukan admin.") else: # belum login print("Anda belum login.")
def getUsersAsList(self): result = [] for i in range(panjangArray(self.__userids)): user = self.__users[i] arr = [] # ini adalah array dalam satu baris arr = elAdd(arr, user.getName()) # penambahan elemen tiap baris arr = elAdd(arr, user.getDOB()) # hal yang sama dengan atas arr = elAdd(arr, user.getHeight()) # hal yang sama dengan atas arr = elAdd(arr, (self.__userids[i]).lower()) # hal yang sama dengan atas arr = elAdd(arr, user.getPassword()) # hal yang sama dengan atas arr = elAdd(arr, user.getRole()) # hal yang sama dengan atas arr = elAdd(arr, user.getSaldo()) # hal yang sama dengan atas result = elAdd(result, arr) # masukkan kedalam kolom #print(result) return result
def namaFile(textinput, default=None): nama = (input(textinput)).lower() if nama == '~' and default != None: return default nama = nama.replace(".csv", "") for i in range(panjangArray(nama)): if ord(nama[i]) >= 97 and ord(nama[i]) <= 122: continue if ord(nama[i]) >= 48 and ord(nama[i]) <= 57: continue if ord(nama[i]) in [ 33, 35, 36, 37, 38, 40, 41, 42, 43, 45, 47, 60, 61, 62, 63, 64, 124, 126, 95 ]: continue nama[i] = '_' return nama
def sendFeedback(user, usermanager, attrmanager, feedmanager): if (user != None): # Jika user sudah login # Input idwahana = input("Masukkan ID Wahana\t\t\t: ") datelapor = input("Masukkan Tanggal Pelaporan (DD/MM/YYYY)\t: ") kritiksaran = input("Kritik/Saran Anda\t\t\t: ") print() # Validasi Sederhana untuk Date # Setidaknya harus berformat x/x/x d = list(map(int, (datelapor).strip().split('/'))) while (panjangArray(d) != 3): print("Tanggal hari ini tidak valid.") datelapor = input("Masukkan Tanggal Pelaporan (DD/MM/YYYY)\t: ") d = list(map(int, (datelapor).strip().split('/'))) # Validasi untuk input ID Wahana # ID Wahana harus bisa ditemukan # Ketik 'exit' untuk membatalkan while not (attrmanager.findAttraction(idwahana)): print( "ID Wahana yang dimasukkan tidak valid.\nKetik 'exit' untuk membatalkan." ) idwahana = input("Masukkan ID Wahana\t\t\t: ") if idwahana.lower() == 'exit': print("Pembelian tiket dibatalkan.") return print() # Karena user = pengguna = kritik/saran # sehingga harus dicari username dengan user tersebut pada UserManager username = usermanager.findUserbyObject(user) # Menambahkan saran ke ticketmanager feedmanager.add(username, datelapor, idwahana, kritiksaran) print("Kritik dan saran Anda kami terima.") else: # Jika belum login print("Anda belum login.")
def acakurutan(string): s = panjangArray(string) if (s == 1): return string bagian = pecahbagian(string) result = "" if (s%3 == 0): if bagian[1] == None: return bagian[0] + bagian[2] else: return bagian[0] + bagian[2] + bagian[1] elif (s%3 == 1): if bagian[1] == None: return bagian[2] + bagian[0] else: return bagian[2] + bagian[0] + bagian[1] else: if bagian[1] == None: return bagian[2] + bagian[0] else: return bagian[2] + bagian[1] + bagian[0]
def susunurutan(string): s = panjangArray(string) if s == 1: return string bagian = pecahbagian(string) if s%2 == 0: if (s%3 == 0): return string else: return bagian[2] + bagian[0] else: if (s%3 == 2): return bagian[2] + bagian[1] + bagian[0] mid = string[s-1] string = string[0:(s-1)] if (s%3 == 1): bagian = pecahbagian(string) return bagian[2] + mid + bagian[0] else: bagian = pecahbagian(string) return bagian[0] + mid + bagian[2]
def penamaan(nama): if panjangArray(nama) < 8: return nama + "\t\t" else: return nama + "\t"
def useticket(user, usermanager, attrmanager, usedmanager, invtmanager): if (user != None): # User sudah login # Input idwahana = input("Masukkan ID Wahana\t\t\t: ") datetoday = input("Masukkan Tanggal Hari ini (DD/MM/YYYY)\t: ") amount = input("Jumlah Tiket yang digunakan\t\t: ") print() # Validasi Sederhana untuk Date # Setidaknya harus berformat x/x/x d = list(map(int, (datetoday).strip().split('/'))) while (panjangArray(d) != 3): print("Tanggal hari ini tidak valid.") datetoday = input("Masukkan Tanggal Hari ini (DD/MM/YYYY)\t: ") d = list(map(int, (datetoday).strip().split('/'))) # Validasi untuk input integer while True: try: amount = abs(int(amount)) break except: print("Jumlah tiket tidak valid.") amount = input("Jumlah Tiket yang digunakan\t\t: ") # Validasi untuk input ID Wahana # ID Wahana harus bisa ditemukan # Ketik 'exit' untuk membatalkan while not (attrmanager.findAttraction(idwahana)): print( "ID Wahana yang dimasukkan tidak valid.\nKetik 'exit' untuk membatalkan." ) idwahana = input("Masukkan ID Wahana\t\t\t: ") if idwahana.lower() == 'exit': print("Pembelian tiket dibatalkan.") return print() username = usermanager.findUserbyObject( user) #mencari username dengan user yang menggunakan prosedur ini attr = attrmanager.getAttraction(idwahana) user.calcAge(datetoday) # hitung umur dengan data tanggal hari ini # Jika Ketentuan Wahana ada pada kategori pengguna if (attr.getAR() in user.getAC() and attr.getHR() in user.getHC()): if user.getTicket( idwahana) >= amount: # Jika tiket memiliki sesuai jumlah invtmanager.modify(username, idwahana, (-1) * amount) # Kurangi tiket usedmanager.add(username, datetoday, idwahana, amount) # Tambahkan ke data pengunaan print( f"Terima kasih telah bermain.\nBerhasil memakai {amount} tiket." ) else: # Tidak memiliki tiket print("Anda tidak memiliki tiket terkait.") else: # Jika pengguna tidak memenuhi ketentuan yang ada print( "Anda tidak memenuhi persyaratan untuk memainkan wahana ini.\nSilakan menggunakan wahana lain yang tersedia." ) else: # Belum login print("Anda belum login.")
def signup(user, manager): if (user != None): # Jika sudah login if (user.getRole() != Role.Admin): # Bukan admin print("Maaf! Anda bukan admin.") else: # Input name = input("Masukkan nama pemain\t\t\t\t: ") dob = input("Masukkan tanggal lahir pemain (DD/MM/YYYY)\t: ") tb = input("Masukkan tinggi badan pemain (cm)\t\t: ") username = input("Masukkan username pemain\t\t\t: ") pwd = input("Masukkan password pemain\t\t\t: ") print() # Validasi username # Username harus 1-16 character while panjangArray(username) <= 1 or panjangArray(username) > 16 or (manager.findUser(username)): if (manager.findUser(username)): print("Username yang diinginkan tidak tersedia.") else: print("Username harus terdiri dari 2-16 character.") username = input("Masukkan username pemain\t\t\t: ") continue # Validasi Sederhana untuk Date # Setidaknya harus berformat x/x/x d = list(map(int, (dob).strip().split('/'))) while (panjangArray(d) != 3): print("Tanggal lahir pemain tidak valid!") dob = input("Masukkan tanggal lahir pemain (DD/MM/YYYY)\t: ") d = list(map(int, (dob).strip().split('/'))) # Validasi sederhana untuk tinggi badan # Nilai tinggi badan harus 1-250cm while True: try: tb = int(tb) if (tb <= 0 or tb > 250): print("Tinggi badan pemain tidak valid! (1-250 cm)") tb = input("Masukkan tinggi badan pemain (cm)\t\t: ") continue break except: print("Tinggi badan pemain tidak valid!") tb = input("Masukkan tinggi badan pemain (cm)\t\t: ") # Validasi password # Password minimal 8 character while panjangArray(pwd) < 8: print("Password minimal terdiri dari 8 character.") pwd = input("Masukkan password pemain\t\t\t: ") print() pwd = Encrypt(pwd) # Membuat user baru newUser = User(name, dob, tb, pwd, 'User', 0) manager.addUser(username, newUser) # Menambahkan ke data print(f"Selamat menjadi pemain, {name}. Selamat bermain.") else: # Belum login print("Anda belum login.")
def buyticket(user, usermanager, attrmanager, bghtmanager, invtmanager): if (user != None): # User sudah login # Input idwahana = input("Masukkan ID Wahana\t\t\t: ") datetoday = input("Masukkan Tanggal Hari ini (DD/MM/YYYY)\t: ") amount = input("Jumlah Tiket yang dibeli\t\t: ") print() # Validasi Sederhana untuk Date # Setidaknya harus berformat x/x/x d = list(map(int, (datetoday).strip().split('/'))) while (panjangArray(d) != 3): print("Tanggal hari ini tidak valid.") datetoday = input("Masukkan Tanggal Hari ini (DD/MM/YYYY)\t: ") d = list(map(int, (datetoday).strip().split('/'))) # Validasi untuk input integer while True: try: amount = abs(int(amount)) break except: print("Jumlah tiket tidak valid.") amount = input("Jumlah Tiket yang dibeli\t\t: ") # Validasi untuk input ID Wahana # ID Wahana harus bisa ditemukan # Ketik 'exit' untuk membatalkan while not(attrmanager.findAttraction(idwahana)): print("ID Wahana yang dimasukkan tidak valid.\nKetik 'exit' untuk membatalkan.") idwahana = input("Masukkan ID Wahana\t\t\t: ") if idwahana.lower() == 'exit': print("Pembelian tiket dibatalkan.") return print() # Karena user = pengguna = pembeli # sehingga harus dicari username dengan user tersebut pada UserManager username = usermanager.findUserbyObject(user) attr = attrmanager.getAttraction(idwahana) user.calcAge(datetoday) # hitung umur dengan data tanggal hari ini # Jika Ketentuan Wahana ada pada kategori pengguna if (attr.getAR() in user.getAC() and attr.getHR() in user.getHC()): if user.getRole() == Role.User: # Jika user adalah user biasa priceperticket = attr.getTicketPrice() goldendiscount = 100 else: # Jika user adalah golden/admin goldendiscount = gpay priceperticket = int(round(attr.getTicketPrice()*goldendiscount/100)) if user.getSaldo() >= (priceperticket*amount): # Pengguna harus memiliki saldo bghtmanager.add(username, datetoday, idwahana, amount) # Memanggil boughtmanager untuk menyimpan data pembelian invtmanager.modify(username, idwahana, amount, True, goldendiscount) # Memanggil inventory untuk menyimpan data kepemilikan tiket print(f"Selamat bersenang-senang di {attr.getName()}.\nBerhasil membeli {amount} tiket seharga {priceperticket}/tiket.\nTotal penjualan tiket pada wahana ini: {attr.getSale()} tiket.") if goldendiscount != 100: print(f"Diskon {100-gpay}% karena akun Golden.") else: # tidak punya saldo print(f"Saldo Anda tidak cukup.\nSilakan mengisi saldo Anda.\nHarga\t\t: {attr.getTicketPrice()*amount}\nSaldo Anda\t\t: {user.getSaldo()}") else: # Jika pengguna tidak memenuhi ketentuan yang ada print("Anda tidak memenuhi persyaratan untuk memainkan wahana ini.\nSilakan menggunakan wahana lain yang tersedia.") else: print("Anda belum login.")
def searchAttraction(user, attrmanager): # Fungsi lokal Search # batasumur : int # batastinggi : int # fungsi untuk mencari wahana dengan batas tinggi dan umur tertentu def search(batasumur, batastinggi): result = [] attractionlist = (attrmanager.getAttractions())[1] attractionids = (attrmanager.getAttractions())[0] for i in range(panjangArray(attractionlist)): attr = attractionlist[i] idwahana = attractionids[i] if (attr.getAR() == AgeRestriction(batasumur)) and (attr.getHR( ) == HeightRestricton(batastinggi)): # Jika Wahana tersebut sesuai attrstr = str( idwahana ) + "\t\t | \t" # Formatting nama dengan tab supaya rapih if panjangArray( attr.getName()) < 8: # Jika panjang nama kurang dari 8 attrstr = attrstr + attr.getName() + "\t\t | \t" else: # panjang nama lebih dari 8 attrstr = attrstr + attr.getName() + "\t | \t" attrstr = attrstr + str(attr.getTicketPrice()) result = elAdd(result, attrstr) return result if (user != None): # User sudah login print( "Jenis batasan umur:\n1.\tAnak-anak (<17 tahun)\n2.\tDewasa (>=17 tahun)\n3.\tSemua umur\n" ) print( "jenis batasan tinggi badan:\n1.\tLebih dari 170 cm\n2.\tTanpa batasan\n" ) # Input batasumur = input("Batasan Umur Pemain\t\t: ") # Validasi pilihan batas umur while not (batasumur in ['1', '2', '3']): print("Batasan umur tidak valid!") batasumur = input("Batasan Umur Pemain\t\t: ") # Input batastinggi = input("Batasan Tinggi Pemain\t\t: ") # Validasi pilihan batas tinggi while not (batastinggi in ['1', '2']): print("Batasan tinggi badan tidak valid!") batastinggi = input("Batasan Tinggi Pemain\t\t: ") # Kurangi satu karna array (enum) dari batasumur dan batastinggi mulai dari 0 batasumur = int(batasumur) - 1 batastinggi = int(batastinggi) - 1 # Menggunakan fungsi diatas s = search(batasumur, batastinggi) if panjangArray(s) == 0: # Jika pencarian = 0 print("Tidak ada wahana yang sesuai dengan pencarian kamu.") else: # Setidaknya ada pencarian print( "Hasil Pencarian:\nID Wahana\t | \tNama Wahana\t | \tHarga Tiket" ) for each in s: print(each) else: # Belum login print("Anda belum login.")
def load(self): self.__data = (self.__file).read() if panjangArray(self.__data) > 0: for c in self.__data: self.__critics = elAdd(self.__critics, c)