实验报告Web技术.docx

上传人:b****5 文档编号:28439208 上传时间:2023-07-13 格式:DOCX 页数:19 大小:333.01KB
下载 相关 举报
实验报告Web技术.docx_第1页
第1页 / 共19页
实验报告Web技术.docx_第2页
第2页 / 共19页
实验报告Web技术.docx_第3页
第3页 / 共19页
实验报告Web技术.docx_第4页
第4页 / 共19页
实验报告Web技术.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

实验报告Web技术.docx

《实验报告Web技术.docx》由会员分享,可在线阅读,更多相关《实验报告Web技术.docx(19页珍藏版)》请在冰豆网上搜索。

实验报告Web技术.docx

实验报告Web技术

 

课内实验报告

课程名:

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。

需要设计一个表单让用户输入信息。

效果图如下:

用户登录界面

要实现登陆功能,首先要连接数据库,把数据库中的用户信息与表单中获取的信进行验证,数据库连接的代码如下:

packagecom.albert.bs.user.action.user;

importjava.util.List;

importjava.util.Map;

importjavax.servlet.http.Cookie;

importjavax.servlet.http.HttpServletResponse;

importorg.apache.struts2.ServletActionContext;

importcom.albert.bs.constant.UserStatus;

importcom.albert.bs.model.Cart;

importcom.albert.bs.model.Course;

importcom.albert.bs.model.Product;

importcom.albert.bs.model.SessionContainer;

importcom.albert.bs.model.User;

importcom.albert.bs.service.CourseService;

importcom.albert.bs.service.ProductService;

importcom.albert.bs.service.UserService;

importcom.albert.bs.user.action.UserAction;

importcom.albert.bs.util.MD5Util;

importcom.opensymphony.xwork2.ActionContext;

publicclassLoginActionextendsUserAction{

privatestaticfinallongserialVersionUID=-4357525212351724516L;

privateStringusername;

privateStringpassword;

privateStringvalidcode;

privateStringrememberPsw;

privateUserServiceuserService;

privateProductServiceproductService;

privateCourseServicecourseService;

@SuppressWarnings("unchecked")

publicStringexecute()throwsException{

Mapsession=ActionContext.getContext().getSession();

SessionContainercontainer=(SessionContainer)session.get("container");

Stringvc=container.getValidationCode();

if(vc!

=null&&!

validcode.equalsIgnoreCase(vc)){

this.addFieldError("validcode",getText("validationcode.error"));

returnLOGIN;

}

Useruser=userService.login(username,MD5Util.encrypt(password));

if(user!

=null&&user.getStatus()!

=null&&user.getStatus()==UserStatus.STOPPED){

this.addActionError(getText("user.stopped"));

returnLOGIN;

}

if(user!

=null&&user.getUserId()!

=null&&!

user.getUserId().equals("")){

container.setUser(user);

Cartcart=container.getCart();

if(cart==null){

cart=newCart();

}

Listproducts=cart.getProducts();

ListoldProducts=productService.getProducts(user.getUserId());

if(oldProducts.size()>0){

if(cart==null){

cart=newCart();

}

}

cart.setProducts(oldProducts);

intflag=0;

if(products.size()>0){

for(Productproduct:

products){

for(Productop:

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);

Coursecourse=container.getCourse();

if(course==null){

course=newCourse();

course=courseService.findById(user.getUserId());

}

container.setCourse(course);

session.put("container",container);

if(rememberPsw!

=null&&rememberPsw.equals("yes")){

addCookie("userId",user.getUserId());

}

StringlastUrl=(String)session.get("lastUrl");

if(lastUrl!

=null&&!

lastUrl.equals("")){

HttpServletResponseresponse=ServletActionContext.getResponse();

session.put("lastUrl",null);

StringlastUrlParam=(String)session.get("lastUrlParam");

if(lastUrlParam!

=null&&!

lastUrlParam.equals("")){

session.put("lastUrlParam",null);

response.sendRedirect(lastUrl+lastUrlParam);

}else{

response.sendRedirect(lastUrl);

}

returnnull;

}

returnSUCCESS;

}else{

this.addActionError(getText("nameorpsw.error"));

}

returnLOGIN;

}

publicvoidaddCookie(Stringname,Stringvalue){

Cookiecookie=newCookie(name,value);

cookie.setMaxAge(365*24*60*60);

ServletActionContext.getResponse().addCookie(cookie);

}

publicStringgetUsername(){

returnusername;

}

publicvoidsetUsername(Stringusername){

this.username=username;

}

publicStringgetPassword(){

returnpassword;

}

publicvoidsetPassword(Stringpassword){

this.password=password;

}

publicStringgetValidcode(){

returnvalidcode;

}

publicvoidsetValidcode(Stringvalidcode){

this.validcode=validcode;

}

publicStringgetRememberPsw(){

returnrememberPsw;

}

publicvoidsetRememberPsw(StringrememberPsw){

this.rememberPsw=rememberPsw;

}

publicUserServicegetUserService(){

returnuserService;

}

publicvoidsetUserService(UserServiceuserService){

this.userService=userService;

}

publicProductServicegetProductService(){

returnproductService;

}

publicvoidsetProductService(ProductServiceproductService){

this.productService=productService;

}

publicCourseServicegetCourseService(){

returncourseService;

}

publicvoidsetCourseService(CourseServicecourseService){

this.courseService=courseService;

}

}

3).在线购书功能模块设计

用户可以查找书通过分类,关键字查看图书的详细资料。

效果如下图所示:

在线购书模块效果显示

BuyBookAction.java核心代码如下:

publicclassBuyBookActionextendsUserAction{

privatestaticfinallongserialVersionUID=-1745435427907652812L;

privateIntegerbookCount;

privateStringbookId;

privateBookServicebookService;

privateRecipientServicerecipientService;

@SuppressWarnings("unchecked")

publicStringexecute()throwsException{

Mapsession=ActionContext.getContext().getSession();

Maprequest=(Map)ActionContext.getContext().get("request");

SessionContainercontainer=(SessionContainer)session.get("container");

Bookbook=bookService.findById(bookId);

Listrecipients=recipientService.findAll(container.getUser().getUserId());

intstock=bookService.getStock(bookId);

if(bookCount>stock){

bookCount=stock;

}

request.put("recipients",recipients);

request.put("book",book);

request.put("bookCount",bookCount);

returnSUCCESS;

}

publicvoidvalidate(){

if(bookCount==null||bookCount<1){

this.addActionError(getText("buybook.quantity.error"));

}

}

publicIntegergetBookCount(){

returnbookCount;

}

publicvoidsetBookCount(IntegerbookCount){

this.bookCount=bookCount;

}

publicStringgetBookId(){

returnbookId;

}

publicvoidsetBookId(StringbookId){

this.bookId=bookId;

}

publicBookServicegetBookService(){

returnbookService;

}

publicvoidsetBookService(BookServicebookService){

this.bookService=bookService;

}

publicRecipientServicegetRecipientService(){

returnrecipientService;

}

publicvoidsetRecipientService(RecipientServicerecipientService){

this.recipientService=recipientService;

}

}

4).购物车模块页面设计

在购物车这个模块当中用户可以修改购买数量,可以删除已选图书,可以提交购物车,也可以清空购物车,同时也可以继续购书。

该模块运行时效果如图4-4所示:

购物车模块显示效果

AddCartAction.java核心代码如下:

publicclassAddCartActionextendsUserAction{

privatestaticfinallongserialVersionUID=-3429382993581128981L;

privateStringbookId;

privateProductServiceproductService;

@SuppressWarnings("unchecked")

publicStringexecute()throwsException{

SessionContainercontainer=null;

Mapsession=ActionContext.getContext().getSession();

if(session.get("container")==null){

container=newSessionContainer();

}else{

container=(SessionContainer)session.get("container");

}

Cartcart=container.getCart();

if(cart==null){

cart=newCart();

}

Listproducts=cart.getProducts();

intflag=0;

for(Productproduct:

products){

if(product.getBook().getBookId().equals(bookId)){

product.setQuantity(product.getQuantity()+1);

if(container.getUser()!

=null&&container.getUser().getUserId()!

=null){

productService.changeQuantity(product);

}

cart.setProducts(products);

flag=1;

break;

}

}

if(flag==0){

Productp=newProduct();

p.setBook(newBook(bookId));

if(container.getUser()!

=null&&container.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1