JAVAWEB书城

设计题目书海拾贝 在线商城

意义背景

随着Internet国际互联网的迅速发展,线上购物越来越火热,越来越多的企业开始建设属于自己的网站。基于Internet的信息服务、商务服务已经成为现代企业一项不可缺少的内容。很多企业都已不满足于建立一个简单的仅仅能够发布信息的静态网站。本项目是以eclipse作为开发工具,应用MySQL数据库构建成的一个小型网站——书海拾贝图书销售系统。该系统主要功能是用户可通过注册登录书海拾贝网站对想要购买的书籍进行查询和订购等操作。

需求分析

作为一个图书销售的网站,本网站的主要功能就是方便登陆用户对于图书的购买。从消费者进入手也开始分析给网站的需求:

一、首页(用户在进入我们的网站首页时可以根据左侧菜单分类浏览书籍,同时可以根据所需在搜索栏中搜索特定的书籍,上方右侧也可选择登陆或者注册)
1.菜单栏(用户可根据左侧菜单的书籍分类点击浏览相关书籍)
2.登陆注册(老用户可以登陆,新用户可以注册,不登录也可以浏览书籍,购买前必须登陆)
3.商品详情(点击右侧书籍图片或者名称可以查看书籍详情)
二、加入购物车(已经登陆的用户可以直接购买和加入购物车操作,没有登陆的用户进行登陆和注册操作!)
三、结账(加入购物车后可以结账,选择要结账的书籍进行结账,第一次购买时没有添加默认地址需要添加地址收货人电话等信息)
四、个人中心(新用户通过注册获取账号,登陆后才可进行查看购物车,付账等功能,同时登陆用户可以修改自己的密码,昵称,收货信息等)

功能设计

作为书籍商城,“书海拾贝”在线商城主要针对购买书籍的人群,具有市面上一般商城具有的部分功能,包括以下内容:
1.注册和登陆功能
2.点击分类浏览书籍功能
3.搜索栏搜索图书功能
4.点击书籍封面和书籍名称展示书籍详情、加入购物车以及一键下单功能
5.点击用户名进入个人空间
6.点击用户信息可展示用户信息
7.点击修改信息可修改收货地址和手机号
8.点击购物车可对购物车内商品进行结算和移除操作
9.点击历史订单可查询历史订单信息
经市场调查和用户反馈能够较好地满足用户的需求。

概要设计

本项目主要分为三个模块

一、注册登录页面(注册账号,将用户信息录入数据库中,登录成功后跳转到主页)
二、主页面(分类列表类别名称建立超链接,在数据库中寻找对应列别的数据,自动填充到右侧iframe中;上方的搜索栏中根据关键字查询,在数据库中查找书籍填充到iframe中;iframe中为图书页面,图书的封面和标题有超链接,可跳转到详情页面;右上角的登录和注册按钮超链接可按需跳转到注册和登陆页面;已登录的用户会在主页右上角显示用户名超链接,点击可进入个人中心)
三、个人中心(上方的返回主页文字建立超链接,点击返回至主页;左侧功能列表有用户信息、修改信息、购物车、历史订单的超链接,在右侧iframe中展示个人信息或者修改信息或者结算书籍清单或者查看历史订单)
四、三个模块的具体关系可用下图反映:
在这里插入图片描述

五、页面设计构图
在这里插入图片描述

详细设计

利用Maven引入jar包(mybatis)以阿里镜像作为中央仓库,下载到本地仓库;
模型层{entity:Admin.java(用户类 包括 ID,用户名,密码)
Book.java(书本类 包括ID,编号,书名,作者,封面,价格,出版社,概括)
BookType.java(类别类 包括 ID,类别名)
Information.java(用户信息 包括 姓名,性别,手机号,收货地址)
Order.java(订单类 包括ID,订单编号,用户ID,价格,下单时间) )
dao层:AdminDAO(通过用户名和密码在用户表中查找该符合的用户;在数据库中插入新 用户)
BookDAO(通过ID在book表中找到对应籍; 通过书籍名称找到书籍;通过类别ID找到该类别下的所有书)
BookTypeDAO(找到类别表中的所有类别)
InfoDAO(通过用户名找到用户信息;更改用户信息;通过用户名找到收货地址;插入信息)
OrderDAO(插入订单信息;通过用户ID找到用户所有的订单信息)
Service层:AdminService(登陆;查询用户信息;用户注册;更新用户信息;查询收货地址;完善用户信息)
BookService(查找所有书籍种类返回类型为List;根据ID查找书籍)
OrderService(增加订单;根据用户名查找所有订单)
}
视图层{index.jsp(主页);login.jsp(登陆页);register.jsp(注册页);center.jsp(个人中心页);detail.jsp(书籍详情页);books.jsp(书籍页);personalinfo.jsp(个人信息页);advertisment.jsp(广告页);car.jsp(购物车页);order.jsp(订单页);updateinfo.jsp(修改个人信息页)}
控制层{AdminServlet.java(接收/admin请求,注册或登陆成功跳转至主页);
BookServlet.java(接收/book/*请求);
PreviewServlet.java(将书记类别填充至左侧)}
在这里插入图片描述

一、主页
1.左侧分类列表:booktypeMapper: select id,booktype from booktype 返回BookType类型,用list存储,保存在Session中,在index.jsp中填充到左侧分类列表里;
2.类别名称的超链接传递类别的ID,bookMapper:select id,bno,bname,author,bimg,price,press,remark from book where typeid=#{id};返回Book类型,用list存储,保存在session中,在index.jsp中填充到右侧;3.书籍封面和标题建立超链接传递书籍的ID,bookMapper:select id,bno,bname,author,bimg,price,press,remark from book where id=#{id};返回Book类型,用list存储,保存在session中,在index.jsp中填充到右侧;
4.加入购物车按钮建立超链接传递书籍的ID,bookMapper:select id,bno,bname,author,bimg,price,press,remark from book where id=#{id};返回Book类型,保存在session(car)中。
5.搜索栏关键字查询:传递搜索框中的文字,bookMapper:select id,bno,bname,author,bimg,price,press,remark from book where bname like '%${value}%'返回book类型,用list存储,保存在session中,在index.jsp中填充到右侧;
6.注册登录建立超联接,跳转到注册登录页
7.注册或者登陆完成后主页面显示用户名,用户名建立超联建,跳转到个人中心页

二、登录、注册
1.注册和已有账号标签可让用户在登录和注册之间相互切换
2.登录页中点击登录传递用户名和密码,在adminMapper:select * from admin where username=#{user} and password=#{pwd};AdminServlet中对用户名和密码核实,正确则跳转至主页,错误则跳回登录页面并提示用户名或密码错误,具体如下:
AdminServlet中:
if(admin!=null) {
session.setAttribute(“currAdmin”, admin);
session.setAttribute(“curruser”, infor);
response.sendRedirect(request.getContextPath()+“/book/index”);
}else {
{ response.sendRedirect(request.getContextPath()+“/login.jsp?info=1”);
}
}
Login.jsp中:
<c:if test=“${param.info==1}”>
账号密码错误,请重新输入
</c:if>
注册页面填写用户名,密码和确认密码,如果密码和确认密码不同则跳转回注册页面并提醒两次密码输入不一致,如果一样则在数据库的admin表中插入新用户,并跳转至主页面,具体代码如下:
if(“/register”.equals(pathInfo)) {
String username=request.getParameter(“username”);
String password=request.getParameter(“password”);
String password2=request.getParameter(“password2”);
if(password.equals(password2))
{
String sex=“unknow”;
String phone=“unknown”;
String adress=“unknow”;
Information info=new Information(username,sex,phone,adress);
adminService.insertinfo(info);
Information infor=adminService.findinfo(username);
Admin adm=new Admin(0,username,password);
adminService.insert(adm);
Admin admin=adminService.login(username, password);
session.setAttribute(“currAdmin”, admin);
session.setAttribute(“curruser”, infor);
response.sendRedirect(request.getContextPath()+“/book/index”);
}
else {
response.sendRedirect(request.getContextPath()+“/register.jsp?info=3”);
}
}

三、个人中心
1.返回首页建立超链接,点击跳转至主页;
2.个人信息从session中取出当前用户名,infoMapper:select name,sex,phone,adress from information where name=#{name};返回information类型存储到session中并在右侧标签中展示;
3.修改信息取出手机号和收货地址,infoMapper:update information set name=#{name},sex=#{sex},phone=#{phone},adress=#{adress} where name=#{name};数据库中修改information中用户的手机号码和收货地址;
4.购物车将session中car中书本填充,勾选书本,结算和删除书本代码见下文
5.历史订单,结算按钮产生订单编号,价格,用户ID,时间
if(“/pay”.equals(pathInfo)) {
double price=Double.parseDouble(request.getParameter(“totalPrice”));
Admin admin=(Admin)session.getAttribute(“currAdmin”);
Date date=new Date();
String oid=“”;
//唯一的订单编号
oid=DateUtil.dateToString(date, “yyyyMMddHHmmss”)+admin.getId();
Random random=new Random();
for(int i=0;i<3;i++) {
oid+=random.nextInt(10);
}

		//下单时间
		String otime=DateUtil.dateToString(date, "yyyy-MM-dd HH:mm:ss");
		Order order=new Order(0,oid,admin.getId(),price,otime);
		orderService.addOrder(order);
		response.sendRedirect(request.getContextPath()+"/car.jsp");
	}

将订单填充到右侧标签中展示

数据库设计

实体类抽取 (简化版的购物流程)
实体类: 书籍类 用户类 订单类
表: 书籍类别 书籍表 用户表 订单表
在这里插入图片描述
在这里插入图片描述

算法设计

对购物车中书本勾选结算的算法如下:
$(function () {
KaTeX parse error: Expected '}', got 'EOF' at end of input: … if((this).prop(“checked”)){
//选中
//获取这个复选框对应的的书籍的单价
var price= ( t h i s ) . p a r e n t ( ) . n e x t ( ) . n e x t ( ) . n e x t ( ) . n e x t ( ) . t e x t ( ) ; / / 得到价格的文本信息 t e x t ( ) 返回的是字符串 v a r c u r r T o t a l = (this).parent().next().next().next().next().text();//得到价格的文本信息 text()返回的是字符串 var currTotal= (this).parent().next().next().next().next().text();//得到价格的文本信息text()返回的是字符串varcurrTotal=(“#totalPrice”).text();//$(“#totalPrice”) 找到id属性值为totalPrice的jquery对象
if(currTotal==‘’||currTotalnull){
currTotal=0;
}
//重新计算当前已选书籍的总价
// Number.parseFloat() 将字符串转为float,再进行计算
currTotal=Number.parseFloat(currTotal)+Number.parseFloat(price);
//更新总价
KaTeX parse error: Expected 'EOF', got '#' at position 3: ("#̲totalPrice").te…(this).parent().next().next().next().next().text();
var currTotal=$(“#totalPrice”).text();
if(currTotal
’'||currTotal==null){
currTotal=0;
}
currTotal=Number.parseFloat(currTotal)-Number.parseFloat(price);
$(“#totalPrice”).text(currTotal);
}

        });
        //2.全选
        $("#chkall").click(function(){
            //如果 全选,书籍的全部复选框选中
            //如果 全选取消,书籍的全部复选框取消
            $("input[name='bid']").prop("checked",$(this).prop("checked"));
            //
            if($(this).prop("checked")){//全选时,更新总价
                var num=0;
                $(".singlePrice").each(function(){//遍历每一个单价
                    num+=Number.parseFloat($(this).text());//num+=...  ==> num=num+...

                });
                $("#totalPrice").text(num);

            }else{
                $("#totalPrice").text(0);
            }

        });
        //书籍复选框与全选框状态一致
        $("input[name='bid']").click(function () {
            //$("input[name='bid']:checked"):
            // 所有书籍前的复选框的选中的个数等于
            //所有书籍复选框的元素的个数
            if( $("input[name='bid']:checked").length== $("input[name='bid']").length){
                //是全选
                $("#chkall").prop("checked",true);
            }else{
                $("#chkall").prop("checked",false);
            }
        });
    })
    //表单验证
    // onsubmit:表单提交时触发
    function checkForm() {
        var price=$("#totalPrice").text();
        if(price==0){
            //没有选择任何书籍时  表单不提交
            alert("请选择书籍");
            return  false;
        }else {
            //有选择书籍时 表达提交
            $("#hiddenTotal").val(price);
            alert("下单成功");
            return true;
        }
    }
运行效果截图

登陆页
在这里插入图片描述

注册页:
在这里插入图片描述

主页:
在这里插入图片描述

主页:点击类别
在这里插入图片描述

主页 点击封面或书名:
在这里插入图片描述

个人中心
在这里插入图片描述

软件测试

测试结果:1.功能性:
系统实现了对于数据库信息的增删查改,用户可进行浏览页面,购买书籍等操作;但功能并不完善,缺少评论,追评,分享等操作。
2.易用性:
排版简约,操作容易,按键提示,超链接显示通俗;注册登录页面和个人信息修改限制性提示存在不足
3.可靠性:
现有系统可靠性控制不够,很多控制是通过液面控制实现的,未考虑到页面控制失效引起数据库插入错误
现有系统容错性不高,如果出现系统错误,无法回到出错前页面
4.兼容性:
现有系统支持windows下的IE浏览器、火狐浏览器、Chrome等浏览器
现有系统为进行其他兼容性测试
5.安全性:
现系统控制了以下问题:在未登录时无法进行加入购物车,一键下单进入个人中心等操作;直接输入某一页面的URL能否打开页面并进行操作是不允许的;
未控制以下安全性问题:登陆错误次数限制;用户名密码大小写提示;
实习总结
本次高博的培训经历是非常深刻的,我从完全的小白渐渐地成长,在大量的新知识涌入过程中也经历过茫然,好在在老师的指导下和自身的巩固中我能较好地接纳这些信息,并在完成课程设计中灵活的运用这些知识。在着手项目的过程中我发现对于需求的分析,再到设计数据库的过程是非常重要的,不然在完成项目过程中会需要反复调整,没有较好的数据库甚至会导致功能的编程更加复杂且不好理解。另外,在本次项目的完成过程中我也发现了自己的不足,对于基本的操作还不是很熟悉,往往需要在看老师的代码下才能涌现灵感。为此,在平时的学习过程中,我会更加努力地练习。由于项目是分组协作完成的,在与我的组员的交流中,我也学会了更好的与他人配合,也在此过程中学习了他们一些优秀的想法和看待问题的角度。最后,感谢授课老师的辛苦栽培。也感谢高博给予我的这次实践的机会。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值