大数据最全10分钟手把手教你用Android手撸一个简易的个人记账App,熬夜肝完这份Framework笔记

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

过程设计

📘二、编码阶段Coding

1. 项目结构🗂️

(1)文件目录

先来看项目的文件目录详情看下图👇

项目文件结构

(2)AndroidManifest.xml

接下来附上 AndroidManifest.xml 的代码,具体代码如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="com.financial.management">

    <application
 android:allowBackup="true"
 android:icon="@mipmap/ic\_launcher"
 android:label="个人财务管理App"
 android:roundIcon="@mipmap/ic\_launcher"
 android:supportsRtl="true"
 android:theme="@style/Theme.Final">
       <activity android:name="com.financial.management.ManageActivity"></activity>
        <activity android:name="com.financial.management.SearchRecordActivity" />
        <activity android:name="com.financial.management.RegisterActivity"/>
        <activity android:name="com.financial.management.UserCenterActivity" />
        <activity android:name="com.financial.management.MainActivity">

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        </activity>
    </application>

</manifest>

(3)Activity类解读

看完上面两个内容之后,接下来是Activity类的解读时间。详情见下表👇

文件名作用
MainActivity用户登录页面Activity,用户可以进行登录。
RegisterActivity用户注册页面Activity,用户可以进行注册。
UserCenterActivity个人中心Activity,对应用户个人中心的4个按钮进行功能编写,实现用户收支管理、查看收支、收支统计、退出登录四大功能。
ManageActivity收支管理Activity,对用户的收入和支出进行管理。
SearchRecordActivity查询收支Activity,通过条件对数据库中的数据进行查询,得出用户想要查询的收支结果。
DBHelper创建数据库表和数据库数据,同时实现与数据库操作相关的登录和注册方法。
User用户类Activity,用于获取用户ID以及密码。
(4)XML解读

解读完 Activity 类之后,现在来对 XML 的各个文件进行介绍。详情见下表👇

文件名作用
activity_main.xml用户登录页面,用户通过输入账号和密码,进行登录操作。
activity_register.xml用户注册页面,用户通过输入账号和密码,进行注册操作。
activity_user_center.xml个人中心页面,当用户登录成功以后,进行个人中心页面。个人中心实现收支管理、查看收支、收支统计、退出登录四大功能。
activity_search_record.xml通过选择年份月份来进行查询该年该月份的各个收入支出详情,并且计算总金额以及根据类别来计算该类别的总金额。
activity_manage.xml用户对自己的日常开销进行收支管理,可以进行添加、删除和修改等操作。
record_item_layout.xml用来存储列表的传输数据

到这里,大家先对待会要编写的 Activity 类和 XML 文件所要展示的功能先进行一番了解。

2. 静态页面⌛

现在,我们到了真正的编码阶段啦!如果是按照我的编码习惯的话,我一般会先把静态页面进行构建,并把一些需要预留的id等等信息给先处理好,方便后面写业务逻辑时可以直接进行绑定。

针对以上6个静态页面,下面将进行代码编写。

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

activity_main.xml 是用户登录页面,当用户通过输入账号和密码时,可以进行登录操作。具体代码如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout\_width="match\_parent"
 android:layout\_height="match\_parent"
 tools:context=".MainActivity">

    <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="match\_parent"
 android:orientation="vertical"
 android:gravity="center\_horizontal"
 app:layout\_constraintLeft\_toLeftOf="parent"
 app:layout\_constraintTop\_toTopOf="parent">

        <TextView
 android:id="@+id/textView1"
 android:layout\_width="360dp"
 android:layout\_height="360dp"
 android:gravity="center"
 android:background="@drawable/login\_logo"
 android:textColor="#fff"
 android:textSize="24dp"
 android:layout\_marginTop="-30dp"
 android:layout\_marginHorizontal="45dp"/>

        <TextView
 android:id="@+id/textView"
 android:layout\_width="match\_parent"
 android:layout\_height="60dp"
 android:gravity="center|center\_horizontal"
 android:text="用户登录"
 android:textColor="#5768C5"
 android:textSize="20dp"
 android:layout\_marginTop="-60dp"
 />


        <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="wrap\_content"
 android:orientation="horizontal"
 android:paddingHorizontal="20dp"
 android:paddingVertical="10dp">

            <ImageView
 android:id="@+id/imageView3"
 android:layout\_width="50dp"
 android:layout\_height="50dp"
 android:layout\_weight="0"
 app:srcCompat="@drawable/account" />

            <EditText
 android:id="@+id/edt\_uid"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:layout\_weight="2"
 android:ems="10"
 android:hint="请输入您的用户名"
 android:inputType="textPersonName" />

        </LinearLayout>

        <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="wrap\_content"
 android:layout\_weight="0"
 android:orientation="horizontal"
 android:paddingHorizontal="20dp"
 android:paddingVertical="10dp">

            <ImageView
 android:id="@+id/imageView4"
 android:layout\_width="50dp"
 android:layout\_height="50dp"
 android:layout\_weight="0"
 app:srcCompat="@drawable/password" />

            <EditText
 android:id="@+id/edt\_upwd"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:layout\_weight="1"
 android:ems="10"
 android:hint="请输入您的密码"
 android:inputType="textPassword" />

        </LinearLayout>

        <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="80dp"
 android:gravity="center"
 android:orientation="horizontal"
 android:paddingHorizontal="60dp">

            <Button
 android:id="@+id/btn\_login"
 android:layout\_width="100dp"
 android:layout\_height="60dp"
 android:layout\_weight="1"
 android:text="登录"
 android:textSize="18dp"
 app:backgroundTint="#4757AE"
 app:cornerRadius="50dp" />

        </LinearLayout>

        <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="wrap\_content"
 android:orientation="vertical">

            <Button
 android:id="@+id/btn\_register"
 android:layout\_width="match\_parent"
 android:layout\_height="40dp"
 android:gravity="center"
 android:text="还没有账号?现在注册"
 android:textColor="#888282"
 android:textColorHint="#FFFFFFFF"
 android:backgroundTint="#FFFFFFFF"
 android:color="#FFFFFF"
 />
        </LinearLayout>

        <TextView
 android:layout\_width="match\_parent"
 android:layout\_height="20dp"
 android:background="#FFFFFF"
 android:layout\_marginTop="-10dp"/>

    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

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

activity_register.xml 是用户注册页面,用户通过输入账号和密码,可以进行注册操作。具体代码如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout\_width="match\_parent"
 android:layout\_height="match\_parent"
 tools:context=".RegisterActivity">
    <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="match\_parent"
 android:orientation="vertical"
 android:gravity="center"
 app:layout\_constraintTop\_toTopOf="parent">

        <TextView
 android:id="@+id/textView10"
 android:layout\_width="220dp"
 android:layout\_height="220dp"
 android:background="@drawable/register\_logo"
 android:gravity="center"
 android:textColor="#FFEB3B"
 android:layout\_marginBottom="20dp"/>

        <TextView
 android:id="@+id/textView5"
 android:layout\_width="match\_parent"
 android:layout\_height="50dp"
 android:gravity="center"
 android:text="用户注册"
 android:textColor="#0C6BC2"
 android:textSize="22sp" />

        <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="wrap\_content"
 android:orientation="horizontal"
 android:paddingHorizontal="20dp"
 android:layout\_marginTop="10dp">

            <TextView
 android:id="@+id/textView7"
 android:layout\_width="wrap\_content"
 android:layout\_height="45dp"
 android:layout\_weight="0"
 android:text="账 号: "
 android:textColor="#0C6BC2"
 android:textSize="22sp" />

            <EditText
 android:id="@+id/edt\_rid"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:layout\_weight="1"
 android:ems="10"
 android:hint="请输入需要注册的账号"
 android:inputType="textPersonName" />
        </LinearLayout>

        <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="wrap\_content"
 android:orientation="horizontal"
 android:paddingHorizontal="20dp"
 android:layout\_marginVertical="15dp">

            <TextView
 android:id="@+id/textView8"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:layout\_weight="0"
 android:text="密 码: "
 android:textColor="#0C6BC2"
 android:textSize="22sp" />

            <EditText
 android:id="@+id/edt\_rpwd"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:layout\_weight="1"
 android:ems="10"
 android:hint="请输入密码"
 android:inputType="textPassword" />
        </LinearLayout>

        <Button
 android:id="@+id/btn\_registeruser"
 android:layout\_width="260dp"
 android:layout\_height="60dp"
 android:layout\_gravity="center"
 android:layout\_marginVertical="20dp"
 android:background="#2D6C2F"
 android:gravity="center"
 android:text="注册"
 android:textSize="22sp"
 app:backgroundTint="#1C8DE6" />

    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

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

现在,来到了个人中心页面。在个人中心页面当中,将会显示具体的用户名。同时, 有四个按钮入口,分别是:收支管理,查看收支,退出登录和收支统计。来看下具体代码实现:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout\_width="match\_parent"
 android:layout\_height="match\_parent"
 tools:context=".UserCenterActivity">
    <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="match\_parent"
 android:orientation="vertical"
 app:layout\_constraintLeft\_toLeftOf="parent"
 app:layout\_constraintTop\_toTopOf="parent">

        <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="120dp"
 android:orientation="horizontal"
 android:gravity="center">

            <ImageView
 android:id="@+id/imageView"
 android:layout\_width="60dp"
 android:layout\_height="60dp"
 app:srcCompat="@drawable/girl"
 android:layout\_marginHorizontal="30dp"/>

            <TextView
 android:id="@+id/tv\_welcome"
 android:layout\_width="wrap\_content"
 android:layout\_height="match\_parent"
 android:layout\_weight="1"
 android:gravity="center|left"
 android:textColor="#4F92CF"
 android:textSize="24sp" />
        </LinearLayout>

        <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="wrap\_content"
 android:orientation="horizontal"
 android:gravity="center\_horizontal"
 android:layout\_marginTop="40dp">

            <LinearLayout
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:layout\_marginHorizontal="20dp"
 android:background="#FFFFFF"
 android:gravity="center\_horizontal"
 android:orientation="vertical"
 android:padding="24dp"
 android:elevation="10dp"
 app:cornerRadius="30dp">

                <ImageView
 android:id="@+id/btn\_recordmanage"
 android:layout\_width="60dp"
 android:layout\_height="60dp"
 app:srcCompat="@drawable/revenue" />

                <TextView
 android:id="@+id/textView17"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:layout\_marginTop="20dp"
 android:text="收支管理"
 android:textColor="#252020"
 android:textSize="18sp" />
            </LinearLayout>

            <LinearLayout
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:orientation="vertical"
 android:gravity="center\_horizontal"
 android:layout\_marginHorizontal="20dp"
 android:background="#FFFFFF"
 android:padding="24dp"
 android:elevation="10dp"
 app:cornerRadius="30dp">

                <ImageView
 android:id="@+id/btn\_searchrecord"
 android:layout\_width="60dp"
 android:layout\_height="60dp"
 app:srcCompat="@drawable/look" />

                <TextView
 android:id="@+id/textView22"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:text="查看收支"
 android:textColor="#FF252020"
 android:textSize="18sp"
 android:layout\_marginTop="20dp"/>
            </LinearLayout>
        </LinearLayout>

        <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="wrap\_content"
 android:orientation="horizontal"
 android:gravity="center\_horizontal"
 android:layout\_marginVertical="30dp">

            <LinearLayout
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:orientation="vertical"
 android:gravity="center\_horizontal"
 android:layout\_marginHorizontal="20dp"
 android:background="#FFFFFF"
 android:padding="24dp"
 android:elevation="10dp"
 app:cornerRadius="30dp">

                <ImageView
 android:id="@+id/btn\_exit"
 android:layout\_width="60dp"
 android:layout\_height="60dp"
 app:srcCompat="@drawable/exit" />

                <TextView
 android:id="@+id/textView4"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:gravity="center"
 android:text="退出登录"
 android:textColor="#FF252020"
 android:textSize="18sp"
 android:layout\_marginTop="20dp"/>
            </LinearLayout>

            <LinearLayout
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:orientation="vertical"
 android:gravity="center\_horizontal"
 android:layout\_marginHorizontal="20dp"
 android:background="#FFFFFF"
 android:padding="24dp"
 android:elevation="10dp"
 app:cornerRadius="30dp">

                <ImageView
 android:id="@+id/btn\_calcmoney"
 android:layout\_width="60dp"
 android:layout\_height="60dp"
 app:srcCompat="@drawable/statics" />

                <TextView
 android:id="@+id/textView23"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:text="收支统计"
 android:textColor="#FF252020"
 android:textSize="18sp"
 android:layout\_marginTop="20dp"/>
            </LinearLayout>
            
        </LinearLayout>
        
    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

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

用户可以通过选择年份月份和筛选类型,点击搜索,来查询该年该月份的各个收入和支出的详情,同时在该时间点和该筛选类型下,点击计算可以对总金额进行计算。下面附上具体代码实现:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout\_width="match\_parent"
 android:layout\_height="wrap\_content"
 tools:context=".SearchRecordActivity">

    <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="match\_parent"
 android:orientation="vertical"
 app:layout\_constraintLeft\_toLeftOf="parent"
 app:layout\_constraintTop\_toTopOf="parent">

        <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="wrap\_content"
 android:orientation="vertical"
 android:gravity="center"
 android:layout\_marginTop="50dp"
 android:layout\_marginBottom="10dp">

            <ImageView
 android:id="@+id/imageView2"
 android:layout\_width="120dp"
 android:layout\_height="120dp"
 app:srcCompat="@drawable/income\_2" />

            <TextView
 android:id="@+id/textView20"
 android:layout\_width="wrap\_content"
 android:layout\_height="match\_parent"
 android:layout\_weight="1"
 android:text="我的收支"
 android:textColor="#3F51B5"
 android:textSize="20sp"
 android:layout\_marginTop="10dp"/>
        </LinearLayout>

        <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="100dp"
 android:orientation="horizontal"
 android:gravity="center\_vertical"
 android:layout\_marginHorizontal="24dp"
 android:layout\_marginTop="30dp">

            <LinearLayout
 android:layout\_width="wrap\_content"
 android:layout\_height="100dp"
 android:orientation="vertical">

                <TextView
 android:id="@+id/textView33"
 android:layout\_width="wrap\_content"
 android:layout\_height="50dp"
 android:text="日期 "
 android:gravity="center\_vertical"
 android:textColor="#111113"
 android:textSize="18sp" />

                <TextView
 android:id="@+id/textView34"
 android:layout\_width="wrap\_content"
 android:layout\_height="50dp"
 android:text="类型 "
 android:gravity="center\_vertical"
 android:textColor="#FF111113"
 android:textSize="18sp" />
            </LinearLayout>

            <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="100dp"
 android:layout\_weight="1"
 android:orientation="vertical">

                <Spinner
 android:id="@+id/spin\_date"
 android:layout\_width="match\_parent"
 android:layout\_height="50dp" />

                <Spinner
 android:id="@+id/spin\_type"
 android:layout\_width="match\_parent"
 android:layout\_height="50dp"
 android:layout\_weight="1" />
            </LinearLayout>

            <LinearLayout
 android:layout\_width="wrap\_content"
 android:layout\_height="100dp"
 android:orientation="vertical"
 android:gravity="center\_vertical">

                <Button
 android:id="@+id/btn\_search"
 android:layout\_width="60dp"
 android:layout\_height="40dp"
 android:background="#39DC54"
 android:text="搜索"
 android:textColor="#FAF9F9"
 android:textSize="12sp"
 app:backgroundTint="#5E97DA" />
            </LinearLayout>
        </LinearLayout>

        <ImageView
 android:layout\_width="360dp"
 android:layout\_height="0.5dp"
 android:background="#D1CDCD"
 android:layout\_gravity="center"
 android:paddingHorizontal="24dp"/>

        <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="50dp"
 android:gravity="center\_vertical"
 android:orientation="horizontal"
 android:layout\_marginHorizontal="24dp">

            <TextView
 android:id="@+id/textView32"
 android:layout\_width="wrap\_content"
 android:layout\_height="50dp"
 android:text="总金额 "
 android:gravity="center\_vertical"
 android:textColor="#FF111113"
 android:textSize="18sp" />

            <TextView
 android:id="@+id/tv\_show"
 android:layout\_width="wrap\_content"
 android:layout\_height="50dp"
 android:layout\_weight="1"
 android:textColor="#4CAF65"
 android:textSize="24sp"
 android:gravity="center\_vertical"/>

            <Button
 android:id="@+id/btn\_calc"
 android:layout\_width="60dp"
 android:layout\_height="40dp"
 android:gravity="center\_vertical"
 android:text="计算"
 android:textColor="#FAF9F9"
 android:textSize="12sp"
 app:backgroundTint="#5E97DA" />
        </LinearLayout>

        <ImageView
 android:layout\_width="360dp"
 android:layout\_height="0.5dp"
 android:background="#D1CDCD"
 android:layout\_gravity="center"
 android:paddingHorizontal="20dp"/>

        <TextView
 android:id="@+id/textView31"
 android:layout\_width="match\_parent"
 android:layout\_height="40dp"
 android:gravity="center\_vertical"
 android:text="查询结果 "
 android:layout\_marginTop="20dp"
 android:textColor="#111113"
 android:layout\_marginHorizontal="24dp"
 android:textSize="18sp"/>

        <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="wrap\_content"
 android:orientation="horizontal"
 android:layout\_marginVertical="20dp"
 android:layout\_marginHorizontal="20dp">

            <TextView
 android:id="@+id/textView29"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:layout\_weight="1"
 android:text="序号"
 android:textColor="#6290c8"
 android:textStyle="bold"
 android:textSize="18sp"
 android:gravity="center\_horizontal"/>

            <TextView
 android:id="@+id/textView26"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:layout\_weight="1"
 android:text="日期"
 android:textColor="#6290c8"
 android:textStyle="bold"
 android:textSize="18sp"
 android:gravity="center\_horizontal"/>

            <TextView
 android:id="@+id/textView25"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:layout\_weight="1"
 android:text="类型"
 android:textColor="#6290c8"
 android:textStyle="bold"
 android:textSize="18sp"
 android:gravity="center\_horizontal"/>

            <TextView
 android:id="@+id/textView27"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:layout\_weight="1"
 android:text="金额"
 android:textColor="#6290c8"
 android:textStyle="bold"
 android:textSize="18sp"
 android:gravity="center\_horizontal"/>

            <TextView
 android:id="@+id/textView28"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:layout\_weight="1"
 android:text="说明"
 android:textColor="#6290c8"
 android:textStyle="bold"
 android:textSize="18sp"
 android:gravity="center\_horizontal"/>
        </LinearLayout>

        <ListView
 android:id="@+id/searchlistview"
 android:layout\_width="match\_parent"
 android:layout\_height="500dp"
 android:layout\_weight="0"
 android:layout\_marginHorizontal="20dp"/>
    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

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

对于收支管理页面来说,用户可以对自己的日常开销进行收支管理,同时也可以进行添加、删除和修改等操作。具体代码如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout\_width="match\_parent"
 android:layout\_height="match\_parent"
 tools:context=".ManageActivity">

    <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="match\_parent"
 android:gravity="center\_horizontal"
 android:orientation="vertical"
 app:layout\_constraintBottom\_toBottomOf="parent"
 app:layout\_constraintLeft\_toLeftOf="parent"
 app:layout\_constraintTop\_toTopOf="parent">

        <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="200dp"
 android:gravity="center"
 android:orientation="vertical">

            <ImageView
 android:id="@+id/imageView2"
 android:layout\_width="150dp"
 android:layout\_height="150dp"
 android:layout\_marginTop="20dp"
 app:srcCompat="@drawable/income\_1" />

            <TextView
 android:id="@+id/textView20"
 android:layout\_width="wrap\_content"
 android:layout\_height="30dp"
 android:text="收支管理"
 android:textColor="#3F51B5"
 android:textSize="20dp" />
        </LinearLayout>


        <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="50dp"
 android:gravity="center\_vertical"
 android:orientation="horizontal">

            <TextView
 android:id="@+id/textView36"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:layout\_marginHorizontal="20dp"
 android:text="您选择的序号是:"
 android:textColor="#152029"
 android:textSize="18sp"
 android:textStyle="bold" />

            <TextView
 android:id="@+id/tv\_test"
 android:layout\_width="match\_parent"
 android:layout\_height="wrap\_content"
 android:hint="暂未选择"
 android:textColor="#4CAF50"
 android:textSize="18sp" />

        </LinearLayout>

        <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="wrap\_content"
 android:layout\_marginHorizontal="20dp"
 android:layout\_marginVertical="10dp"
 android:gravity="center"
 android:orientation="horizontal">

            <TextView
 android:id="@+id/textView29"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:layout\_gravity="center"
 android:layout\_weight="1"
 android:text="序号"
 android:textColor="#111819"
 android:textSize="18sp" />

            <TextView
 android:id="@+id/textView26"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:layout\_weight="1"
 android:text="日期"
 android:textColor="#111819"
 android:textSize="18sp" />

            <TextView
 android:id="@+id/textView25"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:layout\_weight="1"
 android:text="类型"
 android:textColor="#111819"
 android:textSize="18sp" />

            <TextView
 android:id="@+id/textView27"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:layout\_weight="1"
 android:text="金额"
 android:textColor="#111819"
 android:textSize="18sp" />

            <TextView
 android:id="@+id/textView28"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:layout\_weight="1"
 android:text="说明"
 android:textColor="#111819"
 android:textSize="18sp" />

        </LinearLayout>

        <ImageView
 android:layout\_width="380dp"
 android:layout\_height="0.5dp"
 android:background="#D8D3D3"
 android:paddingHorizontal="20dp" />

        <ListView
 android:id="@+id/recordlistview"
 android:layout\_width="wrap\_content"
 android:layout\_height="120dp"
 android:layout\_weight="1"></ListView>

        <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="wrap\_content"
 android:layout\_marginHorizontal="14dp"
 android:orientation="horizontal">

            <TextView
 android:id="@+id/textView18"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:text="日期: "
 android:textColor="#101112"
 android:textSize="18sp" />

            <EditText
 android:id="@+id/edt\_date"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:layout\_weight="1"
 android:ems="10"
 android:hint="填写日期,如:202107表示2021年7月"
 android:inputType="textPersonName" />
        </LinearLayout>

        <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="wrap\_content"
 android:layout\_marginHorizontal="14dp"
 android:orientation="horizontal">

            <TextView
 android:id="@+id/textView21"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:text="类型: "
 android:textColor="#101112"
 android:textSize="18sp" />

            <EditText
 android:id="@+id/edt\_type"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:layout\_weight="1"
 android:ems="10"
 android:hint="类型为收入或支出"
 android:inputType="textPersonName" />
        </LinearLayout>

        <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="wrap\_content"
 android:layout\_marginHorizontal="14dp"
 android:orientation="horizontal">

            <TextView
 android:id="@+id/textView30"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:text="金额: "
 android:textColor="#101112"
 android:textSize="18sp" />

            <EditText
 android:id="@+id/edt\_money"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:layout\_weight="1"
 android:ems="10"
 android:hint="请输入金额"
 android:inputType="textPersonName" />
        </LinearLayout>

        <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="wrap\_content"
 android:layout\_marginHorizontal="14dp"
 android:orientation="horizontal">

            <TextView
 android:id="@+id/tv\_state"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:text="说明: "
 android:textColor="#101112"
 android:textSize="18sp" />

            <EditText
 android:id="@+id/edt\_state"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:layout\_weight="1"
 android:ems="10"
 android:hint="阐述说明"
 android:inputType="textPersonName" />
        </LinearLayout>

        <LinearLayout
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:layout\_marginVertical="30dp">

            <Button
 android:id="@+id/btn\_add"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:layout\_marginHorizontal="10dp"
 android:layout\_weight="1"
 android:text="添加"
 app:backgroundTint="#78C6A3" />

            <Button
 android:id="@+id/btn\_update"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:layout\_marginHorizontal="10dp"
 android:layout\_weight="1"
 android:text="修改"
 app:backgroundTint="#56AB91" />

            <Button
 android:id="@+id/btn\_delete"
 android:layout\_width="wrap\_content"
 android:layout\_height="wrap\_content"
 android:layout\_marginHorizontal="10dp"
 android:layout\_weight="1"
 android:text="删除"
 app:backgroundTint="#358F80" />
        </LinearLayout>
    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

(6)列表数据记录record_item_layout.xml

record_item_layout.xml 主要用途是存储列表的传输数据。具体代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout\_width="match\_parent"
 android:layout\_height="match\_parent">

    <LinearLayout
 android:layout\_width="match\_parent"
 android:layout\_height="match\_parent"
 android:orientation="horizontal"
 android:layout\_marginHorizontal="20dp"
 android:gravity="center\_horizontal"
 android:paddingVertical="2dp">

        <TextView
 android:id="@+id/list\_id"
 android:layout\_width="40dp"
 android:layout\_height="24dp"
 android:layout\_weight="1"
 android:textSize="18sp"
 android:gravity="center\_horizontal" />

        <TextView
 android:id="@+id/list\_date"
 android:layout\_width="90dp"
 android:layout\_height="24dp"
 android:layout\_weight="1"
 android:textSize="18sp"
 android:gravity="center\_horizontal" />

        <TextView
 android:id="@+id/list\_type"
 android:layout\_width="70dp"
 android:layout\_height="24dp"
 android:layout\_weight="1"
 android:textSize="18sp"
 android:gravity="center\_horizontal" />

        <TextView
 android:id="@+id/list\_money"
 android:layout\_width="70dp"
 android:layout\_height="24dp"
 android:layout\_weight="1"
 android:textSize="18sp"
 android:gravity="center\_horizontal" />

        <TextView
 android:id="@+id/list\_state"
 android:layout\_width="90dp"
 android:layout\_height="24dp"
 android:layout\_weight="1"
 android:textSize="18sp"
 android:gravity="center\_horizontal" />

    </LinearLayout>
</LinearLayout>


3. 逻辑结构💡

写完静态页面之后,接下来我们要对每个页面的逻辑进行编写。现在我们来看一下各个 Activity 类所实现的内容都有些什么呢?

(1)DBHelper类

DBHelper 类用于创建数据库表数据库数据,同时实现与数据库操作相关的登录和注册方法。具体代码实现如下:

package com.financial.management;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBHelper extends SQLiteOpenHelper {
    public static final String DB_NAME = "Test.db";
    public static final String TABLE_NAME = "userinfo";
    public static final String COLUMN_USERID = "uid";
    public static final String COLUMN_USERPWD = "upwd";


    //创建数据库语句
    private static final String CREATE_TABLE = "create table if not exists "
            + TABLE_NAME + "(" + COLUMN_USERID + " text not null primary key,"
            + COLUMN_USERPWD + " text not null)";

    public DBHelper(Context context) {
        super(context, DB_NAME, null, 1);
    }

    //创建数据库方法
    @Override
    public void onCreate(SQLiteDatabase db) {
        try {
            db.execSQL(CREATE_TABLE);
            db.execSQL("insert into " + TABLE_NAME + " values('11','11')");
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }

    //重置数据库方法(先删表,再建表)
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("drop table if exists " + TABLE_NAME);
        db.execSQL(CREATE_TABLE);
    }

    //登录方法
    public User userlogin(String userId, String userPwd) {
        User user = null;
        SQLiteDatabase db = getReadableDatabase();
        Cursor cursor = db.query(TABLE_NAME,
                new String[]{COLUMN_USERID, COLUMN_USERPWD},
                COLUMN_USERID + "=? and " + COLUMN_USERPWD + "=?",
                new String[]{userId, userPwd},
                null,
                null,
                null);
        if (cursor.getCount() > 0) {
            cursor.moveToFirst();
            user = new User();
            user.setUserId(cursor.getString(cursor.getColumnIndex(COLUMN_USERID)));
            user.setUserPwd(cursor.getString(cursor.getColumnIndex(COLUMN_USERPWD)));

        }
        return user;
    }

    //注册方法
    public long registerUser(User user) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(COLUMN_USERID, user.getUserId());
        contentValues.put(COLUMN_USERPWD, user.getUserPwd());
        return db.insert(TABLE_NAME, null, contentValues);

    }
}

(2)MainActivity类

MainActivity 类是用户登录页面的Activity,主要编写用户登录页面的代码逻辑。具体代码实现如下:

package com.financial.management;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.util.ArrayList;


//登录页面逻辑
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(new View.OnClickListener() {
            @Override
            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)RegisterActivity类

RegisterActivity 类是用户注册页面的Activity,主要编写用户注册页面的业务逻辑。具体代码实现如下:



![img](https://img-blog.csdnimg.cn/img_convert/bfe3f1d03033e41c0e2832eaceab1244.png)
![img](https://img-blog.csdnimg.cn/img_convert/f764e1bfc0cc260e8dcb36c602afe04c.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

leArrayListExtra("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)RegisterActivity类

RegisterActivity 类是用户注册页面的Activity,主要编写用户注册页面的业务逻辑。具体代码实现如下:



[外链图片转存中...(img-mcPn8Zl4-1715418085005)]
[外链图片转存中...(img-gnIbgcxG-1715418085005)]

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值