资源描述
学 号:
题目类型:实习报告
桂林理工大学
GUILIN UNIVERSITY OF TECHNOLOGY
生产实习(实习报告)
题目: 网上书店
学 院:
专业(方向):
班 级:
学 生:
同组成员 :
指导教师:
2015年 1月 22日
摘要
随着科学技术的发展,网络在人们生活中的应用越来越广泛。人们越来越想在最短的时间内购买到自己所需的图书。但书目的繁多,给人们在繁忙的工作生活中的购书带来了很大的麻烦,于是网上购书便成了人们向往的事情。
图书销售系统的开发为人们带来了很大的方便,使他们足不出户就可以轻轻松松地买到自己想要的书,既省时又省力。有效地缩短了图书流通发行环节,将广大读者、图书、出版者、发行者紧密地结合在一起,大大提高了图书流通率。它有着经营成本低、库存是虚拟的、用户检索方便、地域限制少等特点。
系统以JSP为主要制作工具,实现了用户注册、登陆、验证身份及书籍的预览查询、对书籍的购买通过购物车实现等功能。
关键词 电子商务 网上书城 管理信息系统
Abstract
With the development of science and technology, Internet is applied more and more widely in people's lives. There is a growing desire to purchase books which peoples possibly want to buy in the shortest time. However, a wide range of books brought a lot of troubles to people in the busy life. So book online has become a matter of people yearn for.
The development of this system will make a lot of convenience for people, so that they can buy books which they liked easily, both convenience and effective. The system effectively reduce the length of the book links the flow of distribution, it can be a large number of readers, books, publishers, distribution worked closely together, improving the flow rate of the book greatly. The system has many advantages such as low operating costs, virtual inventory, the user searches convenient, less geographical restrictions and so on.
JSP in the system as the main tool what to achieve the user registration, login, authentication, book preview inquiries, through the shopping cart in order to achieve the purchase of books.
Key words Online bookstore MIS
中文摘要
英文摘要
目录
1 引言
1.1项目背景
1.2 国内外研究现状
1.3 可行性研究
2 任务概述
2.1 系统开发的目标
2.2 用户的特点
3 系统需求分析
3.1 对性能的规定
3.1.1 精度要求
3.1.2 时间性要求
3.1.3 灵活性要求
3.1.4 输入输出要求
3.2 运行环境规定
3.2.1 设备要求
3.2.2 支持软件
3.2.3 接口要求
3.2.4 控制要求
4 系统设计
4.1 总体设计
4.1.1 需求规定
4.1.2 基本设计概念和处理流程
4.1.3 各模块结构设计
4.1.4 功能需求与程序的关系
4.2 接口设计
4.2.1 用户接口
4.2.2 外部接口
4.2.3 内部接口
4.3 系统数据库设计
4.4 系统出错处理设计
5 系统实现
6 系统测试与评价
7 实习总结
1、引言
1.1 项目背景
随着internet的普及和电子商务的兴起,网上图书销售是Internet电子商务在图书销售行业发展的必然结果,这种新型的图书销售形式,与传统利用书店进行销售的方式相比拥有许多优势:一是降低了销售成本;二是利用网络作为交易平台,改变传统的交易方式,使得交易活动不受空间和时间的限制;三是信息的传递更迅速灵活,新书信息上传后,客户可以立即看到,交易马上可以从网上进行,从而大大提高了交易的效率。正是由于这些优势,网上图书销售才能得以迅速地发展。网上图书销售系统的主要功能是利用网站作为交易平台,将图书的一些基本信息以网站的形式发布到Internet中,客户可以通过Internet登录图书销售网站来查看售书信息并提交订单订购图书,实现在线交易。
1.2 国内外研究现状
1)、国外现状
网上售书这是信息社会发展的必然要求。国际互联网的开通,为信息社会的飞速发展创造了条件。在美、日等信息化程度较高的国家和地区,网上图书销售发展速度迅猛。据InternetWorldStatS的统计,今天的互联网有17亿用户。而目前的全球人口为67亿,到2020年毫无疑问会有更多的人使用互联网。美国国家科学基金会预计,到那时互联网的用户数量将接近50亿。网民队伍的迅速扩充,无疑为网上售书的发展提供了巨大的市场空间。加上图书因其具有标识清晰、规格统一、特征容易描述、同种商品个体之间无差异等特性而能成为发展电子商务的最为理想的商品类型。因此,网上售书成为各国发展电子商务的首选目标,国际互联网开通后,各国电子商务网站很大一部分都是网上书店。只要网络发展没有停止,网上售书的发展就不会停止。
2)、国内的研究现状
近年来,随着计算机网络技术的飞速发展,网络技术应用已经相当普及,使得在线购买成为现实,各种各样的网上图书销售系统层出不穷,国内各大图书商都在创建自己的计算机网上电子商务系统。随着科学技术的飞速发展,Internet这个昔日少数科学家接触和使用的科研工具已经成了普通百姓都可以触及的大众型媒体传播手段。
1.3 可行性分析
1)、社会可行性
数据显示,自2009年至2011年中,消费者去超市和商场的人数趋于平稳,使用网购的消费者比例却在快速增长,2011年上半年增长速度环比上升6%。而网购用户的人群也在悄然发生着变化。报告显示,网购的重、中度消费人群增加,中度消费人群比例在2010年下半年开始首次超过50%。这一结论从淘宝网的数据中也得到印证。2011年,淘宝网年度消费金额在一万元以上的用户数量环比增长达82.8%,金额在一千至一万元之间的环比增64.7%,年消费金额在一千元以内的用户仅增34%。
与支出相对的,是网购人群的收入增幅却未能赶上花销的速度。报告指出,2011年上半年,我国网购人群家庭月收入增幅为5%,而花费增幅则达9%。在此发展趋势下,建立电子商务系统,不仅可以拓宽销售途径,还可以有效地节约销售成本。
2)、技术可行性
本系统采用的是JSP、Servlet和MySQL开发,Windows XP Professional操作系统,用Dreamweaver进行前台网页界面设计、采用JDBC方式与后台数据库进行连接,完成数据的添加、修改、删除、查询等功能。由于JSP、Servlet功能强大,而MySQL灵活易维护在开发方面具有方便快捷、使用灵活的特点,以及目前的广泛实际应用,因此使用JSP、Servlet、MySQL是开发轻平台的最佳组合从而说明本系统在技术方面可行。
硬件方面,科技飞速发展的今天,硬件更新的速度越来越快,容量越来越大,可靠性越来越高,价格越来越低,其硬件平台完全能满足此系统的需要。
3)、操作可行性
目前,大多数计算机都能运行该系统,该系统的安装、调试、运行不会改变原计算机系统的设置和布局,并且系统界面简单,提示信息完整,由相关人员指导便能够方便的操作此软件。
2、任务概述
2.1 系统开发的目标
管理员可以维护客户注册信息、维护图书信息、处订定单信息、网上售书。查看图书调查报告、游客可以在线注册为会员、购书。本系统的设计目标将最终定位于完成以上所述的系统主要业务的基本模型上。
2.2 用户的特点
本系统的最终用户是图书管理员和读者,图书管理员需要进行用户的创建,修改和删除等工作,要求具备计算机知识,如权限管理等。读者是普通用户,具备一定的计算机操作知识即可。
3、系统需求分析
3.1 对性能的规定
3.1.1 精度要求
本系统要求输入的会员年龄为整数,买书的数量为整数,出生日期必须是合法的日期形式(如1990-08-01),身份证号码必须为数字。
3.1.2 时间性要求
(1)系统的更新处理时间应该在可接受的范围内;
(2)系统的数据查询时间应该在可接受的范围内;
(3)系统的数据统计时间应该在可接受的范围内。
3.1.3 灵活性要求
1)操作方式上应该能够满足鼠标和键盘任意切换的需要;
2)能够支持Windows XP及以上运行环境;
3)留有与其他系统的接口。
3.1.4 输入输出要求
顶层图:
用户
管理员
书籍 评论、订单
订单 管理员、用户 用户 书籍 、订单
评论 帐号 帐号
网上书店系统
0层图:
管理员
查看订单
1.1
帐号管理
删除订单
1.2
书籍管理
删除评论
管理员帐号 书籍
用户帐号 用户评论 用户订单
添加订单
发表评论
查看书籍车
注册帐号
用户
1层图:
管理员
1.1.1
删除用户
1.2.3
删除书籍
1.1.2
添改管理员
1.1.3
删除管理员
1.2.1
添加书籍
1.2.2
书籍分类
用户帐号 管理员帐号 书籍
图书展示信息
3.2 运行环境规定
3.2.1 设备要求
CPU主频不低于2.0GHZ,内存容量不低于1024M,硬盘不低于500G。
3.2.2 支持软件
本系统支持的操作系统包括: Windows XP及以上操作系统。
本系统支持的数据库: MY SQL
本系统的开发工具:tomcat7.0,my eclipse 。
在使用方面,操作人员需要懂得一定的计算机知识。
3.2.3 接口要求
使用通信协议TCP/IP。
3.2.4 控制要求
本系统前台根据‘会员验证’模块来控制前台工作,若为会员,则可通过会员登录来选择前台的各项功能,若不是会员,则必须先注册会员,后台则根据‘管理员验证’模块来控制后台工作,通过管理员的登录来管理书的存储,和会员信息的存储以及购物单和总账目的输出。
4、系统设计
4.1.1 需求规定
基本功能:
a) 客户信息管理功能:客户注册、客户登录功能。
b) 图书分类显示功能:按图书的分类显示相应类别的所有图书的信息,显示信息包括:图书名称、作者、单价、图书简介以及图书对应的封面图片。
c) 图书订购功能:在图书显示界面中,客户可以选购图书,并指定选购的数量。
d) 购物车功能:客户选购图书后能方便地查看购物车内的物品列表及相关的单价、 数量、图书名称、总价等信息;并能从购物车中删除选定物品的功能。
e) 图书信息管理功能:管理人员登录后能添加、删除、更改图书信息,其中包括:图书名、作者姓名、所属类别、单价、图书的简介以及图书对应的封面图片。
f) 图书类别管理功能:管理人员登陆后可以添加、删除、更改图书类别。
g) 销售管理功能:管理人员登陆后可以查看用户所购买的书籍。
附加功能:
图书库存管理功能:能实时更新和显示各图书在库存数量,对零库存的图书,只能显示在客户界面,但客户不能订购
4.1.2 基本设计概念和处理流程
该网上书店应用程序包括以下几大模块:
用户管理模块
注册/登录
目录管理模块
分类管理
商品管理模块
商品管理
商品详情管理
购物车管理模块
设计购物车
保存购物车信息
生成购物车ID
实现购物车访问功能
处理顾客定单模块
实现定单系统
管理定单
留言板模块
留言板管理
针对不同用户显示不同的留言板
整个项目结构如下图所示:
4.1.3 各模块结构设计
1、用户管理模块
用户管理模块
注册
登录
用户模块中的登录部分分为会员登陆和管理员登陆,管理员登陆页面会给控制登陆的servlet传回一个role的参数,servlet通过判断role是否为null来决定当用户名和密码正确时是否跳转到后台管理页面,当role为null时如果用户名和密码正确就会跳转到会员登录成功界面。
2、 目录管理模块
目录管理主要有分类管理。分类管理有添加、修改和删除功能。管理员可以创建分类,对应选择分类,来创建商品目录。管理员可以将商品从某个分类中移除。功能描述:分类管理主要完成商品的一级分类,并对其进行添加、删除、修改等操作。
如图所示:
目录管理模块
分类管理
增加
修改
删除
分类管理的设计流程图:
删除分类流程图:
用户选择分类
不执行任何操作
提示错误信息
执行删除语句
提示成功信息
单击删除按钮
判断是否有商品
3、商品管理模块
商品管理主要有商品管理、商品详情管理。其中商品管理有添加、修改和删除功能,商品详情管理有商品详情修改功能。商品管理中管理员可以将商品关联到某个分类。
商品管理模块
修改
增加
删除
获取商品
4、 购物车
用户通过点击添加商品到购物车,当用户下定单时,用户的临时购物车就会与用户的账户关联,由于临时购物车也可以工作,因此用户在结账之前仍然无需提供任何额外信息,如用户登录或者创建一个新的用户。
目前或许保存购物车的最好方法可能是为每个购物车生成一个唯一的ID,采用全局唯一标识符来实现,然后以cookie和session数据的形式保存在用户的计算机中,这种方法的好处是即使用户的浏览器是禁用cookie的,系统程序也能够基于session数据正常工作。
购物车模块
清空购物车
更新数量
移除商品
添加商品
计算价格
添加商品到购物车:
用户添加商品
获取购物车
保存
添加商品到购物车
更改车中数量
是否有此商品
5、留言板模块
留言板模块主要用于发表留言,未登录的用户看到的留言版可以查看所有留言但是不能编辑;已登陆的普通用户看到的留言板可以写新留言,并且可以修改和删除之前用户自己发的留言;管理员可以在后台管理查看所有留言并且删除任意用户的留言。
4.1.4 功能需求与程序的关系
程
功
能
需 序
求
用户注册
会员登录
会员自助服务
图书查询
在线购书
图书显示
图书管理
订单管理
留言板管理
用户注册
√
会员登录
√
会员自助服务
√
图书查询
√
在线购书
√
图书显示
√
图书管理
√
订单管理
√
留言板管理
√
4.2 接口设计
4.2.1 用户接口
(1) 登入界面:由输入用户名、密码的文本框和登陆、注册按钮组成。
(2) 购物车界面:
已购书籍信息显示区:用于显示选购书籍信息(名称,价格,购买数量);
数量编辑框:用于输入每种图书的数量;
提交按钮:确定购买下订单。
(4) 管理员增加书籍界面:
信息编辑框区:输入书籍的信息。
提交按钮:把数据提交到数据库。
(5) 管理员修改书籍界面:
信息编辑框区:对已存在书籍的信息进行修改。
提交按钮:把更新数据到数据库。
(6) 管理员删除书籍界面:
显示框:用于显示所有书的图书名、类别、出版社等信息。
删除按钮:每本书结尾都有一个删除按钮用于删除当条记录。
4.2.2 外部接口
a、硬件接口:由于我们使用的通信协议是TCP/IP,因此这里的硬件接口问题主要就是TCP/IP层中的网络接口层,他负责数据帧的发送和接收,帧是独立的网络信息传输单元。网络接口层将帧放在网上,或从网上把帧取下来。这就要求IP使用网络设备接口规范NDIS向网络接口层提交帧,并且IP支持广域网和本地网接口技术。在系统运行时要注意关闭那些容易受攻击和入侵的端口号,在能保证带宽的前提下仅开通系统运行所必须的端口。
b、软件接口:这里的接口问题主要就是怎样与sql数据库进行通信,以便对数据库进行读取和写入操作。开发中可能使用到的常用对象有以下几个:
(1)连接对象(Connection):用来连接数据库。
(2)记录集对象(RecordSet):用来保存查询语句的返回结果。
(3)命令对象(Command):用来执行SQL语句或者SQL Server的存储过程。
(4)参数对象(Parameter):用来为存储过程或查询提供参数。
4.2.3内部接口
系统中的各模块之间的接口、调用关系,以及模块间的数据传递关系如下所示:
模块编号 模块名称 备注
GN1 会员登录 登录模块
GN2 管理员登录 登录模块
GN3 用户注册 登录模块
GN4 添加书籍 书籍管理模块
GN5 修改书籍 书籍管理模块
GN6 查看书籍 书籍管理模块
GN7 删除书籍 书籍管理模块
GN8 订购书籍 购物车管理模块
GN9 删除订单 购物车管理模块
GN10 修改订购信息 购物车管理模块
GN11 添加留言 留言板模块
GN11 修改留言 留言板模块
GN11 删除留言 留言板模块
1)登录模块与书籍管理模块:管理员可以对数据库中的书籍进行增加、删除、修改等操作,这三种功能的权限仅局限于管理员,要进行操作需确保为管理员,调用登录模块验证用户以保证数据库的信息的正确、完整与安全。
2)登录模块与购物车管理模块:用户进入系统后可以查询书籍,若要购物则需确保用户为本系统的会员,非会员可以注册,会员成功登录后将会员id储存于服务器中,购物过程将书籍id也储存于服务器中,当会员确认购买时,将会员id、书籍id和购买数量存于数据库中的shopcart表中,并更改该书籍的库存量。
3) 登陆模块与留言板模块:用户没登陆时只能查看留言板的内容不能编辑;当用户登录后可以写新的留言,并且从session中取得当前登陆的用户名作为留言的作者,如果登陆的是会员,还可以在留言板中删除和更改自己发的留言;如果登陆的是管理员,还可以对所有留言进行操作。
4.3 系统数据库设计
网上书店的E-R图大致如下图所示:
通过对于网上书店的需求分析,以及根据其他例子参考初步设计出数据库各个表中的属性内容,数据库的具体设计将在数据库设计中设计出来。如下所示:
1)、用户信息表(user):
序号
字段名称
数据类型
长度
必填字段
说明
1
id
自动编号
11
-
自动编号
2
name
文本
50
是
用户名(登录时)
3
email
文本
50
是
E-mail
4
password
文本
50
是
密码
5
role
数字
11
-
权限
6
relname
文本
50
否
真实姓名
7
age
数字
11
否
年龄
8
phone
文本
50
否
手机号
9
address
文本
50
否
地址
10
answer
文本
50
否
密码答案
11
registerTime
日期/时间
-
-
注册时间
2)、书籍信息表(book)
序号
字段名称
数据类型
长度
必填字段
说明
1
id
自动编号
-
-
自动编号
2
name
文本
50
是
书名
3
url
文本
50
是
封面路径
4
author
文本
50
是
作者
5
bookman
文本
50
是
出版社
6
price
数字
双精度
是
价格
7
categoryId
数字
50
是
分类
8
addTime
日期/时间
-
-
添加日期
9
total
数字
11
是
添加数目
10
currentNum
数字
11
是
现有库存
11
introduction
文本
2000
-
书籍简介
3)、书籍分类信息表(bookcategory)
序号
字段名称
数据类型
长度
必填字段
说明
1
id
自动编号
-
-
分类id
2
name
文本
50
是
分类名
4)、购物车信息表(shopcart)
序号
字段名称
数据类型
长度
必填字段
说明
1
id
自动编号
-
-
自动编号
2
num
数字
11
是
购买数量
3
userId
文本
50
是
用户id编号
4
bookName
文本
50
是
购买书名
5
price
数字
11
是
书籍总价
6
bookID
数字
11
是
购买书籍id编号
5)、留言板信息表(note)
序号
字段名称
数据类型
长度
必填字段
说明
1
id
自动编号
11
是
自动编号
2
title
文本
50
是
标题
3
author
文本
50
是
作者
4
content
文本
50
是
正文
根据上述几个数据库表,通过PowerDisigner软件建立数据库的概念模型CDM和物理模型PDM。
CDM如下图所示:
PDM模型如下图所示:
4.4 系统出错处理设计
信息出
错情况
出错形式
含义
处理办法
登陆出错
用户名不存在。密码错误
在此系统的数据库中不存在
重新输入正确信息后,登录
注册出错
填写的注册信息错误
填写的注册信息不符合系统的要求
重新输入注册信息,直到符合要求为止
5、系统实现
用户模块关键代码:
用户模块持久层:
添加用户功能:
public boolean insertUser (User user) {
connection = DBManager.getConnection(); // 得到数据库连接
StringBuffer sqlState = new StringBuffer();
sqlState.append("INSERT INTO user(name,pass,role,");
sqlState.append("realName,gender,age,phone,email,address,registerTime");
sqlState.append(")VALUES(?,?,?,?,?,?,?,?,?,?)");
System.out.println(sqlState);
try {
preState = connection.prepareStatement(sqlState.toString());
preState.setString(1, user.getName()); // 设置每个要插入的的属性
preState.setString(2, user.getPass());
preState.setInt(3, user.getRole());
preState.setString(4, user.getRealName());
preState.setString(5, user.getGender());
preState.setInt(6, user.getAge());
preState.setString(7, user.getPhone());
preState.setString(8, user.getEmail());
preState.setString(9, user.getAddress());
preState.setDate(10, user.getRegisterTime());
preState.executeUpdate();
return true;
} catch (SQLException e) {
e.printStackTrace();
return false;
} finally {
DBManager.closeAll(connection, preState, resultSet);
}
}
查询用户功能:
public ArrayList queryUser() {
connection = DBManager.getConnection();
String sqlState = "SELECT * FROM user";
User user = new User();
ArrayList arrayList = new ArrayList();
try {
state = connection.createStatement();
resultSet = state.executeQuery(sqlState); // 执行sql查询
while (resultSet.next()) {
user.setId(resultSet.getInt("id"));
user.setName(resultSet.getString("name"));
user.setPass(resultSet.getString("pass"));
user.setRole(resultSet.getInt("role"));
user.setRealName(resultSet.getString("realName"));
user.setAge(resultSet.getInt("age"));
user.setGender(resultSet.getString("gender"));
user.setPhone(resultSet.getString("phone"));
user.setEmail(resultSet.getString("email"));
user.setAddress(resultSet.getString("address"));
user.setRegisterTime(resultSet.getDate("registerTime"));
arrayList.add(user);
}
return arrayList;
} catch (SQLException e) {
e.printStackTrace();
return null;
} finally {
DBManager.closeAll(connection, state, resultSet);
}
}
删除用户功能:
public boolean deleteUser(int id) {
try {
connection = DBManager.getConnection(); // 获得一个数据库连接
state = connection.createStatement();
state.execute("begin"); // 事务开始
state.executeUpdate("DELETE FROM user WHERE id='" + id+ "'");
System.out.println(id);
state.execute("commit"); // 提交事务
return true;
} catch (Exception e) {
try {
state.execute("rollback"); // 如果出现异常数据库回滚
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
return false;
} finally {
DBManager.closeAll(connection, state, resultSet);
}
}
用户模块控制层:
登录控制:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置字符集
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
UserDAO ud = new UserDAO();
//设置标志位
boolean isIn = false;
boolean isManager = false;
HttpSession session = request.getSession();
// 获取参数
User user = (User)session.getAttribute("user");
String userName = request.getParameter("userName");
String password = request.getParameter("pwd");
// 判断用户是登陆,还是从其他页面跳转到该页面的
if(user == null){
// 若是登陆,当用户名和密码为空时则跳转到出错页面
if(userName == null || password == null){
request.getRequestDispatcher("/com/bsw/error/error.jsp").forward(request, response);
} else {// 查询所有的用户
user = ud.queryUser(userName); // 得到所有用户
System.out.println(user);
if(user == null){
isIn = false;
} else {// 判断是否为普通用户
if(user.getPass().equals(password) && user.getRole() == 0){
isIn = true;
} // 判断是否为管理员
if(request.getParameter("role") !=null && user.getPass().equals(password)){
isIn = true;
isManager = true;
}
}
}
} else {
isIn = true;
}
// 如果合法,显示用户订单信息
if (isIn) {
if(isManager){ // 若是管理员,则跳转到后台管理页面
session.setAttribute("user", ud.queryUser(userName));
response.sendRedirect("/BookShop/com/bsw/manage
展开阅读全文