0% found this document useful (0 votes)
33 views11 pages

Oop Finals

The document contains code for a payroll application built with Tkinter. It defines classes for the main window and data window, includes dictionaries for pay rates and tax rates, and has functions for computing pay, clearing data, and generating a printable pay slip text.

Uploaded by

Carl Jasper Rabi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
33 views11 pages

Oop Finals

The document contains code for a payroll application built with Tkinter. It defines classes for the main window and data window, includes dictionaries for pay rates and tax rates, and has functions for computing pay, clearing data, and generating a printable pay slip text.

Uploaded by

Carl Jasper Rabi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 11

Republic of the Philippines

University of Rizal System


Morong, Rizal
College of Engineering

Partners:
Harley Pacoli
Carl Jasper Rabi

Item No. 1
import tkinter as tk

class MainWindow:
def __init__(self, master):
self.master = master
self.master.title("Main Window")

self.name_label = tk.Label(master, text="Name:")


self.name_label.grid(row=0, column=0, padx=5, pady=5, sticky=tk.W)
self.name_entry = tk.Entry(master)
self.name_entry.grid(row=0, column=1, padx=5, pady=5)

self.address_label = tk.Label(master, text="Address:")


self.address_label.grid(row=1, column=0, padx=5, pady=5, sticky=tk.W)
self.address_entry = tk.Entry(master)
self.address_entry.grid(row=1, column=1, padx=5, pady=5)

self.contact_label = tk.Label(master, text="Contact Number:")


self.contact_label.grid(row=2, column=0, padx=5, pady=5, sticky=tk.W)
self.contact_entry = tk.Entry(master)
self.contact_entry.grid(row=2, column=1, padx=5, pady=5)

self.email_label = tk.Label(master, text="Email:")


self.email_label.grid(row=3, column=0, padx=5, pady=5, sticky=tk.W)
self.email_entry = tk.Entry(master)
self.email_entry.grid(row=3, column=1, padx=5, pady=5)

self.button = tk.Button(master, text="Open Data Window", command=self.open_data_window)


self.button.grid(row=4, column=0, columnspan=2, pady=10)

def open_data_window(self):
name = self.name_entry.get()
address = self.address_entry.get()
contact = self.contact_entry.get()
email = self.email_entry.get()

DataWindow(self.master, name, address, contact, email)

class DataWindow:
def __init__(self, master, name, address, contact, email):
self.master = master
self.top = tk.Toplevel(master)
self.top.title("Data Window")

tk.Label(self.top, text="Name:").grid(row=0, column=0, padx=5, pady=5, sticky=tk.W)


tk.Label(self.top, text=name).grid(row=0, column=1, padx=5, pady=5)

tk.Label(self.top, text="Address:").grid(row=1, column=0, padx=5, pady=5, sticky=tk.W)


tk.Label(self.top, text=address).grid(row=1, column=1, padx=5, pady=5)

tk.Label(self.top, text="Contact Number:").grid(row=2, column=0, padx=5, pady=5, sticky=tk.W)


tk.Label(self.top, text=contact).grid(row=2, column=1, padx=5, pady=5)

tk.Label(self.top, text="Email:").grid(row=3, column=0, padx=5, pady=5, sticky=tk.W)


tk.Label(self.top, text=email).grid(row=3, column=1, padx=5, pady=5)
def main():
root = tk.Tk()
app = MainWindow(root)
root.mainloop()

if _name_ == "_main_":
main()

Item No. 2
import tkinter as tk

class MainWindow:
def __init__(self, master):
self.master = master
self.master.title("Main Window")

self.name_label = tk.Label(master, text="Name:")


self.name_label.grid(row=0, column=0, padx=5, pady=5, sticky=tk.W)
self.name_entry = tk.Entry(master)
self.name_entry.grid(row=0, column=1, padx=5, pady=5)

self.address_label = tk.Label(master, text="Address:")


self.address_label.grid(row=1, column=0, padx=5, pady=5, sticky=tk.W)
self.address_entry = tk.Entry(master)
self.address_entry.grid(row=1, column=1, padx=5, pady=5)

self.contact_label = tk.Label(master, text="Contact Number:")


self.contact_label.grid(row=2, column=0, padx=5, pady=5, sticky=tk.W)
self.contact_entry = tk.Entry(master)
self.contact_entry.grid(row=2, column=1, padx=5, pady=5)

self.email_label = tk.Label(master, text="Email:")


self.email_label.grid(row=3, column=0, padx=5, pady=5, sticky=tk.W)
self.email_entry = tk.Entry(master)
self.email_entry.grid(row=3, column=1, padx=5, pady=5)

self.button = tk.Button(master, text="Open Data Window", command=self.open_data_window)


self.button.grid(row=4, column=0, columnspan=2, pady=10)

def open_data_window(self):
name = self.name_entry.get()
address = self.address_entry.get()
contact = self.contact_entry.get()
email = self.email_entry.get()

DataWindow(self.master, name, address, contact, email)

class DataWindow:
def __init__(self, master, name, address, contact, email):
self.master = master
self.top = tk.Toplevel(master)
self.top.title("Data Window")

tk.Label(self.top, text="Name:").grid(row=0, column=0, padx=5, pady=5, sticky=tk.W)


tk.Label(self.top, text=name).grid(row=0, column=1, padx=5, pady=5)

tk.Label(self.top, text="Address:").grid(row=1, column=0, padx=5, pady=5, sticky=tk.W)


tk.Label(self.top, text=address).grid(row=1, column=1, padx=5, pady=5)

tk.Label(self.top, text="Contact Number:").grid(row=2, column=0, padx=5, pady=5, sticky=tk.W)


tk.Label(self.top, text=contact).grid(row=2, column=1, padx=5, pady=5)
tk.Label(self.top, text="Email:").grid(row=3, column=0, padx=5, pady=5, sticky=tk.W)
tk.Label(self.top, text=email).grid(row=3, column=1, padx=5, pady=5)

def main():
root = tk.Tk()
app = MainWindow(root)
root.mainloop()

if _name_ == "_main_":
main()

Item No.3
import tkinter as tk
from tkinter import messagebox

pay_rates = {
"Manager": {"Grade A": 25000, "Grade B": 28000},
"System Administrator": {"Grade A": 20000, "Grade B": 23000},
"System Analyst": {"Grade A": 15000, "Grade B": 17000},
"Programmer": {"Grade A": 10000, "Grade B": 12000},
"Technician": {"Grade A": 8000, "Grade B": 9000},
"Encoder": {"Grade A": 6000, "Grade B": 6600},
"Messenger": {"Grade A": 5000, "Grade B": 5500}
}

tax_rates = {
"Manager": 20,
"System Administrator": 15,
"System Analyst": 12,
"Programmer": 10,
"Technician": 7,
"Encoder": 5,
"Messenger": 4
}

def compute_pay():
try:
position = position_var.get()
grade = grade_var.get()

basic_pay = pay_rates[position][grade]
tax_rate = tax_rates[position] / 100

overtime_pay = float(ot_hours_entry.get()) * 1 / 100 * basic_pay


gross_pay = basic_pay + overtime_pay
withholding_tax = float(tax_entry.get())
sss = 200
net_pay = float(net_entry.get())

total_deductions = sss + withholding_tax


net_pay_calculated = gross_pay - total_deductions

if net_pay != net_pay_calculated:
messagebox.showerror("Error", "Net Salary does not match the calculated value.")
return

messagebox.showinfo("Pay Slip",
f"Basic Pay: PHP {basic_pay}\nOvertime Pay: PHP {overtime_pay:.2f}\nGross Pay:
PHP {gross_pay:.2f}\nWithholding Tax: PHP {withholding_tax:.2f}\nTotal Deductions: PHP
{total_deductions:.2f}\nNet Pay: PHP {net_pay:.2f}")
except ValueError:
messagebox.showerror("Error", "Please enter valid numerical values")
def clear_data():
name_entry.delete(0, tk.END)
ot_hours_entry.delete(0, tk.END)
tax_entry.delete(0, tk.END)
net_entry.delete(0, tk.END)
gross_entry.delete(0, tk.END) # Clear Gross Salary entry field

def generate_printable_text():
employee_name = name_entry.get()
position = position_var.get()
grade = grade_var.get()
ot_hours = ot_hours_entry.get()
basic_salary = pay_rates[position][grade]
overtime_pay = float(ot_hours) * 1 / 100 * basic_salary
withholding_tax = float(tax_entry.get())
sss = 200
total_deductions = sss + withholding_tax
net_pay = basic_salary + overtime_pay - total_deductions

printable_text = f"Employee Name: {employee_name}\n" \


f"Position: {position}\n" \
f"Pay Grade Type: {grade}\n" \
f"OT Hours: {ot_hours}\n" \
f"OT Amount: {overtime_pay:.2f}\n" \
f"Basic Salary: {basic_salary}\n" \
f"SSS Contribution: {sss}\n" \
f"Withholding Tax: {withholding_tax:.2f}\n" \
f"Total Deductions: {total_deductions:.2f}\n" \
f"Net Income: {net_pay}"
return printable_text

def print_pay_slip():
printable_text = generate_printable_text()
messagebox.showinfo("Pay Slip", printable_text)

root = tk.Tk()
root.title("Pay Slip Application")
root.configure(bg='light blue')

# Set window size and position


window_width = 650
window_height = 400
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
x_coordinate = int((screen_width / 2) - (window_width / 2))
y_coordinate = int((screen_height / 2) - (window_height / 2))
root.geometry(f"{window_width}x{window_height}+{x_coordinate}+{y_coordinate}")

# Title
title_label = tk.Label(root, text="PAYSLIP", font=("Helvetica", 16, "bold"), bg='light blue')
title_label.pack(side=tk.TOP, pady=10)

# Pay Slip Frame


pay_slip_frame = tk.Frame(root, bg='white', bd=3, relief=tk.RIDGE)
pay_slip_frame.pack(pady=10)

# Left Side - User Input Fields


left_frame = tk.Frame(pay_slip_frame, bg='white')
left_frame.pack(side=tk.LEFT, padx=20)
tk.Label(left_frame, text="Name:").grid(row=0, column=0, padx=5, pady=5, sticky="w")
name_entry = tk.Entry(left_frame)
name_entry.grid(row=0, column=1, padx=5, pady=5)

tk.Label(left_frame, text="Position:").grid(row=1, column=0, padx=5, pady=5, sticky="w")


position_var = tk.StringVar(root)
position_var.set("Please Select")
position_menu = tk.OptionMenu(left_frame, position_var, "Manager", "System Administrator", "System
Analyst",
"Programmer", "Technician", "Encoder", "Messenger")
position_menu.grid(row=1, column=1, padx=5, pady=5)

tk.Label(left_frame, text="OT Hours:").grid(row=2, column=0, padx=5, pady=5, sticky="w")


ot_hours_entry = tk.Entry(left_frame)
ot_hours_entry.grid(row=2, column=1, padx=5, pady=5)

# Pay Grade Section


pay_grade_frame = tk.LabelFrame(left_frame, text="Pay Grade", bg='white', padx=10, pady=10)
pay_grade_frame.grid(row=3, columnspan=2, padx=5, pady=10, sticky="w")

grade_var = tk.StringVar()
grade_var.set("Grade A")

grade_a_radio = tk.Radiobutton(pay_grade_frame, text="Grade A", variable=grade_var, value="Grade


A")
grade_a_radio.pack(anchor=tk.W)

grade_b_radio = tk.Radiobutton(pay_grade_frame, text="Grade B", variable=grade_var, value="Grade


B")
grade_b_radio.pack(anchor=tk.W)

# Right Side - Additional Input Fields


right_frame = tk.Frame(pay_slip_frame, bg='white')
right_frame.pack(side=tk.RIGHT, padx=20)
tk.Label(right_frame, text="Gross Salary:").grid(row=0, column=0, padx=5, pady=5, sticky="w")
gross_entry = tk.Entry(right_frame)
gross_entry.grid(row=0, column=1, padx=5, pady=5)

tk.Label(right_frame, text="Less:").grid(row=1, column=0, padx=5, pady=5, sticky="w")


tk.Label(right_frame, text="Tax:").grid(row=2, column=0, padx=5, pady=5, sticky="w")
tax_entry = tk.Entry(right_frame)
tax_entry.grid(row=2, column=1, padx=5, pady=5)

tk.Label(right_frame, text="SSS: 200").grid(row=3, column=0, padx=5, pady=5, sticky="w")

tk.Label(right_frame, text="Net Salary:").grid(row=4, column=0, padx=5, pady=5, sticky="w")


net_entry = tk.Entry(right_frame)
net_entry.grid(row=4, column=1, padx=5, pady=5)

# Buttons
bottom_frame = tk.Frame(root, bg='light blue')
bottom_frame.pack(side=tk.BOTTOM, pady=10)

compute_button = tk.Button(bottom_frame, text="Compute", command=compute_pay)


compute_button.pack(side=tk.LEFT, padx=10)

clear_button = tk.Button(bottom_frame, text="Clear", command=clear_data)


clear_button.pack(side=tk.LEFT, padx=10)

def generate_printable_text():
employee_name = name_entry.get()
position = position_var.get()
grade = grade_var.get()
ot_hours = ot_hours_entry.get()
basic_salary = pay_rates[position][grade]
overtime_pay = float(ot_hours) * 1 / 100 * basic_salary
withholding_tax = float(tax_entry.get())
sss = 200
total_deductions = sss + withholding_tax
net_pay = basic_salary + overtime_pay - total_deductions

printable_text = f"Employee Name: {employee_name}\n" \


f"Position: {position}\n" \
f"Pay Grade Type: {grade}\n" \
f"OT Hours: {ot_hours}\n" \
f"OT Amount: {overtime_pay:.2f}\n" \
f"Basic Salary: {basic_salary}\n" \
f"SSS Contribution: {sss}\n" \
f"Withholding Tax: {withholding_tax:.2f}\n" \
f"Total Deductions: {total_deductions:.2f}\n" \
f"Net Income: {net_pay}"

return printable_text

def print_pay_slip():
printable_text = generate_printable_text()
messagebox.showinfo("Pay Slip", printable_text)

print_button = tk.Button(bottom_frame, text="Print", command=print_pay_slip)


print_button.pack(side=tk.RIGHT, padx=10)

root.mainloop()

You might also like