博主介绍:翰文编程 专注于Java(springboot ssm 等开发框架) vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和课设项目实战、企业信息化系统建设,从业十八余年开发设计教学工作
☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟
我的博客空间发布了2000+题目解决方法案例 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
文末下方有源码获取地址
在线商店主要分为2个权限:管理员权限、用户权限。不同的身份登录系统会有不同的权限,进行不同的操作,系统主要设计了权限分配、用户管理、商品管理、信息管理、信息类型管理、订单管理、评论管理等功能,满足用户在网站上面进行商品的订购与查看,具体功能模块图如4-1所示:

图4-1 系统功能模块图
4.2 系统功能描述
系统功能细分如图4-1所示,可概括分为8个模块,即:用户管理模块,权限分配模块,商品管理模块、数据录入订单管理模块、订单明细模块、商品类别模块、新闻管理模块、评论管理模块。
1.用户信息管理
该模块用于实现对用户信息的管理。可以添加、删除和更改用户信息,以及用户信息列表展现,在添加用户信息时,系统会自动查询用户表中的用户编号字段,系统自动将其最大值加1作为该条用户记录的用户编号,同时将用户编号,用户名,密码,姓名,权限,电话,地址信息添加到用户信息表中;在删除一条用户记录时,先选中一条用户记录,将该条用户记录中的用户编号作为查询条件在用户信息表中进行查询,弹出“确定要删除吗?”的对话框,若是,则执行删除操作,否则退出删除操作;在更改用户记录时,先选中一条用户记录,将用户信息显示在相应的修改页面中,然后更改后保存到用户信息表中;查看用户信息记录时,选中要查看的用户记录,系统根据用户选择用户信息,在详细页面显示用户信息
2.权限信息管理
该模块用于实现对权限信息的管理。可以添加、删除和更改权限信息,以及权限信息列表展现,在添加权限信息时,系统会自动查询权限表中的权限编号字段,系统自动将其最大值加1作为该条权限记录的权限编号,同时将权限编号,权限信息添加到权限信息表中;在删除一条权限记录时,先选中一条权限记录,将该条权限记录中的权限编号作为查询条件在权限信息表中进行查询,弹出“确定要删除吗?”的对话框,若是,则执行删除操作,否则退出删除操作;在更改权限记录时,先选中一条权限记录,将权限信息显示在相应的修改页面中,然后更改后保存到权限信息表中;查看权限信息记录时,选中要查看的权限记录,系统根据用户选择权限信息,在详细页面显示权限信息
3.商品类别信息管理
该模块用于实现对商品类别信息的管理。可以添加、删除和更改商品类别信息,以及商品类别信息列表展现,在添加商品类别信息时,系统会自动查询商品类别表中的商品类别编号字段,系统自动将其最大值加1作为该条商品类别记录的商品类别编号,同时将商品类别编号,类别信息添加到商品类别信息表中;在删除一条商品类别记录时,先选中一条商品类别记录,将该条商品类别记录中的商品类别编号作为查询条件在商品类别信息表中进行查询,弹出“确定要删除吗?”的对话框,若是,则执行删除操作,否则退出删除操作;在更改商品类别记录时,先选中一条商品类别记录,将商品类别信息显示在相应的修改页面中,然后更改后保存到商品类别信息表中;查看商品类别信息记录时,选中要查看的商品类别记录,系统根据用户选择商品类别信息,在详细页面显示商品类别信息
4.商品信息管理
该模块用于实现对商品信息的管理。可以添加、删除和更改商品信息,以及商品信息列表展现,在添加商品信息时,系统会自动查询商品表中的商品编号字段,系统自动将其最大值加1作为该条商品记录的商品编号,同时将商品编号,商品,类别,产地,价格,描述,图片,是否推荐信息添加到商品信息表中;在删除一条商品记录时,先选中一条商品记录,将该条商品记录中的商品编号作为查询条件在商品信息表中进行查询,弹出“确定要删除吗?”的对话框,若是,则执行删除操作,否则退出删除操作;在更改商品记录时,先选中一条商品记录,将商品信息显示在相应的修改页面中,然后更改后保存到商品信息表中;查看商品信息记录时,选中要查看的商品记录,系统根据用户选择商品信息,在详细页面显示商品信息
5.订单信息管理
该模块用于实现对订单信息的管理。可以添加、删除和更改订单信息,以及订单信息列表展现,在添加订单信息时,系统会自动查询订单表中的订单编号字段,系统自动将其最大值加1作为该条订单记录的订单编号,同时将订单编号,订单名称,用户,购买时间,状态,地址,电话,收货人信息添加到订单信息表中;在删除一条订单记录时,先选中一条订单记录,将该条订单记录中的订单编号作为查询条件在订单信息表中进行查询,弹出“确定要删除吗?”的对话框,若是,则执行删除操作,否则退出删除操作;在更改订单记录时,先选中一条订单记录,将订单信息显示在相应的修改页面中,然后更改后保存到订单信息表中;查看订单信息记录时,选中要查看的订单记录,系统根据用户选择订单信息,在详细页面显示订单信息
6.订单明细信息管理
该模块用于实现对订单明细信息的管理。可以添加、删除和更改订单明细信息,以及订单明细信息列表展现,在添加订单明细信息时,系统会自动查询订单明细表中的订单明细编号字段,系统自动将其最大值加1作为该条订单明细记录的订单明细编号,同时将订单明细编号,订单,商品,数量,价格,时间,状态信息添加到订单明细信息表中;在删除一条订单明细记录时,先选中一条订单明细记录,将该条订单明细记录中的订单明细编号作为查询条件在订单明细信息表中进行查询,弹出“确定要删除吗?”的对话框,若是,则执行删除操作,否则退出删除操作;在更改订单明细记录时,先选中一条订单明细记录,将订单明细信息显示在相应的修改页面中,然后更改后保存到订单明细信息表中;查看订单明细信息记录时,选中要查看的订单明细记录,系统根据用户选择订单明细信息,在详细页面显示订单明细信息
7.新闻信息管理
该模块用于实现对新闻信息的管理。可以添加、删除和更改新闻信息,以及新闻信息列表展现,在添加新闻信息时,系统会自动查询新闻表中的新闻编号字段,系统自动将其最大值加1作为该条新闻记录的新闻编号,同时将新闻编号,标题,内容,时间,用户信息添加到新闻信息表中;在删除一条新闻记录时,先选中一条新闻记录,将该条新闻记录中的新闻编号作为查询条件在新闻信息表中进行查询,弹出“确定要删除吗?”的对话框,若是,则执行删除操作,否则退出删除操作;在更改新闻记录时,先选中一条新闻记录,将新闻信息显示在相应的修改页面中,然后更改后保存到新闻信息表中;查看新闻信息记录时,选中要查看的新闻记录,系统根据用户选择新闻信息,在详细页面显示新闻信息
8.评论信息管理
该模块用于实现对评论信息的管理。可以添加、删除和更改评论信息,以及评论信息列表展现,在添加评论信息时,系统会自动查询评论表中的评论编号字段,系统自动将其最大值加1作为该条评论记录的评论编号,同时将评论编号,商品,评论,用户,时间信息添加到评论信息表中;在删除一条评论记录时,先选中一条评论记录,将该条评论记录中的评论编号作为查询条件在评论信息表中进行查询,弹出“确定要删除吗?”的对话框,若是,则执行删除操作,否则退出删除操作;在更改评论记录时,先选中一条评论记录,将评论信息显示在相应的修改页面中,然后更改后保存到评论信息表中;查看评论信息记录时,选中要查看的评论记录,系统根据用户选择评论信息,在详细页面显示评论信息
4.3 数据库的设计
4.3.1数据库需求分析
数据库需求分析是数据库结构设计的第一个阶段,是非常重要的一个阶段。在这个阶段主要是收集基本数据、数据结构以及数据处理的流程,组成一份详尽的数据字典,为以后进一步设计打下基础。
在经过仔细调查研究,在一般购物网站的购物流程的基础上,我们得到本系统所处理的数据流如图4-2所示。

图4-2 数据流程图
4.3.2数据库概念结构设计
这一设计阶段是在需求分析的基础上,设计出能够满足用户需求的各种褓,以及它们之间的关系,为后面的逻辑结构设计打下基础。
由上面的设计规划出的实体有:用户实体、商品实体、新闻实体、订单实体、订单明细实体、评论实体。
实体和实体之间的关系E-R图如图4-3所示。

图4-3 实体之间关系E-R图
4.3.3数据库逻辑结构设计
数据库共包括8个表,详细表如下所示:
表4-1 用户信息表
| 序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
| 1 | yhid | INTEGER | 11 | 是 | 用户编号 |
| 2 | yhm | VARCHAR | 40 | 否 | 用户名 |
| 3 | mm | VARCHAR | 40 | 否 | 密码 |
| 4 | xm | VARCHAR | 40 | 否 | 姓名 |
| 5 | qx | VARCHAR | 40 | 否 | 权限 |
| 6 | dh | VARCHAR | 40 | 否 | 电话 |
| 7 | dz | VARCHAR | 40 | 否 | 地址 |
表4-2 权限信息表
| 序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
| 1 | qxid | INTEGER | 11 | 是 | 权限编号 |
| 2 | qx | VARCHAR | 40 | 否 | 权限 |
表4-3 商品类别表
| 序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
| 1 | splbid | INTEGER | 11 | 是 | 商品类别编号 |
| 2 | lb | VARCHAR | 40 | 否 | 类别 |
表4-4 商品信息表
| 序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
| 1 | spid | INTEGER | 11 | 是 | 商品编号 |
| 2 | sp | VARCHAR | 40 | 否 | 商品 |
| 3 | lb | VARCHAR | 40 | 否 | 类别 |
| 4 | cd | VARCHAR | 40 | 否 | 产地 |
| 5 | jg | VARCHAR | 40 | 否 | 价格 |
| 6 | ms | VARCHAR | 40 | 否 | 描述 |
| 7 | tp | VARCHAR | 40 | 否 | 图片 |
| 8 | sftj | VARCHAR | 40 | 否 | 是否推荐 |
表4-5 订单信息表
| 序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
| 1 | ddid | INTEGER | 11 | 是 | 订单编号 |
| 2 | ddmc | VARCHAR | 40 | 否 | 订单名称 |
| 3 | yh | VARCHAR | 40 | 否 | 用户 |
| 4 | gmsj | VARCHAR | 40 | 否 | 购买时间 |
| 5 | zt | VARCHAR | 40 | 否 | 状态 |
| 6 | dz | VARCHAR | 40 | 否 | 地址 |
| 7 | dh | VARCHAR | 40 | 否 | 电话 |
| 8 | shr | VARCHAR | 40 | 否 | 收货人 |
表4-6 订单明细表
| 序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
| 1 | ddmxid | INTEGER | 11 | 是 | 订单明细编号 |
| 2 | dd | VARCHAR | 40 | 否 | 订单 |
| 3 | sp | VARCHAR | 40 | 否 | 商品 |
| 4 | sl | VARCHAR | 40 | 否 | 数量 |
| 5 | jg | VARCHAR | 40 | 否 | 价格 |
| 6 | sj | VARCHAR | 40 | 否 | 时间 |
| 7 | zt | VARCHAR | 40 | 否 | 状态 |
表4-7 评论信息表
| 序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
| 1 | plid | INTEGER | 11 | 是 | 评论编号 |
| 2 | sp | VARCHAR | 40 | 否 | 商品 |
| 3 | pl | VARCHAR | 40 | 否 | 评论 |
| 4 | yh | VARCHAR | 40 | 否 | 用户 |
| 5 | sj | VARCHAR | 40 | 否 | 时间 |
表4-8 新闻表
| 序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
| 1 | xwid | INTEGER | 11 | 是 | 新闻编号 |
| 2 | bt | VARCHAR | 40 | 否 | 标题 |
| 3 | nr | VARCHAR | 40 | 否 | 内容 |
| 4 | sj | VARCHAR | 40 | 否 | 时间 |
| 5 | yh | VARCHAR | 40 | 否 | 用户 |
表4-9 帮助中心表
| 序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
| 1 | bzzxid | INTEGER | 11 | 是 | 帮助中心编号 |
| 2 | bt | VARCHAR | 40 | 否 | 标题 |
| 3 | nr | VARCHAR | 40 | 否 | 内容 |
| 4 | fbsj | VARCHAR | 40 | 否 | 发布时间 |
表4-10 在线咨询表
| 序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
| 1 | zxzxid | INTEGER | 11 | 是 | 在线咨询编号 |
| 2 | zx | VARCHAR | 40 | 否 | 咨询 |
| 3 | fbr | VARCHAR | 40 | 否 | 发布人 |
| 4 | fbsj | VARCHAR | 40 | 否 | 发布时间 |
| 5 | zxnr | VARCHAR | 40 | 否 | 咨询内容 |
| 6 | zt | VARCHAR | 40 | 否 | 状态 |
表4-11 图片表
| 序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
| 1 | tpid | INTEGER | 11 | 是 | 图片编号 |
| 2 | tp | VARCHAR | 40 | 否 | 图片 |
| 3 | lj | VARCHAR | 40 | 否 | 连接 |
表4-12 视频表
| 序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
| 1 | spid | INTEGER | 11 | 是 | 视频编号 |
| 2 | sp | VARCHAR | 40 | 否 | 视频 |
| 3 | splj | VARCHAR | 40 | 否 | 视频连接 |
表4-13 入库表
| 序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
| 1 | rkid | INTEGER | 11 | 是 | 入库编号 |
| 2 | sp | VARCHAR | 40 | 否 | 商品 |
| 3 | rkls | VARCHAR | 40 | 否 | 入库流水 |
| 4 | sl | VARCHAR | 40 | 否 | 数量 |
| 5 | czsj | VARCHAR | 40 | 否 | 操作时间 |
表4-14 出库表
| 序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
| 1 | ckid | INTEGER | 11 | 是 | 出库编号 |
| 2 | sp | VARCHAR | 40 | 否 | 商品 |
| 3 | ckls | VARCHAR | 40 | 否 | 出库流水 |
| 4 | sl | VARCHAR | 40 | 否 | 数量 |
| 5 | czsj | VARCHAR | 40 | 否 | 操作时间 |
表4-15 批量采购表
| 序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
| 1 | plcgid | INTEGER | 11 | 是 | 批量采购编号 |
| 2 | bt | VARCHAR | 40 | 否 | 标题 |
| 3 | cgsp | VARCHAR | 40 | 否 | 采购商品 |
| 4 | cgyd | VARCHAR | 40 | 否 | 采购约定 |
| 5 | yh | VARCHAR | 40 | 否 | 用户 |
| 6 | sqsj | VARCHAR | 40 | 否 | 申请时间 |
| 7 | zt | VARCHAR | 40 | 否 | 状态 |
4.3.4 数据库字典
根据需求分析,将数据库的结构设计为一库八表,所选取的数据库为mysql。数据词典(Data Dictionary ,DD)是结构化分析方法的另一个工具,它与数据流图配合,能清楚地表达数据处理的要求。其数据词典描述如下:
- 权限( 权限编号,权限 )
- 商品类别( 商品类别编号,类别 )
- 商品( 商品编号,商品,类别,产地,价格,描述,图片,是否推荐 )
- 订单( 订单编号,订单名称,用户,购买时间,状态,地址,电话,收货人,总价 )
- 订单明细( 订单明细编号,订单,商品,数量,价格,时间,状态,用户 )
- 新闻( 新闻编号,标题,内容,时间,用户 )
- 评论( 评论编号,商品,评论,用户,时间 )
- 帮助中心( 帮助中心编号,标题,内容,发布时间 )
- 在线咨询( 在线咨询编号,咨询,发布人,发布时间,咨询内容,状态 )
- 图片( 图片编号,图片,连接 )
- 视频( 视频编号,视频,视频连接 )
- 入库( 入库编号,商品,入库流水,数量,操作时间 )
- 出库( 出库编号,商品,出库流水,数量,操作时间 )
- 批量采购( 批量采购编号,标题,采购商品,采购约定,用户,申请时间,状态 ) 。
4.4 本章小结
本章主要介绍的内容是系统的总体功能介绍,主要是在总体模块设计和数据库设计的方面介绍的,为进一步的详细设计做准备。
5 系统的具体设计
5.1 欢迎主界面及代码设计
5.1.1系统首页
访问首页地址,首先将出现主界面,如下图。

图5-1 欢迎主界面
5.1.2 主界面代码设计
欢迎主界面实现的代码设计如下:
<td width="730" align="right" valign="top">
<table width="100%" height="5" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
<tr><td height="110" align="center">
<table border="0" cellpadding="0" cellspacing="0" id="table1" width="100%">
<tr><td height="5" align="center"></td></tr>
<tr><td height="5" align="center" colspan="5" bgcolor="#D6E5F2"></td></tr>
<tr>
<%
String sql1="select * from shangpin where 1=1 and sftj='是' limit 0,4 ";
db.open();
ResultSet rs1=db.query(sql1);
%>
<%
while(rs1.next()){
%>
<td width="20%" height="130" align="center">
<a href="onesp.jsp?spid=<%=rs1.getString("spid")%>">
<img border="0" onload="DrawImage(this)" src="upload/<%=rs1.getString("tp")%>" width="160" height="160" onerror="this.src='img/noimage.jpg'"></a></td>
<td width="20%" height="130" align="center"></td>
<%
}
%>
</tr>
<tr><td height="5" align="center" colspan="5" bgcolor="#D6E5F2"></td></tr>
<tr><td height="5" align="center"></td></tr>
</table></td></tr>
<tr> <td height="32" align="center" background="images/right_h1.gif">
<table width="100%" border="0" cellspacing="0">
<tr><td width="5%">
</td>
<td width="63%" height="30"><font color="#ffffff" class="nav"><b></b></font> 欢迎选购商品<font color="#ffffff"> </font></td>
<td width="32%">
</td>
</tr></table></td>
</tr>
<tr> <td width="100%" align="center">
<table width="100%" border="0" cellpadding="0" cellspacing="1" bgcolor="#E7E7E7">
<%
String sql="select * from shangpin where 1=1 ";
db.open();
ResultSet rs=db.query(sql);
int Page=0;
int maxPage=0;
if(rs!=null){
String str=(String)request.getParameter("Page");
if(str==null){
str="0";
}
int pagesize=4;
rs.last();
int RecordCount=rs.getRow();
maxPage=(RecordCount%pagesize==0)?(RecordCount/pagesize):(RecordCount/pagesize+1);
Page=Integer.parseInt(str);
if(Page<1){
Page=1;
}else{
if(Page>maxPage){
Page=maxPage;
}}
rs.absolute((Page-1)*pagesize+1);
for(int i=1;i<=pagesize;i++){
%>End If
End Sub
5.2 注册界面及代码设计
5.2.1用户注册界面

图5-2 注册界面
5.2.2 注册界面代码设计
注册界面实现的代码设计如下:*
/
DBO db=new DBO();
request.setCharacterEncoding("gb2312");
ResultSet rs=null;
String keyid =(String)request.getParameter("keyid");
String yhm=(String)request.getParameter("yhm");
String mm=(String)request.getParameter("mm");
String xm=(String)request.getParameter("xm");
String dh=(String)request.getParameter("dh");
String dz=(String)request.getParameter("dz");
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<jsp:include page="header.jsp"/>
<script language="javascript">
function regch(){
if(form.yhm.value==""){
alert('用户名不能为空!')
form.yhm.focus();
return false;
}
if(form.mm.value==""){
alert('密码不能为空!')
form.mm.focus();
return false;
}
if(form.xm.value==""){
alert('真实姓名不能为空!')
form.xm.focus();
return false;
}
if(form.dh.value==""){
alert('电话不能为空!')
form.dh.focus();
return false;
}
if(form.dz.value==""){
alert('地址不能为空!')
form.dz.focus();
return false;
}
if(form.dh.value.length<7||form.dh.value.length>13){
alert("输入的电话号码不对");
return;
}
if(form.mm.value.length<6||form.mm.value.length>21){
alert("输入的密码不对");
return;
}
//isEmail(form.email.value);
form.action="yonghudo.jsp";
form.submit();
}
function isEmail(strEmail)
{
if (strEmail.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1)
return true;
else
alert("您输入的Email不合法,请重新输入!");
}
</script>
<center>
<table width="743" border="0" cellpadding="0" style="border-collapse: collapse">
<tr><td width="743" height="48" style="border-top: 2px solid #FFFFFF" background="img/reg1.gif"><p style="margin-left: 40px">新用户注册:</td></tr>
<tr><td background="img/regbg.gif" align="center">
<table width="90%" border="0" cellpadding="5" cellspacing="0" style="margin-bottom: 6"><form action="" method="post" name="form" ><tr>
<td align="right" width="150">用 户 名: </td>
<td><input style="FONT-SIZE: 12px; WIDTH: 210px" type="text" name="yhm" size="20" class=input><font color="#FF0000"> *</font></td></tr>
<tr><td align="right" width="150">密 码:</td>
<td><input style="FONT-SIZE: 12px; WIDTH: 210px" type="password" name="mm" size="20" class=input><font color="#FF0000"> *</font></td></tr>
<tr>
<td align="right">真实姓名:</td>
<td><input style="FONT-SIZE: 12px; WIDTH: 210px" type="text" name="xm" size="20" class="input" /></td>
</tr>
<tr>
<td align="right">电话:</td>
<td><input style="FONT-SIZE: 12px; WIDTH: 210px" type="text" name="dh" size="20" class="input" /></td>
</tr>
<tr>
<td align="right">地址:</td>
<td><input style="FONT-SIZE: 12px; WIDTH: 210px" type="text" name="dz" size="20" class="input" /></td>
</tr>
<tr><td align="right" width="150"></td><td><input type="button" src="img/regbutton.gif" value="提交" onclick="regch();"></td></tr>
<tr><td align="right" width="150"></td>
<td>提交注册前请阅读如下注册协议,提交注册表示同意以下协议!</td></tr></form></table></td></tr>
<tr><td width="100%"><img border="0" src="img/reg2.gif"></td></tr>
<tr><td width="743" height="48" style="border-top: 2px solid #FFFFFF" background="img/reg1.gif"><p style="margin-left: 40px">用户注册协议: (请认真阅读注册协议,这关系到您在本站享有的权利和义务)</td></tr>
<tr><td width="100%" height="50" background="img/regbg.gif" align="center">
<table border="0" width="90%" cellspacing="0" cellpadding="0"><tr><td><table border="0" width="90%" cellspacing="0" cellpadding="0">
<tbody>
<tr>
5.3 商品界面及代码设计
5.3.1商品主界面
用户可以浏览商品主界面,如下图:

图5-3 商品主界面
5.3.2系统主界面代码设计
系统主界面实现的代码设计如下:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<%@ page import="com.util.*"%>
<%
request.setCharacterEncoding("gb2312");
DBO db=new DBO();
//信息查询
%>
<jsp:include page="header.jsp"/>
<div align="center">
<table width=980 border=0 cellpadding=0 cellspacing=0 bgcolor="#FFFFFF">
<tr><td width=250 valign="top">
<table width="243" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="8"></td>
</tr>
</table>
<jsp:include page="leftlogin.jsp"/><br>
<jsp:include page="leftlx.jsp"/>
</td>
<td width="730" align="right" valign="top">
<table width="100%" height="5" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
<tr>
<td align="right"><a href="12"target="_blank"></a> </td>
</tr>
<tr> <td height="32" align="center" background="images/right_h1.gif">
<table width="100%" border="0" cellspacing="0">
<tr><td width="5%">
</td>
<td width="63%" height="30"><font color="#ffffff" class="nav"><b></b></font> 欢迎选购商品<font color="#ffffff"> </font></td>
<td width="32%">
</td>
</tr></table></td>
</tr>
<tr> <td width="100%" align="center">
<table width="100%" border="0" cellpadding="0" cellspacing="1" bgcolor="#E7E7E7">
<%
String lb=(String)request.getParameter("lb");
String sql="select * from shangpin where 1=1 ";
String spmc=(String)request.getParameter("spmc");
if(spmc!=null){
if(!spmc.equals("")){
sql+=" and sp like '%"+spmc+"%'";
}
}
if(lb!=null){
if(!lb.equals("")){
sql+=" and lb in (select lb from splb where splbid='"+lb+"')";
}
}
System.out.println(sql);
db.open();
ResultSet rs=db.query(sql);
int Page=0;
int maxPage=0;
if(rs!=null){
String str=(String)request.getParameter("Page");
if(str==null){
str="0";
}
int pagesize=4;
rs.last();
int RecordCount=rs.getRow();
maxPage=(RecordCount%pagesize==0)?(RecordCount/pagesize):(RecordCount/pagesize+1);
Page=Integer.parseInt(str);
if(Page<1){
Page=1;
}else{
if(Page>maxPage){
Page=maxPage;
}}
rs.absolute((Page-1)*pagesize+1);
for(int i=1;i<=pagesize;i++){
%>
<tr><td height="134" align="center" bgcolor="#FFFFFF"><table width="730" border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse">
<tr><td align="center" height="100" rowspan="5" width="189"><a class=photo target="" href="onesp.jsp?spid=<%=rs.getString("spid")%>"><img border="0" onload="DrawImage(this)" src="upload/<%=rs.getString("tp")%>" onerror="this.src='img/noimage.jpg'" width="200" height="200" /></a></td>
<td height="25" colspan="2"><a style="font-size: 11pt; color:000080; font-weight: bold" target="_blank" href="onesp.jsp?spid=<%=rs.getString("spid")%>">商品名称:<%=rs.getString("sp")%>【<%=rs.getString("lb")%>】</a></td></tr>
<tr><td height="25" colspan="2"><p style="line-height: 150%; margin-top: 8px; margin-bottom: 8px"><%=rs.getString("ms")%></p></td></tr>
<tr><td height="25" style="font-size: 10pt" colspan="2">价格:¥<%=rs.getString("jg")%>元 产地:<font color="#FF0000"><%=rs.getString("cd")%></font></td></tr>
<tr>
<td height="38" width="243"><div align="center"><a href="onesp.jsp?spid=<%=rs.getString("spid")%>"><img border="0" src="img/order.gif" width="79" height="23"></a>
</div></td>
<td height="7" width="290"> </td>
</tr></table>
</td>
</tr>
<%
try{
if(!rs.next()){break;}
}catch(Exception e){System.out.println(e.toString());}
}
}
%>
<tr>
<td height="38" width="243"><div align="center"><table width="98%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="right">当前页数:[<%=Page%>/<%=maxPage%>]
<%if(Page>1){%>
<a href="shangpin.jsp?Page=1">第一页</a> <a href="shangpin.jsp?Page=<%=Page-1%>">上一页</a>
<% }
if(Page<maxPage){%>
<a href="shangpin.jsp?Page=<%=Page+1%>">下一页</a> <a href="shangpin.jsp?Page=<%=maxPage%>">最后一页 </a>
<%} %>
</td> </tr>
</table>
</div></td>
<td height="7" width="290"> </td>
</tr></table>
</td>
</tr>
</table></td></tr>
<tr><td width="98%" height="23" align="center"> </td>
</tr></table></td>
</tr></table></div><jsp:include page="bottom.jsp"/>End Sub
5.4 商品详细界面及代码设计
5.4.1商品信息界面
可以查看商品的详细页面。

图5-4 商品详细界面
5.4.2商品详细界面代码设计
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/qq_41221322/article/details/159199901




