`
liwenshui322
  • 浏览: 520632 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

XML购物车的实现(测试版)

阅读更多

序言:

       这篇文章会比较长,真正想了解的就得泡上一杯茶,慢慢阅读了!呵呵...

 

     1.添加商品页面  add_goods.html

<!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>
</head>
<body>
 <form action="cartAddGoodsRequest.do" method="post">
 购物(添加商品)
 <br>
 <table>
 <tr>
 <td align="right" style="width">商品ID:</td>
 <td><input type="text" name="goodsId"></td>
 </tr>
 <tr>
 <td align="right">商品所属分类:</td>
 <td><input type="text" name="goodsCatalog">(填数字:0 1 2)</td>
 </tr>
 <tr>
 <td align="right">商品价格:</td>
 <td><input type="text" name="goodsPrice"></td>
 </tr>
 <tr>
 <td align="right">购买件数:</td>
 <td><input type="text" name="purchaseNumber"></td>
 </tr>
 <tr>
 <td align="right">所属店主昵称:</td>
 <td><input type="text" name="shopkeeper" ></td>
 </tr>
 <tr>
 <td align="right">所属店铺名称:</td>
 <td><input type="text" name="shop"></td>
 </tr>

 </table>
 <input type="submit" value="提交" align="center">
 </form>

</body>
</html>
 

说明:就是填写一些商品信息,后台是用struts处理的。至于struts的配置问题就不描述了。

 

2.添加商品请求由下面这个类进行处理:    CartAddGoodsRequest

package cn.struts.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.dom4j.Document;
import org.dom4j.io.SAXReader;

import cn.struts.formbean.PurchaseGoodsBean;
/**
 * 购物车添加商品请求处理类
 * @author LI
 *
 */
public class CartAddGoodsRequest extends Action {
	
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		System.out.println("购物车添加商品处理类");
		//参数对象(商品属性)
		PurchaseGoodsBean pgb=(PurchaseGoodsBean)form;
		System.out.println("id----"+pgb.getGoodsId()+"---shop---"+pgb.getShop());
		//获得session对象
		javax.servlet.http.HttpSession session=request.getSession();
		//获得购物车对象
		String cartString=(String)session.getAttribute("cart");
		Document cartXml=null;
		if(cartString!=null)
		 cartXml = org.dom4j.DocumentHelper.parseText(cartString);
		
		//添加商品
		Document cart=cn.netjava.utils.XMLCart.getInstance()
		.addGoods(pgb, cartXml);
		//购物车放入session中存放
		session.setAttribute("cart", cart.asXML());
		return null;
	}
}

 

说明:1.首先从session中获得购物车对象,因为session里面存放的购物车是字符串形式(为什么,后面会讲),需要转换成Document对象 。

         2.添加商品处理,这里调用的是一个叫做XMLCart类的一个addGoods方法。稍等,下面我们就来看这个类!

         3.将添加了新商品的购物车重新以字符串形式保存在session当中。

 

 

3.购物车操作类(往购物车里面添加商品,修改商品数量,删除商品,清空购物车):XMLCart

package cn.netjava.utils;

import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import cn.struts.formbean.PurchaseGoodsBean;

/**
 * XML实现的购物车
 * @author LI
 *
 */
public class XMLCart {
	
	//私有构造器
	private XMLCart(){};
	//单实例
	private static XMLCart instance=null;
	//获得该实例
	public static synchronized XMLCart getInstance()
	{
		//如果还没有被初始化
		if (instance==null){
			instance=new XMLCart();
		}
		return instance;
	}
	
	//创建购物车
	public Document createCart(){
		//使用DocumentHelper类创建一个文档实例,购物车对象
		Document cart=DocumentHelper.createDocument();
		//创建根元素cart
		org.dom4j.Element cartRoot=cart.addElement("cart");
		//给根节点加子节点,代表购物车总金额
		Element totalMoney=cartRoot.addElement("totalMoney");
		totalMoney.setText("0");
		//给根节点加子节点,代表店主昵称
		@SuppressWarnings("unused")
		Element shopkeeper =cartRoot.addElement("shopkeeper");
		//给根节点加子节点,代表店铺名称
		@SuppressWarnings("unused")
		Element shop =cartRoot.addElement("shop");
		//商品列表
		@SuppressWarnings("unused")
		Element goodsList=cartRoot.addElement("goodsList");
		//返回购物车对象
		return cart;
	}
	
	/**
	 * 清空购物车
	 * @param cart:购物车对象
	 */
	public Document emptyCart(Document cart){
		//获得根节点
		Element root=cart.getRootElement();
		//清空总资金
		Element totalMoneyNode=root.element("totalMoney");
		totalMoneyNode.setText(0+"");
		//清空店铺和店主
		Element shopNode=root.element("shop");
		shopNode.setText("");
		Element shopkeeperNode=root.element("shopkeeper");
		shopkeeperNode.setText("");
		
		//获得商品列表节点
		Element goodsListNode=root.element("goodsList");
		//遍历商品列表
		java.util.List<Element>goodList=goodsListNode.elements();
		for(int i=0;i<goodList.size();i++){
			//得到商品节点
			Element goodNode=goodList.get(i);
			goodsListNode.remove(goodNode);
		}
		return cart;
	}
	/**
	 * 添加商品
	 * @param pgb:要添加的商品
	 * @param cart:购物车对象
	 */
	public Document addGoods(PurchaseGoodsBean pgb,Document cart){
		//如果购物车为NULL
		if(cart==null){
			//新建购物车对象
			cart=createCart();
		}
		if(pgb==null){
			return cart;
		}
		//获得根节点
		Element root=cart.getRootElement();
		//判断是否为同一店铺的商品
		boolean  sameShop=isSameShop(pgb,cart);
		//如果为不同店铺
		if(!sameShop){
			//清空购物车
		cart=emptyCart(cart);
		//设置店主昵称
		Element shopkeeperNode=root.element("shopkeeper");
		shopkeeperNode.setText(pgb.getShopkeeper());
		//设置店铺名称
		Element shopNode=root.element("shop");
		shopNode.setText(pgb.getShop());
		}
		//判断这件商品是否已在购物车里面
		boolean exist=isGoodsExist(pgb.getGoodsId(),cart);
		//如果已在
		if(exist){
			return cart;
		}else{
			
			//添加商品
			Element goodsListNode=root.element("goodsList");
			Element goodsNode=goodsListNode.addElement("goods");
			goodsNode.addElement("goodsId").setText(pgb.getGoodsId());
			goodsNode.addElement("goodsNumber").setText(pgb.getPurchaseNumber()+"");
			goodsNode.addElement("goodsCatalog").setText(pgb.getGoodsCatalog()+"");
			goodsNode.addElement("goodsPrice").setText(pgb.getGoodsPrice()+"");
			
			//操作数据库,根据商品ID获得商品的图片,名称,价格。
			
			
			//这里人工生成
			goodsNode.addElement("goodsPicture").setText("image/1.jpg");
			goodsNode.addElement("goodsName").setText("精致MP3");
			//设置商品积分
			int goodsIntegral=(int) pgb.getGoodsPrice()*pgb.getPurchaseNumber();
			goodsNode.addElement("goodsIntegral").setText(goodsIntegral+"");
			//设置每样商品资金小计
			double goodsTotalMoney=pgb.getGoodsPrice()*pgb.getPurchaseNumber();
			goodsNode.addElement("goodsSubtotal").setText(goodsTotalMoney+"");
			//获得当前总资金
			double totalMoney=Double.parseDouble
			(root.element("totalMoney").getText());
			//修改总金额
			double modifyTotalMoney=goodsTotalMoney+totalMoney;
			root.element("totalMoney").setText(modifyTotalMoney+"");
		}
		System.out.println(cart.asXML());
		return cart;
	}
	
	/**
	 * 购买的商品是否属于同一店铺
	 * @param pgb:购买的商品属性
	 * @param cart:购物车
	 * @return:TRUE:属于同一店铺 FALSE:不属于同一店铺
	 */
	public boolean isSameShop(PurchaseGoodsBean pgb,Document cart){
		//获得根节点
		Element root=cart.getRootElement();
		//获得店主节点
		Element shopkeeperNode=root.element("shopkeeper");
		String shopkeeper=shopkeeperNode.getText();
		//如果没有店主
		if(shopkeeper==""){
			System.out.println("还没有店铺");
			//设置店主昵称
			shopkeeperNode.setText(pgb.getShopkeeper());
			//设置店铺名称
			Element shopNode=root.element("shop");
			shopNode.setText(pgb.getShop());
			return true;
		}else{
			System.out.println("   "+shopkeeper+"   "+pgb.getShopkeeper());
			//如果是同一个 店铺
			if(shopkeeper.equals(pgb.getShopkeeper())){
				return true;
			}
		}
		return false;
	}
	
	/**
	 * 修改商品数量
	 * @param pgb:商品对象
	 * @param cart:购物车对象
	 */
	public Document modifyPurchaseNumber(PurchaseGoodsBean pgb,Document cart){
		//获得根节点
		Element root=cart.getRootElement();
		//获得要修改的商品节点
		Element goodNode=getNode(pgb.getGoodsId(),cart);
	if(goodNode!=null){
		//得到商品數量迭代器
		Iterator goodsNumberIter=goodNode.elementIterator("goodsNumber");
		
		int goodsNumber=0;
		//获得商品数量
		if(goodsNumberIter.hasNext()){
			Element goodsNumberNode=(Element)goodsNumberIter.next();
			goodsNumber=Integer.parseInt(goodsNumberNode.getText());
			//修改商品的數量
			goodsNumberNode.setText(pgb.getPurchaseNumber()+"");
		}
		
		//商品数量的差量
		int goodsSub=pgb.getPurchaseNumber()-goodsNumber;
		
		//商品價格迭代器
		Iterator goodsPriceIter=goodNode.elementIterator("goodsPrice");
		double goodsPrice=0;
		//獲得商品價格
		if(goodsPriceIter.hasNext()){
			Element goodsPriceNode=(Element)goodsPriceIter.next();
			goodsPrice=Double.parseDouble(goodsPriceNode.getText());
		}
		//商品差价
		double goodsMoney=goodsPrice*goodsSub;
		//获得当前总资金
		double totalMoney=Double.parseDouble
		(root.element("totalMoney").getText());
		//修改总金额
		double modifyTotalMoney=goodsMoney+totalMoney;
		root.element("totalMoney").setText(modifyTotalMoney+"");
		//商品小计迭代器
		Iterator goodsSubtotalIter=goodNode.elementIterator("goodsSubtotal");
		Element goodsSubtotalNode=(Element)goodsSubtotalIter.next();
		//修改小计
		double goodsSubtotal=Double.parseDouble(goodsSubtotalNode.getText());
		double modifySubtotal=goodsSubtotal+goodsMoney;
		goodsSubtotalNode.setText(modifySubtotal+"");
		//修改获得积分
		Iterator goodsIntegralIter=goodNode.elementIterator("goodsIntegral");
		Element goodsIntegralNode=(Element)goodsIntegralIter.next();
		int goodsIntegral=(int)modifySubtotal;
		goodsIntegralNode.setText(goodsIntegral+"");
	}
	return cart;
	}

	/**
	 * 获得指定ID商品的节点
	 * @param goodsId:商品ID
	 * @param cart:购物车对象
	 * @return:指定ID的商品节点 NULL:没有这个节点
	 */
	@SuppressWarnings("unchecked")
	public Element getNode(String goodsId,Document cart){
		//获得商品列表节点
		List goodsList=	cart.selectNodes("//goodsList/goods");
		//迭代器
		Iterator goodsIter=goodsList.iterator();
		while(goodsIter.hasNext()){
			Element goods=(Element)goodsIter.next();
			//得到商品ID迭代器
			Iterator goodsIdIter=goods.elementIterator("goodsId");
			while(goodsIdIter.hasNext()){
				Element goodsIdNode=(Element)goodsIdIter.next();
				if(goodsIdNode.getText().equals(goodsId))
					return goods;
			}
		}
		return null;
	}
	
	/**
	 * 删除指定ID的商品
	 * @param goodsId:商品ID
	 * @param cart:购物车对象
	 */
	public Document deleteGoods(String goodsId,Document cart){
		//获得根节点
		Element root=cart.getRootElement();
		//获得商品列表节点
		Element goodsListNode=root.element("goodsList");
		//获得要删除的节点
		Element goodNode=getNode(goodsId,cart);
		if(goodNode==null){
			return cart;
		}
		//获得小计
		Iterator goodsSubtotalIter=goodNode.elementIterator("goodsSubtotal");
		Element goodsSubtotalNode=(Element)goodsSubtotalIter.next();
		double goodsSubtotal=Double.parseDouble(goodsSubtotalNode.getText());
		//修改购物车总金额
		double totalMoney=Double.parseDouble
		(root.element("totalMoney").getText());
		double modifyTotalMoney=totalMoney-goodsSubtotal;
		root.element("totalMoney").setText(modifyTotalMoney+"");
		//删除节点
		goodsListNode.remove(goodNode);
		
		System.out.println(cart.asXML());
		return cart;
	}
	
	/**
	 * 判断商品是否已经存在
	 * @param goodsId:商品ID
	 * @param cart:购物车对象
	 * @return TRUE:存在 FALSE:不存在
	 */
	@SuppressWarnings("unchecked")
	public boolean isGoodsExist(String goodsId,Document cart){
		//获得根节点
		Element root=cart.getRootElement();
		//获得店主节点
		Element shopkeeperNode=root.element("shopkeeper");
		String shopkeeper=shopkeeperNode.getText();
		//如果没有店主
		if(shopkeeper==""){
			System.out.println("还没有店铺");
			
			return false;
		}
		
		//获得商品列表节点
		Element goodsListNode=root.element("goodsList");
		//遍历商品列表
		java.util.List<Element>goodList=goodsListNode.elements();
		for(int i=0;i<goodList.size();i++){
			//得到商品节点
			Element goodNode=goodList.get(i);
			//得到商品ID
			Iterator goodsIdIter=goodNode.elementIterator("goodsId");
			Element goodsIdNode=(Element)goodsIdIter.next();
			String goodsID=goodsIdNode.getText();
			//如果存在这样的商品
			if(goodsId.equals(goodsID)){
				return true;
			}
		}
		return false;
	}
}
 

 说明:1.首先你得有dom4j这个解析XML文档的东东,如果感兴趣,到我的附件里面去下载

 

          2.里面有的地方可能要操作数据库,比如根据商品的ID获得商品的图片,名称,价格等等,我这里就手工模拟了!

 

 

4.展示购物车商品信息的jsp页面  show_goods.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@page import="org.dom4j.Document"%><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!--引入外部js文件-->
	<script src="js/jquery-1.3.2.min.js" type="text/javascript"></script>
	<script src="js/detailInfo.js" type="text/javascript"></script>
	
	<style TYPE="text/css">
<!--
A:link{text-decoration:none}
A:visited{text-decoration:none}
A:hover {color: #ff0000}
 -->
</style>

<title>Insert title here</title>
</head>
<body>
<c:out value="商品列表展示" /><br>   
<x:parse varDom="cartDoc">
${cart}
</x:parse>
<c:out value="总金额"/>
     <x:out select="$cartDoc/cart/totalMoney"/><br>  
     <c:out value="店铺:"/>
     <x:out select="$cartDoc/cart/shop"/><br>  
     <c:out value="店主昵称:"/>
     <x:out select="$cartDoc/cart/shopkeeper"/><br>   
     
     <table border="1">
     <tr>
     <td>商品图片</td>
     <td>商品名称</td>
     <td>商品ID</td>
     <td>商品购买数量</td>
     <td>商品所属分类</td>
     <td>商品价格</td>
     <td>可获得积分</td>
     <td>小计</td>
     <td>操作</td>
     </tr>
     <x:forEach select="$cartDoc//goods" varStatus="status">
     <tr>
     <td>
     <img alt="" src="<x:out select="goodsPicture"/>">
     </td>
     <td><x:out select="goodsName"/></td>
     <td><x:out select="goodsId"/></td>
     <td align="center">
     <a href="" class="subNumber" id="<x:out select="goodsId"/>"
     name="<x:out select="goodsNumber"/>">-</a>
     
     <input id="goodsNumber" size="2" type="text" 
     name="<x:out select="goodsId"/>" value="<x:out select="goodsNumber"/>">
     
     <a href="" class="addNumber" id="<x:out select="goodsId"/>" 
     name="<x:out select="goodsNumber"/>">+</a>
     </td>
     <td align="center"><x:out select="goodsCatalog"/></td>
     <td><x:out select="goodsPrice"/></td>
     <td><x:out select="goodsIntegral"/></td>
     <td><x:out select="goodsSubtotal"/></td>
     <td>
     <a id="<x:out select="goodsId"/>" href=""onclick="" name="delete">删除</a>
     </td>
     </tr>
     </x:forEach>
     
     </table>
     
     
     
     
     
</body>
</html>
 

说明:1. 这个页面用到了JSTL(用来展示商品信息)与jquery(用来发送异步请求,比如删除商品,修改商品数量)

想下载JSTL与jquery的 到附件下载

     2.看看这段代码:<x:parse varDom="cartDoc"> ${cart} </x:parse>   ${cart}:是从session当中取出购物车对象,在<x:parse>当中只能够为xml文件的字符串形式,这就是我为什么把购物车以字符串形式保存在session当中。

     3.jquery处理异步请求,请参考下面的js文件

 

 

5.jquery AJAX发送异步请求(修改商品数量,删除商品)  detailInfo.js

$(document).ready(function() {
	// 删除商品请求处理
$("a[name='delete']").click(
	function(){
		alert($(this).attr("id"));
		//AJAX请求
		$.ajax({
			type:"post",
			url:"DeleteCartGoodsRequest.do",
			data:"goodsId="+$(this).attr("id"),
			success:function(msg){
			alert(msg);
		}
		});
	}
);

//商品数量加一处理
$("a[class='addNumber']").click(
		function(){
			//获得商品数量
			var goodsNumber=$(this).attr("name")*1+1;
			//获得商品ID
			var goodsId=$(this).attr("id");
			alert(goodsNumber+"---id---"+goodsId);
			//AJAX请求
			$.ajax({
				type:"post",
				url:"ModifyCartGoodsRequest.do",
				data:"purchaseNumber="+goodsNumber+"&goodsId="+goodsId,
				success:function(msg){
				alert(msg);
			}
			});
		}
);

//商品数量减一处理
$("a[class='subNumber']").click(
		function(){
			//获得商品数量
			var goodsNumber=$(this).attr("name")*1-1;
			//获得商品ID
			var goodsId=$(this).attr("id");
			alert(goodsNumber+"---id---"+goodsId);
			//AJAX请求
			$.ajax({
				type:"post",
				url:"ModifyCartGoodsRequest.do",
				data:"purchaseNumber="+goodsNumber+"&goodsId="+goodsId,
				success:function(msg){
				alert(msg);
			}
			});
		}
);

//直接修改商品数量
$("input[id='goodsNumber']").change(
		function(){
			//获得商品数量
			var goodsNumber=$(this).attr("value");
			//获得商品的ID
			var goodsId=$(this).attr("name");
			alert(goodsNumber+"  "+goodsId);
			//AJAX请求
			$.ajax({
				type:"post",
				url:"ModifyCartGoodsRequest.do",
				data:"purchaseNumber="+goodsNumber+"&goodsId="+goodsId
			});
		}
);
});
 

 

6.修改商品购买数量java后台处理类: ModifyCartGoodsRequest

package cn.struts.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.dom4j.Document;

import cn.struts.formbean.PurchaseGoodsBean;
/**
 * 修改购物车某件商品数量处理类
 * @author LI
 *
 */
public class ModifyCartGoodsRequest extends Action {

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		//参数类
		PurchaseGoodsBean pgb=(PurchaseGoodsBean)form;
		//获得修改后的商品数量与商品ID
		int purchaseNumber=pgb.getPurchaseNumber();
		String goodsId=pgb.getGoodsId();
		//调试信息
		System.out.println("修改后的商品数量为----->"
				+purchaseNumber+"goodsId--->"+goodsId);
		
		//获得session对象
		javax.servlet.http.HttpSession session=request.getSession();
		//获得购物车对象
		String cartString=(String)session.getAttribute("cart");
		Document cartXml=null;
		if(cartString!=null)
		 cartXml = org.dom4j.DocumentHelper.parseText(cartString);
		
		//修改商品
		Document cart=cn.netjava.utils.XMLCart.getInstance()
		.modifyPurchaseNumber(pgb, cartXml);
		//购物车放入session中存放
		session.setAttribute("cart", cart.asXML());
		return mapping.findForward("modifySucc");
	}
}
 

这个就不必多做说明了,下面一个也一样

 

7.删除商品处理类: CartDeleteGoodsRequest

package cn.struts.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.dom4j.Document;

import cn.struts.formbean.PurchaseGoodsBean;
/**
 * 删除购物车里面的商品
 * @author LI
 *
 */
public class CartDeleteGoodsRequest extends Action {

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		System.out.println("删除购物车里面的商品");
		//参数对象
		PurchaseGoodsBean pgb=(PurchaseGoodsBean)form;
		//调试信息
		System.out.println("goodsId---------->"+pgb.getGoodsId());
		
		//获得购物车对象
		HttpSession session=request.getSession();
		String cartString =(String)session.getAttribute("cart");
		Document cartXml=null;
		if(cartString!=null)
		 cartXml = org.dom4j.DocumentHelper.parseText(cartString);
		//删除商品
		Document cart=cn.netjava.utils.XMLCart.getInstance()
		.deleteGoods(pgb.getGoodsId(), cartXml);
		//购物车放入session中存放
		session.setAttribute("cart", cart.asXML());
		return mapping.findForward("deleteSucc");
	}
}
 

 

OK,到此一切都弄好了!我基本上是Ctrl+C与Ctrl+V。呵呵...看不懂的地方,欢迎询问!如果认为哪个地方有更好的解决方法。欢迎交流!

 

 

 

1
0
分享到:
评论

相关推荐

    基于.NET Ocelot网关的GatewayProject设计源码

    该项目为基于.NET框架的Ocelot网关解决方案——GatewayProject的设计源码,包含39个文件,涵盖15个C#源代码文件、11个JSON配置文件、3个项目文件、2个解决方案文件、1个Git忽略文件、以及其他几种类型文件。该系统集成了Ocelot网关,适用于构建分布式微服务架构中的API网关功能。

    编程心得体会.pptx

    编程心得体会.pptx

    3DMAX镂空星花球建模插件FloralStarBall下载

    就是那个3DMAX镂空星花球建模,再也不用手动做了,使用这个插件可以一键生成! 3DMAX镂空星花球建模插件FloralStarBall,经典星形球体的美丽变体。星形图案以花卉风格排列,赋予物体独特的视觉美感。它将成为任何Math Art收藏、桌面展品甚至柔性塑料印刷的应力释放器的绝佳补充。 一键生成竟然不费吹灰之力!

    c语言电子时钟程序.zip

    c语言电子时钟程序

    城市小学生课间活动现状及改进措施分析

    内容概要:本文对城市小学生课间活动的现状进行了研究,通过观察和访谈的方式,分析了当前小学生课间活动存在问题的具体表现,主要包括课间活动中学生参与度较低、活动种类单一、活动时间不足等问题,并提出了相应改善措施。 适合人群:教育工作者、小学教师、校长及相关研究者。 使用场景及目标:旨在通过分析现状,为提升课间活动质量提供具体策略,以期优化校园文化,促进学生健康成长和发展。 阅读建议:读者可通过本文深入了解当前城市小学存在的课间活动问题,并从中获取切实可行的解决方案和改进建议。同时,文章强调了提高课间活动质量和多样性的必要性和途径。

    备战19届全国大学生智能汽车竞赛源码+文档说明.zip

    备战19届全国大学生智能汽车竞赛源码+文档说明.zip,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。 备战19届全国大学生智能汽车竞赛源码+文档说明.zip备战19届全国大学生智能汽车竞赛源码+文档说明.zip备战19届全国大学生智能汽车竞赛源码+文档说明.zip备战19届全国大学生智能汽车竞赛源码+文档说明.zip备战19届全国大学生智能汽车竞赛源码+文档说明.zip备战19届全国大学生智能汽车竞赛源码+文档说明.zip备战19届全国大学生智能汽车竞赛源码+文档说明.zip备战19届全国大学生智能汽车竞赛源码+文档说明.zip备战19届全国大学生智能汽车竞赛源码+文档说明.zip备战19届全国大学生智能汽车竞赛源码+文档说明.zip备战19届全国大学生智能汽车竞赛源码+文档说明.zip备战19届全国大学生智能汽车竞赛源码+文档说明.zip备战1

    基于springboot的墙绘产品展示交易平台的设计与实现源码(java毕业设计完整源码+LW).zip

    用户信息管理: 用户信息新增:添加新用户的信息。 用户信息修改:对现有用户信息进行修改。 黑名单管理: 黑名单添加:将用户添加到黑名单中。 黑名单删除:从黑名单中移除用户。 黑名单修改:对黑名单中的用户信息进行修改。 商品分类管理: 商品分类添加:增加新的商品分类。 商品分类删除:移除不再需要的商品分类。 商品分类修改:对商品分类信息进行修改。 商品信息管理: 商品信息添加:添加新的商品信息。 商品信息删除:删除商品信息。 商品信息修改:对商品信息进行修改。 商品评价管理: 商品评价删除:删除不当或过时的商品评价。 商品评价添加:添加新的商品评价。 商品评价修改:对商品评价进行修改。 订单管理管理: 订单管理删除:删除订单信息。 订单管理修改:对订单信息进行修改。 项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:springboot,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3

    三菱fx5U控制三轴伺服定位 (BOM表,CAD电气图纸,plc程序,人机界面)

    三菱fx5U控制三轴伺服定位。 (BOM表,CAD电气图纸,plc程序,人机界面)

    Java反编译工具:jd-jui

    软件功能: jd-jui能以java文件的方式查看jar中的class文件 安装: 该软件无需安装,下载并解压后,双击exe文件即可启动 使用: 启动jd-jui后,点击左上角的 File -> Open -> 打开需要查看源码的jar包,即可查看源代码

    utlog.sqlite

    utlog.sqlite

    基于C#的库存管理系统

    【基于C#的库存管理系统】是一个使用C#编程语言开发的软件应用,旨在帮助企业或个人高效地管理和跟踪库存。在库存管理中,系统的功能通常包括物品的入库、出库、库存查询、库存盘点以及生成相应的报表,以确保库存水平保持在最佳状态,避免过度存储造成的资金占用或库存短缺带来的损失。

    帮助文档能够很好的支撑前端技术学习

    帮助文档能够很好的支撑前端技术学习

    西门子1200与ABB机器人TCP 通信案例.zip

    西门子1200与ABB机器人TCP 通信案例.zip

    微信小程序源码-亿家旺生鲜云订单零售系统的设计与实现-微信端-毕业设计源码-期末大作业.zip

    亿家旺生鲜云订单零售系统是一个基于微信小程序的项目。该项目主要功能丰富多样,从前台来看,用户能够在首页查看系统核心内容与导航,浏览详细的商品信息、获取商品资讯、管理自己的订单、评价订单、收藏商品、充值账户、在线购买服务等,还可查看和管理购物车。后台功能则包括管理系统用户信息、商品分类、商品信息、订单评价、进行系统整体设置与维护以及处理订单信息等。 在技术框架方面,开发语言为Java,采用SSM(Spring、SpringMVC、MyBatis)框架后端技术,前端使用Vue,数据库是MySQL。其开发目的是满足人们对生鲜食品的需求,借助信息技术提供一个便捷、安全、高效的生鲜购物平台,连接用户与供应商,提升生鲜行业的服务质量和效率。项目为完整毕设源码,先看项目演示,希望对需要的同学有帮助。

    拯救者PC,新年主题壁纸

    拯救者PC,新年主题壁纸

    工业物联网监控平台可视化java项目springboot开发iot二次开发源 SpringBoot物联网风电监测系统源码 统源码 iot物联网风电能源电场监控系 基于SpringBoot的物联网系统

    工业物联网监控平台可视化java项目springboot开发iot二次开发源 SpringBoot物联网风电监测系统源码 统源码 iot物联网风电能源电场监控系 基于SpringBoot的物联网系统 易读易懂、界面简洁美观。 核心技术:Spring, MyBatis,shiro没有任何其它重度依赖。 数据设计 电厂信息 电厂信息包括电厂编号、风机总数、总装机量等 风机配置信息 风机编号、风机品牌、功率、实际功率、所在位置(坐标),所属电厂、启动时间、安装时间、运行状态等。 风机数据统计 分别对风机的风速、转速、发电量、功率、偏航次数、 偏航角度等进行年月日统计。 有一个jar包可能需要你自己去找

    帝国CMS7.5仿《六皮游戏网》源码/手游门户网站模板

    非常大气漂亮的手游模板,个人觉得比现在官方改版的要漂亮,模板优化好美观大气赏心悦目,本程序带有多端同步生成插件维护好省心。是一个专注于手机游戏的综合门户网站,提供手游下载、好玩的手游推荐、手游排行榜、热门手游攻略、手游视频解说、行业新闻。集安卓Android、苹果iOS及多终端的手游平台,Get最新手游技巧!

    化学工程中无约束优化数值实验及参数估计研究

    内容概要:本文探讨了两个无约束优化问题及其相关数值实验。首先讨论了一阶反应动力学的参数估计问题,涉及线性常微分方程组的解及其与实验数据的最佳拟合。其次,详细分析了一个复杂的无约束优化问题,提供了多种求解方法(基本牛顿法、信赖域法、拟牛顿法)的结果和比较,旨在评估不同算法的性能。最后,作者对实验过程中遇到的问题及解决方案进行了总结,并分享了对无约束最优化算法的理解。 适用人群:适用于化学工程、数学建模和优化领域的研究人员及学生。 使用场景及目标:用于理解和应用各种无约束优化算法,提高科研工作者和学生的算法选择能力和实际操作经验。 其他说明:文中引用了多部权威教材和技术手册,如《数学规划基础》和《非线性规划:概念、算法及化工过程的应用》,为理论背景提供了可靠依据。此外,还提供了详细的数值实验步骤和算法实现细节,便于读者复现和深入研究。

    2025跨年源码 跨年烟花html源代码

    【跨年烟花html源代码】是一种用于网页设计的创意元素,它通过JavaScript和HTML结合,为网站增添节日气氛,特别是新年到来之际。这种特效能够模拟烟花绽放的效果,为用户带来视觉上的惊喜。在网页上实现跨年烟花效果,通常会涉及以下几个关键知识点: 1. HTML基础:HTML(超文本标记语言)是网页设计的基础,用于构建网页结构。在这个项目中,HTML将用于创建烟花展示的容器,比如一个全屏的div元素,以及可能的控制按钮等交互元素。 2. CSS样式:CSS(层叠样式表)负责网页的布局和样式。在跨年烟花效果中,CSS可以用来设置烟花的颜色、大小、位置以及烟花爆炸后的粒子效果。使用CSS动画和过渡效果可以实现烟花升空、绽放和消失的动态过程。 3. JavaScript核心:JavaScript是实现动态效果的关键,它负责烟花的发射、运动轨迹、碰撞检测以及爆炸效果。JavaScript中的Math对象会被大量使用,以生成随机的烟花方向和速度。同时,定时器(setTimeout或requestAnimationFrame)用于控制烟花发射的间隔和动画帧率。 4. Canvas AP

    基于微信小程序+SpringBoot的校园二手交易平台(源码+数据库+说明文档+效果图)毕业设计

    Java毕业设计——基于微信小程序+SpringBoot的校园二手交易平台 软件架构 系统分为三个端,分别是客户端、管理端、服务端; 客户端:使用原生微信小程序实现 管理端:使用Layui实现 服务端:使用Java SpringBoot实现 用到的所有技术栈: 客户端:微信小程序 管理端:Html、Css、JavaScript、Layui、Ajax、JQuery 服务端:Java JDK8、SpringBoot、Mybatis 数据库:MySQL 工具:Idea、HBuilderX、微信小程序开发者工具、xampp、Navicat 安装教程 启动MySQL服务,新建数据库second_market,导入数据库文件second_market.sql 启动服务端,在idea中打开SecondMarketServer,修改application.yml文件中的数据库连接信息,启动项目 启动管理端,在HBuilderX中打开SecondMarketManager;修改AppConfig.js中的服务器信息, 配置web服务器,可以使用Nginx或者Apache,我使用xam

Global site tag (gtag.js) - Google Analytics