You are on page 1of 55

lOMoARcPSD|19159960

MAD Report

Mobile Application Development (D. Y. Patil College of Engineering & Technology)

Scan to open on Studocu

Studocu is not sponsored or endorsed by any college or university


Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)
lOMoARcPSD|19159960

Rationale
The Expense Manager microproject focused on developing a mobile
applica琀椀on to address the pervasive challenge of managing expenses
e昀케ciently. Rooted in the necessity for accessible 昀椀nancial
management tools, the project aimed to provide users with a
convenient solu琀椀on for tracking expenditures. Leveraging Firebase
Firestore and Authen琀椀ca琀椀on, the applica琀椀on ensured seamless data
storage, retrieval, and secure user authen琀椀ca琀椀on, thereby promo琀椀ng
trust and con昀椀den琀椀ality in managing sensi琀椀ve 昀椀nancial informa琀椀on.

The user interface design emphasized simplicity and usability,


adop琀椀ng a minimalist approach to enhance user experience. By
adhering to Material Design principles, the applica琀椀on achieved
consistency and familiarity, reducing cogni琀椀ve load and improving
engagement. Features such as adding income and expenses,
categorizing transac琀椀ons, and visualizing expenditure pa琀琀erns
empowered users with comprehensive 昀椀nancial insights, fostering a
sense of control and accountability.

Employing Java as the primary programming language and adhering


to industry best prac琀椀ces and design pa琀琀erns such as Model-View-
Controller (MVC), the codebase remained modular and
comprehensible. The integra琀椀on of RecyclerView for dynamic data
presenta琀椀on and PieChart visualiza琀椀on using the MPAndroidChart
library op琀椀mized performance and provided users with visually
appealing representa琀椀ons of expenditure distribu琀椀on. Overall, the
Expense Manager microproject aimed to provide users with a user-
friendly and e昀케cient tool for managing 昀椀nances e昀昀ec琀椀vely,
addressing the growing need for accessible and reliable expense
tracking solu琀椀ons in today's digital age.

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

Aim/Benefits of the Micro-project

 Aim of the Project:


The aim of the Expense Manager project is to develop a user-
friendly mobile applica琀椀on that helps individuals track their
expenses e昀昀ec琀椀vely. By providing features such as adding
income and expenses, categorizing transac琀椀ons, and visualizing
expenditure pa琀琀erns, the app aims to empower users with
comprehensive 昀椀nancial insights, promo琀椀ng be琀琀er 昀椀nancial
management and decision-making.

 Bene昀椀ts of the Micro-Project:


1. E昀케cient expense tracking
2. Accessibility
3. Data visualiza琀椀on
4. User-friendly interface
5. Secure data storage
6. Promo琀椀on of 昀椀nancial literacy
7. Scalability and extensibility

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

Course Outcomes Achieved & Actual


Resources Used
 Course Outcomes Achieved:
1. Interpret features of Android opera琀椀ng system.
2. Con昀椀gure Android environment and development tools.
3. Develop rich user interfaces by using layouts and controls.
4. Use User Interface components for Android applica琀椀on
development.

 Actual Resources Used:


Sr. Name of Specifications Qty Remarks
No. Resource/material

1 Computer Windows or Mac (i3 1 Used for coding the


– i5 preferable) with program, preparing
at least 4GB RAM & 昀氀owchart &
onwards algorithm,
preparing report
2 Knowledge about Implemented it in
Android OS the program

3 Understanding of Implemented it in
Android Applica琀椀on the program
Development using XML
& Java
4 An e昀케cient algorithm & 1 Used for
昀氀owchart each understanding the
working of program
5 An IDE or Code Editor Android Studio 1 Used for coding the
Hedgehog program

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

Actual Methodology Followed

1. Studied the previous literatures on the project to


be琀琀er understand the concept and func琀椀onality of
the project.

2. Prepare the algorithm for the project

3. Designed the 昀氀owchart for the project.

4. Coded the project’s program in a code editor

5. Tested and ran the program

6. . Documented the project.

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

Introduction to Expense Manager

Expense Manager is a mobile applica琀椀on designed to streamline the


process of tracking expenses and managing 昀椀nances e昀昀ec琀椀vely. In
today's fast-paced world, where 昀椀nancial literacy is becoming
increasingly important, this applica琀椀on serves as a valuable tool for
individuals seeking to gain be琀琀er control over their expenditures. By
providing intui琀椀ve features and a user-friendly interface, Expense
Manager aims to simplify the o昀琀en daun琀椀ng task of budge琀椀ng and
expense tracking.

At its core, Expense Manager o昀昀ers users a convenient pla琀昀orm to


record both income and expenses e昀昀ortlessly. With just a few taps,
users can input their 昀椀nancial transac琀椀ons, categorize them
accordingly, and visualize their spending pa琀琀erns over 琀椀me. This
simplicity not only saves 琀椀me but also promotes greater awareness
of one's 昀椀nancial habits, leading to more informed decision-making
regarding personal 昀椀nances.

Moreover, Expense Manager priori琀椀zes accessibility and security,


ensuring that users can access their 昀椀nancial data any琀椀me,
anywhere, without compromising on data protec琀椀on. Integra琀椀on
with Firebase Firestore guarantees seamless data storage and
retrieval, while Firebase Authen琀椀ca琀椀on o昀昀ers robust user
authen琀椀ca琀椀on, safeguarding sensi琀椀ve 昀椀nancial informa琀椀on. With
Expense Manager, users can embark on a journey towards 昀椀nancial
empowerment and achieve their 昀椀nancial goals with con昀椀dence.

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

Implementation
ExpenseAdapter.java:
The implementa琀椀on of the ExpenseAdapter Ac琀椀vity in the Expense
Manager project plays a crucial role in facilita琀椀ng the dynamic display
of expense records within the applica琀椀on. Developed as part of the
RecyclerView architecture, the ExpenseAdapter serves as the
intermediary between the data source containing expense models
and the RecyclerView responsible for rendering them on the user
interface.

Within the ExpenseAdapter, various methods are implemented to


manage the lifecycle of RecyclerView items. onCreateViewHolder()
in昀氀ates the layout for individual expense items, while
onBindViewHolder() binds the expense data to the corresponding
views within each item. Addi琀椀onally, getItemCount() determines the
total number of expense records to be displayed, ensuring e昀케cient
memory usage and smooth scrolling performance.

Moreover, the ExpenseAdapter incorporates a custom interface,


OnItemsClick, to handle user interac琀椀ons with individual expense
items. This enables users to view or edit speci昀椀c expense details
upon clicking on an item, enhancing the overall user experience.
Through careful implementa琀椀on and adherence to best prac琀椀ces, the
ExpenseAdapter Ac琀椀vity op琀椀mizes the presenta琀椀on of expense data,
contribu琀椀ng to the applica琀椀on's usability and e昀昀ec琀椀veness in
assis琀椀ng users with 昀椀nancial management.

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

AddExpenseAc琀椀vity.java:
The AddExpenseAc琀椀vity in the Expense Manager project serves as a
pivotal component for users to input new expenses or modify
exis琀椀ng ones within the applica琀椀on. Designed with simplicity and
usability in mind, the ac琀椀vity provides a straigh琀昀orward interface for
users to record essen琀椀al details such as the amount, note, category,
and type of expense.

Upon ini琀椀aliza琀椀on, the AddExpenseAc琀椀vity retrieves any relevant


data passed through intents, allowing users to edit exis琀椀ng expense
entries seamlessly. The layout incorporates various UI elements,
including EditText 昀椀elds for inpu琀�ng the expense amount, note, and
category, as well as RadioBu琀琀ons for selec琀椀ng the expense type
(Income or Expense). These elements are strategically arranged
within a LinearLayout to ensure op琀椀mal visibility and accessibility.

Listeners are implemented to detect user interac琀椀ons with the


RadioBu琀琀ons, enabling dynamic updates to the expense type based
on user selec琀椀on. Furthermore, menu op琀椀ons are provided for
saving or dele琀椀ng expense entries, enhancing the func琀椀onality and
user control within the ac琀椀vity.

The AddExpenseAc琀椀vity leverages Firebase Firestore for data storage


and retrieval, ensuring the seamless integra琀椀on of new expense
records into the applica琀椀on's database. By adhering to industry best
prac琀椀ces and design pa琀琀erns, such as Model-View-Controller (MVC),
the ac琀椀vity remains modular and maintainable, facilita琀椀ng future
enhancements and updates to meet evolving user needs.

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

ExpenseModel.java:
The ExpenseModel class in the Expense Manager project serves as
the backbone for represen琀椀ng individual expense records within the
applica琀椀on. This model encapsulates essen琀椀al a琀琀ributes such as the
expense ID, note, category, type, amount, 琀椀mestamp, and user ID,
providing a comprehensive representa琀椀on of each 昀椀nancial
transac琀椀on.

With a parameterized constructor, the ExpenseModel enables the


instan琀椀a琀椀on of expense objects with speci昀椀c a琀琀ributes, facilita琀椀ng
the crea琀椀on and manipula琀椀on of expense records throughout the
applica琀椀on. Addi琀椀onally, ge琀琀ers and se琀琀ers are implemented to
access and modify the a琀琀ributes of expense objects as needed,
ensuring 昀氀exibility and data integrity.

The inclusion of Firebase Firestore annota琀椀ons within the


ExpenseModel class enables seamless integra琀椀on with the Firestore
database, allowing expense data to be stored and retrieved
e昀케ciently. Furthermore, the implementa琀椀on of Serializable interface
ensures that expense objects can be easily serialized and passed
between ac琀椀vi琀椀es using intents, enhancing data transferability and
applica琀椀on usability.

By adhering to best prac琀椀ces in object-oriented design and database


integra琀椀on, the ExpenseModel class plays a vital role in enabling the
Expense Manager applica琀椀on to e昀昀ec琀椀vely manage and manipulate
expense data, empowering users with the tools they need to make
informed 昀椀nancial decisions.

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

MainAc琀椀vity.java:
The MainAc琀椀vity serves as the central hub of the Expense Manager
applica琀椀on, orchestra琀椀ng various func琀椀onali琀椀es and providing users
with a comprehensive overview of their 昀椀nancial data. Upon
launching the applica琀椀on, users are greeted with a user-friendly
interface that o昀昀ers seamless naviga琀椀on and access to essen琀椀al
features.

Within the MainAc琀椀vity, RecyclerView and ExpensesAdapter are


u琀椀lized to dynamically display expense records retrieved from the
Firebase Firestore database. This implementa琀椀on ensures that users
can easily visualize their expenditure pa琀琀erns and track their
昀椀nancial transac琀椀ons in real-琀椀me. Addi琀椀onally, the integra琀椀on of
PieChart visualiza琀椀on using the MPAndroidChart library enhances the
graphical representa琀椀on of income and expenses, providing users
with valuable insights into their 昀椀nancial health.

The MainAc琀椀vity also incorporates user interac琀椀on func琀椀onali琀椀es,


allowing users to add new expenses or income with the click of a
bu琀琀on. By providing intui琀椀ve op琀椀ons for expense management, such
as edi琀椀ng or dele琀椀ng expense records, the MainAc琀椀vity empowers
users to maintain accurate and up-to-date 昀椀nancial records
e昀昀ortlessly.

Furthermore, the MainAc琀椀vity priori琀椀zes user authen琀椀ca琀椀on and


data security through integra琀椀on with Firebase Authen琀椀ca琀椀on. This
ensures that users' 昀椀nancial data remains protected and accessible
only to authorized individuals, fostering trust and con昀椀dence in the
applica琀椀on.

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

Literature Review

Mobile Expense Management Applica琀椀ons


Mobile expense management applica琀椀ons have become increasingly
popular due to their ability to help users track and manage their
昀椀nances on-the-go. These applica琀椀ons o昀昀er various features such as
expense tracking, budge琀椀ng, categoriza琀椀on, and data visualiza琀椀on,
making them invaluable tools for personal 昀椀nance management.

Importance of Expense Management


E昀昀ec琀椀ve expense management is essen琀椀al for individuals and
businesses alike to maintain 昀椀nancial stability and achieve their
昀椀nancial goals. According to research by Ongore and Kusa (2013),
proper expense management can lead to improved 昀椀nancial
decision-making, reduced 昀椀nancial stress, and increased savings.

Features of Expense Management Applica琀椀ons


Expense Tracking: Expense management applica琀椀ons allow users to
track their expenses easily. This feature enables users to record all
their expenses accurately, including the amount spent, date, and
category of the expense.

Budge琀椀ng: Budge琀椀ng tools help users set spending limits for


di昀昀erent categories such as groceries, u琀椀li琀椀es, entertainment, etc. By
adhering to these budgets, users can control their spending and
avoid overspending.

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

Categoriza琀椀on: Categoriza琀椀on features automa琀椀cally classify


expenses into prede昀椀ned categories such as food, transporta琀椀on,
bills, etc. This simpli昀椀es the process of organizing and analyzing
expenses.

Data Visualiza琀椀on: Data visualiza琀椀on tools present expense data in


visually appealing charts and graphs. This visual representa琀椀on helps
users gain insights into their spending pa琀琀erns, iden琀椀fy trends, and
make informed 昀椀nancial decisions.

User Experience and Interface Design


The success of expense management applica琀椀ons heavily relies on
user experience (UX) and interface design. Research by Hasan and
Lekse (2019) emphasizes the importance of designing user-friendly
interfaces that are intui琀椀ve and easy to navigate. Clear labeling,
minimalis琀椀c design, and intui琀椀ve work昀氀ows contribute to a posi琀椀ve
user experience.

Security and Privacy


Security and privacy are paramount in expense management
applica琀椀ons, as they deal with sensi琀椀ve 昀椀nancial informa琀椀on.
Research by Raza et al. (2020) highlights the importance of
implemen琀椀ng robust security measures such as encryp琀椀on,
authen琀椀ca琀椀on, and secure data storage to protect user data from
unauthorized access and cyber threats.

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

Integra琀椀on with Cloud Services


Integra琀椀on with cloud services enables users to access their expense
data from mul琀椀ple devices and synchronize data across pla琀昀orms
seamlessly. Research by Lin et al. (2016) suggests that cloud-based
expense management solu琀椀ons o昀昀er greater 昀氀exibility, scalability,
and accessibility compared to tradi琀椀onal o昀툀ine applica琀椀ons.

Mobile Applica琀椀on Development


Developing mobile expense management applica琀椀ons involves
u琀椀lizing various technologies and frameworks such as Android
Studio, Firebase, and third-party libraries. Research by Desai and
Purohit (2017) discusses the challenges and best prac琀椀ces in mobile
applica琀椀on development, including UI/UX design, performance
op琀椀miza琀椀on, and tes琀椀ng methodologies.

Conclusion
In conclusion, mobile expense management applica琀椀ons play a vital
role in helping individuals and businesses manage their 昀椀nances
e昀昀ec琀椀vely. By o昀昀ering features such as expense tracking, budge琀椀ng,
categoriza琀椀on, and data visualiza琀椀on, these applica琀椀ons empower
users to take control of their 昀椀nancial health. However, developers
must priori琀椀ze user experience, security, and integra琀椀on with cloud
services to create successful and impac琀昀ul expense management
solu琀椀ons.

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

Algorithm
Step 1: Ini琀椀aliza琀椀on
- Ini琀椀alize necessary variables and data structures.
- Set up Firebase authen琀椀ca琀椀on and Firestore database connec琀椀on.
- Create necessary UI components using XML layout 昀椀les.

Step 2: De昀椀ne ExpenseModel Class


- De昀椀ne a class `ExpenseModel` to represent individual expense
entries.
- Include 昀椀elds such as `expenseId`, `note`, `category`, `type`,
`amount`, `琀椀me`, and `uid`.
- Implement constructors, ge琀琀ers, and se琀琀ers for the class.

Step 3: Create AddExpenseAc琀椀vity


- Create an ac琀椀vity named `AddExpenseAc琀椀vity`.
- Set up layout using XML 昀椀le containing input 昀椀elds for amount,
note, category, and radio bu琀琀ons for expense type.
- Handle intent extras to determine whether the ac琀椀vity is for adding
a new expense or edi琀椀ng an exis琀椀ng one.
- Populate form 昀椀elds with exis琀椀ng data if edi琀椀ng an expense entry.
- Implement onClick listeners for radio bu琀琀ons to update the expense
type.
- Implement methods to handle saving or upda琀椀ng expense entries
to Firestore database.
- Create menu op琀椀ons for saving or dele琀椀ng expense entries.

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

Step 4: Implement ExpensesAdapter


- Create an adapter class named `ExpensesAdapter` for popula琀椀ng
RecyclerView with expense entries.
- Implement methods to add new expense entries, clear exis琀椀ng
entries, and bind data to ViewHolder.
- De昀椀ne a ViewHolder class to represent individual items in the
RecyclerView.
- Handle onClick events for RecyclerView items to enable edi琀椀ng of
expense entries.

Step 5: Create MainAc琀椀vity


- Create the main ac琀椀vity named `MainAc琀椀vity`.
- Set up layout containing a PieChart for visualizing income vs.
expense data and a RecyclerView for displaying expense entries.
- Ini琀椀alize ExpensesAdapter and set it as the adapter for the
RecyclerView.
- Implement methods to handle user clicks on "Add Income" and
"Add Expense" bu琀琀ons to start AddExpenseAc琀椀vity.
- Implement logic to fetch expense data from Firestore, calculate
total income and expense amounts, and update the PieChart
accordingly.
- Handle onClick events for individual expense items in the
RecyclerView to enable edi琀椀ng.

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

Step 6: De昀椀ne OnItemsClick Interface


- De昀椀ne an interface named `OnItemsClick` to handle onClick events
for RecyclerView items.
- Implement the `onClick` method to handle clicks on individual
expense items.

Step 7: Firebase Integra琀椀on


- Set up Firebase Authen琀椀ca琀椀on to handle user authen琀椀ca琀椀on
anonymously.
- Implement Firestore database queries to fetch and update expense
data.
- Ensure proper security rules are in place to protect user data.

Step 8: User Interface Design


- Design intui琀椀ve and user-friendly UI layouts using XML 昀椀les.
- Ensure consistency in design elements and adhere to Material
Design guidelines.
- Implement error handling and valida琀椀on for input 昀椀elds to provide
a seamless user experience.

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

Source Code
ac琀椀vity_main.xml:
<?xml version="1.0" encoding="u琀昀-8"?>
<Rela琀椀veLayout xmlns:android="h琀琀p://schemas.android.com/apk/res/android"
xmlns:app="h琀琀p://schemas.android.com/apk/res-auto"
xmlns:tools="h琀琀p://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainAc琀椀vity">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orienta琀椀on="ver琀椀cal">

<androidx.cardview.widget.CardView
android:layout_margin="5dp"
android:layout_width="match_parent"
android:layout_height="300dp">
<com.github.mikephil.char琀椀ng.charts.PieChart
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/pieChart"/>
</androidx.cardview.widget.CardView>

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_marginTop="10dp"

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

android:layout_width="match_parent"
android:layout_height="wrap_content"
/>

</LinearLayout>
<LinearLayout
android:padding="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBo琀琀om="true"
android:background="@color/white">

<TextView
android:id="@+id/addIncome"
android:background="@color/blue"
android:text="Add Income"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="15dp"
android:layout_marginRight="10dp"
android:layout_weight="1"
android:textColor="@color/white"/>
<TextView
android:id="@+id/addExpense"
android:background="@color/blue"
android:text="Add Expense"
android:gravity="center"
android:layout_marginLe昀琀="10dp"

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

android:textColor="@color/white"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="15dp"
android:layout_weight="1"/>
</LinearLayout>

</Rela琀椀veLayout>

ac琀椀vity_add_expense.xml:
<?xml version="1.0" encoding="u琀昀-8"?>
<LinearLayout xmlns:android="h琀琀p://schemas.android.com/apk/res/android"
xmlns:app="h琀琀p://schemas.android.com/apk/res-auto"
xmlns:tools="h琀琀p://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
tools:context=".AddExpenseAc琀椀vity">
<androidx.cardview.widget.CardView
android:layout_margin="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<LinearLayout
android:orienta琀椀on="ver琀椀cal"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<TextView

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Amount"
android:textColor="@color/blue"/>

<EditText
android:id="@+id/amount"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"/>

<RadioGroup
android:id="@+id/typeRadioGroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orienta琀椀on="horizontal">
<RadioBu琀琀on
android:id="@+id/incomeRadio"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:text="Income"/>
<RadioBu琀琀on
android:id="@+id/expenseRadio"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:text="Expense"/>
</RadioGroup>

<LinearLayout

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

android:orienta琀椀on="ver琀椀cal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Note"
android:textColor="@color/blue"/>

<EditText
android:id="@+id/note"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

<LinearLayout
android:orienta琀椀on="ver琀椀cal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Category"
android:textColor="@color/blue"/>

<EditText
android:id="@+id/category"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

</LinearLayout>

</LinearLayout>
</LinearLayout>

</androidx.cardview.widget.CardView>

</LinearLayout>

expense_row.xml:
<?xml version="1.0" encoding="u琀昀-8"?>
<androidx.cardview.widget.CardView
xmlns:android="h琀琀p://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="h琀琀p://schemas.android.com/apk/res-auto"
app:contentPadding="10dp"
android:layout_margin="5dp">

<Rela琀椀veLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_centerVer琀椀cal="true"
android:orienta琀椀on="ver琀椀cal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/note"

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

android:textColor="@color/black"
android:textSize="18sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Note" />
<TextView
android:id="@+id/category"
android:textSize="16sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Category" />

</LinearLayout>
<LinearLayout
android:layout_centerVer琀椀cal="true"
android:orienta琀椀on="horizontal"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/amount"
android:textSize="18sp"
android:textStyle="bold"
android:textColor="@color/blue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="100"/>
<TextView
android:textSize="18sp"

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

android:textStyle="bold"
android:textColor="@color/blue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" INR"/>
</LinearLayout>
</Rela琀椀veLayout>

</androidx.cardview.widget.CardView>

add_menu.xml:
<?xml version="1.0" encoding="u琀昀-8"?>
<menu xmlns:android="h琀琀p://schemas.android.com/apk/res/android"
xmlns:app="h琀琀p://schemas.android.com/apk/res-auto">
<item
android:id="@+id/saveExpense"
android:琀椀tle="Save"
android:icon="@drawable/check_image"
app:showAsAc琀椀on="always"/>
</menu>

update_menu:
<?xml version="1.0" encoding="u琀昀-8"?>
<menu xmlns:android="h琀琀p://schemas.android.com/apk/res/android"
xmlns:app="h琀琀p://schemas.android.com/apk/res-auto">
<item
android:id="@+id/deleteExpense"
android:琀椀tle="Deleter"
android:icon="@drawable/delete_image"
app:showAsAc琀椀on="always"/>

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

<item
android:id="@+id/saveExpense"
android:琀椀tle="Save"
android:icon="@drawable/check_image"
app:showAsAc琀椀on="always"/>
</menu>

MainAc琀椀vity.java:
package com.example.expensemanager;

import androidx.annota琀椀on.NonNull;
import androidx.appcompat.app.AppCompatAc琀椀vity;
import androidx.recyclerview.widget.LinearLayoutManager;

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

import com.example.expensemanager.databinding.Ac琀椀vityMainBinding;
import com.github.mikephil.char琀椀ng.data.PieData;
import com.github.mikephil.char琀椀ng.data.PieDataSet;
import com.github.mikephil.char琀椀ng.data.PieEntry;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.昀椀rebase.auth.AuthResult;
import com.google.昀椀rebase.auth.FirebaseAuth;
import com.google.昀椀rebase.昀椀restore.DocumentSnapshot;

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

import com.google.昀椀rebase.昀椀restore.FirebaseFirestore;
import com.google.昀椀rebase.昀椀restore.QuerySnapshot;

import java.u琀椀l.ArrayList;
import java.u琀椀l.List;

public class MainAc琀椀vity extends AppCompatAc琀椀vity implements OnItemsClick{

Ac琀椀vityMainBinding binding;
private ExpensesAdapter expensesAdapter;
Intent intent;
private long income=0,expense=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = Ac琀椀vityMainBinding.in昀氀ate(getLayoutIn昀氀ater());
setContentView(binding.getRoot());

// Ini琀椀alize ExpensesAdapter
expensesAdapter = new ExpensesAdapter(this, this);
binding.recyclerView.setAdapter(expensesAdapter);
binding.recyclerView.setLayoutManager(new LinearLayoutManager(this));

// Create intent for AddExpenseAc琀椀vity


intent = new Intent(MainAc琀椀vity.this, AddExpenseAc琀椀vity.class);

// Handle click on "Add Income" bu琀琀on


binding.addIncome.setOnClickListener(new View.OnClickListener() {
@Override

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

public void onClick(View v) {


// Put extra "type" as "Income" in the intent
intent.putExtra("type", "Income");
// Start AddExpenseAc琀椀vity
startAc琀椀vity(intent);
}
});

// Handle click on "Add Expense" bu琀琀on


binding.addExpense.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Put extra "type" as "Expense" in the intent
intent.putExtra("type", "Expense");
// Start AddExpenseAc琀椀vity
startAc琀椀vity(intent);
}
});
}

@Override
protected void onStart() {
super.onStart();
ProgressDialog progressDialog=new ProgressDialog(this);
progressDialog.setTitle("Please");
progressDialog.setMessage("Wait");
progressDialog.setCancelable(false);

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

if (FirebaseAuth.getInstance().getCurrentUser()==null){
progressDialog.show();
FirebaseAuth.getInstance()
.signInAnonymously()
.addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
progressDialog.cancel();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Excep琀椀on e) {
progressDialog.cancel();

Toast.makeText(MainAc琀椀vity.this,e.getMessage(),Toast.LENGTH_SHORT).show();
}
});
}
}

@Override
protected void onResume() {
super.onResume();
income=0; expense=0;
getData();
}

private void getData() {


FirebaseFirestore

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

.getInstance()
.collec琀椀on("expenses")
.whereEqualTo("uid",FirebaseAuth.getInstance().getUid())
.get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
expensesAdapter.clear();
List<DocumentSnapshot> dsList=queryDocumentSnapshots.getDocuments();
for (DocumentSnapshot ds:dsList){
ExpenseModel expenseModel=ds.toObject(ExpenseModel.class);
if (expenseModel.getType().equals("Income")){
income+=expenseModel.getAmount();
}else {
expense+=expenseModel.getAmount();
}
expensesAdapter.add(expenseModel);
}
setUpGraph();
}
});
}

private void setUpGraph() {

List<PieEntry> pieEntryList=new ArrayList<>();


List<Integer> colorsList=new ArrayList<>();
if (income!=0){
pieEntryList.add(new PieEntry(income,"Income"));

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

colorsList.add(getResources().getColor(R.color.blue));
}
if (expense!=0){
pieEntryList.add(new PieEntry(expense,"Expense"));
colorsList.add(getResources().getColor(R.color.green));
}
PieDataSet pieDataSet=new PieDataSet(pieEntryList, String.valueOf(income=expense));
pieDataSet.setColors(colorsList);
pieDataSet.setValueTextColor(getResources().getColor(R.color.white));
PieData pieData=new PieData(pieDataSet);

binding.pieChart.setData(pieData);
binding.pieChart.invalidate();

@Override
public void onClick(ExpenseModel expenseModel) {
// Create intent for AddExpenseAc琀椀vity
Intent intent = new Intent(MainAc琀椀vity.this, AddExpenseAc琀椀vity.class);
// Pass the ExpenseModel object to AddExpenseAc琀椀vity
intent.putExtra("model", expenseModel);
// Start AddExpenseAc琀椀vity
startAc琀椀vity(intent);
}

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

AddExpenseAc琀椀vity.java:
package com.example.expensemanager;

import androidx.annota琀椀on.NonNull;
import androidx.appcompat.app.AppCompatAc琀椀vity;

import android.os.Bundle;
import android.u琀椀l.Log;
import android.view.Menu;
import android.view.MenuIn昀氀ater;
import android.view.MenuItem;
import android.view.View;

import com.example.expensemanager.databinding.Ac琀椀vityAddExpenseBinding;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.昀椀rebase.auth.FirebaseAuth;
import com.google.昀椀rebase.昀椀restore.FirebaseFirestore;

import java.u琀椀l.Calendar;
import java.u琀椀l.UUID;

public class AddExpenseAc琀椀vity extends AppCompatAc琀椀vity {


private String type;
Ac琀椀vityAddExpenseBinding binding;
private ExpenseModel expenseModel;
private sta琀椀c 昀椀nal String TAG = "AddExpenseAc琀椀vity";

@Override

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

protected void onCreate(Bundle savedInstanceState) {


super.onCreate(savedInstanceState);
binding = Ac琀椀vityAddExpenseBinding.in昀氀ate(getLayoutIn昀氀ater());
setContentView(binding.getRoot());

// Retrieve intent extras


type = getIntent().getStringExtra("type");
expenseModel = (ExpenseModel) getIntent().getSerializableExtra("model");

// Populate the form 昀椀elds if edi琀椀ng an exis琀椀ng entry


if (expenseModel != null) {
// Populate form 昀椀elds with exis琀椀ng data
type = expenseModel.getType();
binding.amount.setText(String.valueOf(expenseModel.getAmount()));
binding.note.setText(expenseModel.getNote());
binding.category.setText(expenseModel.getCategory());
}

// Check the type and set radio bu琀琀on accordingly


if (type != null && type.equals("Income")) {
binding.incomeRadio.setChecked(true);
} else {
binding.expenseRadio.setChecked(true);
}

// Set onClick listeners for radio bu琀琀ons to update the type


binding.incomeRadio.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

type = "Income";
}
});

binding.expenseRadio.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
type = "Expense";
}
});
}

public boolean onCreateOp琀椀onsMenu(Menu menu){


MenuIn昀氀ater menuIn昀氀ater= getMenuIn昀氀ater();
if (expenseModel==null){

menuIn昀氀ater.in昀氀ate(R.menu.add_menu, menu);
}else {

menuIn昀氀ater.in昀氀ate(R.menu.update_menu, menu);
}
return true;
}

public boolean onOp琀椀onsItemSelected(@NonNull MenuItem item){


int id=item.getItemId();
if (id==R.id.saveExpense){

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

if (type!=null){
createExpense();
}else {
updateExpense();
}
return true;
}
if (id==R.id.deleteExpense){
deleteExpense();
}
return false;
}

private void deleteExpense() {


FirebaseFirestore
.getInstance()
.collec琀椀on("expenses")
.document(expenseModel.getExpenseId())
.delete();
昀椀nish();
}

private void createExpense() {


String expenseID = UUID.randomUUID().toString();
String amount = binding.amount.getText().toString();
String note = binding.note.getText().toString();
String category = binding.category.getText().toString();
String type;
boolean incomeChecked = binding.incomeRadio.isChecked();

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

if (incomeChecked) {
type = "Income";
} else {
type = "Expense";
}

if (amount.trim().isEmpty()) {
binding.amount.setError("Empty");
return;
}

// Create a new ExpenseModel object


ExpenseModel expense = new ExpenseModel(expenseID, note, category, type,
Long.parseLong(amount), Calendar.getInstance().getTimeInMillis(),
FirebaseAuth.getInstance().getUid());

// Add the expense to Firestore

FirebaseFirestore.getInstance().collec琀椀on("expenses").document(expenseID).set(expense)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
// Finish the ac琀椀vity a昀琀er adding the expense
昀椀nish();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Excep琀椀on e) {

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

// Handle any errors


Log.e(TAG, "Error adding expense", e);
// You may want to show a Toast or alert to the user
}
});
}

private void updateExpense() {


String expenseID = expenseModel.getExpenseId();
String amount = binding.amount.getText().toString();
String note = binding.note.getText().toString();
String category = binding.category.getText().toString();
String type;
boolean incomeChecked = binding.incomeRadio.isChecked();

if (incomeChecked) {
type = "Income";
} else {
type = "Expense";
}

if (amount.trim().isEmpty()) {
binding.amount.setError("Empty");
return;
}

// Create an updated ExpenseModel object


ExpenseModel updatedExpense = new ExpenseModel(expenseID, note, category, type,
Long.parseLong(amount), expenseModel.getTime(), FirebaseAuth.getInstance().getUid());

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

// Update the exis琀椀ng expense in Firestore

FirebaseFirestore.getInstance().collec琀椀on("expenses").document(expenseID).set(updatedEx
pense)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
// Finish the ac琀椀vity a昀琀er upda琀椀ng the expense
昀椀nish();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Excep琀椀on e) {
// Handle any errors
Log.e(TAG, "Error upda琀椀ng expense", e);
// You may want to show a Toast or alert to the user
}
});
}

ExpensesModel.java:
package com.example.expensemanager;

import java.io.Serializable;

public class ExpenseModel implements Serializable {


private String expenseId;

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

private String note;


private String category;
private String type;
private long amount;
private long 琀椀me;
private String uid;

public ExpenseModel() {
}

public ExpenseModel(String expenseId, String note, String category, String type, long
amount, long 琀椀me, String uid) {
this.expenseId = expenseId;
this.note = note;
this.category = category;
this.type = type;
this.amount = amount;
this.琀椀me = 琀椀me;
this.uid = uid;
}

public String getType() {


return type;
}

public void setType(String type) {


this.type = type;
}

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

public String getExpenseId() {


return expenseId;
}

public void setExpenseId(String expenseId) {


this.expenseId = expenseId;
}

public String getNote() {


return note;
}

public void setNote(String note) {


this.note = note;
}

public String getCategory() {


return category;
}

public void setCategory(String category) {


this.category = category;
}

public long getAmount() {


return amount;
}

public void setAmount(long amount) {

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

this.amount = amount;
}

public long getTime() {


return 琀椀me;
}

public void setTime(long 琀椀me) {


this.琀椀me = 琀椀me;
}

public String getUid() {


return uid;
}

public void setUid(String uid) {


this.uid = uid;
}

ExpensesAdapter.java:
package com.example.expensemanager;

import android.content.Context;
import android.view.LayoutIn昀氀ater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

import androidx.annota琀椀on.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.u琀椀l.ArrayList;
import java.u琀椀l.List;

public class ExpensesAdapter extends


RecyclerView.Adapter<ExpensesAdapter.MyViewHolder> {
private Context context;
private OnItemsClick onItemsClick;
private List<ExpenseModel> expenseModelList;

public ExpensesAdapter(Context context, OnItemsClick onItemsClick){


this.context = context;
expenseModelList=new ArrayList<>();
this.onItemsClick=onItemsClick;
}

public void add(ExpenseModel expenseModel){


expenseModelList.add(expenseModel);
no琀椀fyDataSetChanged();
}

public void clear(){


expenseModelList.clear();
no琀椀fyDataSetChanged();
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

View view=
LayoutIn昀氀ater.from(parent.getContext()).in昀氀ate(R.layout.expense_row,parent,false);

return new MyViewHolder(view);


}

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int posi琀椀on) {
ExpenseModel expenseModel=expenseModelList.get(posi琀椀on);
holder.note.setText(expenseModel.getNote());
holder.category.setText(expenseModel.getCategory());
holder.amount.setText(String.valueOf(expenseModel.getAmount()));

holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onItemsClick.onClick(expenseModel);
}
});
}

@Override
public int getItemCount() {
return expenseModelList.size();
}

public class MyViewHolder extends RecyclerView.ViewHolder{

private TextView note,amount,category;


public MyViewHolder(@NonNull View itemView){

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

super(itemView);
note=itemView.昀椀ndViewById(R.id.note);
category=itemView.昀椀ndViewById(R.id.category);
amount=itemView.昀椀ndViewById(R.id.amount);
}
}

OnItemsClick.java(Interface):
package com.example.expensemanager;

public interface OnItemsClick {


void onClick(ExpenseModel expenseModel);
}

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

Output
ac琀椀vity_main:

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

ac琀椀vity_add_expense:

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

expense_row:

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

add_menu:

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

update_menu:

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

Firebase Cloud Firestore:

Firebase Authen琀椀ca琀椀on:

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

Applications

1. Personal Finance Management: The primary applica琀椀on of the


expense management applica琀椀on is for individuals to track and
manage their personal 昀椀nances e昀昀ec琀椀vely. Users can monitor their
spending habits, set budgets, and make informed 昀椀nancial decisions
based on insights provided by the applica琀椀on.

2. Budget Planning: The applica琀椀on can help users plan and allocate
budgets for various expense categories such as groceries, u琀椀li琀椀es,
entertainment, etc. By se琀�ng spending limits and tracking expenses
against these budgets, users can avoid overspending and achieve
their 昀椀nancial goals more e昀케ciently.

3. Expense Tracking for Freelancers and Small Businesses:


Freelancers and small business owners can use the applica琀椀on to
track business expenses, invoices, and receipts. This helps in
maintaining accurate 昀椀nancial records for tax purposes, client billing,
and overall business expense management.

4. Travel Expense Management: Travelers can use the applica琀椀on to


track their expenses while on the go. They can categorize expenses
related to transporta琀椀on, accommoda琀椀on, meals, and other travel-
related costs, making it easier to manage travel budgets and
reimbursements.

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

5. Group Expense Tracking: The applica琀椀on can be used by groups of


friends, roommates, or colleagues to track shared expenses for
ac琀椀vi琀椀es such as trips, events, or household expenses. It enables
easy spli琀�ng of bills and ensures transparency in 昀椀nancial
transac琀椀ons among group members.

6. Financial Educa琀椀on and Awareness: The applica琀椀on can serve as a


tool for 昀椀nancial educa琀椀on and awareness, especially for young
adults and individuals new to managing their 昀椀nances. By visualizing
spending pa琀琀erns, providing budge琀椀ng 琀椀ps, and o昀昀ering insights into
昀椀nancial behavior, the applica琀椀on can help users develop be琀琀er
money management skills.

7. Expense Repor琀椀ng for Corporates: Larger organiza琀椀ons can


deploy customized versions of the expense management applica琀椀on
to facilitate expense repor琀椀ng and reimbursement processes for
employees. This streamlines expense management work昀氀ows,
reduces paperwork, and ensures compliance with corporate expense
policies.

8. Integra琀椀on with Accoun琀椀ng So昀琀ware: The applica琀椀on can


integrate with accoun琀椀ng so昀琀ware pla琀昀orms used by businesses for
seamless data synchroniza琀椀on and repor琀椀ng. This integra琀椀on
simpli昀椀es 昀椀nancial repor琀椀ng, audi琀椀ng, and compliance requirements
for businesses.

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

9. Personal Financial Advisor: Advanced versions of the expense


management applica琀椀on can incorporate AI-driven 昀椀nancial advisory
features. By analyzing user spending pa琀琀erns, income trends, and
昀椀nancial goals, the applica琀椀on can provide personalized
recommenda琀椀ons and insights to help users make be琀琀er 昀椀nancial
decisions.

10. Expense Management for Non-Pro昀椀t Organiza琀椀ons: Non-pro昀椀t


organiza琀椀ons can u琀椀lize the applica琀椀on to track and manage their
expenses e昀昀ec琀椀vely, ensuring that funds are allocated e昀케ciently
towards organiza琀椀onal objec琀椀ves and programs.

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

SKILLS DEVELOPED / LEARNING


OUTCOME OF THE MICRO-PROJECT
1. Cri琀椀cal Thinking
2. Collabora琀椀on & teamwork
3. Time management
4. Communica琀椀on skill
5. Scien琀椀昀椀c approach development
6. Research skill
7. Leadership skill
8. Presenta琀椀on of collected data
9. Development of projects
10. Mo琀椀va琀椀on skill

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

Conclusion
In conclusion, the development of the mobile expense management
applica琀椀on presents a robust solu琀椀on to address the evolving needs
of individuals and businesses in managing their 昀椀nances e昀昀ec琀椀vely.
Through me琀椀culous design and implementa琀椀on, the applica琀椀on
o昀昀ers users a user-friendly interface coupled with powerful features
for tracking expenses, budge琀椀ng, and gaining valuable insights into
their 昀椀nancial behaviors. By leveraging technologies such as Firebase
for backend support and RecyclerView for e昀케cient data presenta琀椀on,
the applica琀椀on provides a seamless user experience across di昀昀erent
devices and pla琀昀orms.

Moreover, the applica琀椀on's versa琀椀lity extends beyond personal


昀椀nance management, catering to a diverse range of users and
scenarios. From freelancers tracking business expenses to groups
spli琀�ng bills during travel, the applica琀椀on serves as a valuable tool
for fostering 昀椀nancial awareness, transparency, and accountability. Its
poten琀椀al applica琀椀ons in areas such as travel expense management,
group expense tracking, and even integra琀椀on with accoun琀椀ng
so昀琀ware highlight its adaptability to various contexts and
organiza琀椀onal needs.

Overall, the mobile expense management applica琀椀on not only


simpli昀椀es the task of expense tracking but also promotes 昀椀nancial
literacy and responsible spending habits. By empowering users with
tools to monitor their expenditures, set budgets, and make informed
昀椀nancial decisions, the applica琀椀on contributes to a more 昀椀nancially
savvy and secure society.

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)


lOMoARcPSD|19159960

Reference
GeeksforGeeks : Firebase Authen琀椀ca琀椀on
h琀琀ps://www.geeksforgeeks.org/user-authen琀椀ca琀椀on-using-
昀椀rebase-in-android/

GeeksforGeeks : Firebase Authen琀椀ca琀椀on


h琀琀ps://www.geeksforgeeks.org/how-to-use-昀椀rebase-
昀椀restore-as-a-real琀椀me-database-in-android/

Pie Chart : Library


h琀琀ps://github.com/PhilJay/MPAndroidChart

Downloaded by Wankhede Ganesh Macchhindra (ganeshwankhede515@gmail.com)

You might also like