基于Android的家庭财务管理系统

一、项目简介

该项目共有5个表(收入、支出、转账、用户、账户)。用户登录后可进行转账和收支的操作。通过对表中信息的增加、删除、修改、查看来实现家庭财务管理系统的实现。

1、用户

可以通过注册信息,来插入到用户表。再通过登录系统,可以查看到用户的信息,点击后可以跳转到修改页面,可以进行修改,点击删除和增加按钮连接到数据库可以实现用户信息表的更新。

2、账户

用户登录后,可以查看账户信息,查看账户的余额、卡号等,点击信息后可以进行跳转,跳转到修改页面进行修改,点击删除和增加按钮连接数据库可以实现账户信息表的更新。

3、收入

用户登录后,点击查看收入可以看到家庭里的成员对账户的操作,包括存款和转账收入等信息。通过按钮也可以进行删除和增加,增加收入时,可以通过数据库中表的使用来对账户中金额的增加并记录。

4、支出

用户登录后,点击查看支出可以看到家庭里的成员对账户的操作,包括消费和转账支出等信息。通过按钮也可以进行删除和增加,增加收入信息时,可以通过数据库中表的使用来对账户中金额的减少并记录。

5、转账

用户登录后可以进行转账操作,进行转账会同时更新收入表和支出表以及卡表和转账表的更新,账户金额的信息同时也进行更新。从而实现数据表之间的连接。

二、项目设计方案

共分五大部分(收入、支出、转账、用户、账户)。每一部分都有其自身表的增加、删除、修改、查看功能,然后创建一个小型的SQLite数据库,库中共包含五个表分别对应五个部分。

2.1  用户

首先在数据库里创建一个用户表“user”,表中包含用户id自增,用户名,称呼,性别,密码五个数据。通过Activity来实现java与xml之间的联系。页面上有信息的显示,以及增加和删除按钮,通过点击按钮可以实现页面的跳转再通过调用数据库的增加方法和删除方法进而实现增加和删除。点击页面信息可以进行修改。数据库中用户表代码如下:

private static String CREATE_TABLE2="create table if not exists "+TABLE_user
       
+"(_id integer primary key autoincrement,name varchar(20),relation varchar(10),sex varchar(2),password varchar(10))";

2.2  账户

在数据库里创建一个账户表“bankcard”,表中包含账户id自增,卡号,金额,密码四个数据。通过Activity来实现java与xml之间的联系。页面上有信息的显示,以及增加和删除和充值按钮,通过点击按钮可以实现页面的跳转再通过调用数据库的增加方法和删除方法进而实现增加和删除。点击充值按钮,账户余额会更新,同时收入表数据也会增加。点击页面信息可以进行修改。数据库中账户表代码如下:

private static String CREATE_TABLE1="create table if not exists "+TABLE_bankcard
       
+"(_id integer primary key autoincrement,cardNum varchar(20),money float not null,password varchar(10))";

2.3  收入

在数据库里创建一个收入表“income”,表中包含收入id自增,姓名,卡号,金额,来源,密码四个数据。通过Activity来实现java与xml之间的联系。页面上有信息的显示,以及增加按钮,通过点击按钮可以实现页面的跳转进而实现增加。收入表数据会增加同时账户余额会更新。点击页面信息可以进行删除。数据库中收入表代码如下:

private static String CREATE_TABLE3="create table if not exists "+TABLE_income
       
+"(_id integer primary key autoincrement,i_name varchar(20),cardNum varchar(20),record varchar(20),money float not null,i_time varchar(10))";

2.4  支出

在数据库里创建一个支出表“expend”,表中包含收入id自增,姓名,卡号,金额,用途,密码四个数据。通过Activity来实现java与xml之间的联系。页面上有信息的显示,以及增加按钮,通过点击按钮可以实现页面的跳转进而实现增加。点击增加按钮,支出表数据也会增加,同时账户余额会更新。点击页面信息可以进行删除操作。数据库中支出表代码如下:

private static String CREATE_TABLE4="create table if not exists "+TABLE_expend
       
+"(_id integer primary key autoincrement,e_name varchar(20),cardNum varchar(20),record varchar(20),money float not null,e_time varchar(10))";

2.5  转账

在数据库里创建一个转账表“transfer”,表中包含收入id自增,姓名,转出账号,操作,转出账号,金额,密码四个数据。通过Activity来实现java与xml之间的联系。页面上有信息的显示,以及增加按钮,通过点击按钮可以实现页面的跳转进而实现增加。点击增加按钮,收入表数据会增加,支出表数据也会增加,转账表数据会增加,同时账户余额也会更新。点击页面信息可以进行删除操作。数据库中转账表代码如下:

private static String CREATE_TABLE5="create table if not exists "+TABLE_transfer

        +"(_id integer primary key autoincrement,t_name varchar(20),cardNum1 varchar(20),record varchar(20),cardNum2 varchar(20),money float not null,T_time varchar(10))";

项目功能实现

3.1  用户登录

用户登陆时可以通过Toast.makeText提示账号密码的异常情况在输入正常的账号密码之后通过c.moveToFirst();判断用户是否存在,若为在记录账号则通过intent跳转到主界面。同时可以通过点击界面的记住密码,将用户名和密码保存到首选项信息中。如图3-1所示:
图3-1 用户登录图

 

代码如下:
Toast.makeText(LoginActivity.this, "请输入姓名", Toast.LENGTH_SHORT).show();
c.moveToFirst();

String LogPwd=c.getString(c.getColumnIndex("password"));

if(pwd.equals(LogPwd)){

    Intent intent=new Intent(LoginActivity.this,MenuActivity.class);

    intent.putExtra("name",name);

    startActivity(intent);
if (cb.isChecked()) {

    SharedPreferences.Editor editor=preferences.edit();

    editor.putString("name"+etname.getText().toString(),name);

    editor.putString("pwd"+etname.getText().toString(),pwd);

    editor.commit();

}
 

3.2  查看用户信息

查看用户功能首先通过DatabaseHelper方法创建数据库,根据id获取所需数据,并使用SimpleCursorAdapter方法以列表的形式展现出来。如图3-2所示:

图3-2 用户信息图

代码如下:
final DatabaseHelper dbHelper =new DatabaseHelper(UserActivity.this);

final Cursor c=dbHelper.query(tablename);

String[] from=new String[]{"name","relation","sex","password"};

int [] to=new int[]{R.id.tvUname,R.id.tvUrelation,R.id.tvUsex,R.id.tvUpwd};

SimpleCursorAdapter adapter=new SimpleCursorAdapter(UserActivity.this,R.layout.userlist,

        c,from,to,SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);

3.3  删除用户信息

用户删除部分在点击删除按钮之后,先通过SimpleCursorAdapter将数据展示出来,通过点击list信息触发监听,弹出是否确认的窗口。点击确定后,通过AlertDialog.Builder调用DataBaseHelper中的delete方法进行数据的删除,最后将修改后的数据罗列出来。如图3-3所示:

图3-3 删除用户图

代码如下:
final DatabaseHelper dbHelper =new DatabaseHelper(DeleteUser.this);

        final Cursor c=dbHelper.query(tablename);

        String[] from=new String[]{"name","relation","sex","password"};

        int [] to=new int[]{R.id.tvUname,R.id.tvUrelation,R.id.tvUsex,R.id.tvUpwd};

        SimpleCursorAdapter adapter=new SimpleCursorAdapter(DeleteUser.this,R.layout.userlist,

                c,from,to,SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);

        list.setAdapter(adapter);

        list.setOnItemClickListener( new AdapterView.OnItemClickListener() {

            @Override

            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

//                final TextView n=findViewById(R.id.tvUname) ;

//                final String name=n+"";

                final long temp=id;



                AlertDialog.Builder builder=new AlertDialog.Builder(DeleteUser.this);

                builder.setMessage("确定要删除该用户吗?");

                builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {

    @Override

    public void onClick(DialogInterface dialog, int which) {

        //dbHelper.delUser(tablename,name);

        dbHelper.del(tablename,(int)temp);

        Cursor c=dbHelper.query(tablename);

        String[] from=new String[]{"name","relation","sex","password"};

        int [] to=new int[]{R.id.tvUname,R.id.tvUrelation,R.id.tvUsex,R.id.tvUpwd};

        SimpleCursorAdapter adapter=new SimpleCursorAdapter(DeleteUser.this,R.layout.userlist,

                c,from,to,SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);

        list.setAdapter(adapter);

    }

});

3.4  增加用户信息

增加用户的主要功能代码存在于AddUser.java文件之中,增加账户的内容主要包含了姓名、称呼、性别、密码以及两个按钮这些部分。其中姓名、称呼和密码采用EditText组件实现页面效果,而性别则采用了单选组件RadioGroup。

首先,要能够保证输入的所有信息都能够被获取到,可以使用findViewById方法通过xml文件中各组件的id获取各组件获得的信息。其中性别(sex)信息较为特殊,其组件RadioGroup是通过单选按钮获取信息,因此需要用到监听器进行监听。同时将监听获取到的按钮信息通过getText().toString()方式转为string类型,以方便对性别信息的记录。

其中还可以添加Toast以在选择性别时弹出提示信息提示所选项。数据输入完毕后,需要对数据是否已经存在于数据库中进行判断。点击提交按钮后,通过AlertDialog.Builder调用DataBaseHelper中的add方法增加用户信息,通过监听判断新信息是否存在于数据库中,如果不存在,则弹出弹窗进行最后确认。最后确认后,便可以用DatabaseHelper连接数据库,并用final ContentValues valueCreate对数据进行保存。

注册成功后便可以通过使用intent方法跳转到程序内页面,或者可以点击返回回到上一页。如图3-4所示:

图3-4 增加用户图

代码如下:

btok=findViewById(R.id.btCreatein);
btcanel=findViewById(R.id.btCreateout);
etname=findViewById(R.id.createname);
etrelation=findViewById(R.id.createrelation);
etpwd=findViewById(R.id.createpwd);
sex=findViewById(R.id.radioGroup1);

sex.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

    @Override

    public void onCheckedChanged(RadioGroup radioGroup, int i) {

        RadioButton rb=findViewById(i);

        seex = rb.getText().toString();

        Toast.makeText(AddUser.this,

                "选择的性别为:"+rb.getText().toString(),

                Toast.LENGTH_LONG).show();

    }

});
btok.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View v) {

        name=etname.getText().toString();

        pwd=etpwd.getText().toString();

        relation=etrelation.getText().toString();

        if(name.equals("")){

            Toast.makeText(AddUser.this, "请输入姓名", Toast.LENGTH_SHORT).show();

        }else if(relation.equals("")){

            Toast.makeText(AddUser.this, "请输入称呼", Toast.LENGTH_SHORT).show();

        }else if(pwd.equals("")){

            Toast.makeText(AddUser.this, "请输入密码", Toast.LENGTH_SHORT).show();

        }else{

            final DatabaseHelper dbHelper = new DatabaseHelper(getApplicationContext());

            final AlertDialog.Builder builder = new AlertDialog.Builder(AddUser.this);

            builder.setMessage("确认注册吗?");

            builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {

               @Override

                public void onClick(DialogInterface dialog, int which) {



                    Cursor c=dbHelper.namequery(name);

                    if(c.getCount()!=0){

                        etname.setText("");

                        Toast.makeText(AddUser.this, "该用户已存在", Toast.LENGTH_SHORT).show();



                    }else{

                        DatabaseHelper dbHelper2=new DatabaseHelper(getApplicationContext());

                        final ContentValues valueCreate = new ContentValues();

                        valueCreate.put("name",name);

                        valueCreate.put("relation",relation);

                        valueCreate.put("sex",seex);

                        valueCreate.put("password",pwd);

                        dbHelper2.insertUser(valueCreate);

                        Toast.makeText(AddUser.this, "操作成功", Toast.LENGTH_SHORT).show();

                        finish();

                    }



btcanel.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View v) {

        Intent intent=new Intent();

        intent.setClass(AddUser.this, UserActivity.class);

        intent.putExtra("name",name1);

        startActivity(intent);

    }

});

3.5  修改用户信息

修改用户信息操作与增加用户操作相似,其不同在于修改用户信息之前先需要在UserActivity中获取用户的信息在UpdateUser中获取用户信息,最后根据修改页面中对新信息的获取将新数据更新入数据库中。如图3-5所示:

图 3-5 修改信息图

代码如下:

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

//                final TextView n=findViewById(R.id.tvUname) ;

//                final String name=n+"";

                final long temp=id;

                String name=((TextView)view.findViewById(R.id.tvUname)).getText().toString();

                String relation=((TextView)view.findViewById(R.id.tvUrelation)).getText().toString();

                String sex=((TextView)view.findViewById(R.id.tvUsex)).getText().toString();

                String pwd=((TextView)view.findViewById(R.id.tvUpwd)).getText().toString();



                Intent intent3=new Intent(UserActivity.this,UpdateUser.class);

                intent3.putExtra("_id",temp+"");

                intent3.putExtra("name",name);

                intent3.putExtra("relation",relation);

                intent3.putExtra("sex",sex);

                intent3.putExtra("password",pwd);

                startActivity(intent3);
intent=getIntent();

id1=intent.getStringExtra("_id");

etname.setText(intent.getStringExtra("name"));

etsex.setText(intent.getStringExtra("sex"));

etrelation.setText(intent.getStringExtra("relation"));

etpwd.setText(intent.getStringExtra("password"));

id=Integer.valueOf(id1);
final AlertDialog.Builder builder = new AlertDialog.Builder(UpdateUser.this);
dbHelper1.updateUser(values,id)

3.6  查看账户信息

查看帐户功能首先通过DatabaseHelper方法创建数据库,根据id获取所需数据,并使用SimpleCursorAdapter方法以列表的形式展现出来。如图3-6所示:

图3-6 账户信息图

代码如下:

final DatabaseHelper dbHelper =new DatabaseHelper(CardActivity.this);

final Cursor c=dbHelper.query(tableName);

String[] from=new String[]{"_id","cardNum","money","password"};

int [] to=new int[]{R.id.tvCid,R.id.tvCcard,R.id.tvCmoney,R.id.tvCpwd};

SimpleCursorAdapter adapter=new SimpleCursorAdapter(CardActivity.this,R.layout.cardlist,

        c,from,to,SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);

3.7  增加账户信息

增加账户的主要功能代码存在于AddCard.java文件之中,增加账户的内容主要包含了账户,金额,密码以及两个按钮这些部分。账户,金额,密码采用EditText组件实现页面效果。使用findViewById方法通过xml文件中各组件的id获取各组件获得的信息。并且通过通过AlertDialog.Builder调用DataBaseHelper中的add方法增加帐户信息,通过监听判断新信息是否存在于数据库中,如果不存在,则弹出弹窗进行最后确认。最后确认后,便可以用DatabaseHelper连接数据库,并用final ContentValues对数据进行保存。如图3-7所示:

图3-7增加账户信息

代码如下:

btok.setOnClickListener(new View.OnClickListener() {
@Override
    public void onClick(View v) {
        if ((etcard.getText().toString()).equals("")) {
            Toast.makeText(AddCard.this, "请输入银行卡", Toast.LENGTH_SHORT).show();
        } else if ((etmoney.getText().toString()).equals("")) {
            Toast.makeText(AddCard.this, "请输入金额", Toast.LENGTH_SHORT).show();
        } else if ((etpwd.getText().toString()).equals("")) {
            Toast.makeText(AddCard.this, "请输入密码", Toast.LENGTH_SHORT).show();
        } else {
            final float money = Float.parseFloat(etmoney.getText().toString());
            card = etcard.getText().toString();
            pwd = etpwd.getText().toString();
 
            final DatabaseHelper dbHelper = new DatabaseHelper(getApplicationContext());
            final AlertDialog.Builder builder = new AlertDialog.Builder(AddCard.this);
            builder.setMessage("确认增加吗?");
            builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Cursor c = dbHelper.cardquery(card);
                    if (c.getCount() != 0) {
                        etcard.setText("");
                        Toast.makeText(AddCard.this, "此卡已存在", Toast.LENGTH_SHORT).show();
 
} else {

            final DatabaseHelper dbHelper1 = new DatabaseHelper(getApplicationContext());

            final ContentValues values = new ContentValues();

            values.put("cardNum", card);

            values.put("money", money);

            values.put("password", pwd);

            dbHelper1.insertCard(values);

            Toast.makeText(AddCard.this, "操作成功", Toast.LENGTH_SHORT).show();

            finish();

        }

    }

});

3.8  删除账户信息

用户删除部分在点击删除按钮之后,先通过SimpleCursorAdapter将数据展示出来,通过点击list信息触发监听,弹出是否确认的窗口。点击确定后,通过AlertDialog.Builder调用DataBaseHelper中的delete方法进行数据的删除,最后将修改后的数据罗列出来。如图3-8所示:

图3-8 删除账户图

final DatabaseHelper dbHelper =new DatabaseHelper(DeleteCard.this);

        final Cursor c=dbHelper.query(tablename);

        String[] from=new String[]{"_id","cardNum","money","password"};

        int [] to=new int[]{R.id.tvCid,R.id.tvCcard,R.id.tvCmoney,R.id.tvCpwd};

        SimpleCursorAdapter adapter=new SimpleCursorAdapter(DeleteCard.this,R.layout.cardlist,

                c,from,to,SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);

        list.setAdapter(adapter);

        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override

            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                final long temp=id;

                AlertDialog.Builder builder=new AlertDialog.Builder(DeleteCard.this);

                builder.setMessage("确定要删除该账户吗?");
builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {

    @Override

    public void onClick(DialogInterface dialog, int which) {

        //dbHelper.delUser(tablename,name);

        dbHelper.del(tablename,(int)temp);

        Cursor c=dbHelper.query(tablename);

        String[] from=new String[]{"_id","cardNum","money","password"};

        int [] to=new int[]{R.id.tvCid,R.id.tvCcard,R.id.tvCmoney,R.id.tvCpwd};

        SimpleCursorAdapter adapter=new SimpleCursorAdapter(DeleteCard.this,R.layout.cardlist,

                c,from,to,SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);

        list.setAdapter(adapter);

    }

});

3.9  修改账户信息

修改帐户信息操作与增加账户操作相似,其不同在于修改帐户信息之前先需要在CardActivity中获取帐户的信息,在UpdateCard中获取帐户信息,最后根据修改页面中对新信息的获取将新数据更新入数据库中。如图3-9所示:

图3-9 修改账户图

代码如下:

list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                final long temp=id;
                Stringcard=((TextView)view.findViewById(R.id.tvCcard)).getText().toString();
                Stringmoney=((TextView)view.findViewById(R.id.tvCmoney)).getText().toString();
 String pwd=((TextView)view.findViewById(R.id.tvCpwd)).getText().toString();
                Intent intent3=new Intent(CardActivity.this,UpdateCard.class);
intent3.putExtra("_id",temp+"");
intent3.putExtra("cardNum",card);
intent3.putExtra("money",money);
intent3.putExtra("password",pwd);
  intent3.putExtra("name",name);
  startActivity(intent3);
intent=getIntent();
        name=intent.getStringExtra("name");
etcard.setText(intent.getStringExtra("cardNum"));
etmoney.setText(intent.getStringExtra("money"));
etpwd.setText(intent.getStringExtra("password"));
card=etcard.getText().toString();
id1=intent.getStringExtra("_id");
id=Integer.valueOf(id1);
final AlertDialog.Builder builder = new AlertDialog.Builder(UpdateCard.this);
dbHelper1.updateCard(values,id);

3.10  充值

充值通过AlertDialog.Builder调用DataBaseHelper中的cardquery方法来查找Card的余额和密码,如果密码正确,那么余额更新,并且更新数据库,收入表也会相应更新。如图3-10所示:
 

图3-10 充值图
代码如下:
DatabaseHelper dbHelper = new DatabaseHelper(getApplicationContext());
Cursor c = dbHelper.cardquery(card);
if (c.getCount() != 0) {
c.moveToFirst();
    DatabaseHelper dbHelpermoney=new DatabaseHelper(getApplicationContext());
    Cursor c2=dbHelpermoney.querymoney(card);
    if(c2.getCount()!=0){
        c2.moveToFirst();
        moneys=c2.getFloat(c2.getColumnIndex("money"));
        DatabaseHelper dbHelperpwd = new DatabaseHelper(getApplicationContext());
        Cursor c1 = dbHelperpwd.queryPwd(card);
        if(c1.getCount()!=0){
            c1.moveToFirst();
            String pwd=c1.getString(c1.getColumnIndex("password"));
if (etpwd.getText().toString().equals(pwd)) {
//余额更新
    float money1 = money + moneys;
    ContentValues values = new ContentValues();
    values.put("money", money1);
    DatabaseHelper dbHelper2 = new DatabaseHelper(getApplicationContext());
    dbHelper2.updatecard(values, card);
}
DatabaseHelper dbHelper3 = new DatabaseHelper(getApplicationContext());
SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd ");
String time = sdf.format(new java.util.Date());
final ContentValues valueIncome = new ContentValues();
valueIncome.put("i_name", name);
valueIncome.put("cardNum", card);
valueIncome.put("record", "充值");
valueIncome.put("money", money);
valueIncome.put("i_time", time);
dbHelper3.insertIncome(valueIncome);
Toast.makeText(AddMoney.this, "充值成功", Toast.LENGTH_SHORT).show();
finish();

3.11  查看收入信息  

收入信息的展示主要通过ListView以及与数据库中收入表的信息通过适配器SimpleCursorAdapter 相结合按照Incomelist的格式展示到页面activity_income的页面上。如图3-11所示:

图3-11 收入信息图

代码如下:

final DatabaseHelper dbHelper =new DatabaseHelper(getApplicationContext());

final Cursor c=dbHelper.query(tablename);

String[] from=new String[]{"i_name","cardNum","record","money","i_time"};

int [] to=new int[]{R.id.tvInname,R.id.tvIncard,R.id.tvInrecord,R.id.tvInmonty,R.id.tvIntime};

SimpleCursorAdapter adapter=new SimpleCursorAdapter(IncomeActivity.this,R.layout.incomelist,

        c,from,to,SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);

list.setAdapter(adapter);
public Cursor query(String tableName){

    if (db==null){

        db=getWritableDatabase();

    }

    Cursor cursor=db.query(tableName,null,null,null,

            null,null,null);

    return cursor;

}

3.12  删除收入信息

通过为ListView设置点击监听,使用AlertDialog.Builder对话框,创建一个数据库类进行调用del函数通过id删除对应表的数据。再次通过适配器来更新删除后的信息,并展示到页面。如图3-12所示:

图3-12 删除收入图

代码如下:

public void del(String tableName,int id){

    if (db==null){

        db=getWritableDatabase();

    }

    db.delete(tableName,"_id=?",new String[]{String.valueOf(id)});

}
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

    @Override

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

         temp= (int)id;



        AlertDialog.Builder builder=new AlertDialog.Builder(IncomeActivity.this);

        builder.setMessage("确定要删除该收入信息吗?");

        builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {

            @Override

            public void onClick(DialogInterface dialog, int which) {

                dbHelper.del(tablename,temp);

                Cursor c=dbHelper.query(tablename);

                String[] from=new String[]{"i_name","cardNum","record","money","i_time"};

                int [] to=new int[]{R.id.tvInname,R.id.tvIncard,R.id.tvInrecord,R.id.tvInmonty,R.id.tvIntime};

                SimpleCursorAdapter adapter=new SimpleCursorAdapter(IncomeActivity.this,R.layout.incomelist,

                        c,from,to,SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);

                list.setAdapter(adapter);

            }

        });

        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {



            @Override

            public void onClick(DialogInterface arg0, int arg1) {

                // TODO Auto-generated method stub



            }

        });

        builder.create().show();

3.13  增加收入信息

在activity_income页面设置增加按钮,并为按钮设置监听,然后使用equals进行判空操作,然后使用AlertDialog.Builder对话框设置确认和取消,通过创建新的数据库类以及使用Cursor来查找账户是否存在,若存在,则获取对应的金额那一列的数据,再次对密码进行查找,如果存在,则通过equals对密码进行判断是否输入正确,如果正确则通过SimpleDateFormat获取系统时间,通过调用登录页面的静态全局变量获取用户姓名,再通过ContentValues将数据放到values里,然后通过调用数据库里的插入函数insertIncome将数据插入到收入表里。如图3-13所示:

图3-13 增加收入图

代码如下:

if((etcard.getText().toString()).equals("")){

    Toast.makeText(AddIncome.this, "请输入银行卡", Toast.LENGTH_SHORT).show();

}else if((etget.getText().toString()).equals("")){

    Toast.makeText(AddIncome.this, "请输入来源", Toast.LENGTH_SHORT).show();

}else if((etmoney.getText().toString()).equals("")){

    Toast.makeText(AddIncome.this, "请输入金额", Toast.LENGTH_SHORT).show();

}else if((etpwd.getText().toString()).equals("")){

    Toast.makeText(AddIncome.this, "请输入密码", Toast.LENGTH_SHORT).show();

}
if(money>0){

    DatabaseHelper dbHelper=new DatabaseHelper(getApplicationContext());

    Cursor c = dbHelper.cardquery(card);

    if (c.getCount() != 0) {

        c.moveToFirst();

        moneys=c.getFloat(c.getColumnIndex("money"));

        DatabaseHelper dbHelper1=new DatabaseHelper(getApplicationContext());

        Cursor c1=dbHelper1.queryPwd(card);

        if(c1.getCount()!=0){

            c1.moveToFirst();

            String  pwd=c1.getString(0);

            if(etpwd.getText().toString().equals(pwd)){

                float money1 = money + moneys;

                ContentValues values = new ContentValues();

                values.put("money", money1);

                DatabaseHelper dbHelper2=new DatabaseHelper(getApplicationContext());

                dbHelper2.updatecard(values, card);

                DatabaseHelper dbHelper3=new DatabaseHelper(getApplicationContext());

                SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd ");

                String time = sdf.format(new java.util.Date());

                final ContentValues valueIncome = new ContentValues();

                valueIncome.put("i_name", name);

                valueIncome.put("cardNum", card);

                valueIncome.put("record",get);

                valueIncome.put("money", money);

                valueIncome.put("i_time", time);

                dbHelper3.insertIncome(valueIncome);

                Toast.makeText(AddIncome.this, "操作成功", Toast.LENGTH_SHORT).show();

3.14  收入修改账户信息

通过创建一个DatabaseHelper类以及Cursor的使用查找账户,再通过getColumnIndex获取账户对应的金额,将其与输入的金额相加,再通过ContentValues将金额放到values里,通过调用数据库的Updatecard来更新账户的金额信息。如图3-14所示:

图3-14 修改账户图

代码如下:

moneys=c.getFloat(c.getColumnIndex("money"));
float money1 = money + moneys;

ContentValues values = new ContentValues();

values.put("money", money1);

DatabaseHelper dbHelper2=new DatabaseHelper(getApplicationContext());

dbHelper2.updatecard(values, card);

3.15  查看支出信息

支出信息的展示主要通过ListView以及与数据库中收入表的信息通过适配器SimpleCursorAdapter 相结合按照Expendlist的格式展示到页面activity_income的页面上。如图3-15所示:

图3-15 收入信息图

代码如下:

final DatabaseHelper dbHelper =new DatabaseHelper(ExpendActivity.this);
final Cursor c=dbHelper.query(tablename);
String[] from=
new String[]{"e_name","cardNum","record","money","e_time"};
int [] to=new int[]{R.id.tvOutname,R.id.tvOutcard,R.id.tvOutrecord,R.id.tvOutmoney,R.id.tvOuttime};
SimpleCursorAdapter adapter=
new SimpleCursorAdapter(ExpendActivity.this,R.layout.expendlist,
        c,from,to,SimpleCursorAdapter.
FLAG_REGISTER_CONTENT_OBSERVER);
list.setAdapter(adapter);

3.16  增加支出信息

在activity_expend页面设置增加按钮,并为按钮设置监听,然后使用equals进行判空操作,然后使用AlertDialog.Builder对话框设置确认和取消,通过创建新的数据库类以及使用Cursor来查找账户是否存在,若存在,则获取对应的金额那一列的数据,再次对密码进行查找,如果存在,则通过equals对密码进行判断是否输入正确,如果正确则通过SimpleDateFormat获取系统时间,通过调用登录页面的静态全局变量获取用户姓名,再通过ContentValues将数据放到values里,然后通过调用数据库里的插入函数insertExpend将数据插入到收入表里。如图3-16所示:

图3-16 增加支出图

代码如下:

if((etcard.getText().toString()).equals("")){

    Toast.makeText(AddExpend.this, "请输入银行卡", Toast.LENGTH_SHORT).show();

}else if((etout.getText().toString()).equals("")){

    Toast.makeText(AddExpend.this, "请输入用途", Toast.LENGTH_SHORT).show();

}else if((etmoney.getText().toString()).equals("")){

    Toast.makeText(AddExpend.this, "请输入金额", Toast.LENGTH_SHORT).show();

}else if((etpwd.getText().toString()).equals("")){

    Toast.makeText(AddExpend.this, "请输入密码", Toast.LENGTH_SHORT).show();

}
AlertDialog.Builder builder=new AlertDialog.Builder(AddExpend.this);

builder.setMessage("确定要转账吗?");

builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {

    @Override

    public void onClick(DialogInterface dialog, int which) {

        money=Float.parseFloat(etmoney.getText().toString());

        String card=etcard.getText().toString();

        String out=etout.getText().toString();

        if(money>0){

            DatabaseHelper db=new DatabaseHelper(getApplicationContext());

            Cursor c = db.cardquery(card);

            if (c.getCount() != 0) {

                c.moveToFirst();

                moneys=c.getFloat(c.getColumnIndex("money"));

                if(moneys>=money){

                    DatabaseHelper db1=new DatabaseHelper(getApplicationContext());

                    Cursor c1=db1.queryPwd(card);

                    if(c1.getCount()!=0){

                        c1.moveToFirst();

                        String  pwd=c1.getString(c1.getColumnIndex("password"));

                        if(etpwd.getText().toString().equals(pwd)){

                            money1 moneys-money;

                            ContentValues values = new ContentValues();

                            values.put("money", money1);

                            DatabaseHelper db2=new DatabaseHelper(getApplicationContext());

                            db2.updatecard(values, card);

                            DatabaseHelper db3=new DatabaseHelper(getApplicationContext());

                            SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd ");

                            String time = sdf.format(new java.util.Date());

                            final ContentValues valueExpend = new ContentValues();

                            valueExpend.put("e_name", name);

                            valueExpend.put("cardNum", card);

                            valueExpend.put("record",out);

                            valueExpend.put("money", money);

                            valueExpend.put("e_time", time);

                            db3.insertExpend(valueExpend);

                            Toast.makeText(AddExpend.this, "操作成功", Toast.LENGTH_SHORT).show();

3.17  删除支出信息

通过为ListView设置点击监听,使用AlertDialog.Builder对话框,创建一个数据库类进行调用del函数通过id删除对应表的数据。再次通过适配器来更新删除后的信息,并展示到页面。如图3-17所示:

图3-17 删除支出图

代码如下:

list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

    @Override

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        final long temp=id;



        AlertDialog.Builder builder=new AlertDialog.Builder(ExpendActivity.this);

        builder.setMessage("确定要删除该收入信息吗?");

        builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {

            @Override

            public void onClick(DialogInterface dialog, int which) {

                dbHelper.del(tablename,(int)temp);

                Cursor c=dbHelper.query(tablename);

                String[] from=new String[]{"e_name","cardNum","record","money","e_time"};

                int [] to=new int[]{R.id.tvOutname,R.id.tvOutcard,R.id.tvOutrecord,R.id.tvOutmoney,R.id.tvOuttime};

                SimpleCursorAdapter adapter=new SimpleCursorAdapter(ExpendActivity.this,R.layout.expendlist,

                        c,from,to,SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);

                list.setAdapter(adapter);

            }

        });

        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {



            @Override

            public void onClick(DialogInterface arg0, int arg1) {

                // TODO Auto-generated method stub



            }

        });

        builder.create().show();

3.18  支出修改账户信息

通过创建一个DatabaseHelper类以及Cursor的使用查找账户,再通过getColumnIndex获取账户对应的金额,将其与输入的金额相减,再通过ContentValues将金额放到values里,通过调用数据库的Updatecard来更新账户的金额信息。如图3-18所示:

图 3-18 账户信息图

代码如下:

moneys=c.getFloat(c.getColumnIndex("money"));
money1 moneys-money;

ContentValues values = new ContentValues();

values.put("money", money1);

DatabaseHelper db2=new DatabaseHelper(getApplicationContext());

db2.updatecard(values, card);

3.19  查看转账信息

转账信息的展示主要通过ListView以及与数据库中收入表的信息通过适配器SimpleCursorAdapter 相结合按照transferlist的格式展示到页面activity_transfer的页面上,如图3-19所示:

图3-19 转账信息图

代码如下:

final DatabaseHelper dbHelper =new DatabaseHelper(getApplicationContext());

final Cursor c=dbHelper.query(tablename);

String[] from=new String[]{"t_name","cardNum1","record","cardNum2","money","T_time"};

int [] to=new int[]{R.id.Transname,R.id.Transcard1,R.id.Transrecord,R.id.Transcard2,R.id.Transmoney,R.id.Transtime};

SimpleCursorAdapter adapter=new SimpleCursorAdapter(TransferActivity.this,R.layout.transferlist,

        c,from,to,SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);

list.setAdapter(adapter);

3.20  增加转账信息

在TransferMoney页面设置增加按钮,并为按钮设置监听跳转,然后使用equals进行判空操作,然后使用AlertDialog.Builder对话框设置确认和取消,通过创建新的数据库类以及使用Cursor来查找转出账户是否存在,若存在,再次创建新的数据库类以及使用Cursor来查找转入账户是否存在,若存在,则获取对应的金额那一列的数据再次对密码进行查找,如果存在,则通过equals对密码进行判断是否输入正确,如果正确则通过SimpleDateFormat获取系统时间,通过调用登录页面的静态全局变量获取用户姓名,再通过ContentValues将数据放到values里,然后通过调用数据库里的插入函数insertTransfer将数据插入到转账表里。如图3-20所示:

图3-20 增加转账图

代码如下:

if (etcard1.getText().toString().equals("")) {

    Toast.makeText(TransferMoney.this, "输入转出账户", Toast.LENGTH_SHORT).show();

} else if (etcard2.getText().toString().equals("")) {

    Toast.makeText(TransferMoney.this, "输入转入账户", Toast.LENGTH_SHORT).show();

} else if (etmoney.getText().toString().equals("")) {

    Toast.makeText(TransferMoney.this, "输入转账金额", Toast.LENGTH_SHORT).show();

} else if (etpwd.getText().toString().equals("")) {

    Toast.makeText(TransferMoney.this, "输入密码", Toast.LENGTH_SHORT).show();

} else if(etcard1.getText().toString().equals(etcard2.getText().toString())){

    Toast.makeText(TransferMoney.this, "转入转出账户相同", Toast.LENGTH_SHORT).show();

}
DatabaseHelper db3 = new DatabaseHelper(getApplicationContext());

SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd ");

String time = sdf.format(new java.util.Date());

final ContentValues valueTransfer = new ContentValues();

valueTransfer.put("t_name", name);

valueTransfer.put("cardNum1", card1);

valueTransfer.put("record", "转账给");

valueTransfer.put("cardNum2", card2);

valueTransfer.put("money", money);

valueTransfer.put("T_time", time);

db3.insertTransfer(valueTransfer);

3.21  删除转账信息

通过为ListView设置点击监听,使用AlertDialog.Builder对话框,创建一个数据库类进行调用del函数通过id删除对应转账表的数据。再次通过适配器来更新删除后的信息,并展示到页面。如图3-21所示:

图3-21 删除转账图

代码如下:

list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

    @Override

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        final long temp=id;

        AlertDialog.Builder builder=new AlertDialog.Builder(TransferActivity.this);

        builder.setMessage("确定要删除该收入信息吗?");

        builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {

            @Override

            public void onClick(DialogInterface dialog, int which) {

                dbHelper.del(tablename,(int)temp);

                Cursor c=dbHelper.query(tablename);

                String[] from=new String[]{"t_name","cardNum1","record","cardNum2","money","T_time"};

                int [] to=new int[]{R.id.Transname,R.id.Transcard1,R.id.Transrecord,R.id.Transcard2,R.id.Transmoney,R.id.Transtime};

                SimpleCursorAdapter adapter=new SimpleCursorAdapter(TransferActivity.this,R.layout.transferlist,

                        c,from,to,SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);

                list.setAdapter(adapter);

            }

        });

        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {



            @Override

            public void onClick(DialogInterface arg0, int arg1) {

                // TODO Auto-generated method stub



            }

        });

        builder.create().show();

3.22  更新收入信息

通过SimpleDateFormat获取系统时间,通过调用登录页面的静态全局变量获取用户姓名,再通过ContentValues将数据放到values里,然后通过调用数据库里的插入函数insertIncome将数据插入到收入表里。如图3-22所示:

图3-22 更新收入图

代码如下:

DatabaseHelper db4 = new DatabaseHelper(getApplicationContext());

final ContentValues valueIncome = new ContentValues();

valueIncome.put("i_name", name);

valueIncome.put("cardNum", card2);

valueIncome.put("record", "收到转账");

valueIncome.put("money", money);

valueIncome.put("i_time", time);

db4.insertIncome(valueIncome);

3.23  更新支出信息

通过SimpleDateFormat获取系统时间,通过调用登录页面的静态全局变量获取用户姓名,再通过ContentValues将数据放到values里,然后通过调用数据库里的插入函数insertExpend将数据插入到支出表里。如图3-23所示:

图3-23 更新支出图

代码如下:

DatabaseHelper db5 = new DatabaseHelper(getApplicationContext());

final ContentValues valueExpend = new ContentValues();

valueExpend.put("e_name", name);

valueExpend.put("cardNum", card1);

valueExpend.put("record", "转账支出");

valueExpend.put("money", money);

valueExpend.put("e_time", time);

db5.insertExpend(valueExpend);

3.24  更新账户信息

通过新建数据库类使用Cursor调用数据库中的cardquery函数,查找转出账户,若存在,则获取对应的金额那一列的数据。再通过ContentValues将金额插入,通过调用UpdateCard函数更新余额。通过新建数据库类使用Cursor调用数据库中的cardquery函数,查找转入账户,若存在,则获取对应的金额那一列的数据。再通过ContentValues将金额插入,通过调用UpdateCard函数更新余额。如图3-24所示:

图3-24 更新账户图

代码如下:

money1s = money1 - money;
                                  ContentValues values = new ContentValues();

values.put("money", money1s);

DatabaseHelper db1 = new DatabaseHelper(getApplicationContext());

db1.updatecard(values, card1);
money2s = money2 + money;
ContentValues values1 = new ContentValues();

values1.put("money", money2s);

DatabaseHelper db2 = new DatabaseHelper(getApplicationContext());

db2.updatecard(values1, card2);

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值