Professional Documents
Culture Documents
ACKNOWLEDGEMENT
The presented project is a result of our dedication and also support of other
members. We would not like to miss the chance of expressing our gratitude for all people
who made this work a fully fledged project. We are thankful to ourguide “PRAFUL V.H”
for his continues guidance and monitoring. We always be thankful to precious time he has
given beside of his busy schedule.
We are thankful to our HOD Prof. VEENA MOREfor giving such a wonderful
opportunity and also for encouragement. We show sincere gratitude to our respected
PrincipalProf.V. S. BAGALI Our process of showing gratitude is incomplete without
thanking all those members who have helped behind the mirror, without whom our project
would not be complete.
Thanking You,
RAVICHANDRA P HALLAD
(BCA18069)
ABSTRACT
The main purpose of this application is to allow users to maintain a digital automated diary.
As the name itself suggests, this project is an attempt to manage our daily expenses in a more
efficient and manageable way. Sometime we can’t remember where our money goes. And we
can’t handle our cash flow.For this problem, we need a solution that everyone can manage
their expenses. So we decided to find an easier way to get rid of this problem. So, our
application attempts to free the user with as much as possible the burden of manual
calculation and to keep the track of the expenditure.Instead of keeping a diary or a log of the
expenses, this application enables the user to not just keep the control on the expenses but
also to generate and save reports.
CONTENTS
1. Introduction
2. Literature Survey
Existing System
Disadvantages of Existing System
Proposed System
Advantages of Proposed System
3. System Requirements
Hardware requirements
Software requirements
4. DFD Diagrams
5. Technologies used in projects
Introduction to Android
Introduction to SQLite
Introduction to Android Framework
6. Screen Shots
7. Future Enhancements
8. Conclusion
9. Bibliography
INTRODUCTION
Budgeting on a personal level is always a problematic issue faced on a daily basis by almost
each of us. Recording and managing expenses, income/savings are getting very difficult in
today’s busy life which ultimately results in the inefficient planning of personal budget. This
proposed application will allow users to track and analyze their expenses, income, and
savings to plan their personal budget, organize their expenses & income and record
movement of money. The application will allow users to set their monthly budget (overall
budget or by expense category) to monitor and control their spending with the help of budget
management. The application will remind the user for any pending bills, expense limit
exceeding mentioned in a budget well before time. The application will provide different
reports regarding expenses and income on the daily, weekly, monthly or yearly basis for
better control over the money.
LITERATURE SURVEY
Existing system:
In existing, we need to maintain the Excel sheets, CSV etc. files for the user daily and
monthly expenses. In existing, there is no as such complete solution to keep a track of its
daily expenditure easily. To do so a person as to keep a log in a diary or in a computer, also
all the calculations needs to be done by the user which may sometimes results in errors
leading to losses.
Disadvantages of Existing System
PROPOSED SYSTEM:
To reduce manual calculations, we propose an application which is developed by Android.
This application allows users to maintain a digital automated diary. Each user will be
required to register on the system at registration time, the user will be provided id, which will
be used to maintain the record of each unique user. This application takes Income from user
and divides in daily expense allowed. If u exceed that days expense it will cut if from your
income and give new daily expense allowed amount, and if that days expense is less it will
add it in savings. Expense tracking application will generate report at the end of month to
show Income-Expense via multiple graphs.
ADVANTAGES
Builds Discipline and Organization
Forces You to Think About Money.
Crisis Prevention
Budget Planner
Knowing your spending habits
Offline application.
Create a monthly budget
REQUIREMENT
Hardware requirements
Processor –i3&i5
Hard disk-- 500gb
Memory—4gb RAM
Android phone with kitkat higher
Software requirements
Windows xp, Windows 7,and higher version.
Eclipse/Android studio
SQLite server
Java
Operating system –android mobile os
Languages
Java
XML
DFD DIAGRAMS
Introduction to Android:
Android is a mobile operating system based on a modified version of the Linux kernel and
other open source software, designed primarily for touchscreen mobile devices such as
smartphones and tablets. Android is developed by a consortium of developers known as the
Open Handset Alliance and commercially sponsored by Google. It was unveiled in
November 2007, with the first commercial Android device launched in September 2008.
It is free and open source software; its source code is known as Android Open Source Project
(AOSP), which is primarily licensed under the Apache License. However most Android
devices ship with additional proprietary software pre-installed,[10] most notably Google
Mobile Services (GMS)[11] which includes core apps such as Google Chrome, the digital
distribution platform Google Play and associated Google Play Services development
platform. About 70 percent of Android smartphones run Google's ecosystem;[12] competing
Android ecosystems and forks include Fire OS (developed by Amazon) or LineageOS.
However the "Android" name and logo are trademarks of Google which impose standards to
restrict "uncertified" devices outside their ecosystem to use Android branding.[13][14]
The source code has been used to develop variants of Android on a range of other electronics,
such as game consoles, digital cameras, portable media players, PCs and others, each with a
specialized user interface. Some well known derivatives include Android TV for televisions
and Wear OS for wearables, both developed by Google. Software packages on Android,
which use the APK format, are generally distributed through proprietary application stores
like Google Play Store, Samsung Galaxy Store, and Huawei AppGallery, or open source
platforms like Aptoide or F-Droid.
Android has been the best-selling OS worldwide on smartphones since 2011 and on tablets
since 2013. As of May 2017, it has over two billion monthly active users, the largest installed
base of any operating system, and as of January 2021, the Google Play Store features over
3 million apps.[15] The current stable version is Android 11, released on September 8, 2020.
Introduction to SQLite
The Android SQLite Database requires very little memory (around 250kb), which is available
on all android devices. Every device has an inbuilt support for SQLite database, which is
automatically managed on android right from its creation, execution to querying up process.
SQLite is an open source database, available on every android database. It supports standard
relations database features, like SQL syntax, transactions & SQL statements. SQLite is
considerably, the lighter version of SQL database, where most of the SQL commands don’t
run on SQLite database. Once SQLite is in place, it is important to ensure that a feature or
command is available in SQLite; only then can it be executed.
Basically SQLite does not validate datatypes by itself. In other words, whatever datatypes are
used, they are termed as valid.
For example, in this case, the database of a cable operator has been discussed. Here, a new
table is added with ‘text’ in the name field and fieldname box carrying ‘textfield’. A random
value datatype has been created. The end result is a test table with an invalid datatype, which
shows that SQLite doesn’t validate datatype.
*One can find the database by clicking on package and accessing the data folder to the
database folder, which contains the file.
Note: The SQLiteOpen Helper class is used to manage database creation and version
management.
1) Activity Manager
Applications use the Android activity component for presenting an entry point to the app.
Android Activities are the components that house the user interface that app users interact
with. As end-users interact with the Android device, they start, stop, and jump back and forth
across many applications. Each navigation event triggers activation and deactivation of many
activities in respective applications. The Android ActivityManager is responsible for
predictable and consistent behavior during application transitions. The ActivityManager
provides a slot for app creators to have their apps react when the Android OS performs global
actions. Applications can listen to events such as device rotation, app destruction due to
memory shortage, an app being shifted out of focus, and so on. Some examples of the way
applications can react to these transitions include pausing activity in a game, stopping music
playing during a phone call.
2) Window Manager
Android can determine screen information to determine the requirements needed to create
windows for applications. Windows are the slots where we can view our app user interface.
Android uses the Window manager to provide this information to the apps and the system as
they run so that they can adapt to the mode the device is running on. The Window Manager
helps in delivering a customized app experience. Apps can fill the complete screen for an
immersive experience or share the screen with other apps. Android enables this by allowing
multi-windows for each app.
3) Location Manager
Most Android devices are equipped with GPS devices that can get user location using
satellite information to which can go all the way to meters precision. Programmers can
prompt for location permission from the users, deliver location, and aware experiences.
Android is also able to utilize wireless technologies to further enrich location details and
increase coverage when devices are enclosed spaces. Android provides these features under
the umbrella of the Location-Manager.
4) Telephony Manager
Most Android devices serve a primary role in telephony. Android uses TelephoneManager to
combine hardware and software components to deliver telephony features. The hardware
components include external parts such as the sim card, and device parts such as the
microphone, camera, and speakers. The software components include native components
such as dial pad, phone book, ringtone profiles. Using the TelephoneManager, a developer
can extend or fine-tune the default calling functionality.
5) Resource Manager
Android app usually come with more than just code. They also have other resources such as
icons, audio and video files, animations, text files, and the like. Android helps in making sure
that there is efficient, responsive access to these resources. It also ensures that the right
resources are delivered to the end-users. For example, the proper language text files are used
when populating fields in the apps.
6) View System
Android also provides a means to easily create common visual components needed for app
interaction. These components include widgets like buttons, image holders such as
ImageView, components to display a list of items such as ListView, and many more. The
components are premade but are also customizable to fit app developer needs and branding.
7) Notification Manager
The Notification Manager is responsible for informing Android users of application events. It
does this by giving users visual, audio or vibration signals or a combination of them when an
event occurs. These events have external and internal triggers. Some examples of internal
triggers are low-battery status events that trigger a notification to show low battery. Another
example is user-specified events like an alarm. Some examples of external triggers include
new messages or new wifi networks detected. Android provides a means for programmers
and end-users to fine-tune the notifications system. This can help to guarantee they can send
and receive notification events in a means that best suits them and their current environments.
Code:
Add CategoryActivity
package com.example.moneymanager;
import java.io.ByteArrayOutputStream;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
@Override
protected void onActivityResult(int requestCode, int resultCode,
android.content.Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
i = data.getIntExtra("image",R.drawable.select);
i_btn1.setImageResource(i);
}
@Override
public void onBackPressed()
{
super.onBackPressed();
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
}}
CreateActivity
package com.example.moneymanager;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
{
private EditText et1,et2,et3;
Button next;
String str;
String EMAIL_PATTERN;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_create);
et1 = (EditText)findViewById(R.id.create_editText1);
et2 = (EditText)findViewById(R.id.create_editText2);
et3 = (EditText)findViewById(R.id.create_editText3);
next = (Button)findViewById(R.id.create_button);
next.setOnClickListener(this);
et3.setOnClickListener(this);
EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
+ "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
}
@Override
public void onClick(View v)
{
// click for button
if(v.getId()== R.id.create_button)
{
if(et1.getText().toString().equals("")||
et2.getText().toString().equals("")||et3.getText().toString().equals(""))
{
Toast.makeText(this, "Can't LEAVE blank fields",
Toast.LENGTH_LONG).show();
}
else if(!et2.getText().toString().matches(EMAIL_PATTERN))
{
Toast.makeText(this, "Email Address Is Not Properly",
Toast.LENGTH_LONG).show();
}
else
{
SharedPreferences preferences = getSharedPreferences("wallet", 0);
Editor editor = preferences.edit();
editor.putString("name", et1.getText().toString());
editor.putString("email", et2.getText().toString());
editor.putString("currency", et3.getText().toString());
editor.putString("symbol", str);
editor.commit();
Intent intent = new Intent(this,MainActivity.class);
startActivity(intent);
finish();
}}
// click event for edit text
if(v.getId()==R.id.create_editText3)
{
Intent intent = new Intent(this,CurrencyList.class);
startActivityForResult(intent, 1);
}
}
//for retrun from activity
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
et3.setText(data.getStringExtra("currency"));
str = data.getStringExtra("symbol");
}
}
MainActivity
package com.example.moneymanager;
import java.io.ByteArrayOutputStream;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
public class MainActivity extends FragmentActivity implements
TabListener,OnClickListener
{
Intent intent;
ViewPager pager;
ActionBar actionBar;
Button
add_incm_btn,add_expnc_btn,add_cat_btn,view_expnc_btn,Add_Borrow,Send_msg;
SQLiteDatabase db;
boolean flag;
static int i=1;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SharedPreferences preferences1 = getSharedPreferences("wallet", 0);
flag = preferences1.getBoolean("flag", true);
if(flag == true)
{
preferences1.edit().putBoolean("flag", false).commit();
DBHelper helper = new DBHelper(this);
preDefine(helper);
}
//add income
add_incm_btn = (Button)findViewById(R.id.H_income);
add_incm_btn.setOnClickListener(this);
//add expense
add_expnc_btn = (Button)findViewById(R.id.H_expence);
add_expnc_btn.setOnClickListener(this);
//add expense
add_cat_btn = (Button)findViewById(R.id.H_category);
add_cat_btn.setOnClickListener(this);
//add expense
view_expnc_btn = (Button)findViewById(R.id.H_view_expence);
view_expnc_btn.setOnClickListener(this);
//add borrow
Add_Borrow = (Button)findViewById(R.id.H_view_expence1);
Add_Borrow.setOnClickListener(this);
//Send msg
Send_msg = (Button)findViewById(R.id.H_view_expence12);
Send_msg.setOnClickListener(this);
finish();
}
pager = (ViewPager)findViewById(R.id.Viewpager);
pager.setAdapter(new MyAdapter(getSupportFragmentManager()));
actionBar = getActionBar();
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM
| ActionBar.NAVIGATION_MODE_TABS);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
Tab tab1 = actionBar.newTab();
tab1.setText("Expence");
tab1.setTabListener(this);
Tab tab2 = actionBar.newTab();
tab2.setText("Balance");
tab2.setTabListener(this);
actionBar.addTab(tab1);
actionBar.addTab(tab2);
pager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
actionBar.setSelectedNavigationItem(arg0);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
});
}
class MyAdapter extends FragmentPagerAdapter
{
public MyAdapter(FragmentManager fm)
{
super(fm);
}
@Override
public Fragment getItem(int i)
{
Fragment fragment=null;
switch (i) {
case 0:
fragment = new Expence();
break;
case 1:
fragment = new Income();
break;
default:
break;
}
return fragment;
}
@Override
public int getCount()
{
// TODO Auto-generated method stub
return 2;
}
}
@Override
public void onTabReselected(Tab arg0, FragmentTransaction arg1)
{
}
@Override
public void onTabSelected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub
pager.setCurrentItem(arg0.getPosition());
}
@Override
public void onTabUnselected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub
}
@Override
public void onClick(View arg0)
{
Intent intent;
switch (arg0.getId())
{
case R.id.H_income:
intent = new Intent(this, AddIncomeActivity.class);
startActivity(intent);
finish();
break;
case R.id.H_expence:
intent = new Intent(this, AddExpenseActivity.class);
startActivity(intent);
finish();
break;
case R.id.H_category:
intent = new Intent(this, AddCategoryActivity.class);
startActivity(intent);
finish();
break;
case R.id.H_view_expence:
intent = new Intent(this, ViewExpenseActivity.class);
startActivity(intent);
finish();
break;
case R.id.H_view_expence1:
intent = new Intent(this,Add_Borrow.class);
startActivity(intent);
finish();
break;
case R.id.H_view_expence12:
intent = new Intent(this,Send_Msg.class);
startActivity(intent);
finish();
default:
break;
}}
// Transport
i = R.drawable.pic53;
b = BitmapFactory.decodeResource(getResources(), i);
bos=new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.PNG, 100, bos);
img=bos.toByteArray();
cat = new Category("Transport", img);
helper.insertData(cat);
// Education
i = R.drawable.pic55;
b = BitmapFactory.decodeResource(getResources(), i);
bos=new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.PNG, 100, bos);
img=bos.toByteArray();
cat = new Category("Education", img);
helper.insertData(cat);
// Entertainment
i = R.drawable.pic48;
b = BitmapFactory.decodeResource(getResources(), i);
bos=new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.PNG, 100, bos);
img=bos.toByteArray();
cat = new Category("Entertainment", img);
helper.insertData(cat);
// Medical
i = R.drawable.pic50;
b = BitmapFactory.decodeResource(getResources(), i);
bos=new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.PNG, 100, bos);
img=bos.toByteArray();
cat = new Category("Medical", img);
helper.insertData(cat);
// Shopping
i = R.drawable.pic52;
b = BitmapFactory.decodeResource(getResources(), i);
bos=new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.PNG, 100, bos);
img=bos.toByteArray();
cat = new Category("Shopping", img);
helper.insertData(cat);
// Medical
i = R.drawable.pic54;
b = BitmapFactory.decodeResource(getResources(), i);
bos=new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.PNG, 100, bos);
img=bos.toByteArray();
cat = new Category("Travel", img);
helper.insertData(cat);
// Medical
i = R.drawable.pic51;
b = BitmapFactory.decodeResource(getResources(), i);
bos=new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.PNG, 100, bos);
img=bos.toByteArray();
cat = new Category("Other", img);
helper.insertData(cat);
}
@Override
public void onBackPressed()
{
finish();
super.onBackPressed();
}}
SCREEN SHOTS
Home page
show page
Registation page
FUTURE ENHANCEMENTS:
For the future work we have decided to add a confirmation from the user whether they
have taken the medicine or not. If they haven’t taken the medicine the information will be
send to the doctor and he can they reschedule the further medicine reminders according to the
new schedule. Overall, Medicine Remainder is a much needed system by the elderly people
in our homes. It helps them in taking their medications in the prescribed quantity and at the
prescribed time.
CONCLUSION
Tracking your expenses daily can save your amount, but it can also help you set
financial goals for the future. If you know exactly where your amount is going every month,
you can easily see where some cutbacks and compromises can be made. The project what we
have developed is work more efficient than the other income and expense tracker. The project
successfully avoids the manual calculation for avoiding calculating the income and expense
per month. The modules are developed with efficient and also in an attractive manner.
BIBILIOGRAPHY
https://www.studentprojectguide.com/
https://www.freestudentprojects.com/android-projects/pocket-money-
manager/
https://projectworlds.in/android-projects-with-source-
code/expense-tracker-android-app-source-code/