一、需求说明1.任务概述1.1目标当今社会,随着计算机的应用和Internet的普及, Internet网络给人类社会带来了巨大变化,网络在我们的生活中几乎无处不在。
因此,建立网上电子书店的销售管理系统是时代的潮流。
由于JSP可以在85%以上的服务器上运行,而且JSP技术的应用程序比ASP的应用程序易于维护和管理。
所以,通过采用JSP技术设计开发在线书店系统符合时代的潮流、具有积极的进步意义。
本人基于这样的实际需求,结合教学需要设计开发了基于JSP的网上书店销售管理系统。
网上书店系统可以实现人们远程逛逛书店和购买图书的愿望。
本系统主的功能是实现网上购书。
基本功能包括用户注册、会员登录、图书查询、新书介绍、网上购书以及后台管理等。
1.2用户特点用户须具备一定的计算机知识、网络知识。
懂得如何操作电脑,了解Java 2EE,会配置SQL server数据库,会添加数据源。
1.3定义JSP技术:JSP(Java Server Pages)技术是由Sun公司发布的用于开发动态Web应用的一项技术。
它以其简单易学、跨平台的特性,在众多动态Web应用程序设计语言中异军突起,在短短几年中已经形成了一套完整的规范,并广泛地应用于电子商务等各个领域中。
在国内,JSP现在也得到了比较广泛的重视,得到了很好的发展,越来越多的动态网站开始采用JSP 技术。
本章就对JSP及其相关技术进行简单的介绍。
JavaServer PagesTM (jsp(SUN企业级应用的首选))技术为创建显示动态生成内容的Web页面提供了一个简捷而快速的方法。
jsp(SUN 企业级应用的首选)技术的设计目的是使得构造基于Web的应用程序更加容易和快捷,而这些应用程序能够与各种Web服务器,应用服务器,浏览器和开发工具共同工作。
SQL server:SQL Server 2000 是Microsoft 公司推出的SQL Server 数据库管理系统的最新版本该版本继承了SQL Server 7.0 版本的优点同时又比它增加了许多更先进的功能具有使用方便可伸缩性好与相关软件集成程度高等优点可跨越从运行Microsoft Windows 98 的膝上型电脑到运行Microsoft Windows 2000 的大型多处理器的服务器等多种平台使用。
SQL Server 2000界面友好,易学易用且功能强大,与Windows 2000操作系统完美结合,可以构造网络环境数据库甚至分布式数据库,可以满足企业及Intemet等大型数据库应用。
Java Bean:JavaBean是描述Java的软件组件模型,有点类似于Microsoft的COM组件概念。
在Java模型中,通过JavaBean可以无限扩充Java程序的功能,通过JavaBean的组合可以快速的生成新的应用程序。
对于程序员来说,最好的一点就是JavaBean可以实现代码的重复利用,另外对于程序的易维护性等等也有很重大的意义。
比如说一个购物车程序,要实现购物车中添加一件商品这样的功能,就可以写一个购物车操作的JavaBean,建立一个public 的AddItem成员方法,前台Jsp文件里面直接调用这个方法来实现。
如果后来又考虑添加商品的时候需要判断库存是否有货物,没有货物不得购买,在这个时候我们就可以直接修改JavaBean的AddItem方法,加入处理语句来实现,这样就完全不用修改前台jsp程序了。
JavaScript:JavaScript是用于浏览器的第一种具有通用目的、动态的客户端脚本语言。
Netscape于1995年首先提出了JavaScript,但当时将其称为LiveScript。
后来Netscape 迅速地将LiveScript改名为JavaScript,Java的开发商Sun与他们在同一年发表了一项声明。
声明中指出Java和JavaScript将互相补充,但它们是截然不同的技术,这样才打消了很多人对这两项技术的错误理解。
JavaScript为创建用户界面控件提供了一种脚本语言。
事实上,JavaScript在浏览器中插入了代码逻辑。
它可以支持这样的效果:当光标在Web页的某个位置移动时验证用户输入或者变换图像。
Microsoft也编写出了自己的JavaScript版本并将其称为JScript。
Microsoft和Netscape都支持一种围绕JavaScript和JScript的核心特性并由(European Computer Manufacturers Association,ECMA)标准组织控制的脚本语言标准。
ECMA将其脚本语言命名为ECMAScript。
2.数据描述参与系统的实体有:管理员、顾客、图书、银行卡。
(1):管理员和顾客有以下属性:用户名、帐号、密码(2):图书有以下属性:书名、作者、出版社、价格、类型、简介(3)银行卡有以下属性:卡号、密码、姓名(4)订单表用户名、购买书名、数量实体关系图为:管理员管理E-R图银行卡-顾客-图书E-R图2.3数据库介绍本项目使用的数据库SQL Server 2000,它是一个关系数据库管理系统,是Microsoft 公司推出的SQL Server 数据库管理系统的最新版本该版本继承了SQL Server 7.0 版本的优点同时又比它增加了许多更先进的功能具有使用方便可伸缩性好与相关软件集成程度高等优点可跨越从运行Microsoft Windows 98 的膝上型电脑到运行Microsoft Windows 2000 的大型多处理器的服务器等多种平台使用。
数据库设计:本数据库一共包含四个表(书目表、用户信息表、银行卡、订单表)。
书目表:包含书名、作者、出版社、价格类型、本书简介。
用户信息表:包含用户名、密码。
银行卡表:包含卡号、密码、姓名。
订单表:包含用户名、购买书名、数量。
3.功能需求总体结构3.1功能划分总体数据流图:4.性能需求4.1数据精确度注册时,输入用户名后,输入密码,再次确认密码,点击“注册”,如果用户名已经存在则不能注册,反之注册成为会员,输出注册失败或者注册成功。
登录时,输入用户名和密码,经过验证,如果正确则成功登录。
查找书籍时,输入书名,查找数据库后输出书籍的信息。
在购书时,所购买书的数量必须大于零,小于这本书的总量,点击“确定”后,输出购书订单。
付款时,钱数精确到分即小数点后两位,经过审核,输出交易成功。
4.2 适应性JavaBeans 通过提供符合一致性设计模式的公共方法将内部域暴露称为属性。
众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制发现和操作这些JavaBean 属性。
用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet 程序或者应用来使用这些对象。
用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。
当操作方式发生变化时,一些功能同样能够实现。
因为在实现各项功能时,把功能划分成了模块,各模块之间互不干扰,而且Java Bean都采用类的形式,每个功能都封装成一个类。
运行环境发生变化时,对程序会有一些影响,但打上补丁就可以继续运行了。
总体上讲,本系统具有一定的自适应性。
5.运行需求5.1用户界面用户主界面:搜索查询书籍界面:会员登录界面顾客注册界面:管理员登录界面:购书界面:购书之后显示的订单信息:5.2硬件接口本系统可在一般的windows X86操作系统上运行,也可在Linx上运行。
但需要安装Java Bean,并且要安装SQL server数据库,才能运行程序。
在进行登录、查询时,如果数据库不是SQL server 2005 还需要添加驱动器—三个Jar文件。
数据库附加好了,就可运行。
5.3软件接口系统包括网上购书、书籍查询、会员登录、用户注册、查看订单、后台管理这些模块之间的接口。
各个模块之间有自成一个小的程序,功能封装成了类,使用对象调用。
类中成员函数的参数是传递值的接口。
5.4故障处理当系统遇到问题时,首先查看运行环境是否更该;如更改,只需修复运行环境即可,若未更改,查看系统中各功能模块之间的接口是否有问题,可通过调试改正错误。
数据库最严重的问题莫过于数据库损坏,那么当数据库损坏时,最好的办法是从备份恢复数据库。
由于存储问题导致部分数据文件损坏,但是数据库还可以连接,这种情况可以采用导出数据库的表结果和数据的方法来恢复数据库。
当然对损坏的表,导出是无法完成的,这是可以使用db2dart的导出数据功能来导出这些损坏的表的数据。
解决数据库的性能问题,可以从以下方面入手,检查数据库的配置,如缓冲池,排序堆等是否合理;检查数据库是否收集过统计信息,准确的统计信息对语句优化起着重要的左右;对sql语句进行优化;查看是否有系统资源瓶颈。
6.其它需求Java Bean是java类,属于某些特定的译码知道方针,并且扩展了适应性和范围,允许用户访问内部的属性和方法。
在IDE中,JavaBean的功能允许应用开发者浏览其中的方法,即使JavaBean是被编译的,并且无法利用原始的源文件。
在安装了Java Bean和SQL server 数据库时可运行该程序。
本系统不仅能运行在windows X86上,还能在Linx上运行,具有可移植性。
程序较安全,高级管理员要保密,不对其他人泄露登录密码。
程序在开发时,结构是可扩展的,后期可扩展功能。
二、主要程序清单(关键代码)//////////////////书籍信息类public class Book {String bookName;String bookAuthor;String publisher;String bookPrice;String bookType;String bookInfo;int quantity;public DBLink link=new DBLink();public Book(String name){Connection conn=link.Linkdb();ResultSet res = null;String SQL="SELECT * FROM BookSys WHERE BookName ='" +name+"'";try{Statement sm = conn.createStatement();res = sm.executeQuery(SQL);res.next();bookName=res.getString("BookName");System.out.println(bookName);bookAuthor=res.getString("BookAuthor");System.out.println(bookAuthor);bookPrice=res.getString("BookPrice");System.out.println(bookPrice);quantity=1;res.close();}catch (SQLException sqlE){sqlE.printStackTrace();}}}///////////////////////连接数据库的类import java.sql.*;public class DBLink {public Connection Linkdb( ){Connection connection = null;String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=news";try{Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");}catch(Exception e){e.printStackTrace();}try{connection = DriverManager.getConnection(url, "sa", "");}catch(Exception e){e.printStackTrace();}return connection;}public void Close(Connection conn){try{conn.close();}catch(Exception e){e.printStackTrace();return;}}}///////////////////////显示主界面 index.jsp<%@page contentType="text/html" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>网上书店管理系统</title><style type="text/css">.STYLE1{font-size: x-large;font-weight: bold;}body{background-image: url(image/6.jpg);}</style></head><body ><td height="630" colspan="3" class="logo" nowrap="nowrap"><div align="center"><p class="logo"><h1>欢迎光临c书店管理系统</h1></p></div></td>   <a href="javascript:;">首页</a>   <ahref="BuyBook.jsp"><%@page contentType="text/html" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>网上书店管理系统</title><style type="text/css">.STYLE1{font-size: x-large;font-weight: bold;}body{background-image: url(image/6.jpg);}</style></head><body ><td height="630" colspan="3" class="logo" nowrap="nowrap"><div align="center"><p class="logo"><h1>欢迎光临网上书店管理系统</h1></p></div></td>   <a href="javascript:;">首页</a>   <ahref="BuyBook.jsp">网上购书</a> <a href="Select.jsp">书籍检索</a> <a href="Login.jsp">会员登陆</a> <a href="Enrol.jsp">注册</a> <a href="GuanLi.jsp">后台管理</a> <td width="7"> </td><label><input name="textfield" type="text" class="tagline" /></label><label><select name="select"><option>书名</option><option>书的作者</option><option>出版社</option><option>书的类型</option></select></label><label><input type="submit" name="Submit" value=" 搜索" /></label><br><hr><div align="left"><h1>热门图书</h1></div></body></html>//////////////////实现购物车<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>网上书店管理系统</title><style type="text/css">.STYLE1{font-size: x-large;font-weight: bold;}body{background-image: url(image/6.jpg);}</style></head><body ><td height="630" colspan="3" class="logo" nowrap="nowrap"><div align="center"><p class="logo"><h1>欢迎光临网上书店管理系统</h1></p></div></td><br>       <ahref="index.jsp;">返回首页/a>   <ahref="Check.jsp;">我的订单</a> <br><br><hr>     <ahref="javascript:;">文学类</a>   <table border="1" cellpadding="0" width="800" bgcolor="#ffffff"> <tr><td width="116"><div align="center"><b>书名</b></div></td><td width="116"><div align="center"><b>作者</b></div></td><td width="116"><div align="center"><b>出版社</b></div></td> <td width="116"><div align="center"><b>单价</b></div></td><td width="116"><div align="center"><b>是否购买</b></div></td> </tr><tr><td><div align="center"><%="天龙八部"%></div></td><td><div align="center"><%="金庸"%></div></td><td><div align="center"><%="广州出版社"%></div></td><td><div align="center"><%="30"%></div></td><td><div align="center"><input type="submit" name="Submit" value=" 购买 " /></div></td></tr><tr><td><div align="center"><%="匆匆那年"%></div></td><td><div align="center"><%="九夜茴"%></div></td><td><div align="center"><%="上海出版社"%></div></td><td><div align="center"><%="18"%></div></td><td><div align="center"><input type="submit" name="Submit" value=" 购买 " /></div></td></tr></table><br><hr>     <a href="javascript:;">理工类</a> <table border="1" cellpadding="0" width="800" bgcolor="#ffffff"><tr> <td width="116"><div align="center"><b>书名</b></div></td> <td width="116"><div align="center"><b>作者</b></div></td> <td width="116"><div align="center"><b>出版社</b></div></td> <td width="116"><div align="center"><b>单价</b></div></td> <td width="116"><div align="center"><b>是否购买</b></div></td></tr><tr><td><div align="center"><%="工科数学分析"%></div></td> <td><div align="center"><%="王宏"%></div></td><td><div align="center"><%="工业出版社"%></div></td><td><div align="center"><%="33"%></div></td><td><div align="center"><input type="submit" name="Submit" value=" 购买 " /></div></td></tr></table><br><hr><ahref="javascript:;">计算机类</a> <table border="1" cellpadding="0" width="800" bgcolor="#ffffff"><tr> <td width="116"><div align="center"><b>书名</b></div></td> <td width="116"><div align="center"><b>作者</b></div></td><td width="116"><div align="center"><b>出版社</b></div></td> <td width="116"><div align="center"><b>单价(元)</b></div></td> <td width="116"><div align="center"><b>是否购买</b></div></td></tr> <tr><td><div align="center"><%="JSP程序设计"%></div></td><td><div align="center"><%="何雄"%></div></td><td><div align="center"><%="人民邮电出版社"%></div></td> <td><div align="center"><%="31"%></div></td><td><div align="center"><input type="submit" name="Submit" value=" 购买 " /></div></td></tr></table><br><hr></table><form action="RegestServlet" method="post"><%float ff=0;if(buylist==null){/////////////第一次使用购物车buylist = new Vector() ;buylist.addElememt(myBook);}else{///////////////////判断用户所选的书是否已在购物车for(int i=0;i<buylist.size();i++){Book bk=(Book) buylist.element(i);If(bk.getbookName()!==null)/////////////如果用户所选的书在购物车中,书的数量加1bk.setQuantity(bk.getQuantity()+myBook..getQuantity());}}%></form></body></html>///////////////////我的购物车<%@page contentType="text/html" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>我的购物车</title><style type="text/css">.STYLE1{font-size: x-large;font-weight: bold;}body{background-image: url(image/6.jpg);}</style></head><body><center><h1>欢迎查看购物车</h1><hr width="90%" size="1"><from action="modifycart.jsp" method="post"><table border="1" cellpadding="0" width="500" bgcolor="#ffffff"><tr> <td width="116"><div align="center"><b>书名</b></div></td><td width="116"><div align="center"><b>作者</b></div></td><td width="116"><div align="center"><b>单价</b></div></td><td width="116"><div align="center"><b>购买数量</b></div></td> </tr> <tr><td><div align="center"><%="天龙八部"%></div></td><td><div align="center"><%="金庸"%></div></td><td><div align="center"><%="30"%></div></td><td><div align="center"><%="1"%></div></td><td><div align="center"><input type="submit" name="Submit" value=" 删除" /></div></td></tr><tr><td><div align="center"><%="匆匆那年"%></div></td><td><div align="center"><%="九夜茴"%></div></td><td><div align="center"><%="18"%></div></td><td><div align="center"><%="2"%></div></td><td><div align="center"><input type="submit" name="Submit" value=" 删除"/></div></td></tr><br><p align="center"><label>请选择付款方<input name="sname" type="text" /><select name="select"><option>现金支付</option><option>网上银行支付</option></select><input type="submit" name="Submit" value=" 确定" /></label></p><input type="button" value="更改订单" name="B2" onclick=""><input type="button" value="继续购买" name="B2" onclick=""><input type="button" value="清空购物车" name="B2" onclick=""><br><br></body></html>/////////////////对书籍执行的各种操作public class BookOperate {public DBLink link=new DBLink();public BookOperate(){ }public ResultSet SeachBook(String author,String name) throws SQLException{Connection conn=link.Linkdb();ResultSet res = null;String SQL="SELECT * FROM News WHERE Author ='" +author+"' AND Title ='" +name+"'";try{Statement sm = conn.createStatement();res = sm.executeQuery(SQL);}catch (SQLException sqlE){sqlE.printStackTrace();}finally{conn.close();}return res;}public ResultSet Seach(String str) throws SQLException{Connection conn=link.Linkdb();ResultSet res = null;String strSql="SELECT BookName FROM BKInfo WHERE BookAuthor ='"+str+"'"+"OR BookType ='"+str+"'"+"OR Publisher ='"+str+"'";try{Statement sm = conn.createStatement();res = sm.executeQuery(strSql);}catch (SQLException sqlE){sqlE.printStackTrace();}finally{conn.close();}return res;}/*** insert a row into News table.* @param fTitle FirstLevelTitle* @return int*/public ResultSet IntroBook(String bookName) throws SQLException{Connection conn=link.Linkdb();ResultSet res = null;PreparedStatement pStatement = null;String strSql="SELECT * FROM BKInfo WHERE BookName='"+bookName+" ' ";try{Statement sm = conn.createStatement();res = sm.executeQuery(strSql);}catch (SQLException sqlE){sqlE.printStackTrace();}finally{conn.close();}return res;}}三、阅读文献清单阅读资料文献表选用顺序编码制,按在实习中选看的先后顺序编号。