图书购买系统之本地添加购物车(完善版)--实现生成订单和子订单

java编写购书系统 开发基于控制台的购书系统 输出所有图书的信息:包括每本图书的图书编号、图书名称、图书单价和库存数量。 顾客购买图书; 购书完毕后输出顾客的订单信息:包括订单号、订单明细、订单总额和订单。 系统功能: 管理员可通过系统创建图书、查看图书。 顾客可通过系统购买图书,并自动生成订单。 管理员权限操作如下: 进入管理员权限操作如下: 管理员可以通过编号1来创建图书,创建好的图书会提示自动更新到书库... 阅读详情

1.实现效果图


2.cart.jsp购物车页面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>cart</title>
		<!--引入bootstrap.css-->
		<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/bootstrap/css/bootstrap.css"/>
		<!--引入myscss.css-->
		<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/css/myscss.css" />
		<!--bootstrapValidator.css-->
		<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/bootstrapvalidate/css/bootstrapValidator.css" />
		<!--引入jquery.js-->
		<script type="text/javascript" src="<%=request.getContextPath()%>/bootstrap/js/jquery-3.1.1.js"></script>
		<!--bootstrap.js-->
		<script type="text/javascript" src="<%=request.getContextPath()%>/bootstrap/js/bootstrap.js"></script>
		<!--cart.js-->
		<script type="text/javascript" src="<%=request.getContextPath()%>/foreground/cart/cart.js"></script>
		<!--bootstrapValidator.js-->
		<script type="text/javascript" src="<%=request.getContextPath()%>/bootstrapvalidate/js/bootstrapValidator.js"></script>
		<!--contextPath-->
		<script type="text/JavaScript">
			var contextPath = "${pageContext.request.contextPath}";
		</script>
		
	</head>
	<body>
		<!--公用头部-->
		<!-- <div id="navhead"></div> -->
		<%@include file="/foreground/common/head.jsp"%>
		<!--主体部分-->
		<div class="container">
			<div class="row">
				<div class="col-md-1"></div>
				<div class="col-md-10">
					<!--content头部图片-->
					<img src="<%=request.getContextPath()%>/img/otherimages/buy1.gif" />
					<!--content中的table-->
					<div class="panel panel-info margintop">
					  	<div class="panel-heading text-center"><h4><strong>购物车列表</strong></h4></div>
					  	<div id="cartable">
					    	<!--<table class="table text-center">
								<tr class="danger">
									<th class="text-center">序号</th>
									<th class="text-center">商品名称</th>
									<th class="text-center">价格</th>
									<th class="text-center">购买数量</th>
									<th class="text-center">库存</th>
									<th class="text-center">小计</th>
								</tr>
								<tr>
									<td>0</td>
									<td>Java模式</td>
									<td>21.5</td>
									<td><a class='glyphicon glyphicon-minus-sign' onclick='subBuyNum(this)'></a>1<a class='glyphicon glyphicon-plus-sign' onclick='addBuyNum(this)'></a></td>
									<td>100</td>
									<td>21.5</td>
								</tr>
								<tr>
									<td>1</td>
									<td>JavaScript</td>
									<td>18.5</td>
									<td>1</td>
									<td>100</td>
									<td>18.5</td>
								</tr>
							</table>-->
					  	</div>
						<div class="panel-footer clearfix"><span id="totalprice" class="pull-right">总计</span></div>
					</div>
					<form id="orderform" class="form-horizontal">
					  	<div class="form-group">
					    	<label for="receiverAddress" class="col-md-1 control-label">地址</label>
					    	<div class="col-md-4">
					      		<input type="text" class="form-control" name="receiverAddress" id="receiverAddress" placeholder="请输入收货地址">
					    	</div>
					  	</div>
					  	<div class="form-group">
					    	<label for="receiverName" class="col-md-1 control-label">收货人</label>
					    	<div class="col-md-4">
					      		<input type="text" class="form-control" id="receiverName" name="receiverName" placeholder="请输入收货人姓名">
					    	</div>
					  	</div>
					  	<div class="form-group">
					    	<label for="receiverPhone" class="col-md-1 control-label">电话</label>
					    	<div class="col-md-4">
					      		<input type="text" class="form-control" id="receiverPhone" name="receiverPhone" placeholder="请输入收货人电话">
					    	</div>
					  	</div>
					  	<div class="form-group">
					    	<div class="col-md-12 text-right">
					      		<a href="<%=request.getContextPath()%>/foreground/book/home.jsp">
					      			<input type="button" value="" style="background:url('<%=request.getContextPath()%>/img/otherimages/gwc_jx.gif') no-repeat;width:130px;height:45px;border:0px"/>
					      		</a>
					      		<a href="<%=request.getContextPath()%>/foreground/user/user.jsp">
					      			<input type="submit" id="submitform" value="" style="background:url('<%=request.getContextPath()%>/img/otherimages/gwc_buy.gif') no-repeat;width:130px;height:45px;border:0px"/>
					      		</a>
					   		</div>
					  	</div>
					</form>
				</div>
				<div class="col-md-1"></div>
			</div>
		</div>
		<!--显示弹出框让用户登录-->
		<div id="showloginform">
		</div>
	</body>
</html>

3.cart.js

//购物车动态添加购物车信息
$(function(){
	//1.从localStorage获取购物信息
	var books = localStorage.getItem("carts");
	var bookArr = JSON.parse(books);//将获取到的字符串存放进数组中
	//2.声明一个html用来拼接页面
	var html = "";
	html +=	"<table id='cart' class='table text-center'>";
	html +=		"<tr class='danger'>";
	html +=			"<th class='text-center'>序号</th>";
	html +=			"<th class='text-center'>商品名称</th>";
	html +=			"<th class='text-center'>价格</th>";
	html +=			"<th class='text-center'>购买数量</th>";
	html +=			"<th class='text-center'>库存</th>";
	html +=			"<th class='text-center'>小计</th>";
	html +=		"</tr>";
	//3.遍历数组
	for(var i = 0;i < bookArr.length;i++){
		//获取一本书
		var abook = bookArr[i];
		//将书本的信息填到表格中
		html +=	"<tr>";
		html +=		"<td>"+i+"</td>";
		html +=		"<td>"+abook.name+"</td>";
		html +=		"<td>"+abook.price+"</td>";
		html +=		"<td><a class='glyphicon glyphicon-minus-sign' onclick='subBuyNum(this)'></a>"+abook.buynum+"<a class='glyphicon glyphicon-plus-sign' onclick='addBuyNum(this)'></a></td>";
		html +=		"<td>"+abook.num+"</td>";
		html +=		"<td>"+abook.price*abook.buynum+"</td>";
		html +=	"</tr>";
	}
	html +=	"</table>";
	$("#cartable").html(html);
});
//点击减号按钮
function subBuyNum(caller){
	calFunction(caller,"sub");
}
//点击加号按钮
function addBuyNum(caller){
	calFunction(caller,"add");
}
//优化代码
function calFunction(caller,tag){
	//得到当前调用者的父节点
	var $parent = $(caller).parent();
	//得到当前调用者的父节点的下一个兄弟
	var $bro = $(caller).parent().next();
	//找到父节点的文本信息
	var buyNum = parseInt($parent.text());
	var num = parseInt($bro.text());
	//判断当前是+还是-
	if(tag == "sub"){
		//减号
		if(buyNum>=2){
			buyNum--;
			num++;
		}
	}
	//加号
	else{
		buyNum++;
		num--;
	}
	//4.拼接html信息,把html放到parent中
	var html = "";
	html += "<a class='glyphicon glyphicon-minus-sign' onclick='subBuyNum(this)'></a>"+buyNum+"<a class='glyphicon glyphicon-plus-sign' onclick='addBuyNum(this)'></a>";
	$parent.html(html);

	$bro.html(num);
	
	//5.找到价格元素的信息
	var $price = $parent.prev();
	var price = parseFloat($price.text());
	
	//6.修改小计元素的信息
	var $lastB = $parent.next().next();
	$lastB.text(price*buyNum);
	
	//7.修改总计元素的信息
	calTotal();
	
	//8.修改本地购物车的数量
	//8.1找到序号数列
	var $first = $parent.parent().children(":first-child");
	var n = parseInt($first.text());
	modiyBuyNum(n,buyNum,num);
}

//计算当前购物车的总价格
function calTotal(){
	var $totalPrice = $("#totalprice"); 
	//找到table里面的tbody,其实table的所有正文信息都放在tbody里面
	var $table = $("#cart").children();
	var $children = $table.children(":not(:first)");
	var $rowprices = $children.children(":last-child");
	var totalp = 0;
	$rowprices.each(function(){
		var p = parseFloat($(this).text());
		totalp += p;
	})
	$totalPrice.text("总计:"+totalp);
}

//页面一载入就计算总计购物车的总价信息
$(function(){
	calTotal();
})
//修改本地购物车的数量
function modiyBuyNum(idx,buynum,num){
	//1.获取本地购车的数据(字符串)
	var books = localStorage.getItem("carts");
	//2.把字符串转换为数组对象
	var bookArr = JSON.parse(books);
	//3.从数组中获取指定idx的数据
	var abook = bookArr[idx];
	//4.修改这条数据
	abook.buynum = buynum;
	abook.number = num;
	//5.重新保存购物车
	var booksStr = JSON.stringify(bookArr);
	localStorage.setItem("carts",booksStr);
}


//表单验证的方法,使用bootstrapValidator插件来完成
$(function(){
	$("#orderform").bootstrapValidator({
		feedbackIcons : {
			valid : 'glyphicon glyphicon-ok',
			invalid : 'glyphicon glyphicon-remove',
			validating : 'glyphicon glyphicon-refresh'
		},
		fields : {
			receiverAddress : {
				validators : {
					notEmpty : {
						message : '地址不能为空'
					},
					stringLength : {
						min : 2,
						max : 18,
						message : '地址必须在2到18位之间'
					}
				}
			},
			receiverName : {
				validators : {
					notEmpty : {
						message : '姓名不能为空'
					},
					stringLength : {
						min : 2,
						max : 18,
						message : '姓名长度必须在2到18位之间'
					}
				}
			},
			receiverPhone : {
				validators : {
					notEmpty : {
						message : '电话不能为空'
					},
					regexp : {
						regexp : /^1[0-9]{10}$/,
						message : '电话格式不正确'
					}
				}
			}
		}
	}).on("success.form.bv", function(e) {
		/*alert("sucess");*/
	});
});
//在购物车没有数据、用户没有输入送货地址等信息的情况下,不需要检查用户的登录情况(不需要发送ajax)
$(function(){
	$("#submitform").click(function(){
		//1.从localStorage获取所存的购物车信息
		var books = localStorage.getItem("carts");
		var bookArr = JSON.parse(books);
		//2.如果bookArr不存在或者数据长度为0,则不允许提交表单
		if(bookArr == null){
			return false;
		}
		if(bookArr.length == 0){
			return false;
		}
		//3.如果输入框没有内容,禁止提交表单
		var inputisnull = false;
		$(":text").each(function(){
			if($(this).val().length == 0){
				inputisnull = true;
			}
		});
		if(inputisnull == true){
			alert("请输入地址,收货人和电话");
			return false;
			
		}
		//4.使用Ajax检查用户是否登录
		var sendUrl = contextPath+"/AjaxCheckIsLoginServlet?time="+new Date().getTime();
		$.ajax({
			type:"post",
			url:sendUrl,
			asasync:true,
			//请求成功回调函数
			success:function(backData,textStatus,xmlHttpRequest){
				if(backData == "yes"){
					//提交订单
					commitOrder();
				}
				//如果用户没有登录
				else{
					alert("sdfsdf");
					//显示登录页面
					showLoginPage();
				}
			}
		});
		return false;
	});
});
//发送ajax请求,提交订单
function commitOrder(){
	//1.从localStorage获取所存的购物车信息
	var orderitems = localStorage.getItem("carts");
	//2.发送ajax请求,订单提交数据
	var sendUrl = contextPath+"/AjaxMakeOrderServlet?"+"time"+new Date().getTime()+"&totalprice="+$("#totalprice").text().substr(3);
	$.ajax({
		type:"post",
		url:sendUrl,
		data:{
			"orderitems":orderitems,
			"receiverAddress":$("#receiverAddress").val(),
			"receiverName":$("#receiverName").val(),
			"receiverPhone":$("#receiverPhone").val()
		},
		async:true,
		success:function(backData,textStatus,xmlHttpRequest){
			var jsonobj = JSON.parse(backData);
			if("success" == jsonobj.status){
				//清空购物车
				localStorage.removeItem("carts");
				//跳转页面 
				window.location.href = contextPath+"/foreground/cart/makeordersuccess.jsp?orderid="+jsonobj.orderid+"&totalprice="+jsonobj.totalprice;
			}
		}
	});
}
//显示登录弹出的模态框
function showLoginPage(){
	alert("OK");
	var html = ""; 
	html+="<div>";
	html+=	"<div class='modal fade' tabindex='0' id='myModal2'>";
	html+=	  	"<div class='modal-dialog' >";
	html+=	    	"<div class='modal-content'>";
	html+=	      		"<div class='modal-header text-center'>";
	html+=	        		"<button type='button' class='close' data-dismiss='modal'><span>×</span></button>";
	html+=	        		"<h4 class='modal-title'>用户登录</h4>";
	html+=	      		"</div>";
	html+=	      		"<div class='modal-body paddingtop'>";
	html+=					"<p class='text-danger text-center' id='loginmsg'></p>"
	html+=	        		"<form id='loginform' class='form-horizontal'>";
	html+=	        			"<div class='form-group'>";
	html+=        					"<label for='name' class='col-md-4 control-label'>用户名</label>";
	html+=							"<div class='col-md-4'>";
	html+=						    	"<input type='text' class='form-control' name='name' id='name' placeholder='请输入用户名'>";
	html+=						    "</div>";
	html+=	        			"</div>";
	html+=	        			"<div class='form-group'>";
	html+=						    "<label for='pass' class='col-md-4 control-label'>密码</label>";
	html+=						    "<div class='col-md-4'>";
	html+=						      	"<input type='password' class='form-control' id='pass' name='pass' placeholder='请输入密码'>";
	html+=							"</div>";
	html+=						"</div>";				  
	html+=				 		"<div class='form-group text-center'>";
	html+=				   			"<input type='button' onclick='submitlogin()' class='btn btn-success' style='width: 200px;' value='登录'/>";
	html+=				 		"</div>";
	html+=	        		"</form>";
	html+=	    		"</div>";
	html+=  		"</div>";
	html+=		"</div>";
	html+=	"</div>";
	html+="</div>";
	$("#showloginform").html(html);
	$("#myModal2").modal('show');
}
//用户在弹出登录框中输入用户密码,提交表单的事件
function submitlogin(){
	var formData = $("#loginform").serialize();
	var sendUrl = contextPath+"/AjaxDoCartLoginServlet?&time="+new Date().getTime();
	$.ajax({
		type:"post",
		url:sendUrl,
		data:formData,
		async:true,
		success:function(backData,textStatus,xmlHttpRequest){
			if("success" == backData){
				$("#loginmsg").html("登录成功,3秒后跳转页面");
				var time = setInterval(function(){
					clearInterval(time);
					//提交order表单数据,生成订单
					commitOrder();
				},3000);
			}
			else{
				//提示登录出错信息
				$("#loginmsg").html(backData);
			}
		}
		
	});
}

4.makeordersuccess.jsp,订单提交成功页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<title>Insert title here</title>
	<!--引入bootstrap.css-->
	<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/bootstrap/css/bootstrap.css"/>
	<!--引入myscss.css-->
	<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/css/myscss.css" />
	<!--引入jquery.js-->
	<script type="text/javascript" src="<%=request.getContextPath()%>/bootstrap/js/jquery-3.1.1.js"></script>
	<!--bootstrap.js-->
	<script type="text/javascript" src="<%=request.getContextPath()%>/bootstrap/js/bootstrap.js"></script>
</head>
<body>
	<%@ include file="/foreground/common/head.jsp" %>
	<div class="container">
		<h3 class="text-success">订单提交成功,请您尽快支付!订单号:${param.orderid }</h3>
		<p class="text-warning">请在24小时之内完成支付,否则订单会被自动取消</p>
		<p class="text-danger">应付款金额:${param.totalprice }</p>
	</div>
</body>
</html>

5.OrderDao.java,OrderDao接口

package com.chinasoft.dao;

import java.sql.SQLException;
import java.util.List;

import com.chinasoft.entity.Order;

public interface OrderDao {
	//添加一个订单
	public void addOrder(Order order) throws SQLException;
	//根据用户id查找该用户的所有订单
	public List<Order> findOrdersByUserId(int id) throws SQLException;
	//根据订单id查询订单
	public Order findOrdersByOrderId(String orderid) throws SQLException;
	//跟新指定订单id的订单状态信息
	public void modifyOrderState(String orderid) throws SQLException;
	//删除订单
	public void deleteOrder(Order order) throws SQLException;
}

6.OrderItemDao.java,OrderItem接口

package com.chinasoft.dao;

import java.sql.SQLException;
import java.util.List;

import com.chinasoft.entity.Order;
import com.chinasoft.entity.OrderItem;

public interface OrderItemDao {
	//添加一个订单子单项
	public void addOrderItem(Order order) throws SQLException;
	//根据订单id查询该订单的所有订单项
	public List<OrderItem> findOrderItemsByOrderId(String orderid) throws SQLException;
	//根据子单的订单id删除订单子单
	public void deleteOrderItem(OrderItem orderitem) throws SQLException;
}

7.ImplOrderDao.java,OrderDao实现类

package com.chinasoft.dao.impl;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.chinasoft.dao.OrderDao;
import com.chinasoft.entity.Order;
import com.chinasoft.entity.OrderItem;
import com.chinasoft.entity.User;
import com.chinasoft.util.C3P0Util;

public class ImplOrderDao implements OrderDao{

	/**
	 * 添加一个订单
	 */
	@Override
	public void addOrder(Order order) throws SQLException {
		QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
		//插入订单基本信息
		qr.update("insert into orders(id,money,receiverAddress,receiverName,receiverPhone,payState,user_id) values(?,?,?,?,?,?,?)",
				order.getId(),order.getMoney(),order.getReceiverAddress(),order.getReceiverName(),order.getReceiverPhone(),order.getPaystate(),order.getUser().getId());
		
		//订单的子单信息(具体所买的商品信息)
		ImplOrderItemDao implOrderItemDao = new ImplOrderItemDao();
		implOrderItemDao.addOrderItem(order);
	}

	/***
	 * 查找某个用户的所有订单
	 */
	@Override
	public List<Order> findOrdersByUserId(int id) throws SQLException {
		QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
		//1.查找该用户的所有订单
		List<Order> orders = qr.query("select * from orders where user_id = ?", new BeanListHandler<>(Order.class),id);
		//2.根据用户id查询该用户的具体信息
		ImplUserDao implUserDao = new ImplUserDao();
		User u = implUserDao.findUserById(Integer.toString(id));
		//3.订单子单项的实现类
		ImplOrderItemDao implOrderItemDao = new ImplOrderItemDao();
		//4.遍历每一个订单
		for(Order o : orders){
			//查询该订单的具体子单项
			List<OrderItem> items = implOrderItemDao.findOrderItemsByOrderId(o.getId());
			//子单项设置对应 的订单信息
			for(OrderItem item:items){
				item.setOrder_id(o.getId());
			}
			//该订单设置对应的子单和用户信息
			o.setOrderitems((ArrayList<OrderItem>)items);
			o.setUser(u);
		}
		return orders;
	}

	
	/**
	 * 根据订单id查询指定订单
	 */
	@Override
	public Order findOrdersByOrderId(String orderid) throws SQLException {
		QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
		Order order = qr.query("select * from orders where id = ?", new BeanHandler<>(Order.class),orderid);
		return order;
	}

	/**
	 * 修改订单状态
	 */
	@Override
	public void modifyOrderState(String orderid) throws SQLException {
		QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
		qr.update("update orders set paystate = ? where id = ?", "1",orderid);
	}

	/**
	 * 删除订单
	 */
	@Override
	public void deleteOrder(Order order) throws SQLException {
		QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
		//先删OrderItem表
		for(OrderItem item : order.getOrderitems()){
			ImplOrderItemDao implOrderItemDao = new ImplOrderItemDao();
			implOrderItemDao.deleteOrderItem(item);
		}
		
		//再删Order表
		qr.update("delete from orders where id = ?",order.getId());
	}

}

8.ImplOrderItemDao.java,OrderItemDao实现类

package com.chinasoft.dao.impl;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.chinasoft.dao.OrderItemDao;
import com.chinasoft.entity.Order;
import com.chinasoft.entity.OrderItem;
import com.chinasoft.entity.Product;
import com.chinasoft.util.C3P0Util;

public class ImplOrderItemDao implements OrderItemDao{

	/**
	 * 添加订单的子单项
	 */
	@Override
	public void addOrderItem(Order order) throws SQLException {
		QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
		//把每一个订单的子单插入到数据库
		for(OrderItem item : order.getOrderitems()){
			qr.update("insert into orderitem values(?,?,?)", order.getId(),item.getProduct_id(),item.getBuynum());
		}
	}

	
	/**
	 * 查找某一个订单的所有子单
	 */
	@Override
	public List<OrderItem> findOrderItemsByOrderId(String orderid) throws SQLException {
		QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
		//根据订单查询所有的订单项
		List<OrderItem> items = qr.query("select * from orderitem where order_id = ?", new BeanListHandler<>(OrderItem.class), orderid);
		ImplProductDao implProductDao = new ImplProductDao();
		for(OrderItem item : items){
			//查询订单项的书籍信息
			Product product = implProductDao.findBookById(item.getProduct_id());
			//订单项关联书籍
			item.setProduct(product);
		}
		return items;
	}

	
	/**
	 * 根据子单的订单id删除订单子单
	 */
	@Override
	public void deleteOrderItem(OrderItem orderitem) throws SQLException {
		QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
		qr.update("delete from orderitem where order_id = ?",orderitem.getOrder_id());
	}

}


9.AjaxCheckIsLoginServlet.java,检测用户是否登录

package com.chinasoft.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.chinasoft.entity.User;

/**
 * @author jf
 * 功能:检测用户是否登录
 */
@WebServlet("/AjaxCheckIsLoginServlet")
public class AjaxCheckIsLoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    public AjaxCheckIsLoginServlet() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		//获取浏览器中存储的session对象
		User user = (User) request.getSession().getAttribute("user");
		//user不为空,说明用户已经登录
		if(user!=null){
			response.getWriter().write("yes");
		}else{
			response.getWriter().write("no");
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

10.AjaxMakeOrderServlet.java,向数据库插入订单项

package com.chinasoft.servlet;

import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.chinasoft.dao.impl.ImplOrderDao;
import com.chinasoft.entity.Order;
import com.chinasoft.entity.OrderItem;
import com.chinasoft.entity.User;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

/**
 * @author jf
 * 功能:向数据库插入订单项
 */
@WebServlet("/AjaxMakeOrderServlet")
public class AjaxMakeOrderServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public AjaxMakeOrderServlet() {
        super();
    }

	@SuppressWarnings({ "unchecked", "static-access" })
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//1.获取请求参数
		String receiverAddress = request.getParameter("receiverAddress");
		String receiverName = request.getParameter("receiverName");
		String receiverPhone = request.getParameter("receiverPhone");
		String oitems = request.getParameter("orderitems");
		String totalPrice = request.getParameter("totalprice");
		//2.引入json需要的jar包
		//3.把oitems解析长订单的子单对象
		JSONArray jarr = JSONArray.fromObject(oitems);
		List<OrderItem> orderItems = jarr.toList(jarr,OrderItem.class);
		
		//4.生成订单对象
		Order order = new Order();
		order.setId(UUID.randomUUID().toString());
		order.setMoney(Float.parseFloat(totalPrice));
		order.setReceiverAddress(receiverAddress);
		order.setReceiverName(receiverName);
		order.setReceiverPhone(receiverPhone);
		order.setPaystate(0);
		
		//5.遍历订单子单,设置子单关联的订单id
		for(OrderItem item : orderItems){
			item.setOrder_id(order.getId());
		}
		//6.设置订单关联的子单以及订单关联的用户信息
		order.setOrderitems((ArrayList<OrderItem>)orderItems);
//		ImplUserDao implUserDao = new ImplUserDao();
		User user = (User) request.getSession().getAttribute("user");
		order.setUser(user);
		//7.插入订单
		ImplOrderDao implOrderDao = new ImplOrderDao();
		try {
			implOrderDao.addOrder(order);
			//8.拼接JSON数据返回客户端
			HashMap<String,String> map = new HashMap<>();
			map.put("totalprice", totalPrice);
			map.put("orderid", order.getId());
			map.put("status", "success");
			String json = JSONObject.fromObject(map).toString();
			response.getWriter().write(json);
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println(e.getMessage());
		}
		
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

11.AjaxDoCartLoginServlet.java提交购物车的时候,如果用户没有登录,则弹出登录框让用户登录,此处处理弹出框登录的逻辑

package com.chinasoft.servlet;

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.chinasoft.dao.impl.ImplUserDao;
import com.chinasoft.entity.User;

/**
 * @author jf
 * 功能:提交购物车的时候,如果用户没有登录,则弹出登录框让用户登录,此处处理弹出框登录的逻辑
 */
@WebServlet("/AjaxDoCartLoginServlet")
public class AjaxDoCartLoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public AjaxDoCartLoginServlet() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//1.获取ajax请求过来的账号和密码
		String name = request.getParameter("name");
		String pass = request.getParameter("pass");
		
		//2.根据账号密码查询数据库
		ImplUserDao implUserDao = new ImplUserDao();
		try {
			//2-1找到用户保存用户
			User user = implUserDao.findUserByUserNameAndPassword(name, pass);
			if(user!=null){
				request.getSession().setAttribute("user", user);
				response.getWriter().write("success");
			}
			//2-2没有找到用户存储,没有找到用户信息
			else{
				response.getWriter().write("此用户不存在");
			}
			//2-3发生错误储存错误信息
		} catch (SQLException e) {
			response.getWriter().write(e.getMessage());
			e.printStackTrace();
		}
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}





图书商城:购物车模块 购物车存储 保存在session中 保存在cookie中 保存在数据库中 1、创建相关类购物车的结构: CartItem:购物车条目,包含图书和数量 Cart:购物车,包含一个Map/** * 购物车类 */ public class Cart { private Map<String,CartItem> map = new LinkedHashMap<String,CartItem>( 阅读详情

相关推荐

javaweb网上图书商城

小驿书城 该系统是实现了一个简单的网上书城,主要功能有用户注册、登录,分页浏览图书,对图书进行快速搜索,点击图书查看详情,对图书进行评论,添加购物车,下单购买等。 主界面 该图为主界面的展示(底层Div实现) 注册登录 该图为注册页面效果 图书详情页面 购物车 确认订单页面 ...

qq_45287456的博客 3437

【得物技术】主子订单模型

主子订单模型: 在展开讨论之前,先需要给出一个比较清晰的定义,主子订单是什么? 如何界定主订单 主订单承载用户购买行为中【某逻辑聚合维度内所有相关SKUS】的动作和流转。 逻辑聚合取决于具体的业务场景,接下来会根据得物的业务模型,大致分析【逻辑聚合】到底是什么逻辑抽象,从表现上来看,主订单是一个或者一些子订单的聚合。 如何界定子订单 子订单承载用户购买行为中SKU的动作和流转 所有电商都支持SKU维度的取消,退货行为,这也是消费者的合法权利,为此需要一种模型去承接用户购买行为中SKU的

SmartCodeTech的博客 5209

数据库课程设计订单生成系统代码+数据库+实验报告

数据库课程设计订单生成系统,包括代码+数据库+实验报告,一应俱全。

探讨一次订单拆单流程

第一本文引出订单拆单这个概念,第二本文通过一次购物流程讲解了拆单发生原因和时机,优惠策略计算,第三本分析子订单表如何设计。需要说明真实拆单场景非常复杂,不同公司拆单策略也不同,本文只是讲解一个简单实例,复杂场景需要根据策略具体分析,总体上可以从销售层、调度层、仓库层三个维度思考。

JAVA前线技术专栏 1904

C#做的超市进销存管理系统(Windows窗体应用程序)

以前无聊做的个系统,用VS2005写的 bug肯定还是有的.功能不是很全 刚用VS2008运行一遍正常.有个2005备份的 .如果装了SQL2005,可以直接登录运行 里面有Word文档和PPT介绍. 账号:admin密码:123 1.进货管理 记录采购进货,采购退货,且可以查看所有的进货记录 2.销售管理 记录商品销售,顾客退货,可以查看仓库。 3.库存管理 记录商品变动情况,可以查看仓库。 4.日常管理 供货商管理,售后管理。 5.系统设置 操作员设置,仓库设置,返回主界面等

javaweb简易购物车设计

主要针对于针对于初学javaweb的人,代码简单易懂。

基于Java+SpringBoot+vue+elementui图书商城系统设计实现

主要功能包括管理员:首页、个人中心、图书分类管理、回收类别管理、新书榜管理、特价区管理、旧书回收管理、用户管理、订单评价管理、回收预约管理、图书回收管理、管理员管理、系统管理、订单管理。前台使用:首页、新书榜、特价区、旧书回收、公告资讯、个人中心、后台管理、购物车、客服。用户:首页、个人中心、订单评价管理、回收预约管理、图书回收管理、我的收藏管理、订单管理等功能。

java李阳勇的博客 4万+

JSP 商城源码 商城源码实现了购物车跟订单支付功能

商城源码实现了购物车跟订单支付功能 给一些初学者参考 希望能多多指教

Django图书商城系统实战开发 - 实现商品详情、购物车、购买

在实现商品详情查看之前,首先需要确保数据库中已经存在商品的数据,并且在前端页面上有展示商品列表的功能。

qq_22593423的博客 1373

订单查询系统(ASP)

一个以ASP编写的订单查询系统,可以让用户查询订定的进度。

WinForm制作文件传输助手,Tcp局域网传输文件,传输速度受限于宽带和硬盘速度上限

文件传输助手为什么会出现,是因为项目上有些特殊的地方限制太多了,连插硬盘都需要关软件,联网又要开很不方便,网络限制一般软件只能局域网通信,还要开特定的端口等,你才能在电脑上通信,这样和机房的服务器远程的时候文件就不好拿过去,又不可能每次都去开机房的门。现在这个功能比较简单,只能单文件发送,但是其实比U盘硬盘方便,一般的六类网线传输压缩包在50M/s以上,U盘硬盘复制就不行了,特别如果是像我们学校这种网络结构,一个学校都在一个局域网,那真的方便!普通的局域网用特定IP和端口,通信也是很方便的。

m0_69233031的博客 1672

jsp中使用session实现一个简单的购物车案例

相信大家都有网上购物的经历,当用户选定某件商品时,只要选择“购买”,便可将商品添加到购物车中,购物车中包含了用户所有要购买的商品。该类在实现时,需要通过getSession()获取到所有的Session对象,然后判断用户是否已经购买图书,如果已经购买过,则显示购买的图书列表,否则在页面显示友好的提示“对不起!该类有两个功能,一是将用户购买的图书信息保存到Session对象中,二是在用户购买图书结束后,将页面重定向到用户已经购买的图书列表。1、当购买某本书后,再次访问图书列表,不能显示已经购买了的图书。

qq_55482652的博客 2059

Python实战:5分钟搞定N-CMAPSS航空发动机数据集解析(附完整代码)

本文提供了一份针对N-CMAPSS航空发动机数据集的快速解析实战指南。通过Python的h5py和Pandas库,详细演示了如何高效读取HDF5格式文件、理解数据结构、提取关键特征(如传感器数据与剩余使用寿命RUL),并整合为可用于预测性维护分析的DataFrame,帮助研究者和工程师快速上手这一重要的工业时序数据集。

weixin_29083373的博客 279

基于ASP.NET的图书在线销售管理系统设计与实现

本文介绍了一个基于ASP.NET和SQL Server开发的图书销售系统。系统采用B/S架构,分为后台管理模块和前台用户模块。后台包括图书类别维护、图书信息管理、订单处理等功能;前台提供用户注册、购物车、订单查询、资料下载等在线购书服务。系统使用C#语言开发,运行环境为Windows XP+SQL Server2000。摘要重点说明了系统的功能结构、开发工具和数据库设计原则,体现了该系统在图书在线销售方面的实用性和便捷性。

毕业作品网站 2177

如何构建智能聊天系统

聊天分为听、思考、读,简单的通过ASR、LLM、TTS三类模型的组合可以实现,最近openai推出支持多模态的GPT-4o模型,可以把三个模型真正融合成在一起。现在市面上的模型百花齐放,各有所长。要实现可落地的方案,需要结合业务,验证模型效果,同时也要考虑方案的可行性,有些模型在国内能用,有些在国内不能用。

xsgnzb的专栏 2108

深入解析 ReDoc:从零构建高性能 API 文档的终极指南

ReDoc 是一个强大的开源工具,用于将 OpenAPI 规范转换为高质量、响应式的 API 文档。本文详细介绍了如何使用 ReDoc 构建和自定义 API 文档,包括如何编写支持 OpenAPI 的 API 注解、配置 HTML 页面以加载文档,以及如何利用 ReDoc 的高级功能进行定制。通过实例代码,您将学会如何灵活地展示 API 文档,提升用户体验。无论是初学者还是经验丰富的开发者,都能从本文中获得实用的技巧与方案,帮助快速搭建符合需求的 API 文档界面。

楠搏万的博客 4626

javaWeb图书购物商城

javaWeb图书购物商城 目录 藏书阁 1.主界面 2.注册登录 3.图书详情界面 4.购物车界面 5.订单界面 项目概述 藏书阁 本项目是在线书城系统,共分为:安全管理,基础信息,查询管理,购买流程四个模块。 1)安全信息包括基本登录、自动登录、注册、头传、退出系统、用户管理等功能。 2) 基础信息包括用户信息、图书信息、订单信息。 3)查询管理包括分页查询所有图书、按照图书名模糊查询图书、根据图书编号查询图书详情和图书评论并添加评论等功能。 4)购买流程包括分别通过数据库和cookie进行,添加购物车

qq_45731144的博客 3807

当兵心理测试软件,当兵心理测试题及答案

心理测试是一种比较先进的测试方法,它是指通过一系列手段,将人的某些心理特征数量化,来衡量个体心理因素水平和个体心理差异差异的一种科学测量方法。小编为你整理了当兵心理测试题及答案,希望对你有所参考帮助。征兵心理测试题(1代表是2代表否)1、我的胃口很好。12、我早上起来的时候,多半觉得睡眠充足,头脑清醒13、我喜欢看报纸上的犯罪新闻。14、有时我常感到困难重重,无法克服。25、我时常遇见一些所谓的专...

weixin_42128393的博客 1万+

JavaWeb项目练习--购物车模块、订单模块

购物车模块 购物车存储方式: 1)保存在session中;此次项目保存在session中 2)保存在cookie中; 3)保存在数据库中: 不同方式的优缺点: 1.Session(Memcached)方式 优点:购物车信息保存在服务端,可以保存1M 信息。 缺点:1)对于大型网站会占有过多的服务器内存资源,造成服务器压力过大。 2)Session保存的信息会在用户退...

一万年行不行的博客 3万+

Visual Studio 2015 插件开发 从入门到放弃(一)

必需知识:C#和Visual Studio (1)安装 Visual Studio 2015 的时候选择 Visual Studio 扩展性工具(Visual Studio Extensibility Tools)。对于已经安装好 Visual Studio 2015 的小伙伴,可以找VS2015的安装包,或者在程序与功能中找VS2015双击,在VS2015界面中选择 修改,再选择

AncientPeople的博客 2万+

《测控仪器设计课后习题答案-浦昭邦-王宝光

《测控仪器设计课后习题答案-浦昭邦-王宝光 1.1. 测控仪器的概念是什么? 测控仪器则是利用测量和控制的理论,采用机、电、光各种计量测试原理及控制系统与计算机相结合的一种范围广泛的测量仪器。 1.2. 为什么说测控仪器的发展与科学技术发展密切相关? 仪器仪表的用途和重要性— 遍及国民经济各个部门,深入到人民生活的各个角落,仪器仪表中的计量测试仪器与控制仪器统称为测控仪器,可以说测控仪器的水平是科学技术现代化的重要标志。 仪器仪表的用途: 在机械制造业中:对产品的静态与动态性能测试;加工过程的控制与监测;设

无名何许人的博客 2976

基于Java+SpringBoot+vue实现图书借阅和销售商城一体化系统

本次设计任务是要设计一个网上图书商城,通过这个系统能够满足网上图书商城的管理功能。系统的主要功能包括首页、个人中心、用户管理、卖家管理、图书类型管理、图书信息管理、图书借阅管理、订单管理、系统管理等功能。 管理员可以根据系统给定的账号进行登录,登录后可以进入网上图书商城,对网上图书商城所有模块进行管理。包括查看和修改自己的个人信息以及登录密码。 该系统为每一个用户都分配了一个用户账号,用户通过账号的登录可以在系统中查看网上图书商城信息及对个人信息进行修改等功能。............

java李阳勇的博客 1万+

ABAP 后台作业里的消息机制:把 MESSAGE 写对,避免作业莫名取消

SAP后台作业消息处理机制解析 本文深入剖析了SAP系统中后台作业的消息处理机制,揭示了前台与后台执行环境的关键差异。核心发现包括: 后台作业对消息的处理规则: 所有消息写入Job log而不显示 根据消息类型决定是否继续执行 W警告在列表处理阶段会被自动转为E错误 关键异常处理: 通过error_message可捕获E/A类型消息 A类型消息会触发隐式数据库回滚 未被捕获的E/A消息将导致作业中断 实用解决方案: 将业务提示改为S或I类型 使用DISPLAY LIKE保持前台体验 通过error_mess

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2217

Servlet+mysql实现的书城系统(分为前后台 角色:普通用户/管理员 功能:前台各类图书、加入购物车、订单结算、后台订单管理、图书管理、分类管理等)

博客目录Servlet+mysql实现的书城系统实现功能截图实现的功能使用技术代码写在最后 Servlet+mysql实现的书城系统 本系统为书城系统,分为前后台,前台通过各类畅销书展示,用户可以购买图书、加入购物车结算,后台管理系统,可以进行图书录入上架、图书分类管理、订单管理等,一整套完整的图书电商系统。 实现功能截图 前台: 登录 图书购买 提交订单 后台 首页 分类管理 订单管理 实现的功能 前台: 1、登录 2、图书分类展示 3、图书购买加入购物车 4、提交订单 5、结算 后台

anmu4200的博客 6065

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

基于Java+SpringBoot+vue+node.js的图书购物商城系统详细设计和实现

随着信息技术的不断发展,我们现在已经步入了信息化的时代了,而信息时代的代表便是网络技术的日渐成熟,而现在网络已经和我们的生活紧密的联系起来了,我们不敢想象没有网络我们的生活会像怎么样,也许就像食物中没有调料现在的生活离开了网络会变得索然无味。通过网络我们可以足不出户的做许多事情,例如图书、工作、娱乐、学习,购物、交友和购物等等许多我们数之不尽的事情,而就是因为网络我们的生活变得多姿多彩,或许有时甚至帮我们省下不少的时间和给予了我们更多的机遇。图书商城网站对我们来说就有这些意义。图书网站。

java李阳勇的博客 3万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java 图书管理系统(一)jdbc + servlet + sql server + html

jdbc + servlet + sql server + html 实现图书管理系统

FF小迷糊吖~ 1646
上一篇: 图书购买系统之商品分类分页--根据主页面传来的值分类显示商品并实现动态分页功能
下一篇: java从数据库读取时间的时候时间参数后多了一个.0
Java_jfei
博客等级 码龄10年 55粉丝 33原创
评论 14
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值