android課程設計報告


 

 

 

 

 

 

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的整個開發到實現的過程,以及具體的功能分析、需求分析、工作原理等等。其實我在數據庫的創建實現過程中一開始也是遇到了一些困難,不知道該從哪里下手才好。后來找來相關資料仔細鑽研學習,最終做出了這個電子詞典軟件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM