课内实验报告课程名:Web 技术任课教师:吴振宇专业:物联网工程成绩:2015/2016学年第1学期南京邮电大学基于JSP的网上书城设计与实现一、实验描述1、需求分析随着计算机网络技术的飞速发展和人们生活节奏的不断加快,电子商务技术已经逐渐融入了人们的日常生活当中,网上商城作为电子商务最普遍的一种形式,已被大众逐渐接受。
因此开发一个网上商城系统,适合当今形势,更加方便人们在线购物。
2、分工:负责实现图书选购、购物车功能、收藏功能、查看图书详细信息、用户注册、用户登录、查看用户的订单信息、修改用户个人信息。
负责实现现有图书管理:修改,删除,查看、用户管理:查看,修改,删除、订单管理:查看订单清单,更新订单付款,出货状态,删除订单、添加新图书、添加图书分类。
负责书写实验报告。
二、实验内容1、总体设计(1)系统设计本系统采用三层架构设计,它的工作原理如下图所示。
三层架构模型采用三层构架以后,用户界面层通过统一的接口向业务层发送请求,业务层按自己的逻辑规则将请求处理之后进行数据库操作,然后将数据库返回的数据封装成类的形式返回给用户界面层(2)系统流程前台系统流程图后台系统流程图(3)数据库设计数据库在一个信息管理系统中占有非常重要的地位,数据库结构设计的好坏将直接对应用系统的效率,以及实现的效果产生影响。
合理的数据库结构设计可以提高数据存储的效率,保证数据的完整和一致。
数据库需求分析针对一般在线书店的需求,得出如下需求信息。
1.用户分为未注册用户和已注册用户。
2.订单分为单张详细订单和总订单。
3.一个用户可以购买多本图书。
4.一个用户对应一张订单。
5.一个列表对应多张订单。
针对本系统功能分析,总结出如下的需求信息。
1.用户,包括数据项:用户ID、用户名、密码。
2.图书,包括数据项:图书编号、图书名、价格、图书介绍。
3.订单列表,包括数据项:订单编号、图书编号、购书数量。
4.订单,包括数据项:订单编号、用户编号、下单时间。
实体关系E-R图商品实体E-R图用户实体E-R图订单实体E-R图2、详细设计系统概述前台主要功能介绍:①搜索商品:用户不用登录可以输入商品的名称来查看需要查询的商品,而且可以查看商品的详细信息,如生产厂商、剩余数量、介绍等。
②分类查询:用户可以按分类来查看该分类的商品。
③用户注册:用户可以输入注册信息来注册,用户可以检查用户名是否存在,用户注册信息没有错误则可正确注册(不要使用中文名称来注册)。
④用户登录:用户输入登录名和密码进行登录,如果用户名和密码错误无法登录。
⑤更新信息:用户登录后可以查看个人信息并更新个人信息,还可以修改密码。
⑥购物车:用户登录后就可以购物,可以把商品添加到购物车,或者把商品从购物车删除,如果商品数量为0则无法添加到购物车。
⑦提交订单:用户把商品添加到购物车后即可提交订单,订单提交后用户可以进行付款(本系统为用户模拟了一个账户,用于用户购物,用户账户余额不足则无法付款)。
⑧查看订单:用户可以查看自己的订单。
后台主要功能介绍:①商品种类管理:管理登录后台后可以对商品种类进行添加、删除。
添加时如果商品种类已经存在会提示添加错误。
②商品管理:管理员对商品进行添加、删除操作,如果商品已经存在,添加时会提示商品已经存在。
③订单管理:管理员可以查询订单,查看所有订单信息。
④用户管理:管理员可以查询用户,管理用户信息。
⑤系统管理:管理员可以修改登录密码,安全退出。
功能展示及说明客户界面设计与实现1).界面头和界面尾设计他们的效果如下图:主界面显示效果2).用户登录模块的设计为了检验用户是否合法,所以需要输入用户名和密码来验证用户的合法性,用户登录模块刚好完成这样的一个功能。
该模块需要用到LoginAction.java这个servlet。
需要设计一个表单让用户输入信息。
效果图如下:用户登录界面要实现登陆功能,首先要连接数据库,把数据库中的用户信息与表单中获取的信进行验证,数据库连接的代码如下:package er;import java.util.List;import java.util.Map;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext;import erStatus;import com.albert.bs.model.Cart;import com.albert.bs.model.Course;import com.albert.bs.model.Product;import com.albert.bs.model.SessionContainer;import er;import com.albert.bs.service.CourseService;import com.albert.bs.service.ProductService;import erService;import erAction;import com.albert.bs.util.MD5Util;import com.opensymphony.xwork2.ActionContext;public class LoginAction extends UserAction {private static final long serialVersionUID = -4357525212351724516L; private String username;private String password;private String validcode;private String rememberPsw;private UserService userService;private ProductService productService;private CourseService courseService;@SuppressWarnings("unchecked")public String execute() throws Exception {Map session = ActionContext.getContext().getSession();SessionContainer container = (SessionContainer)session.get("container");String vc = container.getValidationCode();if(vc != null && !validcode.equalsIgnoreCase(vc)) {this.addFieldError("validcode",getText("validationcode.error"));return LOGIN;}User user = userService.login(username, MD5Util.encrypt(password));if(user != null && user.getStatus() != null && user.getStatus() == UserStatus.STOPPED) {this.addActionError(getText("user.stopped"));return LOGIN;}if(user != null && user.getUserId() != null && !user.getUserId().equals("")) {container.setUser(user);Cart cart = container.getCart();if(cart == null) {cart = new Cart();}List<Product> products = cart.getProducts();List<Product> oldProducts = productService.getProducts(user.getUserId());if(oldProducts.size() > 0) {if(cart == null) {cart = new Cart();}}cart.setProducts(oldProducts);int flag = 0;if(products.size() > 0) {for (Product product : products) {for (Product op : oldProducts) {if(product.getBook().getBookId().equals(op.getBook().getBookId())) {op.setQuantity(op.getQuantity() + product.getQuantity());productService.changeQuantity(op);cart.setProducts(oldProducts);flag = 1;}}if(flag == 0) {product.setUser(container.getUser());productService.add(product);cart.getProducts().add(product);}}}container.setCart(cart);session.put("container", container);Course course = container.getCourse();if(course == null){course = new Course();course = courseService.findById(user.getUserId());}container.setCourse(course);session.put("container",container);if(rememberPsw != null && rememberPsw.equals("yes")) {addCookie("userId", user.getUserId());}String lastUrl = (String) session.get("lastUrl");if(lastUrl != null && !lastUrl.equals("")) {HttpServletResponse response =ServletActionContext.getResponse();session.put("lastUrl", null);String lastUrlParam = (String) session.get("lastUrlParam");if(lastUrlParam != null && !lastUrlParam.equals("")) {session.put("lastUrlParam", null);response.sendRedirect(lastUrl + lastUrlParam);} else {response.sendRedirect(lastUrl);}return null;}return SUCCESS;} else {this.addActionError(getText("nameorpsw.error"));}return LOGIN;}public void addCookie(String name, String value) {Cookie cookie = new Cookie(name, value);cookie.setMaxAge(365 * 24 * 60 * 60);ServletActionContext.getResponse().addCookie(cookie);}public String getUsername() {return username;}public void setUsername(String username) {ername = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getValidcode() {return validcode;}public void setValidcode(String validcode) {this.validcode = validcode;}public String getRememberPsw() {return rememberPsw;}public void setRememberPsw(String rememberPsw) {this.rememberPsw = rememberPsw;}public UserService getUserService() {return userService;}public void setUserService(UserService userService) { erService = userService;}public ProductService getProductService() {return productService;}public void setProductService(ProductService productService) { this.productService = productService;}public CourseService getCourseService() {return courseService;}public void setCourseService(CourseService courseService) { this.courseService = courseService;}}3).在线购书功能模块设计用户可以查找书通过分类,关键字查看图书的详细资料。