网上书店系统总结报告
项目小组:计应1003班第五小组组员:李圣杭黄守多许明生
以下内容:李圣杭
1、开发结果
软件产品描述
例如:
交付的软件产品名称:网上书店系统英文缩成:book
版本标识:Version1.0
子系统:前台购书,后台管理。软件系统模块清单:1、用户注册/登陆2、用户信息修改3、查看商品详情4、实现购物5、查看购物车6、图书管理7、订单管理8、用户管理文档清单:
《项目开发计划书》,《需求分析报告》,《概要设计报告》,《详细设计报告》,《测试分析报告》。
2、开发工作评价
对项目开发过程的评价
总的来说开发的过程还可以,但还是有点不尽如人意。
第一、计划不周全,对于问题的想象不全面,导致了在开发过程中出现了各种各样的问题,例如在页面的开发设计时,没考虑到与数据库的相对应,所以在各方面都出现了严重的问题。
第二、小组不配合,遇到一些简单的问题自己一个根本就解决不了,导致了开发的进度慢了好多。
以下内容:黄守多制作3、对技术方法的评价
本次项目开发中运用的技术就是jsp,通过本次项目,更加熟练地掌握了对于jsp的软件应用。
对产品质量的评价总体的来说本项目的系统功能基本上算是齐全了,但还是存在着一些小细节方面的问题
以下内容:许明生制作4、技术积累与经验总结
技术积累:大量应用到了表单数据的提交于获取,熟练地掌握了request.getParameter(Stringname);方法对数据的提交与保存。还有就是对于页面之间的链接以及利用session方法对商品的保存于提取。
经验总结:增加了项目开发的经验,对于团队之间的团结与合作,深入体会到了在团队开发过程中每个队员的重要性,以及团队开发之间的统一性。
扩展阅读:网上书店系统毕业设计报告
201*届毕业生
毕业设计
题目:基于
院系名称:xxx专业班级:xx
学生姓名:xx学号:xx指导教师:xx教师职称:讲师
年月日
web的网络书店系统的开发与设计
目次
1引言项目开发背景………………………………………………………………11.1项目选题的背景及意义…………………………………………………………………21.2国内外研究现状和发展动态………………………………………………………………32第一章需求分析……………………………………………………………42.1用户需求……………………………………………………………………………52.1开发需求…………………………………………………………………………………83第二章概要设计…………………………………………………………………………113.1项目主体模块设计………………………………………………………………………113.2项目基本功能设计………………………………………………………………………143.3项目数据库设计…………………………………………………………………………164第三章数据库设计………………………………………………………………………174.1数据库表设计……………………………………………………………………………175第四章详细设计……………………………………………………………205.1开发规范…………………………………………………………………………………205.2程序设计说明……………………………………………………………………………225.3主要代码设计……………………………………………………………………………245.4视图设计…………………………………………………………………………………26结论……………………………………………………………………………………40致谢……………………………………………………………………………………41参考文献………………………………………………………………………………42附录A项目源代码…………………………………………………………………43
1引言
1.1论文选题的背景及意义
随着全球经济一体化的逐步发展和深入,网络书店已成为传统书店必不可少的经营策略之一.目前,网络书店在国际互联网上可以实现的商务已经多样化,可以完成从最基本的信息展示、信息发布功能到在线交易、在线客户服务、在线网站管理功能等,可以说,传统书店所具备的功能几乎都可以在互联网上进行电子化的高效动作。虽然传统书店规模有所不同,随着网上交易的开展,都将有力地改变企业的发展空间,会对企业的竞争力产生不可忽视的影响。这些影响主要体现在以下方面。1、改变企业竞争方式
企业上网不仅给消费者和企业提供了更多的选择消费与开拓销售市场的机会,而且也是提供了更加密切的信息交流场所,从而提高了企业把握市场和消费者了解市场的能力。同时企业上网扩大了企业的竞争领域,使企业从常规的广告竞争、促销手段等领域的竞争扩大到无形的虚拟竞争空间。2、改变企业竞争基础
网络书店改变了企业竞争的交易成本。网络书店具有投入成本低、批发数量大及用户多的优势。电子商务也使企业规模影响竞争力的基础发生了改变。例如在传统的销售渠道中,大书商与小书商之间的竞争差别很大。电子商务使大书商与小书商之间规模差距的竞争变得几乎微不足道。美国西雅图亚马逊公司在网上开办了一家大型书店,提供250万册图书供在线购买。只有两个人管理的网络书店提供的书目和服务,几乎可以与200人管理的传统书店提供的书目和服务一样。3、改变企业的竞争模式
网络书店的经验表明,如果网络书店可以为顾客提供品种齐全的图书、折扣以及灵活的条件、可靠的安全性和友好的界面,在线购物者一般都愿意在网上进行图书交易。、
1.2论国内外研究现状和发展动态
国外的Web商务系统应用起步较早,所以应用的领域比较广,网络销售已经在人们日常消费中占到一定比例,Web商务系统也比较成熟。人们可以以网络这个载体,足不出户就可以搜索、查询到自己需要的信息、购买自己需要的商品。我国电子商务的发展起源于70年代的EDI应用,我国海关是最早引入EDI进行报关,经过几年的完善发展目前企业可以通过上网申请报关。电子商务概念首次引入中国实在1993年,第一笔网上交易发生在1996年。
1、目前我国网上书店的主要类型有:
由国有新华书店投资建设的网络书店。一些有实力的传统书店,都会建立自己的网站,利用网络促销,争取更多的市场份额。它们主要依托传统的图书大厦的图书存储进行网络售书,属于新华书店网络或网络的书店。
由出版社建立的网络书店。因为网络出版的缘故,出版社是最早触网的,我国500多家出版社中,已建立网站的有349家,占62%。较好的出版社营销网站建设的特点是:以出版社本社出版物为网站核心,突出特色,访问速度快捷,信息及时更新,内容的合理编排以及完善的检索能力,较强的交互能力。
外贸出版公司投资建设的网络书店。这一类网络书店立足公司主营业务,主要对海外进行图书销售,销售量逐渐增加。
非出版业资本投资建设的网络书店。如卓越网。
就目前情况而言,上述几类的网络书店可以分为两大类。一类是没有实体书店的网络书店,以卓越网为代表,还有一类是以实体书店为支撑的。前一类书店已经逐步销售更多的商品,在很大程度上是以图书为主打产品,开发其它商品作为补充,如卓越网在大幅增加图书音像品种的同时,陆续增加了数码产品、手机、家居、健康用品和化妆品、玩具礼品、钟表首饰、厨具、母婴产品、小家电等等。
2、网络书店面临的困境
国内网络书店的目的主要有:利用图书销售盈利、效仿亚马逊提高无形资产价值、以拉广告赚钱、紧跟电子商务潮流等,其中,前两种占大多数。然而,实际情况是网络书店并未达到预期的效果,有的根本没什么访问量,有的虽然访问人数众多,但成交有限、营销平淡,同时网上广告也并未被大商家认同。
3、网络书店的意义
在中国,网络书店有发展的必要,也有发展的基础,发展网络书店的条件也已经成熟,但是还有几个关键的问题必须解决好:一是提供普通的信用卡网上支付,制定方便的银行间结算问题;二是成立统一的、最权威的认证机构,从而解决安全问题;三是构建高效率的图书配送系统。只有把这些问题解决好了,才能保证网络书店的蓬勃发展。
很多人看到了书这种商品网上销售的诸多好处:方便购买、金额小、风险小、用户易决定,以及信息的完整性可以更好地帮助我们选择,也提供了更多地选择。
2第一章需求分析
2.1用户需求
基于WEB的网络书店系统主要实现网上购书,网站最终实现用户通过访问本网站进行选购自己喜欢的商品,然后网上下达订单、修改订单、结算、创建个人资料,修改个人资料留言等。网站运行路线为用户通过请求一个JSP页面,然后后台调用处理该功能的Servlet,Servlet接着调用底层的业务层,最终服务器根据用户请求返回用户查询的结果。
系统基本要实现用户注册、用户登录、修改资料、下达订单、网上结算、搜索等功能。本系统使用方便,用户只需输入网址即可进入系统主界面浏览所有商品,注册方便快捷,对使用者来说无需精通计算机知识易可操作。项目的维护者需具备JSP知识和Java基础等知识,以备在扩充和删减网站功能。
对功能的规定:
商品检索:查询数据库(商品返回用户输入文本字段表)
商品基本信息
购买商品:添加购物车(商返回用户点击购买商品品)
商品信息(含件数)
2.2开发目标
此系统采用MVC架构模式,将业务层和逻辑层进行了分离,便于日后的修改与维护,维护人员只需修改部分业务即可,而且不会对系统其他功能产生影响。
用户查询商品时输入必须输入字符串否则查询不到相关商品。
输出信息:用户注册时如果输入的内容不匹配,将会出现红色颜色的字体提示。环境方面,系统分辨率最好为1024*768,浏览器为IE最佳。数据库编码应为UTF-8。故障处理:主要可能是tomcat配置问。导致结果:无法运行,系统提示错误。软件方面故障:根据实际的页面业务进行判断。导致结果:页面出错,功能不完善或错乱等。网站流程设计:
展示所有商品:Bookindex1.jsp通过点击商品进入→购物车:shoping.jsp
若购买商品需进行登录,若是不是会员需→进入注册页面:register.jspregister.jsp→然后进入登录页面:login.jsp→我的账户:userInfo.jsp→可以上传头像UploadImage.jsp以及进入留言页面liuyan.jsp以及后台管理页面bkLogin.jsp,添加书页面bkAdd.jsp,后台书本信息bkShowBookInfo.jsp以及查看日志功能.
3第二章概要设计
3.1项目主体模块
用户否是否是管理员是管理书籍和用户可购买享受折扣书进库和增删改购买存入购物车用户的注册考核账户付款存入数据库存入
3.1.1对性能的规定
a.灵活性方面,此系统采用MVC架构模式,将业务层和逻辑层进行了分离,便于日后的修改与维护,维护人员只需修改部分业务即可,而且不会对系统其他功能产生影响。b.环境方面,系统分辨率最好为1024*768,浏览器为IE最佳。数据库编码应为UTF-8。3.1.2输人输出要求
用户查询商品时输入相关信息否则检索不到相关商品。
输出信息:用户注册时如果输入的内容不匹配,将会出现红色颜色的字体提示。3.1.3数据管理能力要求
需管理的数据表:书表:book;用户表:user;用户消费信息表:userRecord表;用户账户表:userAccount;库存表:stack;
其中表中各项数据的长度一般为30.可随实际情况进行修改。若含有URL大小一般定为100.(也可根据实际情况进行长度修改)。3.1.4故障处理要求
环境方面故障:主要可能是tomcat配置问。导致结果:无法运行,系统提示错误。软件方面故障:根据实际的页面业务进行判断。导致结果:页面出错,功能不完善或错乱等。
3.1.5其他专门要求
对于用户需安全保密方面的信息采用MD5加密。3.2运行环境3.2.1设备
屏幕分辨率:最佳分辨率为1024*768;3.2.2支持软件
支持Windows、Linux等系统使用。3.2.3接口服务器接口:8088数据通信协议:Http3.3接口设计3.3.1内部接口
展示所有商品:Bookindex1.jsp通过点击商品进入→购物车:shoping.jsp
若购买商品需进行登录,若是不是会员需→进入注册页面:register.jspregister.jsp→然后进入登录页面:login.jsp→我的账户:userInfo.jsp→可以上传头像UploadImage.jsp以及进入留言页面liuyan.jsp以及后台管理页面bkLogin.jsp,添加书页面bkAdd.jsp,后台书本信息bkShowBookInfo.jsp以及查看日志功能.
3.4运行设计
3.4.1运行模块组合:用户注册
实现功能:本页面要实现用户注册信息的功能,并在客户端进行用户提交的基本信息的验证,验证成功后再提交到数据库进行验证。
所需用到知识:jQuery表单验证、验证码的使用、图片代替提交按钮、层的布局与使用,数据库连接池。用户登录
实现功能:主要实现用户登录的功能。只需进行简单的数据验证即可提交服务器,然后根据用户提交的信息查询数据库,如果与数据库里的信息一致方可成功登录系统。所需用到知识:jQuery表单验证、图片代替提交按钮、层的布局与使用,数据库连接池。个人信息管理
实现功能:管理用户使用本站的详细信息。包括用户注册相关信息等。所用到知识:Servlet和JSP动态显示用户登录信息,数据库增删改查功能。我的购物车
实现功能:动态显示用户的购物信息,统计用户所购的商品信息。
所用到知识:Servlet和JSP动态显示用户登录信息,数据库增删改查功能。个人资料管理
实现功能:供用户修改个人详细信息。
所用到知识:表单的详细使用,数据库连接池与数据库更新功能。商品详细信息页面
实现功能:此页面主要显示用户欲购买的商品的详细信息。所用知识:Servlet和JSP动态显示用户登录信息,数据库查询。3.5系统数据结构设计3.5.1逻辑结构设计要点数据库名:WBS标示符:书表:book;用户表:user;
用户账户表:userAccount;留言表:liuyan;库存表:stack;管理员表:super;3.5.2物理结构设计要点
通过MD5加密方法实现用户信息的保密,并存储于数据库内。3.6系统出错处理设计3.6.1出错信息a.404请求错误。b.505相应错误。
4第三章数据库设计
4.1数据库表
本项目采用mysql数据库。数据表如下:4.1图书表
书表(book)字段名idBookNameBookAuthorBookPriceBookImageURLBookLibraryIdBookPublishBookRebateBookFileBookPagesBookTotalBookCodeBookEdition字段类型intvarcharvarcharfloat(10,2)varcharintcharfloat(10)charintintcharchar字段长度3030100301003030是否为空非是否为主键是否否否否否否否否否否否否否BookPublishTimedate
4.2用户表
用户表(user)字段名idusernamepasswordemailuserPicture字段类型intvarcharvarcharvarcharvarchar字段长度303030100是否为空是否为主键是否否否否
4.3书类表
书类表(BookLibrary)字段名Id字段类型int字段长度30
是否为空非是否为主键是否BookLibraryNamevarchar4.4用户账户表
用户账户表(UserAccount)字段名iduserNameBalance类型intvarchar长度30是否为空非主键是否否外键float(10,2)4.5用户消费表
用户消费表(ConsumRecord)字段名iduserId
ConsumTimeBuyBookName类型intIntdatevarchar长度30是否为空非主键是外键
4.6留言表
留言表(messages)
字段名iduserIdMessage
类型intintvarchar
长度6300
是否为空非
主键是否否
外键
4.7留言回复表replymessage
4.8管理员表super
5第四章详细设计
5.1开发规范
5.1.1定义
a.包命名方法:com.jingdong.#;
(#:biz,bocodechange,controller,bo,db,fileter,listener,md5,upload,Upload.util,vo等各类包。)
b.Jsp页面位置:所以jsp页面均存在WEBROOT目录下,后台页面放置在WEBROOT目录下的background目录中;
c.统一WebRoot各个jsp页面均引用相对应的文件夹的资源图片资源统一在一个文件夹内d.在WebRoot/WEB-INF/lib下存放需要的jar文件。commons-collections-3.2.1.jar,commons-fileupload-1.2.2.jar,commons-io-2.0.1.jar,commons-logging-1.1.1.jar,cos.jar,FileUpload.jar,filters-2.0.235.jar,jcaptcha-api-1.0.jar,
jcaptcha-2.0-alpha-1-SNAPSHOT.jar,
jcaptcha-integration-simple-servlet-2.0-alpha-1-SNAPSHOT.jar,kaptcha-2.3.2.jar,mysql.jar;
*注:1所有JSP页面的样式设计要与JSP页面分离2JavaScript脚本与页面分离
3顶部和尾部页面只需调用即可,无需设计。(注:保持每个页面顶部与底部的一致性)
4将自己用到的文件存在WEBROOT下的IMAGES包里,便于日后整合。5页面名字以及包名要统一为上面的,便于链接调用以及减少后期修改时间。
6如需新增页面或者jar文件、js或css等。可以根据实际情况增加,但是务必放于指定的位置下。
7其他需要的内容自己先定义,然后再与小组其他人员讨论。
5.2程序设计说明
5.2.1程序页面描述JSP页面设计
注册页面:register.jsp用户登录页面:login.jsp管理员登陆页面:bkLogin.jsp首页:Bookindex1.jsp展示所有商品:Bookindex1.jsp分类页面:Bookclass.jsp高级查询页面:ComplexQuery.jsp错误页面:fail.jsp留言页面:liuyan.jsp
商品详细信息页面:product.jsp上传图像页面:UploadImage.jsp账户信息:userInfo.jsp
管理员添加书籍页面:bkAdd.jsp查看系统运行日志页面:looklog.jsp
5.2.2程序业务描述
a.数据库连接池:DBManager(已经建立统一的链接池,可以直接调用);
b.数据库:数据库名:WBS;书表:book;用户表:user;用户消费记录表:userRecord表;库存表:stack表;用户账户表:userAccount表;
c.前期业务:主要实现注册、登录、注销、修改密码、验证码业务、订单的提交并着手开始建立购物车业务。
中期业务:提取已提交的订单信息、所有商品的分类、购物车的完善、个人资料提交、以及搜索功能的完善、上传业务。
后期业务:添加购物车到商品页面、并完成其分页业务、MD5加密业务、监听和过滤业务、
后台管理业务等。(并可以根据自己的想法提出建议再做增加)。
5.2.3功能商品检索:查询数据库(商品返回用户输入文本字段表)
商品基本信息购买商品:添加购物车(商返回用户点击购买品)商品信息(含件数)
此系统采用MVC架构模式,将业务层和逻辑层进行了分离,便于日后的修改与维护,维护人员只需修改部分业务即可,而且不会对系统其他功能产生影响。
5.2.4输人输出要求
用户查询商品时必须输入,否则查询不到相关商品。
输出信息:用户注册时如果输入的内容不匹配,将会出现红色颜色的。5.2.5接口服务器端口:8080。数据通信协议:Http。
数据库层:com.jingdong.db连接数据库可调用该层的类DBManagerJavabean层:com.jingdong.vo该层提供了User,等具体类Dao层:com.jingdong.dao提供了BaseDao,PublicDao等类
控制层:com.jingdong.controller可针对每一个功能创建相应的servlet业务层:com.jingdong.bo可创建具体的业务类5.2.6限制条件服务器端口:8080。数据通信协议:Http。
屏幕分辨率:最佳分辨率为1024*768;最佳浏览器:IE5.2.7测试计划
环境配置成功后,运行各个页面,所有按钮功能和数据库连接查询等功能皆能实现。
5.3主要代码设计说明
5.3.1数据库代码
设置数据库编码信息
setcharacter_set_database=utf8;setcharacter_set_server=utf8;
setcharacter_set_connection=utf8;setcharacter_set_client=utf8;setcharacter_set_results=utf8;
setcollation_connection=utf8_bin;setcollation_database=utf8_bin;setcollation_server=utf8_bin;dropdatabaseifexistsWBS;#如果商品数据库不存在就创建之createdatabaseifnotexistsWBS
characterset"utf8"collate"utf8_general_ci";
useWBS;
创建BookLibrary表
createtableBookLibrary(idintauto_increment,
BookLibraryNamevarchar(30),primarykey(id));
创建BookPublish表
createtableBookPublish(idintauto_increment,BookPublishNamevarchar(30),BookPublishAddressvarchar(60),BookPublishTellvarchar(30),BookPublishPersonvarchar(30),primarykey(id));
创建Book表BookRebate书本折扣BookCode条形码BookEdition版次createtableBook(idintauto_increment,BookNamevarchar(30),BookAuthorvarchar(30),BookPricefloat(10,2),BookImageURLvarchar(100),BookLibraryIdint,
BookPublishchar(30),BookPublishTimedate,
BookRebatefloat(10),BookFilechar(100),BookPagesint,BookTotalint,
BookCodechar(30),BookEditionchar(30),primarykey(id));
创建user表
createtableuser(idintauto_increment,
usernamevarchar(30)notnull,passwordvarchar(30)notnull,emailvarchar(30)notnull,userPicturevarchar(100),primarykey(id));
创建SellList表
createtableSellList(idintauto_increment,BookIdint,SellTimedate,BookAmountint,primarykey(id));
创建EnterBookList表EnterBookRebate进书折扣createtableEnterBookList(idintauto_increment,BookIdint,BookEnterdate,BookAmountint,
EnterBookRebatefloat(10),primarykey(id));
创建UserAccount表
createtableUserAccount(idintauto_increment,userNamevarchar(30),Balancefloat(10,2),primarykey(id));
创建ConsumRecord表
createtableConsumRecord(idintauto_increment,userIdint,
ConsumTimedate,
BuyBookNamevarchar(30),primarykey(id),
foreignkey(userId)referencesuser(id)ondeletecascadeonupdatecascade);
创建Message表
createtableMessage(idintauto_increment,MessageInfovarchar(100),primarykey(id));
创建Stack表Stack书库
createtableStack(idintauto_increment,BookLibraryIdint,BookIdint,
BookAmountint,primarykey(id),
foreignkey(BookLibraryId)referencesBookLibrary(id)ondeletecascadeonupdatecascade,
foreignkey(BookId)referencesBook(id)ondeletecascadeonupdatecascade);
BookList表书目录表createtableBookList(
idintprimarykeynotnullauto_increment,bookIdint,
list1char(60),list2char(60),list3char(60),list4char(60),list5char(60));管理员表
createtableSuper(
idintauto_increment,
usernamevarchar(30)notnull,passwordvarchar(100)notnull,emailvarchar(30)notnull,userPicturevarchar(100),primarykey(id));留言表
createtableLiuYan(
idintauto_increment,userIdintnotnull,
Messagevarchar(300)notnull,primarykey(id),
foreignkey(userId)referencesuser(id)ondeletecascadeonupdatecascade);回复留言表
createtablereplymessage(
idint(11)notnullauto_increment,contentvarchar(250)defaultnull,msgIdint(11)defaultnull,adminIdint(11)defaultnull,publishDatedatedefaultnull,primarykey(id));
5.3.2底层数据库连接代码
publicclassDBManager{//创建数据库连接类privatestaticDBManagerdbManager=null;privateDBManager(){}
//单例模式,单次只生成一个数据库连接对象
publicsynchronizedstaticDBManagergetInstance(){
if(dbManager==null){
dbManager=newDBManager();}
returndbManager;}
//通过数据连接池创建数据库连接
publicsynchronizedstaticConnectiongetConnection()throwsSQLException,NamingException{
return((DataSource)new
InitialContext().lookup("java:comp/env/jdbc/WBS")).getConnection();}
//关闭数据库连接方法
privatestaticvoidcloseConn(Connectionconn)throwsSQLException{
if(conn!=null){
conn.close();conn=null;}}
//关闭数据库传参方法
privatestaticvoidcloseStmt(PreparedStatementpstmt)throwsSQLException{
if(pstmt!=null){
pstmt.close();pstmt=null;}}
//关闭结果集方法
privatestaticvoidcloseRs(ResultSetrs)throwsSQLException{
if(rs!=null){
rs.close();rs=null;}}
//调用以上关闭方法,形成关闭总方法
publicstaticvoidclose(Connectionconn,PreparedStatementpstmt,ResultSetrs)throwsSQLException{
closeRs(rs);
closeStmt(pstmt);closeConn(conn);}}
5.3.3底层业务代码
A、图书展示主页以及购物车部分业务
publicclassShopCartBo{//添加日志
Loggerlog=Logger.getLogger("com.jingdong.controller.ShopCartBo.class");//统计商品表中商品的数量(即获取总的记录条数)
publicintgetWareTotalRows()throwsNamingException,SQLException{Stringsql="selectcount(*)astotalRowsfrombook";
Map[]count=newPublicDao().getRowsMap(sql,null);//获取所有商品数集合inttotalRows=0;
if(count!=null&&count.length>0){
totalRows=((Long)count[0].get("totalRows")).intValue();}
returntotalRows;//查询得到的总的记录数}
//分页查询/**
*startIndex当前页起始位置*currentPage当前页码
*pageSize每页显示的条目数**/
publicMap[]getWarePage(intcurrentPage,intpageSize)throwsNamingException,SQLException{
//mysql的分页查询一般使用limit即可
Stringsql="select*fromBooklimit?,?";
//计算下一数据页索引的开始位置(算法:下一页起始索引=(当前页-1)*每页显示记录数)
intstartIndex=(currentPage-1)*pageSize;ListparamList=newArrayList();
paramList.add(newInteger(startIndex));paramList.add(newInteger(pageSize));
returnnewPublicDao().getRowsMap(sql,paramList);//按startIndex与pageSize的预编译参数传递,查询分页页面信息}
//所有商品列表
publicMap[]queryWareList()throwsNamingException,SQLException{Stringsql="select*frombook";
returnnewPublicDao().getRowsMap(sql,null);}
//依据商品标识号查询出商品
publicMap[]queryAllThingById(intid,Stringsql)throwsSQLException,NamingException{
returnnewShoppingDao().queryWareList(id,sql);}
//依据商品标识号查询出商品
publicMap[]queryWareList(intcid)throwsNamingException,SQLException{Stringsql="select*frombookwhereid=?";ListparamList=newArrayList();paramList.add(newInteger(cid));
returnnewPublicDao().getRowsMap(sql,paramList);}
//判断欲添加商品在购物车中是否存在
privateBookItemisEquals(MapshoppingCart,Bookbook){BookItembookItem=null;
for(Integerkey:shoppingCart.keySet()){
bookItem=shoppingCart.get(key);//遍历查询判断商品项是否存在if(bookItem!=null){
if(bookItem.getBook().getId()==book.getId()){bookItem.setCount(bookItem.getCount()+1);subtotal(bookItem,book);//小计金额returnbookItem;}}}
returnnull;}
//判断数据库中是否有欲添加的商品
privateBookisEquals(Map[]map,intid){if(map!=null&&map.length>0){if(map[0]!=null){
Bookbook=newBook();
book.setId((Integer)map[0].get("id"));
book.setBookPrice((Float)map[0].get("BookPrice"));book.setBookName(map[0].get("BookName").toString());
returnbook;//判断数据库查询结果中商品是否存在,如果存在封装到VO中}}
returnnull;}
//小计金额
privatevoidsubtotal(BookItembookItem,Bookbook){
bookItem.setSubtotal(bookItem.getCount()*bookItem.getBook().getBookPrice());}
//向新产生的商品项中添加商品
privatevoidaddShoppingItem(BookItembookItem,Bookbook){bookItem.setBook(book);bookItem.setCount(1);
subtotal(bookItem,book);//小计金额}
//添加购物车
publicStringaddShoppingCar(HttpSessionsession,intid,HttpServletRequest
request)throwsNamingException,SQLException{Stringmessage="商品不存在";
MapshoppingCart=null;BookItembookItem=null;Bookbook=null;
Stringsql="select*frombookwhereid=?";Map[]map=queryAllThingById(id,sql);if(session!=null){
shoppingCart=(Map)session.getAttribute("shoppingcart");if(shoppingCart!=null&&shoppingCart.size()>0){book=isEquals(map,id);//数据库中商品信息if(book!=null){
bookItem=isEquals(shoppingCart,book);//购物车中商品项if(bookItem==null){
bookItem=newBookItem();
addShoppingItem(bookItem,book);
Useruser=(User)session.getAttribute("user");if(user==null||user.equals("")){
log.debug("向购物车中添加了"+bookItem.getCount()+"本的书");}else{
log.debug(user.getUsername()+"向购物车中添加了"+bookItem.getCount()+"本的书");}}}else{
//商品不存在
request.setAttribute("message",message);return"index.jsp";}}else{
//购物车不存在的情况,只需判断数据库中商品是否存在,然后再添加商品项
shoppingCart=newHashMap();bookItem=newBookItem();book=isEquals(map,id);if(book!=null){
addShoppingItem(bookItem,book);
Useruser=(User)session.getAttribute("user");if(user==null||user.equals("")){
log.debug("向购物车中添加了"+bookItem.getCount()+"本
的书");}else{
log.debug(user.getUsername()+"向购物车中添加了
"+bookItem.getCount()+"本的书");}
}else{
//商品不存在
request.setAttribute("message",message);return"index.jsp";}}
shoppingCart.put(book.getId(),bookItem);//将商品编号和商品项添加至购物车
session.setAttribute("shoppingcart",shoppingCart);getTotalPrice(session);}else{
//没有创建会话连接
message="不能够创建会话连接……";
request.setAttribute("message",message);return"fail.jsp";}
return"shoping.jsp";}
//统计总金额
publicvoidgetTotalPrice(HttpSessionsession){doublesum=0.0d;Map
shoppingCar=(Map)session.getAttribute("shoppingcart");if(shoppingCar!=null&&shoppingCar.size()>0){for(Integerkey:shoppingCar.keySet()){
sum+=(double)shoppingCar.get(key).getBook().getBookPrice()*(double)shoppingCar.get(key).getCount();}}
session.setAttribute("sum",sum);}}
B、图书展示主页以及购物车部分业务
publicclassShoppingBo{//验证用户名密码
publicUsercheckUser(Stringusername,Stringpassword)throwsSQLException,
NamingException{
Stringsql="select*fromuserwhereusername=?";ArrayListparamList=newArrayList();paramList.add(username);
Map[]userMap=newShoppingBo().queryAllThingInWhere(sql,paramList);if(userMap==null||userMap.length==0){
returnnull;}
if(userMap!=null||userMap.length>0){
Stringpwd=(String)userMap[0].get("password");Useruser=newUser();
user.setId((Integer)userMap[0].get("id"));user.setUsername(username);user.setPassword(pwd);
Stringemail=(String)userMap[0].get("email");
if(userMap[0].get("userPicture")!=null){
user.setUserPicture((String)userMap[0].get("userPicture"));}
user.setEmail(email);
returnuser;}
returnnull;}
//筛选管理员
publicSuperBocheckSuper(Stringusername,Stringpassword)throwsSQLException,NamingException{
Stringsql="selectpasswordfromSuperwhereusername=?";ArrayListparamList=newArrayList();paramList.add(username);
Map[]userMap=newShoppingBo().queryAllThingInWhere(sql,paramList);if(userMap==null||userMap.length==0){
returnnull;}
if(userMap!=null||userMap.length>0){
Stringpwd=(String)userMap[0].get("password");SuperBosup=newSuperBo();sup.setUsername(username);sup.setPassword(pwd);
if(userMap[0].get("userPicture")!=null){
sup.setUserPicture((String)userMap[0].get("userPicture"));}
returnsup;}
returnnull;}
//查看注册用户名和邮箱是否存在
publicbooleanisregisterUser(Stringusername,Stringemail)throwsSQLException,NamingException{
Stringsql="select*fromuserwhereusername=?oremail=?";ArrayListparamList=newArrayList();paramList.add(username);paramList.add(email);
Map[]userMap=newShoppingBo().queryAllThingInWhere(sql,paramList);if(userMap==null||userMap.length==0){
returnfalse;}
if(userMap!=null||userMap.length>0){
returntrue;}
returnfalse;}
//注册用户名密码
publicintregisterUser(Stringsql,ListparamList)throwsSQLException,NamingException{
returnnewShoppingDao().updateWareList(sql,paramList);}
//插入图书
publicintinertintoConsumRecord(Stringsql,ListparamList)throwsSQLException,NamingException{
returnnewShoppingDao().updateWareList(sql,paramList);
}
//插入用户账户
publicintiertintoUserAccount(Stringsql,ListparamList)throwsSQLException,NamingException{
returnnewShoppingDao().updateWareList(sql,paramList);}
//插入图像
publicintinertintoUser(Stringsql,ListparamList)throwsSQLException,NamingException{
returnnewShoppingDao().updateWareList(sql,paramList);}
//插入留言
publicintinertintoLiuYan(Stringsql,ListparamList)throwsSQLException,NamingException{
returnnewShoppingDao().updateWareList(sql,paramList);}
//用Id查询商品
publicMap[]queryAllThingById(intid,Stringsql)throwsSQLException,NamingException{
returnnewShoppingDao().queryWareList(id,sql);}
//直接查询商品
publicMap[]queryAllThing(Stringsql)throwsSQLException,NamingException{
returnnewShoppingDao().queryWareList(sql);}
//用where语句查询商品,参数放入到ArrayList中
publicMap[]queryAllThingInWhere(Stringsql,ListparamList)throwsSQLException,NamingException{
returnnewShoppingDao().queryWareList(sql,paramList);}
//用id查询书
publicMap[]queryBookList(intcid)throwsSQLException,NamingException{
returnnewShoppingCartDao().queryBookList(cid);}
//查看书项中是否有已选书籍
privateBookItemisEquals(MapshoppingCart,Bookbook){
BookItembookItem=null;
for(Integerkey:shoppingCart.keySet()){
bookItem=shoppingCart.get(key);if(bookItem!=null){
if(bookItem.getBook().getId()==book.getId()){
bookItem.setCount(bookItem.getCount()+1);subtotal(bookItem,book);returnbookItem;}}}
returnnull;}
//小计
privatevoidsubtotal(BookItembookItem,Bookbook){
bookItem.setSubtotal(bookItem.getCount()*bookItem.getBook().getBookPrice());}
//添加书
privatevoidaddShoppingItem(BookItembookItem,Bookbook){
bookItem.setBook(book);bookItem.setCount(1);subtotal(bookItem,book);}
//向书中添加数据
privateBookisEquals(Map[]map,intid){
if(map!=null&&map.length>0){
if(map[0]!=null){
Bookbook=newBook();
book.setId((Integer)map[0].get("id"));
book.setBookImageURL((String)map[0].get("BookImageURL"));book.setBookLibraryId((Integer)map[0].get("BookLibraryId"));
book.setBookPublish((String)map[0].get("BookPublish"));book.setBookName((String)map[0].get("BookName"));book.setBookAuthor((String)map[0].get("BookAuthor"));
book.setBookPublishTime((Date)map[0].get("BookPublishTime"));
book.setBookPrice((Float)map[0].get("BookPrice"));
book.setBookRebate((Float)map[0].get("BookRebate"));book.setBookFile((String)map[0].get("BookFile"));book.setBookPages((Integer)map[0].get("BookPages"));book.setBookTotal((Integer)map[0].get("BookTotal"));book.setBookCode((String)map[0].get("BookCode"));
book.setBookEdition((String)map[0].get("BookEdition"));
returnbook;}}
returnnull;}
//添加购物车
publicStringaddShoppingCar(HttpSessionsession,intid,HttpServletRequestrequest)throwsSQLException,NamingException{
Stringmessage="商品不存在";
MapshoppingCart=null;BookItembookItem=null;Bookbook=null;
Map[]map=queryBookList(id);if(session!=null){
shoppingCart=(Map)session.getAttribute("shoppingcart");
if(shoppingCart!=null&&shoppingCart.size()>0){
book=isEquals(map,id);if(book!=null){
bookItem=isEquals(shoppingCart,book);if(bookItem==null){
bookItem=newBookItem();
addShoppingItem(bookItem,book);
}}else{
request.setAttribute("message",message);return"fail.jsp";}}else{
shoppingCart=newHashMap();bookItem=newBookItem();book=isEquals(map,id);if(book!=null){
addShoppingItem(bookItem,book);}else{
request.setAttribute("message",message);return"fail.jsp";}}
shoppingCart.put(book.getId(),bookItem);
session.setAttribute("shoppingcart",shoppingCart);getTotalPrice(session);}else{
message="不能够创建会话连接……";
request.setAttribute("message",message);return"fail.jsp";}
return"shoppingcartpage/shoppingcart.jsp";}
//返回商品总价
publicvoidgetTotalPrice(HttpSessionsession){
doublesum=0.0d;
Map
shoppingCar=(Map)session.getAttribute("shoppingcart");if(shoppingCar!=null&&shoppingCar.size()>0){
for(Integerkey:shoppingCar.keySet()){
sum+=shoppingCar.get(key).getBook().getBookPrice()*shoppingCar.get(key).getCount();
}
}}session.setAttribute("sum",sum);}
5.3.4底层数据层代码
//javabean封装数据库读取数据。
publicclassBookimplementsSerializable{
privateintid;
privateStringbookImageURL;privateStringbookName;privateintbookLibraryId;privateStringbookPublish;privateStringbookAuthor;privateDatebookPublishTime;privatefloatbookPrice;privatefloatbookRebate;privateStringbookFile;privateintbookPages;privateintbookTotal;privateStringbookCode;privateStringbookEdition;publicintgetId(){returnid;}
publicvoidsetId(intid){this.id=id;}
publicStringgetBookImageURL(){returnbookImageURL;}
publicvoidsetBookImageURL(StringbookImageURL){this.bookImageURL=bookImageURL;}
publicStringgetBookName(){returnbookName;}
publicvoidsetBookName(StringbookName){this.bookName=bookName;}
publicintgetBookLibraryId(){returnbookLibraryId;}
publicvoidsetBookLibraryId(intbookLibraryId){
this.bookLibraryId=bookLibraryId;}
publicStringgetBookPublish(){returnbookPublish;}
publicvoidsetBookPublish(StringbookPublish){this.bookPublish=bookPublish;}
publicStringgetBookAuthor(){returnbookAuthor;}
publicvoidsetBookAuthor(StringbookAuthor){this.bookAuthor=bookAuthor;}
publicDategetBookPublishTime(){returnbookPublishTime;}
publicvoidsetBookPublishTime(DatebookPublishTime){this.bookPublishTime=bookPublishTime;}
publicfloatgetBookPrice(){returnbookPrice;}
publicvoidsetBookPrice(floatbookPrice){this.bookPrice=bookPrice;}
publicfloatgetBookRebate(){returnbookRebate;}
publicvoidsetBookRebate(floatbookRebate){this.bookRebate=bookRebate;}
publicStringgetBookFile(){returnbookFile;}
publicvoidsetBookFile(StringbookFile){this.bookFile=bookFile;}
publicintgetBookPages(){returnbookPages;}
publicvoidsetBookPages(intbookPages){this.bookPages=bookPages;}
publicintgetBookTotal(){
}
returnbookTotal;}
publicvoidsetBookTotal(intbookTotal){this.bookTotal=bookTotal;}
publicStringgetBookCode(){returnbookCode;}
publicvoidsetBookCode(StringbookCode){this.bookCode=bookCode;}
publicStringgetBookEdition(){returnbookEdition;}
publicvoidsetBookEdition(StringbookEdition){this.bookEdition=bookEdition;}
5.3.5底层业务代码
由于项目代码繁多,请参见附录A源代码。
5.4程序设计说明
5.4.1登录页面,如图1-1-1
图1-1-1
5.4.2用户注册,如图1-1-2
图1-1-2
5.4.3留言页面,如图1-1-3
图1-1-3
5.4.4购物车,如图1-1-4
图1-1-4
5.4.5普通搜索,如图1-1-5
图1-1-5
5.4.6高级搜索,如图1-1-6
图1-1-6
5.4.7图书信息,如图1-1-7
图1-1-7
5.4.8头像上传,如图1-1-8
图1-1-8
5.4.9账户信息,如图1-1-9
图1-1-9
5.4.10管理员登录,如图1-2-1
图1-2-1
5.4.11管理员主界面,如图1-2-2
图1-2-2
5.4.12运行日志,如图1-2-3
图1-2-3
5.4.13管理员图书列表,如图1-2-4
图1-2-4
5.4.14管理员添加图书,如图1-2-5
图1-2-5
5.4.15管理员留言列表,如图1-2-6
图1-2-6
5.4.16管理员退出系统,如图1-2-7
图1-2-7
结论
系统设计选用的开发软件是myeclipse,后台数据库为Mysql。网络书店目标是基于先进的页面处理和JSP技术。网络书店系统设计不仅要考虑书店目标的实现,而且更要关心实现的过程以及用户在这个浏览的过程中获得信息以及在消费中的安全问题。针对Web网络书店的特点,从用户的实际需求出发,设计和规划出一套适用的基于Web的网络书店系统,解决使用时的不便和安全隐患,将图书销售信息更清晰化,更便捷化。通过直观的网站布局,让用户在获取消费信息和资源的前提下,拥有更简单的操作来实现繁杂的消费流程。
致谢
首先,在我撰写这篇毕业论文时,我要感谢学校给我的良好教育,使我掌握很多知识。然后我要感谢众多老师对我的大力支持,没有老师的帮助我不可能完成这个项目。总之,千言万语一句话,谢谢!
参考文献
[1](美)韦斯.《数据结构与算法分析》.出版社:机械工业201*.[2]李军.《高性能MySQL》.出版社:电子工业201*第二版.
[3](英)福塔.《MySQL必知必会》.出版社:人民邮电201*(9).[4]王志刚.《MySQL高效编程》.出版社:人民邮电201*.
[5]邓芳伟.《基于处理分布的C/S计算模式的研究》.计算机工程与科学,1999.[6]罗娜,林和平,袁福宇.《面向对象软件测试的方法研究[J]》.东北师大学报(自然科学版),201*.
[7]田苗苗.《基于面向对象技术的软件开发方法[J]》.吉林师范大学学报(自然科学版),201*.
[8]Y.DanielLiang著李娜译.《java语言程序设计基础篇(第8版)》.北京:机械工业出版社,201*.
[9]PaulDuBois.《MySQLCookbook》,出版社:O’ReillyMedia201*.
[10]半场方人著,孔令峰译.《javaScript&DynamicHTML语法辞典》.出版社:中国青年出版社201*.
[11]王新著,《SQL语法与范例详解词典》.出版社:机械工业,201*.[12](美)埃克尔.《java编程思想》.出版社:机械工业201*.
[13]袁然,郑自国,来为国,《java案例开发集锦(第二版)》,电子工业出版社,201*年.
附录A
友情提示:本文中关于《网上书店系统总结报告》给出的范例仅供您参考拓展思维使用,网上书店系统总结报告:该篇文章建议您自主创作。
来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。