Android应用程序开发
课程设计报告
(2019—2020学年 第Ⅰ学期)
基于Android的背单词APP的设计与实现
系 别 信息与控制工程
专 业 计算机科学与技术
班 级 1701
姓 名 闵可欣
指导教师 郭 丹
目录
一、 绪论1
(一) 设计背景及意义 1
(二) 编写目的 1
二、 需求分析2
(一) 需求分析 2
(二) UML需求用例图及用例分析说明 2
三、 系统设计4
(一) 系统总体设计 4
(二) 系统数据库设计 4
(三) 系统详细设计 5
(四) 各模块功能 5
(五) UML设计 6
四、系统测试7
(一)测试登录界面 7
(二)测试录入界面面 8
五、系统实现12
(一)系统实现目标 12
(二)界面布局 12
附件 48
一、绪论
(一)设计背景及意义
随着经济全球化,我们与外国人的接触越来越多,英语已经成为了中国与外面交流的主要工具,同时我国的英语教育也开始普及到了小学,人们对学习英语越来越重视。而对于学习英语特别是英语单词记忆,记忆单词的方式也在不断的更新,而今移动互联网时代的到来,尤其智能手机的广泛应用,英语学习的平台已经逐渐向计算机或者手机等移动设备上转移,背单词的方式方法进入一个新的领域。背单词软件是当下比较流行且方便有效的辅助记忆工具,本文介绍的背单词软件是一款基于android平台的应用软件,其主要功能有单词学习,单词背诵,单词测试,真人发音,添加生词本等。同时本文对背单词软件开发中有关系统设计,系统实施方法和设计词库等方面进行了探索,以此推动计算机英语辅助软件开发。
-
编写目的
以前人们用最简单的辞典,在众多的资料中翻阅、查找,费时、费力,而且应用性非常差。设计这么一个背单词系统,使得用户可以便捷,快速的进行操作,同时也达到了稳定,准确的目的。基于Android的英语背单词程序的设计可以进一步扩大学习英语的途径,让广大公众能够随时随地方便且快捷地认识与记忆英语单词,以提高自身的英语水平。本软件提供从初次记忆单词到熟记单词的所有功能,帮助大家科学学习。当您初次使用本软件记忆单词后,系统会自动为您制定学习复习计划,帮助您科学快速地完成记忆单词的过程。软件提供测试功能,帮助您自我检测学习状态。更好地发挥了Android技术对移动互联网的现实性作用。
二、需求分析
(一)需求分析
1.技术可行性上,Android是一个成熟强大的移动操作系统。而且是一个开源的系统,市场占有率很高。Androld应用是用java语言,虽然版本有好多,但一般会向下兼容,用Android Studio来创建应用程序,Android提供开发的足够的接口API让开发者开发功能强大的应用程序。
2. 经济可行性上,该应用程序不需要服务器端,不需要与别的应用进行交互,只需要本地Android智能机设置好。用户学习内容自动保存,而且复习计划
可自行设置提醒。占用内存小,用户电池消耗小。所以该方案是可行的。
3. 操作可行性上,利用现有的windows系统进行开发。使用Android studio 作为开发工具以及使用Sqlite作为数据库,通过模拟器进行程序调试,然后通过Android智能机进行功能测试。整个过程平台厂泛,皆可实现。
4.系统性能分析方面要求程序响应速度快、安全性高、信息处理速度快。
(二)UML需求用例图及用例分析说明
用例分析说明
登录界面:登录页面用户输入账号和密码进行登录
开始学习界面:开始学习界面取一个昵称
录入界面:
添加信息:在录入界面,用户可以添加想要记录的单词及其翻译,这些数据会被存储到数据库中
查询信息:在录入界面,用户可以查询自己添加的单词及其翻译,这些数据会从数据库中调取出来
修改信息:在录入界面,用户可以修改自己添加的单词及其翻译,这些数据
会覆盖原数据库中的信息,
删除信息:在录入界面,用户可以删除自己添加的单词及其翻译,这些数据会从数据库中删除
背诵界面:
数据库存储的数据会一一显示出来,点击我会会自动删除之前存储的数据,点击不会会显示该单词的汉语意思,点击下一个就会跳到数据库存储的下一条数据
个人中心界面:
分为我的单词库和修改密码两部分;点击我的单词库会看到之前存储的所有数据;点击修改密码,用户可以修改自己的密码
用户
三、系统设计
(一)系统总体设计
(二)系统数据库设计
名称 |
数据类型 |
长度 |
约束 |
说明 |
_id |
INTEGER |
0 |
PRIMARY KEY AUTOINCREMENT |
编号 |
Word |
VARCHAR |
20 |
|
单词 |
Translate |
VARCHAR |
20 |
|
翻译 |
_id |
Word |
translate |
1 |
apple |
苹果 |
2 |
Banana |
香蕉 |
3 |
Orange |
橘子 |
(三)系统详细设计
1.录入界面
编号 |
输入 |
处理 |
输出 |
1 |
点击添加 |
将数据存入数据库 |
显示添加成功 |
2 |
点击查询 |
将数据库信息调取出来 |
显示单词及其翻译 |
3 |
点击修改 |
输入修改内容,将修改后的内容存入数据库 |
显示修改后的单词及其翻译 |
4 |
点击删除 |
将数据从数据库中删除 |
显示删除成功 |
3.背诵界面
编号 |
输入 |
处理 |
输出 |
1 |
点击会 |
将数据从数据库中删除 |
数据已删除 |
2 |
点击不会 |
从数据库中调用数据 |
显示单词的翻译 |
3 |
点击下一个 |
显示下一个单词 |
跳到下一个单词 |
(四)各模块功能
登录模块:登录页面上会显示账户和密码,使用EditText组件,让用户输入账户和密码,使用onCreat方法,实现页面跳转
开始学习模块:输入自己的昵称,点击开始学习按钮跳转到主页面
首页模块:首页模块主要由三部分组成,分别是录入,背诵,个人中心,用户可以点击录入按钮,进行添加单词,并存入数据库;使用线性布局及帧布局进行设计
录入模块:使用了SQLite数据库,实现了用户对单词及其翻译的添加,查询,修改,删除的功能;同时查询显示用户信息时调适配器实现了Listview
背诵模块:使用了SQLite数据库,当用户点击点击会时,会删除这个单词数据,点击不会时,该单词的翻译就会显示,点击下一个时,就会切换成下一个单词;
个人中心模块:该模块由两部分组成,分别是我的单词库和修改我的密码;点击我的单词库会查询显示用户添加的所有单词及其翻译,使用了自定义适配器来实现Listview;点击修改密码按钮,用户确认后会转到登录界面重新登录;
(五)UML设计
1.UML时序图
2. 系统类图
四、系统测试
本次课程设计所用的开发环境为:Android studio
开发技术:Android java
数据库:SQLite数据库
(一)测试登录页面
点击登录,跳转到开始学习界面
(二)测试录入界面
1. 添加测试
添加单词及其翻译后显示“添加成功”
2.查询测试
添加的单词及其翻译会在下面显示出来
3.修改测试
修改单词或者翻译,显示修改成功,再次点击查询会变成所修改的数据
4.删除测试
点击删除,会将存入的数据从数据库删除,并显示删除成功,再次查询时无记录
五、系统实现
(一)系统实现目标
Android 将带给我们更加智能、便捷、现代的生活。从而,Android应用的开发,将会越来越庞大,需求将会越来越丰富。开发英语背单词手机软件和其他应用将会越来越普遍,Android将会越来越壮大。 Android系统的背单词APP系统,主要实现的用户记单词,背单词,查看单词,了解数据的增加、查询、删除、修改,页面跳转,list view的功能。
(二)界面布局
drAnoidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.keshe">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".Main7Activity"></activity>
<activity android:name=".Main6Activity" />
<activity android:name=".Main1Activity" />
<activity android:name=".Main5Activity" />
<activity android:name=".Main4Activity" />
<activity android:name=".Main3Activity" />
<activity android:name=".Main2Activity" />
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
1.登录页面
代码:
//线性布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:background="@drawable/b"
android:id="@+id/activity_main"
android:orientation="vertical">//设置垂直排列
//线性布局
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
//使用组件TextView输入文字
<TextView
android:id="@+id/textView9"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_marginLeft="43dp"
android:layout_marginTop="50dp"
android:text="天天记单词"
android:textColor="#0E0E0D"
android:textSize="28sp" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
//实现账号输入框
<TextView
android:layout_width="80dp"
android:layout_height="50dp"
android:layout_marginTop="130dp"
android:layout_marginLeft="50dp"
android:text="账号:"
android:textSize="20sp"/>//设置文字大小
<EditText
android:layout_width="200dp"
android:layout_height="50dp"
android:layout_marginTop="130dp"
android:layout_marginLeft="15dp"
android:hint="请输入账号:" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">//设置水平排列
//实现密码输入框
<TextView
android:layout_width="80dp"
android:layout_height="50dp"
android:layout_marginTop="20dp"
android:layout_marginLeft="50dp"
android:text="密码:"
android:textSize="20sp"/>
<EditText
android:layout_width="200dp"
android:layout_height="50dp"
android:layout_marginTop="20dp"
android:layout_marginLeft="15dp"
android:hint="请输入密码:" />
</LinearLayout>
//实现登录按钮,跳转页面
<Button
android:id="@+id/main_btn"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_marginLeft="160dp"
android:layout_marginTop="70dp"
android:background="#FFD2D2"
android:text="登录"
android:onClick="click0"//设置onclick实现界面跳转
android:textSize="20sp"
android:alpha="0.8"/>//设置按钮透明度
</LinearLayout>
2. 开始学习界面
代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"//居中
android:background="@drawable/b">
<TextView
android:layout_marginLeft="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="你好!取个名字把!"
android:textColor="#000"
android:textSize="30sp"
android:layout_marginBottom="50dp"
android:id="@+id/main1_tv"
/>
<EditText
android:layout_width="300dp"
android:layout_height="50dp"
android:hint="请输入昵称:"
android:textColorHint="#000"
android:paddingLeft="10dp"
android:textSize="16sp"
android:textColor="#000"
android:id="@+id/main_et_username"
android:layout_below="@+id/main1_tv"
/>
<Button
android:layout_marginTop="20dp"
android:layout_marginLeft="100dp"
android:layout_below="@id/main_et_username"
android:onClick="click1"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:text="开始学习"
android:textSize="20sp"
android:background="#FFD2D2"
android:id="@+id/main6_btn"
android:alpha="0.8"/>
</RelativeLayout>
3.主界面
代码:
<?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"
android:orientation="vertical"
android:background="@drawable/b"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="100dp" >
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始你的单词!"
android:layout_marginLeft="110dp"
android:layout_marginTop="15dp"
android:textSize="30dp">
</TextView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="输入单词 :"
android:layout_marginLeft="60dp"
android:textSize="25dp">
</TextView>
<EditText
android:id="@+id/et_name"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:hint="请输入单词:"
android:layout_marginLeft="10dp"
android:textSize="20dp">
</EditText>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="输入翻译 :"
android:layout_marginLeft="60dp"
android:textSize="25dp">
</TextView>
<EditText
android:id="@+id/et_phone"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:hint="请输入翻译"
android:layout_marginLeft="10dp"
android:textSize="20dp">
</EditText>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/btn_add"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:background="#FFD2D2"
android:alpha="0.5"
android:text="添加"
android:textSize="20dp"
android:layout_marginLeft="2dp"
android:layout_margin="8dp">
</Button>
<Button
android:id="@+id/btn_query"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:background="#FFD2D2"
android:alpha="0.5"
android:text="查询"
android:textSize="20dp"
android:layout_margin="8dp">
</Button>
<Button
android:id="@+id/btn_update"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:text="修改"
android:background="#FFD2D2"
android:alpha="0.5"
android:textSize="20dp"
android:layout_margin="8dp">
</Button>
<Button
android:id="@+id/btn_delete"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:text="删除"
android:background="#FFD2D2"
android:alpha="0.5"
android:textSize="20dp"
android:layout_margin="8dp">
</Button>
</LinearLayout>
<TextView
android:id="@+id/tv_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textSize="20dp"
android:layout_marginTop="10dp">
</TextView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_below="@+id/first_fl"
android:layout_alignParentBottom="true"
android:layout_marginTop="100dp"
android:gravity="center">
<Button
android:layout_marginRight="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="录入"
android:textSize="16sp"
android:background="#FFD2D2"
android:id="@+id/main2_btn_input"
android:alpha="0.8" />
<Button
android:layout_marginRight="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="背诵"
android:onClick="click2"
android:textSize="16sp"
android:background="#FFD2D2"
android:id="@+id/main2_btn_recite"
android:alpha="0.8" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="个人中心"
android:textSize="16sp"
android:background="#FFD2D2"
android:id="@+id/main2_btn_self"
android:alpha="0.8"
android:onClick="click6" />
</LinearLayout>
</LinearLayout>
4.背诵界面
代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
android:id="@+id/activity_main3"
android:background="@drawable/b">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
</LinearLayout>
<LinearLayout
android:layout_marginTop="30dp"
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal"
android:id="@+id/title">
<TextView
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="开始你的单词!"
android:textSize="30sp"
android:id="@+id/first_tv"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true">
</LinearLayout>
<FrameLayout
android:layout_below="@id/title"
android:layout_width="match_parent"
android:layout_height="300dp"
android:id="@+id/first_fl">
<TextView
android:id="@+id/recite_tv_translate"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
android:text="这里显示单词"
android:layout_marginTop="70dp"
android:textSize="20sp" />
<TextView
android:id="@+id/recite_tv_word"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_weight="0.01"
android:gravity="center"
android:layout_marginTop="120dp"
android:text="这里显示翻译"
android:textSize="20sp" />
<Button
android:layout_marginRight="20sp"
android:layout_width="80dp"
android:layout_height="60dp"
android:textSize="20sp"
android:text="我会"
android:background="#FFD2D2"
android:layout_marginTop="180dp"
android:layout_marginLeft="40dp"
android:id="@+id/main3_btn_hui"
android:alpha="0.5"/>
<Button
android:id="@+id/main3_btn_next"
android:layout_width="80dp"
android:layout_height="60dp"
android:background="#FFD2D2"
android:layout_marginTop="180dp"
android:layout_marginLeft="170dp"
android:text="不会"
android:textSize="20sp"
android:alpha="0.5"/>
<Button
android:id="@+id/main3_btn_buhui"
android:layout_width="80dp"
android:layout_height="60dp"
android:layout_marginRight="20sp"
android:background="#FFD2D2"
android:layout_marginTop="180dp"
android:layout_marginLeft="295dp"
android:text="下一个"
android:textSize="20sp"
android:alpha="0.5"/>
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_below="@+id/first_fl"
android:layout_alignParentBottom="true"
android:gravity="center">
<Button
android:layout_marginRight="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="录入"
android:onClick="click4"
android:textSize="16sp"
android:background="#FFD2D2"
android:id="@+id/frist_btn_input"
android:alpha="0.8"
/>
<Button
android:layout_marginRight="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="背诵"
android:textSize="16sp"
android:background="#FFD2D2"
android:id="@+id/frist_btn_recite"
android:alpha="0.8"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="个人中心"
android:onClick="click3"
android:textSize="16sp"
android:background="#FFD2D2"
android:id="@+id/frist_btn_self"
android:alpha="0.8"
/>
</LinearLayout>
</RelativeLayout>
5.个人中心页面
代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
android:id="@+id/activity_main4"
android:background="@drawable/b">
<LinearLayout
android:layout_marginTop="30dp"
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal"
android:id="@+id/title">
<TextView
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="开始你的单词!"
android:textSize="30sp"
android:id="@+id/first_tv"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<Button
android:layout_width="200dp"
android:layout_height="50dp"
android:layout_marginBottom="80dp"
android:alpha="0.5"
android:background="#FFD2D2"
android:onClick="click5"
android:text="我的单词库"
android:textSize="20sp" />
<Button
android:layout_width="200dp"
android:layout_height="50dp"
android:layout_marginBottom="200dp"
android:alpha="0.5"
android:background="#FFD2D2"
android:text="修改密码"
android:onClick="click9"
android:textSize="20sp" />
</LinearLayout>
<FrameLayout
android:layout_below="@id/title"
android:layout_width="match_parent"
android:layout_height="300dp"
android:id="@+id/first_fl">
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_below="@+id/first_fl"
android:layout_alignParentBottom="true"
android:gravity="center">
<Button
android:layout_marginRight="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="录入"
android:onClick="click7"
android:textSize="16sp"
android:background="#FFD2D2"
android:id="@+id/frist_btn_input"
android:alpha="0.8"
/>
<Button
android:layout_marginRight="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="背诵"
android:onClick="click8"
android:textSize="16sp"
android:background="#FFD2D2"
android:id="@+id/frist_btn_recite"
android:alpha="0.8"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="个人中心"
android:textSize="16sp"
android:background="#FFD2D2"
android:id="@+id/frist_btn_self"
android:alpha="0.8" />
</LinearLayout>
</RelativeLayout>
6.我的单词库界面
代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/b">
//设置listview
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/list">
</ListView>
</LinearLayout>
7.修改密码界面
代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/b">
<TextView
android:layout_marginLeft="150dp"
android:layout_width="150dp"
android:layout_height="50dp"
android:text="修改密码"
android:textColor="#000"
android:textSize="30sp"
android:layout_marginTop="200dp"
android:id="@+id/main6_tv"
/>
<EditText
android:layout_width="300dp"
android:layout_height="50dp"
android:hint="请输入新密码:"
android:textColorHint="#000"
android:paddingLeft="10dp"
android:textSize="16sp"
android:textColor="#000"
android:layout_marginTop="25dp"
android:layout_marginLeft="45dp"
android:id="@+id/main6_et_username"
android:layout_below="@+id/main6_tv"
/>
<EditText
android:layout_width="300dp"
android:layout_height="50dp"
android:hint="请确认密码:"
android:textColorHint="#000"
android:paddingLeft="10dp"
android:textSize="16sp"
android:textColor="#000"
android:layout_marginTop="25dp"
android:layout_marginLeft="45dp"
android:id="@+id/main6_et6_username"
android:layout_below="@+id/main6_tv"
/>
<Button
android:layout_width="100dp"
android:layout_height="50dp"
android:background="#FFD2D2"
android:alpha="0.5"
android:text="确定"
android:textSize="20sp"
android:layout_marginTop="25dp"
android:layout_marginLeft="150dp"
android:onClick="click10"
/>
</LinearLayout>
list_item.xml
//设置list view样式
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/b">
<TextView
android:layout_marginLeft="10dp"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:text="1."
android:textSize="20sp"
android:id="@+id/id"/>
<TextView
android:layout_toRightOf="@+id/id"
android:layout_marginLeft="20dp"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:text="apple"
android:textSize="20sp"
android:id="@+id/word"/>
<TextView
android:gravity="center"
android:layout_toRightOf="@+id/word"
android:layout_marginLeft="20sp"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:text="苹果"
android:textSize="20sp"
android:id="@+id/translate"/>
</RelativeLayout>
附件:
一、课设题目
基于Android的背单词APP的设计与实现
二、技术说明
1.Activity之间的跳转
实现页面跳转
2. Sqlite数据库
实现对单词数据的添加,查询,修改,删除功能
3.控件的使用
Textview 、Button、Edittext 等
4.Listview的使用
适配器的调试,自定义
5.事件的监听
OnClickListener()方法实现监听
6.页面布局
使用线性布局(LinearLayout)、相对布局(RelativeLayout)、帧布局
7.OnClickliskListener接口
用来相应button按钮的操作
三、UML类图
四、代码
清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.keshe">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".Main7Activity"></activity>
<activity android:name=".Main6Activity" />
<activity android:name=".Main1Activity" />
<activity android:name=".Main5Activity" />
<activity android:name=".Main4Activity" />
<activity android:name=".Main3Activity" />
<activity android:name=".Main2Activity" />
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
布局文件:
- 布局文件
2.Java文件
Java原码
Word.java
//设置listview
package com.example.keshe;
public class Word {
private Integer conId;
private String conName;
private String content;
private Integer imgId;
public Word(){
}
public Word(Integer conId,String conName,String content){
this.conId = conId;
this.conName = conName;
this.content = content;
}
public Integer getConId() {
return conId;
}
public void setConId(Integer conId) {
this.conId = conId;
}
public String getConName() {
return conName;
}
public void setConName(String conName) {
this.conName = conName;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
WordAdapter.java
@Override
// 适配器的使用
package com.example.keshe;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
public class WordAdapter extends ArrayAdapter{
private int resourceId;
public WordAdapter(@NonNull Context context, int resource, @NonNull List objects) {
super(context, resource, objects);
resourceId = resource;
}
@NonNull
@Override
//加载布局文件
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
//获取当前项的实体类对象
Word cons = (Word) this.getItem(position);
//使用LayoutInflater加载自定义布局,并实例化一个View对象
View view = LayoutInflater.from(getContext()).inflate(resourceId,null);
//获取布局内的控件
TextView consName = (TextView)view.findViewById(R.id.word);
TextView content = (TextView)view.findViewById(R.id.translate);
//为布局内的控件设置实体对象中的数据consImage.setImageResource(cons.getImgId());
consName.setText(cons.getConName());
content.setText(cons.getContent());
//将适配好的ListView返回
return view;
}
}
ReciteBean.java
package com.example.keshe;
public class reciteBean {
private String id;
private String eng;
private String chs;
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
public String getEng() {
return eng;
}
public void setEng(String eng) {
this.eng = eng;
}
public String getChs() {
return chs;
}
public void setChs(String chs) {
this.chs = chs;
}
}
MainActivity.java
package com.example.keshe;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
//继承
public class MainActivity extends AppCompatActivity {
// private Button main_btn;
// public void init(){
// main_btn=(Button)findViewById(R.id.main_btn);
// }
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// init();
// main_btn.setOnClickListener(new View.OnClickListener() {
}
//实现界面跳转
public void click0(View view) {
Intent intent=new Intent(MainActivity.this,Main1Activity.class);
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
}
}
MainActivity1.java
package com.example.keshe;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
public class Main1Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main1);
}
public void click1(View view) {
Intent intent=new Intent(Main1Activity.this,Main7Activity.class);
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
}
}
MainActivity7.java
package com.example.keshe;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class Main7Activity extends AppCompatActivity implements View.OnClickListener {
MyHelper myHelper;
private EditText mEtName, mEtPhone;
private TextView mTvShow;
private Button mBtnAdd, mBtnQuery, mBtnUpdate, mBtnDelete;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main7);
//实现事件监听,点击按钮
myHelper = new MyHelper(this);
mEtword = (EditText) findViewById(R.id.et_word);
mEttranslate = (EditText) findViewById(R.id.et_translate);
mTvShow = (TextView) findViewById(R.id.tv_show);
mBtnAdd = (Button) findViewById(R.id.btn_add);
mBtnQuery = (Button) findViewById(R.id.btn_query);
mBtnUpdate = (Button) findViewById(R.id.btn_update);
mBtnDelete = (Button) findViewById(R.id.btn_delete);
mBtnAdd.setOnClickListener(this);
mBtnQuery.setOnClickListener(this);
mBtnUpdate.setOnClickListener(this);
mBtnDelete.setOnClickListener(this);
}
// public void zxClick(View view){
// Intent intent = new Intent();
// intent.setClass(Wode.this, MainActivity.class);
// startActivity(intent);
// finish();
// }
// public void wdClick1(View view) {
// Intent intent = new Intent();
// intent.setClass(Wode.this, Shouye.class);
// startActivity(intent);
// finish();
// }
//
// public void wdClick2(View view) {
// Intent intent = new Intent();
// intent.setClass(Wode.this, Shujia.class);
// startActivity(intent);
// finish();
// }
// public void wdClick3(View view) {
// Intent intent = new Intent();
// intent.setClass(Wode.this, Wode.class);
// startActivity(intent);
// finish();
// }
// 数据库
@Override
public void onClick(View v) {
String word, translate;
SQLiteDatabase db;
ContentValues values;
switch (v.getId()) {
case R.id.btn_add://添加数据
word = mEtWord.getText().toString();
translate = mEtTranslate.getText().toString();
db = myHelper.getWritableDatabase();
values = new ContentValues();
values.put("word", word);
values.put("translate", translate);
db.insert("danchi", null, values);
Toast.makeText(this, "添加成功", Toast.LENGTH_SHORT).show();
db.close();
break;
case R.id.btn_query://查询数据
db = myHelper.getReadableDatabase();
Cursor cursor = db.query("danchi", null, null, null, null, null, null);
if (cursor.getCount() == 0) {
mTvShow.setText("");
Toast.makeText(this, "无记录", Toast.LENGTH_SHORT).show();
} else {
cursor.moveToFirst();
mTvShow.setText("单词:" + cursor.getString(1) + "翻译:" + cursor.getString(2));
}
while (cursor.moveToNext()) {
mTvShow.append("
" + "单词:" + cursor.getString(1) + "翻译:" + cursor.getString(2));
}
cursor.close();
db.close();
break;
case R.id.btn_update://修改数据
db = myHelper.getWritableDatabase();
values = new ContentValues();
values.put("translate", translate = mEttranslate.getText().toString());
db.update("danchi", values, "word=?", new String[]{mEtword.getText().toString()});
Toast.makeText(this, "修改成功", Toast.LENGTH_SHORT).show();
db.close();
break;
case R.id.btn_delete://删除数据
db = myHelper.getWritableDatabase();
db.delete("danchi", null, null);
Toast.makeText(this, "删除成功", Toast.LENGTH_SHORT).show();
mTvShow.setText("");
db.close();
break;
}
}
public void click2(View view) {
Intent intent=new Intent(Main7Activity.this,Main3Activity.class);
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
}
public void click6(View view) {
Intent intent=new Intent(Main7Activity.this,Main4Activity.class);
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
}
}
MainActivity3.java
package com.example.keshe;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import com.example.keshe.DBOpenHelper;
public class Main3Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
}
public void click3(View view) {
Intent intent = new Intent(Main3Activity.this, Main4Activity.class);
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
}
public void click4(View view) {
Intent intent = new Intent(Main3Activity.this, Main7Activity.class);
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
}
}
MainActivity4.java
package com.example.keshe;
import androidx.appcompat.app.AppCompatActivity;
import com.example.keshe.DBOpenHelper;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class Main4Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main4);
}
public void click5(View view) {
Intent intent=new Intent(Main4Activity.this,Main5Activity.class);
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
}
public void click7(View view) {
Intent intent=new Intent(Main4Activity.this,Main3Activity.class);
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
}
public void click8(View view) {
Intent intent=new Intent(Main4Activity.this,Main7Activity.class);
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
}
public void click9(View view) {
Intent intent=new Intent(Main4Activity.this,Main6Activity.class);
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
}
}
MainActivity5.java
package com.example.keshe;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.annotation.SuppressLint;
import android.app.Activity;
public class Main5Activity extends AppCompatActivity {
private List<Word> consList = new ArrayList();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main5);
//初始化数据
initData();
//创建自定义布局适配器
WordAdapter adapter = new WordAdapter(Main5Activity.this,R.layout.list_item,consList);
//获取ListView
ListView listView = (ListView)findViewById(R.id.list);
//给ListView设置适配器
listView.setAdapter((ListAdapter) adapter);
}
private void initData(){
Word apple = new Word(1,"apple","苹果");
consList.add(apple);
Word banana = new Word(2,"banana","香蕉");
consList.add(banana);
Word orange = new Word(3,"orange","橘子");
consList.add(orange);
Word desk = new Word(4,"desk","桌子");
consList.add(desk);
Word chair = new Word(5,"chair","椅子");
consList.add(chair);
}
}
MainActivity6.java
package com.example.keshe;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import com.example.keshe.DBOpenHelper;
public class Main6Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main6);
}
public void click10(View view) {
Intent intent=new Intent(Main6Activity.this,MainActivity.class);
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
}
}
MyHelper.java
package com.example.keshe;
//数据库
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class MyHelper extends SQLiteOpenHelper {
public MyHelper(Context context){
super(context,"minkexindb.db",null,2);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE danchi(_id INTEGER PRIMARY KEY AUTOINCREMENT,word VARCHAR(20),translate VARCHAR(20))");
db.execSQL("CREATE TABLE danci(_id INTEGER PRIMARY KEY AUTOINCREMENT,chs VARCHAR(20),eng VARCHAR(20))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
SQLiteHelper.java
package com.example.keshe;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class SQLiteHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME="recite";
public static final String DATABASE_TABLE="reiteend";
public static final int DATABASE_VERSION=1;
public static final String ID = "id";
public static final String REITEEND_ENGLISH="eng";
public static final String REITEEND_CHINESE="cge";
private SQLiteDatabase sqLiteHelper;
// private reciteBean mRecitrBean;
public SQLiteHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
sqLiteHelper = this.getWritableDatabase();
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("create table "+DATABASE_TABLE+""
+ "("+ID+" integer primary Key autoincrement, "+REITEEND_ENGLISH+" VARCHAR(20),"+REITEEND_CHINESE+" VARCHAR(20))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
public boolean insert (String enh,String cne) {
ContentValues values = new ContentValues();
values.put(SQLiteHelper.REITEEND_ENGLISH, enh);
values.put(SQLiteHelper.REITEEND_CHINESE, cne);
return sqLiteHelper.insert(SQLiteHelper.DATABASE_TABLE, null, values)>0;
}
public boolean delect (String id) {
return sqLiteHelper.delete(SQLiteHelper.DATABASE_TABLE, SQLiteHelper.ID+"=?", new String[] {id})>0;
}
public boolean upadta(String enh,String cne ,String id) {
ContentValues values = new ContentValues();
values.put("enh", enh);
values.put("cne", cne);
return sqLiteHelper.update(SQLiteHelper.DATABASE_TABLE, values , SQLiteHelper.ID+"=?", new String[] {id})>0;
}
public List<reciteBean> query() {
List<reciteBean> list = new ArrayList<reciteBean>();
reciteBean bean = new reciteBean();
Cursor cursor =sqLiteHelper.query(SQLiteHelper.DATABASE_TABLE, null, null, null, null, null, null);
if(cursor!=null) {
while (cursor.moveToNext()) {
String id =cursor.getString(cursor.getColumnIndex(SQLiteHelper.ID));
String english = cursor.getString(cursor.getColumnIndex(SQLiteHelper.DATABASE_NAME));
String chinese =cursor.getString(cursor.getColumnIndex(SQLiteHelper.REITEEND_CHINESE));
bean.setId(id);
bean.setChs(chinese);
bean.setEng(english);
list.add(bean);
}
cursor.close();
}
return list;
}
}
类说明
MyHelper.java——建立数据库表
WordAdapter.java——设置查询时的listview
ReciteBean.java——设置查询listview的方法
MainActivity.java——设置登录页面
MainActivity1.java——设置开始学习页面
MainActivity7.java——设置录入页面
MainActivity3.java——设置背诵页面
MainActivity4.java——设置个人中心页面
MainActivity5.java——设置listview页面
MainActivity6.java——设置修改页面