コード例 #1
0
ファイル: Sale.py プロジェクト: ravielze/Tubes_Daspro
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
コード例 #2
0
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]
コード例 #3
0
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)
コード例 #4
0
ファイル: history.py プロジェクト: ravielze/Tubes_Daspro
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.")
コード例 #5
0
ファイル: search.py プロジェクト: ravielze/Tubes_Daspro
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.")
コード例 #6
0
ファイル: Inventory.py プロジェクト: ravielze/Tubes_Daspro
 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
コード例 #7
0
    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
コード例 #8
0
ファイル: User.py プロジェクト: ravielze/Tubes_Daspro
 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)
コード例 #9
0
ファイル: Inventory.py プロジェクト: ravielze/Tubes_Daspro
 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
コード例 #10
0
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.")
コード例 #11
0
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.")
コード例 #12
0
ファイル: Attraction.py プロジェクト: ravielze/Tubes_Daspro
 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
コード例 #13
0
ファイル: Tickets.py プロジェクト: ravielze/Tubes_Daspro
    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)
コード例 #14
0
ファイル: search.py プロジェクト: ravielze/Tubes_Daspro
 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
コード例 #15
0
ファイル: Data.py プロジェクト: ravielze/Tubes_Daspro
    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
コード例 #16
0
ファイル: Attraction.py プロジェクト: ravielze/Tubes_Daspro
 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
コード例 #17
0
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
コード例 #18
0
 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
コード例 #19
0
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.")
コード例 #20
0
ファイル: User.py プロジェクト: ravielze/Tubes_Daspro
 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
コード例 #21
0
ファイル: loadsave.py プロジェクト: ravielze/Tubes_Daspro
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
コード例 #22
0
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.")
コード例 #23
0
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]
コード例 #24
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]
コード例 #25
0
ファイル: bestwahana.py プロジェクト: ravielze/Tubes_Daspro
 def penamaan(nama):
     if panjangArray(nama) < 8:
         return nama + "\t\t"
     else:
         return nama + "\t"
コード例 #26
0
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.")
コード例 #27
0
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.")
コード例 #28
0
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.")
コード例 #29
0
ファイル: search.py プロジェクト: ravielze/Tubes_Daspro
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.")
コード例 #30
0
 def load(self):
     self.__data = (self.__file).read()
     if panjangArray(self.__data) > 0:
         for c in self.__data:
             self.__critics = elAdd(self.__critics, c)