AndroID移动应用开发
课程设计报告
(2019—2020学年 第Ⅰ学期)
电子词典
系 别 信息与控制工程
专 业 计算机科学与技术
班 级 1701
姓 名 高兴
指导教师 郭 丹
目录
一、需求分析
1.1引言
1.1.1编写目的
1.1.2项目背景
1.2功能需求分析
1.2.1功能描述
1.3系统功能用例图
1.4系统开发及运行环境
二、功能设计
2.1系统详细设计
2.1.1进入界面
2.1.2主界面
2.1.3添加界面
2.1.4删除界面
2.2数据库
2.2.1表名
2.2.2表结构
2.2.3数据库的创建
三、关键源代码
四、实际测试
五、项目总结
一、需求分析
1.1引言21世纪以来,科技发展势头迅猛,电子行业更可以说得上是日新月异。从各个方面来看,由于智能手机的普及,手机APP已然成为了电子行业中的领头羊。
1.1.1编写目的
词典对于人们学习知识,认识世界有着不可估量的价值,可以说是每一个人开启学习殿堂的第一扇门。但是传统的词典有着体积大,不便于携带的劣势,在如今飞速发展的现代社会,这显然并不会成为大多数人的最佳选择。于是电子词典手机APP就如雨后春笋般层出不穷,成为了词典这个大家族中不可或缺的一员。
1.1.2项目背景
比起传统词典,手机电子词典具备了便于携带、 *** 作简单、方便快捷等优点。如今市面上各大应用市场中的电子词典大多占用内存大,对手机的硬件配置要求也比较高,运行起来需要占用的资源较大。所以本项目意在开发出一款占用内存小,适用度较高,便于 *** 作,能被大部分用户所接受的手机APP软件。
本文详细介绍了开发软件所用到的的数据库的创建过程、开发软件的环境配置过程、以及细致地分析了整个软件的功能性与实用性。
本项目基于AndroID平台,使用了sqlite轻量级数据库实现了本地查询,单词本,单词释义等功能,研究方法和技术主要涉及AndroID *** 作系统应用层开发,经过反复测试,该项目现已研发完成。
1.2功能需求分析1.2.1功能描述1.2.1.1主要功能
通过开发前期对于各大手机软件应用市场进行市场调研,得到了一份基本功能数据汇总,确定了大部分电子词典软件都包含着的基本功能,也就是用户对于电子词典手机APP的主要需求。在仔细研究以及分析这些数据之后,以下是电子词典这个软件所需要基本的功能:
(1)检索功能,这个最核心的功能,实现了单词的查询 *** 作。
(2)添加功能,实现生词的添加。
(3)删除功能,实现错误输入单词的删除。
1.3.系统功能用例图
图1.3系统功能用例图
1.4系统开发及运行环境
开发环境:androID studio
运行环境:AndroID智能手机/模拟器
二、功能设计
2.1系统详细设计2.1.1进入界面
图2.1.1 进入界面
2.1.2主界面
图2.1.2主界面
2.1.3添加界面
图2.1.3 添加界面
2.1.4删除界面
2.1.4删除界面
2.2数据库
2.2.1表名tb_dict
2.2.2表结构
2.2.3数据库的创建
package com.example;
import androID.content.Context;
import androID.database.sqlite.sqliteDatabase;
import androID.database.sqlite.sqliteOpenHelper;
import androID.util.Log;
import androIDx.annotation.Nullable;
public class DBOpenHelper extends sqliteOpenHelper {
final String CREATE_table_sql="create table tb_dict(_ID integer primary key autoincrement,word,detail)";
public DBOpenHelper(@Nullable Context context, @Nullable String name, @Nullable sqliteDatabase.CursorFactory factory, int version) {
super(context, name, null, version);
}
@OverrIDe
public voID onCreate(sqliteDatabase db) {
db.execsql(CREATE_table_sql);
}
@OverrIDe
public voID onUpgrade(sqliteDatabase db, int oldVersion, int newVersion) {
Log.i("词典","--版本更新"+oldVersion+"-->"+newVersion);
}
}
三、关键源代码
3.1.1进入界面布局代码
<?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"
androID:background="@drawable/bg"
tools:context=".LoadingActivity">
<button
androID:ID="@+ID/Loading"
androID:layout_wIDth="150dp"
androID:layout_height="79dp"
androID:layout_marginBottom="92dp"
androID:background="@drawable/shape"
androID:text="进入"
androID:textcolor="#FFFFFF"
androID:textStyle="bold"
androID:textSize="40dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="MissingConstraints" />
</androIDx.constraintlayout.Widget.ConstraintLayout>
3.1.2进入界面activity代码
package com.example;
import androIDx.appcompat.app.AppCompatActivity;
import androID.content.Intent;
import androID.os.Bundle;
import androID.vIEw.VIEw;
import androID.Widget.button;
import androID.Widget.Toast;
public class LoadingActivity extends AppCompatActivity {
@OverrIDe
protected voID onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentVIEw(R.layout.activity_loading);
button button=findVIEwByID(R.ID.Loading);
button.setonClickListener(new VIEw.OnClickListener() {
@OverrIDe
public voID onClick(VIEw v) {
Toast.makeText(LoadingActivity.this, "正在进入", Toast.LENGTH_SHORT).show();
Intent intent=new Intent(LoadingActivity.this, MainActivity.class);
startActivity(intent);
}
});
}
}
3.2.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/main"
tools:context=".MainActivity"
androID:orIEntation="vertical">
<TextVIEw
androID:ID="@+ID/tv"
androID:layout_wIDth="match_parent"
androID:layout_height="wrap_content"
androID:layout_margintop="2dp"
androID:layout_marginBottom="2dp"
androID:gravity="center"
androID:text="电子词典"
androID:textStyle="bold"
androID:textcolor="#87CEFA"
androID:textSize="50dp" />
<linearLayout
androID:layout_wIDth="match_parent"
androID:layout_height="wrap_content"
androID:orIEntation="vertical">
<EditText
androID:ID="@+ID/search_et"
androID:layout_wIDth="match_parent"
androID:layout_height="wrap_content"
androID:layout_margintop="2dp"
androID:layout_marginBottom="2dp"
androID:hint="单词"/>
<linearLayout
androID:layout_wIDth="match_parent"
androID:layout_height="wrap_content">
<button
androID:ID="@+ID/search_btn"
androID:layout_wIDth="match_parent"
androID:layout_height="wrap_content"
androID:layout_margintop="2dp"
androID:layout_marginBottom="2dp"
androID:background="#80000000"
androID:textcolor="#FFFFFF"
androID:text="查询"/>
</linearLayout>
<linearLayout
androID:layout_wIDth="match_parent"
androID:layout_height="wrap_content">
<button
androID:ID="@+ID/btn_add"
androID:layout_wIDth="match_parent"
androID:layout_height="wrap_content"
androID:layout_margintop="2dp"
androID:layout_marginBottom="2dp"
androID:background="#80000000"
androID:textcolor="#FFFFFF"
androID:text="添加" />
</linearLayout>
<linearLayout
androID:layout_wIDth="match_parent"
androID:layout_height="wrap_content">
<button
androID:ID="@+ID/btn_delete"
androID:layout_wIDth="match_parent"
androID:layout_height="wrap_content"
androID:layout_margintop="2dp"
androID:layout_marginBottom="2dp"
androID:background="#80000000"
androID:textcolor="#FFFFFF"
androID:text="删除" />
</linearLayout>
</linearLayout>
<ListVIEw
androID:ID="@+ID/result_ListVIEw"
androID:layout_wIDth="wrap_content"
androID:layout_height="wrap_content"
/>
</linearLayout>
3.2.2主界面activity代码
package com.example;
import androIDx.appcompat.app.AppCompatActivity;
import androID.content.Intent;
import androID.database.Cursor;
import androID.os.Bundle;
import androID.vIEw.VIEw;
import androID.Widget.button;
import androID.Widget.EditText;
import androID.Widget.ListVIEw;
import androID.Widget.SimpleAdapter;
import androID.Widget.Toast;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
private DBOpenHelper dbOpenHelper;
@OverrIDe
protected voID onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentVIEw(R.layout.activity_main);
dbOpenHelper = new DBOpenHelper(MainActivity.this, "db_dict", null, 1);
final ListVIEw ListVIEw = findVIEwByID(R.ID.result_ListVIEw);
final EditText etsearch = findVIEwByID(R.ID.search_et);
button btn_search = findVIEwByID(R.ID.search_btn);
button btn_add = findVIEwByID(R.ID.btn_add);
button btn_delete = findVIEwByID(R.ID.btn_delete);
btn_add.setonClickListener(new VIEw.OnClickListener() {
@OverrIDe
public voID onClick(VIEw v) {
Intent intent = new Intent(MainActivity.this, AddActivity.class);
startActivity(intent);
}
});
btn_delete.setonClickListener(new VIEw.OnClickListener() {
@OverrIDe
public voID onClick(VIEw v) {
Intent intent = new Intent(MainActivity.this, DeleteActivity.class);
startActivity(intent);
}
});
btn_search.setonClickListener(new VIEw.OnClickListener() {
@OverrIDe
public voID onClick(VIEw v) {
String key = etsearch.getText().toString();
Cursor cursor = dbOpenHelper.getReadableDatabase().query("tb_dict", null, "word=?", new String[]{key}, null, null, null);
ArrayList<Map<String, String>> resultList = new ArrayList<Map<String, String>>();
while (cursor.movetoNext()) {
Map<String, String> map = new HashMap<String, String>();
map.put("word", cursor.getString(1));
map.put("interpret", cursor.getString(2));
resultList.add(map);
}
if (resultList == null || resultList.size() == 0) {
Toast.makeText(MainActivity.this, "很遗憾,没有记录", Toast.LENGTH_LONG).show();
} else {
SimpleAdapter simpleAdapter = new SimpleAdapter(MainActivity.this, resultList,
R.layout.result_main,
new String[]{"word", "interpret"}, new int[]{
R.ID.result_word, R.ID.result_interpret});
ListVIEw.setAdapter(simpleAdapter);
}
}
});
}
protected voID onDestroy(){
super.onDestroy();
if (dbOpenHelper != null) {
dbOpenHelper.close();
}
}}
3.3.1添加界面布局代码
<?xml version="1.0" enCoding="utf-8"?>
<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"
xmlns:tools="http://schemas.androID.com/tools"
androID:layout_wIDth="match_parent"
androID:layout_height="match_parent"
androID:background="@drawable/add"
androID:orIEntation="vertical"
tools:context="com.example.AddActivity">
<EditText
androID:ID="@+ID/add_word"
androID:layout_wIDth="match_parent"
androID:layout_height="wrap_content"
androID:layout_margintop="2dp"
androID:layout_marginBottom="2dp"
androID:hint="单词" />
<EditText
androID:ID="@+ID/add_interpret"
androID:layout_wIDth="match_parent"
androID:layout_height="wrap_content"
androID:layout_margintop="2dp"
androID:layout_marginBottom="2dp"
androID:hint="翻译" />
<button
androID:ID="@+ID/save_btn"
androID:layout_wIDth="match_parent"
androID:layout_height="wrap_content"
androID:layout_margintop="2dp"
androID:layout_marginBottom="2dp"
androID:background="#80000000"
androID:textcolor="#FFFFFF"
androID:text="保存" />
<button
androID:ID="@+ID/cancel_btn"
androID:layout_wIDth="match_parent"
androID:layout_height="wrap_content"
androID:layout_margintop="2dp"
androID:layout_marginBottom="2dp"
androID:background="#80000000"
androID:textcolor="#FFFFFF"
androID:text="取消" />
</linearLayout>
3.3.2添加界面activity代码
package com.example;
import androID.content.ContentValues;
import androID.content.Intent;
import androID.database.sqlite.sqliteDatabase;
import androID.os.Bundle;
import androID.os.PersistableBundle;
import androID.vIEw.VIEw;
import androID.Widget.button;
import androID.Widget.EditText;
import androID.Widget.Toast;
import androIDx.annotation.Nullable;
import androIDx.appcompat.app.AppCompatActivity;
public class AddActivity extends AppCompatActivity {
private DBOpenHelper dbOpenHelper;
@OverrIDe
public voID onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentVIEw(R.layout.activity_add);
dbOpenHelper=new DBOpenHelper(AddActivity.this,"db_dict",null,1);
final EditText etword=findVIEwByID(R.ID.add_word);
final EditText etinterpret=findVIEwByID(R.ID.add_interpret);
button btn_save=findVIEwByID(R.ID.save_btn);
button btn_cancel=findVIEwByID(R.ID.cancel_btn);
btn_save.setonClickListener(new VIEw.OnClickListener() {
@OverrIDe
public voID onClick(VIEw v) {
String word=etword.getText().toString();
String interpret=etinterpret.getText().toString();
if(word.equals("")||interpret.equals("")){
Toast.makeText(AddActivity.this,"填写的单词或解释为空",Toast.LENGTH_SHORT).show();
}else{
insertData(dbOpenHelper.getReadableDatabase(),word,interpret);
Toast.makeText(AddActivity.this,"添加生词成功",Toast.LENGTH_SHORT).show();
}
}
});
btn_cancel.setonClickListener(new VIEw.OnClickListener() {
@OverrIDe
public voID onClick(VIEw v) {
Intent intent=new Intent(AddActivity.this,MainActivity.class);
startActivity(intent);
}
});
}
private voID insertData(sqliteDatabase sqliteDatabase,String word,String interpret){
ContentValues values=new ContentValues();
values.put("word",word);
values.put("detail",interpret);
sqliteDatabase.insert("tb_dict",null,values);
}
protected voID onDestroy(){
super.onDestroy();
if(dbOpenHelper!=null){
dbOpenHelper.close();
}}
}
3.4.1删除界面布局代码
<?xml version="1.0" enCoding="utf-8"?>
<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"
xmlns:tools="http://schemas.androID.com/tools"
androID:layout_wIDth="match_parent"
androID:layout_height="match_parent"
androID:background="@drawable/delete"
androID:orIEntation="vertical"
tools:context="com.example.AddActivity">
<EditText
androID:ID="@+ID/delete_word"
androID:layout_wIDth="match_parent"
androID:layout_height="wrap_content"
androID:layout_margintop="2dp"
androID:layout_marginBottom="2dp"
androID:hint="单词" />
<EditText
androID:ID="@+ID/delete_interpret"
androID:layout_wIDth="match_parent"
androID:layout_height="wrap_content"
androID:layout_margintop="2dp"
androID:layout_marginBottom="2dp"
androID:hint="翻译" />
<button
androID:ID="@+ID/delete_btn"
androID:layout_wIDth="match_parent"
androID:layout_height="wrap_content"
androID:layout_margintop="2dp"
androID:layout_marginBottom="2dp"
androID:background="#80000000"
androID:textcolor="#FFFFFF"
androID:text="删除" />
<button
androID:ID="@+ID/cancel_btn"
androID:layout_wIDth="match_parent"
androID:layout_height="wrap_content"
androID:layout_margintop="2dp"
androID:layout_marginBottom="2dp"
androID:background="#80000000"
androID:textcolor="#FFFFFF"
androID:text="取消" />
</linearLayout>
3.4.2删除界面activity代码
package com.example;
import androID.content.Intent;
import androID.database.sqlite.sqliteDatabase;
import androID.os.Bundle;
import androID.vIEw.VIEw;
import androID.Widget.button;
import androID.Widget.EditText;
import androID.Widget.Toast;
import androIDx.annotation.Nullable;
import androIDx.annotation.VisibleForTesting;
import androIDx.appcompat.app.AppCompatActivity;
public class DeleteActivity extends AppCompatActivity {
private DBOpenHelper dbOpenHelper;
@OverrIDe
public voID onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentVIEw(R.layout.activity_delete);
dbOpenHelper=new DBOpenHelper(DeleteActivity.this,"db_dict",null,1);
final EditText scword=findVIEwByID(R.ID.delete_word);
final EditText scinterpret=findVIEwByID(R.ID.delete_interpret);
button btn_delete=findVIEwByID(R.ID.delete_btn);
button btn_cancel=findVIEwByID(R.ID.cancel_btn);
btn_delete.setonClickListener(new VIEw.OnClickListener() {
@OverrIDe
public voID onClick(VIEw v) {
String word=scword.getText().toString();
String interpret=scinterpret.getText().toString();
if(word.equals("")||interpret.equals("")){
Toast.makeText(DeleteActivity.this,"填写的单词或解释为空",Toast.LENGTH_SHORT).show();
}else{
deleteData(dbOpenHelper.getReadableDatabase(),word,interpret);
Toast.makeText(DeleteActivity.this,"删除成功",Toast.LENGTH_SHORT).show();
}
}
});
btn_cancel.setonClickListener(new VIEw.OnClickListener() {
@OverrIDe
public voID onClick(VIEw v) {
Intent intent=new Intent(DeleteActivity.this,MainActivity.class);
startActivity(intent);
}
});
}
private voID deleteData(sqliteDatabase sqliteDatabase,String word,String interpret){
sqliteDatabase.delete("tb_dict","word=?",new String[]{word+""});
}
protected voID onDestroy(){
super.onDestroy();
if(dbOpenHelper!=null){
dbOpenHelper.close();
}}
}
3.5.1ListvIEw显示代码
<?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">
<linearLayout
androID:layout_wIDth="match_parent"
androID:layout_height="wrap_content"
androID:orIEntation="horizontal">
<TextVIEw
androID:layout_wIDth="wrap_content"
androID:layout_height="wrap_content"
androID:text="单词:"
androID:textcolor=" #000000"
androID:textSize="50dp"/>
<TextVIEw
androID:ID="@+ID/result_word"
androID:layout_wIDth="wrap_content"
androID:layout_height="wrap_content"
androID:textcolor=" #000000"
androID:textSize="50dp"/>
</linearLayout>
<linearLayout
androID:layout_wIDth="match_parent"
androID:layout_height="wrap_content">
<TextVIEw
androID:layout_wIDth="wrap_content"
androID:layout_height="wrap_content"
androID:textcolor=" #000000"
androID:text="翻译:"
androID:textSize="50dp"/>
<TextVIEw
androID:ID="@+ID/result_interpret"
androID:layout_wIDth="wrap_content"
androID:layout_height="wrap_content"
androID:textcolor=" #000000"
androID:textSize="50dp"/>
</linearLayout>
</linearLayout>
四、实际测试
4.1添加测试
4.2查询测试
4.3删除测试
五、项目总结
本文阐述了电子行业的现状、发展历史以及未来的广阔的市场前景、表明了电子词典在词典行业中的重要性、详细讲解了手机电子词典APP的整个开发到实现的过程,以及具体的功能分析、需求分析、工作原理等等。其实我在数据库的创建实现过程中一开始也是遇到了一些困难,不知道该从哪里下手才好。后来找来相关资料仔细钻研学习,最终做出了这个电子词典软件。
总结以上是内存溢出为你收集整理的android课程设计报告全部内容,希望文章能够帮你解决android课程设计报告所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)