网上书店网站实验报告
1、项目说明
网上书店:顾名思义,网站式的书店。是一种高质量,更快捷,更方便的购书方式。网上书店不仅可用于图书的再线销售,也有音碟、影碟的在线销售。而且网站式的书店对图书的管理更加合理化,信息化。售书的同时还具有书籍类商品管理、购物车、订单管理、会员管理等功能,非常灵活的网站内容和文章管理功能。但网上书店的真实性是消费者的最大顾虑,这也是网上书店还不被大多数消费者所接受的原因之一。
在网上书店买书,可以查到所买图书的更多信息,因为网上书店是一个网站,它有它独特的售书方式和功能。如用户注册会员功能等,会员类型有:高级会员、金牌会员等。有的网上书店有会员积分设置,如达到一定积分时自动成为高级会员,高级会员会有优惠和特别的服务。还有就是支付方式了,一般网上书店都有三种类型的支付方式:汇款类支付、在线支付、其他支付方式,其中在线支付只要到支付平台开户后,将所获开户信息填入即可。当在网上书店购书后,用户所购图书都在网站上有记录,方便用户查询。
2、需求分析
网上书店和现实书店区别比较:
网上书店的优势:涉及范围广,经营成本低,劣势:信用度如果低,影响生意;
现实书店的优势:直观,信用度高。劣势:涉及范围有限,经营成本高;
现在有部分现实书店已经开始从网上书店进货了。本系统开发的目的是为
了学习这样去做一个交互式的网页以及了解这种强大的网络编程工具,方
便客户端和浏览器端之间的交流。
数据库采用实用,易学的SQL Sever 2000,以Tomcat作为JSP的WEB服务器,XP作为系统运行平台。
3、总体设计
(1) 实验目的:
1.利用本次机会来了解JSP一般的技术及使用模式,并能够使用这种技术,建立 一个简单的论坛网站。
2.通过本次学习,使自己巩固所学过的书本理论知识,加深对相关内容的理解。
(2) 实验要求:
要基本了解JSP编程技术,学会使用JSP开发一个小型网站的基本知识,巩固数据库基本理论,并用于开发一个小型的网站。
三技术简介
JavaServer Pages(JSP)是一种实现普通静态HTML和动态HTML混合编码的技术,许多由CGI程序生成的页面大部分仍旧是静态HTML,动态内容只在页面中有限的几个部分出现。但是包括Servlet在内的大多数CGI技术及其变种,总是通过程序生成整个页面。JSP使得我们可以分别创建这两个部分。
(3)系统设计特点:
网上书店具有:
(1)提供了全面,详细的图书购物入口,轻松实现快捷购买。
(2)可以通过不同分类进行导航,用最方便,最快捷的方式找到你需要的图书。
(3)提供了图书购物所需的各种工具与网站,满足你的图书购买需求。
(4)公正性很强 (大站.专站.小站)排列顺序分明.公平公正的图书网址TOP排行
4、数据库设计
本系统使用数据库引擎为HSQLDB。数据库文件SIMS(student information management system)。该系统表:
1 图书基本信息表(book)
2 图书分类基本信息表(bookcat)
3 客户基本信息表(storeuser)
4 订单信息表(orders)
5 订单条目详细信息表(orderdetails)
== 1 ===========================================
字段名 描述 类型
id 图书编号 int
catid 图书分类编号 int
name 图书名称 varchar
price 图书价格 int
saleprice 销售价格 int
descript 图书介绍 varchar
author 图书作者 varchar
contents 图书目录 varchar
image 图书封面图片存放路径 varchar
== 2 ===========================================
字段名 描述 类型
id 图书分类编号 int
catname 图书分类名称 varchar
== 3 ===========================================
字段名 描述 类型
username 用户名 varchar
password 密码 varchar
name 客户姓名 varchar
tel 客户电话 varchar
address 客户地址 varchar
email 客户电子邮件地址 varchar
== 4 ===========================================
字段名 描述 类型
id 订单编号 int
username 订单对应用户名 varchar
time 产生订单的时间 smalldatetime
delivery 订单对应送货方式 varchar
payment 订单对应付款方式 varchar
== 5 ===========================================
字段名 描述 类型
orderid 订单编号 int
bookid 图书编号 int
count 订购数量 int
price 该条目对应价格 int
建立数据库
1、
2、 数据库连接
package s2jsp.lg.dao.impl;
import java.sql.*;
public class BaseDao {
public final static String DRIVER = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; // 数据库驱动
public final static String URL = "jdbc:microsoft:sqlserver://localhost:1433;DataBaseName=bbs"; // url
public final static String DBNAME = ""; // 数据库用户名
public final static String DBPASS = "sa"; // 数据库密码
/**
* 得到数据库连接
* @throws ClassNotFoundException
* @throws SQLException
* @return 数据库连接
*/
public Connection getConn() throws ClassNotFoundException, SQLException{
Class.forName(DRIVER); //注册驱动
Connection conn = DriverManager.getConnection(URL,DBNAME,DBPASS); //获得数据库连接
return conn ; //返回连接
}
/**
* 释放资源
* @param conn 数据库连接
* @param pstmt PreparedStatement对象
* @param rs 结果集
*/
public void closeAll( Connection conn, PreparedStatement pstmt, ResultSet rs ) {
/* 如果rs不空,关闭rs */
if(rs != null){
try { rs.close();} catch (SQLException e) {e.printStackTrace();}
}
/* 如果pstmt不空,关闭pstmt */
if(pstmt != null){
try { pstmt.close();} catch (SQLException e) {e.printStackTrace();}
}
/* 如果conn不空,关闭conn */
if(conn != null){
try { conn.close();} catch (SQLException e) {e.printStackTrace();}
}
}
/**
* 执行SQL语句,可以进行增、删、改的操作,不能执行查询
* @param sql 预编译的 SQL 语句
* @param param 预编译的 SQL 语句中的‘?’参数的字符串数组
* @return 影响的条数
*/
public int executeSQL(String preparedSql,String[] param) {
Connection conn = null;
PreparedStatement pstmt = null;
int num = 0;
/* 处理SQL,执行SQL */
try {
conn = getConn(); // 得到数据库连接
pstmt = conn.prepareStatement(preparedSql); // 得到PreparedStatement对象
if( param != null ) {
for( int i = 0; i < param.length; i++ ) {
pstmt.setString(i+1, param[i]); // 为预编译sql设置参数
}
}
num = pstmt.executeUpdate(); // 执行SQL语句
} catch (ClassNotFoundException e) {
e.printStackTrace(); // 处理ClassNotFoundException异常
} catch (SQLException e) {
e.printStackTrace(); // 处理SQLException异常
} finally {
closeAll(conn,pstmt,null); // 释放资源
}
return num;
}
}
5.详细设计 (1) JSP概述
网上书店系统中把数据库的连接参数写在dbconn.properties文件中,再用一个Java类来生成一个数据库连接对象以供其他程序使用。 网上书店的首页显示的内容最多,但源代码并不长,原因是:一是因为一些多个页面共用的代码被放入另一个文本文件或JSP文件中,在需要的地方包含进来,减少了代码量,提高了代码的可复用程度;二是系统较好地进行了模块化的设计与开发,在JSP页面中很少用到Java代码,所有业务逻辑都用Java类来完成,JSP页面中只是简单的展现数据。JSP是Sun公司在Java和Servlet技术基础上推出的一种新型的服务器端动态脚本技术。它已经逐渐成为架设电子商务网站的主流技术。它的以下特点决定了本系统为什么采用JSP作为Web应用程序的开发工具。
⒈JSP将内容的生成和显示进行分离
2.JSP程序运行在服务端
3.高性能的编译运行机制
4.继承了Java的跨平台特性
5.可重用组件
6.可扩展标签库
7.强大的数据库支持
( 2 ) 封装的操作;
*/
public class bookTypeOPBean extends dbOpertaion{
public ArrayList bookTypeArray=new ArrayList();
public String bookTypeIdStr=new String("");
/**。
(3)构造函数,将所有书藉类型信息查询出来:
*/
public bookTypeOPBean() {
String sqlString="select * from book_type";
ResultSet rs=this.executeQuery(sqlString);
try{
int i=0;
while(rs.next()){
bookTypeBean bookType=new bookTypeBean();
bookType.setBookTypeId(rs.getInt("type_id"));
bookType.setBookTypeName(rs.getString("type_name"));
bookTypeArray.add(i,bookType);
i++;
}
} catch (SQLException e) {
e.printStackTrace();
bookTypeArray=null;
}
}
/**
(4) 通过书藉分类名称查找类型信息:
*/
public bookTypeBean selectBookTypeByName(String bookTypeName){
if(bookTypeName==null) return null;
bookTypeBean bookType=new bookTypeBean();
String sqlString="select * from book_type where type_name= '"+bookTypeName+"'";
ResultSet rs=this.executeQuery(sqlString);
try{
int i=0;
if(rs.next()){
bookType.setBookTypeId(rs.getInt("type_id"));
bookType.setBookTypeName(rs.getString("type_name"));
}
} catch (SQLException e) {
e.printStackTrace();
}
return bookType;
}
/**
(5) 根据属性bookTypeIdStr查找书藉类型信息:
*/
public bookTypeBean selectBookTypeId(){
int bookTypeId=0;
if(bookTypeIdStr!=null&&bookTypeIdStr.length()>1)
try{
bookTypeId=Integer.parseInt(bookTypeIdStr);
}catch (Exception e) {
e.printStackTrace();
}
if(bookTypeId==0) return null;
bookTypeBean bookType=new bookTypeBean();
String sqlString="select * from book_type where type_id="+bookTypeId;
ResultSet rs=this.executeQuery(sqlString);
try{
if(rs.next()){
bookType.setBookTypeId(rs.getInt("type_id"));
bookType.setBookTypeName(rs.getString("type_name"));
}
} catch (SQLException e) {
e.printStackTrace();
}
return bookType;
}
/**
(6) 更新书藉分类:
* @param bookTypeId:类型ID号
* @param bookTypeName:类型名称
* @return int:返回更新的行数
*/
public int updateBookType(int bookTypeId,String bookTypeName){
if(bookTypeId==0||bookTypeName==null||bookTypeName.length()<=0)
return 0;
//------构造SQL语句------
String sqlString="update book_type set type_name='"+bookTypeName +
"' where type_id="+bookTypeId;
//------执行SQL语句------
int i=this.executeUpdate(sqlString);
return i;
}
/**
(7)新增一个书藉类型:
*/
public int insertBookType(String bookTypeName){
int i=0;
//------构造SQL语句------
String sqlString="insert into book_type(type_name) values('"+bookTypeName+"')";
//------执行SQL语句------
i=this.executeUpdate(sqlString);
return i;
}
/**
(8)删除一个书藉类型:
* @param bookTypeId:要删除的类型ID号
* @return int:返回删除的类型个数
*/
public int deleteBookType(int bookTypeId){
int i=0;
//------构造SQL语句------
String sqlString="delete book_type where type_id="+bookTypeId;
//------执行SQL语句------
i=this.executeUpdate(sqlString);
return i;
}
public ArrayList getBookTypeArray() {
return bookTypeArray;
}
public void setBookTypeArray(ArrayList bookTypeArray) {
this.bookTypeArray = bookTypeArray;
}
public String getBookTypeIdStr() {
return bookTypeIdStr;
}
public void setBookTypeIdStr(String bookTypeIdStr) {
this.bookTypeIdStr = bookTypeIdStr;
}
}
(9)网上书店系统中所有的报错信息都保存在一个“.properties”文件中,文件内容如下:book.bookNameNull=书藉名没有输入!
book.typeIdNull=书藉所属类型没有选择!
book.priceNotFloat=价格不为数字!
book.priceRebateNotFloat=折扣输入不正确!
book.publishDateError=出版日期输入有误!
book.pageCountError=页数不为数字!
addbook.insertError=插入新书时出错!
updatebook.updateError=更新书藉信息时出错!
bookType.bookTypeHaved=书藉类型已存在!
bookType.insertError=插入新的书藉类型时出错!
booktype.updateError=更新书藉类型信息时出错!
user.userNameNull=用户名输入为空!
user.userPasswordNull=用户密码输入为空!
user.passwordNotEqual=两次输入的密码不一致!
user.insertError=插入新的用户时出错!
user.certCodeError=验证码不对!
user.userError=用户名或密码输入有误!
user.sessionError=用户会话已失效!
orderform.newError=生成新的订单时出错!
orderform.saveError=保存订单时出错!
(10):CREATE TABLE members (
member_id int auto_increment primary key,
member_login varchar(20) NOT NULL,
member_password varchar(20) NOT NULL,
member_level int NOT NULL DEFAULT 1,
first_name varchar(50) NOT NULL,
last_name varchar(50) NOT NULL,
email varchar(50) NOT NULL,
phone varchar(50) NULL,
address varchar(50) NULL,
notes text NULL,
card_type_id int NULL,
card_number varchar(50) NULL
);
(11):CREATE TABLE items (
item_id int auto_increment primary key,
category_id int NOT NULL,
name varchar(255) NOT NULL,
author varchar(100) NULL,
price float NOT NULL,
product_url varchar(255) NULL,
image_url varchar(100) NULL,
notes text NULL,
is_recommended tinyint NULL DEFAULT 0,
rating int default 0,
rating_count int default 0
);
6 用户手册:
(1) 本程序运行环境为JDK1.4.2,可在windows98/windows2000/windows XP下运行。
(2) 为了发布应用程序,我把本JAVA应用程序中涉及到的类文件压缩成一个JAR文件,名为StudentManager.jar,现在只要将StudentManager.jar文件拷贝到任何一个安装了JAVA运行环境(版本应为1.4.0及以上)的计算机上,双击鼠标就可以运行JAVA应用程序了。但如果计算机上安装了中文版的WinRAR解压缩软件并将该JAR文件与压缩软件做了关联,WinRAR解压缩软件会自动运行进行解压缩操作,使的JAVA程序无法运行。因此,创建了一个StudentManager.bat的批处理文件。所以,只要双击这个批处理文件就可以直接运行本程序了,省去了每次运行程序都要运行JDK软件的麻烦。
7.参考书籍
1.java面向对象程序设计 (清华大学出版社)
2. java课程设计 (清华大学出版社)
3. java信息系统设计与开发实例 (机械工业出版社)
8.心得体会:
通过这次课程设计我对JAVA面向对象的编程语言有了深刻的了解,对JAVA语言的简洁性和高效性有了自己进一步的体会,同时对JAVA的一些设计模式也有了一个大致的认识与了解,这门语言对于异常的控制非常有用,写出来的程序有更高的容错能力,系统稳定性也很好。
在整个程序的设计过程中,对软件编程的流程,包括需求分析、概要设计、详细设计等步骤又有了一个新的认识,尤其是需求分析的好坏在整个程序的设计中有着举足轻重的作用。需求分析没有做好,后面的步骤很容易受到负面的影响。
另外,在程序设计过程中,我们加强了团队的合作,了解了团队精神对于程序设计是至关重要的,这将会对我们以后的工作有很大的启发。
八.教师评语