Example #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
Example #2
0
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
Example #3
0
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.")
Example #4
0
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
Example #5
0
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
Example #6
0
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
Example #7
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
Example #8
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
Example #9
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
Example #10
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.")
Example #11
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.")