PFM CS
PFM CS
connector
try:
connection = mysql.connector.connect(
host="localhost",
user="root",
password="1234",
database="ansh"
)
if connection.is_connected():
print("Connected to MySQL Server successfully")
connection.close()
import tkinter as tk
from tkinter import ttk, messagebox, filedialog
import json
from datetime import datetime
from collections import defaultdict
class FinanceManager:
def __init__(self, root):
self.root = root
self.root.title("Personal Finance Manager")
self.root.geometry("800x600")
# Data structures
self.data = {
'income': [],
'expenses': [],
'investments': [],
'loans': [],
'properties': [],
'taxes': [],
'categories': {
'income': ['Salary', 'Investments', 'Others'],
'expenses': ['Food', 'Entertainment', 'Bills', 'Others'],
'investments': ['Stocks', 'Bonds', 'Real Estate', 'Others'],
'loans': ['Mortgage', 'Car Loan', 'Personal Loan', 'Others'],
'properties': ['Residential', 'Commercial', 'Land', 'Others']
},
'budgets': defaultdict(float)
}
def setup_gui(self):
# Notebook for different sections
self.notebook = ttk.Notebook(self.root)
self.notebook.pack(expand=True, fill='both')
self.notebook.add(self.income_frame, text="Income")
self.notebook.add(self.expenses_frame, text="Expenses")
self.notebook.add(self.investments_frame, text="Investments")
self.notebook.add(self.loans_frame, text="Loans")
self.notebook.add(self.properties_frame, text="Properties")
self.notebook.add(self.taxes_frame, text="Taxes")
self.notebook.add(self.report_frame, text="Reports")
self.notebook.add(self.budget_frame, text="Budgets")
# Income section
self.setup_income_section()
# Expenses section
self.setup_expenses_section()
# Investments section
self.setup_investments_section()
# Loans section
self.setup_loans_section()
# Properties section
self.setup_properties_section()
# Taxes section
self.setup_taxes_section()
# Report section
self.setup_report_section()
# Budget section
self.setup_budget_section()
# Menu
self.setup_menu()
def setup_income_section(self):
ttk.Label(self.income_frame, text="Income Entry", font=("Arial", 16)).pack(pady=10)
form_frame = ttk.Frame(self.income_frame)
form_frame.pack(pady=20)
def setup_expenses_section(self):
ttk.Label(self.expenses_frame, text="Expenses Entry", font=("Arial", 16)).pack(pady=10)
form_frame = ttk.Frame(self.expenses_frame)
form_frame.pack(pady=20)
def setup_investments_section(self):
ttk.Label(self.investments_frame, text="Investment Entry", font=("Arial", 16)).pack(pady=10)
form_frame = ttk.Frame(self.investments_frame)
form_frame.pack(pady=20)
self.investment_list = ttk.Treeview(self.investments_frame,
columns=("Description", "Amount", "Category", "Date"), show='headings')
self.investment_list.heading("Description", text="Description")
self.investment_list.heading("Amount", text="Amount")
self.investment_list.heading("Category", text="Category")
self.investment_list.heading("Date", text="Date")
self.investment_list.pack(pady=20, padx=20, fill='both', expand=True)
def setup_loans_section(self):
ttk.Label(self.loans_frame, text="Loan Entry", font=("Arial", 16)).pack(pady=10)
form_frame = ttk.Frame(self.loans_frame)
form_frame.pack(pady=20)
def setup_properties_section(self):
ttk.Label(self.properties_frame, text="Property Entry", font=("Arial", 16)).pack(pady=10)
form_frame = ttk.Frame(self.properties_frame)
form_frame.pack(pady=20)
def setup_taxes_section(self):
ttk.Label(self.taxes_frame, text="Tax Entry", font=("Arial", 16)).pack(pady=10)
form_frame = ttk.Frame(self.taxes_frame)
form_frame.pack(pady=20)
def setup_report_section(self):
ttk.Label(self.report_frame, text="Reports", font=("Arial", 16)).pack(pady=10)
self.report_text = tk.Text(self.report_frame, wrap='word', height=20, width=80)
self.report_text.pack(pady=20)
def setup_budget_section(self):
ttk.Label(self.budget_frame, text="Budget Management", font=("Arial", 16)).pack(pady=10)
form_frame = ttk.Frame(self.budget_frame)
form_frame.pack(pady=20)
ttk.Label(form_frame, text="Category").grid(row=0, column=0, padx=5, pady=5)
self.budget_category = ttk.Combobox(form_frame, values=self.data['categories']['expenses'])
self.budget_category.grid(row=0, column=1, padx=5, pady=5)
self.budget_category.current(0) # Set default value
def setup_menu(self):
menubar = tk.Menu(self.root)
self.root.config(menu=menubar)
def add_income(self):
description = self.income_description.get()
amount = self.income_amount.get()
category = self.income_category.get()
if not description or not amount or not category:
messagebox.showerror("Error", "All fields must be filled.")
return
try:
amount = float(amount)
except ValueError:
messagebox.showerror("Error", "Amount must be a number.")
return
def add_expense(self):
description = self.expenses_description.get()
amount = self.expenses_amount.get()
category = self.expenses_category.get()
try:
amount = float(amount)
except ValueError:
messagebox.showerror("Error", "Amount must be a number.")
return
def add_investment(self):
description = self.investment_description.get()
amount = self.investment_amount.get()
category = self.investment_category.get()
try:
amount = float(amount)
except ValueError:
messagebox.showerror("Error", "Amount must be a number.")
return
def add_loan(self):
description = self.loan_description.get()
amount = self.loan_amount.get()
category = self.loan_category.get()
try:
amount = float(amount)
except ValueError:
messagebox.showerror("Error", "Amount must be a number.")
return
try:
value = float(value)
except ValueError:
messagebox.showerror("Error", "Value must be a number.")
return
def add_tax(self):
description = self.tax_description.get()
amount = self.tax_amount.get()
category = self.tax_category.get()
try:
amount = float(amount)
except ValueError:
messagebox.showerror("Error", "Amount must be a number.")
return
def generate_report(self):
total_income = sum(item['amount'] for item in self.data['income'])
total_expenses = sum(item['amount'] for item in self.data['expenses'])
total_investments = sum(item['amount'] for item in self.data['investments'])
total_loans = sum(item['amount'] for item in self.data['loans'])
total_properties = sum(item['value'] for item in self.data['properties'])
total_taxes = sum(item['amount'] for item in self.data['taxes'])
balance = total_income - total_expenses - total_taxes
self.report_text.delete(1.0, tk.END)
self.report_text.insert(tk.END, report)
def save_data(self):
file_path = filedialog.asksaveasfilename(defaultextension=".json",
filetypes=[("JSON files", "*.json"), ("All files", "*.*")])
if file_path:
with open(file_path, 'w') as file:
json.dump(self.data, file, indent=4)
messagebox.showinfo("Success", "Data saved successfully.")
def load_data(self):
file_path = filedialog.askopenfilename(filetypes=[("JSON files", "*.json"), ("All files", "*.*")])
if file_path:
with open(file_path, 'r') as file:
self.data = json.load(file)
self.populate_lists()
messagebox.showinfo("Success", "Data loaded successfully.")
def populate_lists(self):
self.income_list.delete(*self.income_list.get_children())
for item in self.data['income']:
self.income_list.insert('', 'end', values=(
item['description'], f"{item['amount']:.2f}", item['category'], item['date']))
self.expenses_list.delete(*self.expenses_list.get_children())
for item in self.data['expenses']:
self.expenses_list.insert('', 'end', values=(
item['description'], f"{item['amount']:.2f}", item['category'], item['date']))
self.investment_list.delete(*self.investment_list.get_children())
for item in self.data['investments']:
self.investment_list.insert('', 'end', values=(
item['description'], f"{item['amount']:.2f}", item['category'], item['date']))
self.loan_list.delete(*self.loan_list.get_children())
for item in self.data['loans']:
self.loan_list.insert('', 'end',
values=(item['description'], f"{item['amount']:.2f}", item['category'], item['date']))
self.property_list.delete(*self.property_list.get_children())
for item in self.data['properties']:
self.property_list.insert('', 'end', values=(
item['description'], f"{item['value']:.2f}", item['category'], item['date']))
self.tax_list.delete(*self.tax_list.get_children())
for item in self.data['taxes']:
self.tax_list.insert('', 'end',
values=(item['description'], f"{item['amount']:.2f}", item['category'], item['date']))
def set_budget(self):
category = self.budget_category.get()
amount = self.budget_amount.get()
try:
amount = float(amount)
except ValueError:
messagebox.showerror("Error", "Budget Amount must be a number.")
return
self.data['budgets'][category] = amount
messagebox.showinfo("Success", f"Budget for {category} set to ${amount:.2f}")
def view_budgets(self):
budget_report = "Current Budgets:\n"
for category, amount in self.data['budgets'].items():
budget_report += f"{category}: ${amount:.2f}\n"
messagebox.showinfo("Budgets", budget_report)
if __name__ == "__main__":
root = tk.Tk()
app = FinanceManager(root)
root.mainloop()
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
import mysql.connector
from datetime import date
# Connect to MySQL
try:
connection = mysql.connector.connect(
host="localhost",
user="root", # Replace with your MySQL username
password="", # Replace with your MySQL password
database="finance_manager"
)
cursor = connection.cursor()
print("Connected to MySQL database!")
except mysql.connector.Error as err:
print(f"Error: {err}")
exit(1)
# Income Tab
income_frame = ttk.Frame(notebook)
notebook.add(income_frame, text="Income")
# Expenses Tab
expense_frame = ttk.Frame(notebook)
notebook.add(expense_frame, text="Expenses")