Android應用程序開發
課程設計報告
(2019—2020學年 第Ⅰ學期)
基於Android的閑置物品出售系統
系 別 信息與控制工程
專 業 計算機科學與技術
班 級 1701
姓 名 郭佳美
指導教師 郭 丹
目錄
一、摘要1
二、需求分析1
(一) 需求分析 1
(二) UML需求用例圖及用例分析說明 2
三、系統設計3
(一)系統總體設計 3
(二)系統數據庫設計 3
(三)系統詳細設計 4
(四)各模塊功能 4
(五)UML設計 5
四、系統測試6
(一) 測試登錄頁面 6
(二) 測試主界面 6
五、系統實現8
(一)系統實現目標 8
(二)界面布局 9
六、 課設總結33
附件34
一、摘要
“置換淘”是一款針對於閑置物品開發的閑置物品出售平台。閑置物品,是指別人用過的物品,在生活用品中多余出來的物品,目前用不了的或是現在還不能發揮功用的物品。它的優點是可以不必再花錢去購買,省錢省時省力,環保,減輕空間負擔,經濟實惠,並且如果是八成新以上的還可以用很久。現如今,閑置交易已經蔚然成風。每個人都或多或少有閑置,與其放着折舊變成廢物,不如以低廉的價格出讓給需要的人。利人利己。閑置交易最大的難點往往在於距離。因為買閑置的人目的是為了省錢,如果要支付高額的路費和運輸成本,則往往會放棄。如何實現盡可能近距離的閑置交易?現在已經有專業的交換平台正在解決這個問題。
本文主要介紹了基於Android的閑置物品出售系統,Android平台簡單實用,無論是在功能方面還是設計方面,可以給第三方開發商一個自由的環境,不會受到很多的阻擾,“置換淘”利用Android的種種優點,開展閑置物品出售的服務,搭建一個安全快捷的閑置物品售換平台,互通有無,增進和睦,倡導低碳生活,服務居民。讓你的閑置不再閑着。主要使用技術有SQLite數據庫等。
二、需求分析
(一)需求分析
在消費升級的大背景下,我們的生活變得越來越富足,而家里的閑置物品,也越來越多,手機、圖書、玩具,有時候都快堆不下了。近年來中國二手物品市場的不斷擴大,與國民日漸豐富的物質生活,以及消費意識的轉變有着很大關系。
一方面,隨着消費升級和科技的更迭,國民的購買欲望不斷被刺激,在買買買的背后,閑置物品也在隨之增加。據中國信息通信研究院公布的數據顯示,2017年我國已經沉積了約10億部廢舊手機,而每年仍在以3-4億部的數量增長,65.4%受訪者的廢舊電子產品閑置在家,不知如何處理;另據中國資源綜合利用協會數據顯示,每年我國大約有2600萬噸舊衣服被扔進垃圾桶,卻還是每年換季都會添置一大批新衣服;我國圖書的閑置率很高,數據顯示讀者手中18個月沒有再翻看的書籍比例達到85%。而市場上流通的二手書不到個人擁有的5%......因此,根據現如今社會的情況,開發一個閑置物品出售系統尤為重要。
對於閑置物品以及廣大人群,設計一個閑置物品出售的系統,此系統的主要功能有,用戶登錄、顯示用戶出售的商品、商品的詳情展示、錄入置換物的信息、查看我自己的記錄等功能。
本系統基於Android,通過手機使用起來簡單方便。
(二)UML需求用例圖及用例分析說明
用例分析說明
登錄:登錄頁面用戶輸入賬號和密碼顯示是否成功進入或登錄失敗對用戶進行登錄。
添加信息:在置換物頁面,用戶需要添加自己的物品名稱、物品價格、新舊程度,這些數據會被存儲到數據庫中。
查詢信息:在置換物頁面,用戶可以查詢自己想要置換的商品的信息,這些數據會從數據庫中調取出來。
修改信息:在置換物頁面,用戶可以修改自己上傳的置換物的信息,如價格、新舊程度等,這些數據會取替原數據庫中的資料,進而更新修改。
刪除信息:在置換物頁面,如果用戶不想置換,用戶可以刪除自己的置換物這些數據將會從數據庫中刪除。

三、系統設計
(一)系統總體設計

(二)系統數據庫設計
| 名稱 |
數據類型 |
長度 |
約束 |
| _id |
INTEGER |
0 |
PRIMARY KEY AUTOINCREMENT |
| name |
VARCHAR |
20 |
|
| price |
VARCHAR |
20 |
|
| number |
VARCHAR |
20 |
|
| _id |
name |
price |
number |
| 1 |
電冰箱 |
893 |
二手 |
| 2 |
熱水器 |
785 |
三手 |
| 3 |
微波爐 |
999 |
全新 |
| 4 |
學習機 |
302 |
二手 |
(三)系統詳細設計
1. 登錄界面
| 序號 |
輸入 |
運行 |
輸出 |
| 1 |
賬號密碼 |
與設置值等 |
進入首頁 |
| 2 |
賬號密碼 |
與設定值不等 |
顯示登錄失敗 |
- 主頁
| 序號 |
輸入 |
運行 |
輸出 |
| 1 |
單擊商品 |
跳轉到詳情 |
展示商品詳情 |
- 置換物
| 序號 |
輸入 |
運行 |
輸出 |
| 1 |
名稱、價格、新舊程度 |
存儲信息存進數據庫 |
彈出置換物信息已添加 |
| 2 |
單擊查詢 |
調出數據庫內的信息 |
查詢的置換物的信息 |
| 3 |
更改需要修改的信息並單擊修改 |
修改信息存進數據庫 |
彈出置換物信息已修改 |
| 4 |
單擊刪除 |
數據庫內的信息刪除 |
彈出置換物信息已刪除 |
(四)各模塊功能
登錄模塊:登錄頁面上會顯示賬戶和密碼,使用LinearLayout線性布局,使用TextView顯示用戶應進行的操作,使用EditText讓用戶輸入賬戶和密碼,用onClick方法實現Activity的跳轉,設置密碼后,如果用戶輸入的賬戶密碼與設置的相同,則發生跳轉,若不同,則顯示“登陸失敗”
首頁模塊:首頁主要幾個布局組成,用戶可通過此頁查看其他用戶發布的商品,點擊想要了解的商品,會跳轉到商品詳情頁面。頂部導航欄部分使用三個按鈕,用onClick方法實現Activity的跳轉,進而跳轉到其他頁面。
置換物模塊:使用了SQLite數據庫,實現了置換物信息的添加、查詢、修改、刪除的功能,同時也可查詢進行增刪改查后的置換物品的信息。並使用Listview顯示所查詢的信息。
我的:從其他頁面實現了Activity之間的跳轉,進入我的頁面,可以查看到用戶的商品關注、瀏覽記錄等功能。
(五)UML設計
1.UML時序圖

2.系統類圖

四、系統測試
本次課程設計所用的開發環境為:Android Studio
開發技術:Android
數據庫:SQLite數據庫
(一)測試登錄頁面
點擊登錄,顯示登陸失敗或直接進入主頁面。
(二)測試主界面

1. 添加功能測試
輸入物品名稱、物品價格、新舊程度,添加后會顯示“置換物信息已添加”。

2. 修改功能測試
在輸入框輸入需要修改的信息,修改后會顯示“置換物信息已修改”。

3. 刪除功能測試
單擊刪除,刪除后會顯示“置換物信息已刪除”。

五、系統實現
(一)系統實現目標
現如今社會的個人閑置物品越來越多,在倡導“低碳”的今天,開發一個發布出售閑置物品的服務的網站,搭建一個安全快捷的閑置物品置換平台,處理閑置不用的,置換需要的,做到物品的完全利用,不去浪費,做個快樂的低碳達人。相信在我們大家的共同努力下,我們的環境會越變越好,我們的社會會越變越和諧的。
(二)界面布局
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.xianzhi">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="置換淘"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".detaliedActivity"></activity>
<activity android:name=".MyActivity" />
<activity android:name=".InformationActivity" />
<activity android:name=".ZhuActivity" />
<activity android:name=".enter">
<!-- 設置enter為先顯示的頁面-->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
1.登錄頁面

activity_enter:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:padding="10dp"
android:background="@drawable/enter"
>
<!-- 線性布局-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical" >
</LinearLayout>
<!-- 頭像-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical" >
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/touxiang"
android:layout_marginBottom="10dp"
/>
</LinearLayout>
</LinearLayout>
<!--輸入框線性布局-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:background="#ffffff"
android:layout_weight="1"
android:layout_marginBottom="2dp">
<TextView
android:layout_width="30dp"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_weight="1"
android:background="#ffffff"
android:gravity="center_vertical"
android:textSize="20sp"
android:text="賬號:" />
<EditText
android:id="@+id/admin"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="9"
android:hint="請輸入賬號"
android:background="#ffffff"
/>
<TextView
android:id="@+id/yadmin"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="123456"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:layout_weight="1"
android:layout_marginTop="2dp">
<TextView
android:layout_width="30dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="#ffffff"
android:text="密碼:"
android:textSize="20sp"
android:gravity="center_vertical"
android:layout_marginLeft="10dp"
/>
<EditText
android:id="@+id/password"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="9"
android:hint="請輸入密碼"
android:background="#ffffff"
android:inputType="textPassword"
/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
<!--下部分及登錄按鈕-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1">
<LinearLayout
android:layout_marginTop="30dp"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
>
<Button
android:id="@+id/Login"
android:layout_width="match_parent"
android:layout_height="55dp"
android:background="#cd853f"
android:onClick="click"
android:text="登錄"
android:textColor="#ffffff"
android:textSize="20sp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="3">
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
2.首頁

activity_zhu:
<?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"
tools:context=".ZhuActivity"
android:orientation="vertical">
<!-- 全篇采用采用線性布局-->
<!-- 頂部導航欄-->
<LinearLayout
android:layout_margin="0dp"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginTop="2dp"
android:orientation="horizontal"
android:background="#cd853f">
<Button
android:id="@+id/but1"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:layout_weight="1"
android:background="#cd853f"
android:text="主頁"
android:onClick="click1"
android:textColor="#ffffff"
android:textSize="20sp" />
<Button
android:id="@+id/but2"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:layout_weight="1"
android:background="#cd853f"
android:text="置換物"
android:onClick="click2"
android:textColor="#ffffff"
android:textSize="20sp" />
<Button
android:id="@+id/but3"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:layout_weight="1"
android:background="#cd853f"
android:text="我的"
android:onClick="click3"
android:textColor="#ffffff"
android:textSize="20sp"
/>
</LinearLayout>
<!--使用textview顯示標題-->
<TextView
android:layout_width="match_parent"
android:layout_height="40dp"
android:gravity="center"
android:text="主頁商品"
android:textColor="#cd853f"
android:textSize="20sp" />
<!--采用線性布局,對主頁商品頁面進行設計-->
<LinearLayout
android:layout_margin="5dp"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_marginTop="2dp"
android:orientation="horizontal"
android:background="#ffffff"
android:onClick="click4">
<ImageView
android:layout_width="230dp"
android:layout_height="90dp"
android:layout_margin="5dp"
android:layout_weight="2"
android:src="@drawable/a" />
<TextView
android:layout_width="210dp"
android:layout_height="100dp"
android:layout_marginLeft="0dp"
android:layout_marginTop="0dp"
android:layout_weight="2"
android:background="#ffffff"
android:gravity="center_vertical"
android:text="JAVA"
android:textSize="20sp" />
<TextView
android:layout_width="280dp"
android:layout_height="100dp"
android:layout_weight="1"
android:background="#ffffff"
android:gravity="center_vertical"
android:text="二手價格:24元 "
android:textSize="20sp" />
</LinearLayout>
<LinearLayout
android:layout_margin="5dp"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_marginTop="2dp"
android:orientation="horizontal"
android:background="#ffffff">
<ImageView
android:layout_width="230dp"
android:layout_height="90dp"
android:layout_margin="5dp"
android:layout_weight="2"
android:src="@drawable/b" />
<TextView
android:layout_width="210dp"
android:layout_height="100dp"
android:layout_marginLeft="0dp"
android:layout_marginTop="0dp"
android:layout_weight="2"
android:background="#ffffff"
android:gravity="center_vertical"
android:text="MYSQL"
android:textSize="20sp" />
<TextView
android:layout_width="280dp"
android:layout_height="100dp"
android:layout_weight="1"
android:background="#ffffff"
android:gravity="center_vertical"
android:text="二手價格:25元 "
android:textSize="20sp" />
</LinearLayout>
<LinearLayout
android:layout_margin="5dp"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_marginTop="2dp"
android:orientation="horizontal"
android:background="#ffffff">
<ImageView
android:layout_width="230dp"
android:layout_height="90dp"
android:layout_margin="5dp"
android:layout_weight="2"
android:src="@drawable/c" />
<TextView
android:layout_width="210dp"
android:layout_height="100dp"
android:layout_marginLeft="0dp"
android:layout_marginTop="0dp"
android:layout_weight="2"
android:background="#ffffff"
android:gravity="center_vertical"
android:text="電腦"
android:textSize="20sp" />
<TextView
android:layout_width="280dp"
android:layout_height="100dp"
android:layout_weight="1"
android:background="#ffffff"
android:gravity="center_vertical"
android:text="三手價格:2300元 "
android:textSize="20sp" />
</LinearLayout>
<LinearLayout
android:layout_margin="5dp"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_marginTop="2dp"
android:orientation="horizontal"
android:background="#ffffff">
<ImageView
android:layout_width="230dp"
android:layout_height="90dp"
android:layout_margin="5dp"
android:layout_weight="2"
android:src="@drawable/d" />
<TextView
android:layout_width="210dp"
android:layout_height="100dp"
android:layout_marginLeft="0dp"
android:layout_marginTop="0dp"
android:layout_weight="2"
android:background="#ffffff"
android:gravity="center_vertical"
android:text="手機"
android:textSize="20sp" />
<TextView
android:layout_width="280dp"
android:layout_height="100dp"
android:layout_weight="1"
android:background="#ffffff"
android:gravity="center_vertical"
android:text="全新價格:2999元 "
android:textSize="20sp" />
</LinearLayout>
<LinearLayout
android:layout_margin="5dp"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_marginTop="2dp"
android:orientation="horizontal"
android:background="#ffffff">
<ImageView
android:layout_width="230dp"
android:layout_height="90dp"
android:layout_margin="5dp"
android:layout_weight="2"
android:src="@drawable/e" />
<TextView
android:layout_width="210dp"
android:layout_height="100dp"
android:layout_marginLeft="0dp"
android:layout_marginTop="0dp"
android:layout_weight="2"
android:background="#ffffff"
android:gravity="center_vertical"
android:text="冰箱"
android:textSize="20sp" />
<TextView
android:layout_width="280dp"
android:layout_height="100dp"
android:layout_weight="1"
android:background="#ffffff"
android:gravity="center_vertical"
android:text="二手價格:1999元 "
android:textSize="20sp" />
</LinearLayout>
</LinearLayout>
3.商品詳情

activity_detalide:
<?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"
tools:context=".detaliedActivity"
android:background="#fefcf6">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="#fefcf6">
<!-- 頂部導航欄-->
<TextView
android:layout_width="match_parent"
android:layout_height="45dp"
android:gravity="center"
android:background="#cd853f"
android:text="商品詳情"
android:textColor="#ffffff"
android:textSize="20sp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="265dp"
android:layout_weight="2"
android:src="@drawable/aa" />
<!--商品名稱-->
<TextView
android:layout_width="match_parent"
android:layout_height="40dp"
android:gravity="center"
android:background="#fefcf6"
android:textStyle="bold"
android:text="JAVA基礎入門"
android:textSize="23sp" />
<TextView
android:layout_width="405dp"
android:layout_height="35dp"
android:background="#fefcf6"
android:text=" 價格:24元 新舊程度:二手"
android:textSize="20sp" />
<!-- 商品介紹-->
<TextView
android:layout_width="match_parent"
android:layout_height="65dp"
android:background="#fefcf6"
android:text="簡介:本書從初學者角度出發,通過通俗易懂的語言、豐富多彩的實例,詳細介紹如何使用Java語言"
android:textSize="18sp" />
<TextView
android:layout_width="match_parent"
android:layout_height="45dp"
android:background="#fefcf6"
android:gravity="center"
android:textStyle="bold"
android:text="實物如圖"
android:textSize="22sp" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="210dp"
android:layout_weight="2"
android:src="@drawable/aaaa" />
</LinearLayout>
</LinearLayout>
- 置換物
activity_information:
<?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"
tools:context=".InformationActivity"
android:background="@drawable/beijing"
android:orientation="vertical">
<!--頂部導航欄-->
<LinearLayout
android:layout_margin="0dp"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginTop="10dp"
android:orientation="horizontal"
android:background="#cd853f">
<Button
android:id="@+id/but1"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:background="#cd853f"
android:text="主頁"
android:onClick="click1"
android:textColor="#ffffff"
android:textSize="20sp" />
<Button
android:id="@+id/but2"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:layout_weight="1"
android:background="#cd853f"
android:text="置換物"
android:onClick="click2"
android:textColor="#ffffff"
android:textSize="20sp" />
<Button
android:id="@+id/but3"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:layout_weight="1"
android:background="#cd853f"
android:text="我的"
android:onClick="click3"
android:textColor="#ffffff"
android:textSize="20sp"
/>
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="40dp"
android:gravity="center"
android:text="置換物"
android:textColor="#cd853f"
android:textSize="20sp" />
<!--輸入閑置物品信息-->
<LinearLayout
android:layout_margin="5dp"
android:layout_width="match_parent"
android:layout_height="75dp"
android:layout_marginTop="10dp"
android:orientation="horizontal"
android:background="#ffffff">
<TextView
android:layout_width="45dp"
android:layout_height="75dp"
android:layout_marginLeft="0dp"
android:layout_marginTop="0dp"
android:layout_weight="2"
android:background="#ffffff"
android:gravity="center_vertical"
android:text="物品名稱:"
android:textSize="20sp" />
<EditText
android:id="@+id/et_name"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="9"
android:hint="此處輸入"
android:background="#ffffff"
android:textSize="20sp"
/>
</LinearLayout>
<LinearLayout
android:layout_margin="5dp"
android:layout_width="match_parent"
android:layout_height="75dp"
android:layout_marginTop="10dp"
android:orientation="horizontal"
android:background="#ffffff">
<TextView
android:layout_width="45dp"
android:layout_height="75dp"
android:layout_marginLeft="0dp"
android:layout_marginTop="0dp"
android:layout_weight="2"
android:background="#ffffff"
android:gravity="center_vertical"
android:text="物品價格:"
android:textSize="20sp" />
<EditText
android:id="@+id/et_price"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="9"
android:hint="此處輸入"
android:background="#ffffff"
android:textSize="20sp"
/>
</LinearLayout>
<LinearLayout
android:layout_margin="5dp"
android:layout_width="match_parent"
android:layout_height="75dp"
android:layout_marginTop="10dp"
android:orientation="horizontal"
android:background="#ffffff">
<TextView
android:layout_width="45dp"
android:layout_height="75dp"
android:layout_marginLeft="0dp"
android:layout_marginTop="0dp"
android:layout_weight="2"
android:background="#ffffff"
android:gravity="center_vertical"
android:text="新舊程度:"
android:textSize="20sp" />
<EditText
android:id="@+id/et_number"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="9"
android:hint="此處輸入"
android:background="#ffffff"
android:textSize="20sp"
/>
</LinearLayout>
<!-- 增刪改查按鈕-->
<LinearLayout
android:layout_margin="5dp"
android:layout_width="match_parent"
android:layout_height="65dp"
android:layout_marginTop="10dp"
android:orientation="horizontal"
android:background="#fefcf6"
>
<Button
android:id="@+id/add"
android:layout_width="200dp"
android:layout_height="40dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:background="#cd853f"
android:textColor="#ffffff"
android:textSize="20sp"
android:text="添加" />
<Button
android:id="@+id/delete"
android:layout_width="200dp"
android:layout_height="40dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:background="#cd853f"
android:text="刪除"
android:textColor="#ffffff"
android:textSize="20sp" />
<Button
android:id="@+id/update"
android:layout_width="200dp"
android:layout_height="40dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:background="#cd853f"
android:text="修改"
android:textColor="#ffffff"
android:textSize="20sp" />
<Button
android:id="@+id/query"
android:layout_width="200dp"
android:layout_height="40dp"
android:layout_margin="8dp"
android:layout_weight="1"
android:background="#cd853f"
android:text="查詢"
android:textColor="#ffffff"
android:textSize="20sp" />
</LinearLayout>
<!--使用listview顯示查詢內容-->
<ListView
android:id="@+id/ListView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#fefcf6"
/>
</LinearLayout>
- 我的頁面

activity_my:
<?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"
tools:context=".InformationActivity"
android:background="@drawable/beijing"
android:orientation="vertical">
<!-- 采用線性布局-->
<!--頂部導航欄-->
<LinearLayout
android:layout_margin="0dp"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginTop="10dp"
android:orientation="horizontal"
android:background="#cd853f">
<Button
android:id="@+id/but1"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:background="#cd853f"
android:text="主頁"
android:onClick="click1"
android:textColor="#ffffff"
android:textSize="20sp" />
<Button
android:id="@+id/but2"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:layout_weight="1"
android:background="#cd853f"
android:text="置換物"
android:onClick="click2"
android:textColor="#ffffff"
android:textSize="20sp" />
<Button
android:id="@+id/but3"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:layout_weight="1"
android:background="#cd853f"
android:text="我的"
android:onClick="click3"
android:textColor="#ffffff"
android:textSize="20sp"
/>
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="40dp"
android:gravity="center"
android:text="我的"
android:textColor="#cd853f"
android:textSize="20sp" />
<LinearLayout
android:layout_margin="0dp"
android:layout_width="match_parent"
android:layout_height="100dp"
android:orientation="horizontal"
android:background="#fefcf6">
<!--頭像-->
<ImageView
android:layout_width="210dp"
android:layout_height="80dp"
android:layout_margin="10dp"
android:layout_weight="2"
android:src="@drawable/touxiang" />
<TextView
android:layout_width="200dp"
android:layout_height="100dp"
android:layout_marginLeft="0dp"
android:layout_marginTop="0dp"
android:layout_weight="2"
android:background="#fefcf6"
android:gravity="center_vertical"
android:text="GJM"
android:textStyle="bold"
android:textSize="20sp" />
<TextView
android:layout_width="280dp"
android:layout_height="100dp"
android:layout_weight="1"
android:background="#fefcf6"
android:gravity="center_vertical"
android:text="置換信用:26分 "
android:textSize="20sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/gjm"
android:layout_margin="0dp"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginTop="0dp"
android:orientation="horizontal"
android:background="#fefcf6">
<TextView
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginLeft="0dp"
android:layout_marginTop="0dp"
android:layout_weight="2"
android:background="#fefcf6"
android:gravity="center"
android:text="商品關注"
android:textStyle="bold"
android:textSize="17sp" />
<TextView
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="2"
android:background="#fefcf6"
android:gravity="center"
android:text="用戶關注"
android:textStyle="bold"
android:textSize="17sp" />
<TextView
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="2"
android:background="#fefcf6"
android:gravity="center"
android:text="瀏覽記錄 "
android:textStyle="bold"
android:textSize="17sp" />
</LinearLayout>
<LinearLayout
android:layout_margin="0dp"
android:layout_width="match_parent"
android:layout_height="30dp"
android:orientation="horizontal"
android:background="#fefcf6">
<TextView
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_marginLeft="0dp"
android:layout_marginTop="0dp"
android:layout_weight="2"
android:background="#fefcf6"
android:gravity="center"
android:textColor="#cd853f"
android:text="17"
android:textSize="17sp" />
<TextView
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_marginLeft="0dp"
android:layout_marginTop="0dp"
android:layout_weight="2"
android:background="#fefcf6"
android:gravity="center"
android:textColor="#cd853f"
android:text="32"
android:textSize="17sp" />
<TextView
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_weight="2"
android:background="#fefcf6"
android:gravity="center"
android:textColor="#cd853f"
android:text="126 "
android:textSize="17sp"
/>
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="40dp"
android:gravity="center"
android:text="—常買常逛—"
android:textSize="18sp"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<!-- 單個常買常逛展示-->
<LinearLayout
android:layout_margin="12dp"
android:layout_width="160dp"
android:layout_height="160dp"
android:orientation="vertical"
android:background="#fefcf6">
<ImageView
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_margin="5dp"
android:layout_weight="2"
android:src="@drawable/a" />
<TextView
android:layout_width="160dp"
android:layout_height="100dp"
android:layout_marginLeft="0dp"
android:layout_marginTop="0dp"
android:layout_weight="2"
android:background="#fefcf6"
android:gravity="center"
android:text="JAVA 24元"
android:textSize="20sp" />
</LinearLayout>
<!-- 單個常買常逛展示-->
<LinearLayout
android:layout_margin="12dp"
android:layout_width="160dp"
android:layout_height="160dp"
android:orientation="vertical"
android:background="#fefcf6">
<ImageView
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_margin="5dp"
android:layout_weight="2"
android:src="@drawable/b" />
<TextView
android:layout_width="160dp"
android:layout_height="100dp"
android:layout_marginLeft="0dp"
android:layout_marginTop="0dp"
android:layout_weight="2"
android:background="#fefcf6"
android:gravity="center"
android:text="MYSQL 25元"
android:textSize="20sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
- Listview
Listview_item:
<?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">
<!-- 采用線性布局對顯示查詢信息的listview進行設計-->
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginTop="4dp"
android:textSize="19sp"/>
<TextView
android:text="|"
android:gravity="center"
android:layout_width="10dp"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:textSize="20sp"
android:textColor="#cd853f"/>
<TextView
android:id="@+id/tv_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginTop="4dp"
android:textSize="19sp"/>
<TextView
android:text="|"
android:gravity="center"
android:layout_width="10dp"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:textSize="20sp"
android:textColor="#cd853f"/>
<TextView
android:id="@+id/tv_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginTop="4dp"
android:textSize="19sp"/>
</LinearLayout>
六、課設總結
此次Android的課程設計,從拿到要求開始,從各種文檔的閱讀到開始的需求分析、概念結構設計、邏輯結構設計。到確立了選題,親身體驗了一回系統的設計開發過程。因為現如今社會的閑置物越來越多,它們得不到充分的利用,一個閑置物品出售的平台可以很好的解決這個問題,並且使社會更加低碳環保。做課設時從一開始的不熟練,到后來的熟練使用各種布局如線性布局等,activity跳轉等功能的過程中,我出現了很多問題,很多東西書上寫的很清楚,貌似看着也很簡單,思路非常清晰。但真正需要自己想辦法去設計一個系統的時候才發現其中的難度。經常做到后面突然就發現自己一開始的設計有問題,然后又回去反工,在各種反復中不斷完善自己的想法。
要想編好、快速完成任務,就必須有嚴謹的科學態度,比如說一個字母,甚至一個標點符號的錯誤都會導致錯誤,這種錯誤在編程中我們經常出現,系統也並不報錯,有時我們會花費大量的時間去找一個小錯誤,因此,細心尤為重要。遇到不懂的問題及時問老師,問同學,及時解決不拖延才能更好的掌握技能。此次課程設計在許多地方還有待闡述,修改和完善。
附件:
一、課設題目
基於Android的閑置物品出售系統
二、技術說明
1.Activity之間的跳轉:實現各個頁面之間的跳轉
2.控件的使用:Textview 、Edittext、Button、ImageView 等
3.頁面布局:使用線性布局(LinearLayout)
4.Listview的使用:適配器,實現查詢后的信息的顯示
5.Sqlite數據庫:實現閑置物數據的添加、查詢、修改、刪除功能
6.事件的監聽:OnClickListener()
三、UML類圖

四、代碼
清單文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.xianzhi">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="置換淘"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".detaliedActivity"></activity>
<activity android:name=".MyActivity" />
<activity android:name=".InformationActivity" />
<activity android:name=".ZhuActivity" />
<activity android:name=".enter">
<!-- 設置enter為先顯示的頁面-->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
布局文件:
- 布局文件:
2.Java文件
Java源碼:
CartAdapter.Java:
package com.example.xianzhi;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.List;
public class CartAdapter extends BaseAdapter {
private List<shiti> list;
private LayoutInflater layoutInflater;
public CartAdapter(Context context, List<shiti> list){
this.layoutInflater = LayoutInflater.from(context);
this.list = list;
}
@Override
public int getCount() {
Log.e("yanwenhua","list.size()--"+list.size());
return list.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
//listview的使用
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView==null){
convertView=layoutInflater.inflate(R.layout.listview_item,null);
viewHolder=new ViewHolder(convertView);
convertView.setTag(viewHolder);
}else {
viewHolder=(ViewHolder) convertView.getTag();
}
shiti shiti = list.get(position);
viewHolder.tv_name.setText(" 名稱:"+shiti.getName());
viewHolder.tv_price.setText(" 價格:"+shiti.getPrice());
viewHolder.tv_number.setText(" 程度:"+shiti.getNumber());
Log.e("yanwenhua","cartBean.getName()-"+shiti.getName()+" "+shiti.getPrice()+" "+shiti.getNumber());
return convertView;
}
class ViewHolder{
TextView tv_name;
TextView tv_price;
TextView tv_number;
public ViewHolder(View view){
tv_name = (TextView) view.findViewById(R.id.tv_name);
tv_price = (TextView) view.findViewById(R.id.tv_price);
tv_number = (TextView) view.findViewById(R.id.tv_number);
}
}
}
detaliedActivity.java:
package com.example.xianzhi;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
//商品詳情所對應的
public class detaliedActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detalied);
}
}
enter.java:
package com.example.xianzhi;
import android.annotation.SuppressLint;
import android.content.Intent;
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 enter extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_enter);
Button Login =(Button) findViewById(R.id.Login);
//監聽
Login.setOnClickListener(new View.OnClickListener() {
TextView textView;
@SuppressLint({"WrongConstant", "ShowToast"})
@Override
public void onClick(View view) {
//能夠連接不同的組件
EditText admin= (EditText) findViewById(R.id.admin);
EditText password= (EditText) findViewById(R.id.password);
String s1=admin.getText().toString();
String s2=password.getText().toString();
// TODO Auto-generated method stub
//登錄 賬號密碼判斷
if(s1.equals("173230126")&&s2.equals("123456")){
// Toast.makeText(enter.this,"登錄成功",0).show();
Intent intent=new Intent(enter.this, ZhuActivity.class);
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
}else{
Toast.makeText(enter.this,"登錄失敗",0).show();
}
}
});
}
}
InformationActivity.java:
package com.example.xianzhi;
//增刪改查頁面對應的
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class InformationActivity extends Activity implements View.OnClickListener {
private EditText et_name,et_price,et_number;
private ListView listView;
private String name,price,number;
private MyHelper myHelper;
private SQLiteDatabase db;
//使用list view 增刪改查按鈕
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_information);
et_name = (EditText)findViewById(R.id.et_name);
et_price = (EditText)findViewById(R.id.et_price);
et_number = (EditText) findViewById(R.id.et_number);
listView = (ListView)findViewById(R.id.ListView);
Button add = (Button)findViewById(R.id.add);
Button query =(Button) findViewById(R.id.query);
Button update =(Button) findViewById(R.id.update);
Button delete = (Button)findViewById(R.id.delete);
add.setOnClickListener(this);
query.setOnClickListener(this);
update.setOnClickListener(this);
delete.setOnClickListener(this);
myHelper = new MyHelper(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
//增加信息
case R.id.add:
db = myHelper.getWritableDatabase();
name = et_name.getText().toString();
price = et_price.getText().toString();
number = et_number.getText().toString();
ContentValues values = new ContentValues(); //創建ContentValues對象
values.put("name", name); //將數據添加到ContentValues對象
values.put("price", price);
values.put("number", number);
db.insert("cart", null, values);
db.close();
Toast.makeText(this, "置換物信息已添加", Toast.LENGTH_SHORT).show();
break;
//查詢信息
case R.id.query:
Log.e("yanwenhua","123");
List<shiti> list = new ArrayList();
db = myHelper.getWritableDatabase();
Cursor cursor = db.query("cart", null, null, null, null,
null, null);
//判斷是否為空
if (cursor.getCount() == 0) {
Toast.makeText(this, "暫無置換物數據", Toast.LENGTH_SHORT).show();
} else {
while (cursor.moveToNext()) {
shiti shiti = new shiti();
int nameIndex = cursor.getColumnIndex("name");
int priceIndex = cursor.getColumnIndex("price");
int numberIndex = cursor.getColumnIndex("number");
String name = cursor.getString(nameIndex);
String price = cursor.getString(priceIndex);
String number = cursor.getString(numberIndex);
Log.e("yanwenhua","cursor.getCount();--"+cursor.getCount()+"name-"+name+" "+price+" "+number);
shiti.setName(name);
shiti.setPrice(price);
shiti.setNumber(number);
list.add(shiti);
}
CartAdapter adapter = new CartAdapter(InformationActivity.this,list);
listView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
cursor.close();
db.close();
break;
//更新信息
case R.id.update:
name = et_name.getText().toString();
price = et_price.getText().toString();
number = et_number.getText().toString();
db = myHelper.getWritableDatabase();
values = new ContentValues(); // 要修改的數據
values.put("number",number);
values.put("price",price);
db.update("cart", values, "name=?",
new String[]{name}); // 更新並得到行數
db.close();
Toast.makeText(this, "置換物信息已修改", Toast.LENGTH_SHORT).show();
break;
//刪除信息
case R.id.delete:
db = myHelper.getWritableDatabase();
db.delete("cart", null, null);
List<shiti> list2 = new ArrayList();
CartAdapter adapter = new CartAdapter(InformationActivity.this,list2);
listView.setAdapter(adapter);
adapter.notifyDataSetChanged();
db.close();
Toast.makeText(this, "置換物信息已刪除", Toast.LENGTH_SHORT).show();
break;
}
}
//1 2 3為頂部導航欄按鈕對應的頁面跳轉
public void click1(View view) {
Intent intent=new Intent(InformationActivity.this,ZhuActivity.class);
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
}
public void click2(View view) {
}
public void click3(View view) {
Intent intent=new Intent(InformationActivity.this,MyActivity.class);
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
}
}
MyActivity.java:
package com.example.xianzhi;
//我的頁面對應的
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class MyActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
}
//1 2 3為頂部導航欄按鈕對應的跳轉
public void click1(View view) {
Intent intent=new Intent(MyActivity.this,ZhuActivity.class);
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
}
public void click2(View view) {
Intent intent=new Intent(MyActivity.this,InformationActivity.class);
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
}
public void click3(View view) {
}
}
MyHelper.java:
package com.example.xianzhi;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
class MyHelper extends SQLiteOpenHelper {
public MyHelper(Context context) {
super(context, "shoppingcart.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
//數據庫建表
db.execSQL("CREATE TABLE cart(_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(20), price VARCHAR(20), number VARCHAR(20))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
shiti.java:
package com.example.xianzhi;
//實體類對象 封裝實體類
public class shiti {
private String name;
private String price;
private String number;
public shiti(){
}
//構造方法
public shiti(String name, String price, String number) {
this.name = name;
this.price = price;
this.number = number;
}
public void setName(String name) {
this.name = name;
}
public void setPrice(String price) {
this.price = price;
}
public void setNumber(String number) {
this.number = number;
}
public String getName() {
return name;
}
public String getPrice() {
return price;
}
public String getNumber() {
return number;
}
}
ZhuActivity.java:
package com.example.xianzhi;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class ZhuActivity extends AppCompatActivity {
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_zhu);
}
//1 2 3為頂部導航欄按鈕對應的跳轉
public void click1(View view) {
}
public void click2(View view) {
Intent intent=new Intent(ZhuActivity.this, InformationActivity.class);
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
}
public void click3(View view) {
Intent intent=new Intent(ZhuActivity.this,MyActivity.class);
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
}
//跳轉到商品詳情頁
public void click4(View view) {
Intent intent=new Intent(ZhuActivity.this,detaliedActivity.class);
startActivity(intent);
overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
}
}
