Personal Budget Planner React, JavaScript

👤 Sharing: AI
```javascript
import React, { useState } from 'react';

function BudgetPlanner() {
  const [income, setIncome] = useState('');
  const [expenses, setExpenses] = useState([]);
  const [expenseName, setExpenseName] = useState('');
  const [expenseAmount, setExpenseAmount] = useState('');

  const handleIncomeChange = (event) => {
    setIncome(event.target.value);
  };

  const handleExpenseNameChange = (event) => {
    setExpenseName(event.target.value);
  };

  const handleExpenseAmountChange = (event) => {
    setExpenseAmount(event.target.value);
  };

  const addExpense = () => {
    if (expenseName && expenseAmount) {
      setExpenses([...expenses, { name: expenseName, amount: parseFloat(expenseAmount) }]);
      setExpenseName('');
      setExpenseAmount('');
    }
  };

  const deleteExpense = (index) => {
    const newExpenses = [...expenses];
    newExpenses.splice(index, 1);
    setExpenses(newExpenses);
  };

  const calculateTotalExpenses = () => {
    return expenses.reduce((total, expense) => total + expense.amount, 0);
  };

  const calculateBalance = () => {
    return parseFloat(income || 0) - calculateTotalExpenses();
  };

  return (
    <div style={{ fontFamily: 'Arial, sans-serif', padding: '20px' }}>
      <h1>Personal Budget Planner</h1>

      {/* Income Input */}
      <div style={{ marginBottom: '20px' }}>
        <label htmlFor="income" style={{ display: 'block', marginBottom: '5px' }}>
          Income:
        </label>
        <input
          type="number"
          id="income"
          value={income}
          onChange={handleIncomeChange}
          placeholder="Enter your income"
          style={{ padding: '8px', fontSize: '16px', width: '200px' }}
        />
      </div>

      {/* Expense Input Form */}
      <div style={{ marginBottom: '20px' }}>
        <h2>Add Expense</h2>
        <label htmlFor="expenseName" style={{ display: 'block', marginBottom: '5px' }}>
          Expense Name:
        </label>
        <input
          type="text"
          id="expenseName"
          value={expenseName}
          onChange={handleExpenseNameChange}
          placeholder="Expense Name"
          style={{ padding: '8px', fontSize: '16px', width: '200px', marginBottom: '10px' }}
        />

        <label htmlFor="expenseAmount" style={{ display: 'block', marginBottom: '5px' }}>
          Expense Amount:
        </label>
        <input
          type="number"
          id="expenseAmount"
          value={expenseAmount}
          onChange={handleExpenseAmountChange}
          placeholder="Expense Amount"
          style={{ padding: '8px', fontSize: '16px', width: '200px', marginBottom: '10px' }}
        />

        <button onClick={addExpense} style={{ padding: '10px 20px', fontSize: '16px', backgroundColor: '#4CAF50', color: 'white', border: 'none', cursor: 'pointer' }}>
          Add Expense
        </button>
      </div>

      {/* Expense List */}
      <div>
        <h2>Expenses</h2>
        {expenses.length === 0 ? (
          <p>No expenses added yet.</p>
        ) : (
          <ul style={{ listStyleType: 'none', padding: 0 }}>
            {expenses.map((expense, index) => (
              <li key={index} style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', padding: '10px', borderBottom: '1px solid #ccc' }}>
                <span>{expense.name}: ${expense.amount.toFixed(2)}</span>
                <button onClick={() => deleteExpense(index)} style={{ padding: '5px 10px', fontSize: '14px', backgroundColor: '#f44336', color: 'white', border: 'none', cursor: 'pointer' }}>
                  Delete
                </button>
              </li>
            ))}
          </ul>
        )}
      </div>

      {/* Summary */}
      <div style={{ marginTop: '20px', borderTop: '2px solid #ccc', paddingTop: '10px' }}>
        <h2>Summary</h2>
        <p>Total Expenses: ${calculateTotalExpenses().toFixed(2)}</p>
        <p>Balance: ${calculateBalance().toFixed(2)}</p>
      </div>
    </div>
  );
}

export default BudgetPlanner;
```
👁️ Viewed: 8

Comments