北京工业大学 网络编程基础课设 报告

更新时间:2023-08-27 15:56:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

北京工业大学(北工大) 计算机学院 计算机科学与技术 实验/课程设计 报告/心得/总结/预习报告

实 验 报 告

计 算 机 学 院

课程名称: 网络程序设计 实验人学号:110703xx 姓名:xxx 实验完成日期:2014年5月31日 报告完成日期:2014年5月31日

北京工业大学(北工大) 计算机学院 计算机科学与技术 实验/课程设计 报告/心得/总结/预习报告

目录

一、

需求说明 ................................................................................................................ 3 1、基本需求 ............................................................................................................................. 3 2、辅助需求 ............................................................................................................................. 3 3、数据分析 ............................................................................................................................. 3 二、

1、

应用程序详细设计 ................................................................................................. 4 实现技术 ....................................................................................................................... 4

2、页面转移关系设计 ............................................................................................................. 4 3、人机界面设计 ..................................................................................................................... 5

3.1、index.jsp ................................................................................................................... 5

3.2、Directory.jsp ............................................................................................................. 5 3.3、Cart.jsp ..................................................................................................................... 6 3.4 Order.jsp...................................................................................................................... 6 4、对象模型设计 ..................................................................................................................... 7

4.1、界面对象 .................................................................................................................. 7

4.2、控制器 ...................................................................................................................... 7 4.3、业务模型 .................................................................................................................. 7 5、数据设计 ............................................................................................................................. 7

5.1、图书信息(数据库表、查询结果) ...................................................................... 7 5.2、购物车信息 .............................................................................................................. 7 5.3、共享数据 .................................................................................................................. 8 6、动态模型: ......................................................................................................................... 8 7、EJB接口设计: .................................................................................................................. 8

7.1、BookinfoFacade管理图书信息(封装数据库) ................................................... 8 7.2、CartBean管理购物车信息(本次会话有效)............................................................ 9 8、控制器(CtrlServlet)的输入信息: ........................................................................... 10 8.1、来自查询页 ............................................................................................................ 10 8.2、来自图书目录页 .................................................................................................... 10 8.3、来自购物车页 ........................................................................................................ 10 9、控制器算法概要: ........................................................................................................... 10

9.1、模糊查询search .................................................................................................... 10 9.2、查看购物车 ............................................................................................................ 11 9.3、结算 ........................................................................................................................ 11 9.4、继续选书 ................................................................................................................ 12 9.4、再次查询 ................................................................................................................ 12 10、异常控制及处理 ............................................................................................................. 12

北京工业大学(北工大) 计算机学院 计算机科学与技术 实验/课程设计 报告/心得/总结/预习报告

10.1、index.jsp->Directory.jsp查无此书的处理 .......................................................... 12 10.2、Directory.jsp页面未勾选任何商品的处理 ........................................................ 13 10.3、Cart.jsp->Order.jsp页面商品数量输入不是int的处理 .................................... 14 10.4、Cart.jsp页面address未填写的处理 .................................................................. 14 10.5、Cart.jsp页面商品数量未输入或输入为0的处理 ............................................ 15 10.6、Directory.jsp->Cart.jsp多次添加同一件商品的处理 ......................................... 16

三、

1、

用户使用说明 ....................................................................................................... 17 使用步骤: ................................................................................................................. 17

一、 需求说明

1、基本需求

a) 提供基于关键字的查询功能,关键字可以包含在书名、作者或出版社的任意一条内;

b) 提供购物车,保存选中的图书信息以及提供数量输入; c) 提供图书订单,包含选购的图书信息、总价以及配送地址;

2、辅助需求

a) 支持反复查询、图书选择和订单浏览; b) 提供浏览器界面;

3、数据分析

a) 图书信息->数据库;

b) 购物车->本次会话有效,置于session中。

北京工业大学(北工大) 计算机学院 计算机科学与技术 实验/课程设计 报告/心得/总结/预习报告

二、 应用程序详细设计

1、 实现技术

1.1、采用MVC模式 JSP实现View;

Servlet实现Control; EJB实现model。 1.2、交互关系:

JSP表单动作(form)->CtrlServlet; Servlet转发->JSP页面; 1.3、数据传输:

Servlet调用EJB对象获得数据;

Servlet通过session参数传递给JSP页面。

2、页面转移关系设计

北京工业大学(北工大) 计算机学院 计算机科学与技术 实验/课程设计 报告/心得/总结/预习报告

3、人机界面设计

3.1、index.jsp

3.2、Directory.jsp

北京工业大学(北工大) 计算机学院 计算机科学与技术 实验/课程设计 报告/心得/总结/预习报告

3.3、Cart.jsp

3.4 Order.jsp

北京工业大学(北工大) 计算机学院 计算机科学与技术 实验/课程设计 报告/心得/总结/预习报告

4、对象模型设计

4.1、界面对象

查询页index.jsp;

图书目录页 Directory.jsp; 购物车页 Cart.jsp; 定单页 Order.js;

4.2、控制器

CtrlServlet 负责响应输入命令

包括:模糊查询key、查看购物车cart、结算order 、继续选书continue、再次查询search

4.3、业务模型

图书信息:Bookinfo 实体类的会话Bean 购物车信息:CartBean 会话Bean

5、数据设计

5.1、图书信息(数据库表、查询结果)

书号ISBN 书名Title 作者Author 出版社Press 价格Price

char[24] 主键 char[64] char[32] char[32] double

5.1.1、数据展示

5.2、购物车信息

书号ISBN 书名Title

char[24] char[64]

北京工业大学(北工大) 计算机学院 计算机科学与技术 实验/课程设计 报告/心得/总结/预习报告

价格Price 数量Number double Integer

5.3、共享数据

查询结果和选中的图书信息 作为 session参数

6、动态模型:

7、EJB接口设计:

7.1、BookinfoFacade管理图书信息(封装数据库)

7.1.1、search(String key)

描述:根据关键字从数据库中查找图书信息记录(数组); 条件:书名、作者或出版社中包含关键字; 具体实现: @Override

public ArrayList<Bookinfo> search(String key) { List<Bookinfo> all = this.findAll(); if(all.isEmpty()) { return null; }

北京工业大学(北工大) 计算机学院 计算机科学与技术 实验/课程设计 报告/心得/总结/预习报告

ArrayList<Bookinfo> result=new ArrayList<Bookinfo>() ; for(Bookinfo current : all) {

if(current.getTitle().toLowerCase().contains(key)||current.getAuthor().toLowerCase().contains(key)||current.getPress().toLowerCase().contains(key)) { result.add(current); } }

return result; }

7.1.2、find(String isbn)

描述:根据书号(主键),找出图书信息记录; 具体实现:由系统自动生成。

7.2、CartBean管理购物车信息(本次会话有效)

7.2.1、add(String isbn) 添加记录

描述:向购物车添加一条记录 具体实现: @Override

public void add(String isbn, String title, double price, int number) { cartList.add(new CartBean(isbn, title, price, number)); }

7.2.2、gets() 获得购物车的全部记录

具体实现: @Override

public ArrayList<CartBean> gets() {

ArrayList<CartBean> result = new ArrayList<CartBean>(); for (CartBean current : cartList) {

result.add(new CartBean(current.getIsbn(), current.getTitle(), current.getPrice(), current.getNumber())); }

return result;

} 7.2.3、set(String isbn, int num) 设置购买数量 具体实现: @Override

public void set(String isbn, int number) { for (CartBean current : cartList) {

if (current.getIsbn().equals(isbn)) { current.setNumber(number);

北京工业大学(北工大) 计算机学院 计算机科学与技术 实验/课程设计 报告/心得/总结/预习报告

}

}

7.2.4、exists(String isbn) 查询购物车中是否已经存在此种商品 具体实现:

@Override

public boolean exists(String isbn) { for (CartBean current : cartList) {

if (current.getIsbn().equals(isbn)) { return true; } }

return false;

}

8、控制器(CtrlServlet)的输入信息: 8.1、来自查询页

page=”search”&key=关键字

8.2、来自图书目录页

page=”directory”&submit=”cart”&choose=书号拼接字符串 page=”directory”&submit=”search”

8.3、来自购物车页

page=”cart”&submit=”order” page=”cart”&submit=”continue” page=”cart”&submit=”search”

9、控制器算法概要:

9.1、模糊查询search

描述:按照key从Bookinfo查找图书,将查询结果命名为directory保存在session中,并重定向到Directory.jsp中。 具体实现:

//index->Directory,根据关键字构造查询结果

if (request.getParameter("page").equals("index")) { key = request.getParameter("key");

//将根据关键字查询到的结果存到session中 request.getSession().setAttribute("directory", bookinfoFacade.search(key.toLowerCase()));

response.sendRedirect("Directory.jsp");

北京工业大学(北工大) 计算机学院 计算机科学与技术 实验/课程设计 报告/心得/总结/预习报告

9.2、查看购物车

描述:根据选定的图书对应的checkbox的选定情况构造chooses书号拼接字符串,然后在CtrlServlet中根据空格分割,调用cartBean.exists(String isbn)方法检测购物车中是否已存在次图书。在购物车中不存在此商品的情况下根据isbn号调用bookinfoFacade.find(String isbn)找到对应的图书信息存入CartBean,并重定向到Cart.jsp中。 具体实现:

//Directory->Cart将所选的书籍添加到购物车中

else if (request.getParameter("page").equals("Directory")

&& request.getParameter("submit").equals("cart")) { String choose = request.getParameter("chooses"); String[] chooses = choose.split(" "); for (int i = 0; i < chooses.length; i++) { if (!cartBean.exists(chooses[i])) {

cartBean.add(chooses[i], bookinfoFacade.find(chooses[i]).getTitle(), bookinfoFacade.find(chooses[i]).getPrice(), 1); } }

request.getSession().setAttribute("cart", cartBean.gets()); response.sendRedirect("Cart.jsp"); }

9.3、结算

描述:根据用户输入的图书数量更新CartBean中对应的图书的数量信息,并将address信息以address为名存储到session中,重定向到Order.jsp页面。 具体实现:

//Cart->Order,购物车生成订单

else if (request.getParameter("page").equals("Cart")

&& request.getParameter("submit").equals("order")) { Enumeration names = request.getParameterNames(); while (names.hasMoreElements()) {

String name = (String) names.nextElement(); if (!name.equals("page") && !name.equals("submit") && !name.equals("address")) {

for (int i = 0; i < request.getParameter(name).length(); i++) {

if (!Character.isDigit(request.getParameter(name).charAt(i))) { response.sendRedirect("Cart.jsp");

//这里必须终止处理请求,否则会出错TODO:Why? return; } }

this.cartBean.set(name, Integer.valueOf(request.getParameter(name))); }

北京工业大学(北工大) 计算机学院 计算机科学与技术 实验/课程设计 报告/心得/总结/预习报告

}

request.getSession().setAttribute("cart", this.cartBean.gets()); request.getSession().setAttribute("address", request.getParameter("address"));

response.sendRedirect("Order.jsp"); }

9.4、继续选书

描述:返回图书目录页(session中的cart信息不会丢失) 具体实现:

//Cart->Directory,调整选购的商品,继续利用之前的查询结果 else if (request.getParameter("page").equals("Cart")

&& request.getParameter("submit").equals("continue")) { response.sendRedirect("Directory.jsp"); }

9.4、再次查询

描述:重定向到index.jsp页面进行重新查询(session中的信息并不会丢失),这里分两种情况,分别是Directory->index、 Cart->index。 具体实现:

//Directory->index,重新查询

else if (request.getParameter("page").equals("Directory")

&& request.getParameter("submit").equals("search")) { response.sendRedirect("index.jsp"); }

//Cart->index,重新查询

else if (request.getParameter("page").equals("Cart")

&& request.getParameter("submit").equals("search")) { response.sendRedirect("index.jsp"); }

10、异常控制及处理

10.1、index.jsp->Directory.jsp查无此书的处理

描述:BookinfoFacade的search(String key)方法会返回一个null的结果,在Directory.jsp页面首先判断session中的directory是否为空,为空则显示如下,并提示提供重新查询的选项。

北京工业大学(北工大) 计算机学院 计算机科学与技术 实验/课程设计 报告/心得/总结/预习报告

具体实现:

<% ArrayList<Bookinfo> result = (ArrayList<Bookinfo>) session.getAttribute("directory"); //result = null 是由于数据库没有记录,result为空是由于没能和关键字匹配 if (result == null || result.isEmpty()) {%>

<font color="blue"><h1>未查询到指定关键字!请返回重新查询</h1></font><p> <form name="search" action="CtrlServlet">

<input type="hidden" name="page" value="Directory" /> <input type="submit" name="submit" value="search" /> </form> <% }

10.2、Directory.jsp页面未勾选任何商品的处理

描述:提交到CtrlServlet的表单的提交条件设置为OnSubmit ="return Checker();",Checker()方法中会检查checkbox数组是否至少有一件商品被选中,如果没有,则返回false,不允许表单进行提交,并弹窗提示” 请至少选择一本书籍~ “。

具体实现:

<script language="JavaScript" type="text/javascript">

北京工业大学(北工大) 计算机学院 计算机科学与技术 实验/课程设计 报告/心得/总结/预习报告

function Checker() {

var form1 = document.getElementById("form1"); form1.chooses.value = ""; if (!form1.choose.length) { if (form1.choose.checked)

form1.chooses.value += form1.choose.value; } else {

for (i = 0; i < form1.choose.length; i++) {

if (form1.choose[i].checked) // 复选框中有选中的框 {

form1.chooses.value += form1.choose[i].value; form1.chooses.value += " "; //用空格做分割符 } } }

if (form1.chooses.value === "") { alert("请至少选择一本书籍~"); return false; }

return true; }

</script>

10.3、Cart.jsp->Order.jsp页面商品数量输入不是int的处理

描述:在Cart的表单提交到CtrlServlet后,对所有数量输入框的提交字符串进行逐位数字检测,只要有任意数量输入的任意字符不为int,则重定向回Cart.jsp重新输入。 具体实现:

for (int i = 0; i < request.getParameter(name).length(); i++) {

if (!Character.isDigit(request.getParameter(name).charAt(i))) { response.sendRedirect("Cart.jsp");

//这里必须return,否则会出错TODO:Why? return; } }

10.4、Cart.jsp页面address未填写的处理

描述:提交到CtrlServlet的表单的提交条件设置为OnSubmit ="return Checker();",Checker()方法中会检查address.value是否为空,为空则返回false不允许提交,并弹窗提醒” 地址不能为空,请输入!”。

北京工业大学(北工大) 计算机学院 计算机科学与技术 实验/课程设计 报告/心得/总结/预习报告

10.5、Cart.jsp页面商品数量未输入或输入为0的处理

描述:提交到CtrlServlet的表单的提交条件设置为OnSubmit ="return Checker();",Checker()方法中会检查每个数量输入是否为空,并检查其是否为0,匹配则返回false不允许提交,并弹窗提醒” 每件商品至少选购一件!”。

具体实现:

北京工业大学(北工大) 计算机学院 计算机科学与技术 实验/课程设计 报告/心得/总结/预习报告

function Checker() {

var address = document.getElementById("address");

var number = document.getElementsByClassName("number"); if (!number.length) {

if (number.value === "" || number.value === "0") { alert("每件商品至少选购一件!"); return false; } } else {

for (i = 0; i < number.length; i++) {

if (number[i].value === "" || number[i].value === "0") { alert("每件商品至少选购一件!"); return false; } } }

if (address.value === "") {

alert("地址不能为空,请输入!"); return false; }

return true; } </script>

10.6、Directory.jsp->Cart.jsp多次添加同一件商品的处理

描述:在一次购物过程中可能从Cart.jsp返回到Directory.jsp或通过其他途径回退更改商品,此时就可能出现两次或多次选择同一商品的情况,针对这种情况在CtrlServlet中商品入购物车之前先调用cartBean.exists(String isbn)判断是否购物车中已存在此商品,存在的话则不加入。

具体实现:

if (!cartBean.exists(chooses[i])) {

cartBean.add(chooses[i], bookinfoFacade.find(chooses[i]).getTitle(), bookinfoFacade.find(chooses[i]).getPrice(), 1); }

北京工业大学(北工大) 计算机学院 计算机科学与技术 实验/课程设计 报告/心得/总结/预习报告

三、 用户使用说明

1、 使用步骤:

打开浏览器后,首先进入的是index.jsp,在此页您可以进行图书查询;

当查询有结果时,您将会看到根据您之前输入的关键字的匹配图书清单,否则您需要重

新进行查询。如果您对查询的结果不满意,也可以点击search按钮返回查询页面进行重新查询;

北京工业大学(北工大) 计算机学院 计算机科学与技术 实验/课程设计 报告/心得/总结/预习报告

您可以通过勾选想选购的图书并点击cart将其加入购物车。

当进入购物车页面时,您可以看到之前勾选过的商品,此时您可以点击order按钮进行

下单,如果您还有想买的商品未加入购物车,可以通过点击continue按钮返回查询结果页面进行继续选购,或者可以通过点击search的方式重新查询想要的商品。

北京工业大学(北工大) 计算机学院 计算机科学与技术 实验/课程设计 报告/心得/总结/预习报告

如果您对选购的商品满意,请输入您想购买的数量并填写送货地址,并点击order下单。

本文来源:https://www.bwwdw.com/article/0tji.html

Top