INTERNET 课程设计实验报告
网上书店系统
院 系:信息工程学院
班 级:信息管理与信息系统
学 号:111405118
姓 名:施敏宇
指导教师:丁晓超
20##年6月10日 ~ 20##年6 月20日
第一章.引言... 4
1.1编写目的... 4
1.2项目背景... 4
1.3可行性研究... 5
第二章.系统开发的目标... 5
第三章.系统需求分析... 6
3.1总体需求... 6
3.2功能需求... 6
3.3技术要求... 7
3.4性能需求?.. 7
第四章. 系统架构设计... 8
4.1系统技术架构设计... 8
4.2系统功能架构设计... 8
4.2.1系统整体功能架构图... 8
4.2.2 系统功能架构说明... 10
第五章. 系统详细设计... 11
5.1系统系统界面设计... 11
5.1.1前台管理界面... 11
5.1.2后台管理界面... 11
5.2 数据库设计... 14
5.2.1书籍类别表... 14
5.2.2书籍详细信息表... 14
5.2.3会员注册信息列表... 15
5.2.4消费者订单列表:... 15
5.2.5购买书籍详细列表:... 16
5.2.6购物车信息列表... 16
5.2.7会员购买书籍评价列表:... 16
第六章.总结
第一章.引言
1.1编写目的
本需求分析文档的目的是说明网上书店管理系统最终需要满足的条件和限制,为进一步设计和实现提供依据
1.2项目背景
1)系统名称:网上书店管理系统
2)需求背景分析:近年来,电子商务伴随着IT的成熟,逐渐发展壮大,成为网络经济的核心。在电子商务的发展过程中,人们逐渐意识到在线购物的无地域界限、安全、方便快捷及其价格优势,在线购物的队伍也随之扩大.
3)系统用途:管理员将书籍信息整理归类发布到网上,用户登录该网站后,首先要注册为会员才能购买书籍。
4)系统用户:该系统的使用者主要分为三类:浏览者、注册用户和管理员。
第二章.系统开发的目标
浏览者可以浏览网上书店中的书籍信息;注册用户除了可以浏览网上书店中的书籍信息外,还可以进行网上购书;管理员可以对网上书店中的书籍信息进行管理、处理客户的订单等。
第三章.系统需求分析
3.1总体需求
1)建立对书籍提供全面管理信息的系统
2)对所有书籍,用户提全面管理
3)对书籍详细信息提供管理
3.2功能需求
1)可以再浏览器上浏览书籍信息;
2)可以注册成为会员,可以登录;
3)有购物车功能,可以在线提交订单;
4)可以通过关键字搜索书籍;
5)会员可以查看订单、作出评价;
6)管理员可以对网上书店中的书籍进行管理,可增加、修改、删除书籍的分类信息;
7)管理员可以根据会员的申请或会员的消费情况将相关会员设为VIP 会员,也可以对会员的基本信息进行管理,也有权对一些过期用户进行删除;
8)管理员可以增加、修改、删除网上书店中书籍的基本资料信息;
9)管理员可以管理客户提交的订单,客户“已确认”的订单可修改状态为“正在配货”,“正在配货”的订单可修改状态为“缺货”或“已发货”。
3.3技术要求
1)中间是个模板页,四周通过超链接连接各个页面,通过css控制结构方位
2)数据库管理系统可采用Microsoft SQL Server 2012
3)必须先连接数据库,登陆sql账号,然后附加数据库备份中的数据库,然后在web.config中修改关于数据库的语句,具体要修改的是你电脑上数据库的名字,你登陆的sql账号的名字与密码。
3.4 性能需求?
1)网上书店系统与相关单位的链接;
?2) 系统可以对图书的库存进行统计;
?3)易于维护和扩充;
?4)系统界面设计友好,操作方便、灵活;
?5)具有高可靠性和冗错能力,不允许系统在工作时间停机,不允许系统丢失图书信息,不允许在运行期间出现故障和错误;
?6)具有安全检查机制,非法用户不能使用系统,不能偷看系统信息,不能修改图书,防止随意删改,同时提供信息备份的服务;
?7)具有保密机制,各级使用者只能看到允许查看的系统信息;
第四章. 系统架构设计
4.1系统技术架构设计
由于网上书店系统的多用户、跨平台等特性,所以系统的实现是基于J2EE技术体系的B/S结构WEB应用之上,网上书店系统的使用者可以分为两大类,一类是主要的业务人员,他们是系统管理员;另一类是系统参与者,即游客与会员。系统参与者因为与系统的交互需要在不同地点、不同地域使用,用户主要通过Web浏览器进行访问和操作,因此采用基于先进的Struts框架的B/S(Browser/server)架构。从而优化系统的开发效率、可维护性、可扩展性。
4.2系统功能架构设计
4.2.1系统整体功能架构图
1) 网上书店管理系统的功能分析层次如图4-1所示。
图4-1 网上书店管理系统层次图
2)网站关系用例如图4-2与图4-3所示。
图4-2 网站关系用例图1
4.2.2 系统功能架构说明
网上书店管理系统是一个典型的 web 数据库开发应用程序,由。前台图书展示及销售、后台管理两部分组成。
1.前台商品展示及销售:该部分主要包括新书上架、购物车、
会员管理、图书公告及订单查询、图书查询等。
2.后台管理:该部分主要对商城内的一些基础数据进行有效管
理,包括图书管理、会员管理、订单管理、公告管理等。
第五章. 系统详细设计
5.1系统系统界面设计
5.1.1前台管理界面
前台管理子系统的流程图如图5-1所示:
图5-1 前台子系统流程图
5.1.2后台管理界面
1)后台管理子系统的流程图如图5-2所示:
2)会员管理模块流程如图5-3所示:
图5-3 会员管理模块流程图
3)书籍分类管理模块流程如图5-4所示:
图5-4
4)书籍管理模块流程如图5-5所示:
5.2 数据库设计
5.2.1书籍类别表
5.2.2书籍详细信息表
5.2.3会员注册信息列表
5.2.4消费者订单列表:
5.2.5购买书籍详细列表:
5.2.6购物车信息列表
第六章.总结
这次的课程设计让我懂得了很多sql2012与web的知识,这个网络书店系统的功能十分强大,一开始他的数据库是sql2000版本的,而我自己电脑上的sql是2012版本的,无法进行附加,后来经过多天的研究,我和龚敏贵成功在学校的电脑上把数据库版本转化成为了05版本,现在的版本是sql2012版本的数据库,还有其他很多困难,我都一一解决了,代码方面,是一些基础的css代码+web,页面分为一个部分,中间的母版页,四周是几个动态网页,通过超链接与css控制,另外这是数据库是加密的,如果未连接sql2012,则无法运行程序,并且在vs2013上用拆分功能的时候不能看到全部的网页内容。这次的课程设计让我受益匪浅,希望下次能做的更好。
第二篇:网上书店系统实验报告
实验报告
一、 实验题目
编程实现“网上书店系统”
二、 题目分析
1、 需求分析
要开发一个系统,首先要了解该系统到底想做什么,需要实现怎样的功能,这就是需求分析。网上书店从大的需求方面看,就是要实现通过互联网能够进行书籍的购买及相关的管理等功能,大致需要提供下面的一系列功能:
* 浏览书籍(模糊查询)
* 选择需要购买的书籍
* 可以继续选择别的书籍,并且可以购买该书籍
* 选择了需要购买的书籍后,进行购买书籍操作
* 保存选中的图书和数量
UML图:
2、 数据分析
图书信息 数据库
购物车 本次会话有效
三、实验设计
1、页面转移关系
2、对象模型
(1)界面对象(View)
*查询页 Search.jsp
*图书目录页 Directory.jsp
*购物车页 Cart.jsp
*定单页 Order.jsp
(2)控制器(Control)
*CtrlServlet 负责响应输入命令
*包括:模糊查询key、查看购物车cart、结算order 、继续选书continue、再次查询search
(3)业务模型
*图书信息:BookBean 实体类的会话Bean
*购物车信息:CartBean 会话Bean
3、 数据设计
(1) 图书信息(数据库表、查询结果)
* 书号ISBN char[24] 主键
* 书名Title char[64]
* 作者Author char[32]
* 出版社Press char[32]
* 价格Price double
(2)购物车信息
* 书号ISBN char[24]
* 数量Number integer
(3)共享数据
* 查询结果和选中的图书信息
* 作为 session参数
4、 动态模型
5、EJB接口设计
(1)BookBean 管理图书信息(封装数据库)
*find( string key )
*根据关键字从数据库中查找出图书信息记录(数组)条件:书名、作者、出版社名中包含关键字get( string isbn )
*根据书号,找出图书信息记录
(2)CartBean 管理购物车信息(本次会话有效)
*add( string isbn ) 添加记录
*gest( ) 获得记录数组
*set( string isbn, integer num ) 设置购买数量
5、 控制器
(1)CtrlServlet 的输入
*来自查询页
page=“search”&key=关键字
*来自图书目录页
page=“directory”&submit=“cart”&choose=书号数组
page=“directoty”&submit=“search”
*来自购物车页
page=“cart”&submit=“order”
page=“cart”&submit=“continue”
page=“cart”&submit=“search”
(2)算法概要
*模糊查询 search
按照 key 从 BookBean 查询图书,转交图书目录页
*查看购物车
将选定图书存入CartBean,转交购物车页
*结算
计算CartBean中的图书总价,从BookBean获得图书信息,连同地址,转交定单页
*继续选书
返回图书目录页
*再次查询
转向查询页
*异常处理
直接生成错误信息页面
四、实现技术
1、采用 MVC 模式
(1)JSP 实现页面视图 View
(2)Servlet 实现控制 Control
(3)EJB 实现业务模型 Model
2、交互关系
(1)JSP 表单动作(form)è CtrlServlet
(2)Servlet 转发 è JSP 页面
3、数据传输
(1)Servlet 调用 EJB 对象获得数据
(2)Servlet 通过 session 参数传递给 JSP 页面
五、实验源代码
1、BooksOnline-ejb
(1)Books
①Books.java:
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
@Entity
@Table(name = "BOOKS")
@NamedQueries({@NamedQuery(name = "Books.findByIsbn", query = "SELECT b FROM Books b WHERE b.isbn = :isbn"), @NamedQuery(name = "Books.findByTitle", query = "SELECT b FROM Books b WHERE b.title = :title"), @NamedQuery(name = "Books.findByAuthor", query = "SELECT b FROM Books b WHERE b.author = :author"), @NamedQuery(name = "Books.findByPress", query = "SELECT b FROM Books b WHERE b.press = :press"), @NamedQuery(name = "Books.findByPrice", query = "SELECT b FROM Books b WHERE b.price = :price")})
public class Books implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ISBN", nullable = false)
private String isbn;
@Column(name = "TITLE")
private String title;
@Column(name = "AUTHOR")
private String author;
@Column(name = "PRESS")
private String press;
@Column(name = "PRICE")
private Double price;
public Books() {
}
public Books(String isbn) {
this.isbn = isbn;
}
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getPress() {
return press;
}
public void setPress(String press) {
this.press = press;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
@Override
public int hashCode() {
int hash = 0;
hash += (isbn != null ? isbn.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Books)) {
return false;
}
Books other = (Books) object;
if ((this.isbn == null && other.isbn != null) || (this.isbn != null && !this.isbn.equals(other.isbn))) {
return false;
}
return true;
}
@Override
public String toString() {
return "Books.Books[isbn=" + isbn + "]";
}
}
②BooksFacade.java
import java.util.List;
import java.util.ArrayList;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Stateless
public class BooksFacade implements BooksFacadeRemote {
@PersistenceContext
private EntityManager em;
public void create(Books books) {
em.persist(books);
}
public void edit(Books books) {
em.merge(books);
}
public void remove(Books books) {
em.remove(em.merge(books));
}
public Books find(Object id) {
return em.find(Books.class, id);
}
public List<Books> findAll() {
return em.createQuery("select object(o) from Books as o").getResultList();
}
public ArrayList<Books> search(String key) {
List<Books> all = this.findAll();
if(all.isEmpty()) {
return null;
}
ArrayList<Books> result = new ArrayList<Books>();
for(Books current : all) {
if(current.getTitle().toLowerCase().contains(key)||current.getAuthor().toLowerCase().contains(key)||current.getPress().toLowerCase().contains(key)) {
result.add(current);
}
}
return result;
}
}
③BooksFacadeRemote.java
import java.util.List;
import java.util.ArrayList;
import javax.ejb.Remote;
@Remote
public interface BooksFacadeRemote {
void create(Books books);
(2)Cart
①Cart.java
import java.io.Serializable;
public class Cart implements Serializable {
private String isbn;
private String title;
private double price;
private int number;
public Cart(String isbn,String title,double price,int number) {
this.isbn = isbn;
this.title = title;
this.price = price;
this.number = number;
}
public String getIsbn() {
return this.isbn;
}
public String getTitle() {
return this.title;
}
public double getPrice() {
return this.price;
}
public int getNumber() {
return this.number;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public void setTitle(String title) {
this.title = title;
}
public void setPrice(double price) {
this.price = price;
}
public void setNumber(int number) {
this.number = number;
}
}
②CartBean.java
import javax.ejb.Stateful;
import java.util.ArrayList;
@Stateful
public class CartBean implements CartRemote {
private ArrayList<Cart> record;
private boolean initialed = false;
public void add(String isbn,String title,double price){
record.add(new Cart(isbn,title,price,1));
}
public void set(String isbn,int number){
for(Cart current : record) {
if(current.getIsbn().equals(isbn)) {
current.setNumber(number);
}
}
}
public boolean exist(String isbn) {
for(Cart current : record) {
if(current.getIsbn().equals(isbn)) {
return true;
}
}
return false;
}
public ArrayList<Cart> get(){
ArrayList<Cart> result = new ArrayList<Cart>();
for(Cart current : record)
{ result.add(newCart(current.getIsbn(),current.getTitle(),current.getPrice(),current.getNumber()));
}
return result;
}
public boolean initialed() {
return this.initialed;
}
public void create(){
record = new ArrayList<Cart>();
initialed = true;
}
}
void edit(Books books);
void remove(Books books);
Books find(Object id);
List<Books> findAll();
ArrayList<Books> search(String key);
}
③CartRemote.java
import javax.ejb.Remote;
import java.util.ArrayList;
@Remote
public interface CartRemote {
public void add(String isbn,String name,double price);
public void set(String isbn,int number);
public boolean exist(String isbn);
public ArrayList<Cart> get();
public boolean initialed();
public void create();
}
2、BooksOnline-war
ControlServlet.java
import Books.BooksFacadeRemote;
import Cart.CartRemote;
import java.util.Enumeration;
import java.io.IOException;
import java.io.PrintWriter;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ControlServlet extends HttpServlet {
@EJB
private CartRemote cartBean;
@EJB
private BooksFacadeRemote booksFacade;
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
try {
if(request.getParameter("page").equals("search")) {
request.getSession().setAttribute("directory", booksFacade.search(request.getParameter("key").toLowerCase()));
response.sendRedirect("Directory.jsp");
}
if(request.getParameter("page").equals("directory")&&request.getParameter("submit").equals("cart")) {
if(!cartBean.initialed()) {
cartBean.create();
}
Enumeration names = request.getParameterNames();
while(names.hasMoreElements()) {
String name = (String)names.nextElement();
if(!name.equals("page")&&!name.equals("submit")) {
if(!cartBean.exist(request.getParameter(name))) {
cartBean.add(request.getParameter(name),booksFacade.find(request.getParameter(name)).getTitle(),booksFacade.find(request.getParameter(name)).getPrice());
}
}
}
request.getSession().setAttribute("cart",cartBean.get());
response.sendRedirect("Cart.jsp");
}
if(request.getParameter("page").equals("directory")&&request.getParameter("submit").equals("search")) {
response.sendRedirect("Search.jsp");
}
if(request.getParameter("page").equals("cart")&&request.getParameter("submit").equals("order")) {
double sum = 0;
Enumeration names = request.getParameterNames();
while(names.hasMoreElements()) {
String name = (String)names.nextElement();
if(!name.equals("page")&&!name.equals("submit")&&!name.equals("address")) {
cartBean.set(name,Integer.parseInt(request.getParameter(name)));
sum += booksFacade.find(name).getPrice()*Integer.parseInt(request.getParameter(name));
}
}
request.getSession().setAttribute("cart",cartBean.get());
request.getSession().setAttribute("fee",sum);
request.getSession().setAttribute("address",request.getParameter("address"));
response.sendRedirect("Order.jsp");
}
if(request.getParameter("page").equals("cart")&&request.getParameter("submit").equals("continue")) {
response.sendRedirect("Directory.jsp");
}
if(request.getParameter("page").equals("cart")&&request.getParameter("submit").equals("search")) {
response.sendRedirect("Search.jsp");
}
} finally {
out.close();
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet 方法。单击左侧的 + 号以编辑代码。>
/**
* Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
*/
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
3、web
(1)Cart.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@page import="Cart.Cart;" %>
<%@page import="java.util.ArrayList;" %>
<%@page import="Books.BooksFacade;" %>
<%@page import="Books.Books;" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Cart</title>
</head>
<body>
<% ArrayList<Cart> result = (ArrayList<Cart>)session.getAttribute("cart");
if(result==null||result.isEmpty()) { %>
<h2>您的购物车是空的</h2>
<form action="http://localhost:8080/BooksOnline-war/ControlServlet">
<input type="hidden" name="page" value="cart" />
<input type="submit" name="submit" value="continue" />
<input type="submit" name="submit" value="search" />
</form>
<% }
else { %>
<h2>您的购物车里有以下图书/h2>
<form action="http://localhost:8080/BooksOnline-war/ControlServlet">
<table border="1">
<tr>
<th>书名</th>
<th>价格</th>
<th>数量</th>
</tr>
<% for(Cart current : result) { %>
<tr>
<td><%= current.getTitle() %></td>
<td><%= current.getPrice() %></td>
<td><input type="text" name="<%= current.getIsbn() %>" value="<%= current.getNumber() %>" /></td>
</tr>
<% } %>
</table>
<label for="address">请输入您的地址 : </label><input type="text" name="address" id="address" value="" />
<br />
<input type="hidden" name="page" value="cart" />
<input type="submit" name="submit" value="order" />
<input type="submit" name="submit" value="continue" />
<input type="submit" name="submit" value="search" />
</form>
<% } %>
</body>
</html>
(2)Directory.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@page import="java.util.ArrayList;" %>
<%@page import="Books.Books;" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Directory</title>
</head>
<body>
<% ArrayList<Books> result = (ArrayList<Books>)session.getAttribute("directory");
if(result==null) { %>
<h2>没有找到合适的书/h2>
<% }
else { %>
<form action="http://localhost:8080/BooksOnline-war/ControlServlet">
<h2>符合条件的图书如下/h2>
<table border="1" >
<tr>
<th></th>
<th>书名</th>
<th>作者/th>
<th>出版社/th>
<th>价格</th>
</tr>
<% for(Books current : result) { %>
<tr>
<td><input type="checkbox" name="<%= current.getIsbn() %>" value="<%= current.getIsbn() %>" />
<td><%= current.getTitle() %></td>
<td><%= current.getAuthor() %></td>
<td><%= current.getPress() %></td>
<td><%= current.getPrice() %></td>
</tr>
<% } %>
</table>
<input type="hidden" name="page" value="directory" />
<input type="submit" name="submit" value="cart" />
<input type="submit" name="submit" value="search" />
</form>
<% } %>
</body>
</html>
(3)Order.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@page import="Cart.Cart;" %>
<%@page import="java.util.ArrayList;" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Order</title>
</head>
<body>
<% ArrayList<Cart> result = (ArrayList<Cart>)session.getAttribute("cart");
if(result==null||result.isEmpty()) { %>
<h2>系统错误</h2>
<% }
else { %>
<h2>您订购了以下图书/h2>
<form action="http://localhost:8080/BooksOnline-war/ControlServlet">
<table border="1">
<tr>
<th>书名</th>
<th>数量</th>
</tr>
<% for(Cart current : result) { %>
<tr>
<td><%= current.getTitle() %></td>
<td><%= current.getNumber() %></td>
</tr>
<% } %>
</table>
</form>
<h2>图书将在48小时送到以下地址</h2>
<h2><b><%= session.getAttribute("address") %></b></h2>
<h2>请付款<%= session.getAttribute("fee") %></h2>
<% } %>
</body>
</html>
(4)Search.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Search</title>
</head>
<body>
<h3>请输入关键字(书名、作者、出版社)/h3>
<form action="http://localhost:8080/BooksOnline-war/ControlServlet">
<input type="text" name="key" value="" />
<br />
<input type="hidden" name="page" value="search" />
<input type="submit" value="search" />
</form>
</body>
</html>
六、运行结果
1、
2、
3、
4、