import math
import tkinter as tk
from tkinter import messagebox
from tkinter import ttk
from tkinter import scrolledtext
from PIL import Image, ImageTk
from datetime import datetime
def calculate_fare():
try:
distance = float(distance_entry.get())
is_student = student_var.get()
is_senior = senior_var.get()
kilometer = distance / 6
decimal = kilometer - int(kilometer)
if is_student and is_senior:
[Link]('Error', 'Invalid: Both Student AND Senior selected')
return
if decimal > 0.5:
kilometer_round = [Link](kilometer)
else:
kilometer_round = [Link](kilometer)
total_fare = kilometer_round * 7
if is_student or is_senior:
total_fare -= 10
fare_label_total.config(text=total_fare)
[Link]('Total Fare', f'Your total fare is {total_fare}')
except ValueError:
[Link]('Error', 'Please enter a valid distance')
def pay():
try:
total_fare = int(fare_label_total.cget('text'))
your_pay = int(pay_entry.get())
if your_pay < total_fare:
[Link]('Insufficient Payment', 'Your payment is insufficient')
else:
change = your_pay - total_fare
person = get_person_type()
distance = distance_entry.get()
[Link]('Change', f'Your change is {change}')
receipt_tree.insert('', 'end', values=(person, distance, total_fare, change))
reset_fields()
except ValueError:
[Link]('Input Error', 'Please input a valid payment amount')
def get_person_type():
if student_var.get():
return 'Student'
elif senior_var.get():
return 'Senior'
else:
return 'Regular'
def reset_fields():
fare_label_total.config(text='0')
pay_entry.delete(0, [Link])
distance_entry.delete(0, [Link])
student_var.set(False)
senior_var.set(False)
def clear_receipt():
for item in receipt_tree.get_children():
receipt_tree.delete(item)
reset_fields()
def delete_selected():
selected_item = receipt_tree.selection()
if selected_item:
receipt_tree.delete(selected_item)
else:
[Link]('Error', 'No selection made')
def update_selected():
selected_item = receipt_tree.selection()
if selected_item:
total_fare = int(fare_label_total.cget('text'))
person = get_person_type()
distance = distance_entry.get()
pay_amount = pay_entry.get()
receipt_tree.item(selected_item, values=(person, distance, total_fare, pay_amount))
else:
[Link]('Error', 'No selection made')
def on_tree_select(event):
selected_item = receipt_tree.selection()
if selected_item:
item = receipt_tree.item(selected_item)
values = item['values']
person, distance, fare, pay = values
distance_entry.delete(0, [Link])
distance_entry.insert(0, distance)
fare_label_total.config(text=fare)
pay_entry.delete(0, [Link])
pay_entry.insert(0, pay)
if person == 'Student':
student_var.set(True)
senior_var.set(False)
elif person == 'Senior':
student_var.set(False)
senior_var.set(True)
else:
student_var.set(False)
senior_var.set(False)
def show_receipt():
selected_item = receipt_tree.selection()
if selected_item:
item = receipt_tree.item(selected_item)
values = item['values']
person, distance, fare, change = values
_name = "Fare"
transaction_date = [Link]().strftime("%Y-%m-%d %H:%M:%S")
# Generate the receipt text
receipt_text = (f"Receipt\n"
f"-------\n"
f"-------\n"
f"{_name}\n"
f"{transaction_date}\n"
f"-------\n"
f"-------\n"
f"Person: {person}\n"
f"Distance: {distance} km\n"
f"Fare: {fare} units\n"
f"Change: {change} units")
receipt_text_widget.delete(1.0, [Link]) # Clear previous text
receipt_text_widget.insert([Link], receipt_text) # Insert new receipt text
else:
[Link]('Error', 'No selection made')
main_window = [Link]()
main_window.title("Fare Discount Calculator")
main_window.geometry('1300x800')
# Load the background image
background_image = [Link]("JAVA [Link]")
background_photo = [Link](background_image)
# Create a canvas to put the background image on
canvas = [Link](main_window, width=400, height=500)
[Link](fill="both", expand=True)
# Display the background image
canvas.create_image(0, 0, image=background_photo, anchor="nw")
frame = [Link](canvas, bg='lightblue')
[Link]()
frame_sa_widgets = [Link](frame, bg='lightblue')
frame_sa_widgets.grid(row=0, column=1, columnspan=3, rowspan=7)
frame_sa_receipt = [Link](frame, bg='lightblue')
frame_sa_receipt.grid(row=0, column=4, rowspan=7, columnspan=3, padx=20)
distance_label = [Link](frame_sa_widgets, text="Enter distance (km):", background='pink',
font='helvetica')
distance_label.grid(row=0, columnspan=2, pady=(20, 2), padx=10)
distance_entry = [Link](frame_sa_widgets, font='helvetica')
distance_entry.grid(row=1, columnspan=2, pady=(0, 5), padx=10)
student_var = [Link]()
student_checkbox = [Link](frame_sa_widgets, text="Student", variable=student_var,
background='pink')
student_checkbox.grid(row=3, columnspan=2, pady=5, sticky='w', padx=10)
senior_var = [Link]()
senior_checkbox = [Link](frame_sa_widgets, text="Senior", variable=senior_var,
background='pink')
senior_checkbox.grid(row=3, columnspan=2, pady=5, sticky='e', padx=10)
calculate_button = [Link](frame_sa_widgets, text="Submit Fare", command=calculate_fare,
background='pink', font='helvetica')
calculate_button.grid(row=4, columnspan=2)
fare_label = [Link](frame_sa_widgets, text="Total Fare", background='pink', font='helvetica')
fare_label.grid(row=5, column=0, pady=(10, 5))
fare_label_total = [Link](frame_sa_widgets, text="0", background='lavenderblush',
font='helvetica', width=8)
fare_label_total.grid(row=6, column=0)
pay_label = [Link](frame_sa_widgets, text='Pay Here', background='pink', font='helvetica')
pay_label.grid(row=5, column=1, pady=(10, 5))
pay_entry = [Link](frame_sa_widgets, background='lavenderblush', font='helvetica', width=8)
pay_entry.grid(row=6, column=1)
pay_button = [Link](frame_sa_widgets, text='Pay', background='lavenderblush',
font='helvetica', command=pay)
pay_button.grid(row=7, columnspan=2, pady=10)
delete_button = [Link](frame_sa_widgets, text='Delete Selected',
background='lavenderblush', font='helvetica', command=delete_selected)
delete_button.grid(row=9, columnspan=2, pady=10)
update_button = [Link](frame_sa_widgets, text='Update Selected',
background='lavenderblush', font='helvetica', command=update_selected)
update_button.grid(row=10, columnspan=2, pady=10)
# Add Show Receipt button
show_receipt_button = [Link](frame_sa_widgets, text='Show Receipt',
background='lavenderblush', font='helvetica', command=show_receipt)
show_receipt_button.grid(row=11, columnspan=2, pady=10)
style = [Link]()
[Link]('[Link]',foreground='blue')
# Treeview Widget for Receipts
receipt_tree = [Link](frame_sa_receipt, columns=('Person', 'Distance', 'Fare', 'Change'),
show='headings')
receipt_tree.heading('Person', text='Person')
receipt_tree.heading('Distance', text='Distance')
receipt_tree.heading('Fare', text='Fare')
receipt_tree.heading('Change', text='Change')
receipt_tree.pack(fill='both', expand=True)
# Bind the Treeview selection event to the on_tree_select function
receipt_tree.bind('<<TreeviewSelect>>', on_tree_select)
# Text widget for displaying the receipt
receipt_text_widget = [Link](frame_sa_receipt, width=50, height=10,
wrap=[Link])
receipt_text_widget.pack(pady=10)
main_window.mainloop()