freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于android的手機(jī)團(tuán)購應(yīng)用的設(shè)計與實現(xiàn)畢業(yè)論文-資料下載頁

2025-06-28 01:02本頁面
  

【正文】 delivery TEXT 送貨方式odate NUMERIC 下單時間購物車信息表(cart) ,該表中包含 4 個字段,分別是id、proid 、utilprice 和 pcount,其中 id 為主鍵。詳細(xì)信息見表 所示。29表 購物車信息表(cart )字段名 字段類型 說明id INTEGER 主鍵proid INTEGER 參照 productidutilprice REAL 單價pcount INTEGER 數(shù)量 本章小結(jié)本章主要介紹了手機(jī)團(tuán)購系統(tǒng)的總體架構(gòu)、系統(tǒng)中客戶端和服務(wù)器之間的通信方式、系統(tǒng)各個模塊的業(yè)務(wù)邏輯設(shè)計,為接下來的系統(tǒng)實現(xiàn)奠定堅實的基礎(chǔ)。30第 5 章 系統(tǒng)實現(xiàn)在已完成之前系統(tǒng)需求分析和系統(tǒng)詳細(xì)設(shè)計的基礎(chǔ)上,接下來要具體實現(xiàn)客戶端和服務(wù)器之間的通信以及系統(tǒng)各個功能模塊。其中客戶端和服務(wù)器之間通信方式的設(shè)計尤為重要,因為這關(guān)系著系統(tǒng)的穩(wěn)定性和用戶的體驗。 客戶端和服務(wù)器之間的通信在所有基于客戶端服務(wù)器架構(gòu)(C/S)的系統(tǒng)中,都是在先由客戶端發(fā)起請求,再由服務(wù)器端接收該請求,并將處理結(jié)果返回給客戶端。因此客戶端和服務(wù)器之間通信方式設(shè)計的關(guān)鍵就是客戶端和服務(wù)器之間的數(shù)據(jù)接口設(shè)計。 通信連接的建立在該手機(jī)團(tuán)購系統(tǒng)中客戶端和服務(wù)器之間的通信連接建立過程描述如下:客戶端主動向服務(wù)器發(fā)送一個請求,服務(wù)器接收該請求并采取相應(yīng)的動作,之后服務(wù)器將處理結(jié)果返回給客戶端。用戶在使用系統(tǒng)的過程中,在任何一個界面中的任意操作都會生成一個線程類(Thread)來響應(yīng)用戶的各種操作請求,該線程類向位于網(wǎng)絡(luò)另一端的軟件開發(fā)商服務(wù)器發(fā)送 HTTP 請求,中間件服務(wù)器使用自身的方法捕獲并解析該 HTTP 請求,并將用戶的請求轉(zhuǎn)發(fā)給電商服務(wù)器。之前我們分析已知賬號注冊業(yè)務(wù)邏輯、訂單提交業(yè)務(wù)邏輯的成功與否都是由位于最后邊的電商服務(wù)器決定的。電商服務(wù)器根據(jù)接收到的用戶請求采取相應(yīng)的處理動作,之后將處理結(jié)果返回給中間件服務(wù)器。中間件服務(wù)器捕獲到電商服務(wù)器返回的數(shù)據(jù),并根據(jù)約定的數(shù)據(jù)格式將數(shù)據(jù)封裝成 JSON 類型的數(shù)據(jù),然后將該 JSON 類型數(shù)據(jù)發(fā)送至客戶端。此時位于客戶端的線程類(Thread)捕獲該數(shù)據(jù),在解析完成該 JSON 數(shù)據(jù)之后,將相應(yīng)的數(shù)據(jù)顯示在客戶端的系統(tǒng)界面上??蛻舳讼蚍?wù)器發(fā)送請求的過程主要借助 HttpUtils 類,該類中能夠?qū)崿F(xiàn)該請求發(fā)送功能的方法叫做 sendJSONToServer。該方法的形參有三個,第一個形參的類型是 String,指代發(fā)送請求的名稱;第二個形參的類型是 JSONObject,指代的是客戶端發(fā)送給服務(wù)器的具體請求;第三個形參類型是 Int,指代的是請求31的超時時間。該方法的業(yè)務(wù)處理流程如下:該方法首先將一個令牌環(huán)和時間戳封裝為一個 JSON 對象,其中令牌環(huán)是為了防止客戶端短時間內(nèi)向客戶端大量發(fā)送重復(fù)請求,時間戳用來判斷請求是否超時。之后該方法新建一個 HttpPost 對象,并將之前的 JSON 對象設(shè)置為該 HttpPost 對象要發(fā)送的數(shù)據(jù)。之后新建 HttpClient 對象,并調(diào)用 Post 方法將客戶端數(shù)據(jù)發(fā)送到服務(wù)器端,并獲取 HttpResponse 對象。如果響應(yīng)成功,則該方法從 HttpResponse 對象中解析出數(shù)據(jù),并封裝成 JSON 對象發(fā)回至客戶端。該流程的具體步驟如圖 所示。圖 sendJSONToServer()流程圖 通信數(shù)據(jù)的處理客戶端要向服務(wù)器發(fā)送請求信息的一個前提是必須知道服務(wù)器的 IP 地址,為此系統(tǒng)專門設(shè)置了一個類 PropertyAddr,該類專門用來讀取存儲在屬性文件中的所有地址信息。另外需要提及的是屬性文件中的內(nèi)容都是鍵值對,如果要獲取想要的地址信息只需要知道對應(yīng)的鍵值即可。另外,客戶端與服務(wù)器之間要頻繁地進(jìn)行 String 類型數(shù)據(jù)和 JSON 對象的轉(zhuǎn)換。借助名為 的第三方 Jar 包,利用其中 JSON 對象的 fromObject 令牌環(huán) 時間戳 獲取 HttpResponse響應(yīng)對象HttpClient 執(zhí)行Post 方法 設(shè)置對象參數(shù)新建 HttpClient 對象 獲取響應(yīng)數(shù)據(jù)封裝成 JSON 對象封裝成 JSON 對象新建 HttpPost 對象設(shè)置 HttpPost 對象傳送的數(shù)據(jù)32方法可以方便的實現(xiàn) String 類型數(shù)據(jù)和 JSON 類型數(shù)據(jù)的轉(zhuǎn)換。服務(wù)器和客戶端之間用于獲取請求對象的方法都是先通過 getInputStream()方法獲取輸入的字節(jié)流,之后再通過 BufferReader()將字節(jié)流轉(zhuǎn)變成對應(yīng)的字符流,最后再調(diào)用 java中所有對象都具有的方法 toString()將該字符流轉(zhuǎn)換成 String 對象。 系統(tǒng)功能模塊的實現(xiàn)系統(tǒng)中的每項業(yè)務(wù)邏輯都有具體功能模塊與之相對應(yīng),而且每一項業(yè)務(wù)邏輯都需要客戶端和服務(wù)器之間的相互配合才能完成。通常一項業(yè)務(wù)都是從客戶端發(fā)起,之后在服務(wù)器端處理完成后,再將處理結(jié)果返回到客戶端。在本系統(tǒng)中所有的業(yè)務(wù)都由位于客戶端的 Activity 發(fā)起,該 Activity 會新建一個 Thread 類專門處理跟服務(wù)器的交互業(yè)務(wù),服務(wù)器接收到客戶端的請求之后會將該請求轉(zhuǎn)交給Action 類,該類再將客戶端的數(shù)據(jù)轉(zhuǎn)交給對應(yīng)的 Service 類處理,之后再將處理結(jié)果發(fā)送到客戶端,客戶端的 Thread 類接收到服務(wù)端返回的數(shù)據(jù)后將數(shù)據(jù)顯示在對應(yīng)的 Activity 中。 用戶登錄注冊功能的實現(xiàn)首先要實現(xiàn) LoginActivity 類,該類用來顯示用戶注冊時的界面。用戶在點擊位于注冊界面的“注冊”按鈕之后,LoginActivity 類會調(diào)用一個特定的方法生成一個 Register 線程,該 Register 線程專門負(fù)責(zé)處理用戶的注冊請求。 Register 線程Start 之后,會向中間件服務(wù)器發(fā)送用戶注冊請求。中間件服務(wù)器接收到該請求之后,會解析客戶端發(fā)送過來的數(shù)據(jù),也就是獲取用戶的賬戶名和密碼。之后中間件服務(wù)器再將包含用戶賬戶密碼信息的 JSON 對象發(fā)送給最后端的電商服務(wù)器。電商服務(wù)器核實該賬戶密碼信息之后會發(fā)送給中間件服務(wù)器一個值。如果返回值為 0,則表明電商服務(wù)器端的注冊成功完成,之后將從電商服務(wù)器獲取的用戶信息插入到本地數(shù)據(jù)庫;如果返回值為 1,則表明注冊失敗,并將該失敗信息返回到客戶端,并在 LoginActivity 界面顯示。用戶注冊界面如圖 所示。33圖 注冊界面接下來給出該功能模塊中的一段典型代碼:TableRow!注冊界面采用表格布局,TableRow 作為 TableLayout 的子視圖可以添加子控件TextView android:padding= android:layout_width=wrap_content android:layout_height=wrap_content android:minWidth= android:text=Email: /EditText android:id=@+id/edtUsername android:layout_width=wrap_content android:layout_height=wrap_content android:hint=輸入 Email 地址 android:layout_weight= android:inputType=text //TableRowTableRowTextView android:padding= android:layout_width=wrap_content android:layout_height=wrap_content android:text=密碼: /EditText android:id=@+id/edtPassword android:layout_width=wrap_content android:layout_height=wrap_content android:hint=輸入至少 6 位密碼 android:password=true android:layout_weight= android:inputType=textPassword //TableRow……34然后實現(xiàn)用戶登錄功能,用戶登錄時的界面也是借助 LoginActivity 類實現(xiàn)的。用戶在點擊位于登錄界面的“登錄”按鈕之后,LoginActivity 類會調(diào)用一個特定的方法生成一個 Thread 線程,該 Thread 線程專門負(fù)責(zé)處理用戶的登錄請求。Thread 線程 Start 之后,會向軟件開發(fā)商服務(wù)器發(fā)送登錄請求。軟件開發(fā)商服務(wù)器接收到該請求之后,解析客戶端發(fā)送過來的數(shù)據(jù),也就是獲取用戶的賬戶名稱和密碼。之后客戶端服務(wù)器再將包含用戶賬戶密碼信息的 JSON 對象發(fā)送給最后端的商家服務(wù)器。商家服務(wù)器核實該賬戶密碼信息之后會發(fā)送給軟件開發(fā)商服務(wù)器一個值。需要說明的是商家服務(wù)器返回給軟件開發(fā)商服務(wù)器的信息是 String 類型的,還需要借助 JSONObject 類中的方法將 String 類型的數(shù)據(jù)轉(zhuǎn)換成 JSONObject,之后再從該對象中解析出需要的數(shù)據(jù)。軟件開發(fā)商服務(wù)器根據(jù)解析出的數(shù)據(jù)判斷該用戶信息是否存在,如果該用戶信息存在則更新本地的用戶信息,也就是從商家服務(wù)器獲取的用戶等級信息,用戶賬戶余額,用戶現(xiàn)有的積分等等;如果該用戶信息并不存在,則會在本地插入一條新的記錄(record),該記錄中的信息包括用戶的賬號、密碼、用戶等級信息,用戶賬戶余額,用戶現(xiàn)有積分等等。用戶成功登錄后的界面如圖 所示 。35圖 登錄后的界面接下來給出該功能模塊中的一段典型代碼://登錄函數(shù) public int login(String s, String s1){//兩個 String 類型的形參 int i = 1。 HashMap hashmap = new HashMap()。 Object obj = (username, s)。 Object obj1 = (password, s1)。 //獲取網(wǎng)絡(luò)服務(wù) NetworkService workservice = ()。 ……//此處代碼較多,因此省略部分代碼 if (map != null amp。amp。 (status)){ //獲取狀態(tài) i = ((Integer)(status)).intValue()。 } return i。} 商品信息展示功能的實現(xiàn)商品信息展示模塊要實現(xiàn)的功能主要是商品分類和商品信息展示。該界面詳情如圖 和圖 所示。36圖 商品分類圖 商品信息展示下面給出一段該功能模塊中處理商品列表的典型代碼:37//定義 Listview 的 XML 文件ListViewandroid:layout_width=fill_parentandroid:layout_height=wrap_contentandroid:id=@+id/home_listview///得到這個 ListView 的 IDListView listview=(ListView)findViewById()//使用自定義的適配器在 ListView 上顯示數(shù)據(jù)listview_adapter=new home_Listview Adapter(this, list, list_pic)(listview_ adapter) 購物車功能的實現(xiàn)購物車主要用于存放用戶瀏覽商品過程中保存的一些商品信息,這些信息全部保存在客戶端,因此購物車模塊功能的實現(xiàn)并不需要和服務(wù)器進(jìn)行交互。購物車的主界面如圖 所示。圖 購物車界面38下面給出一段該模塊的典型代碼:(adapter)。if (() 0) {//如果購物車?yán)锏纳唐窋?shù)量不為零Addup addup = 。 (+)。//商品數(shù)量增加 ( + )。( + )。}//總價格增加else {setContentView()。//購物車為空} 結(jié)算模塊功能的實現(xiàn)用戶只有在訂單中填寫支付方式、送貨時間、貨物類型這三項信息以后才可以選擇向服務(wù)器發(fā)送訂單信息,并且支付方式、送貨時間、貨物類型這三項的候選信息需要客戶端向服務(wù)器發(fā)送請求以后才可以獲取??蛻舳送ㄟ^調(diào)用 getPaymentType 方法獲取支付方式信息,通過調(diào)用 getShipTime 方法獲取送貨時間,通過調(diào)用 getProducttype 方法獲取貨物的類型信息。結(jié)算界面如圖 所示圖 結(jié)算界面39用戶在結(jié)算中心點擊提交訂單之后,這些訂單的詳細(xì)信息將會被發(fā)送至中間件服務(wù)器,中間件商服務(wù)器再將訂單信息發(fā)送至電商服務(wù)器,電商服務(wù)器端處理客戶端發(fā)送過來的請求。如果服務(wù)器端成功生成信息,則會向中間件商服務(wù)器發(fā)送成功信息,之后該訂單信息會在中間件服務(wù)器中保存,并向客戶端轉(zhuǎn)發(fā)成功信息。如果服務(wù)器端未成功生成訂單信息,則向中間件務(wù)器發(fā)送訂單生成失敗信息,之后向客戶端轉(zhuǎn)發(fā)失敗信息。訂單提交界面如圖 所示。圖 訂單提交界面 收藏夾模塊功能的實現(xiàn)該模塊首先會獲取已登錄用戶的收藏夾商品信息,包括商品名稱、商品圖片、商品價格、商品數(shù)量等等。用戶可以自由編輯收藏夾中的商品,如修改數(shù)量、刪除所有商品等。收藏
點擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1