网上购书系统的设计Word文件下载.docx
《网上购书系统的设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《网上购书系统的设计Word文件下载.docx(25页珍藏版)》请在冰豆网上搜索。
1.4.3订单管理功能13
1.4.4图书查询和管理功能14
1.4.5用户管理功能15
1.5算法设计16
1.5.1购买图书功能算法设计16
1.5.2登录功能算法设计17
1.5.3查询图书功能算法设计17
1.5.4管理用户算法设计17
1.5.5订单维护算法设计17
1.5.6图书详细信息算法设计17
1.6界面设计18
1.7本章小结19
第1章网上购书系统详细设计与实现
1.1软件体系结构设计
本系统主要有两层,一层是存储管理,那是数据库存储了了本系统用到的数据库表以及数据。
下面主要是管理员管理,和用户的操作。
其实用户也可以管理,只不过可以管理自己的密码,和所下的订单。
对于密码用户可以修改,也可以让管理员修改。
用户所下的订单,可以删除。
可以删除自己某个订单。
至于管理员,权限就很广了,管理员不但可以对订单进行处理和查询,还可以对图书信息和用户信息进行维护和查询。
同样是列出列表,但是管理员可以按图书的销量;
新上架多少本的图书;
按图书的作者,出版社,分类(java,数学,英语等….),书名进行模糊查询,点击图书的图片可以看到图书的详细信息,删除该书,更改该书的库存量更改图书的照片。
同样也可以添加图书,利用填写表单的方式添加一本图书,当然有表单验证,比如书籍的销售量不能是负的,书籍的名称不能是数字,字母等。
对于用户,单机用户名可以查看用户的详细信息,而且用户的密码作为管理员可以修改,管理员可以删除用户。
管理员可以对所有用户的所有订单以及所有订单下的订单项进行维护。
本系统是基于MVC设计模式,B/S架构的在线购书电子商务应用系统,它具有以下功能:
1.在线图书浏览、注册用登录、图书购买及个人信息管理等功能。
2.图书信息添加、关键字搜索(包括分类查询和书名查询,按作者出版社查询等)、详情查询、信息修改、删除;
用户信息详情查询、修改、删除;
订单信息详情查询、修改、删除及订单用户详情查询。
本系统中的数据库查询采用了分页式查询处理技术。
这样便可大大提高数据的查询速度,同时可避免因查询的数据量过大而引起数据库服务器的超负荷运行甚至系统崩溃。
此外,本系统使用MVC模式,方便了今后对系统的维护及扩展。
系统至少可支持100个用户的同时在线访问。
本系统将使用MySql5.0作为数据库存储系统。
开发平台为Myecplise7.1.开发语言为java/j2EE。
1.2数据库设计
1.2.1数据库技术概念描述
数据库技术是计算机科学技术中发展最快的领域之一,也是应用最广的技术之一,它已成为计算机信息系统与应用系统的核心技术和重要基础。
数据库,是存放数据的仓库。
数据是按一定的格式存放的。
数据库是指长期储存在计算机内、有组织的、可共享的数据集合,它是数据管理的最新技术,是计算机科学的重要分支。
数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。
今天,信息资源已经成为各个部门的重要财富和资源。
建立一个满足各级部门信息处理要求的行之有效的信息系统也成为一个企业或者组织生存和发展的重要条件。
因此,作为信息系统核心和基础的数据库技术得到越来越广泛的应用,从小型单项事务处理系统到大型信息系统,从联机事务处理到联机分析处理,从一般企业管理到计算机辅助设计与制造(CAD/CAM)、计算机集成制造系统(CIMS)、办公信息系统(OIS)、地理信息系统(GIS)等,越来越多新的应用领域采用数据库存储和处理他们的信息资源。
对于一个国家来说,数据库的建设规模、数据库信息量的大小和使用频率已成为衡量这个国家信息化程度的重要标志
1.2.2数据库管理系统(DBMS)概述
数据库管理系统是位于用户与操作系统之间的一层数据管理软件。
他是数据库系统的一个重要组成部分,其主要功能包括以下几个方面:
1.数据定义功能
DBMS提供数据定义语言(DDL),用户通过它可以方便地对数据库中的数据对象进行定义。
2.数据操纵功能
DBMS还提供数据操纵语言(DML),用户可以使用DML操纵数据实现对数据库的基本操作,如查询、插入、删除和修改等。
3.数据库的运行管理
数据库在建立、运用和维护时由数据库管理系统统一管理、统一控制,以保证数据的安全性、完整性、多用户对数据的并发使用及发生故障后的系统恢复。
4.数据库的建立和维护功能
它包括数据库初始数据的输入、转换功能,数据库的转储、恢复功能,数据库的重组织功能和性能监视、分析功能等。
1.2.3数据字典
网上商店中有以下几个实体:
用户,图书分类,图书,订单,订单项。
1.订单项表(orderitem)
Orderitemid(订单项id),quantity(订单项所对应的图书的购买的数量),ordersid(订单项所属订单的编号),bookid(订单项所对应的书籍的编号)。
见订单项表如表3-1所示。
表3-1orderitem订单项表
字段名称
数据类型
键值
自增
允许为空
描述
Orderitemid
Int
主键
增一
标志id
Quantity
数量
Ordersid
外键
是
所属订单
bookid
所属图书编号
2.用户表(user)
id(用户的编号),username(用户名),password(密码),realname(用户的真实姓名),sex(用户的性别),email(用户的电子邮箱),address(用户的地址),post(用户的邮编),tel(用户的电话号),logintime(用户登录的次数),role(角色)。
见用户表如表3-2所示。
表3-2user用户表
id
Int
username
Varchar(20)
用户名
Password
密码
realname
Varchar(50)
真实姓名
Sex
Varchar(10)
性别
email
电子邮箱
address
地址
Post
Varchar(25)
邮编
tel
电话
logintime
登陆次数
Role
角色
3.订单表(order)
ordersid(订单编号),userid(订购者的编号),ordersdate(订单的日期)state(订单状态)。
见订单表如表3-3所示。
表3-3order订单表
orserid
ordersdate
订单时间
state
订单状态
Userid
订购者id(外)
4.图书表(book)
bookid(图书编号),bookname(图书名字),price(价格),picture(图书的图片路径),kindname(图书分类),author(作者),publish(出版社),sellcount(销售量),storage(库存量)。
见图书表如表3-4所示。
表3-4book图书表
Bookid
Bookname
图书名
Price
价格
Picture
Varchar(30)
封面
kindname
图书类别
author
Varchar(15)
作者
publish
出版社
sellcount
销售量
storage
库存量
1.3类设计
系统功能包主要有:
与数据库的表对应属性字段的实体com.bookstore.bean;
在dao文件中,编写jdbc代码,让实体bean与数据库交互的com.bookstore.dao;
介于jsp与dao文件之间,用于调用dao文件com.bookstore.action;
与其对应的bean文件一样,但是用户可以在jsp页面提交后,在action中可以自动获得,类继承com.bookstore.form;
Junit测试包,是一种白盒测试,专门测试dao文件是否能用,有没有错误com.bookstore.test。
1.3.1com.bookstore.action包中的类
1.3.1.1bookaction.java中方法详细介绍
1.showbook()查询出所有图书,转入一个jsp显示书籍列表。
2.viewbook()根据bookid查询图书的详细信息,转入一个jsp显示详细信息。
3.NewTenBook()查询出最新上架的十本书籍,转入一个jsp显示这些书籍的书籍列表。
4..selectColumn()显示图书按什么查询的字段,按作者,出版社,还是书籍类型,就是选择要显示的字段转入一个jsp显示。
5.showBookColumn()根据上个方法选择的字段,将字段值查出来,查询出按条件查询出的书籍,转入jsp中并显示书籍列表
6.sortBookTw()显示销售量前20的书籍,按销售量降序排列,放到一个列表中。
再跳转到一个jsp中显示这个列表。
7.sortBookAll()将所有书籍按销售量排列,按销售量降序排列,放到一个列表中。
再跳转到一个jsp中,遍历显示这个列表。
8.addBook()添加图书。
1.3.1.2useraction.java中方法详细介绍
1.register()用户注册,获取表单的值,传到数据库,来添加一个普通用户。
2.login()用户登录,先查询出在数据库中有无该用户名,在判断和数据库中的密码是否一致,然后再根据用户名查询出该登录用户的角色是普通用户还是管理员。
跳转到不同的页面。
3.showUser()先判断是不是管理员,如果是查询出所有用户,放到一个列表里,再跳转到一个jsp中遍历该列表,来显示所有用户信息。
4.viewUserById()根据用户传到此方法的id,查询数据库该用户的详细信息,放到request对象中,传入下一个jsp中。
5.updateUser()根据用户的id和用户新的password更改数据库中该用户的密码。
6.deleteById()根据用户id删除该用户。
7.logout()退出系统,关闭当前会话(删除session中的信息),回到主页。
1.3.1.3Ordersaction中方法详细介绍
1.PublicstaticCartcart不是一个方法,而是一个静态变量。
是一个购物车对象,详见购物车类请看第二章。
为什么要设置为静态的呢?
因为购书可能反复购书。
调用多次ordersaction.java,可能会产生多个ordersaction.java实例,如果设置成静态的,有利于共享,一个用户在不同的会话(当禁了Cookies时session不一样,当然IE浏览器除外,火狐能看出来)共享一个购物车。
2.shopping()购买书籍,每一次提交完购买数量后都会调用该方法。
将图书放入到购物车中。
3.removeItem()清空购物车中的内容。
4.saveOrder()用户点击进入结算中心,会将订单和订单项存到数据库中,等待管理员维护。
先遍历购物车,将购物车中的订单项遍历出来,依次保存在订单中。
再将订单保存在数据库中。
5.selectAllOrders()显示所有的订单到一个jsp中,跟显示所有图书,显示所有用户一样。
这个只有管理员才能操作的,该方法会先判断权限是不是管理员身份。
6.viewOrderById()显示出一个订单的详细信息包括订单的状态,和该订单下所有的订单项。
7.showMyOrders()显示当前用户的所有订单。
8.deleteOrderById()根据订单的编号,删除一个订单。
9.ModifyOrdersState()只有管理员才能调用,更改某个订单的状态。
1.3.1.4UploadAction.Java下的方法
execute()更改该书的图片,将图片上传到wedRoot下的image文件夹中。
由于Uploadaction.java没有继承dispatchAction,所以只有一个execute方法。
1.3.2com.bookstore.bean包中的类
1.图书类book.java
book类中有bookid(图书编号),bookname(图书名字),price(价格),picture(图书的图片路径),kindname(图书分类),author(作者),publish(出版社),sellcount(销售量),storage(库存量)。
见实体类图如图3-7所示。
2.用户类user.java
Use中id,username,password,realname,sex,email,address,post,Tel,logintimes,role,orderses,.分别是用户编号,用户名,密码,真实姓名,性别,电子邮箱,家庭住址,邮编,电话,登陆次数,角色(包括管理员和普通用户,管理员是1,用户是2),orderses是一个HashSet集合,包括一个用户对象的所有的订单,orderses就是一个所有订单集合。
一个用户对应多个订单。
3.订单类orders.java
Ordersid(订单号),user1(订单所属的用户),orderitemdate(订单生成的时间),state(订单状态:
包括处理中;
缺货中;
已发货如果设置成已发货那么订单里的订单项里的图书销售量相应的增加,同时库存量减少)。
Orderitems(一个订单里所有的订单项的集合)。
一个订单对应多个订单项。
但一个订单指数与一个用户。
4.订单项orderitem.java
Orderitemid(订单项编号),quantity(购买图书的个数),orders1(该订单项所属的订单),book1(该订单项对应的图书),一个订单项就是对图书的封装,订单项中除了对图书的封装还有该图书的购买数量。
5.购物车Cart.java
Cart类中有一个属性也是集合的,但是items其实是该订单所有订单项的集合,item是Map<
Integer,orderitem>
类型的,健是图书的编号,值是订单项。
Cart中的方法publicCart()是构造函数,初始化items,addBook(Integerbookid,orderitemorderitem1)想购车中增加一本书,updateCart(Integerbookid,intquantity)更改图书数量,publicintgetTotalPrice()计算总价。
6.备注:
以上类说明省略setXXX()getXXX()方法。
图3-7实体类图
1.3.3com.bookstore.dao包中的类
1.3.3.1bookdao.java中的方法
1.ArrayList<
book>
showBook()连接数据库显示所有的图书信息,放在一个列表中,返回该列表。
该方法被bookaction.java中的showbook()调用。
2.bookviewBook(intid)连接数据库,根据id将该书的所有字段信息查出来,复制到一个book对象中。
返回该对象。
该方法被bookaction.java中的viewbookById()调用。
3.ArrayList<
showNewTenBook()连接数据库将最新上架的是本书的详细信息查出来,放到一个列表中,返回该列表。
该方法被bookaction.java中的NewTenBook()方法调用。
4.ArrayList<
ListString>
SelectColumn(Stringcolumn)根据参数值,参数值为book表中的三个字段其中之一author或publish或kindname(看用户选择按什么查找,按出版社,查出来的就是各个出版社。
按作者查出来的就是该数据库中book表中的所有作者)查询出该字段下的所有值,放入一个列表中,返回该列表。
被bookaction.java中的SelectColumn()方法调用。
5.ArrayList<
ShowBookColumn(),根据上一个选择,比如选择了按作者查而后调用了上面的方法又选择了作者是“鲁迅”的书,那么该方法就将鲁迅的所有书籍从数据库中查出来,放到一个列表中。
如果选择了按出版社,上边的方法会将所有的出版社查出来,假如有“教育出版社”,“电子工业出版社”,“清华大学出版社”等,那么我选择了清华大学出版社,提交调用了本方法。
会将清华大学出版社出版的所有书籍查询出来,放入一个列表中。
同理,按照图书的kindname查询也一样。
最后返回该列表。
本方法被bookaction中的showBookColumn()方法调用。
6.ArrayList<
showBookTw()按降序查询出销售量排名前20的书籍,放入一个列表中,返回该列表。
该方法被bookaction.java中的SortBookTw()用。
7.ArrayList<
showBookAll()查询出所有的书籍的销售排行,放入一个列表中,返回该列表。
该方法被bookaction.java的SortBookAll()方法调用。
8.VoidmodifySellCountStorage(intbookid,intnewsellCount,intnewStore)更改订单状态,假如订单状态更改为finished时,该订单的订单项所对应的书籍的销售量增加至newSellcount,库存量减少至newStorage。
该方法被ordersaction.java中的modifyOrdersState()方法所调用。
1.3.3.2userdao.java中的方法
1.intlogin(Stringusername,Stringpassword),用户登录验证并调用同类中的login2(Stringusername)。
本方法被useraction.java中的login()方法调用。
2.intlogin2(Stringusername)用户每一次登录,将登录的次数加1。
3.intgetRole(Stringusername)查询出当前用户的角色,返回当前用户的角色,被useraction.java中的login()方法调用,来跳转到不同的页面。
4.addUser1(useruser1)注册一个新用户,其实就是添加一个新用户到数据库中。
此方法被useraction.java中的login()方法调用。
user>
showuser(),将所有的用户查询出来放到一个列表中。
并返回该列表。
该方法被useraction.java中的showUser()方法调用。
6.userviewUser(intid),根据id查询出该用户的详细信息,复制到一个user对象中去,返回该对象,该方法被useraction.java中的viewUserById()方法调用。
7.StringupdateUser(intid,Stringpassword)根据id和password更新该用户的密码。
该方法被useraction.java中的updateUser()方法调用。
8.deleteUser(intid)根据传进来的id删除这个用户,返回用户id,此方法被useraction.java中的DeleteById()方法调用。
9.intgetUserId(Stringusername)根据用户名字返回用户的id号。
1.3.3.3ordersdao.java中的方法
1.intsaveOrder(ordersorder),用户生成一个订单,并将订单详细信息,并将这个订单存到一个orders的一个对象中,将这个对象的各个属性的值存到数据库对应的字段的值中。
就是将订单存到数据库。
该方法被ordersaction.java中的saveOrder()方法调用。
2.ArrayList<
orders>
selectAllOrders(),从数据库里查询所有订单放到一个列表中。
返回该列表。
该方法被ordersaction.java中的sel