《毕业设计(论文)基于java的网上书店系统设计.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于java的网上书店系统设计.doc(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、目 录第1章 绪论21.1 开发背景21.2 网上书店设计概览2第2章 系统分析32.1 可行性分析32.2 需求分析32.3 系统的运行环境和开发平台32.3.1 硬件设备及操作系统32.3.2 系统开发平台4第3章 总体分析53.1 系统结构图53.2 系统模块图53.3 系统主要处理流程5第4章 详细设计74.1 uml设计74.1.1用例图74.1.2 子模块序列图74.2 数据库设计114.2.1 E-R图114.2.2关系图114.2.3 物理结构124.3 界面设计14第5章 测试165.1 测试过程16第6章 结论17附录 参考文献18附录 源代码19第1章 绪论 开发背景随着
2、Internet国际互联网的发展,越来越多的企业开始建造自己的网站。基于Internet的信息服务,商务服务已经成为现在企业的一项不可缺少的内容。很多企业都已经不满足于建立一个简单的,仅仅能够发布信息的静态网站。现代企业需要的是一个功能强大的,能够提供完善的电子商务服务的动态商务网站。同时人们的生活方式也在随着发生改变,人们对于互联网技术的要求已不单单是浏览一下网页,收发电子邮件,日益忙碌的人们开始追求足不出户的利用互联网这个强大的平台来实现网上购物。对于企业来说,无论是企业之间还是企业与客户之间的交易,如果能够实现网上交易将大大提高交易速度节约交易成本。近几年,随着网络数据库技术的进一步发展
3、,使得这一设想逐渐成为了现实。基于B/S的系统开发开始已经是当今的总趋势。JSP是十分流行的一种技术,它主要是运行在开发服务器端的脚本程序和动态生成网站的内容。JSP技术有J2EE平台支持,发展前途不可限量。总所周知,J2EE平台提供了Java企业应用编程接口,为企业计算以及电子商务应用系统提供了有关的技术和强大的类库支持,J2EE平台包含十几种技术,JSP技术正是其中的一种核心的技术。1.2 网上书店设计概览按照用户类型区分的话,通常电子商务网站可以分为会员模块、后台管理模块。电子商务网站是以商务活动为中心进行的。书店的定义不外乎展示图书的信息,与其他销售通路并无不同,从这样的角度来看,网络
4、书店的基本功能也是如此,不过是出版品另一种形态的宣传或者销售通路,甚至传统店面的辅助。网络书店所能与传统书店服务的真正不同之处在于打破了销售或出版的界限。以目前的网络书店形态而言,最后销售的仍然是一本本印制完成的出版品,消费者从网站上得到的,只是这些出版物的信息,而不是“书”,也就是说,网络书店本身只是一个出版物与消费者的中介,而不是被消费的主体。第2章 系统分析2.1 可行性分析可行性分析也称为可行性研究,是在系统调查的基础上,针对新系统的开发是否具备必要性和可能性,对新系统的开发从技术、经济、社会的方面进行分析和研究,以避免投资失误,保证新系统的开发成功。可行性研究的目的就是用最小的代价在
5、尽可能短的时间确定问题是否能够解决。该系统的可行性分析包括了以下几个方面的内容。(1) 经济可行性:主要是对项目的经济效益进行评价,由于系统所使用的服务器是免费的,可以从网上免费下载,用的免费的数据库管理软件,本系统开发经费对于作者在经济上是可以接收的。所以本系统在经济上是可行的。(2) 技术可行性:技术上的可行性分析主要是分析技术条件是否顺利完成开发工作,软硬件是否满足开发者的需要等。该管理系统采用当前新兴的Brower/Server 模式开发。三层的Brower/Server体系结构具有很多传统的Client/Server体系结构不具备的优点,它把应用系统带入了一个崭新的发展时代。数据库服
6、务器选用MySQL,能够处理我们这个小型的网站的数据。它的灵活易用性为数据库编程提供了很好的条件。因此,系统的软件开发平台已成熟可行。硬件方面,科技飞速发展的今天,硬件更新速度越来越快,容量越来越大,可靠性越来越高,价格越来越低,其硬件平台完全能满足此系统的需要。综上所述,此系统开发目标已明确,在技术和经济等方面都可行,并且投入少、见效快。因此系统的开发是完全可行的。2.2 需求分析为了准确的确定目标系统必须做什么,了解用户的明确需求,进一步实现子系统的功能。 功能描述:1. 展示图书:展示的方式有多种,可以按图书分类、按销售排行榜、按上架时间等,有层次的展示图书,提高用户的购买兴趣。对于某本
7、图书,除显示图书信息以外,还可以附加书评、插图、试读部分章节,并进行相关图书的推荐。2. 图书查询:根据多种条件来查询,比如图书名,作者名,出版社名,出版年月。能进行模糊匹配,包含关键字的图书都能查到。3. 购书:只有注册用户才能购书。为用户提供购物车,购物车内图书的数量可以修改,也可以删除购物车里已有的图书。最终通过订单确认,附加用户的邮寄地址,生成有效的订单,订单一旦生成,用户无权限再修改。4. 评价图书:只有注册用户才能对图书进行评价,能够对自己的评价进行增删改。5. 后台管理: 用户管理:为用户提供注册和登录服务。不同角色的用户拥有不同的访问权限。比如登录用户能修改自己的个人信息,查询
8、订单历史记录,订单的状态。而管理员则能进行后台管理。 图书信息管理:录入、修改和删除图书信息。 库存管理:每天都集中进行一次入库和出库的操作。 销售管理:包括售书、销售明细、销售排行、销售报表。 订单管理:管理客户提交的订单,客户“已确认”的订单可修改状态为“正在配货”,“正在配货”的订单可修改状态为“缺货”或“已发货”。2.3 系统的运行环境和开发平台2.3.1 硬件设备及操作系统服务器:Intel Celeron(或与此相当的CPU)以上配置的高性能PC机,有网络接口卡(NIC),内存应在512M以上,硬盘在80G以上。确认该计算机已经安装了Web服务器软件Tomcat5.0,数据库软件M
9、ySQL5.2。操作系统:Windows XP/2000客户端:Intel Celeron2.53(或与此相当的CPU)以上配置的PC机,有网络接口卡(NIC),内存应在512M以上,硬盘在10G以上,WindowsXP/2000操作系统,安装Web浏览器。网络:服务器和客户端应有网络连通,配置TCP/IP协议。2.3.2 系统开发平台电脑配置:CPU:Intel Celeron2.53 内存:DDR 512M 硬盘:80G操作系统:Microsoft Windows XP 中文版开发环境:MyEcl第3章 总体分析3.1 系统结构图经过需求分析阶段的工作,系统必须“做什么”已经清楚了,总体设
10、计阶段将站在全局高度上,通过成本、可行性方案的比较,选择最佳的软件结构,从而用较低成本开发出较高质量的软件系统。系统结构图采用三层结构模型,它的工作原理如图3.1所示。用户界面层 业务处理层数据存储层Service网上书店操作界面 数据库图3.1 三层结构原理图采用三层构架以后,用户界面层通过统一的接口向业务层发送请求,业务层按自己的逻辑规则将请求处理之后进行数据库操作,然后将数据库返回的数据封装成类的形式返回给用户界面层。这样用户界面层甚至可以不知道数据库的结构,它只要维护与业务层之间的接口即可。3.2 系统模块图根据需求分析及三层架构设计的思想,设计出系统功能模块如图 4.2所示。网上书店
11、书店客户 管理员注册修改个人信息浏览图书选购图书评价图书评价管理订单管理销售管理库存管理图书信息管理用户管理3.3 系统主要处理流程本系统的系统流程图如图3.3 所示。图3.3 系统流程图 第4章 详细设计通过系统分析,对网站的建设有了整体的认识,详细设计这一块主要是对各个功能细节的处理和设计,包括uml建模中的系统用例,类图,以及各个子模块的顺序图,数据库详细设计中的实体E-R图,物理结构的设计,以及网站的形象设计。这一块结束后,对整个网站实现的内容就有了清楚的认识。4.1 uml设计网上书店的用例图如图4.1 所示。图4.1 系统用例图4.1.2 子模块序列图1.会员下订单该用例是客户端下
12、在客户登录后可以将浏览选中的图书放入购物车,根据需要选择图书并下订单,该用例的流程如下:(1)用户指定相应的图书种类进行搜索,得到相应的图书信息;(2)选中自己需要的图书并选择其定购的数量放入购物车;(3)提交下订单请求,系统检查用户是否登录,若用户未登录转(4),否则返回个人信息由用户确认,转(5);(4)用户登录系统,重新进入购物车页面,转(3);(5)顾客确认自己的信息后,由系统数据库记录订单信息更新订单表;(6)数据库更新成功后,返回顾客下订单成功的消息。时序图如图4.2所示。图4.2 下订单时序图该用例是客户可以对图书的使用、性价比等进行评价,该用例执行的流程如下: (1)用户提交评
13、价的请求,系统检查用户是否登录本系统,若登录,由系统返回评价界面,转(3),否则,进入提示登录页面,转(2); (2)用户登录系统,转(1); (3)用户填写并提交评价信息; (4)由系统更新数据库中的评价信息表; (5)数据库返回数据添加成功的消息,系统将评价信息返回给顾客。时序图如图4.3 所示。图4.3 会员评价时序图 3.管理员修改图书该用例是管理员可以根据图书信息的变动情况可以修改图书的相关信息,该用例的执行流程如下: (1)管理员登录系统后,提交要搜索的图书信息,系统搜索数据库中的图书表,向管理员返回符合要求的图书信息; (2)管理员选择要修改的图书,向系统提交修改请求,系统返回修
14、改图书信息的页面; (3)管理员修改图书信息,并提交给系统处理; (4)系统更新数据库中图书表的信息,并返回修改成功的页面。时序图4.3 所示。图4.3 管理员修改图书时序图4.1.3 类图如图4.4 类图User,Purview,Distribute为基础类,UserDao为接口,声明了访问数据库的所有方法,UserDaoImpl实现了UserDao,为UserDao里面的方法书写了具体的实现。UserService也是接口,提供了实现业务的方法,UserServiceImpl实现了UserService,为UserService书写了具体的实现。LoginFrame类建立登录的界面,Reg
15、isterFrame类建立注册界面,在LoginFrame面板上点击“登录”按钮进入的都是为普通用户注册。UserFrame是用户登录进去的界面。ManageBlock是用户管理员分配权限。4.2 数据库设计4.2.1 E-R图E-R图表示了实体之间的联系,每个顾客可以订购n本图书,1本图书也可以被n个顾客订购,所以顾客与图书之间的是多对多的联系。每个顾客可以对n本书进行评价,一本图书对应n个评价,因此,顾客与图书之间又有了“评价”这个联系表。多本图书对应一个类型,图书与图书类型之间是n对1的关系。E-R图如图4.4。订货模块nnn 图书 顾客n分配权限nn1评价属于属于n1图书类型n权限图4
16、.4 E-R图4.2.2关系图图4.5 关系图4.2.3 物理结构在服务器上创建一个名为book的数据库。包括以下表:表1 图书表(book)字段名字段类型长度NULL说明备注bookIdint否图书编号主键bookNamevarchar30否图书名称bookAuthorvarchar20否图书作者bookPubDatedatetime否图书出版日期bookPublishervarchar30图书出版社bookPicvarchar20图书封面bookOldPricefloat5图书原价bookNewPricefloat5否图书现价bookDetailvarchar200图书详情bookInDa
17、tedatetime否图书入库日期默认为编辑日期bookOutDatedatetime图书出库日期默认为编辑日期bookStatusint图书的状态用于管理员设置首页显示的图书表2 顾客表(custom)字段名字段类型长度NULL说明备注customIdint否顾客编号主键customNamevarchar10否顾客帐号customPassvarchar20否顾客密码customEmailvarchar30顾客邮箱customAddressvarchar60顾客地址customTelevarchar15顾客联系号码表3 订单表(orderA)字段名字段类型长度NULL说明备注orderIdin
18、t否订单编号主键orderCountint否订购的商品的数量orderStatusint否订单的状态存于购物车为1,已付款为2,已发货为3orderDatedatetime订货日期默认为编辑日期orderSolveDatedatetime送货日期默认为编辑日期orderToZipint联系人的地区 orderToTelevarchar15联系人号码orderToNamevarchar20联系人姓名orderToAddressvarchar30联系人地址表4 评价表(say)字段名字段类型长度NULL说明备注sayIdint否评价编号主键sayContentvarchar200否评价内容sayT
19、imedatetime否评价日期默认为编辑日期sayYesint否支持数目默认为0sayNoint否否定数目默认为0sayMoodint读书心情sayPlaceint读书地点表5 图书类型表(catagory)字段名字段类型长度NULL说明备注catagoryIdint否图书种类编号主键catagoryNamevarchar20否图书种类名称catagoryDetailvarchar200图书种类的描述表6 权限表(purview)字段名字段类型长度NULL说明备注purviewIdint否权限编号主键purviewNamevarchar10否权限名称puriviewDetailvarchar
20、50权限描述表7 分配权限表(distribute)字段名字段类型长度NULL说明备注distributeIdint否分配表的编号主键表8 模块表(block)字段名字段类型长度NULL说明备注blockIdint否模块编号主键blockNamevarchar20否模块名称blockDetailvarchar100模块描述4.3 界面设计 4.3.1 登录模块登录模块主要对管理员登录信息的验证,查询管理员表确认账号和密码无误后即可登录,登录后对相应的模块可以进行管理,例如书籍管理、书籍类别管理、 订单管理、会员管理、系统管理等。4.3.2 书籍管理管理员登陆系统之后,点击书籍管理,再点击书籍列
21、表就可以看到以分页形式出现的书籍表,在操作一栏中,可以对书籍进行修改或删除操作,点击添加书籍即可添加新的书籍。4.3.2.1 添加图书管理员可以增加一条书籍信息并发布。4.3.2.2 删除图书管理员可以点击进入书籍列表后,点击删除按钮并确认,即可删除书籍。4.3.3 订单管理管理员登陆系统之后,点击订单管理,再点击订单列表就可以看到以分页形式出现的订单记录,在操作一栏中,点击查看订单内容详细信息,查看用户购买的物品,管理员完成相应的业务操作(配送物品),再进行订单状态的修改。第5章 测试5.1 测试过程在进行软件测试时,遇到了不少的问题,下面举出几个例子:1.启动项目,访问服务器报 400客户
22、端错误解决方法:删掉直接在工作空间复制粘贴的项目,必须使用import导入项目。严重: Exception loading sessions from persistent storage原因:tomcat对硬盘的session读取失败。在重新启动Tomcat的webapp的时候,禁止把session写入文件。 修改conf/context.xml 取消注释: !- -3.sql查询语句出错:select * from (select rownum ro,BOOKID, BOOKNAME, BOOKFUNPRICE, BOOKPRICE, BOOKPREP,BOOKTIME from book
23、 where rownum=?java.sql.SQLException: ORA-00936: 缺少表达式java.sql.SQLException: ORA-01006: 赋值变量不存在解决方法:多了一个where。认真。第6章 结论经过为期一个多星期的设计,终于初步完成了老师要求的功能。因为时间比较紧凑,这个网上书店的项目分作三个学期,这个学期主要是完成图书的展示以及查询。这个项目实现的功能还是比较简单,刚开始我打算用struts+hibernate实现,使用hibernate的便利在于能够实现数据库的反转,但是如果对它的数据持久化不了解,对配置文件中一对多、或者多对多的关系不能灵活运用
24、,在界面上获取数据的时候必定会遇到很大的麻烦。由于培训过了一段时间,我在项目开始的前两天,是温习了一下css+div,分析界面上应该获取什么数据,如何设计hibernate的配置文件,又花了两天的时间温故知新知识点。到了星期五,我的代码部分基本实现,用了一个最简单的动作,复制粘贴项目在工作区间,访问数据库的时候就碰到了一个 400客户端的错误,我试了好几种方法,比如,不使用myeclipse自带的tomcat,自己配置一个tomcat6.0、jdk,又将myeclipse6.0换成了8.0,在网上找了些方法,还是不行,头脑发热,又重新用mvc写,不得不说mvc真没技术含量,大片大片的代码重复,
25、本来想写购物车,后来,看到代码那么不简洁,干脆就偷懒不写了,省事,明年接着写。在整个项目中,学到最多的是div+css,今年的这个界面是通过一个比较大的网页整改的,最后只留下了现在简单的设计, 在这个过程当中,由于dreamweaver中的静态网页,换成动态网页,在布局上有很多细节的改变,在调试布局上,真的需要不少的耐心。不过,最后的界面还是令人满意的。做程序还是要经的起折腾,其实 400客户端错误很简单,只需要删掉直接在工作空间复制粘贴的项目,必须使用import导入项目。但是我却放弃了,重新来过。没有估计到后面带来的困难。以后做事还是要慎重。附录 参考文献1 王行言. Java语言与面向对
26、象程序设计-2版M. 北京:清华大学出版社,2007:978-7-302-15836-3.2 张海藩. 软件工程导论-5版M. 北京:清华大学出版社,2008.附录 源代码public class DbUtil private PreparedStatement pstmt = null;private Connection con = null;public DbUtil() try Class.forName(com.mysql.jdbc.Driver);con=DriverManager.getConnection(jdbc:mysql:/localhost/ShoppingBook10
27、_1,root, root); catch (ClassNotFoundException e) e.printStackTrace(); catch (SQLException e) e.printStackTrace();public Connection getCon() return con;public void close() if (pstmt != null) try pstmt.close(); catch (SQLException e) e.printStackTrace();if (con != null) try con.close(); catch (SQLExce
28、ption e) e.printStackTrace();public class BookDaoImpl implements BookDao /* * 显示书籍 * param type * 显示类别(热卖,新书,降价,特别推荐) * param flag * 表示是否是(热卖,新书,降价) */public List showBooks(int type, int flag) List all = new ArrayList();PreparedStatement pstmt = null;DbUtil dbUtil = null;ResultSet rs = null;String s
29、ql = null;if (type = 0) sql = select * from tb_book;/ 显示所有书籍try dbUtil = new DbUtil();pstmt = dbUtil.getCon().prepareStatement(sql);rs = pstmt.executeQuery();while (rs.next() Book book = new Book();book.setBookId(rs.getInt(bookId);book.setBookName(rs.getString(bookName);book.setISBN(rs.getString(ISB
30、N);book.setPages(rs.getInt(pages);book.setAuthor(rs.getString(author);book.setPublisher(rs.getString(publisher);book.setIntroduce(rs.getString(introduce);book.setPrice(rs.getFloat(price);book.setNowPrice(rs.getFloat(nowPrice);book.setPicture(rs.getString(picture);all.add(book); catch (SQLException e
31、) e.printStackTrace(); finally try rs.close();pstmt.close();dbUtil.close(); catch (SQLException e) e.printStackTrace(); else if (type = 1) / 热卖书籍sql = select * from tb_book where hostBooks=?;if (type = 2) / 新到书籍sql = select * from tb_book where newBooks=?;if (type = 3) / 打折书籍sql = select * from tb_b
32、ook where saleBooks=?;if (type = 4) / 特别推荐sql = select * from tb_book where specialBooks=?;try dbUtil = new DbUtil();pstmt = dbUtil.getCon().prepareStatement(sql);pstmt.setInt(1, flag);rs = pstmt.executeQuery();while (rs.next() Book book = new Book();book.setBookId(rs.getInt(bookId);book.setBookName
33、(rs.getString(bookName);book.setISBN(rs.getString(ISBN);book.setPages(rs.getInt(pages);book.setAuthor(rs.getString(author);book.setPublisher(rs.getString(publisher);book.setIntroduce(rs.getString(introduce);book.setPrice(rs.getFloat(price);book.setNowPrice(rs.getFloat(nowPrice);book.setPicture(rs.ge
34、tString(picture);all.add(book); catch (SQLException e) e.printStackTrace(); finally try rs.close();pstmt.close();dbUtil.close(); catch (SQLException e) e.printStackTrace();return all;/* * 根据书的BookId号来展示该书的详细信息 * param bookId * 书籍号 * return Book */public Book showBookById(int bookId) Book book = new
35、Book();PreparedStatement pstmt = null;ResultSet rs = null;DbUtil dbUtil = null;String sql = select * from tb_book where bookId=?;try dbUtil = new DbUtil();pstmt = dbUtil.getCon().prepareStatement(sql);pstmt.setInt(1, bookId);rs = pstmt.executeQuery();if (rs.next() book.setBookId(rs.getInt(bookId);bo
36、ok.setBookName(rs.getString(bookName);book.setIntroduce(rs.getString(introduce);book.setISBN(rs.getString(ISBN);book.setAuthor(rs.getString(author);book.setPages(rs.getInt(pages);book.setPublisher(rs.getString(publisher);book.setPrice(rs.getFloat(price);book.setNowPrice(rs.getFloat(nowPrice);book.se
37、tPicture(rs.getString(picture); catch (SQLException e) e.printStackTrace(); finally try rs.close();pstmt.close();dbUtil.close(); catch (SQLException e) e.printStackTrace();return book;/* * 将书本信息录入数据库 */public boolean addBook(Book book) boolean flag = false;PreparedStatement pstmt = null;DbUtil dbUti
38、l = null;String sql=insert into tb_book values(null,?,?,?,?,?,?,?,?,?,?,? Null,?,?,?,?);try dbUtil = new DbUtil();pstmt = dbUtil.getCon().prepareStatement(sql);pstmt.setInt(1, book.getSuperTypeId();pstmt.setInt(2, book.getSubTypeId();pstmt.setString(3, book.getBookName();pstmt.setString(4, book.getI
39、SBN();pstmt.setString(5, book.getIntroduce();pstmt.setFloat(6, book.getPrice();pstmt.setFloat(7, book.getNowPrice();pstmt.setString(8, book.getPicture();pstmt.setInt(9, book.getPages();pstmt.setString(10, book.getPublisher();pstmt.setString(11, book.getAuthor();pstmt.setInt(12, book.getNewBooks();pstmt.setInt(13, book.getSaleBooks();pstmt.setInt(14, book.getHostBooks();pstmt.setInt(15, book.getBookNum();int i = pstmt.executeUpdate();if (i != 0) return flag;/ 插入书籍成功 catch (SQLException e) e.printStackTrace();return flag;/* * 分页显示书籍 * param type * 按要求显示相应的书籍 * param currentPage * 显示出来的当前页码 *