版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、崔希凡JavaWeb笔记day25-day27day251.购物车模块这相关类创建购物条目=商品+数量购物车=N个条目id即bid创建相关类domain中Cart类/* 添加条目到车中* param cartItem*/public void add(CartItem cartItem) if(map.containsKey(cartItem.getBook().getBid() /判断原来车中是否存在该条目 CartItem _cartItem = map.get(cartItem.getBook().getBid();/返回原条目_cartItem.setCount(_cartItem.g
2、etCount() + cartItem.getCount();/设置老条目的数量为,其自己数量+新条目的数量map.put(cartItem.getBook().getBid(), _cartItem); else map.put(cartItem.getBook().getBid(), cartItem);=附加BigDecimal的相关知识重点: 创建BigDecimal对象时,必须使用String类型构造器/* BigDecimal(BigDecimal的父类是Number)* 可以处理二进行运算导致的误差*/ Testpublic void fun4() /* 1. 创建BigDec
3、imal对象时,必须使用String构造器!*/BigDecimal d1 = new BigDecimal("2.0"); BigDecimal d2 = new BigDecimal("1.1"); BigDecimal d3 = d1.subtract(d2);System.out.println(d3);/输出0.9利用BigDecimal改写CartItem/* 小计方法* return* 处理了二进制运算误差问题*/public double getSubtotal() /小计方法,但它没有对应的成员! BigDecimal d1 = new
4、 BigDecimal(book.getPrice() + ""); BigDecimal d2 = new BigDecimal(count + "");return d1.multiply(d2).doubleValue();/BigDecimal的父类是Number/d1*d2后是BigDecimal对象,要转换成double类型Cart/* 计算合计* return*/public double getTotal() / 合计=所有条目的小计之和BigDecimal total = new BigDecimal("0"); f
5、or(CartItem cartItem : map.values() BigDecimal subtotal = new BigDecimal("" + cartItem.getSubtotal(); total = total.add(subtotal);return total.doubleValue();/total是BigDecimal对象,要转换成double类型=下面是domain中完整CartItem和Cart类 CartItem/* 购物车条目类* author cxf*/public class CartItem private Book book;/
6、商品 private int count;/ 数量/* 小计方法* return* 处理了二进制运算误差问题*/public double getSubtotal() /小计方法,但它没有对应的成员! BigDecimal d1 = new BigDecimal(book.getPrice() + "");BigDecimal d2 = new BigDecimal(count + "");return d1.multiply(d2).doubleValue();public Book getBook() return book;public void
7、setBook(Book book) this.book = book;public int getCount() return count;public void setCount(int count) this.count = count;=Cart/* 购物车类* author cxf*/public class Cart private Map<String,CartItem> map = new LinkedHashMap<String,CartItem>();/* 计算合计* return*/public double getTotal() / 合计=所有条
8、目的小计之和BigDecimal total = new BigDecimal("0"); for(CartItem cartItem : map.values() BigDecimal subtotal = new BigDecimal("" + cartItem.getSubtotal(); total = total.add(subtotal);return total.doubleValue();/* 添加条目到车中* param cartItem*/public void add(CartItem cartItem) if(map.contai
9、nsKey(cartItem.getBook().getBid() /判断原来车中是否存在该条目 CartItem _cartItem = map.get(cartItem.getBook().getBid();/返回原条目_cartItem.setCount(_cartItem.getCount() + cartItem.getCount();/设置老条目的数量为,其自己数量+新条目的数量map.put(cartItem.getBook().getBid(), _cartItem); else map.put(cartItem.getBook().getBid(), cartItem);/*
10、 清空所有条目*/public void clear() map.clear();/* 删除指定条目* param bid*/public void delete(String bid) map.remove(bid);/* 获取所有条目* return*/public Collection<CartItem> getCartItems() return map.values();=2.购物车模块完成修改登录方法,在用户登录成功后,马上在session中添加一辆车!下面修改Servlet中登录方法得到条目分析购物车仅有一个页面!页面:/jsps/cart/list.jsp它只有一个
11、任务,就是遍历车!desc.jsp中,点击跳转到购物车为了在购物车没有商品的时候只显示一张购物车的图片(同时为了防止空购物车一键形成空订单)也可以把购物车的图片调大,例如 width=3003.购物车功能流程图(1).添加条目到购物车(2).清空购物车条目(3).删除指定条目(4)购物车整个购物车模块Cart类其实有点难但是还有bug没有解决-当没有登录而进行购物(添加购物车)操作的时候会抛出空指针异常所以当这个bug没有修复之前请确保登录了!4.订单模块介绍订单模块可能是本项目最难的部分了5.订单模块之相关类创建需要注意对象之间的关联关系其中OrderDao任务最大,既要管order,也要管
12、orderitemOrder与Orderitem是双向关联的关系/* 订单条目类* author cxf*/public class OrderItem private String iid; private int count;/ 数量private double subtotal;/ 小计 private Order order;/ 所属订单private Book book;/ 所要的/* 订单类* author cxf*/public class Order private String oid;private Date ordertime;/ 下单时间 private double
13、total;/ 合计private int state;/ 订单状态有四种:1未付款 2已付款但未发货 3已发货但未确认收货 4已确认 private User owner;/ 订单所有者private String address;/ 收货地址成功private List<OrderItem> orderItemList;/当前订单下所有条目public List<OrderItem> getOrderItemList() return orderItemList;public void setOrderItemList(List<OrderItem> o
14、rderItemList) this.orderItemList = orderItemList;=6.订单模块之添加订单之DAO层实现生成订单流程图图片放大import java.sql.Timestamp;try String sql = "insert into orders values(?,?,?,?,?,?)"/* 处理util的Date转换成sql的Timestamp*/Timestamp timestamp = new Timestamp(order.getOrdertime().getTime(); Object params = order.getOid
15、(), timestamp, order.getTotal(), order.getState(), order.getOwner().getUid(),order.getAddress(); qr.update(sql, params); catch(SQLException e) throw new RuntimeException(e);=C语言描述二维数组:一张表(一维数组:一行) 但是在java中,二维数组:多个一维数组(嵌套?)复习一下二维数组!/* QueryRunner类的batch(String sql, Object params)* 其中params是多个一维数组!* 每
16、个一维数组都与sql在一起执行一次,多个一维数组就执行多次*/ try String sql = "insert into orderitem values(?,?,?,?,?)"/* 把orderItemList转换成两维数组* 把一个OrderItem对象转换成一个一维数组*/Object params = new ObjectorderItemList.size();/ 循环遍历orderItemList,使用每个orderItem对象为params中每个一维数组赋值for(int i = 0; i < orderItemList.size(); i+) Ord
17、erItem item = orderItemList.get(i);paramsi = new Objectitem.getIid(), item.getCount(), item.getSubtotal(), item.getOrder().getOid(), item.getBook().getBid();qr.batch(sql, params);/执行批处理 catch(SQLException e) throw new RuntimeException(e);7.订单模块之添加订单之Service层实现8.订单模块之添加订单之Servlet层实现Order 与Cart的对应即订单与
18、购物车的关系写Servlet之前先搞清楚Servlet要处理的问题Order的相关参数信息从哪获取呢?还有一个对应关系订单条目与购物车条目的关系。9.订单模块之添加订单之页面实现(完成)id选择器-其实一键的图片是截取自一张all.png图片中的坐标是0,-902px而且,鼠标挪到图片上方区域已经不在上方区域所显示的图片也不一样(颜色有差别)通过超提交表单(假如表单不提供按钮去提交的时候)先get到id,然后submit下面修改之前数据库的设计bugorders表的total和orderitem表的subtotal都修改一下,改为小数位后2位修改一下下单时间显示问题/ 以上过程中,通过写代码发
19、现的问题在OrderItem类中-domain第二个问题-dao层第三个问题-Servlet 层漏写清空购物车在订单生成之后购物车应该没有东西了!10.订单模块之订单流程图订单完成图片放大一行一个map有多少列就有多少键值对(其中)Map与OrderIterm的转换附上该功能的dao层完整代码/* 按uid订单* param uid* return*/public List<Order> findByUid(String uid) /* 1. 通过uid出当前用户的所有List<Order>* 2. 循环遍历每个Order,为其加载他的所有OrderItem*/ try
20、 /* 1. 得到当前用户的所有订单*/String sql = "select * from orders where uid=?"List<Order> orderList = qr.query(sql, new BeanListHandler<Order>(Order.class), uid);/* 2. 循环遍历每个Order,为其加载它自己所有的订单条目*/for(Order order : orderList) loadOrderItems(order);/为order对象添加它的所有订单条目/* 3. 返回订单列表*/return or
21、derList; catch(SQLException e) throw new RuntimeException(e);/* 加载指定的订单所有的订单条目* param order* throws SQLException*/private void loadOrderItems(Order order) throws SQLException /*/两张表:orderitem、bookString sql = "select * from orderitem i, book b where i.bid=b.bid and oid=?"/* 因为一行结果集对应的不再是一个
22、javabean,所以不能再使用BeanListHandler,而是MapListHandler*/List<Map<String,Object>> mapList = qr.query(sql, new MapListHandler(), order.getOid();/* mapList是多个map,每个map对应一行结果集* 一行:* iid=C7AD5492F27D492189105FB50E55CBB6, count=2, subtotal=60.0,oid=1AE8A70354C947F8B81B80ADA6783155, bid=7, bname=精通Hi
23、bernate,price=30.0, author=张卫琴, image=book_img/8991366-1_l.jpg, cid=2* .* 我们需要使用一个Map生成两个对象:OrderItem、Book,然后再建立两者的关系(把Book设置给OrderItem)*/* 循环遍历每个Map,使用map生成两个对象,然后建立关系(最终结果一个OrderItem),把OrderItem保存起来*/List<OrderItem> orderItemList = toOrderItemList(mapList); order.setOrderItemList(orderItemLi
24、st);/* 把mapList中每个Map转换成两个对象,并建立关系* param mapList* return*/private List<OrderItem> toOrderItemList(List<Map<String, Object>> mapList) List<OrderItem> orderItemList = new ArrayList<OrderItem>(); for(Map<String,Object> map : mapList) OrderItem item = toOrderItem(map
25、); orderItemList.add(item);return orderItemList;/* 把一个Map转换成一个OrderItem对象* param map* return*/private OrderItem toOrderItem(Map<String, Object> map) OrderItem orderItem = CommonUtils.toBean(map, OrderItem.class); Book book = CommonUtils.toBean(map, Book.class); orderItem.setBook(book);return o
26、rderItem;=可以看见,dao层是非常复杂的,所以为了代码的可读性,把功能细化为很多的子方法 这样代码容易阅读,有层次,而且易于解决问题11.订单模块之加载订单完成加载订单流程12.订单模块之确认收货(完成)dao层中其实可以简化书写,因为查出来的state是我们已知的类型(int)所以/* 通过oid订单状态* param oid* return*/public int getStateByOid(String oid) try String sql = "select state from orders where oid=?" return (Integer)q
27、r.query(sql, new ScalarHandler(), oid); catch(SQLException e) throw new RuntimeException(e);=该过程还用到了自定义的异常OrderException来保存意外情况的信息13.(1)1.支付的两种形式支付的两种形式:与直连!l 安全l 不收手续费l 不与小合作!(2).第三台支付平台l 支付宝l 易宝l通好处:l 不安全l 收手续费(1%)l 小可以与其合作!需要在第l 需要认证!账户l 我们有一个易宝的测试账户 钱转过去就要不回来了!14.易宝支付之请求参数查看手册 易宝支付通用接口帮助文档.CHM(1
28、) 去l 易宝给了我们一个http(支付网关),重定向到这个地址即可!/app-merchant-proxy/node直接这个会出错,原因是没有参数!l 还需要给这个地址后添加13+1个参数!"+1"的那个特殊参数是hmac 附上参数详细内容p1_MerId:存放的是测试账号! p2_Order:某个订单号p3_Amt:支付的金额,现在统一为0.01!接下来的连续3个参数都为空p5_Pid=&p6_Pcat=&p7_Pdesc=p8_Url:这个参数非常重要!是支付成功后跳转到的页面 p8_Url=接下来的两个参数不给参数值p9_SAF=&pa_MP
29、=pd_FrpId:支付通道(编码)参数名称参数含义是否必填参数长度参数说明签名顺序p0_Cmd业务类型是Max(20)固定值“Buy” .1p1_MerId商户订单号支付金额币种商品名称商品种类商品描述商户接收支付成功数据的地址送货地址商户扩展信息支付通道编码应答机制签名数据是Max(11)商户在易宝支付系统的唯一标识.获取方式见“如何获得若不为”,提交的订单号必须在自身账户中唯一;为 ”时,易宝支付会自动生成随机的商户订单号.易宝支付系统中对于已付或 者撤销的订单,商户端不能重复提交。元,精确到分.此参数为空则无法直连(如直连会报错:抱歉,金额太小。),必须到易宝网关让消费者输入金额固定值
30、 ”CNY”.用于支付时显示在易宝支付网关左侧的订单信息. 此参数如用到中文,请注意转码.商品种类.此参数如用到中文,请注意转码.商品描述.此参数如用到中文,请注意转码.支付成功后易宝支付会向该地址如:“back.action?test=test”.注意:如不填p8_Url的参数值支付成功后您将得不到支付成功。为“1”: 需要用户将送货地址留在易宝支付系统;为“0”: 不需要,默认为 ”0”.返回时原样返回,此参数如用到中文,请注意转码. 默认为 ” ,到易宝支付网关.若不需显示易宝支付的页面,直接跳转到各、神州行支付、骏网一卡通等支付页面,该字段可依照附录:支付通道编码列表 设置参数值.如果
31、此值设置错误则会报"error.noAvaliableFrp"错误固定值为“1”: 需要应答机制; 收到易宝支付服务器点对点支付成功通知,必须回写以”success”(无关大小写)开头的字符串,即使您收到成功通知时发现该订单已经处理过,也要正确回写”success”,否则易宝支付将认为您的系统没有收到通知,启动重发机制,直到收到”success ”为止。p2_Order否Max(50)3p3_Amt否Max(20)4p4_Cur是Max(10)5p5_Pid否Max(20)6p6_Pcat否Max(20)7p7_Pdesc否Max(20)8p8_Url否Max(200)9p
32、9_SAF否Max(1)10pa_MP否Max(200)11pd_FrpId否Max(50)12pr_NeedResp onse否Max(1)13hmacMax(32)产生hmac需要两个参数,并调用相关API.参数1: STR,列表中的参数值按照签名顺序拼接所产生的字符串,注意null要转换为 ” ”,并确保无乱码.参数2: 商户密钥.见"如何获得商户密钥"各语言范例已经提供封装好了的方法用于生成此参数。如果以上两个参数有错误,则该参数必然错误,见"抱歉,签名无效."我们测试用的是交通BOCO-NET-B2C参数为空要注意的问题(当不想告知参数内容时直
33、接给空的参数)参数: pr_NeedResponse=1点对点客户端重定向l 易宝回调:点对点:(客户支付完之后)易宝直接,这里没有客户端什么事了。¨¨¨Ø¨这种方式是必须要使用的,我们这种方式是收不到的!因为我们没有固定IP易宝有一个重发机制,如果它你,你不给它回信息,它会一直重发!需要返回一个以SUCCESS开头的字符串即可!引导客户端浏览器重定向到可以不使用的!。是让客户端!l hmac:13参数值+keyValue(密钥) + 算法(md5) 13参数值:自己设置的! keyValue:易宝在我们后发给我们的,这个东东只有我们和易宝知道
34、! 底层为md5的算法:PaymentUtil.buildHmac(14个),它返回hmac我们现在测试只能用第二种(因为没有固定IP,只能localhost测试)http/app-merchant-proxy/node?p0_Cmd=Buy&p1_MerId=10001126856&p2_Order=123456&p3_A &p7_Pdesc=&p8_Url= method=back&p9_SAF=&pa_MP=&pd_FrpId= ICBC-NET-Y&p5_Pid=&p6_Pcat=?B2C&pr_N
35、eedResponse=1&hmac=dd17580a3ca176ba62d6d348583ba88b=下面测试PaymentUtil PaymentUtil类就省略了Testpublic void fun5() String hmac = PaymentUtil.buildHmac("Buy", "10001126856", "123456", "10", "CNY","", "", "", "",&quo
36、t;", "", "ICBC-NET-B2C", "1", "69cl522AV6q613Ii4W6u8K6XuW8vM1N6bFgyv769220IuYe9u37N4y7rI4Pl");/红字是keyValue System.out.println(hmac);把生成的直接到浏览器,跳转到支付页面也可以调用平安的最后说一下这个测试账号(就是在易宝的号,卖家用的)以及密钥上面这个测试账号,可以打钱进去,但是肯定不可以查看余额的day261.支付之去一个细节问题/jsps/order/desc,jsp修改后
37、把配置文件 merchantIperties 放在src下添加回调的地址支付之去流程图另外还要准备PaymentUtil下面是Servlet的代码/* 支付之去* param request* param response* return* throws ServletException* throws IOException*/public String zhiFu(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException Properties p
38、rops = new Properties();InputStream input = this.getClass().getClassLoader().getResourceAsStream("merchantIperties"); props.load(input);/* 准备13参数*/String p0_Cmd = "Buy"String p1_MerId = props.getProperty("p1_MerId"); String p2_Order = request.getParameter("o
39、id"); String p3_Amt = "0.01"String p4_Cur = "CNY" String p5_Pid = "" String p6_Pcat = "" String p7_Pdesc = ""String p8_Url = props.getProperty("p8_Url"); String p9_SAF = ""String pa_MP = ""String pd_FrpId = request.
40、getParameter("pd_FrpId"); String pr_NeedResponse = "1"/* 计算hmac*/String keyValue = props.getProperty("keyValue");String hmac = PaymentUtil.buildHmac(p0_Cmd, p1_MerId, p2_Order, p3_Amt, p4_Cur, p5_Pid, p6_Pcat, p7_Pdesc, p8_Url, p9_SAF, pa_MP,pd_FrpId, pr_NeedResponse, k
41、eyValue);/* 连接易宝的*/和13+1个参数StringBuilder url = new StringBuilder(props.getProperty("url"); url.append("?p0_Cmd=").append(p0_Cmd); url.append("&p1_MerId=").append(p1_MerId); url.append("&p2_Order=").append(p2_Order); url.append("&p3_Amt=")
42、.append(p3_Amt); url.append("&p4_Cur=").append(p4_Cur); url.append("&p5_Pid=").append(p5_Pid); url.append("&p6_Pcat=").append(p6_Pcat); url.append("&p7_Pdesc=").append(p7_Pdesc); url.append("&p8_Url=").append(p8_Url); url.append(&
43、quot;&p9_SAF=").append(p9_SAF); url.append("&pa_MP=").append(pa_MP); url.append("&pd_FrpId=").append(pd_FrpId); url.append("&pr_NeedResponse=").append(pr_NeedResponse); url.append("&hmac=").append(hmac);System.out.println(url);/* 重定向到易
44、宝*/response.sendRedirect(url.toString();return null;=2.支付之回调方法回调流程图附上整个支付,回调流程图自己的测试3.分类模块之相关类创建用/admin还有一个原因:后期加过滤器比较方便!/admin.*相关类就只有这个了。4.用到的一个工具特定规则这个工具与dTree有关接下来是一整套的配色方案加减号图片5.分类管理之所有分类l left.jsp上的菜单修改一下指向:AdminCategoryServlet#findAll()l findAll(): 调用service得到所有的分类List<Category> 保存到requ
45、est域,转发到/adminjsps/admin/category/list.jspl list.jsp:修改页面,显示所有分类!=left.jsp写完后测试查看所有分类6.分类管理之添加分类l add.jsp(表单页面)àl AdminCatetgoryServlet#add(): 封装表单数据; 补全:cid 调用service方法完成添加工作 调用findAll()方法l service#add(Category c):略l dao#add(Catetgory c):略Sevlet内的方法调用7.分类管理之删除分类l list.jsp(删除) àl AdminCate
46、goryServlet#delete() 获取参数:cid 调用service方法完成删除! 如果出现异常,保存异常信息,转发到msg.jsp显示 调用findAll()l service#delete(String cid): 通过cid查看该分类下的本数,如果大于0,抛出异常; 如果等于0,删除该分类;=跨模块调用在jsp页面中弹出确认框onclick还有就是myeclipse的一个bug然而在一些高版本中没有这个bug(myeclipse2015)反思:本人写的时候没有考虑获取本数的意识以下是本人的思路(被证明无效,无论如何都删除不了分类-bookList不为空)下面是/*参考写法* 删
47、除分类* param cid* throws CategoryException*/public void delete(String cid) throws CategoryException / 获取该分类下的本数int count = bookDao.getCountByCid(cid);/ 如果该分类下存在,不让删除,我们抛出异常if(count > 0) throw new CategoryException("该分类下还有/ 删除该分类categoryDao.delete(cid);,不能删除!");8.分类管理之修改分类修改分为两步:1、加载分类, 2、
48、修改分类第一步:加载分类l list.jsp(修改) àl AdminCategoryServlet#editPre() 获取cid 通过cid来调用service方法,得到Category对象 保存到request域中,转发到mod.jspl mod.jsp:把当前的Category对象显示到表单中第二步:修改分类l mod.jsp(提交表单)àl AdminCategoryServlet#edit() 封装表单数据 调用service方法完成修改工作 调用findAll()9.管理之查看所有(1)相关类的创建l web.servlet.admin: AdminBookS
49、ervlet; AdminAddBookServlet(添加,包含上传):上传不能使用BaseServlet,因为BaseServlet中需要使用getParameter()方法,而上传getParameter()方法就不能再使用了。=AdminBookServlet下面是AdminAddBookServlet上传必须是post表单(2)所有l left.jsp(菜单项(查看l AdminBookServlet#findAll() 所有,保存到request 转发到/adminjsps/admin/book/list.jspl list.jsp:循环遍历所有)à10.管理之加载要把所
50、有分类全部出来并显示循环遍历分类注意value但是光遍历还不够,还要匹配当前的分类!但是测试发现还是不行!原因出在book.category.cid中Book对象下的category根本没有值(没有用$book查看有值)那怎么办?只能修改findByBid方法!=修改后BookDao#findByBid/* 加载方法* param bid* return*/public Book findByBid(String bid) try /* 我们需要在Book对象中保存Category的信息*/String sql = "select * from book where bid=?&qu
51、ot; Map<String,Object> map = qr.query(sql, new MapHandler(), bid);/* 使用一个Map,*/出两个对象,再给这两个对象建立关系!Category category = CommonUtils.toBean(map, Category.class); Book book = CommonUtils.toBean(map, Book.class); book.setCategory(category);return book; catch(SQLException e) throw new RuntimeExceptio
52、n(e);=12.添加(1).管理之添加分两步:加载所有分类,到add.jsp中显示!l left.jsp(菜单项:添加) àl AdminBookServlet#addPre(): 所有分类,保存到request域,转发到add.jspl 在add.jsp中循环遍历所有分类,显示在<select>中(2).添加l 上传三步: 创建工厂 创建器 request得到表单字段!l 把表单字段封装到Book对象中l 保存上传文件,把保存的路径设置给Book的image属性。l 调用service方法保存Book对象到数据库中l 调用findAll()跨Servlet-Admin
53、AddBookServletAdminBookServlet在DAO中解决这个可能出现的空指针异常-手动封装Category的cid进一步思考,发现bid也没有设置,所以下面进行各种各样的校验设置单文件大小限制在15kb(以下)如果文件大小超出限制,会抛出异常这个异常是什么?查commons-fileupload的文档效果接着进行另外的校验以下是图片的校验图片的校验要在用户上传的图片保存到服务器之后,服务器才有可能获取图片进行校验先查API关于图片的(抽象)类/接口我们的目标:获取图片的宽高Image(抽象类) ImageIcon(具体实现类) Image可以获取宽高文件路径->创建ImageIcon->getImage->获取宽高一个bug在所有的校验添加一行附上校
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB34-T 4531-2023 安徽省气瓶质量安全追溯信息平台数据接口规范
- 初中八年级物理浮力及其影响因素教学设计
- DB42-T 2224-2024 土地管理代码编制规则
- 小学英语鲁科版五年级上册Unit 2 Lesson 3教学设计:核心素养导向的听说读写整合课例
- 宪法价值冲突的表现
- 初中七年级音乐唱歌课《中学时代》融入式情境教学设计
- 高二化学选择性必修2 配位键教学设计
- 初中七年级数学《乘方》教学设计
- 学习活动教学设计高中语文统编版 必修下册-统编版
- 苏教版信息科技七年级下册第七单元第1课《跨学科主题学习-丝绸之路》教学设计
- 2026年意识形态测试题及答案
- 新版部编人教版六年级上册语文全册新优教学设计(2026年秋改版教材)
- 2025-2026年网络安全法律法规与标准知识点巩固习题
- 变电土建设计培训
- 新版2026秋统编版(新版)小学道德与法治四年级上册(全册)知识点清单梳理
- 2026年部编版新教材道德与法治四年级上册全册教案设计(共4个单元含教学计划)
- 2025 成人失禁性皮炎护理指南(中文版)+预防与处理规范
- 学习委员竞选
- 梯田修建工程施工
- 浙江省通用安装工程预算定额第四册
- LS 8010-2014植物油库设计规范
评论
0/150
提交评论