基于MVC网上书店管理系统的设计与实现毕业设计论文.docx
《基于MVC网上书店管理系统的设计与实现毕业设计论文.docx》由会员分享,可在线阅读,更多相关《基于MVC网上书店管理系统的设计与实现毕业设计论文.docx(50页珍藏版)》请在冰豆网上搜索。
基于MVC网上书店管理系统的设计与实现毕业设计论文
基于MVC网上书店管理系统的设计与实现
绪论
随着社会的不断发展,网络技术的不断进步,网络逐渐的融入了人们的生活之中。
网络的方便、快捷、便宜、全面等优点也逐渐的在各个领域中所体现出现。
因而越来越多的人利用网络的资源来推销自己的产品或者购买自己喜欢的商品。
科技的快速发展,导致了人们知识的匮乏,想要增长自己的知识,必不可少的一个途径,就是多看书,看好书。
但书籍有好有坏有贵有便宜,怎样才能快速了解它的详细信息呢?
因而我开发了一个网上书店系统。
本系统既能提供卖家在网上销售图书,也支持买家在网上快速浏览图书信息,并购买自己喜欢的图书,从而形成买卖双方互赢的局面。
1平台简介
1.1开发平台
本系统主要是使用JSP+CSS+HTML开发系统界面,并且结合JavaServlet实现局部刷新以及使用JDBC和Oracle数据库进行数据交互。
1.1.1服务器端
WindowsServer/XP/WIN7Oracle10g或以上版本
1.1.2客户端
Windows98/Server/XP/WIN7InternetExplore8.0以上。
1.1.3系统开发工具
Eclipse、Dreamweaver、Tomcat
1.2制作工具及系统相关技术介绍
用Dreamweaver作为系统开发的辅助工具,运用JSP+HTML+CSS设计系统的表现层。
使用JS实现动态部分,Oracle提供的数据层。
1.2.1JSP简介
JSP将网页逻辑层与表现层分离,降低各个模块间的耦合度,利用系统开发。
JSP页面由HTML代码和Java脚本所组成。
用户第一次访问JSP页面时,Web服务器会将其编译成Javaservlet,以后用户如果再次访问此页面时,就会直接访问编译后的Javaservlet文件而无需再次编译。
服务器会将响应的信息,即HTML页面返回到客户端的浏览器上,直观的显示给用户。
1.2.2使用JSP作为开发工具的原因
(1)将逻辑层和表现层进行分离。
(2)它强调组件的可重用性。
2系统分析
2.1系统的需求分析
开发本系统目的是为了方便用户购书图书以及管理员管理图书。
开发的系统应该操作简单,如果系统过于复杂,就降低了用户的可使用价值。
2.2系统的可行性分析
2.2.1技术可行性
只要能够上网,就可以使用本系统。
该系统是使用JSP+CSS+HTML开发的系统界面和Oracle10g创建的数据库,。
2.2.2经济可行性
此系统可以运行在能够上网的电脑上。
并且使用的开发工具都是免费的,所以在经济上是完全可行的。
2.2.3操作可行性
系统界面的设计模式符合人们的习惯,系统操作比较方便易学。
而且所有网页的设计都比较清新、简洁、合理,不会让用户感到任何的视觉疲劳。
系统可操作性比较高。
3网上书店总体设计
3.1系统的总体设计
网上书店系统由注册登录模块、用户模块、管理员模块和退出系统模块四大模块组成,并且各个大模块下又包含一些小模块。
下面介绍各个功能模块:
(1)注册登录模块
用户首次使用本系统时,必须先注册一个新的账户,用户注册成功后才能登录本系统并进行购买图书的操作,管理员亦之。
(2)用户模块
①图书模块
用户可以通过首页的分类导航菜单查看书籍信息,也可以通过搜索的方式:
按图书的书名、类型、价格、出版社、作者、数量、简介、销售量等任一种或者多种条件进行模糊查询,还可以点击书名或者书的图片快速浏览此书的详细信息。
②购物车模块
用户购书时,点击“加入购物车”按钮,系统会将此图书放入购物车中。
在购物车中,用户还可以对其进行查看、删除的操作。
③收藏夹模块
用户浏览书籍时,按下“收藏宝贝”,就可以将书籍放入自己的收藏夹,便于购买。
在收藏夹中,用户还可以对其进行查看、删除、购买操作。
④地址管理模块
用户购买书籍时,需要填写邮寄地址,同时也可以对其进行修改和删除的操作。
(3)管理员模块
登录本系统时选择管理员登录后,才能对菜单管理、交易管理、宝贝管理和订单管理进行相关的操作。
①交易管理
交易管理包括已卖宝贝管理和评价管理两部分。
a、已卖宝贝管理
管理员可以查看已经卖出的宝贝信息,从而总结出消费者更喜欢哪类书籍。
b、评价管理
管理员可以查看用户对书籍的评价情况。
②宝贝管理
宝贝管理包括发布宝贝、宝贝修改、宝贝下架、热销宝贝、新到宝贝和所有宝贝。
a、发布宝贝管理
管理员可以添加新书,包括书籍的书名、类别、单价、出版社、作者、库存、简介和图片等信息。
b、宝贝修改管理
管理员可根据ISBN、图书的名称、类型、出版社、作者等任一种或多种条件进行模糊查询。
在查询的结果中,可以对图书进行修改操作。
c、宝贝下架管理
管理员可根据ISBN、是否为新书、是否为热书、图书的名称、类型、价格、销量、库存、出版社、作者等任一种或多种条件进行模糊查询。
在查询的结果中,对图书进行删除操作。
d、热销宝贝管理
管理员可以快速查看图书的销售信息,从而了解用户对各类书籍的喜爱程度。
e、新到宝贝管理
管理员可以查看新到的书籍情况。
f、所有宝贝管理
管理员可根据图书的销量、库存、出版社、作者等任一种或多种条件进行模糊查询,从而更加快速的了解图书的情况。
③订单管理
订单管理包括发货管理和所有订单管理两部分。
a、发货管理
管理员通过订单的信息进行发货,如果订单数量较多也可以进行批量发货。
b、所有订单管理
管理员可以根据宝贝名称、成交时间、买家昵称、订单状态、订单编号和评价状态任一种和多个条件作为查询条件进行查询,了解订单的详细信息。
(4)退出系统模块
系统不使用时,直接退出本系统。
3.2系统的功能结构
3.2.1系统功能模块图
网上书店系统主要包括注册登录模块、用户模块、退出系统模块和管理员模块;其中用户模块又包括图书模块、购物车模块、收藏夹模块和地址管理模块;管理员模块包括菜单管理、交易管理、宝贝管理和订单管理,如图3-1所示。
退出系统模块
图3-1系统功能模块图
3.2.2系统流程图
登录系统时,如果用户没有账号,需要先注册一个新的账号,登录时,会进行验证,验证失败会给予提示,成功后进入系统主页面,然后用户就可以查看图书信息,购买图书和修改用户信息的操作。
查看图书信息时,可以直接在主页面进行查看,也可以在购物车或者收藏夹中进行查看;购买图书时,可以将图书加入购物车或者收藏夹进行购买。
如图3-2所示
图3-2系统流程图
3.2.3购书流程图
用户登录网上书店系统后,可以通过首页的图书分类导航、热销排行、新书到店或查询的方式找到想购买的图书,然后将想要购买的图书加入到购物车或者收藏夹中,点击购买按钮,生成订单后,并付款。
当管理员登录本系统后,通过查看已经付款的订单,从而进行发货(或批量发货),最后用户通过查看已买的宝贝,状态为已发货的,对其进行确认收货,这样购书的流程就算完成了,如图3-3所示
图3-3购书流程图
4网上书店详细设计
4.1数据库设计
(1)用户信息表user如表4-1所示:
字段
类型
是否为空
默认
字段含义
ID
number
否
用户ID(主键),自增
Username
varchar2(30)
是
用户名
PWD
varchar2(30)
是
用户密码
Phone
Varchar2(30)
是
null
用户电话
Email
Varchar2(30)
是
null
用户邮箱
Sex
Varchar2(100)
是
null
用户性别
Age
number(10)
是
用户年龄
Job
Varchar2(20)
是
用户职业
UserImage
Varchar2(100)
是
用户头像
表4-1用户信息表user
(2)管理员信息表admin的定义如表4-2所示:
字段
类型
是否为空
默认
字段含义
ID
number
否
管理员ID(主键),自增
AdminName
varchar2(30)
是
admin
管理员姓名
PWD
varchar2(20)
是
admin
管理员密码
表4-2管理员信息表admin
(3)收藏夹信息表favorite的定义如表4-3所示:
字段
类型
是否为空
默认
字段含义
ID
number
否
收藏ID(主键),自增
UserName
varchar2(20)
是
用户名称
ISBN
varchar2(30)
是
国际标准书号
BookName
varchar2(30)
是
图书名称
BookImage
varchar2(100)
是
null
图书图片
表4-3收藏夹信息表favorite
(4)书籍信息表book的定义如表4-4所示:
字段
类型
是否为空
默认
字段含义
ISBN
varchar2(30)
否
图书编号(主键),自增
BookName
varchar2(30)
是
图书名称
BookImage
varchar2(20)
是
null
图书图片
BookType
varchar2(30)
是
图书类型
Price
number
是
图书单价
Publish
varchar2(30)
是
出版社
Author
varchar2(30)
是
作者
Amount
number
是
库存
Introdction
varchar2(500)
是
null
图书简介
IsNew
number
是
是否为新书
IsHot
number
是
是否为热书
Sales
number
是
销量
表4-4书籍信息表book
(5)购物车信息表cart的定义如表4-5所示:
字段
类型
是否为空
默认
字段含义
ID
number
否
购物车ID(主键),自增
UserName
varchar2(20)
是
用户名称
ISBN
varchar2(30)
是
国标标准书号
Num
number
是
购书数量
BookName
varchar2(30)
是
图书名称
BookImage
varchar2(100)
是
null
图书图片
Price
number
是
图书单价
表4-5购物车信息表cart
(6)订单表orders的定义如表4-6所示:
字段
类型
是否为空
默认
字段含义
OrderID
varchar2(30)
否
订单编号(主键),自增
ISBN
varchar2(50)
是
图书编号
Price
number
是
null
图书单价
Num
number
是
购书数量
Total
number
是
总价
UserName
varchar2(30)
是
用户名
Receiver
varchar2(30)
是
收件人名称
Addressinfo
varchar2(30)
是
地址
PostCode
varchar2(20)
是
邮编
Phone
number
是
电话号码
Time
Date
是
时间
IsSend
number
是
是否发货
IsReceive
number
是
是否收货
IsPay
number
是
是否付款
IsAssess
number
是
是否评价
BookName
varchar2(50)
是
图书名称
表4-6订单表orders
(7)收藏夹信息表favorite的定义如表4-7所示:
字段
类型
是否为空
默认
字段含义
ID
number
否
评价ID(主键),自增
Content
varchar2(200)
是
null
评价内容
Score
number
是
宝贝打分
UserName
varchar2(20)
是
用户名称
ISBN
varchar2(20)
是
评价的图书ISBN
OrderID
varchar2(20)
是
订单编号
Time
date
是
订单时间
表4-7收藏夹信息表favorite
(8)地址信息表address的定义如表4-8所示:
字段
类型
是否为空
默认
字段含义
ID
number
否
地址ID(主键),自增
Receiver
varchar2(20)
是
收货人名称
AddressInfo
varchar2(20)
是
地址信息
Phone
varchar2(20)
是
联系方式
PostCode
varchar2(100)
是
邮编
UserName
varchar2(20)
是
用户名称
Province
varchar2(20)
是
省
City
varchar2(20)
是
市
Area
varchar2(20)
是
区
Street
varchar2(20)
是
null
街道
表4-8地址信息表address
4.2数据库连接设计
本系统分为登录与注册模块、用户模块、管理员模块和系统退出模块四部分。
其中用户模块主要包括用户信息的修改、图书管理、地址管理、购物车和收藏夹;管理员模块包括菜单管理、交易管理、宝贝管理和订单管理。
网上书店采用Oracle作为后台的数据库。
我们建立了一个名为xe的数据库用于存放数据,主要代码如下:
publicclassDBUtils{
publicstaticConnectionconn=null;
publicstaticPreparedStatementpstmt=null;
publicstaticResultSetrs=null;
publicstaticStringusername;
publicstaticStringpassword;
publicstaticStringdriver;
publicstaticStringurl;
publicstaticvoidinit()
{InputStreamfis=null;
try{
fis=DBUtils.class.getClassLoader().getResourceAsStream("dbconn.properties");
Propertiespp=newProperties();
pp.load(fis);
username=pp.getProperty("username");
password=pp.getProperty("password");
driver=pp.getProperty("driver");
url=pp.getProperty("url");
Class.forName(driver);
conn=DriverManager.getConnection(url,username,password);
}catch(Exceptione){
e.printStackTrace();
}}}
在src下创建dbconn.properties文件:
内容如下:
username=system
password=root
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:
oracle:
thin:
@localhost:
1521:
xe
4.3登录模块设计
4.3.1用户登录
用户登录时,如果用户输入的内容不符合要求时或者不输入任何内容时都会给予相应的提示信息,如图4-1所示
图4-1用户登录图
主要代码如下:
protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
Stringpath=request.getContextPath();
Stringusername=request.getParameter("username");
Stringpwd=request.getParameter("pwd");
UserServiceuserService=newUserServiceImpl();
AdminServiceadminService=newAdminServiceImpl();
Stringrole=request.getParameter("role");//获取角色0普通用户1管理员
if(role.equals("0")){//普通用户
Useruser=userService.findByUserName_pwd(username,pwd);//根据用户名和密码匹配用户
Useruser1=userService.findByUserName(username);//根据用户名匹配用户
if(user!
=null){
request.getSession().setAttribute("user",user);
Stringvalue=user.getUserName()+":
"+MD5.calcMD5(user.getPwd());//
Cookiecookie=newCookie(path,value);
cookie.setMaxAge(10*60);
cookie.setPath(request.getContextPath());
response.addCookie(cookie);
request.setAttribute("errorstyle","none");
request.getRequestDispatcher("/HomePage.html").forward(request,response);
}else{
if(user1!
=null){
request.setAttribute("errorstyle","block");
request.setAttribute("error","用户密码错误");
request.getRequestDispatcher("/login.jsp").forward(request,response);
}else{
request.setAttribute("errorstyle","block");
request.setAttribute("error","不存在此用户");
request.getRequestDispatcher("/login.jsp").forward(request,response);
}}}
elseif(role.equals("1")){//管理员
Adminadmin=adminService.loginAdmin(username,pwd);
Adminadmin1=adminService.findAdminByAdminName(username);
if(admin!
=null){
request.getSession().setAttribute("admin",admin);
Stringvalue=admin.getAdminName()+":
"+MD5.calcMD5(admin.getPwd());
request.setAttribute("errorstyle","none");
request.getRequestDispatcher("/admin.jsp").forward(request,response);
}else{
if(admin1!
=null){
request.setAttribute("errorstyle","block");
request.setAttribute("error","管理员密码错误");
request.getRequestDispatcher("/login.jsp").forward(request,response);}
else{
request.setAttribute("errorstyle","block");
request.setAttribute("error","不存在此管理员");
request.getRequestDispatcher("/login.jsp").forward(request,response);
}}}}}
${errorstyle}">
${error}