import mysql.
connector
from [Link] import Error
from datetime import date
class FinanceManager:
def __init__(self, host, user, password, database):
try:
[Link] = [Link](
host=host,
user=user,
password=password,
database=database
)
[Link] = [Link](dictionary=True)
print("Connected to database")
except Error as e:
print(f"Error connecting to MySQL: {e}")
def add_account(self, account_name, account_type):
sql = "INSERT INTO accounts (account_name, account_type) VALUES (%s, %s)"
[Link](sql, (account_name, account_type))
[Link]()
print(f"Account '{account_name}' added.")
def add_category(self, category_name):
sql = "INSERT INTO categories (category_name) VALUES (%s)"
[Link](sql, (category_name,))
[Link]()
print(f"Category '{category_name}' added.")
def add_transaction(self, account_id, category_id, amount, transaction_date,
description):
sql = """
INSERT INTO transactions (account_id, category_id, amount,
transaction_date, description)
VALUES (%s, %s, %s, %s, %s)
"""
[Link](sql, (account_id, category_id, amount,
transaction_date, description))
[Link]()
print(f"Transaction added: {amount} on {transaction_date}")
# Update account balance
self.update_account_balance(account_id, amount)
def update_account_balance(self, account_id, amount):
sql = "UPDATE accounts SET balance = balance + %s WHERE account_id = %s"
[Link](sql, (amount, account_id))
[Link]()
def get_account_balance(self, account_id):
sql = "SELECT balance FROM accounts WHERE account_id = %s"
[Link](sql, (account_id,))
result = [Link]()
if result:
return result['balance']
return None
def list_accounts(self):
[Link]("SELECT * FROM accounts")
accounts = [Link]()
for acc in accounts:
print(f"ID: {acc['account_id']}, Name: {acc['account_name']}, Type:
{acc['account_type']}, Balance: {acc['balance']}")
def list_transactions(self):
sql = """
SELECT t.transaction_id, a.account_name, c.category_name, [Link],
t.transaction_date, [Link]
FROM transactions t
JOIN accounts a ON t.account_id = a.account_id
JOIN categories c ON t.category_id = c.category_id
ORDER BY t.transaction_date DESC
"""
[Link](sql)
transactions = [Link]()
for t in transactions:
print(f"{t['transaction_date']} | {t['account_name']} |
{t['category_name']} | {t['amount']} | {t['description']}")
def close(self):
[Link]()
[Link]()
print("Connection closed.")
# Example usage
if __name__ == "__main__":
fm = FinanceManager(host='localhost', user='root', password='yourpassword',
database='company_finance')
# Add accounts and categories (run once)
# fm.add_account('Cash', 'Asset')
# fm.add_account('Sales Revenue', 'Revenue')
# fm.add_category('Sales')
# fm.add_category('Office Supplies')
# Add a transaction
fm.add_transaction(account_id=1, category_id=1, amount=1000.00,
transaction_date=[Link](), description='Initial cash deposit')
# List accounts and transactions
fm.list_accounts()
fm.list_transactions()
[Link]()