实验目的:
结合前面6个实验,参照第10章“汽车用品网上商城”应用系统的展现,完整了解网上商城系统前台功能、后台功能,以及页面功能操作与数据库操纵之间的关系,充分理解数据库的核心作用,掌握面对实际应用设计数据库、操纵数据库的技能。
实验内容:
1.“汽车用品网上商城”前台功能
【实验7-1】主页中查询汽车配件对应的SQL操纵,编写一存储过程,实现查询特定汽车配件信息的功能。
【实验7-2】操作购物车,往购物车表中添加记录,并对购物车中某一条记录作删除操作。
【实验7-3】提交订单,编写一存储过程,给定会员编号、收货人姓名、收货人地址后在订单表中生成订单信息,同时将购物车中已有的该会员的购物记录追加到订单明细表中。
2.“汽车用品网上商城”后端功能
【实验7-4】管理会员,对会员表中数据进行增删改查。
【实验7-5】管理商品,对汽车配件表中数据进行增删改查。
【实验7-6】管理类别,对商品类别表进行增删改查。
【实验7-7】管理订单,修改订单表中的状态字段。
【实验7-8】查询统计,通过查询视图或者基表等手段,完成如下统计:本月销售汽车配件总数量、销售总金额、订单总数量、发生订单的会员数;最大的订单、最小的订单、消费金额最多的会员、消费金额最少的会员;卖的最好的汽车配件、卖得最差的汽车配件。
3.数据库备份与恢复
【实验7-9】对Shopping数据库进行备份
4.数据导入导出
【实验7-10】以文本格式导出汽车配件表,在Excel下完成汽车配件表的编辑(可选),将编辑后的汽车配件信息导入到Shopping数据库汽车配件表中。
实验要求:
1.完成实验文档,至少包括以下内容:‘汽车用品网上商城’系统概述、功能结构图、页面展示形式、每个功能点的数据库操纵语句。
2.在MySQL Workbench中完成【实验7-1】~【实验7-10】所有操作,将操作过程以屏幕抓图的方式拷贝,形成实验文档。
大致步骤图以下图2-1所表示。
图2-1 总体功效步骤图
三.系统总体设计
3.1 系统功效介绍
具体功效分为前台页面和后台页面两大部分,我们实训所做系统重视是后台管理,前台只需要一个登录界面即可,后台具体制作,具体功效以下。
1) 前台功效模块:
1.用户注册登陆模块:用户能够经过填写注册信息成为会员,登陆后才能进行购物车管理和购置商品,未经登陆会员只能浏览商品。
2.商品检索、浏览模块:用户能够浏览商品具体信息(如名称、图片、价格等)也能够输入关键字进行查询商品。
3.购物车模块:会员登陆后能够管理购物车。将商品放入购物车,对购物车中商品进行修改和删除,下订单和查看订单。
2) 后台功效模块:
1.商品管理模块:管理员登陆后能够查看商品种类和信息。也能够对商品进行增删改查操作。
2.订单管理模块:管理员能够查看订单详情。也能够修改订单中商品数量和种类,还能够对订单进行删除。
3.用户管理模块:增加新会员。能够查看会员具体信息。也能够对会员进行修改和删除。
4.分类管理模块:分为分类添加商品和分类列表,让商品能轻易被买家找到。
5.系统设置模块:包含个人信息详情,修改密码,新增管理员,管理员列表,和系统退出。
3.2系统功效模块
3.2.1 前台登录功效
我们需要设计一个登陆界面,这个界面用来连接后台管理界面,界面包含输入用户名和密码,和验证码文本框,还应该有一个注册文本内容,还有一个登陆按钮。
3.2.2 后台管理功效
首先我们应该设计一个后台管理界面,这个界面里面应该包含部分基础功效。拥有一个清楚目录,使用对应语言编写,使得界面中控件能和数据库中数据连接。
这些目录和一级目录下包含子目录为分为:商品管理(商品上架、商品列表),分类管理(分类添加、分类列表),订单管理(订单列表),用户管理(用户列表、权限设置),系统设置(个人信息、修改密码、新增管理员、管理员列表、系统退出)。
3.3 数据库表设计
3.3.1 设计步骤
总体分为以下图3-1所表示数据库表,因为数据库不是我们本项目标介绍关键,在下文我只列举了多个关键表。
图3-1 数据库总体表
3.3.2 数据库表介绍
(1)用户信息表:包含个人信息、登陆密码,登陆用户名,居住地址,联络方法,具体以下图3-2所表示。
图3-2 用户信息表
(2)商品信息表:包含商品类型,商品编号,商品价格,商品产地商品图片,折扣价格等,具体以下图3-3所表示。
图3-3 商品信息表
(3)订单管理表:包含商品信息,还有地单号,和购置商品用户用户名,和购置商品时间等,具体以下图3-4所表示。
图3-4 订单管理表
3.4 关键步骤介绍
我们所设计商品后台管理步骤为,第一步,直接登录,然后进入后台管理界面,再一步步对商品和用户进行管理。我们创建系统步骤通常为,首先我们需要编写好全部数据库表,和关系表。然后创建一个java项目,导入使用数据库驱动jar包 ,创建一个登陆界面,再创建一个后台管理界面,然后再对商品进行分类,添加,删除,上架,进行折扣等操作。具体设计以下图3-5所表示。
图3-5 大致步骤图
四.具体设计
4.1 三大配置文件关键内容
1)Struts.xml文件配置
<struts>
<package name="struts2" extends="json-default">
<action name="usrLoginAction" class="cn.hbpu.Action.UsrLoginAction">
<result name="success">/products.jsp</result> <result name="error">/products.jsp</result> <result name="input">/products.jsp</result> </action>
<action name="clearSession" class="cn.hbpu.Action.ClearSessionAction"> <result>/index.jsp</result> </action> <action name="*ProductManagerAction" class="cn.hbpu.Action.ProductManagerAction" method="{1}"> <interceptor-ref name="fileUpload"> <!-- 设置上传文件类型 -->
<param
name="allowedTypes">image/bmp,image/png,image/jpg,image/pjpeg,image/gif,application/vnd.ms-excel </param> <!-- 设置上传文件大小 -->
<param name="maximumSize">20XX00</param> </interceptor-ref>
<!-- 必需显示配置引用struts默认拦截器栈:defaultStack -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- 设置上传路径 -->
<param name="savePath">/upload</param> <result
name="searchproductshow">/products_search_show.jsp</result> <result
name="guestproductsshow">/products_show.jsp</result>
<result
name="adminproductsshow">/admin_products_show.jsp</result> <result
name="saveOnesuccess">/admin_products_show.jsp</result> <result name="input">/upload_error.jsp</result> <result name="index">/index.jsp</result>
<result name="productdetail">/productdetail.jsp</result> </action>
<action name="registCheckAction" class="cn.hbpu.Action.RegistCheckAction"> <result type="json"></result> </action> <action name="registAction" class="cn.hbpu.Action.RegistAction" >
<result>/regist_succ.jsp</result>
<result name="error">/register.jsp</result> </action>
<action name="*CartManagerAction" class="cn.hbpu.Action.CartManagerAction" method="{1}"> <result name="ok" type="json"></result>
<result name="cartshow">/cartshow.jsp</result> </action>
<action name="*OrdersManagerAction" class="cn.hbpu.Action.OrdersManagerAction" method='{1}'>
<result name="checkoutsucc">/checkoutsucc.jsp</result> <result name="ordershow">/ordershow.jsp</result> </action>
<action name="*OrderitemManagerAction" class="cn.hbpu.Action.OrderitemManagerAction" method='{1}'>
<result name="orderitemshow">/orderitem_show.jsp</result> </action> </package>
<constant name="struts.i18n.encoding" value="utf-8"></constant> <constant name="struts.devMode" value="true"></constant> <constant name="struts.multipart.parser" value="jakarta"></constant> <constant name="struts.custom.i18n.resources" value="properties/messageResource"/> </struts>
经过定义不一样action,能够使JSP页面调用后台程序,是前台程序和后台程序连接枢纽。
2)web.xml文件配置
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter>
<filter-mapping>
<filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.jsp</url-pattern> </filter-mapping> <servlet>
<servlet-name>CheckCodeServlet</servlet-name>
<servlet-class>cn.hbpu.util.CheckCodeServlet</servlet-class> </servlet>
<servlet-mapping>
<servlet-name>CheckCodeServlet</servlet-name> <url-pattern>/authImg</url-pattern> </servlet-mapping> </web-app>
该配置文件用来配置控制器,使得JSP页面action请求全部能够经过struts配置文件找到对应后台实现程序。其角色是为action提供激活信号。 3)applicationContext.xml文件配置
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"> </property>
<property name="url"
value="jdbc:mysql://localhost:3306/acesys"> </property>
<property name="username" value="root"></property> <property name="password" value="123456"></property> </bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource"> <ref bean="dataSource" /> </property>
<property name="hibernateProperties"> <props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect </prop>
<prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> </props> </property>
<property name="mappingResources"> <list>
<value>cn/hbpu/po/Usr.hbm.xml</value>
<value>cn/hbpu/po/Product.hbm.xml</value> <value>cn/hbpu/po/Orders.hbm.xml</value> <value>cn/hbpu/po/Orderitem.hbm.xml</value> </list> </property> </bean>
<bean id="usrDao" class="cn.hbpu.DAO.impl.UsrDAOHib"> <property name="sessionFactory" ref="sessionFactory"> </property>
</bean>
<bean id="usrService" class="cn.hbpu.service.impl.UsrServiceImpl">
<property name="usrDao" ref="usrDao"></property> </bean>
<bean class="cn.hbpu.Action.UsrLoginAction">
<property name="usrService" ref="usrService"></property> </bean>
<bean id="productDao" class="cn.hbpu.DAO.impl.ProductImpl"> <property name="sessionFactory" ref="sessionFactory"></property> </bean>
<bean id="productService" class="cn.hbpu.service.impl.ProductServiceImpl">
<property name="productDAO" ref="productDao"></property> </bean>
<bean id="ordersDao" class="cn.hbpu.DAO.impl.OrdersDAOImpl"> <property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="orderitemDAO" class="cn.hbpu.DAO.impl.OrderitemDAOImpl"> <property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property> </bean> <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager"></property>
<property name="transactionAttributes"> <props> <prop
key="find*,get*">PROPAGATION_REQUIRED,readOnly</prop> <prop
key="save*,update*,delete*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> <bean
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames"> <list>
<value>usrDao</value>
<value>productDao</value> <value>ordersDao</value> <value>orderitemDAO</value> </list> </property>
<property name="interceptorNames"> <list>
<value>transactionInterceptor</value> </list> </property> </bean> </beans>
4.2 前台功效模块
4.2.1 数据库连接模块
(1)数据库sql语句百分之九十全部是一样能够共同操作
SELECT * FROM eb_admin; /*管理员表*/
SELECT * FROM eb_customer; /*用户表*/
SELECT * FROM eb_category; /*商品类别*/
SELECT * FROM eb_goods; /*商品 经过cid 和商品类别相关联 */
SELECT * FROM eb_goodsimgs /*商品图片 经过gid和商品相关联*/
SELECT * FROM eb_address; /*地址表 经过userid和 用户表相关联 我们写是用户地址 */
SELECT * FROM eb_orders; /*订单表 经过userid和用户表相关联 经过gid和商品表相关联 经过addrid和地址表相关联*/
(2)先导入使用数据库驱动jar包,以下图4-1所表示。再将项目标数据库生成能够查询对应表,写一个工具类,获取和数据库链接,我们所做全部操作全部是需要和数据库获取连接 ,在主函数中测试这个连接类 假如打印出连接字符串则连接成功 。具体代码以下所表示。
图4-1 导入包
package com.softeem.easybuy.dbhelper;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import sun.applet.Main;
/** * 数据库连接工具类 */
public class DBUtils {
private static final String DRIVER="com.mysql.jdbc.Driver";
//125.220.74.141
private static final String URL="jdbc:mysql://localhost:3306/easybuy";
private static final String USER="root";
private static final String PASSWORD="123456";
private static Connection conn;
private DBUtils(){};
//加载驱动
static{ try {
Class.forName(DRIVER);} catch (ClassNotFoundException e) {
e.printStackTrace();}}
//获取连接
public static Connection getConn(){
try {
if(conn == null ||conn.isClosed()){
conn = DriverManager.getConnection(URL, USER, PASSWORD);}
} catch (SQLException e) {
e.printStackTrace();}
return conn;}
//关闭资源
public static void closeConn(Connection conn){
try {if(conn != null)conn.close();
} catch (SQLException e) {
e.printStackTrace();}}
public static void main(String[] args) {
System.out.println(getConn()); }}
4.2.2 用户登录模块
具体代码和登陆界面以下图4-2所表示.
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>">
<meta charset="utf-8" />
<title>后台管理----系统登录</title>
<!--作者:kusy
时间:20XX-06-21
描述:引入 我们写好配置文件 -->
<script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
<script type="text/javascript" src="js/admin_login.js"></script>
<link type="text/css" rel="stylesheet" href="css/admin_login.css"/>
</head>
<!--作者:kusy 时间:20XX-06-21
描述:
HTML 静态标签 裸体模特
css 样式 给模特穿衣服
js 动态配饰 让模特愈加好看
jquery 特殊js-->
<body leftmargin="0" οnlοad="changeImg()">
<div class="main_bar"><div id="login_form"><div class="title">EasyBuy系统登录</div>
<!--我们提交是一个完整form表单 action就是提交位置 -->
<form action="doLogin.jsp" method="post" οnsubmit="return check()">
<div id="form_widget">
<br>input type="text" name="uname" placeholder="请输入账号" id="box_name" class="txt" value="用户名" οnfοcus="this.value=''" οnblur="if(this.value=='')this.value='用户名'"/>
<br><input type="password" name="upass" placeholder="请输入密码" id="box_pass" class="txt" value="password" οnfοcus="this.value=''" οnblur="if(this.value=='')this.value='password'"/>
<br><input type="text" id="vcode" placeholder="验证码" value="验证码" οnfοcus="this.value=''" οnblur="if(this.value=='')this.value='验证码'"/><span id="code" title="看不清,换一张">ETF5</span>
<div id="search_pass_link"><a href="">忘记密码?</a></div>
<input type="submit" value="登录" class="btn"οnmοuseοver="this.style.backgroundColor='#FF8D00'" οnmοuseοut="this.style.backgroundColor='#FC5628'">
<br><div id="copyright">Power By kusy©CopyRight SOFTEEM since 20XX</div></div></form>
</div></div></body>
</html>
图4-2 登陆界面
4.3 后台功效模块
4.3.1 商品管理模块
1)当登录成功进入主界面 ,这个时候做商品列表 ,而且带上分页功效,具体以下图4-3所表示。一个大目录下包含着两个小目录,具体功效分别为,上架商品,和对商品进行列表统计。
2)设计分页效果
点击商品列表,会以下图所表示,当商品上架成功以后点击确定,也会出现图所表示界面,肯定显示是第一页。
分页需要条件,总条数 /目前第一页 ,每页多少条 。
目前有多少页 【分为两种情况 】,总条数/每页多少条=总页数+1,总条数/每页多少条=总页数
图4-3 商品管理效果图
4.3.2 分类管理模块
分类管理里面包含着分类添加,和分类列表,具体代码,见压缩包中源代码,具体效果图以下图4-4所表示。
图4-4 分类管理效果图
4.3.3 订单管理模块
订单管理里面包含着创建订单和订单列表,具体代码,见压缩包中源代码,具体效果图以下图4-5所表示。
图4-5 订单管理效果图
4.3.4 用户管理模块
用户管理模块跟商品管理列表功效差不多,在这里我就不具体介绍了,具体代码,见压缩包中源代码。
4.3.5 系统设计模块
系统设置包含着个人信息、修改密码、新增管理员、管理员列表、系统退出等二级目录,具体代码,见压缩包中源代码,具体效果图以下图4-6所表示。
图4-6 系统管理效果图
五. 系统评价和维护
5.1 系统评价
1)用户登陆功效
在index.jsp页面中输入用户名和密码,然后点击“Login”按钮,经过usrLoginAction.action将参数传输给cn.hbpu.Action.UsrLoginAction类中,经过处理后返回对应参数,并调用对应jsp页面,效果图4-2所表示。
2)商品查询功效
在Product_Search.jsp页面中,选择查询方法,并在文本框中输入要查询内容,当点击“查询”按钮后,经过searchProductManagerAction.action将参数传输给cn.hbpu.Action.ProductManagerAction类中,然后经过search方法返回参数searchproductshow,最终调用products_search_show.jsp显示查询结果。
3)商品添加功效
在add_products_admin.jsp页面中,输入产品信息,当点击“添加”按钮后,经过saveOneProductManagerAction.action将参数传输给cn.hbpu.Action.ProductManagerAction类中,然后经过saveOne方法返回参数saveOnesuccess,最终调用admin_products_show.jsp页面显示结果。
5.2 系统测试
1)优异行登录,以下图5-1所表示,假如登陆成功,则以下图5-2所表示,然后再查看一个个目录所对应功效即可。
图5-1 登陆首页效果图
图5-2 登陆成功效果图
2)进入后台管理效果图,具体以下图5-3所表示。
图5-3 后台管理效果图