- 浏览: 520632 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
u011165335:
distinct不影响使用半连接
(转)关于semi-join/anti-join的一点探讨 -
353790060:
redo 记录事务执行后的日志 undo 记录事务回滚的日志 ...
Oracle redo与undo浅析 -
jayxigua:
redo用于在失败时重放事务(即恢复事务),undo则用于取消 ...
Oracle redo与undo浅析 -
aa_qq110:
Openbravo有中文包吗
Openbravo开发手册 -
iocaop:
不错,写的很清晰易懂
JAVA 服务提供者框架介绍
序言:
这篇文章会比较长,真正想了解的就得泡上一杯茶,慢慢阅读了!呵呵...
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。呵呵...看不懂的地方,欢迎询问!如果认为哪个地方有更好的解决方法。欢迎交流!
发表评论
-
(转)JVM中可生成的最大Thread数量
2016-10-25 12:51 1338============================== ... -
(转)Java线程:概念与原理
2015-03-26 20:13 2246原博客地址: http://www.cnblogs.com/ ... -
java ArrayList与LinkedList知识点
2015-01-10 18:33 1913一 ArrayList 1. arra ... -
控制反转与依赖注入
2012-11-04 20:32 1154原博客地址 ... -
(转)第2条:遇到多个构造器参数时要考虑用构建器
2011-11-20 19:14 1006静态工厂和构造器有个共同的局限性:它们都不能很好地 ... -
JAVA 服务提供者框架介绍
2011-11-19 17:02 9891服务提供者框架是指:多个服务提供者实现一个服务,系 ... -
(转)java中hashcode()和equals()的详解
2011-11-18 13:12 2487hashcode方法浅析 ... -
(转)Java动态代理实现
2011-11-15 11:53 697原文地址:http://www.cnblogs.com ... -
JAVA 解析JSON格式数据
2011-09-06 12:08 79691.解析JSON格式数据需要的JAR包: ... -
java split 小数点问题
2011-07-30 12:05 2258java中要用小数点分割字符串,需要转义 比如: ... -
(转)java中调用ORACLE存储过程
2010-08-31 10:38 1082这段时间开始学 ... -
怎样在JAVA文件中获取该项目的相对路径
2009-11-02 22:33 44801.基本概念的理解 绝对路径:绝对路径就是你的主页上的文 ... -
浅析java虚拟机工作流程
2009-05-25 16:41 1825首先给一个简单的java示例,源代码如下: ...
相关推荐
该项目为基于.NET框架的Ocelot网关解决方案——GatewayProject的设计源码,包含39个文件,涵盖15个C#源代码文件、11个JSON配置文件、3个项目文件、2个解决方案文件、1个Git忽略文件、以及其他几种类型文件。该系统集成了Ocelot网关,适用于构建分布式微服务架构中的API网关功能。
编程心得体会.pptx
就是那个3DMAX镂空星花球建模,再也不用手动做了,使用这个插件可以一键生成! 3DMAX镂空星花球建模插件FloralStarBall,经典星形球体的美丽变体。星形图案以花卉风格排列,赋予物体独特的视觉美感。它将成为任何Math Art收藏、桌面展品甚至柔性塑料印刷的应力释放器的绝佳补充。 一键生成竟然不费吹灰之力!
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备战1
用户信息管理: 用户信息新增:添加新用户的信息。 用户信息修改:对现有用户信息进行修改。 黑名单管理: 黑名单添加:将用户添加到黑名单中。 黑名单删除:从黑名单中移除用户。 黑名单修改:对黑名单中的用户信息进行修改。 商品分类管理: 商品分类添加:增加新的商品分类。 商品分类删除:移除不再需要的商品分类。 商品分类修改:对商品分类信息进行修改。 商品信息管理: 商品信息添加:添加新的商品信息。 商品信息删除:删除商品信息。 商品信息修改:对商品信息进行修改。 商品评价管理: 商品评价删除:删除不当或过时的商品评价。 商品评价添加:添加新的商品评价。 商品评价修改:对商品评价进行修改。 订单管理管理: 订单管理删除:删除订单信息。 订单管理修改:对订单信息进行修改。 项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:springboot,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3
三菱fx5U控制三轴伺服定位。 (BOM表,CAD电气图纸,plc程序,人机界面)
软件功能: jd-jui能以java文件的方式查看jar中的class文件 安装: 该软件无需安装,下载并解压后,双击exe文件即可启动 使用: 启动jd-jui后,点击左上角的 File -> Open -> 打开需要查看源码的jar包,即可查看源代码
utlog.sqlite
【基于C#的库存管理系统】是一个使用C#编程语言开发的软件应用,旨在帮助企业或个人高效地管理和跟踪库存。在库存管理中,系统的功能通常包括物品的入库、出库、库存查询、库存盘点以及生成相应的报表,以确保库存水平保持在最佳状态,避免过度存储造成的资金占用或库存短缺带来的损失。
帮助文档能够很好的支撑前端技术学习
西门子1200与ABB机器人TCP 通信案例.zip
亿家旺生鲜云订单零售系统是一个基于微信小程序的项目。该项目主要功能丰富多样,从前台来看,用户能够在首页查看系统核心内容与导航,浏览详细的商品信息、获取商品资讯、管理自己的订单、评价订单、收藏商品、充值账户、在线购买服务等,还可查看和管理购物车。后台功能则包括管理系统用户信息、商品分类、商品信息、订单评价、进行系统整体设置与维护以及处理订单信息等。 在技术框架方面,开发语言为Java,采用SSM(Spring、SpringMVC、MyBatis)框架后端技术,前端使用Vue,数据库是MySQL。其开发目的是满足人们对生鲜食品的需求,借助信息技术提供一个便捷、安全、高效的生鲜购物平台,连接用户与供应商,提升生鲜行业的服务质量和效率。项目为完整毕设源码,先看项目演示,希望对需要的同学有帮助。
拯救者PC,新年主题壁纸
工业物联网监控平台可视化java项目springboot开发iot二次开发源 SpringBoot物联网风电监测系统源码 统源码 iot物联网风电能源电场监控系 基于SpringBoot的物联网系统 易读易懂、界面简洁美观。 核心技术:Spring, MyBatis,shiro没有任何其它重度依赖。 数据设计 电厂信息 电厂信息包括电厂编号、风机总数、总装机量等 风机配置信息 风机编号、风机品牌、功率、实际功率、所在位置(坐标),所属电厂、启动时间、安装时间、运行状态等。 风机数据统计 分别对风机的风速、转速、发电量、功率、偏航次数、 偏航角度等进行年月日统计。 有一个jar包可能需要你自己去找
非常大气漂亮的手游模板,个人觉得比现在官方改版的要漂亮,模板优化好美观大气赏心悦目,本程序带有多端同步生成插件维护好省心。是一个专注于手机游戏的综合门户网站,提供手游下载、好玩的手游推荐、手游排行榜、热门手游攻略、手游视频解说、行业新闻。集安卓Android、苹果iOS及多终端的手游平台,Get最新手游技巧!
内容概要:本文探讨了两个无约束优化问题及其相关数值实验。首先讨论了一阶反应动力学的参数估计问题,涉及线性常微分方程组的解及其与实验数据的最佳拟合。其次,详细分析了一个复杂的无约束优化问题,提供了多种求解方法(基本牛顿法、信赖域法、拟牛顿法)的结果和比较,旨在评估不同算法的性能。最后,作者对实验过程中遇到的问题及解决方案进行了总结,并分享了对无约束最优化算法的理解。 适用人群:适用于化学工程、数学建模和优化领域的研究人员及学生。 使用场景及目标:用于理解和应用各种无约束优化算法,提高科研工作者和学生的算法选择能力和实际操作经验。 其他说明:文中引用了多部权威教材和技术手册,如《数学规划基础》和《非线性规划:概念、算法及化工过程的应用》,为理论背景提供了可靠依据。此外,还提供了详细的数值实验步骤和算法实现细节,便于读者复现和深入研究。
【跨年烟花html源代码】是一种用于网页设计的创意元素,它通过JavaScript和HTML结合,为网站增添节日气氛,特别是新年到来之际。这种特效能够模拟烟花绽放的效果,为用户带来视觉上的惊喜。在网页上实现跨年烟花效果,通常会涉及以下几个关键知识点: 1. HTML基础:HTML(超文本标记语言)是网页设计的基础,用于构建网页结构。在这个项目中,HTML将用于创建烟花展示的容器,比如一个全屏的div元素,以及可能的控制按钮等交互元素。 2. CSS样式:CSS(层叠样式表)负责网页的布局和样式。在跨年烟花效果中,CSS可以用来设置烟花的颜色、大小、位置以及烟花爆炸后的粒子效果。使用CSS动画和过渡效果可以实现烟花升空、绽放和消失的动态过程。 3. JavaScript核心:JavaScript是实现动态效果的关键,它负责烟花的发射、运动轨迹、碰撞检测以及爆炸效果。JavaScript中的Math对象会被大量使用,以生成随机的烟花方向和速度。同时,定时器(setTimeout或requestAnimationFrame)用于控制烟花发射的间隔和动画帧率。 4. Canvas AP
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