示例#1
0
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
示例#2
0
def main():
    # procedure main (input/output wahana : Rekaman)
    # I.S. wahana abstrak
    # F.S. Ditambahkan data wahana baru ke file wahana
    # Fungsi utama F12
    # Semua masukkan diasumsikan valid
    # KAMUS LOKAL
    # wahana : Rekaman
    # array_wahana_baru : array [0..4] of string
    # wahana_baru_added : Rekaman.data
    # ALGORITMA
    wahana = load.use("wahana.csv")
    array_wahana_baru = ["", "", "", "", ""]

    print("Masukkan informasi wahana yang ditambahkan.")
    array_wahana_baru[0] = input("Masukkan ID Wahana: ")
    array_wahana_baru[1] = input("Masukkan Nama Wahana: ")
    array_wahana_baru[2] = input("Masukkan Harga Tiket: ")
    array_wahana_baru[3] = input(
        "Batasan umur (anak-anak, dewasa, semua umur): ")
    array_wahana_baru[4] = input("Batasan tinggi (>170, tanpa batasan): ")

    wahana_baru_added = aux.konsDot(wahana.data, array_wahana_baru)
    load.store("wahana.csv", wahana_baru_added)

    print("\nInfo wahana telah ditambahkan!")
    return
示例#3
0
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
示例#4
0
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
示例#5
0
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
示例#6
0
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
示例#7
0
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.")
示例#8
0
def main(userfile):
    # procedure main (input/output userfile : load.Rekaman, output user.data : Custom.data)
    # I.S. userfile terdefinisi
    # F.S. ditambahkan suatu data baru ke userfile
    # KAMUS LOKAL
    # user : Custom
    # isUsernameOK, isBirthdayOK, isHeightOK, isEmpty : boolean
    # i : integer
    # sandi : string
    # ALGORITMA
    user = Custom()
    isUsernameOK = False
    isBirthdayOK = False
    isHeightOK = False
    isEmpty = False
    while ((isUsernameOK == False) or (isBirthdayOK == False)
           or (isHeightOK == False) or (isEmpty == True)):
        # Setiap pengulangan loop, semua field harus dicek ulang
        isUsernameOK = False
        isBirthdayOK = False
        isHeightOK = False
        isEmpty = False
        for i in range(user.datacount):
            # Handling username (tidak boleh ada 2 username sama)
            if (user.datadesc[i] == "username pemain"):
                user.data[i] = (str(
                    input("Masukkan " + user.datadesc[i] + ": "))).lower()
                if (flib.find_baris_first(userfile.data, "Username",
                                          user.data[i]) == []):
                    isUsernameOK = True
            # Handling tanggal lahir (harus sesuai format DD/MM/YYYY)
            elif (user.datadesc[i] == "tanggal lahir pemain (DD/MM/YYYY)"):
                user.data[i] = str(input("Masukkan " + user.datadesc[i] +
                                         ": "))
                isBirthdayOK = flib.validate_date(user.data[i])
            # Handling tinggi badan (tidak boleh bilangan negatif)
            elif (user.datadesc[i] == "tinggi badan pemain (cm)"):
                user.data[i] = str(input("Masukkan " + user.datadesc[i] +
                                         ": "))
                try:
                    if (int(user.data[i]) >= 0):
                        isHeightOK = True
                except ValueError:
                    isHeightOK = False
            # Handling role (semua user yang di-generate dengan cara ini adalah "Pemain")
            elif (user.datadesc[i] == "role pemain"):
                user.data[i] = str("Pemain")
            # Handling saldo (semua "Pemain" memiliki saldo awal 0)
            elif (user.datadesc[i] == "saldo pemain"):
                user.data[i] = str("0")
            # BONUS 1! Handling password (di-hash via B01)
            elif (user.datadesc[i] == "password pemain"):
                sandi = str(input("Masukkan " + user.datadesc[i] + ": "))
                user.data[i] = B01.hash_pass(sandi)
            # Handling semua field yang tidak butuh penanganan khusus
            else:
                user.data[i] = str(input("Masukkan " + user.datadesc[i] +
                                         ": "))
        # Beritahu user jika ada field yang tidak terisi
        for i in range(user.datacount):
            if ((user.data[i] == "") or (sandi == "")
                ):  # (sandi == "") ditambahkan untuk mengakomodasi BONUS 1
                isEmpty = True
        if (isEmpty == True):
            print("Ada field yang lupa Anda isi. Silakan ulangi pengisian.")
        else:
            # Beritahu user jika ia salah meng-input suatu field
            if (isUsernameOK == False):
                print(
                    "Username sudah terdaftar. Silakan pilih username yang lain."
                )
            if (isBirthdayOK == False):
                print("Tanggal lahir Anda tidak valid. Silakan ulangi lagi.")
            if (isHeightOK == False):
                print("Tinggi badan Anda tidak valid. Silakan ulangi lagi.")
    # Simpan data user baru ke database
    load.store(userfile.name, flib.konsDot(userfile.data, user.data))
    print("Selamat menjadi pemain, " + user.data[0] + ". Selamat bermain.")