軟件工程網上購物系統課程設計_第1頁
軟件工程網上購物系統課程設計_第2頁
軟件工程網上購物系統課程設計_第3頁
軟件工程網上購物系統課程設計_第4頁
軟件工程網上購物系統課程設計_第5頁
已閱讀5頁,還剩52頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

年4月19日軟件工程網上購物系統課程設計文檔僅供參考,不當之處,請聯系改正。軟件工程課程設計報告(--年第二學期)課程名稱:軟件工程課程設計題目:網上購物系統院系:控制與計算機工程學院班級:軟件1002班組號:組長:艾君偉組員:陳肖成、汪豪、李崧榕指導教師:設計周數:兩周小組成績:日期:年7月12日《軟件工程》課程設計任務書一、目的、要求經過軟件開發的實踐訓練,進一步掌握軟件工程的方法和技術,提高軟件開發的實際能力,培養工程設計能力和綜合分析、解決問題的能力。具體如下:學習和實踐在分析和設計計算機應用系統所需要的知識,包括面向對象的系統分析與設計,編碼和測試方面的知識;熟悉自動化的軟件開發工具RationalRose,并將其運用于軟件開發的全過程;進一步加強和提高軟件工程文檔的編寫能力;培養協作能力和團隊精神。二、主要內容運用面向對象技術、UML進行網上購物系統的需求分析與設計;使用RationalRose作為需求分析與設計的建模工具,進行靜態建模和動態建模;利用對象模型自動生成數據模型,自動建立數據庫;使用J2EE、HTML、CSS、Javascript語言對購物模塊進行界面層的設計并給出實現;撰寫課程設計報告。三、任務分配任務負責人參與人備注小組討論:需求分析(用例圖、類圖)艾俊偉、陳肖成、汪豪、李崧榕用例圖繪制、類圖繪制、數據流分析、數據庫設計汪豪汪豪順序圖、系統結構分析、狀態圖測試陳肖成陳肖成需求分析、編碼、詳細設計艾君偉艾君偉繪制部分順序圖、協作圖、報告處理李崧榕李崧榕四、進度計劃序號設計內容名稱完成時間備注1分組及確定題目1個工作日2初步的需求分析與設計建模,確定實現平臺,并搭建環境2個工作日3詳細的需求分析與設計建模2個工作日進行中期檢查4關鍵模塊的實現與測試3個工作日5編寫課程設計報告1個工作日6驗收檢查及評定成績1個工作日五、設計成果要求建立系統分析與設計模型;初步建立系統原型,實現關鍵的功能;編寫課程設計報告。六、考核方式系統演示及講解占50%。設計報告占50%。指導教師:日期:6月28日

《軟件工程》課程設計成績評定一、指導教師評語二、成績學號姓名成績備注艾君偉陳肖成李崧榕汪豪指導教師:日期:年7月12日摘要:當今社會,隨著計算機的應用和Internet的普及,Internet網絡給人類社會帶來了巨大變化,網絡在我們的生活中幾乎無處不在。因此,建立網上物品的銷售管理系統是時代的潮流。由于JSP能夠在85%以上的服務器上運行,而且JSP技術的應用程序比ASP的應用程序易于維護和管理。因此,經過采用JSP技術設計開發在線購物系統符合時代的潮流、具有積極的進步意義。網上購物系統能夠實現人們遠程逛逛商店和購買商品的愿望。本系統的功能是實現網上購物,主要包括商品信息管理、購物車訂單管理、用戶管理、商品評價管理、商品庫存管理等模塊,主要以對數據庫的增刪改查來實現這些功能。本系統依據模仿現行的B2C網站的需求而設計,運用RationalRose、Myeclipse等軟件開發工具實現系統的分析、設計與實現,最后設計出來的系統基本滿足能網上購物的功能需求。關鍵詞:網上購物,面向對象,RationalRose,J2EE一、課程設計的目的與要求經過軟件開發的實踐訓練,進一步掌握軟件工程的方法和技術,提高軟件開發的實際能力,培養工程設計能力和綜合分析、解決問題的能力。具體如下:學習和實踐在分析和設計計算機應用系統所需要的知識,包括面向對象的系統分析與設計,編碼和測試方面的知識;熟悉自動化的軟件開發工具RationalRose,并將其運用于軟件開發的全過程;進一步加強和提高軟件工程文檔的編寫能力;培養協作能力和團隊精神。二、設計正文概述設計課題該系統為網上購物系統。系統目標調研當前現有的網上購物系統,如當當網,亞馬遜商城,京東商城等大型電子商務系統,設計出一個更適合用戶使用,有更多用戶交互,更人性化的購物系統。系統開發與運行環境 (1)數據庫管理軟件:MySQL (2)建模工具:RationalRose (3)編程工具:MyEclipse、DreamWeaver (4)操作系統:Windows系列、Tomcat系統 (5)開發語言:J2EE

2系統需求分析2.1系統需求概述主要從用戶、管理員兩方面進行需求分析。用戶功能分析:(1)購物車: 主要功能包括將商品加入購物車——>提交訂單——>支付——>將訂單信息存檔 (2)個人中心:功能主要包括四部分: 1)查詢自己的購買商品記錄,經過人員id在數據庫中查找。 2)商品列表:能夠查詢用戶本人在使用,想購買,和購買過的商品。 3)推薦商品:本用例中,推薦商品和新商品經過控制類中的方法實現,偏好是商品經過人員的個性分析方法實現。 4)商品評價:能夠查詢自己的評論過的商品的商品信息和評論信息(3)賬戶管理: 主要包括登錄,注冊,修改個人資料的功能 (4)商品搜索: 1)字節搜索:能夠經過商品名稱,商品序列號精確搜索 2)分類搜索:經過各個分類進行搜索。管理員功能分析: (1)商品信息管理:功能主要包括四部分: 1)增加商品信息 2)刪除商品信息 3)修改商品信息 4)查看商品信息 (2)庫存管理: 主要功能包括:修改商品的存貨數量 (3)用戶管理: 1)將不良交易次數用戶較多的用戶加入黑名單 2)商品評價管理:將被人氣較高的書評放入首頁的推薦書評模塊 (4)商品評評管理: 主要功能為將違禁商品評價刪除 (5)銷量統計: 主要功能包括:查看營業額,查看銷售排行,查看利潤。2.2用例圖對于整個用例圖,外部角色有管理員、普通用戶即顧客。管理員主要有書籍的增、刪、改,普通用戶信息管理,訂單管理。普通用戶主要有在線交易、搜索、結算、加入購物車、加入收藏、結算、評價、賬戶管理等用例。圖2.2-1總用例圖用例圖圖2.2-2店鋪管理用例圖圖2.2-3購物用例圖關鍵用例正常事件流和異常事件流的描述如下表:用例規格說明:內容管理員注冊超級管理員說明內容管理員注冊B2C購物系統前提條件超級管理員(最高權限)登錄后置條件內容管理員注冊成功基本事件流確認B2C購物系統已打開→確認超級管理員已登錄→確認打開注冊頁面→確認用戶名輸入正確,兩次密碼相同且正確→內容管理員成功注冊異常事件流第一異常事件流兩次密碼不相同第二異常事件流用戶名已注用例規格說明:內容管理員登錄所有用戶說明內容管理員登錄B2C購物系統前提條件無后置條件內容管理員登錄成功基本事件流確認B2C購物系統登錄界面已打開→確認用戶名和密碼已輸入→驗證經過→用戶成功登陸系統異常事件流第一異常事件流用戶名或密碼錯誤

用例規格說明:新增商品內容管理員說明內容管理員新增一條商品信息前提條件內容管理員已登錄,已輸入新增商品信息后置條件系統中增加一條商品信息基本事件流確認已輸入商品信息→增加商品異常事件流第一異常事件流商品信息錯誤第二異常事件流商品信息已存在用例規格說明:修改商品內容管理員說明內容管理員修改商品信息前提條件內容管理員已登錄,修改商品信息存在后置條件系統中修改一條商品信息基本事件流確認商品信息已修改→修改商品信息異常事件流第一異常事件流修改信息錯誤第二異常事件流修改信息無變化第三異常事件流修改信息不存在用例規格說明:刪除商品內容管理員說明內容管理員刪除一條商品信息前提條件內容管理員已登錄,刪除商品信息存在后置條件系統中刪除一條商品信息基本事件流確認已選擇商品信息→刪除商品異常事件流第一異常事件流刪除的商品不存在

用例規格說明:修改訂單內容管理員說明內容管理員修改一條訂單信息前提條件內容管理員已登錄,修改的訂單存在后置條件系統中修改一條訂單信息基本事件流確認已選擇訂單信息→修改商品異常事件流第一異常事件流要修改的訂單不存在第二異常事件流修改訂單信息錯誤用例規格說明:取消訂單內容管理員說明內容管理員取消一個訂單前提條件內容管理員已登錄,取消的訂單存在后置條件系統中一條訂單取消基本事件流確認已選擇訂單信息→取消訂單異常事件流第一異常事件流要取消的訂單不存在用例規格說明:退貨內容管理員說明管理員管理退貨前提條件內容管理員已登錄,用戶申請符合要求,收到退回來的貨品,檢查完好后置條件顧客退貨成功基本事件流登錄→查看退貨申請→符合退貨條件→收到退回來貨品→退貨成功異常事件流第一異常事件流未登錄第二異常事件流退貨申請不存在第三異常事件流商品已過保質期第四異常事件流商品未寄回

用例規格說明:顧客信息修改內容管理員說明修改顧客信息前提條件顧客存在,管理員已登錄后置條件修改顧客信息成功基本事件流選擇用戶→確認修改信息→顧客信息修改成功異常事件流第一異常事件流管理員未登錄第二異常事件流顧客不存在第三異常事件流輸入信息錯誤與顧客有關的用例規格說明用例規格說明:顧客注冊顧客說明顧客注冊B2C購物系統前提條件無后置條件顧客注冊成功基本事件流確認打開注冊頁面→確認用戶名輸入正確,兩次密碼相同且正確→顧客注冊成功異常事件流第一異常事件流用戶名存在第二異常事件流用戶名或密碼輸入錯誤用例規格說明:顧客登錄顧客說明顧客登錄B2C購物系統前提條件無后置條件顧客登錄成功基本事件流確認打開登錄頁面→確認登錄名、密碼→顧客注冊成功異常事件流第一異常事件流用戶名不存在第二異常事件流用戶名或密碼錯誤

用例規格說明:瀏覽顧客說明顧客瀏覽商品前提條件無后置條件商品頁面打開成功基本事件流確認打開鏈接→商品頁面打開成功異常事件流第一異常事件流商品已下架用例規格說明:搜索顧客說明顧客搜索商品前提條件無后置條件顯示搜索結果基本事件流確認搜索內容→顯示搜索結構異常事件流第一異常事件流輸入搜索內容錯誤用例規格說明:加入購物車顧客說明顧客將商品加入購物車前提條件商品存在,購物車未滿后置條件顧客注冊成功基本事件流確認加入購物車商品和購物車→商品成功加入購物車異常事件流第一異常事件流商品已下架第二異常事件流購物車已滿

用例規格說明:加入收藏顧客說明顧客將商品加入收藏夾前提條件商品存在,顧客已登錄,收藏夾未滿后置條件商品加入收藏夾成功基本事件流確認加入收藏夾的商品和收藏夾→商品加入收藏夾成功異常事件流第一異常事件流商品已下架第二異常事件流用戶未登錄第三異常事件流收藏夾已滿用例規格說明:結算顧客說明用戶對購物車中的商品進行結算前提條件用戶已登錄,購物車中有商品,余額充分后置條件結算成功基本事件流確認結算信息→確認余額充分→結算成功異常事件流第一異常事件流購物車為空第二異常事件流未登錄第三異常事件流余額不足用例規格說明:退貨顧客說明用戶申請退貨前提條件購買商品未過保質期,用戶已登錄后置條件顧客退貨成功基本事件流登錄→勾選商品→確認未過保質期→寄回商品→退貨成功異常事件流第一異常事件流未登錄第二異常事件流商品不存在第三異常事件流商品已過保質期第四異常事件流商品未寄回

用例規格說明:顧客信息修顧客說明修改顧客信息前提條件顧客已登錄后置條件修改顧客信息成功基本事件流確認修改信息→顧客信息修改成功異常事件流第一異常事件流顧客未登錄第二異常事件流輸入信息不合法2.3類圖圖2.3-1類圖類描述如下:coustomer用戶能夠更改自己的姓名、密碼和其它個人信息,也能夠查看自己的購物車并在其上添加刪除商品,其后對購物車中的產品進行結算。用戶還能夠對訂單中已付款的商品按照要求進行退貨操作。用戶還能夠發表商品評價和查看商品的來自其它人的評價。Manager管理員所具有的屬性并不多,管理員主要實現對商品的增、刪、改,對用戶個人信息的管理,對訂單的處理協助用戶退貨。good描述商品對象的抽象。商品的唯一標識是商品ID,商品還有品名、價格、類型編號、圖片、描述、數量、評價。

shoppingcart用戶的購物車類,在用戶進行網上瀏覽和準備交易時,可將商品加入購物車,查看購物車,刪除或取消交易。進行交易時會將交易信息入時間、金額、商品列表、優惠方式等記錄為購物歷史。購物車對象自帶了計算優惠的方式,同時購物車要記錄用戶購買商品時的運送信息。Order訂單記錄了訂單編號,訂單生成時間和用戶ID,訂單經過一個LIST類型記錄了購買的商品。類之間的關系:Coustomer與shoppingcart為聚合關系,manger與order是聚合關系;manger、coustomer類同good類是關聯關系,其中coustomer與good的關聯類是shoppingcart類;shoopingcart與order為關聯類。2.4順序圖支付的順序圖如下圖所示,首先是用戶登錄系統,然后用戶經過界面在商品類中查看到自己想要買的商品,然后將商品加入購物車,然后提交訂單,支付訂單,最后進行存檔。圖2.4-1用戶支付順序圖圖2.4-2新增商品順序圖圖2.4-3刪除商品順序圖圖2.4-4修改商品順序圖退貨的順序圖如下圖所示,首先是用戶登錄系統,然后用戶經過界面在訂單中查看到自己已買的商品,然后申請退貨,最后進行退貨。2.4-5用戶退貨順序圖2.5協作圖根據順序圖獲得協作圖如下:圖2.5-1用戶支付協作圖圖2.5-2新增商品協作圖

圖2.5-3刪除商品協作圖圖2.5-4修改商品協作圖圖2.5-5用戶退貨協作圖2.6狀態圖訂單狀態圖。主要包括訂單為空狀態、訂單處理狀態、增加完成狀態、刪除完成狀態、修改完成狀態,支付訂單狀態,訂單存檔狀態。圖2.6-1訂單狀態圖3.系統總體設計3.1系統體系結構設計3.3設計數據管理子系統表3.3-1用戶表表3.3-2管理員表表3.3-3商品表表3.3-4訂單表表3.3-5商品類型表圖3.3-1數據表關系圖3.4設計人機交互子系統圖3.4-1注冊界面圖3.4-2注冊成功界面圖3.4-3登陸界面圖3.4-4主頁界面圖3.4-5購物車界面圖3.4-6提交訂單界面圖3.4-7提交訂單成功界面4.詳細設計提示:對于復雜的方法給出詳細設計,能夠使用偽代碼描述,也能夠使用程序流程圖來描述。4.1.1商品查詢方法goodsearch(){創立一個List類型以及標志位flg=false;獲取搜索類型If(按名字查詢){獲取窗口中的關鍵字;創立數據庫查詢語句sql;創立SQLBean對象bean;Rs=bean.exacuteQuery(sql);Try{將rs中的信息存入到List中;}Catch(SQLExceptione){輸出異常信息;}}If(按分類查詢){獲取商品類型;創立數據庫查詢語句sql;創立SQLBean對象bean;Rs=bean.exacuteQuery(sql);Try{將rs中的信息存入到List中;}Catch(SQLExceptione){輸出異常信息;}}返回List}4.1.2登錄界面代碼實現packageServlet_Contorlller;//登錄publicclassloginCheckextendsHttpServlet{ publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); PrintWriterout=response.getWriter(); response.setContentType("text/html"); Stringusername=request.getParameter("username"); Stringpassword=request.getParameter("password"); System.out.println("輸入的密碼:"+password); Stringradio=request.getParameter("logintype"); //username=newString(username.getBytes(),"gb2312"); intreginfo=-1; if("".equals(username)||username==null){ reginfo=4;//用戶名不能為空 System.out.println("用戶名為空"); }else{ if(radio.equals("0"))//個人登錄 { StringsqlString="selectpasswordfromcustomerwhereusername='" +username+"'"; List<String>list=null; SQLBeansearch=newSQLBean(); try{ search.executeQuery(sqlString); System.out.println(sqlString); list=search.getSelectRt(); search.close(); }catch(Exceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } if(list.size()==0){ reginfo=3;//用戶不存在 response.sendRedirect("index.jsp?reginfo=3"); }else{ for(Stringitem:list){ if(item.equals(password)){ System.out.println("sadasdsa"); reginfo=1;//登錄成功 HttpSessionsession=request.getSession(true); session.setAttribute("user",username); response.sendRedirect("pagedivide"); } } } } } } publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException { this.doGet(request,response); }}4.1.3注冊界面代碼實現packageServlet_Contorlller;publicclassregisterCheckextendsHttpServlet{ publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException { this.rtcheck(request,response); } publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException { //response.sendRedirect("registerCheck.jsp"); this.rtcheck(request,response); } publicvoidrtcheck(HttpServletRequestrequest,HttpServletResponseresponse) { try{ request.setCharacterEncoding("utf-8"); }catch(UnsupportedEncodingExceptione2){ //TODOAuto-generatedcatchblock e2.printStackTrace(); } response.setCharacterEncoding("utf-8"); Stringname=request.getParameter("cuserid"); Stringpassword=request.getParameter("cpassword"); Stringtel=request.getParameter("ctel"); Stringemail=request.getParameter("cemail"); Stringsex=request.getParameter("select"); Stringage=request.getParameter("cage"); Stringrepeatpassword=request.getParameter("repeatpassword"); intreg=0;//0--注冊成功1--注冊失敗 if("".equals(name)||name==null) { reg=0; try { System.out.println("跳轉"); response.sendRedirect("register.jsp"); } catch(IOExceptione) { //TODOAuto-generatedcatchblock e.printStackTrace(); System.out.println("重定向異常"); } } elseif("".equals(password)||password==null) { reg=0; try { response.sendRedirect("register.jsp"); System.out.println("跳轉2"); } catch(IOExceptione) { //TODOAuto-generatedcatchblock e.printStackTrace(); System.out.println("重定向異常"); } } elseif("".equals(tel)||tel==null) { reg=0; try { System.out.println("跳轉3"); response.sendRedirect("register.jsp"); } catch(IOExceptione) { //TODOAuto-generatedcatchblock e.printStackTrace(); System.out.println("重定向異常"); } } elseif("".equals(email)||email==null) { reg=0; try { System.out.println("跳轉4"); response.sendRedirect("register.jsp"); } catch(IOExceptione) { //TODOAuto-generatedcatchblock e.printStackTrace(); System.out.println("重定向異常"); } } elseif("".equals(age)||age==null) { reg=0; try { System.out.println("跳轉5"); response.sendRedirect("register.jsp"); } catch(IOExceptione) { //TODOAuto-generatedcatchblock e.printStackTrace(); System.out.println("重定向異常"); } } elseif("".equals(repeatpassword)||repeatpassword==null) { reg=0; try { System.out.println("跳轉6"); response.sendRedirect("register.jsp"); } catch(IOExceptione) { //TODOAuto-generatedcatchblock e.printStackTrace(); System.out.println("重定向異常"); } } elseif(!repeatpassword.equals(password)) { reg=0; try { System.out.println("跳轉7"); response.sendRedirect("register.jsp"); } catch(IOExceptione) { //TODOAuto-generatedcatchblock e.printStackTrace(); System.out.println("重定向異常"); } } else { Stringsqlstr="selectusernamefromcustomer"; SQLBeanbean=newSQLBean(); List<String>list=newArrayList(); try { bean.executeQuery(sqlstr); list=bean.getSelectRt(); bean.close(); } catch(Exceptione) { //TODOAuto-generatedcatchblock e.printStackTrace(); System.out.println("數據庫查詢錯誤"); } for(Stringli:list) { if(li.equals(name)) { reg=1;//用戶名重復 try { System.out.println("跳轉"); response.sendRedirect("register.jsp"); } catch(IOExceptione) { //TODOAuto-generatedcatchblock e.printStackTrace(); System.out.println("重定向異常"); } } } sqlstr="insertintocustomer(userid,username,password,tel,email,sex,age)values(null,'"+name+"','"+password+"','"+tel+"','"+email+"','"+sex+"',"+age+")"; System.out.println(sqlstr); SQLBeanbean2=newSQLBean(); try { bean2.executeUpdate(sqlstr); bean2.close(); } catch(Exceptione) { //TODOAuto-generatedcatchblock e.printStackTrace(); } try { response.sendRedirect("success.jsp"); } catch(IOExceptione) { //TODOAuto-generatedcatchblock e.printStackTrace(); } } }}4.1.4購物車處理代碼實現if(action.equals("buy"))//加入購物車{ CarBeanmycart=(CarBean)session.getAttribute("mycart"); if(mycart==null) { mycart=newCarBean(); } //得到要購買東西的ID Stringgid=request.getParameter("gid"); mycart.buy(gid,Integer.parseInt(num)); response.sendRedirect("cart.jsp");}elseif(action.equals("changeNum")){ Stringgnum=request.getParameter("gnum"); Stringgid=request.getParameter("gid"); intnumber=0; try { number=Integer.parseInt(gnum); } catch(Exceptione) { //修改的數量不合法時 Stringmsg="對不起,數量修改錯誤!!!"; //pageForward(msg,request,response); } intid=Integer.parseInt(gid); intcount=0; //得到庫存數量 Stringsql="selectgoodnumfromgoodswheregoodId="+id; SQLBeanbean=newSQLBean(); try{ bean.executeQuery(sql); ResultSetst=bean.getRs(); if(st!=null) { st.next(); count=st.getInt(1); bean.close(); } }catch(Exceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } if(count<number) {//當庫存少于修改的值時 Stringmsg="對不起,庫存不夠,庫存數量只有"+count; out.println("<p>msg</p>"); out.println("<ahref='cart.jsp'>返回購物車</a>"); } else {//當庫存夠時 CarBeanmycart=(CarBean)session.getAttribute("mycart"); if(mycart==null) { mycart=newCarBean(); } //得到用戶的購物車 Map<String,Integer>cart=mycart.getCart(); //修改商品數量 cart.put(gid,number); session.setAttribute("mycart",mycart); response.sendRedirect("cart.jsp"); }}elseif(action.equals("delete")){ Stringgid=request.getParameter("gid").trim(); //得到javaBean對象 CarBeanmycart=(CarBean)session.getAttribute("mycart"); if(mycart==null) { mycart

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論