Code 4class Guest

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 4

class Guest:

def __init__(self, name, email, reservation):

self.name = name

self.email = email

self.reservation = reservation

class Reservation:

def __init__(self, room_type, check_in_date, check_out_date):

self.room_type = room_type

self.check_in_date = check_in_date

self.check_out_date = check_out_date

class Billing:

def __init__(self):

self.bills = {}

def generate_bill(self, guest):

# Calculate bill amount based on room type, duration, and additional services

room_rate = self.get_room_rate(guest.reservation.room_type)

duration = self.get_duration(guest.reservation.check_in_date, guest.reservation.check_out_date)

total_amount = room_rate * duration

# Add additional charges for services if applicable

total_amount += self.calculate_additional_charges(guest)

self.bills[guest.email] = total_amount

def get_room_rate(self, room_type):

# Get the room rate based on room type from a rate table or database

rate_table = {

'Standard': 100,
'Deluxe': 150,

'Suite': 200

return rate_table.get(room_type, 0)

def get_duration(self, check_in_date, check_out_date):

# Calculate the duration of the stay based on check-in and check-out dates

# You may need to parse the date strings into datetime objects and calculate the duration

duration = 0

# Calculate the duration logic goes here

return duration

def calculate_additional_charges(self, guest):

# Calculate additional charges for services like room service, spa, etc.

additional_charges = 0

# Additional charges calculation logic goes here

return additional_charges

def get_bill_amount(self, guest_email):

return self.bills.get(guest_email, 0)

class GuestTracker:

def __init__(self):

self.guests = []

self.billing = Billing()

def add_guest(self, guest):

self.guests.append(guest)
def remove_guest(self, guest):

self.guests.remove(guest)

def get_guest_by_email(self, email):

for guest in self.guests:

if guest.email == email:

return guest

return None

def get_guests_by_date_range(self, start_date, end_date):

result = []

for guest in self.guests:

reservation = guest.reservation

if reservation.check_in_date >= start_date and reservation.check_out_date <= end_date:

result.append(guest)

return result

def update_guest_reservation(self, guest, new_reservation):

guest.reservation = new_reservation

def generate_guest_bill(self, guest_email):

guest = self.get_guest_by_email(guest_email)

if guest:

self.billing.generate_bill(guest)

else:

print('Guest not found.')

def get_guest_bill_amount(self, guest_email):

return self.billing.get_bill_amount(guest_email)
# Example usage

reservation1 = Reservation('Standard', '2023-07-10', '2023-07-15')

guest1 = Guest('Harrison Adom', 'hadom2607@example.com', reservation1)

reservation2 = Reservation('Deluxe', '2023-07-12', '2023-07-17')

guest2 = Guest('Robert Zigah', 'robzigah@example.com', reservation2)

tracker = GuestTracker()

tracker.add_guest(guest1)

tracker.add_guest(guest2)

# Generate bill for a guest

tracker.generate_guest_bill('hadom2607@example.com')

# Get bill amount for a guest

bill_amount = tracker.get_guest_bill_amount('hadom2607@example.com')

print('Bill amount:', bill_amount)

# a Billing class is introduced to handle the generation of bills for guests. The Billing class calculates the
bill amount based on the room type, duration of stay, and any additional charges. It also maintains a
dictionary of bills for each guest email.

The GuestTracker class is updated to include an instance of the Billing class. It provides methods to
generate bills for guests, retrieve the bill amount for a guest, and integrates with the Guest and
Reservation classes.

You might also like