Mochamad Kolbi Nuron_5025231183_PBO A 12

 Nama : Mochamad Kolbi Nuron

NRP : 5025231183

Kelas : PBO A tugas 12

IMPLEMENTASI TIKET PESAWAT 

class Flight:

    def __init__(self, flight_code, departure, arrival, economy_price, business_price, first_class_price):

        self.flight_code = flight_code

        self.departure = departure

        self.arrival = arrival

        self.economy_price = economy_price

        self.business_price = business_price

        self.first_class_price = first_class_price


    def __str__(self):

        return (f"{self.flight_code} | {self.departure} -> {self.arrival} "

                f"| Ekonomi: Rp {self.economy_price} | Bisnis: Rp {self.business_price} | First Class: Rp {self.first_class_price}")



class TicketBooking:

    def __init__(self):

        self.flights = []

        self.booked_tickets = []


    def add_flight(self, flight):

        self.flights.append(flight)


    def show_flights(self):

        print("\nDaftar Penerbangan yang Tersedia:")

        for idx, flight in enumerate(self.flights, 1):

            print(f"{idx}. {flight}")


    def show_class_info(self, flight, class_type):

        if class_type == 'Ekonomi':

            base_fare = flight.economy_price

            baggage = '15kg'

            facilities = 'Kursi standar, makanan ringan, hiburan sederhana'

        elif class_type == 'Bisnis':

            base_fare = flight.business_price

            baggage = '30kg'

            facilities = 'Kursi lebih nyaman, makanan premium, hiburan lebih baik'

        elif class_type == 'First Class':

            base_fare = flight.first_class_price

            baggage = '40kg'

            facilities = 'Kursi tidur, makanan gourmet, layanan pribadi, hiburan kelas atas'

        else:

            print("Kelas tidak valid")

            return


        print(f"\nKelas {class_type} pada penerbangan {flight.flight_code}:")

        print(f"Base Fare: Rp {base_fare}")

        print(f"Batas Bagasi: {baggage}")

        print(f"Fasilitas: {facilities}")


    def calculate_total_fare(self, base_fare):

        # Biaya tambahan (misalnya pajak dan biaya layanan)

        tax_service_fee = 0.1 * base_fare  # 10% dari base fare sebagai pajak dan layanan

        total_fare = base_fare + tax_service_fee

        return total_fare


    def book_ticket(self, flight_index, class_type, passenger_name):

        if 0 < flight_index <= len(self.flights):

            flight = self.flights[flight_index - 1]

            if class_type == 'Ekonomi':

                base_fare = flight.economy_price

            elif class_type == 'Bisnis':

                base_fare = flight.business_price

            elif class_type == 'First Class':

                base_fare = flight.first_class_price

            else:

                print("Kelas tidak valid.")

                return


            total_fare = self.calculate_total_fare(base_fare)

            ticket = {

                'passenger': passenger_name,

                'flight': flight,

                'class': class_type,

                'base_fare': base_fare,

                'total_fare': total_fare

            }

            self.booked_tickets.append(ticket)

            print(f"\nTiket berhasil dipesan untuk {passenger_name}!")

            print(f"Detail Penerbangan: {flight.flight_code} | {class_type} | Base Fare: Rp {base_fare} | Total Fare: Rp {total_fare}")

        else:

            print("Pilihan tidak valid. Silakan pilih nomor penerbangan yang benar.")


    def show_booked_tickets(self):

        if not self.booked_tickets:

            print("\nBelum ada tiket yang dipesan.")

        else:

            print("\nTiket yang sudah dipesan:")

            for ticket in self.booked_tickets:

                print(f"{ticket['passenger']} | {ticket['flight'].flight_code} | {ticket['class']} | Base Fare: Rp {ticket['base_fare']} | Total Fare: Rp {ticket['total_fare']}")


def main():

    booking_system = TicketBooking()


    # Menambahkan penerbangan

    booking_system.add_flight(Flight("GA 101", "Jakarta", "Bali", 1500000, 3000000, 5000000))

    booking_system.add_flight(Flight("GA 102", "Jakarta", "Surabaya", 1000000, 2500000, 4500000))

    booking_system.add_flight(Flight("GA 103", "Bali", "Surabaya", 1200000, 2700000, 4800000))


    while True:

        print("\n--- Sistem Pemesanan Tiket Pesawat ---")

        print("1. Lihat Penerbangan")

        print("2. Pesan Tiket")

        print("3. Lihat Tiket yang Dipesan")

        print("4. Keluar")

        choice = input("Pilih menu (1/2/3/4): ")


        if choice == '1':

            booking_system.show_flights()

        elif choice == '2':

            booking_system.show_flights()

            flight_idx = int(input("Pilih penerbangan yang ingin dipesan (nomor): "))

            class_type = input("Pilih kelas (Ekonomi/Bisnis/First Class): ").capitalize()

            passenger_name = input("Masukkan nama penumpang: ")

            booking_system.show_class_info(booking_system.flights[flight_idx - 1], class_type)

            book_choice = input("Apakah Anda ingin melanjutkan pemesanan? (ya/tidak): ").lower()

            if book_choice == 'ya':

                booking_system.book_ticket(flight_idx, class_type, passenger_name)

        elif choice == '3':

            booking_system.show_booked_tickets()

        elif choice == '4':

            print("Terima kasih telah menggunakan sistem pemesanan tiket!")

            break

        else:

            print("Pilihan tidak valid, silakan coba lagi.")


if __name__ == "__main__":

    main()

Class Flight (Penerbangan)

Tujuan:

Class Flight digunakan untuk menyimpan data tentang penerbangan tertentu, seperti kode penerbangan, tempat keberangkatan, tempat tujuan, serta harga untuk setiap kelas penerbangan yang tersedia.

  • __init__ adalah konstruktor yang dipanggil saat objek Flight baru dibuat. Konstruktor ini menerima beberapa parameter yang akan digunakan untuk mengisi atribut objek.
  • Atribut flight_code, departure, arrival, economy_price, business_price, dan first_class_price adalah informasi yang disimpan dalam objek penerbangan, yang mencakup kode penerbangan, kota keberangkatan, kota tujuan, dan harga untuk masing-masing kelas penerbangan.

  • Method __str__(self):
  • Method ini digunakan untuk menentukan bagaimana objek Flight akan dicetak jika dipanggil, misalnya menggunakan fungsi print().
  • Method __str__ menghasilkan string yang menampilkan kode penerbangan, keberangkatan, kedatangan, serta harga untuk masing-masing kelas penerbangan (Ekonomi, Bisnis, First Class). Ini membuat objek Flight lebih mudah dibaca dan ditampilkan kepada pengguna.

  • Class TicketBooking (Pemesan Tiket)

    Tujuan:

    Class ini menangani logika utama dari sistem pemesanan tiket. Class ini memungkinkan untuk menambah penerbangan, menampilkan penerbangan yang tersedia, memesan tiket, menghitung harga tiket, serta menampilkan tiket yang sudah dipesan.

    • flights: Daftar yang menyimpan objek Flight. Di dalamnya, terdapat penerbangan-penerbangan yang tersedia untuk pemesanan.
    • booked_tickets: Daftar yang menyimpan tiket yang sudah dipesan. Setiap tiket berisi informasi seperti nama penumpang, penerbangan, kelas yang dipilih, harga dasar (base fare), dan total harga (total fare).

    Method add_flight(self, flight):
    Fungsi ini digunakan untuk menambahkan objek Flight ke dalam daftar flights, yang berarti menambahkan penerbangan baru yang tersedia untuk pemesanan.

    Method show_flights(self):
    Fungsi ini akan menampilkan semua penerbangan yang ada dalam daftar flights. Fungsi enumerate digunakan untuk memberikan nomor urut pada setiap penerbangan, dan print(f"{idx}. {flight}") menampilkan informasi penerbangan, yang diformat dengan baik menggunakan method __str__ dari class Flight.

    Method show_class_info(self, flight, class_type):
    • Fungsi ini menampilkan informasi tentang kelas penerbangan yang dipilih oleh pengguna (Ekonomi, Bisnis, atau First Class).
    • Berdasarkan kelas yang dipilih, fungsi ini menentukan base fare (harga dasar) serta fasilitas yang disediakan dalam kelas tersebut (misalnya, kursi standar atau premium, batas bagasi, dan layanan).
    • Jika kelas yang dimasukkan tidak valid, fungsi ini akan memberikan pesan kesalahan.

    Method calculate_total_fare(self, base_fare):
    • Fungsi ini menghitung total fare yang harus dibayar oleh penumpang. base fare (harga dasar) yang telah dipilih akan ditambah dengan biaya tambahan berupa pajak dan biaya layanan, yang dihitung 10% dari harga dasar.
    • Fungsi ini mengembalikan total fare yang telah dihitung.

    Method book_ticket(self, flight_index, class_type, passenger_name):
    • Fungsi ini memproses pemesanan tiket untuk penumpang yang memilih penerbangan dan kelas. Berdasarkan pilihan kelas (class_type), fungsi ini akan menetapkan base fare.
    • Fungsi ini juga memanggil calculate_total_fare untuk menghitung total biaya tiket, lalu menyimpan informasi pemesanan dalam bentuk dictionary di dalam list booked_tickets.
    • Setelah berhasil memesan tiket, sistem menampilkan informasi detail penerbangan yang dipesan, termasuk nama penumpang, kode penerbangan, kelas yang dipilih, base fare, dan total fare.

    Method show_booked_tickets(self):
    • Fungsi ini menampilkan tiket yang telah dipesan. Jika tidak ada tiket yang dipesan, sistem akan memberitahukan bahwa belum ada pemesanan.
    • Jika ada tiket yang dipesan, fungsi ini akan menampilkan informasi tiket yang sudah dipesan seperti nama penumpang, kode penerbangan, kelas yang dipilih, serta biaya dasar dan total biaya.

    Fungsi main()

    Fungsi main adalah inti dari program yang menjalankan loop interaktif untuk berkomunikasi dengan pengguna dan memberikan menu pilihan, yaitu:

    • Menampilkan daftar penerbangan yang tersedia.
    • Memesan tiket berdasarkan input pengguna.
    • Menampilkan tiket yang sudah dipesan. 



    Komentar

    Postingan populer dari blog ini

    Mochamad Kolbi Nuron_5025231183_ETS PBO A

    tugas PBOA pengertian dan konsep OOP

    Mochamad Kolbi Nuron_5025231183_Tugas PBO 8