《移动应用开发技术——Android》课程报告-个人记账系统

《移动应用开发技术》课程报告

  • 一、Android应用程序开发背景
    • 1.Android开发的背景
    • 2.应用程序的背景
  • 二、相关理论与方法
    • 1.基本控件
      • (1)TextView
      • (2)Button
      • (3)EditText
    • 2.布局控件:
      • (1)线性布局(LinearLayout)
      • (2)排列方式(orientation)
      • (3)摆放位置(gravity/layout_gravity)
    • 3.Activity
    • 4.SQLite
  • 三、Android应用程序的设计与实现
    • 3.1 设计目的
    • 3.2 设计要求
      • 1.总体设计
      • 2. 数据库设计
      • 3. 界面设计
      • 4. 过程设计
    • 3.3 模块设计与关键代码
      • 3.3.1用户登录页面(activity_main.xml)
      • 3.3.2用户注册页面(activity_register.xml)
      • 3.3.3用户个人中心页面(activity_user_center.xml)
      • 3.3.4用户搜索记录页面(activity_search_record.xml)
      • 3.3.5收支管理页面(activity_manage.xml)
  • 四、总结


《移动应用开发技术》课程报告

  题    目:    个人记账系统    
  姓    名:                     
  学    号:                      
  班    级:                        
  日    期:                      
一、Android应用程序开发背景...................................1
	1.Android开发的背景......................................1
	2.应用程序的背景.........................................1
二、相关理论与方法............................................2
	1.基本控件:.............................................2
		(1)TextView.......................................2
		(2)Button.........................................2
		(3)EditText.......................................2
	2.布局控件:.............................................3
		(1)线性布局 (LinearLayout).........................3
		(2)排列方式(orientation)...........................3
		(3)摆放位置(gravity/layout_gravity)................3
	3.Activity.............................................3
	4.SQLite...............................................3
三、Android应用程序的设计与实现................................4
	3.1 设计目的.............................................4
	3.2 设计要求.............................................4
		1.总体设计..........................................4
		2. 数据库设计........................................5
		3. 界面设计..........................................6
		4. 过程设计..........................................9
	3.3 模块设计与关键代码...................................10
		3.3.1用户登录页面(activity_main.xml)...............10
		3.3.2用户注册页面(activity_register.xml)...........14
		3.3.3用户个人中心页面(activity_user_center.xml).....17
		3.3.4用户搜索记录页面(activity_search_record.xml)...21
		3.3.5收支管理页面(activity_manage.xml).............26
四、总结....................................................30

一、Android应用程序开发背景

1.Android开发的背景

在后PC时代的今天,手机成为最重要的移动终端,是我们出门出行的必携物。以前,或许我们的手机只能为我们提供基本通信功能,而随着Android系统的诞生,我们的生活迎来了一场不亚于“工业革命”带给我们的巨大变化。
基于Android系统的手机处理各类信息的能力得到了质的提升。而Android这个开源的操作系统,将享受这项优质服务的权利给了所有愿意使用它的人。 Android从08年9月的1.1版到今年的11版,一路走来,从基本走向优化,全方面地为我们提供了出色的网络、多媒体、通讯、娱乐等功能。这匹黑马,从诞生伊始到去年7月的“全球市场占有率达81.9%”,告诉我们它的出现是多么受人们欢迎。它备受追捧的原因不外乎它完全的对第三方软件开发商和我们这些开发者的开发。我们可以在它上面实现无限自主的“自定义”。它宛如一张白纸,我们可以在上面随意画出自己想要的东西。它,贵在给我们自由。

2.应用程序的背景

记账是我们中国人千百年来都流传的事情,最初人们使用结绳计数的方式对经济事项进行计数,记录。随着农业的发展,简单的结绳计数方式已经不能满足人们的记账需求,人们开始使用珠算,算盘,纸张来计量,记录。随着计算器的出现,人们开始使用计算器,账本来计算与记录。到了二十一世界,信息化的时代来临,电脑软件的兴起,使得人们开始转向强大计算功能,强大分析功能的电脑软件。接下来来到近些年,移动端的兴起,移动设备具有电脑的强大作用,而且更加容易携带与操作,我相信个人记账软件在手机移动端也能发光发热。个人记账的好处有一下几方面:
1.了解个人自己或者自己家庭的收支情况。记账的作用最直接在于,能够清楚的了解自己个人或者家庭每个月的收入,支出的集体情况。让您对你自己个人或者家庭账单一目了然,从而对自己的财产进行管理。
2.培养个人良好的消费习惯,根据对账目的分析,可以了解自己的消费在哪里。通过记账与分析,让自己成为一个理性而又精明的消费者。
3.规划未来,合理投资。如果你们对自己的账单,每个月支出多少,每个月收入多少,都清清楚楚。做到每-次花钱都用的合理,你就能做到提前规划,提前预算,从而规划未来,合理投资。人们的消费水平提高,人们开始对于自己的收支情况不能做到很好的掌握,但是单纯的采用纸质记账本进行记账,对于繁多的收支情况,造成条目繁多而杂乱。人们对于记录自己的收支情况有着很大的需求。而专业的记账软件,拥有简单而又方便的记账功能,良好的归类管理,能够使得用户方便的记录下自己的收支情况,清晰的了解,自己的收入与支出情况,变化趋势。设计与实现个人记账APP,个人记账APP不仅能让用户方便用户记录自己的收支情况,通过报表显示,清晰的了解自己财产的变化趋势,总结自己的财务情况,移动设备方便携带,实时实地的使用个人记账APP记录自己的收支情况。

二、相关理论与方法

1.基本控件

(1)TextView

TextView就是文本视图,只是用来显示文字的。要想在Activity中显示TextView, 需要在相应的布局文件,也就是Activity对应的layout.xml文件去添加相应的控件标签。这些xml标签可以确定控件的位置,大小,颜色等属性。

(2)Button

在Android中的按钮就叫Button,还是和上面类似,我们需要在Activity对应的布局文件layout.xml中添加一个Button,标签就是代表着Button。

(3)EditText

Activity添加一个输入框,在Android中输入框的类型和标签都是EditText,其功能都是接收用户输入的数据的。

2.布局控件:

(1)线性布局(LinearLayout)

LinearLayout简单来说就是线性布局,线性肯定是具有横竖两种方向的,水平和垂直。

(2)排列方式(orientation)

排列方式有水平和垂直两种方式

(3)摆放位置(gravity/layout_gravity)

gravity是针对当前控件里面内容的摆放,如果是容器,则针对的是容器里面view的摆放;如果是控件,则针对的是控件里面内容的摆放。
layout_gravity是指当前控件在父控件里面的摆放位置,不过需要注意的一点是父控件设置的gravity的级别要低于子控件设置的layout_gravity。

3.Activity

Activity是一个Android应用程序组件(也称为Android四大组件之一),它提供了一个屏幕,用户可以通过该屏幕进行交互以执行某些操作,例如拨打电话,拍照,发送电子邮件或查看地图。每个活动都有一个窗口,用于绘制其用户界面。窗口通常填满屏幕,但可能比屏幕小,并漂浮在其他窗口的顶部.

4.SQLite

SQLite 是个轻量级关系型数据库类似mysql,需要数据库的相关基础知识。

三、Android应用程序的设计与实现

3.1 设计目的

设计和实现一个类似个人财务管理的 Android APP ,数据库采用 SQLite (也可以直接访问 Web 端 MySQL 数据库、或提供 Web 接口访问 MySQL 数据库)。
1.用户注册和登录(这类 APP 一般面对个人,用户不需要分类别);
2. 收入和支出管理(单条收支记录的添加、删除和修改,收入和支出每一条记录至少包括日期、类型、金额和说明。)
3.收入和支出查询(根据时间段、类别等进行查询)
4.收入和支出统计(例如某个月、某个星期或指定时间段的总收支)
5. 其他要求:界面设计应尽量美观,可以添加一些图片或背景。

3.2 设计要求

1.总体设计

基本实现用户注册和登录(这类 APP 一般面对个人,用户不需要分类别);收入和支出管理(单条收支记录的添加、删除和修改,收入和支出每一条记录至少包括日期、类型、金额和说明。);收入和支出查询(根据时间段、类别等进行查询);收入和支出统计(例如某个月、某个星期或指定时间段的总收支) ;其他要求:界面设计应尽量美观,可以添加一些图片或背景。在满足以上需求,对界面进行美化。
对所要实现的功能进行了整理,如下方思维导图3-2-1所示:

《移动应用开发技术——Android》课程报告-个人记账系统_第1张图片

图3-2-1

2. 数据库设计

接下来开始设计数据库,如下方思维导图3-2-2所示:
《移动应用开发技术——Android》课程报告-个人记账系统_第2张图片

图3-2-2

因为功能较为简单,所以数据库只设计了两张表。

3. 界面设计

开始完善该 APP 的界面。基于本次课题需求,设计了5个界面。接下来介绍App 的具体界面设计,如下设计图3-2-3所示:
《移动应用开发技术——Android》课程报告-个人记账系统_第3张图片

图3-2-3

整理五个界面所需要的内容之后,接下来,我们来对它进行原型绘制,如下图3-2-3(a)所示:

《移动应用开发技术——Android》课程报告-个人记账系统_第4张图片

图3-2-3(a)

接着设计高保真 App 界面,如下图3-2-3(b)所示:

《移动应用开发技术——Android》课程报告-个人记账系统_第5张图片

图3-2-3(b)

4. 过程设计

最后是整体app的设计,也是最关键的设计,如图3-2-4所示

《移动应用开发技术——Android》课程报告-个人记账系统_第6张图片

图3-2-4  

3.3 模块设计与关键代码

3.3.1用户登录页面(activity_main.xml)

界面设计:

用户登录界面采用LinearLayout作为根布局控件,并设置其方向为垂直布局,采用TextView显示“login_logo”图片和“用户登录”字样,分别利用LinearLayout水平布局,采用两个ImageView分别显示用户名和密码输入前面的图片,采用两个EditText分别用于用户名和密码输入,设置其hint属性来提示用户输入具体内容,分别利用LinearLayout垂直布局,采用Button设置“登录”按钮“还没有账号?现在注册”。用户登录界面显示效果如图3-3-1所示。

《移动应用开发技术——Android》课程报告-个人记账系统_第7张图片

图3-3-1

功能描述:

用户登录模块主要实现用户登录APP功能,当用户输入正确的用户名和密码时,点击登录按钮,当前界面会提示“登录成功”,如图3-3-1(a)所示,且用户进入APP的主界面;当用户名输入错误时,点击登录按钮,当前界面会提示“登录错误,密码错误或账号不存在”,如图3-3-1(b)所示;当用户名输入正确而密码输入错误时,点击登录按钮,当前界面会提示“登录错误,密码错误或账号不存在”,如图3-3-1©所示。用户名输入错误或密码输入错误时,用户不被允许进入APP主界面。

《移动应用开发技术——Android》课程报告-个人记账系统_第8张图片

图3-3-1(a)

《移动应用开发技术——Android》课程报告-个人记账系统_第9张图片

图3-3-1(b)

《移动应用开发技术——Android》课程报告-个人记账系统_第10张图片

图3-3-1(c)

用户登录功能主要在“登录”按钮的点击事件中实现,通过findViewById()方法获取到用于输入用户名和密码的EditText对象,之后利用equals()方法分别比较输入的用户名和密码与SQLite设定的用户名和密码,采用Toast控件来提示登录状态的信息。

关键代码:

public class MainActivity extends AppCompatActivity {
    EditText edt_id,edt_pwd;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        edt_id = findViewById(R.id.edt_uid);
        edt_pwd =findViewById(R.id.edt_upwd);
        Button btn_login = findViewById(R.id.btn_login);
        //登录按键
        btn_login.setOnClickListener(
            public void onClick(View v) {
                try {
                    String userId=edt_id.getText().toString();
                    String userPwd=edt_pwd.getText().toString();
                    DBHelper dbuserHelper=new DBHelper(getApplicationContext());
                    User user = dbuserHelper.userlogin(userId,userPwd);
                    //登录成功跳转对应类型界面
                    if(user!=null) {
                        Toast.makeText(getApplicationContext(), user.getUserId() + "登录成功", Toast.LENGTH_SHORT).show();
                        Intent intent;
                        ArrayList<User> list = new ArrayList<>();
                        list.add(user);
                        intent = new Intent(getApplicationContext(), UserCenterActivity.class);
                        intent.putParcelableArrayListExtra("LoginUser", list);
                        startActivity(intent);
                    }else{
                        Toast.makeText(getApplicationContext(),"登录失败,密码错误或账号不存在!",Toast.LENGTH_SHORT).show();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    Toast.makeText(getApplicationContext(),"数据库异常",Toast.LENGTH_SHORT).show();
                }
            }
        });
        //注册按键
        Button btn_register=findViewById(R.id.btn_register);
        btn_register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(getApplicationContext(),RegisterActivity.class);

                startActivity(intent);
            }
        });

3.3.2用户注册页面(activity_register.xml)

界面设计:

用户注册页面采用LinearLayout作为根布局控件,并设置其方向为垂直布局,采用TextView显示 “用户登录”字样,分别利用LinearLayout水平布局,采用两个TextView分别设置账号和密码,采用两个EditText用于提示,设置其hint属性来提示用户输入具体内容,采用Button设置“注册”按钮。用户注册页面显示效果如图3-3-2所示。

《移动应用开发技术——Android》课程报告-个人记账系统_第11张图片


 图3-3-2

功能描述:

用户注册模块主要实现用户注册账号功能,当用户输入的用户名和密码时,点击注册按钮,系统会自动保存账号和密码,如图3-3-2(a)所示,当前界面会提示后转跳到用户登录界面,如图3-3-2(b)所示,且用户登录进入APP的主界面,如图3-3-2©所示;

《移动应用开发技术——Android》课程报告-个人记账系统_第12张图片

图3-3-2(a)

《移动应用开发技术——Android》课程报告-个人记账系统_第13张图片

图3-3-2(b)

《移动应用开发技术——Android》课程报告-个人记账系统_第14张图片

图3-3-2(c)

用户注册功能主要在“注册”按钮的点击事件中实现,通过findViewById()方法获取到用于输入用户名和密码的EditText对象,之后利用getApplicationContext()方法分别比创建和保存的用户名和密码,采用Toast控件来提示登录状态的信息。
关键代码:

public class RegisterActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        final EditText edt_rid =findViewById(R.id.edt_rid);
        final EditText edt_rpwd =findViewById(R.id.edt_rpwd);
        Button btn_registerf=findViewById(R.id.btn_registeruser);
        btn_registerf.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                User user = new User();
                user.setUserId(edt_rid.getText().toString());
                user.setUserPwd(edt_rpwd.getText().toString());
                DBHelper dbUserHelper = new DBHelper(getApplicationContext());
                if (dbUserHelper.registerUser(user) > 0) {
                    Toast.makeText(getApplicationContext(), "注册成功", Toast.LENGTH_SHORT).show();
                    Intent intent;
                    ArrayList<User> list = new ArrayList<>();
                    list.add(user);
                    intent = new Intent(getApplicationContext(), MainActivity.class);
                    startActivity(intent);
                }else{
                    Toast.makeText(getApplicationContext(), "您已经注册过此账户,请返回登录", Toast.LENGTH_SHORT).show();
                }
            }
        });


3.3.3用户个人中心页面(activity_user_center.xml)

界面设计:

在个人中心页面当中,将会显示具体的用户名。同时, 有四个按钮入口,分别是:收支管理,查看收支,退出登录和收支统计;个人中心页面采用LinearLayout作为根布局控件,并设置其方向为垂直布局,分别使用LinearLayout作为“收支管理,查看收支,退出登录和收支统计”按钮的布局,并设置其方向为水平布局,内部采用ImageView 和TextView显示“按钮”图片和“用户登录”字样,可以点击“收支管理,查看收支,退出登录和收支统计”进入不同的功能界面,用户个人中心页面显示效果如图3-3-3所示。
《移动应用开发技术——Android》课程报告-个人记账系统_第15张图片

图3-3-3

功能描述:

个人中心页面模块主要实现用户“收支管理”,“查看收支”,“退出登录”和“收支统计”功能的切换,当点击“收支管理”按钮,系统会自动转跳“收支管理”界面,如图3-3-3(a)所示,当点击“查看收支”按钮,系统会自动转跳“查看收支”界面,如图3-3-3(b)所示,当点击“收支统计”按钮,系统会自动转跳“收支统计”界面,如图3-3-3©所示, 当点击“退出登录”按钮,系统会自动转跳“退出登录”界面,会提示是否退出程序,如图3-3-3(d)所示。

《移动应用开发技术——Android》课程报告-个人记账系统_第16张图片

图3-3-3(a)

《移动应用开发技术——Android》课程报告-个人记账系统_第17张图片

图3-3-3(b)

《移动应用开发技术——Android》课程报告-个人记账系统_第18张图片

图3-3-3(c)

《移动应用开发技术——Android》课程报告-个人记账系统_第19张图片

图3-3-3(d)

个人中心页面功能主要在“收支管理,查看收支,退出登录和收支统计”4个按钮的点击事件中实现,通过findViewById()方法获取到需要转跳的二级页面,之后利用,采用Intent方法来转跳到下一二级界面。
关键代码:

public class UserCenterActivity extends AppCompatActivity {
    ArrayList<User> list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_center);
        Intent intent=getIntent();
        list =intent.getParcelableArrayListExtra("LoginUser");
        User user=list.get(0);
        final String username=user.getUserId();
        TextView tv_welcome=findViewById(R.id.tv_welcome);
        tv_welcome.setText("欢迎您 ,用户"+username);
        ImageView btn_recordmanage =findViewById(R.id.btn_recordmanage);
        btn_recordmanage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent1=new Intent(getApplicationContext(), ManageActivity.class);
                startActivity(intent1);
            }
        });
        ImageView btn_searchrecord=findViewById(R.id.btn_searchrecord);
        btn_searchrecord.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent2=new Intent(getApplicationContext(),SearchRecordActivity.class);
                startActivity(intent2);
            }
        });
        ImageView btn_calcmoney=findViewById(R.id.btn_calcmoney);
        btn_calcmoney.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent3=new Intent(getApplicationContext(),SearchRecordActivity.class);
                startActivity(intent3);
            }
        });
        ImageView btn_exit=findViewById(R.id.btn_exit);
        btn_exit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog dialog = new AlertDialog.Builder(UserCenterActivity.this).setTitle("退出操作")
                        .setMessage("确定退出,不继续玩玩?")
                        .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                Intent intent=new Intent(getApplicationContext(), MainActivity.class);
                                startActivity(intent);
                            }            
                   }
             }
          );

3.3.4用户搜索记录页面(activity_search_record.xml)

界面设计:

用户可以通过选择年份月份和筛选类型,点击搜索,来查询该年该月份的各个收入和支出的详情,同时在该时间点和该筛选类型下,点击计算可以对总金额进行计算,用户搜索记录页面采用LinearLayout作为根布局控件,并设置其方向为垂直布局,多次使用LinearLayout作为内部的布局,并设置其方向为水平布局和垂直布局,内部多次采用ImageView 、Spinner和TextView显示“按钮”图片和“用户登录”字样,可以点击Butter按钮进入不同的功能计算,用户搜索记录页面显示效果如图3-3-4所示。
《移动应用开发技术——Android》课程报告-个人记账系统_第20张图片

图3-3-4

功能描述:

用户搜索记录模块主要实现用户记录的账单和查询功能,当用户选择“日期”如图3-3-4(a)所示和“类型”时,如图3-3-4(b)所示,点击搜索按钮,系统会显示用户保存的账单,如图3-3-4©所示,如果账单数量>=2时也可以进行“总金额”的计算,如图3-3-4(d)所示;

《移动应用开发技术——Android》课程报告-个人记账系统_第21张图片

图3-3-4(a)

《移动应用开发技术——Android》课程报告-个人记账系统_第22张图片

图3-3-4(b)

《移动应用开发技术——Android》课程报告-个人记账系统_第23张图片

图3-3-4(c)

《移动应用开发技术——Android》课程报告-个人记账系统_第24张图片

图3-3-4(d)

用户搜索记录页面功能主要在“日期”,“类型”的复选框,搜索和计算个按钮的点击事件中实现,通过spinner控件实现时间和类型的选择,通过findViewById()方法获取到数据库中需要账单内容,用到众多SQL语句,之后将所需要的数据显示到用户搜索记录界面
关键代码:

public class SearchRecordActivity extends AppCompatActivity {
    private String[ ] date_data= {"", "202101", "202102", "202103", "202104", "202105","202106","202107","202108","202109","202110","202111","202112"};
    private String[] type_data = {"", "收入", "支出"};
    Spinner spin_date, spin_type;
    ListView listView;
    TextView tv_show;
    float sum=0;
    private void selectSumMoney() {
        String sql;
        if (TextUtils.isEmpty(selectDate) && TextUtils.isEmpty(selectType)) {
            sql = "select * from " + TABLE_NAME;
        } else if (!TextUtils.isEmpty(selectDate) && TextUtils.isEmpty(selectType)) {
            sql = "select * from " + TABLE_NAME + " where date='" + selectDate + "'";
        } else if (TextUtils.isEmpty(selectDate) && !TextUtils.isEmpty(selectType)) {//如果没有查询时间,有查询类型
            sql = "select * from " + TABLE_NAME + " where type='" + selectType+"'";
        } else {//否则,查询条件都不为空,查询指定内容
            sql ="select * from " + TABLE_NAME + " where date='" + selectDate + "' and type='" + selectType+"'";
        }
        Cursor cursor = sqLiteDatabase.rawQuery(sql, null);
        while (cursor.moveToNext()) {
            float money = cursor.getFloat(cursor.getColumnIndex(COLUMN_MONEY));
            sum=sum+money;
            //list.add(map);
        }
        String money2=String.valueOf(sum);
        tv_show.setText(money2);
        sum=0;
}
    private void initClick() {
        //时间事件
        spin_date.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                selectDate = date_data[position];
            }
            @Override
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });
        spin_type.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                selectType = type_data[position];
            }
            @Override
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });
        findViewById(R.id.btn_search).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                selectData();
            }
        });

3.3.5收支管理页面(activity_manage.xml)

界面设计:

对于收支管理页面来说,用户可以对自己的日常开销进行收支管理,同时也可以进行添加、删除和修改等操作。收支管理页面采用LinearLayout作为根布局控件,并设置其方向为垂直布局,多次使用LinearLayout嵌套作为内部的布局,并设置其方向为水平布局和垂直布局,内部多次采用ImageView 和TextView显示图片和“您选择的序号”、“修改的内容”字样,可以点击Butter“添加”、“修改”、“删除”按钮进入不同的功能的实现,用户搜索记录页面显示效果如图3-3-5所示。

《移动应用开发技术——Android》课程报告-个人记账系统_第25张图片

图3-3-5

功能描述:

收支管理模块主要实现添加、修改用户记录的账单和删除功能,当用户选择“账单”序号,就可以进行收支管理当点击“添加”按钮如图3-3-5(a)所示,点击“修改”按钮,如图3-3-5(b)所示,点击删除按钮,系统会提示用户删除账单,如图3-3-5©所示。

《移动应用开发技术——Android》课程报告-个人记账系统_第26张图片

图3-3-5(a)

《移动应用开发技术——Android》课程报告-个人记账系统_第27张图片

图3-3-5(b)

《移动应用开发技术——Android》课程报告-个人记账系统_第28张图片

图3-3-5(c)

收支管理模块功能主要在日期、类型、金额和说明实现简单的键值对的传值,对SQl内部的数据进行修改并保存,添加、修改和删除按钮的点击事件中实现,通过Toast控件实现提示,通过findViewById()方法获取到数据库中需要账单内容,用到众多sql语句,之后将所需要的更改数据显示到用户收支管理界面
关键代码:

public class ManageActivity extends AppCompatActivity {
    private SQLiteDatabase sqLiteDatabase = null;
    private int selectId = -1;
    EditText edt_date, edt_type, edt_money, edt_state;
    TextView tv_test;
    private static final String CREATE_TABLE = "create table if not exists " + TABLE_NAME
            + "(" + COLUMN_ID + " integer primary key autoincrement," + COLUMN_DATE + " text," + COLUMN_TYPE
            + " text," + COLUMN_MONEY + " float," + COLUMN_STATE + " text)";
    private void selectData() {
        String sql = "select * from " + TABLE_NAME ;
        Cursor cursor = sqLiteDatabase.rawQuery(sql, null);
        ArrayList<Map<String, String>> list = new ArrayList<Map<String, String>>();
        while (cursor.moveToNext()) {
            int id = cursor.getInt(cursor.getColumnIndex(COLUMN_ID));
            String date = cursor.getString(cursor.getColumnIndex(COLUMN_DATE));
            String type = cursor.getString(cursor.getColumnIndex(COLUMN_TYPE));
            float money = cursor.getFloat(cursor.getColumnIndex(COLUMN_MONEY));
            String state = cursor.getString(cursor.getColumnIndex(COLUMN_STATE));

            Map<String, String> map = new HashMap<String, String>();
            map.put("id", String.valueOf(id));
            map.put("date", date);
            map.put("type", type);
            map.put("money", String.valueOf(money));
            map.put("state", state);
            list.add(map);
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_manage);
        try {
            sqLiteDatabase = openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE, null);
            sqLiteDatabase.execSQL(CREATE_TABLE);
            selectData();
        } catch (SQLException e) {
            Toast.makeText(this, "数据库异常!", Toast.LENGTH_LONG).show();
            e.printStackTrace();
        }
        Button btn_add = findViewById(R.id.btn_add);
        btn_add.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                if (edt_date.getText().toString().equals("") | edt_type.getText().toString().equals("") | edt_money.getText().toString().equals("") | edt_state.getText().toString().equals("")) {
                    Toast.makeText(ManageActivity.this, "数据不能为空!", Toast.LENGTH_LONG).show();
                    return;
                }
        Button btn_delete = findViewById(R.id.btn_delete);
        btn_delete.setOnClickListener(new View.OnClickListener() 
                        }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                            }
                        }).create();
                dialog.show();
            }
        });

四、总结

一学期的android学习,基本掌握了Android应用程序开发的一般流程。对常用控件基本掌握其用法,对其事件的监听方法也基本掌握。学习Android不仅是对前沿开发技术的了解,也是对编程知识的一次提升。
通过学习Android的控件、布局、Activity、Service等一系列基础知识,对整个Android的开发有了大致的了解。例如: 要的布局(或者控件) ,在学习界面中,我发现Android为我们提供了很好的类似反射机制,通过Layout文件夹下的配置文件,可以快速的形成界面,在配置文件可以设置属性或者样式都是很快捷方便。对比较特殊的界面也可以通过处理嵌入到指定的界面,同样你可以通过java代码直接创建View进行添加,不过这种方式比较复杂。对一些点击、选中、按键等处理的事件,界面之间的 跳转Intent管理,通过Bundle对数据在界面之间进行传输。
在手机交互式通信服务中,学习了Android手机之间进行短信发送、广播、对广播的监听、服务等,在Service类中没有conte_t,可以通过Handler来每秒反复运行,自动送出系统广播信息,同时在这里我们也知道可以设计一个常用的变量类,设计一个当前的CurrentActivity这个变量进行控制,进行处理。  在Android编程过程中巩固熟悉了Java的编程。由于Android应用程序的开发离不开Java的支持,所以基础的Java知识是必须的。Android系统是基于Linu_的手机操作系统平台,要深入系统的学习Android,不仅仅是有Java和Android应用开发,必须要具备Linu_,C/C++高级编程才能深入的涉及Android Framework和Android内核开发。成为Android开发的高素质人才。所以,在后续对Android的学习中可能会看一些较底层的书籍。
对于Android应用程序的高级编程缺陷很多,是这次学习中的不足。要想开发一些好的应用程序,还需要更多的知识支持。在做学习最后的项目时,遇到了很多平时没有遇到或者没有特别关注的问题,如常见的Activity忘记注册,对SD卡存取需要权限,在写SQL语句时细微的错误就可能导致程序运行错误。这些问题只有自己在实际开发中才能体会到并且解决,并且在解决后可以长时间的记住。  
通过Android的学习,又掌握了一项新的前沿的开发技能,也有了更多的发展方向,这在以后的找工作的过程中无疑为我们增加了砝码,也可以成为我的一项兴趣爱好,可以根据我自己的需要设计一些小的程序。
总之,在这次学习中,我获得了很多东西,提高了自己的编程技巧和编程方法,并且认识了Android应用程序的开发,以及加深了对Java的认识。

你可能感兴趣的:(Android,Java,课设,android,sqlite,ui)