攀枝花学院实验报告
实验课程:JAVA应用开发 实验项目:网上商城实现 实验日期:2013.5 系:计算机 班级:10计本1班 姓名:蒋志勇 学号:201010801035
指导老师:范胜波 成绩:
一.实验目的
1.学会对购物车,订单,商品信息,商品分类用MVC设计模式的实现。
2.了解Ajax,Json,Jquery的使用。
3.初步认识框架的使用。
二.实验设备
Eclipse,Mysql数据库,Tomact
三.实验内容
1.网上商城的功能
(1)用户的登录与注销。
(2)动态商品分类查询。
(3)商品搜索功能的实现。
(4)首页商品的展示及进行分页显示。
(5)商品详细功能的实现。
(6)购物车的实现及进行总价的计算。
2.数据库设计
(1)用户表:customer
CREATE TABLE `customer` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`LoginName` varchar(50) NOT NULL,
`Password` varchar(50) NOT NULL,
`Name` varchar(50) NOT NULL,
`Gender` char(2) DEFAULT NULL,
`Birthday` date DEFAULT NULL,
`Adress` varchar(128) DEFAULT NULL,
`Email` varchar(64) DEFAULT NULL,
`Phone` varchar(32) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
(2)商品分类表:category
CREATE TABLE `category` (
`ID` int(11) NOT NULL,
`Name` varchar(30) NOT NULL,
`ParentID` int(11) DEFAULT NULL,
`Status` char(6) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
(3)商品表:goods
CREATE TABLE `goods` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(64) NOT NULL,
`Price` float(8,0) NOT NULL,
`Inventory` int(11) NOT NULL,
`Status` char(6) NOT NULL,
`ImgUrl` varchar(64) DEFAULT NULL,
`Description` text,
`CategoryID` int(11) NOT NULL,
PRIMARY KEY (`ID`),
KEY `RefCategory1` (`CategoryID`),
CONSTRAINT `RefCategory1` FOREIGN KEY (`CategoryID`) REFERENCES `category` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8;
(4)订单表:order
CREATE TABLE `order` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`CustomerID` int(11) NOT NULL,
`GoodsID` int(11) NOT NULL,
`GoodsCount` int(11) NOT NULL,
`Price` float(8,0) NOT NULL,
`Total` float(8,0) DEFAULT NULL,
`Address` varchar(64) NOT NULL,
`Contact` varchar(32) NOT NULL,
`Phone` varchar(30) DEFAULT NULL,
`Status` varchar(6) DEFAULT NULL,
`Note` varchar(255) DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `RefCustomers2` (`CustomerID`),
KEY `RefGoods3` (`GoodsID`),
CONSTRAINT `RefCustomers2` FOREIGN KEY (`CustomerID`) REFERENCES `customer` (`ID`),
CONSTRAINT `RefGoods3` FOREIGN KEY (`GoodsID`) REFERENCES `goods` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
(5)系统代码表:syscode
CREATE TABLE `syscode` (
`CODE` char(6) NOT NULL,
`Name` varchar(50) NOT NULL,
`CodeType` char(3) NOT NULL,
PRIMARY KEY (`CODE`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3.功能实现过程。
(1)Myshop框架的搭建与myshop数据库的创建。
1)将Myshop解压,然后点击Eclipse的File->Import导入项目。
2)打开Navicat for MySQL新建myshop数据库,选择utf-8编码,然后选择新建查询, 导入shop.sql数据库sql语句运行。
3)点击运行,将Myshop数据库加载到tomact中出现如下结果,则框架搭建成功。
(2)分类导航的实现。
1)新建一个category.jsp页面。
2)编写CategoryServlet.java和CategoryDao实现对分类导航。
代码如下:
public List<Category> getCategoriesByParentId(int parentId){
String sql="SELECT ID,NAME,ParentID,Status FROM category WHERE ParentID=? and Status=?";
returnthis.list(sql,parentId,MyShopConstant.category_type_active);
}
(3)登录和注销功能的实现。
1)新建一个topbar.jsp用于用户登录和显示用户相关信息。
2)编写CustomerServlet.java和CustomerDao实现用户登录的数据库查询。
代码如下:
public Customer getCustomer(String loginName){
String getCustomerSQL="SELECT ID,LoginName,Password,Name,Gender,Birthday,Adress, Email,Phone "+"FROM customer WHERE LoginName=?";
returnthis.get(getCustomerSQL, loginName);
}
(4)商品展示,商品详细信息和查询的显示。
1)新建goodsList.jsp和goodsDetail.jsp分别 用于商品的首页显示和商品详细 信息显示。
2)编写GoodsServlet和GoodsDao分别用于商品操作的转发和数据库操作。
代码如下:
publicclass GoodsDao extends MyShopBasicDAO<Goods> {
//查询全部商品
public Page<Goods> getAllGoods(int curpage){
String countGoodsSQL="SELECT count(*) FROM Goods WHERE Status=?";
String getAllGoods="SELECT ID,NAME,Price,Inventory,Status,ImgUrl,Description,CategoryID "
+"FROM Goods WHERE Status=? limit ?,?";
long total=this.getValue(countGoodsSQL, MyShopConstant.goods_status_available);
Page<Goods> page=new Page<Goods>(total, curpage);
page.setItems(this.list(getAllGoods, MyShopConstant.goods_status_available,page.startIndex(),page.getPageSize()));
return page;
}
//分类查询,用于商品分类导航的显示
public Page<Goods> getGoods(int categoryId,int curpage){
String countGoodsSQL="SELECT count(*) FROM Goods WHERE Status=? AND CategoryID=?";
String getAllGoods="SELECT ID,NAME,Price,Inventory,Status,ImgUrl,Description,CategoryID "
+"FROM Goods WHERE Status=? AND CategoryID=? limit ?,?";
long total=this.getValue(countGoodsSQL, MyShopConstant.goods_status_available,categoryId);
Page<Goods> page=new Page<Goods>(total, curpage);
page.setItems(this.list(getAllGoods, MyShopConstant.goods_status_available,categoryId,page.startIndex(),page.getPageSize()));
return page;
}
//用于商品名字的模糊搜索
public Page<Goods> getGoods(String namelike,int curpage){
String countGoodsSQL="SELECT count(*) FROM Goods WHERE Status=? AND Name like ?";
String getAllGoods="SELECT ID,NAME,Price,Inventory,Status,ImgUrl,Description,CategoryID "
+"FROM Goods WHERE Status=? AND Name like ? limit ?,?";
long total=this.getValue(countGoodsSQL, MyShopConstant.goods_status_available,"%"+namelike+"%");
Page<Goods> page=new Page<Goods>(total, curpage);
page.setItems(this.list(getAllGoods, MyShopConstant.goods_status_available,"%"+namelike+"%",page.startIndex(),page.getPageSize()));
return page;
}
//通过商品ID进行商品的详细显示
public Goods getGoods(int id){
String getGoodsSQL="SELECT ID,NAME,Price,Inventory,Status,ImgUrl,Description,CategoryID "
+"FROM Goods WHERE ID=?";
returnthis.get(getGoodsSQL, id);
}
}
(5)购物车功能的实现。
1)编写cartList.jsp用于进行购物车页面的显示并用javascript计算总价钱。
Javascript代码如下:
function total(){
var totalMoney=0;
$('#cartList span[id*="price_"]').each(function(index,priceSpan){
var priceSpanId=$(this).attr('id');
var id=priceSpanId.substring(priceSpanId.indexOf("_")+1);
var countId="count_"+id;
var price=$(this).text();
var count=$('#'+countId).val();
totalMoney+=price*count;
});
$('#cartList span[id="total"]').text(totalMoney.toFixed(2));
}
$(document).ready(function($) {
$('#selectAllCKB').on('click',function(){
var $chkAll=$(this);
if($chkAll.prop('checked')==true){
$('input[type="checkbox"][name="itemId"]').prop('checked',"checked");
}else{
$('input[type="checkbox"][name="itemId"]').removeProp('checked');
}
});
//计算总价
total();
//注册数量变化重新计算总价
$('#cartList input[type="number"][id*="count_"]').on('change',function(){
//console.dir(this);
total();
});
//注册修改数量事件
$('#cartList input[type="number"][id*="count_"]').on('change',function(){
var countSpanId=$(this).attr('id');
var itemId=countSpanId.substring(countSpanId.indexOf("_")+1);
var count=$(this).val();
$.getJSON('Cart?action=changeCount&itemId='+itemId+'&count='+count,function(rs){
console.log(rs);
});
});
});
2)编写CarList.jsp调用GoodsDao.java进行对数据库的操作。
四.实验总结
在这次实验中应用所学的Servlet进行了MVC模式网上商城开发,在实验中的最大收获就是学会项目开发的步骤,怎样应用log4j来进行程序错误或异常的调试。另外还在这次开发中学会了一下Json,ajax,Jquery的一些知识。在实验中也发现了很多问题,比如在用户登录和商品分类导航开发时,就不知道为什么,用法登录后商品分类导航就消失了,而注销后有显示出来。