網(wǎng)上書(shū)店系統(tǒng)實(shí)驗(yàn)報(bào)告_第1頁(yè)
網(wǎng)上書(shū)店系統(tǒng)實(shí)驗(yàn)報(bào)告_第2頁(yè)
網(wǎng)上書(shū)店系統(tǒng)實(shí)驗(yàn)報(bào)告_第3頁(yè)
網(wǎng)上書(shū)店系統(tǒng)實(shí)驗(yàn)報(bào)告_第4頁(yè)
網(wǎng)上書(shū)店系統(tǒng)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

實(shí)驗(yàn)報(bào)告

一、實(shí)驗(yàn)題目編程實(shí)現(xiàn)“網(wǎng)上書(shū)店系統(tǒng)”二、題目分析1、 需求分析要開(kāi)發(fā)一個(gè)系統(tǒng),首先要了解該系統(tǒng)到底想做什么,需要實(shí)現(xiàn)怎樣的功能,這就是需求分析。網(wǎng)上書(shū)店從大的需求方面看,就是要實(shí)現(xiàn)通過(guò)互聯(lián)網(wǎng)能夠進(jìn)行書(shū)籍的購(gòu)買及相關(guān)的管理等功能,大致需要提供下面的一系列功能:*瀏覽書(shū)籍(模糊查詢)*選擇需要購(gòu)買的書(shū)籍*可以繼續(xù)選擇別的書(shū)籍,并且可以購(gòu)買該書(shū)籍*選擇了需要購(gòu)買的書(shū)籍后,進(jìn)行購(gòu)買書(shū)籍操作*保存選中的圖書(shū)和數(shù)量UML圖:2、數(shù)據(jù)分析圖書(shū)信息 數(shù)據(jù)庫(kù)購(gòu)物車 本次會(huì)話有效

三、實(shí)驗(yàn)設(shè)計(jì)1、頁(yè)面轉(zhuǎn)移關(guān)系再次查詢2、對(duì)象模型(1)界面對(duì)象(View)*查詢頁(yè)Search.jsp*圖書(shū)目錄頁(yè)Directory.jsp*購(gòu)物車頁(yè)Cart.jsp*定單頁(yè)Order.jsp(2)控制器(Control)*CtrlServlet負(fù)責(zé)響應(yīng)輸入命令大包括:模糊查詢key、查看購(gòu)物車cart、結(jié)算order、繼續(xù)選書(shū)continue、再次查詢search(3)業(yè)務(wù)模型*圖書(shū)信息:BookBean實(shí)體類的會(huì)話Bean*購(gòu)物車信息:CartBean會(huì)話Bean

3、數(shù)據(jù)設(shè)計(jì)(1)圖書(shū)信息(數(shù)據(jù)庫(kù)表、查詢結(jié)果)*書(shū)號(hào)ISBNchar[24]主鍵*書(shū)名Titlechar[64]*作者Authorchar[32]*出版社Presschar[32]*價(jià)格Pricedouble2)購(gòu)物車信息*書(shū)號(hào)ISBN char[24]*數(shù)量Number integer3)共享數(shù)據(jù)*查詢結(jié)果和選中的圖書(shū)信息*作為session參數(shù)4、動(dòng)態(tài)模型5、EJB接口設(shè)計(jì)(1)BookBean管理圖書(shū)信息(封裝數(shù)據(jù)庫(kù))*find(stringkey)*根據(jù)關(guān)鍵字從數(shù)據(jù)庫(kù)中查找出圖書(shū)信息記錄(數(shù)組)條件:書(shū)名、作者、出版社名中包含關(guān)鍵字get(stringisbn)*根據(jù)書(shū)號(hào),找出圖書(shū)信息記錄(2)CartBean管理購(gòu)物車信息(本次會(huì)話有效)*add(stringisbn) 添加記錄*gest() 獲得記錄數(shù)組*set(stringisbn,integernum)設(shè)置購(gòu)買數(shù)量5、控制器(1)CtrlServlet的輸入*來(lái)自查詢頁(yè)page=“search"&key=關(guān)鍵字*來(lái)自圖書(shū)目錄頁(yè)page=“directory"&submit=“cart"&choose=書(shū)號(hào)數(shù)組page=“directoty”&submit=“search”*來(lái)自購(gòu)物車頁(yè)page=“cart”&submit=“order”page=“cart”&submit=“continue”page=“cart”&submit=“search”(2)算法概要*模糊查詢search按照key從BookBean查詢圖書(shū),轉(zhuǎn)交圖書(shū)目錄頁(yè)*查看購(gòu)物車將選定圖書(shū)存入CartBean,轉(zhuǎn)交購(gòu)物車頁(yè)*結(jié)算計(jì)算CartBean中的圖書(shū)總價(jià),從BookBean獲得圖書(shū)信息,連同地址,轉(zhuǎn)交定單頁(yè)*繼續(xù)選書(shū)返回圖書(shū)目錄頁(yè)*再次查詢轉(zhuǎn)向查詢頁(yè)*異常處理直接生成錯(cuò)誤信息頁(yè)面四、實(shí)現(xiàn)技術(shù)1、采用MVC模式(1)JSP實(shí)現(xiàn)頁(yè)面視圖View(2)Servlet實(shí)現(xiàn)控制Control(3)EJB實(shí)現(xiàn)業(yè)務(wù)模型Model2、交互關(guān)系JSP表單動(dòng)作(form)ICtrlServletServlet轉(zhuǎn)發(fā)IJSP頁(yè)面3、數(shù)據(jù)傳輸Servlet調(diào)用EJB對(duì)象獲得數(shù)據(jù)Servlet通過(guò)session參數(shù)傳遞給JSP頁(yè)面五、實(shí)驗(yàn)源代碼1、BooksOnline-ejb(1)Books①Books.java:importjava.io.Serializable;importjavax.persistence.Column;importjavax.persistence.Entity;importjavax.persistence.Id;javax.persistence.NamedQueries;importjavax.persistence.NamedQuery;importjavax.persistence.Table;@Entity@Table(name="BOOKS")@NamedQueries({@NamedQuery(name="Books.findByIsbn",query="SELECTbFROMBooksbWHEREb.isbn=:isbn"),@NamedQuery(name="Books.findByTitle",query="SELECTbFROMBooksbWHEREb.title=:title"),@NamedQuery(name="Books.findByAuthor",query="SELECTbFROMBooksbWHEREb.author=:author"),@NamedQuery(name="Books.findByPress",query="SELECTbFROMBooksbWHEREb.press=:press"),@NamedQuery(name="Books.findByPrice",query="SELECTbFROMBooksbWHEREb.price=:price")})publicclassBooksimplementsSerializable{privatestaticfinallongserialVersionUID=1L;@Id@Column(name="ISBN",nullable=false)privateStringisbn;@Column(name="TITLE")privateStringtitle;@Column(name="AUTHOR")privateStringauthor;@Column(name="PRESS")privateStringpress;@Column(name="PRICE")privateDoubleprice;publicBooks(){}publicBooks(Stringisbn){this.isbn=isbn;}publicStringgetIsbn(){returnisbn;}publicvoidsetIsbn(Stringisbn){this.isbn=isbn;}publicStringgetTitle(){returntitle;}publicvoidsetTitle(Stringtitle){this.title=title;}publicStringgetAuthor(){returnauthor;}publicvoidsetAuthor(Stringauthor){this.author=author;}publicStringgetPress(){returnpress;}publicvoidsetPress(Stringpress){this.press=press;}publicDoublegetPrice(){returnprice;}publicvoidsetPrice(Doubleprice){this.price=price;}@OverridepublicinthashCode(){inthash=0;hash+=(isbn!=null?isbn.hashCode():0);returnhash;}@Overridepublicbooleanequals(Objectobject){//TODO:Warning-thismethodwon'tworkinthecasetheidfieldsarenotsetif(!(objectinstanceofBooks)){returnfalse;}Booksother=(Books)object;if((this.isbn==null&&other.isbn!=null)||(this.isbn!=null&&!this.isbn.equals(other.isbn))){returnfalse;}returntrue;}@OverridepublicStringtoString(){return"Books.Books[isbn="+isbn+"]";}}②BooksFacade.javaimportjava.util.List;importjava.util.ArrayList;importjavax.ejb.Stateless;importjavax.persistence.EntityManager;importjavax.persistence.PersistenceContext;@StatelesspublicclassBooksFacadeimplementsBooksFacadeRemote{@PersistenceContextprivateEntityManagerem;publicvoidcreate(Booksbooks){em.persist(books);}publicvoidedit(Booksbooks){em.merge(books);}publicvoidremove(Booksbooks){em.remove(em.merge(books));}publicBooksfind(Objectid){returnem.find(Books.class,id);}publicList<Books>findAll(){returnem.createQuery("selectobject(o)fromBooksaso").getResultList();}publicArrayList<Books>search(Stringkey){List<Books>all=this.findAll();if(all.isEmpty()){returnnull;}ArrayList<Books>result=newArrayList<Books>();for(Bookscurrent:all){if(current.getTitle().toLowerCase().contains(key)||current.getAuthor().toLowerCase().contains(key)||current.getPress().toLowerCase().contains(key)){result.add(current);}}returnresult;③BooksFacadeRemote.javaimportjava.util.List;importjava.util.ArrayList;importjavax.ejb.Remote;@RemotepublicinterfaceBooksFacadeRemote{voidcreate(Booksbooks);(2)CartCart.javaimportjava.io.Serializable;publicclassCartimplementsSerializable{privateStringisbn;privateStringtitle;privatedoubleprice;privateintnumber;publicCart(Stringisbn,Stringtitle,doubleprice,intnumber){this.isbn=isbn;this.title=title;this.price=price;this.number=number;}publicStringgetIsbn(){returnthis.isbn;}publicStringgetTitle(){returnthis.title;}publicdoublegetPrice(){returnthis.price;}publicintgetNumber(){returnthis.number;}publicvoidsetIsbn(Stringisbn){this.isbn=isbn;publicvoidsetTitle(Stringtitle){this.title=title;}publicvoidsetPrice(doubleprice){this.price=price;}publicvoidsetNumber(intnumber){this.number=number;}}CartBean.javaimportjavax.ejb.Stateful;importjava.util.ArrayList;@StatefulpublicclassCartBeanimplementsCartRemote{privateArrayList<Cart>record;privatebooleaninitialed=false;publicvoidadd(Stringisbn,Stringtitle,doubleprice){record.add(newCart(isbn,title,price,1));}publicvoidset(Stringisbn,intnumber){for(Cartcurrent:record){if(current.getIsbn().equals(isbn)){current.setNumber(number);}}}publicbooleanexist(Stringisbn){for(Cartcurrent:record){if(current.getIsbn().equals(isbn)){returntrue;}}returnfalse;}publicArrayList<Cart>get(){ArrayList<Cart>result=newArrayList<Cart>();for(Cartcurrent:record){result.add(newCart(current.getIsbn(),current.getTitle(),current.getPrice(),current.getNumber()));}returnresult;}publicbooleaninitialed(){returnthis.initialed;}publicvoidcreate(){record=newArrayList<Cart>();initialed=true;}}voidedit(Booksbooks);voidremove(Booksbooks);Booksfind(Objectid);List<Books>findAll();ArrayList<Books>search(Stringkey);}CartRemote.javaimportjavax.ejb.Remote;importjava.util.ArrayList;@RemotepublicinterfaceCartRemote{publicvoidadd(Stringisbn,Stringname,doubleprice);publicvoidset(Stringisbn,intnumber);publicbooleanexist(Stringisbn);publicArrayList<Cart>get();publicbooleaninitialed();publicvoidcreate();}2、BooksOnline-warControlServlet.javaimportBooks.BooksFacadeRemote;importCart.CartRemote;importjava.util.Enumeration;importjava.io.IOException;importjava.io.PrintWriter;importjavax.ejb.EJB;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassControlServletextendsHttpServlet{@EJBprivateCartRemotecartBean;@EJBprivateBooksFacadeRemotebooksFacade;/***ProcessesrequestsforbothHTTP<code>GET</code>and<code>POST</code>methods.*@paramrequestservletrequest*@paramresponseservletresponse*/protectedvoidprocessRequest(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType("text/html;charset=UTF-8");request.setCharacterEncoding("UTF-8");PrintWriterout=response.getWriter();try{if(request.getParameter("page").equals("search")){request.getSession().setAttribute("directory",booksFacade.search(request.getParameter("key").toLowerCase()));response.sendRedirect("Directory.jsp");if(request.getParameter("page").equals("directory")&&request.getParameter("submit").equals("cart")){if(!cartBean.initialed()){cartBean.create();}Enumerationnames=request.getParameterNames();while(names.hasMoreElements()){Stringname=(String)names.nextElement();if(!name.equals("page")&&!name.equals("submit")){if(!cartBean.exist(request.getParameter(name))){cartBean.add(request.getParameter(name),booksFacade.find(request.getParameter(name)).getTitle(),booksFacade.find(request.getParameter(name)).getPrice());}}}request.getSession().setAttribute("cart",cartBean.get());response.sendRedirect("Cart.jsp");}if(request.getParameter("page").equals("directory")&&request.getParameter("submit").equals("search")){response.sendRedirect("Search.jsp");}if(request.getParameter("page").equals("cart")&&request.getParameter("submit").equals("order")){doublesum=0;Enumerationnames=request.getParameterNames();while(names.hasMoreElements()){Stringname=(String)names.nextElement();if(!name.equals("page")&&!name.equals("submit")&&!name.equals("address")){cartBean.set(name,Integer.parseInt(request.getParameter(name)));sum+=booksFacade.find(name).getPrice()*Integer.parseInt(request.getParameter(name));request.getSession().setAttribute("cart",cartBean.get());request.getSession().setAttribute("fee",sum);request.getSession().setAttribute("address",request.getParameter("address"));response.sendRedirect("Order.jsp");}if(request.getParameter("page").equals("cart")&&request.getParameter("submit").equals("continue")){response.sendRedirect("Directory.jsp");}if(request.getParameter("page").equals("cart")&&request.getParameter("submit").equals("search")){response.sendRedirect("Search.jsp");}}finally{out.close();}}//<editor-folddefaultstate="collapsed"desc="HttpServlet方法。單擊左側(cè)的+號(hào)以編輯代碼。>/***HandlestheHTTP<code>GET</code>method.*@paramrequestservletrequest*@paramresponseservletresponse*/protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{processRequest(request,response);}/***HandlestheHTTP<code>POST</code>method.*@paramrequestservletrequest*@paramresponseservletresponseprotectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{processRequest(request,response);}/***Returnsashortdescriptionoftheservlet.*/publicStringgetServletInfo(){return"Shortdescription";}//</editor-fold>}3、web(1)Cart.jsp<%@pagecontentType="text/html"pageEncoding="UTF-8"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""/TR/html4/loose.dtd"><%@pageimport="Cart.Cart;"%><%@pageimport="java.util.ArrayList;"%><%@pageimport="Books.BooksFacade;"%><%@pageimport="Books.Books;"%><html><head><metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"><title>Cart</title></head><body><%ArrayList<Cart>result=(ArrayList<Cart>)session.getAttribute("cart");if(result==null||result.isEmpty()){%><h2>您的購(gòu)物車是空的〈/h2><formaction="http://localhost:8080/BooksOnline-war/ControlServlet">〈inputtype="hidden"name="page"value="cart"/>〈inputtype="submit"name="submit"value="continue"/>〈inputtype="submit"name="submit"value="search"/>〈/form>〈%}else{%><h2>您的購(gòu)物車?yán)镉幸韵聢D書(shū)/h2><formaction="http://localhost:8080/BooksOnline-war/ControlServlet"><tableborder="1"><tr>〈th>書(shū)名〈/th>〈th>價(jià)格〈/th>〈th>數(shù)量〈/th></tr>〈%for(Cartcurrent:result){%>〈tr>〈td>〈%=current.getTitle()%>〈/td>〈td>〈%=current.getPrice()%>〈/td>〈td>〈inputtype="text"name="〈%=current.getIsbn()%>"value="〈%=current.getNumber()%>"/>〈/td>〈/tr>〈%}%>〈/table>〈labelfor="address">請(qǐng)輸入您的地址:〈/label>〈inputtype="text"name="address"id="address"value=""/>〈br/>〈inputtype="hidden"name="page"value="cart"/>〈inputtype="submit"name="submit"value="order"/>〈inputtype="submit"name="submit"value="continue"/>〈inputtype="submit"name="submit"value="search"/>〈/form>〈%}%>〈/body>〈/html>(2)Directory.jsp〈%@pagecontentType="text/html"pageEncoding="UTF-8"%>〈!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:///TR/html4/loose.dtd">〈%@pageimport="java.util.ArrayList;"%>〈%@pageimport="Books.Books;"%><html><head><metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"><title>Directory</title></head><body><%ArrayList<Books>result=(ArrayList<Books>)session.getAttribute("directory");if(result==null){%><h2>沒(méi)有找到合適的書(shū)/h2><%}else{%><formaction="http://localhost:8080/BooksOnline-war/ControlServlet"><h2>符合條件的圖書(shū)如下/h2><tableborder="1"><tr><th></th>〈th>書(shū)名〈/th>〈th>作者/th><th>出版社/th>〈th>價(jià)格〈/th>〈/tr>〈%for(Bookscurrent:result){%>〈tr>〈td>〈inputtype="checkbox"name="〈%=current.getIsbn()%>"value="〈%=current.getIsbn()%>"/>〈td>〈%=current.getTitle()%>〈/td>〈td>〈%=current.getAuthor()%>〈/td>〈td>〈%=current.getPress()%>〈/td>〈td>〈%=current.getPrice()%>〈/td>〈/tr>〈%}%>〈/table>〈inputtype="hidden"name="page"value="directory"/>〈inputtype="submit"name="submit"value="cart"/><inputtype="submit"name="submit"value="search"/></form><%}%></body></h

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論