示例#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 ()
    # 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.")
示例#3
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
示例#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
示例#5
0
def main():
    # procedure main (input kritiksaran : Rekaman)
    # Mengeluarkan data kritiksaran yang sudah diurut berdasarkan sorting_key
    # KAMUS LOKAL
    # sorting_key : string
    # sorting_idx, i, j, minpos : int
    # temp : array of string
    # ALGORITMA
    kritiksaran = load.use("kritiksaran.csv")

    sorting_key = "ID_Wahana"
    sorting_idx = aux.find_idx(
        kritiksaran.data, sorting_key)  # Mencari indeks kolom <sorting_key>

    for i in range(1, aux.length(kritiksaran.data)):
        minpos = i
        for j in range(i, aux.length(kritiksaran.data)):
            if (kritiksaran.data[j][sorting_idx]) < (
                    kritiksaran.data[minpos][sorting_idx]):
                minpos = j
        temp = kritiksaran.data[i]
        kritiksaran.data[i] = kritiksaran.data[minpos]
        kritiksaran.data[minpos] = temp

    print("Kritik dan saran semua wahana: ")
    for i in range(1, aux.length(kritiksaran.data)):
        print(str(kritiksaran.data[i][2]) + ' | ', end='')
        print(str(kritiksaran.data[i][1]) + ' | ', end='')
        print(str(kritiksaran.data[i][0]) + ' | ', end='')
        print(str(kritiksaran.data[i][3]))
    return
示例#6
0
def total_sold_tickets(wahana_id):
    # function total_sold_tickets (wahana_id : string) -> integer
    # Menghasilkan total tiket wahana yang telah terjual.
    # KAMUS LOKAL
    # pembelian : Rekaman
    # tickets_sold, i : integer
    # ALGORITMA
    pembelian = load.use("pembelian.csv")
    tickets_sold = 0

    for i in range(1, aux.length(pembelian.data)):
        if str(pembelian.data[i][aux.find_idx(pembelian.data,
                                              "ID_Wahana")]) == wahana_id:
            tickets_sold += int(pembelian.data[i][aux.find_idx(
                pembelian.data, "Jumlah_Tiket")])

    return tickets_sold
示例#7
0
def main():
    # procedure main ()
    # I.S. Abstrak
    # F.S. Dikeluarkan tiga wahana 'terbaik' (diurut sesuai jumlah tiket terjual)
    # Syarat: Pasti sudah ada wahana sebanyak >= N_best pada wahana.csv
    # KAMUS LOKAL
    # wahana : Rekaman
    # wahana_ticket_data : array of tuple (string, string, integer)
    # constant N_best : integer = 3
    # i, j, maks_idx : integer
    # wahana_id, wahana_name : string
    # wahana_tickets : integer
    # ALGORITMA
    wahana = load.use("wahana.csv")
    wahana_ticket_data = [("", "", 0)
                          for i in range(1, aux.length(wahana.data))]

    for i in range(1, aux.length(wahana.data)):
        wahana_id = wahana.data[i][aux.find_idx(wahana.data, "ID_Wahana")]
        wahana_name = wahana.data[i][aux.find_idx(wahana.data, "Nama_Wahana")]
        wahana_tickets = total_sold_tickets(wahana_id)
        wahana_ticket_data[i - 1] = (wahana_id, wahana_name, wahana_tickets)

    # Sorting sesuai jumlah tiket yang terjual
    for i in range(0, aux.length(wahana_ticket_data)):
        maks_idx = i
        for j in range(i, aux.length(wahana_ticket_data)):
            if wahana_ticket_data[maks_idx][2] < wahana_ticket_data[j][2]:
                maks_idx = j
        temp = wahana_ticket_data[i]
        wahana_ticket_data[i] = wahana_ticket_data[maks_idx]
        wahana_ticket_data[maks_idx] = temp

    # Output terbaik
    N_best = 3  # konstanta, menyatakan berapa wahana terbaik yang dikeluarkan ke layar.
    for i in range(0, N_best):
        # Yang dikeluarkan ke layar: "Urutan | ID Wahana | Nama Wahana | Jumlah Tiket"
        print(i + 1, end=' | ')  # Urutan
        print(wahana_ticket_data[i][0], end=' | ')  # ID Wahana
        print(wahana_ticket_data[i][1], end=' | ')  # Nama Wahana
        print(wahana_ticket_data[i][2])  # Jumlah Tiket

    return
示例#8
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
示例#9
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
示例#10
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
示例#11
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
示例#12
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
示例#13
0
def main ():
    # procedure main ()
    # I.S. Abstrak
    # F.S. Wahana sesuai batasan pencarian ditampilkan.
    # Program utama F06
    wahana = load.use ("wahana.csv")

    print ("Jenis batasan umur: ")
    print ("1. Anak-anak (<17 tahun)")
    print ("2. Dewasa (>=17 tahun)")
    print ("3. Semua umur")
    print (" ")
    print ("Jenis batasan tinggi badan: ")
    print ("1. Lebih dari 170 cm")
    print ("2. Tanpa batasan")
    print (" ")
    while True:
        umur = int(input("Batasan umur pemain: "))
        if isBatasUmurTrue(umur):  # 1, 2, 3
            break
        else:  # selain 1, 2, 3
            print("Batasan umur tidak valid!")
            return

    while True:
        tinggi = int(input("Batasan tinggi pemain: "))
        if isBatasTinggiTrue(tinggi):  # 1, 2
            break
        else:  # selain 1, 2
            print("Batasan tinggi tidak valid!")
            return
        # data_wahana = load.use(wahanafile)
    
    if umur == 1 :
        if tinggi == 1:
            u = "anak-anak"
            t = ">170"
        elif tinggi == 2:
            u = "anak-anak"
            t = "tanpa batasan"
    elif umur == 2:
        if tinggi == 1:
            u = "dewasa"
            t = ">170"
        elif tinggi == 2:
            u = "dewasa"
            t = "tanpa batasan"
    elif umur == 3:
        if tinggi == 1:
            u = "semua umur"
            t = ">170"
        elif tinggi == 2:
            u = "semua umur"
            t = "tanpa batasan"
            
    umur_true = aux.merge([wahana.data[0]], aux.find_baris_all(wahana.data, "Batasan_Umur", u))

    if umur_true[1:] == []:
        print("Tidak ada wahana sesuai batasan yang dimasukkan.")
        return
    
    validasi = aux.find_baris_all(umur_true, "Batasan_Tinggi", t)

    if validasi == [[]]:
        print("Tidak ada wahana sesuai batasan yang dimasukkan.")
        return

    print("Hasil pencarian: ")
    for i in range(aux.length(validasi)):
        id_wahana = validasi[i][aux.find_idx(wahana.data, "ID_Wahana")]
        nama_wahana = validasi[i][aux.find_idx(wahana.data, "Nama_Wahana")]
        harga_tiket = validasi[i][aux.find_idx(wahana.data, "Harga_Tiket")]
        print (id_wahana, "|", nama_wahana, "|", harga_tiket)
    
    return
示例#14
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
示例#15
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.")
示例#16
0
def getuserdata(user, dataname):
    # function getuserdata (user : array [0..1] of array [0..6] of string, dataname : string) -> string
    # Mengambil data dari user yang telah login
    # KAMUS LOKAL
    # ALGORITMA
    return user[1][flib.find_idx(user, str(dataname))]
示例#17
0
# Login sebagai admin:
# Username: wangkypro
# Password: coklatenaknol
print("$ login")
whoami = login.main(load.use("user.csv"))

# Dideklarasi exit_flag (boolean) yang menandakan apabila user sudah mau keluar dari program
# Awalnya exit_flag = False
if (whoami != []):
    exit_flag = False

# Looping

while not exit_flag:
    print("Anda ter-logged in sebagai " +
          str(whoami[1][flib.find_idx(whoami, "Username")]) + ".")

    # Loop pemain
    if (whoami[1][flib.find_idx(whoami, "Role")] == "Pemain"
            or whoami[1][flib.find_idx(whoami, "Role")] == "Gold"):
        print("Anda adalah seorang Pemain.")
        if whoami[1][flib.find_idx(whoami, "Role")] == "Gold":
            print("Anda memiliki Golden Account (harga tiket diskon 50%).")
        print(
            "Apa yang mau anda lakukan? (Ketik \"list\" untuk melihat daftar command)"
        )
        try:
            command = input("$ ").lower()
            if (command == "list"):
                flib.command_pemain()
            elif (command == "save"):