Expense Tracking System
Expense Tracking System
Managing daily expenses is crucial for maintaining financial stability and achieving
organizational goals. In today's fast-paced and costly business environment, it's easy to overspend
without realizing it, leading to financial strain by month-end. To address this challenge, we introduce
the Daily Expenses Tracker (DET), a user-friendly web application designed to help organizations
track and manage their expenses efficiently. DET enables organizations to track earnings, categorize
expenses, set budgets, and generate insightful reports to gain a comprehensive understanding of
spending patterns over time. Users can define custom expense categories such as rent, salaries,
utilities, maintenance, and more, providing detailed information to specify each expense entry. One
of DET's key features is its focus on user privacy and data security. The application implements
robust encryption protocols and access controls to safeguard sensitive financial information. Whether
managing personal finances or planning for future expenses, DET serves as a valuable tool for
organizations looking to improve their financial management skills. Additionally, DET offers
visualization tools such as pie charts to help users visualize their expenses effectively. The
application also supports clustering capabilities using the Apriori algorithm, allowing for
personalized and administrative clustering of expenses. While initially targeted towards new job
holders, interns, and teenagers, DET is suitable for anyone looking to track and monitor their
expenses effectively. Organizations can sign up, add their expenses, and utilize DET to enhance their
financial tracking and decision-making processes.
TITLE PAGE NO
1. INTRODUCTION 1
i. MOTIVATION 2
ii. PROBLEM DEFINITION 2
iii. OBJECTIVES 2-3
iv. SCOPE AND LIMITATIONS
SCOPE 3-4
LIMITATIONS 4
2. LITERATURE SURVEY 5-6
3. SYSTEM ANALYSIS
i. EXISTING SYSTEM 7
ii. PROPOSED SYSTEM 7-8
iii. REQUIREMENT SPECIFICATION
FUNCTIONAL REQUIREMENTS 9
NON-FUNCTIONAL REQUIREMENTS 9-10
4. SYSTEM DESIGN
i. SYSTEM ARCHITECTURE 11-12
4.i.1 DATABASE SCHEMA 12
4.i.2 DATA DICTIONARY 13
ii. UML DIAGRAMS 13-18
iii. INPUT OUTPUT DIAGRAM 18-19
5. IMPLEMENTATION
i. IMPLEMENTATION AND OVERVIEW 20
ii. TECHNOLOGIES USED
5.ii.1 FRONTEND TECHNOLOGY 21
5.ii.2 BACKEND TECHNOLOGY 21
5.ii.3 DATABASE INTEGRATION 21
iii. FEASIBILITY STUDY 22-23
6. CODING 24-35
7. SYSTEM TESTING
i. TESTING 36-38
8. OUTPUT SCREENS 39-43
9. CONCLUSION 44
10. FUTURE ENHANCEMENT 45
11. REFERENCE 46
LIST OF FIGURES
6 Sequence diagram 16
7 Activity diagram 17
8 Statechart diagram 18
9 Input Output diagram 19
10 Gantt chart 23
11 Test case 36
12 System testing 37
13 Login 39
14 Admin dashboard 39
15 Category management in admin 40
dashboard
16 Organization login 40
17 Organization dashboard (graphs 41
and report)
18 Monthly expenses report 41
19 Expenses management in an 42
organization
20 View an expense description 42
21 Add a new bill/expense from 43
organization
CHAPTER-1
INTRODUCTION
A daily expense tracker is a tool used to monitor and manage personal or business expenses
on a day-to-day basis. Tracker expenses daily can really help us save lot of money. It helps
individuals or organizations keep track of their spending, categorize expenses, set budgets and
analyze financial habits to make informed decisions. It will be able to generate your expense and
saving report as time duration you selected. They will be a reminder they will help to save money for
your pre-defined expenses.
Now a day’s people are concerned about regularity of their daily expenses. This is done
mainly for keep a track of the users’ daily expenses to have a control of users’ monthly expenses. We
have developed an web application named as “Expense Tracker” and this application is used to
manage the user‘s daily expenses and or any type of organisations in a more coherent and manageable
way. This application will help us to reduce the manual calculations for their daily expenses and also
keep the track of the expenses. With the help of this application, user/organization can calculate his
total expenses per day and these results will stored for unique user.
As the traditional methods of budgeting, we need to maintain the Excel sheets, Word
Documents, notes, and files for the user daily and monthly expenses. There is no as such full-fledged
solution to keep a track of our daily expenses easily. Keeping a log in diary is a very monotonous
process and also may sometimes lead into problems due to the manual calculations. Looking on all
the above given conditions, we are trying to satisfy the user requirements by building a mobile
application which will help them reduces their burdens. “Expense Tracker Application” is an
application where one can enter their daily expenses and end of the day, they know their expenses in
charts.
User initially enrolls himself in this application so that he could automatically login in using
his username and password into the application. User enters the saving amount initially, followed by
setting up the expense limit. Then user adds up expenses on daily basis or as per his convenience.
The application can predict users income and expenditure more efficiently. Systematic Budgeting
and Tracking expense is a risky and crucial task in the case of managing the expenditure of
organizations.
1
Expense Tracker application makes work easier in case of organizations. It includes many
advantages and most helpful for the organization stalk holders for process of expenses. Expenses and
more efficiently handled by organization by using this application. Expense application will help you
in controlling unwanted expenses. This expense tracking applications has various advantages and
benefits and makes the organization to function smoother and faster.
1.1 Motivation
Organizations of all types struggle with managing budgets and expenses effectively. Manual
processes are time-consuming and prone to errors, while a lack of real-time data hinders smart
financial decisions. A dedicated budget and expense tracker app offers a compelling solution. By
providing real-time insights, streamlining reporting, and enhancing collaboration, this app empowers
organizations to gain control over finances, optimize resource allocation, and make data-driven
decisions for long-term financial success.
1.2 Problem Definition
Many organizations struggle to effectively manage their daily expenses, leading to financial
stress, overspending and difficulty in achieving financial goals. Without a systematic way to track
and analyze expenses, people may find it challenging to understand their spending patterns, identify
areas for saving and stick to a budget. Therefore, there is a need for a simple and efficient solution
that allows organizations to easily track their expenses, categorize transactions, set budgets and gain
insights into their financial habits to make informed decisions and achieve better financial stability.
Problem Statement:
Many organizations struggle with effectively managing their budgets and tracking expenses.
They often rely on manual processes, which can be time-consuming and prone to errors. This leads
to difficulties in accurately monitoring spending, analyzing financial data, and making informed
decisions. There is a need for a user-friendly and efficient web app that can streamline budget
management and expense tracking for organizations, providing real-time insights and empowering
them to optimize their financial resources.
1.3 OBJECTIVES
Four important objectives of a daily tracker include:
1. EXPENSE MONITORING
2. BUDGET MANAGEMENT
3. FINANCIAL AWARENESS
2
4. GOAL ACHIEVEMENT
1. Expense Monitoring:
The primary objective of a daily expense tracker is to monitor and record all expenses
incurred by an individual or organization on a day-to-day basis. This includes categorizing expenses
such as groceries, utilities, transportation and entertainment to gain a comprehensive understanding
of where money is being spent.
2. Budget management:
Another key objective is to facilitate effective budget management. A daily expense tracker
helps users set financial goals and allocate budgets for different expense categories. By comparing
actual spending against budgeted amounts, users can identify areas of overspending and make
adjustments to stay within their financial limits.
3. Financial awareness:
Daily expense tracker aim to provide users with insights into their spending habits and
patterns. By visualizing their expenses through charts, graphs and reports, users can identify trends,
understand their financial behavior and make informed decisions to improve their financial health.
4. Goal achievement:
A daily expense tracker serves the objective of helping users achieves their financial goals.
Whether it's saving for a vacation, paying off debt or building an emergency fund, the tracker allows
users to track progress towards their goals and adjust their spending habits accordingly to stay on
track and accomplish their objectives.
3. Financial analysis:
3
It provides tools for analyzing spending patterns, trends and habits, enabling users to make
forward informed financial decisions and adjustments.
4. Goal setting:
Daily expenses tracker often include features for setting financial goals such as saving for
emergencies, vacations or major purchases and tracking progress towards these goals.
5. Ease of use:
They offer user-friendly interface and intuitive design to make expense tracking and
management accessible to users of all levels of financial literacy.
6. Accessibility:
Daily expenses trackers are typically available on multiple platforms including web-based platforms
and desktop software, allowing users to access their financial data anytime, anywhere.
1.4.2 LIMITATIONS
1. Manual Data Entry:
One limitation is the reliance on manual data entry, which can be time-consuming and prone
to errors, leading to incomplete or inaccurate financial records.
2. Dependency on User Input:
The effectiveness of a daily expense tracker depends on users consistently inputting their
expenses and updating their financial information, which may not always occur due to forgetfulness
or lack of motivation.
3. Limited Scope of Analysis:
While they provide insights into daily spending habits, daily expenses trackers may have
limited capabilities for in-depth financial analysis compared to more comprehensive financial
management tools.
4. Privacy and Security Concerns:
Users may have concerns about the privacy and security of their financial data, especially if
the tracker is connected to online banking accounts or stores sensitive information.
5. Cost:
While many daily expenses trackers offer free versions or basic features, more advanced
functionalities may require a subscription or purchase, which can be a barrier for some users.
4
CHAPTER-2
LITERATURE SURVEY
Daily expense trackers are tools designed to help organization monitor and manage them
spending habits effectively. This literature review aims to explore the benefits, features, and
effectiveness of daily expense trackers in promoting financial awareness and responsible money
management. Studies have shown that tracking daily expense can lead to increase financial awareness
and improved spending habits. By keeping a record of daily expenditures, Organization gains insights
into their spending patterns and can identify areas where they can cut costs or save money.
Digital expense tracking apps offer various features such as Expense categorization, budget
setting and financial goal tracking. These apps provide users with real-time updates on their financial
status, making it easier to stay within budget and avoid overspending.
Research suggests that using daily expense tracker can lead to positive changes in spending
behavior and financial outcomes. By monitoring their expenses regularly, organizations become
more mindful of their financial decisions and more likely to stick to their budget.
Despite their benefits, daily expense trackers may face challenges such as user fatigue, data
privacy concerns and compatibility issues with different devices. Some users may also find it difficult
to accurately categorize expenses or remember to input their transactions regularly.
Daily Expense Tracker valuable tools are promoting financial awareness and responsible
spending habits. While they offer various benefits, it is essential to address the challenges and
limitations associated with their use to maximize their effectiveness in helping organizations achieve
their financial goals.
These studies demonstrate the need for a more streamlined and automated approach to
expense management.
Web-based Solutions for Improved Expense Management:
Web-based expense tracking apps offer a promising solution to the challenges of manual
methods. Research suggests these apps can empower users with greater control over their spending.
Manchanda's study suggests that expense tracking apps can help users monitor expenses more
effectively, potentially leading to cost reductions.
5
Furthermore, Bekaroo and Sunhaloo (2014) in "Intelligent Online Budget Tracker"
emphasize the benefits of online accessibility and real-time data. This real-time data is crucial for
informed financial decisions within an organization.
Security and User Experience: Key Considerations
While web-based expense tracking offers advantages, security and user experience remain
critical considerations. Research on Expenditure Management Systems (ResearchGate) highlights
the need for secure data storage and access controls to protect sensitive financial information. A user-
friendly interface is also essential for widespread adoption within an organization. As discussed in
"Personal Expense Tracker Application", a clunky or confusing interface can discourage users from
engaging with the system.
The existing literature strongly supports the development of a web app for budget and expense
tracking in organizations. Such a system can address the limitations of manual methods, promoting
financial control, optimized resource allocation, and data-driven decision making. Future research
can explore specific features and functionalities that cater to the diverse needs of different
organizations, such as integration with existing accounting software or advanced analytics tools.
6
CHAPTER-3
SYSTEM ANALYSIS
7
The best organizations have a way of tracking and handling these reimbursements. This ideal
practice guarantees that the expenses tracked are accurately and in a timely manner. From a company
perspective, timely settlements of these expenses when tracked well will certainly boost employees'
morale. Additional feature of Expense and income prediction helps to better budget management.
Advantages:
The best organizations have a way of tracking and handling these reimbursements. This ideal
practice guarantees that the expenses tracked are accurately and in a timely manner. From a
company perspective, timely settlements of these expenses when tracked well will certainly
boost employees' morale.
Financially Aware and Improve Money Management tracking your expenditures ensures you
achieve your project financial targets. How is that? By clearly understanding your project
spending using project budget limits, you can aptly make the necessary changes to complete
your project within time and budget.
Effective expense tracking and reporting to avoid conflict. As a project manager or business
owner, you can set clear policies for the expense types and reimbursement limits to avoid
misunderstandings are about costs. Tracking the project expenses by asking team members
to provide receipts is helpful to avoid conflict and maintain compliance also. An excellent
reporting mechanism is extremely helpful to support the amount to be reimbursed to your
team and also invoicing to your customer.
Helps anticipate the costs of similar projects When you formally track and report expenses,
you have a permanent documentation which helps you correctly anticipate expenses for
similar projects in the future. This is even more significant when it comes to budget-making
process.
Tracking the amount of money spent on the projects is important to invoice customers and
determine the cost & profitability analysis when your company is providing services to
another company. On the other hand, expense tracking or internal project is important for cost
and ROI calculation. Understanding how this money is being utilized across the project is
such a significant issue. The consequence for not properly tracking and reporting project
expenses may lead to a budgetary issues.
8
3.3 REQUIREMENT SPECIFICATION
9
HARDWARE SPECIFICATION:
Processor: i3
RAM: 4GBRAM
Hard Disk: 120GB
Web browser: Mozilla, Google chrome, OPERA
SOFTWARE SPECIFICATION:
Operating System: WINDOWS 8
Front End: HTML, CSS, Materialize
Back End: Python, Flask
Database – MySQL
Server: XAMPP server
10
CHAPTER-4
SYSTEM DESIGN
Imagine the tracker as a digital system with different parts working together:
User Interface (UI): This is what you see and interact with, like the screens and buttons on
your phone or computer.
Backend: This is where all the magic happens behind the scenes. It stores your data, does
calculations, and makes sure everything runs smoothly.
Database: Think of this as a big filing cabinet where all your expense records are stored. It
keeps everything organized so you can easily find what you're looking for.
Integration: Sometimes the tracker might connect with other services, like your bank or
budgeting apps, to automatically import transactions or provide additional features.
HOW IT WORKS:
11
Here's how the daily expense tracker works:
You open the application and log in with your account.
You enter your expenses for the day, like how much you spent on rent, salaries, stationery
etc.
The tracker saves this information in the database and updates your spending totals.
You can then view reports or summaries to see where your money is going and if you're
sticking to your budget.
BENEFITS:
The daily expenses tracker helps you:
Stay organized: By keeping all your spending records in one place.
Budget better: By showing you where you're spending the most and where you might need
to cut back.
Plan ahead: By giving you insights into your spending habits overtime, helping you make
smarter financial decisions.
12
There are five tables in our application database which are user, share, expense, participation,
and project details. In the above diagram the tables cover their respective details of the user and their
fields.
The below table explains about the data of Daily Expense Tracker of a user in that clearly it
was explaining about the day-to-day expense of a user like food, transportation, entertainment etc.
I. Class Diagram:
13
DET application have five entities: expense, user, category, which have their own data
members and methods. The below diagram shows the flow of functionality from entity to entity.
Also, types of data members and methods of respective entity are mentioned above.
14
Manage Users (Admin): This use case represents the administrator's ability to create and manage
user accounts, assign access levels, and set spending limits for different users or departments.
Define Budgets (Admin): This use case represents the administrator's ability to define overall
budgets for the organization or individual departments/projects. They can also allocate budgets to
specific categories or expense types.
Add Expenses: This usecase represents a scenario where expenses exceeding a certain limit require
approval from a designated administrator. The use case would involve functionalities for submitting
expenses for approval, reviewing them by the administrator, and tracking the approval status.
Objects:
15
User Interface (UI): This represents the app's interface where the user interacts with the
system.
Expense Service: This represents the software component responsible for handling expense
data, including adding, editing, and retrieving expenses.
Budget Service: This represents the software component responsible for managing budget
information, including accessing allocated budgets for specific categories.
Data Storage: This represents the database or storage system where expense and budget
data is persisted.
16
IV. Activity Diagram:
An activity diagram for a budget and expense tracker app depicts the workflow of a specific
process, highlighting the activities, decisions, and transitions involved. Here's a breakdown for the
"Track Expense" use case:
Start: User opens the app and wants to track an expense.
Enter Expense Details: User interacts with the UI to enter details like amount, date,
vendor, and expense category.
Save Expense Data: The validated expense details are saved in the data storage.
Update Budget: If budget tracking is enabled, the system updates the remaining budget for
the chosen category by subtracting the expense amount.
End: The user has successfully tracked their expense and can exit the process.
17
V. Statechart Diagram:
18
Fig 9: Input Output diagram
19
CHAPTER-5
IMPLEMENTATION
20
5.2.1 Front End Technology
For the front end of daily expense tracker using HTML, CSS, MATERIALIZE, you can
consider using the following:
HTML (Hyper Text Markup Language):
The backbone of any web application, HTML(Hyper Text Markup Language) will be used to
structure the content of your expense tracker application, including forms for inputting expenses,
tables for displaying expense data and other UI elements.
CSS (Cascading style sheets):
CSS will be used for styling the HTML elements, making the expense tracker visually
appealing and user-friendly. You can use CSS to define colors, fonts, layouts and other visual aspects
of your application.
Materialize:
Materialize is a modern responsive front-end framework based on Material Design principles.
It provides a set of CSS and JavaScript components that help in creating attractive and responsive
user interfaces.
Expense Table:
This table stores individual expense records for each user. It may include fields such as:
Expense ID (Primary Key)
User ID (Foreign Key referencing the User Table)
Date of Expense
Category (e.g., Salary, Transportation, Entertainment)
Amount
Description
Timestamp (for when the expense was added)
CATEGORY TABLE:
This table stores predefined categories that users can choose from when adding expenses. It may
include fields such as:
Category ID (Primary Key)
Category Name
With this database structure in place, you can perform various operations such as adding,
retrieving, updating and deleting expenses for each user. You can also generate reports and analyze
expense data based on different criteria such as date category or user.
22
The economic feasibility of a daily expense tracker refers to whether it makes financial sense
to develop, operate, and maintain the application. In simple terms, it means considering whether the
benefits of having the expense tracker our weight the costs associated with building and using it.
Also, the user does not need to pay a single penny to use this application. Just use of web browser
and hence, DET is economically feasible for any one with the web application.
Scheduling Feasibility:
Schedule feasibility means that a project can be implemented in an acceptable time frame. The
technology may be there but that doesn't ensure the skills required to properly apply that technology.
All information systems professionals can learn new technologies. However, that The learning curve
will impact the schedule. Some projects are initiated with specific deadlines that need to be
determined whether they are.
Mandatory or
Desirable
23
CHAPTER-6
CODING
PSEUDO CODE:
app.py
from flask import Flask, session, request, render_template, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import or_
from datetime import datetime
from werkzeug.utils import secure_filename
import os
app = Flask( name , template_folder="templates", static_folder="static")
app.secret_key = '$(*@^G0K0W0B0K0D*&^T*@3272y738121@!@)'
# Database connections
# mysql://username:password@hostname:port/database
app.config['SQLALCHEMY_DATABASE_URI'] =
'mysql://root:@localhost:3306/expense_tracker'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True # Disable modification
tracking
db = SQLAlchemy(app)
UPLOAD_FOLDER = 'static/assets' # Update this with the actual path to your assets folder
ALLOWED_EXTENSIONS = {'pdf', 'png', 'jpg', 'jpeg'} # Specify allowed file extensions
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
class Organization(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
email = db.Column(db.String(120), unique=True, nullable=False)
password = db.Column(db.String(120), nullable=False)
approved = db.Column(db.Boolean, nullable=False, default=False)
name = db.Column(db.Text, nullable=False)
mobile = db.Column(db.String(10), unique=True, nullable=False)
total_budget = db.Column(db.Float, nullable=False)
available_budget = db.Column(db.Float, nullable=False)
expenses = db.relationship('Expenses', backref='organization', lazy=True)
def repr (self):
return f'<Organization {self.email}>'
class Admin(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
email = db.Column(db.String(120), unique=True, nullable=False)
password = db.Column(db.String(120), nullable=False)
def repr (self):
return f'<Admin {self.email}>'
class Category(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(120), nullable=False)
24
status = db.Column(db.Boolean, nullable=False, default=True)
created_at = db.Column(db.DateTime, default=datetime.utcnow)
expenses = db.relationship('Expenses', backref='category', lazy=True)
def repr (self):
return f'<Category {self.name}>'
class Expenses(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(120), nullable=False)
description = db.Column(db.Text, nullable=False)
amount = db.Column(db.Float, nullable=False, default=0)
status = db.Column(db.Boolean, nullable=False, default=True)
date = db.Column(db.DateTime, nullable=False)
image = db.Column(db.Text)
created_at = db.Column(db.DateTime, default=datetime.utcnow)
# Foreign key relationships
category_id = db.Column(db.Integer, db.ForeignKey('category.id'), nullable=False)
organization_id = db.Column(db.Integer, db.ForeignKey('organization.id'), nullable=False)
def repr (self):
return f'<Category {self.name}>'
def checkSession():
if session.get("isAdminLoggedIn"):
return {"id": session.get("id"), "userType": "ADMIN"}
elif session.get("isOrganizationLoggedIn"):
organization = Organization.query.filter_by(id=session.get("id")).first()
return {"id": session.get("id"), "userType": "ORG", "organization": organization}
else:
return None
@app.route("/logout", methods=["GET"])
def logout():
session.clear()
return redirect(url_for("login", success="Logout Success!"))
# Admin routes
@app.route("/admin/dashboard", methods=["GET"])
def admin_dashboard():
if checkSession():
success = request.args.get("success")
all_organizations = Organization.query.all()
return render_template("admin_dashboard.html", all_organizations=all_organizations,
success=success)
else:
return redirect(url_for("login"))
@app.route("/create_admin", methods=["GET"])
def create_admin():
# Example JSON data for creating a new admin
admin_data = {
'email': '[email protected]',
'password': 'password123'
}
25
# Organization Routes
def create_org(org_data):
# Create a new admin object
new_admin = Organization(**org_data)
# Add the new admin object to the session and commit the changes to the database
db.session.add(new_admin)
db.session.commit()
return True
@app.route("/signup", methods=["GET", "POST"])
def org_signup():
userLoggedInCheck = checkSession()
if userLoggedInCheck:
return redirectToCorrectRoute(userLoggedInCheck)
else:
if request.method == "POST":
email = request.form.get('email')
password = request.form.get('password')
name = request.form.get('name')
mobile = request.form.get('mobile')
total_budget = request.form.get('total_budget')
organization = Organization.query.filter(
or_(Organization.email == email, Organization.mobile == mobile)
).first()
if organization:
return redirect(url_for("login", error="Organization already exists with the
Mobile/Email."))
create_org({
'email': str(email),
'password': password,
'name': name,
'mobile': mobile,
'total_budget': int(total_budget),
'available_budget': int(total_budget),
})
return redirect(url_for("login", success="Organization created successfully!"))
return render_template("signup.html")
return redirect(url_for("login"))
@app.route('/category/add', methods=["POST"])
def add_category():
check = checkSession()
if check:
category_name = request.form.get('name')
category = Category.query.filter_by(name=category_name).first()
if not category:
new_category = Category(name=category_name)
db.session.add(new_category)
db.session.commit()
return redirect(url_for("category_management", success="New category added."))
26
else:
return redirect(url_for("category_management", error="Already a category exists with this
name."))
@app.before_request
def create_tables():
with app.app_context():
db.create_all()
if name == " main ":
app.run(port=8000, debug=True)
admin_nav.html
<style>
nav {
padding: 0rem 1rem;
}
</style>
<nav style="background-color: #198b73;">
<div class="nav-wrapper">
<a href="/" class="brand-logo">Dashboard</a>
<ul id="nav-mobile" class="right hide-on-med-and-down">
{% if check and check['userType'] == "ORG" %}
<li><a href="#" style="display: flex; align-items: center;"> <i class="material-icons"
style="margin-right: 4px;">attach_money</i><span class="white-text" style="font-weight:
500;margin-right: 4px;">{{ check.organization.available_budget | round(2) }}</span> </a></li>
<li><a href="/expenses" style="display: flex; align-items: center;"> <i class="material-
icons" style="margin-right: 4px;">account_balance</i>Expenses Management</a></li>
{% endif %}
<li><a href="/category" style="display: flex; align-items: center;"> <i class="material-
icons" style="margin-right: 4px;">list</i>Category Management</a></li>
<li><a href="/logout" style="display: flex; align-items: center;"> <i class="material-icons"
style="margin-right: 4px;">power_settings_new</i>Logout</a></li>
</ul>
</div>
</nav>
admin_dashboard.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Admin dashboard</title>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</head>
<body>
27
{% include "admin_nav.html" %}
<div style="color: #01172f; padding: 0rem 4rem;">
<h4>List of organizations</h4>
<table>
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Email</th>
<th>Mobile</th>
<th>Approved</th>
<th>Action</th>
</tr>
</thead>
<tbody>
{% for organization in all_organizations %}
<tr>
<td>{{organization.id}}</td>
<td>{{organization.name}}</td>
<td>{{organization.email}}</td>
<td>{{organization.mobile}}</td>
<td> {% if not organization.approved %}
No
{% else %}
Yes
<script>
$(document).ready(function () {
var toastHTML = '{{ error }}';
if (toastHTML && toastHTML != "None")
setTimeout(() => {
M.toast({ html: toastHTML, classes: "red rounded" });
}, 100)
var successToastHTML = '{{ success }}';
if (successToastHTML && successToastHTML != "None")
setTimeout(() => {
M.toast({ html: successToastHTML, classes: "green rounded" });
}, 100)
});
</script>
</body>
</html>
category.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Category Management</title>
28
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</head>
<body>
{% include "admin_nav.html" %}
<div style="color: #01172f; padding: 0rem 4rem;">
<div style="display: flex; align-items: center; justify-content: space-between;">
<h4>List of categories</h4>
<a class="waves-effect waves-light btn modal-trigger blue" href="#modal1"
style="display: flex;align-items: center;">
<i class="material-icons" style="margin-right: 4px;">add</i>
Add Category</a>
<div>
<form action="/category/add" method="post">
<div class="row">
<div class="input-field col s6">
<input id="name" type="text" name="name" class="validate" required>
<label for="name">Name</label>
</div>
<div class="input-field col s6">
<button class="btn green">Submit</button>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="row">
{% if categories | length > 0 %}
{% for category in categories %}
<div class="col s12 m3">
<div class="card">
<div class="card-content">
<div style="display: flex;align-items: center;">
<h5>
{{category.name}}
</h5>
{% if not category.status %}
<div class="left">
<span class="badge red white-text rounded">Deleted</span>
</div>
{% endif %}
</div>
<div>
{% if not category.status %}
<a href="/category/delete/{{category.id}}/True"
29
class="btn-floating halfway-fab waves-effect waves-light green"><i
class="material-icons">check</i></a>
{% else %}
<a href="/category/delete/{{category.id}}/False"
class="btn-floating halfway-fab waves-effect waves-light red"><i
class="material-icons">delete</i></a>
{% endif %}
</div>
</div>
</div>
</div>
{% endfor %}
{% else %}
<div>
<h5>No data found!</h5>
</div>
{% endif %}
</div>
</div>
<script>
$(document).ready(function () {
$('.modal').modal();
var successToastHTML = '{{ success }}';
if (successToastHTML && successToastHTML != "None")
setTimeout(() => {
M.toast({ html: successToastHTML, classes: "green rounded" });
}, 100);
var toastHTML = '{{ error }}';
if (toastHTML && toastHTML != "None")
setTimeout(() => {
M.toast({ html: toastHTML, classes: "red rounded" });
}, 100)
});
</script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
</body>
</html>
signup.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Registration</title>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
<link rel="stylesheet"
30
href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</head>
<body>
<div class="container">
<h4>Register an Organization</h4>
<form action="/signup" method="post">
<div class="row">
<div class="input-field col s6">
<input id="name" type="text" name="name" class="validate" required>
<label for="name">Name</label>
</div>
<div class="input-field col s6">
<input id="mobile" type="number" name="mobile" class="validate" required>
<label for="mobile">Mobile</label>
</div>
<div class="input-field col s6">
<input id="email" type="email" name="email" class="validate" required>
<label for="email">Email</label>
</div>
<button type="submit" class="btn green" style="width: 100%;">Register</button>
<div style="display: flex; justify-content: end; align-items: center; margin-top: 1rem;">
Already have an account? <a href="/" style="margin-left: 4px;">Login</a>
</div>
</form>
</div>
</body>
</html>
org_dashboard.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dashboard</title>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<script src="https://www.gstatic.com/charts/loader.js"></script>
</head>
<body>
{% include "admin_nav.html" %}
<div style="width: 100%; padding: 1rem;">
<h4>Welcome {{organization.name}}</h4>
31
<div class="row">
<div class="col m12 card">
<div id="expenses_chart"></div>
</div>
<div class="col m12 card">
<div id="monthly_expenses_chart_pie"></div>
</div>
<div class="col m12 card">
<div id="expenses_chart_pie"></div>
</div> </div> </div>
// Assuming categories and expenses are defined earlier in your code
const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',
'September', 'October', 'November', 'December'];
const firstEle = ['Month', ...months];
// Create an object to hold amounts for each category
const categoryAmounts = {};
categories.forEach(category => {
categoryAmounts[category.name] = [];
});
return row;
});
// Insert the firstEle row and dataRows into the DataTable
var data = google.visualization.arrayToDataTable([
firstEle,
...dataRows
]);
var options = {
title: 'Monthly Category-wise Expenses',
isStacked: false,
height: 400,
};
var chart = new
google.visualization.ColumnChart(document.getElementById('expenses_chart'));
chart.draw(data, options);
}
function drawChartPie() {
// Assuming categories and expenses are defined earlier in your code
const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',
'September', 'October', 'November', 'December'];
object into an array of arrays for Google Visualization
const dataRows = Object.entries(categoryTotals).map(([category, total]) => [category,
total]);
// Insert the dataRows into the DataTable
var data = google.visualization.arrayToDataTable([
['Category', 'Total Amount'],
...dataRows
]);
var options = {
32
title: 'Total Expenses by Category',
height: 500,
};
var chart = new
google.visualization.PieChart(document.getElementById('expenses_chart_pie'));
chart.draw(data, options);
}
function drawChartMonthly() {
// Assuming categories and expenses are defined earlier in your code
const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August',
'September', 'October', 'November', 'December'];
// Create an object to hold total amounts for each month
const monthTotals = {};
months.forEach(month => {
monthTotals[month] = 0;
});
// Populate the monthTotals object with total amounts for each month
expenses.forEach(expense => {
const expenseDate = new Date(expense.date);
const month = months[expenseDate.getMonth()];
monthTotals[month] += expense.amount;
});
// colors
};
var chart = new
google.visualization.ColumnChart(document.getElementById('monthly_expenses_chart_pie'));
chart.draw(data, options);
}
</script>
</body>
</html>
expenses.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Category Management</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</head>
<body>
{% include "admin_nav.html" %}
<div style="color: #01172f; padding: 0rem 4rem;">
<div style="display: flex; align-items: center; justify-content: space-between;">
33
<h4>List of Expenses</h4>
<a class="waves-effect waves-light btn modal-trigger blue" href="#modal1"
style="display: flex;align-items: center;">
<i class="material-icons" style="margin-right: 4px;">add</i>
Add Expense</a>
</div>
<div id="modal1" class="modal">
<div class="modal-content">
<div style="display: flex; align-items: center; justify-content: space-between;">
<h4>Add an expense</h4>
<a href="#!" class="modal-close waves-effect waves-green btn-flat red-text"><i
class="material-icons">close</i></a>
</div>
<div>
<form action="/expenses/add" method="post" enctype="multipart/form-data">
<div class="row">
<div class="input-field col s6">
<input id="name" type="text" name="name" class="validate" required>
<label for="name">Name</label>
<div class="input-field col s6">
<input id="amount" step="0.01" type="number" name="amount" class="validate" required>
<label for="amount">Amount</label>
</div>
<div class="input-field col s6">
<input id="date" type="date" name="date" class="validate" required>
<label for="date">Date</label>
</div>
<div class="input-field col s6">
<div class="file-path-wrapper">
<input class="file-path validate" type="text" placeholder="Upload an image">
</div>
</div>
<div class="input-field col s6">
<button class="btn green" type="submit">Submit</button>
</div> </div> </form> </div> </div> </div>
<div class="card-image">
{% if expense.image != None %}
<img src="/static/assets/{{expense.image}}" style="max-height: 20rem;" />
{% else %}
<img src="https://encrypted-
tbn0.gstatic.com/images?q=tbn:ANd9GcRwrfuFM1mJ3C81T7HmBC-
4grVn_2pHmo3anbYisceq7A&s"
style="max-height: 20rem;" />
{% endif %}
</div>
<div class="card-content">
<div>
<h5>
34
{{expense.name}}
<p class="green-text right">${{expense.amount}}</p>
</h5>
<p style="font-size: 12px;">{{expense.date}}</p>
<p style="color: #303030;" class="truncate">{{expense.description}}</p>
</div>
35
CHAPTER-7
SYSTEM TESTING
7.1 TESTING
Testing is crucial for ensuring the reliability and functionality of a daily expense tracker
application. Here's how you can approach testing for your expense tracker.
1. UNIT TESTING:
Write unit tests to test individual components of your application such as functions, methods,
and classes.
For example:
Test functions that perform calculations or data manipulation.
Test methods in your controllers that handle CRUD operations for expenses.
Test utility functions for formatting dates or validating input.
Test the interaction between different components of your application, such as the interaction
between backend and the database.
For example:
36
Test API endpoints to ensure they return the expected responses for various inputs.
37
Test Database queries to ensure they retrieve the correct data.
3. System testing:
System testing for a daily expense tracker involves testing the entire system as a whole to ensure that
all components work together correctly and meet the specified requirements.
38
FUNCTIONAL AND NON-FUNCTIONAL TESTING
i. Functional Testing:
Functional testing is a type of software testing that evaluates the system's functionality by
testing its features against the specified requirements. The focus is on what the system does. It ensures
that the software behaves as expected, performs its functions correctly, and meets the business
requirements.
ii. Non-Functional Testing:
Non-functional testing evaluates aspects of the software that are not related to specific
behaviours or functions. It focuses on characteristics such performance, usability, reliability, and
security.
39
CHAPTER-8
OUTPUT SCREENS
40
Fig 15: Category management in Admin dashboard
41
Fig 17: Organization Dashboard (Graphs and Reports)
42
Fig 19: Expenses management in an organization
43
Fig 21: Add a new bill/ Expense from organization
44
CHAPTER-9
CONCLUSION
In conclusion, a daily expense tracker is a valuable tool for organization to manage their
finances effectively. By accurately recording expenses, users can gain insight into their spending
habits, identify areas for savings and maintain better control over their budget. With the right features,
such as intuitive user interface, robust backend functionality and secure data management, a daily
expense tracker can empower users to make informed financial decisions and achieve their financial
goals.
Whether it's for personal budgeting, expense tracking for businesses or simply staying
organized, a well-designed expense tracker can be a practical and essential tool for anyone looking
to manage their finances efficiently.
45
CHAPTER-10
FUTURE ENHANCEMENT
The Future Enhancements of the application can be allowed to support in all the upcoming
android versions. History can be set to view all the details in the app even if the particular data is
deleted from the database. Statistics could be prepared based on the Income, Expense details of the
user. Sharing files via Bluetooth, WhatsApp can be allowed. Printing the details of the particular
income or expense details can be made. Some of the extra components are like enabling users to
register to the application using existing email or social network account, it will synchronize the users
profile data to the application.Building on the core functionalities, here are some exciting possibilities
for future enhancements to your budget and expense tracker app:
Advanced Analytics & AI Integration:
Predictive Analytics: Leverage AI to predict future spending patterns and suggest areas for
potential cost savings.
Prescriptive Analytics: Go beyond prediction with AI-powered recommendations for
optimizing budgets and resource allocation.
Spend Category Detection: Utilize AI to automatically categorize expenses based on receipt
information, eliminating manual data entry for users.
46
CHAPTER-11
REFERENCES
[1] http://expense-manager.com/how-expense software/
[2] https://www.splitwise.com/terms
[3] http://code.google.com/p/socialauthandroid/wiki/Facebook
[4] http://code.google.com/p/socialauth-android
[5] Developer.android.com
[6] http://www.appbrain.com/app/expensemanager/ com.expensemanager
[7] https://www.xpenditure.com/en?
[8] http://expense-manager.com/how-expense software/
[9] Donn Felker, “Android Application Development for Dummies”, published by For Dummies,
2010.
[10] Ed Burnette, “Hello, Android: Introducing Google's Mobile Development Platform”, published
by Pragmatic Bookshelf, 2009.
[11] Lee, “Beginning Android Application Development”, Published by WroxPress, 2011.
[12] Reto Meier, “Professional Android™ 2 Application Development”, published by Wiley
publishing, 2010.
[13] Zigurd Mednieks (Goodreads Author), Laird Dornin, G. Blake Meike, Masumi Nakamura,
Programming Android, published by O'Reilly Media,2011
47