数据库网上书店实验报告.docx
《数据库网上书店实验报告.docx》由会员分享,可在线阅读,更多相关《数据库网上书店实验报告.docx(29页珍藏版)》请在冰豆网上搜索。
数据库网上书店实验报告
数据库课程设计实验报告
网上书店
目录
1.引言··························································2
1.1实验目的··················································2
1.2问题描述·················································2
2.系统概述·····················································2
2.1功能简述·················································2
2.2性能需求·················································2
2.3数据库中的关系模型······································2
3.整体设计······················································3
4.软件环境和高级语言的使用··································3
5.详细设计······················································4
5.1数据库的建立··············································4
5.1.1建立客户账户信息的表······························4
5.1.2建立出版商的表····································4
5.1.3建立图书表·········································4
5.1.4建立用户登录的表··································4
5.1.5插入图书信息······································5
5.2功能实现的部分代码·······································5
6.系统测试·····················································17
7.实验总结·····················································20
1.引言
1.1实验目的
巩固复习曾经学习过的数据库课程,并通过实际的实验对所学的知识加以巩固以达到模拟现实生活中实际用例的目的。
1.2问题描述
设计一个网上书店系统,满足用户需求。
2.系统设计
2.1功能简述
网上书店主要分为前台浏览和后台管理两个部分。
前台浏览部分,主要由普通的顾客进行操作,主要功能有浏览图书、查看图书详细信息,添加购物车和结账。
后台管理部分的用户是系统管理员,主要功能包括图书的增、删、改、查。
网上书店功能结构图
2.2性能需求
网上书店应该能够提供友好的用户界面,使各类用户的工作量最大限度减少。
同时系统需要具有良好的运行效率,响应时间要尽可能短。
2.3数据库中的关系模型
数据库中的关系主要有图书(ISBN号,书名,版权,版本号,出版商,价格),订单信息(书籍名称,数量,价格,小计),客户账户信息(客户名,邮编,电话,信用卡号,购书总额)。
E-R图如下:
3.整体设计
进入网上书店系统,首先是登陆页面,输入正确的用户名和密码后进入首页。
这时,可以选择“浏览图书”或者“书架维护”。
“浏览图书”是普通顾客操作的页面,进入后会出现所有图书的信息。
点击图书的ISBN,可以进入每本图书的详细信息页面,之后可以选择“放入购物车”和“查看购物车”。
点击“放入购物车”之后,可以选择“继续购物”或者“结账”,点击“继续购物”则回到“浏览图书”的页面,点击“结账”则显示订单处理页面。
“书架维护”是管理人员操作的页面,点击进入后会出现所有图书的信息。
每本书后面有“删除”键,点击就删除对应图书。
页面下方有“添加图书”键,点击可以添加图书。
点击图书的ISBN可以进入每本书的详细信息页面,可以对图书的各信息进行修改。
4.软件环境和高级语言的使用
数据库是MIS中的重要支持技术,在MIS开发过程中,如何选择数据库管理是一个重要的问题,目前,数据库产品较多,每种产品都具有各自的特点和适用范围,因此,在选择数据库时,应考虑数据库应用的特点及适用范围,本系统所使用的后台数据库是MySQL_______________________________________________________________________________________________________________________________数据库。
本系统选用的开发语言介绍如下:
选择了Java开发工具MyElipse。
Java是第一个全面支持面向对象程序设计的数据库语言工具。
Java的主要特点有:
1、语言是简单的、小型的、结构中性的
2、强大的数据库开发功能
3、扩大了对SQL语言的支持
4、是面向对象的、高性能的、多线程的
5、是分布式的、面向网络
6、具有平台无关性
7、语言具有可移植性、是动态的
5.详细设计
5.1数据库的建立
5.1.1建立客户账户信息的表
CREATETABLE`bookorder`(
`orderId`int(11),
`username`varchar(20),
`zipcode`varchar(8),
`phone`varchar(20),
`creditcard`varchar(20),
`total`double,
PRIMARYKEY(`orderId`)
)
5.1.2建立出版商的表
CREATETABLE`publishers`(
`publisherID`int(11),
`publisherName`varchar(30),
PRIMARYKEY(`publisherID`)
)
5.1.3建立图书表
CREATETABLE`titles`(
`isbn`varchar(20),
`title`varchar(100),
`editionNumber`int(11),
`copyright`varchar(4),
`publisherID`int(11),
`imageFile`varchar(100),
`price`double,
`summary`varchar(200),
PRIMARYKEY(`isbn`)
)
5.1.4建立用户登录的表
CREATETABLE`titles`(
`isbn`varchar(20),
`title`varchar(100),
`editionNumber`int(11),
`copyright`varchar(4),
`publisherID`int(11),
`imageFile`varchar(100),
`price`double,
`summary`varchar(200),
PRIMARYKEY(`isbn`)
)
5.1.5插入图书信息
INSERTINTO`titles`VALUES('9787121072984','JavaWeb整合开发与项目实战','1','2009','1','perlhtp1.jpg','49',null);
INSERTINTO`titles`VALUES('9787121072985','Flex3RIA开发详解与精深实践','1','2009','1','ebechtp1.jpg','44',null);
INSERTINTO`titles`VALUES('9787811010101','update','9','2002','2','vbctc1.jpg','38',null);
INSERTINTO`titles`VALUES('9787811010102','C++程序设计','2','1998','1','cpphtp2.jpg','50',null);
INSERTINTO`titles`VALUES('9787811010103','JavaHowtoProgram','2','1998','1','jhtp2.jpg','50',null);
INSERTINTO`titles`VALUES('9787811010121','TheCompleteC++TrainingCourse','3','2001','2','cppctc3.jpg','54',null);
INSERTINTO`titles`VALUES('9787811014322','Web编程技术','1','2008','1','xmlhtp1.jpg','36',null);
INSERTINTO`titles`VALUES('9787811019877','EJBJPA数据库持久层开发','3','2008','2','javactc3.jpg','49',null);
INSERTINTO`titles`VALUES('9787811078661','精通JavaEE项目案例','1','2007','1','iw3htp1.jpg','70',null);
5.2功能实现的部分代码如下
登陆页面
网上书店
functionRegsiterSubmit(){//对用户名和密码文本框进行不为空的校验函数
with(document.Regsiter){//为下面语句块中的变量指明所属对象
varuser=loginName.value;//相当于varuser=document.Regsiter.loginName.value;
varpass=password.value;
if(user==null||user==""){
alert("请填写用户名");
}
elseif(pass==null||pass==""){
alert("请填写密码");
}
elsesubmit();
}
}
验证用户信息
<%@pagelanguage="java"import="java.sql.*"contentType="text/html;charset=gbk"%>
useBeanid="db"class="bean.DBcon"scope="request"/>
登录验证页面[checkUser.jsp]<%
request.setCharacterEncoding("utf-8");//解决post提交的中文乱码
Stringname=request.getParameter("loginName");
Stringpassword=request.getParameter("password");
%>
你输入的用户名是:
<%=name%>
<%
Connectioncon=db.getConnction();
Statementstmt=con.createStatement();
Stringsql="select*fromuserinfo";//对userinfo表的查询
sql+="whereloginname='"+name+"'andpassword='"+password+"'";
ResultSetrs=stmt.executeQuery(sql);
if(rs.next())//验证通过
{
session.setAttribute("userName",name);//将用户名保存到session中
response.sendRedirect("main.jsp");
}
else{//验证未通过
out.print("无此用户或密码有误,登录失败!
");
out.print("重新登录/a>");
}%>
与数据库建立连接
publicclassDBcon{
privatestaticfinalStringDRIVER_CLASS="com.mysql.jdbc.Driver";
privatestaticfinalStringDATABASE_URL=
"jdbc:
mysql:
//localhost:
3306/books?
useUnicode=true&characterEncoding=UTF-8";
privatestaticfinalStringDATABASE_USRE="root";
privatestaticfinalStringDATABASE_PASSWORD="520212";
publicstaticConnectiongetConnction(){//返回连接
ConnectiondbConnection=null;
try{
Class.forName(DRIVER_CLASS);
dbConnection=DriverManager.getConnection(DATABASE_URL,
DATABASE_USRE,DATABASE_PASSWORD);
}catch(Exceptione){
e.printStackTrace();
}
returndbConnection;
}
publicstaticvoidcloseConnection(ConnectiondbConnection){//关闭连接
try{
if(dbConnection!
=null&&(!
dbConnection.isClosed())){
dbConnection.close();
}
}catch(SQLExceptionsqlEx){
sqlEx.printStackTrace();
}
}
publicstaticvoidcloseResultSet(ResultSetres){//关闭结果集
try{
if(res!
=null){
res.close();
res=null;
}
}catch(SQLExceptione){
e.printStackTrace();
}
}
publicstaticvoidcloseStatement(PreparedStatementpStatement){
try{
if(pStatement!
=null){
pStatement.close();
pStatement=null;
}
}catch(SQLExceptione){
e.printStackTrace();
}}}
图书信息的封装
publicclassTitle{
privateStringisbn;//Isbn号
privateStringtitle;//书名
privateStringcopyright;//版权
privateinteditionNumber;//版本号
privateintpublisherId;//出版商ID
privatefloatprice;//价格
publicStringgetIsbn(){
returnisbn;
}
publicvoidsetIsbn(Stringisbn){
this.isbn=isbn;
}
publicStringgetTitle(){
returntitle;
}
publicvoidsetTitle(Stringtitle){
this.title=title;
}
publicStringgetCopyright(){
returncopyright;
}
publicvoidsetCopyright(Stringcopyright){
this.copyright=copyright;
}
publicStringgetImageFile(){
returnimageFile;
}
publicvoidsetImageFile(StringimageFile){
this.imageFile=imageFile;
}
publicintgetEditionNumber(){
returneditionNumber;
}
publicvoidsetEditionNumber(inteditionNumber){
this.editionNumber=editionNumber;
}
publicintgetPublisherId(){
returnpublisherId;
}
publicvoidsetPublisherId(intpublisherId){
this.publisherId=publisherId;
}
publicfloatgetPrice(){
returnprice;
}
publicvoidsetPrice(floatprice){
this.price=price;
}
}
对图书的操作,查询方法publicListgetTitles()。
增加add()、更新update()和删除delete()。
publicclassTitleDaoImplimplementsTitleDao{
privateConnectionconnection;
privatePreparedStatementtitlesQuery;
privateResultSetresults;
//返回BookBeans列表集合
publicList
getTitles(){List
titlesList=newArrayList();//获取书籍数据集ResultSetresults
try{
connection=DBcon.getConnction();
titlesQuery=connection.prepareStatement(
"SELECTisbn,title,editionNumber,copyright,"
+"publisherID,imageFile,price"+
"FROMtitlesORDERBYtitle");
ResultSetresults=titlesQuery.executeQuery();
//读取行数据
while(results.next()){
Titlebook=newTitle();
//对每行的图书数据创建一个图书封装类的实例
//循环将图书表中的每条记录封装为数据bean并添加到集合类中
book.setIsbn(results.getString("isbn"));
book.setTitle(results.getString("title"));
book.setEditionNumber(results.getInt("editionNumber"));
book.setCopyright(results.getString("copyright"));
book.setPublisherId(results.getInt("publisherID"));
book.setImageFile(results.getString("imageFile"));
book.setPrice(results.getFloat("price"));
titlesList.add(book);//将封将类添加到数组中
}
}
//处理数据库异常
catch(SQLExceptionexception){
exception.printStackTra