Skip to content

Nicole-Lopez/python-budget-app

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

3 Commits
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Budget App (Python)

This project is part of the freeCodeCamp Python Certification.

It implements a simple budgeting system using object-oriented programming. The application allows users to create budget categories, record deposits and withdrawals, transfer funds between categories, and generate a visual spending chart.


πŸ“Œ Features

  • Create budget categories
  • Record deposits with optional descriptions
  • Withdraw funds with balance validation
  • Transfer money between categories
  • Check category balance
  • Display a formatted ledger for each category
  • Generate a text-based bar chart showing percentage spent per category

πŸ› οΈ Technologies

  • Python 3

πŸ“– User Stories

  1. You should have a Category class that accepts a name as the argument.

  2. The Category class should have an instance attribute ledger that is a list, and contains the list of transactions.

  3. The Category class should have the following methods:

    • A deposit method that accepts an amount and an optional description. If no description is given, it should default to an empty string. The method should append an object to the ledger list in the form of {'amount': amount, 'description': description}.
    • A withdraw method that accepts an amount and an optional description (default to an empty string). The method should store in ledger the amount passed in as a negative number, and should return True if the withdrawal succeeded and False otherwise.
    • A get_balance method that returns the current category balance based on ledger.
    • A transfer method that accepts an amount and another Category instance, withdraws the amount with description Transfer to [Destination], deposits it into the other category with description Transfer from [Source], where [Destination] and [Source] should be replaced by the name of destination and source categories. The method should return True when the transfer is successful, and False otherwise.
    • A check_funds method that accepts an amount and returns False if it exceeds the balance or True otherwise. This method must be used by both the withdraw and transfer methods.
  4. When a Category object is printed, it should:

    • Display a title line of 30 characters with the category name centered between * characters.
    • List each ledger entry with up to 23 characters of its description left-aligned and the amount right-aligned (two decimal places, max 7 characters).
    • Show a final line Total: [balance], where [balance] should be replaced by the category total.

    Here is an example usage:

    food = Category('Food')
    food.deposit(1000, 'initial deposit')
    food.withdraw(10.15, 'groceries')
    food.withdraw(15.89, 'restaurant and more food for dessert')
    clothing = Category('Clothing')
    food.transfer(50, clothing)
    print(food)

    And here is an example of the output:

    *************Food*************
    initial deposit        1000.00
    groceries               -10.15
    restaurant and more foo -15.89
    Transfer to Clothing    -50.00
    Total: 923.96
    
  5. You should have a function outside the Category class named create_spend_chart(categories) that returns a bar-chart string. To build the chart:

    • Start with the title Percentage spent by category.
    • Calculate percentages from withdrawals only and not from deposits. The percentage should be the percentage of the amount spent for each category to the total spent for all categories (rounded down to the nearest 10).
    • Label the y-axis from 100 down to 0 in steps of 10.
    • Use o characters for the bars.
    • Include a horizontal line two spaces past the last bar.
    • Write category names vertically below the bar.

    This function will be tested with up to four categories.

    Make sure to match the spacing of the example output exactly:

    Percentage spent by category
    100|          
     90|          
     80|          
     70|          
     60| o        
     50| o        
     40| o        
     30| o        
     20| o  o     
     10| o  o  o  
      0| o  o  o  
        ----------
         F  C  A  
         o  l  u  
         o  o  t  
         d  t  o  
            h     
            i     
            n     
            g
    

πŸ§ͺ Example Usage

Example test cases are included as commented lines at the bottom of main.py.

Uncomment them to run and see the output.


πŸ“š Notes

  • This project was developed to meet the certification requirements.
  • The implementation focuses on correctness and clarity rather than extended functionality.

About

freeCodeCamp Python certification project: Budget App

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages