学生信息管理系统----班级信息管理

article/2025/9/12 7:51:33
嵌入班级信息到System页面

  这一部分要实现班级信息的相关操作。
  还是在名为servlet的package下创建一个显示班级列表的Servlet——ClazzServlet。这样取名字是避免与系统关键字class起冲突,以免出现不必要的麻烦。

public class ClazzServlet extends HttpServlet {public void doGet(HttpServletRequest req,HttpServletResponse res) throws IOException{doPost(req,res);}public void doPost(HttpServletRequest req,HttpServletResponse res){}
}

  接下来还是要在web.xml中对这个Servlet进行配置,建立与访问路径的一个映射。

<servlet><description>班级信息管理</description><servlet-name>ClazzServlet</servlet-name><servlet-class>com.ischoolbar.programmer.servlet.ClazzServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>ClazzServlet</servlet-name><url-pattern>/ClazzServlet</url-pattern>
</servlet-mapping>

  第三步,我们打开素材文件,找到clazzList.jsp,将其复制到view目录下。
打开里面部分代码如下面所示,我们之前已经将左边的菜单栏布置好了,当用户点击菜单栏中的班级列表时,我们需要将clazzList.jsp在右边显示出来。

public class ClazzServlet extends HttpServlet {private static final long serialVersionUID = -7264164305513332635L;public void doGet(HttpServletRequest req,HttpServletResponse res) throws IOException{doPost(req,res);}public void doPost(HttpServletRequest req,HttpServletResponse res) throws IOException{String method = req.getParameter("method");if("toClazzListView".equals(method)){clazzList(req,res);}}private void clazzList(HttpServletRequest req, HttpServletResponse res) throws IOException {// TODO Auto-generated method stubtry {req.getRequestDispatcher("view/clazzList.jsp").forward(req, res);} catch (ServletException e) {e.printStackTrace();}}

  从system.jsp中有这样一行代码,这个请求就是发往ClazzServlet的,并且传入了一个参数 toClazzListView,我们根据这个参数实现了请求转发。

{"menuid":"42","menuname":"班级列表","icon":"icon-house","url":"ClazzServlet?method=toClazzListView"},

  现在已经将班级列表页面,即clazzList.jsp能够动态的嵌入到System.jsp中了,打开clazzList.jsp,有这样的几行代码:功能是显示班级列表,通过传递getClazzList来显示班级列表。

    $('#dataList').datagrid({ ........(部分代码省略)method: "post",// 给服务器发送请求url:"ClazzServlet?method=getClazzList&t="+new Date().getTime(),idField:'id', ........(部分代码省略)})

  我们按照这里给出的url在ClazzServlet中进行参数的传递,ClazzServlet的doPost方法就成了下面的样子。我们通过调用的getClazzList()方法来显示从数据库中读取的数据。

	public void doPost(HttpServletRequest req,HttpServletResponse res) throws IOException{String method = req.getParameter("method");if("toClazzListView".equals(method)){clazzList(req,res);}else if("getClazzList".equals(method)){getClazzList(req, res);}}
读取数据库的信息

  但是我们还没有实现从数据库中读取列表的方法。
接下来我们要创建一个班级列表的model类——Clazz.java,并且附上相应的get和set方法。

public class Clazz {private int id;private String name;private String info;public int getId() {return id;}public void setId(int id) {this.id = id;}....(部分代码省略)
}

  有了model,我们就可以相应的在dao的package下创建一个dao——ClazzDao。
  我们还要根据显示的页面来实现数据的分页显示,在这之前我们创建一个Page的model,但是这个类并没有在数据库中对应存在的数据表,只是方便在分页的时候做处理。

public class Page {private int start;			// 起始页private int currentPage;	// 当前页private int pageSize;		// 每页显示的数量public Page(int curruntPage,int pageSize){this.start = (curruntPage-1)*pageSize;this.currentPage = curruntPage;this.pageSize = pageSize;}public int getStart() {return start;}....(部分代码省略)

  从这个类的的构造函数中可以看出,每一页的起始页都是当前的页数减一再乘以每一页的数目,这一点不难理解。
有了page之后,可以在ClazzDao中实现查询班级列表的方法。

	public List<Clazz> getClazzList(Clazz clazz,Page page){List<Clazz> ret = new ArrayList<Clazz>();String sql = "select * from s_clazz";if(!StringUtil.isEmpty(clazz.getName())){sql += " where name like '%" + clazz.getName() +"'"; // 模糊查询}sql += " limit " + page.getStart() +","+page.getPageSize();ResultSet resultSet = query(sql);try {while(resultSet.next()){Clazz c1 = new Clazz();c1.setId(resultSet.getInt("id"));c1.setName(resultSet.getString("name"));c1.setInfo(resultSet.getString("info"));ret.add(c1);}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return ret;}

  从上面代码中显示的sql语句来看,这里的分页查询是基于了sql语句的拼接。是" limit " + page.getStart() +","+page.getPageSize();这部分起到了作用。

  我们在上面的ClazzServlet已经给出了getClazzList(req, res);方法,但是还没有具体实现。回到ClazzServlet,在doPost方法下可以写。

private void getClazzList(HttpServletRequest req,HttpServletResponse res){String name = req.getParameter("name");				// 获取前台参数Integer currentPage = Integer.parseInt(req.getParameter("page"));		// 获取前台数据转为IntegerInteger pageSize = Integer.parseInt(req.getParameter("rows"));Clazz clazz = new Clazz();		//创建一个Clazz对象clazz.setName(name);			// 给班级对象的班级名属性进行赋值,这个值是前台传来的,用于在数据库中按照班级名进行条件查询的ClazzDao clazzDao = new ClazzDao();	List<Clazz> clazzList = clazzDao.getClazzList(clazz, new Page(currentPage, pageSize));		// 获取数据库的数据,多条查询结果,所以用List存储clazzDao.closeCon();JsonConfig jsonConfig = new JsonConfig();	String clazzListString = JSONArray.fromObject(clazzList, jsonConfig).toString();System.out.println(clazzListString);		// 查询的结果转为Json串res.setCharacterEncoding("utf-8");			// 设置字符集,防止乱码try {res.getWriter().write(clazzListString);	// 返回相应给客户端} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}
}

  那么返回的响应,是什么样子的呢,可以打开F12调试窗口看一下我们从后台得到的数据是什么样子的。
在这里插入图片描述
  回到clazzList.jsp,以下就是数据显示的表格,所以一切查询到的数据都是动态的添加在这个表格中的。记住,这里的id为dataList,是先在html中定义数据显示的行和列。

<!-- 数据列表 --><table id="dataList" cellspacing="0" cellpadding="0"> </table> 

  使用Id选择器选择到了上面的数据列表,并且创建了一个数据网络(datagrid)。

//datagrid初始化 
$('#dataList').datagrid({ ....url:"ClazzServlet?method=getClazzList&t="+new Date().getTime(),....columns: [[  {field:'chk',checkbox: true,width:50},{field:'id',title:'ID',width:50, sortable: true},    {field:'name',title:'班级名称',width:200},{field:'info',title:'班级介绍',width:100},]], 
}); 

最终获取的数据将会在这里显示出来。

模糊查询

  根据条件来查询相关的数据在clazzDao查询班级列表的功能中已经实现好了,其核心代码就是在我们输入了关键信息,并且根据这个信息作为条件来返回数据。

if(!StringUtil.isEmpty(clazz.getName())){sql += " where name like '%" + clazz.getName() +"'"; // 模糊查询
}

在这里插入图片描述
  这里我们要完成的功能是按照条件进行模糊查询,但是素材中并没有搜索框与搜索按钮,这里要我们自己去设定。所以仍然是在clazzList.jsp中进行修改。

<div style="margin-top: 3px">班级名称:<input id="clazzName" class="easyui-textbox" name="clazzName" /><a id="search-btn" href="javascript:;" class="easyui-linkbutton" data-options="iconCls:'icon-search',plain:true">搜索</a>	
</div>

  接着要给搜索按钮添加一个事件的监听,当点击的时候触发 datagrid.load方法。把参数clazzName传入到后台,通过requet.getParamete(‘clazzName’)来获取。

$("#search-btn").click(function(){$('#dataList').datagrid('load',{clazzName:$('#clazzName').val()})
});

  模糊查询也是查询,所以可以使用之前定义在Servlet层的getClazzList方法,Dao层也仍然要使用getClazzList方法。如上图中标志2的部分,我们需要统计出符合模糊查询条件的数据个数,所以需要在Dao层定义一个便于统计个数的方法。

public int getClazzListTotal(Clazz clazz){int total = 0;String sql = "select count(*) as total from s_clazz ";if(!StringUtil.isEmpty(clazz.getName())){sql += "where name like '%" + clazz.getName() +"%'";}ResultSet resultSet = query(sql);try {while(resultSet.next()){total = resultSet.getInt("total");}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return total;
}

  因为查询到的数据仍然是使用list来返回的,现在需要对getClazzList()方法进行修改,将统计查询结果的个数和查得到的数据一起返回给浏览器。

private void getClazzList(HttpServletRequest req,HttpServletResponse res){res.setCharacterEncoding("utf-8");res.setContentType("text/html;charset=utf-8");String name = req.getParameter("clazzName"); // 获取模糊查询的条件Integer currentPage = Integer.parseInt(req.getParameter("page"));Integer pageSize = Integer.parseInt(req.getParameter("rows"));Clazz clazz = new Clazz();clazz.setName(name);		// 给Clazz对象的name属性进行赋值ClazzDao clazzDao = new ClazzDao();		List<Clazz> clazzList = clazzDao.getClazzList(clazz, new Page(currentPage, pageSize));clazzDao.closeCon();int total = clazzDao.getClazzListTotal(clazz);	// 获取模糊查询结果的总结果数clazzDao.closeCon();Map<String,Object> ret = new HashMap<String,Object>();ret.put("total", total);ret.put("rows", clazzList);try {res.getWriter().write(JSONObject.fromObject(ret).toString());// 将map中的数据转换为json} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}
}

打开浏览器 调试窗口,也可以查看到返回的响应信息。
在这里插入图片描述

添加数据

  因为要添加数据,我们所想自然也需要一个填写信息的弹窗来做为填写数据的载体。而素材文件中也包含这一部分代码。

<!-- 添加窗口 -->
<div id="addDialog" style="padding: 10px">  <form id="addForm" method="post"><table cellpadding="8" ><tr><td>班级名称:</td><td><input id="add_name" style="width: 200px; height: 30px;" class="easyui-textbox" type="text" name="name"  data-options="required:true, missingMessage:'不能为空'" /></td></tr><tr><td>班级介绍:</td><td><textarea name="info" style="width:200px; height:60px;"cols=""></textarea></td></tr></table></form>
</div>
	  	//设置添加班级窗口$("#addDialog").dialog({title: "添加班级",....(部分代码省略)buttons: [{....(部分代码省略)handler:function(){....(部分代码省略)} else{$.ajax({type: "post",url: "ClazzServlet?method=AddClazz",data: $("#addForm").serialize(),success: function(msg){....(部分代码省略)}}});....(部分代码省略)});

  上面ajax所请求的url为"ClazzServlet?method=AddClazz",接下来,回到Servlet中继续创建应对AddClazz的方法。
在doPost中添加代码。

public void doPost(HttpServletRequest req,HttpServletResponse res) throws IOException{....}else if("AddClazz".equals(method)){addClazz(req,res);}}

  创建addClazz()方法,从前台获取数据之后再调用Dao层的方法进行查询,如果查询到那么久给浏览器个success的响应,浏览器再根据这个响应进行处理。

private void addClazz(HttpServletRequest req, HttpServletResponse res) {String name = req.getParameter("name");String info = req.getParameter("info");Clazz clazz = new Clazz();clazz.setName(name);clazz.setInfo(info);ClazzDao clazzDao = new ClazzDao();if(clazzDao.addClazz(clazz)){try {res.getWriter().write("success");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{clazzDao.closeCon();}}
}

在来看看Dao的addClazz方法。

public boolean addClazz(Clazz clazz){String sql = "insert into s_clazz values(null,'"+clazz.getName()+"','"+clazz.getInfo()+"') ";return update(sql);
}

  因为这个更新的操作使用的比较频繁,就将其定义到了BaseDao中,从这里我们就知道了如果我们执行成功就说明数据库的操作是没有问题的,那么在addClazz方法中就会返回一个真,并且将这个结果发往Servlet,就能给浏览器发送“success”的响应。

public boolean update(String sql){try {return dbUtil.getConnection().prepareStatement(sql).executeUpdate()>0;} catch (SQLException e) {e.printStackTrace();}return false;
}

  我们看看前台收到success之后的操作,当添加数据成功后,重新刷新页面。

success: function(msg){if(msg == "success"){$.messager.alert("消息提醒","添加成功!","info");//关闭窗口$("#addDialog").dialog("close");//清空原表格数据$("#add_name").textbox('setValue', "");$("#Info").val("");//重新刷新页面数据$('#dataList').datagrid("reload");		} else{$.messager.alert("消息提醒","添加失败!","warning");return;}

测试一下
在这里插入图片描述
  我们看成功之后返回了一个success。
在这里插入图片描述

删除功能

  删除功能上面的流程一致,这就不贴删除键的html了,我们将删除按钮给一个id=delete。通过id选择器来实现单击后的操作。
第一件事,先获取行号,确定要删除的数据。这里的行号传到后台使用req.getParameter(“clazzid”)来进行获取。

	    $("#delete").click(function(){var selectRow = $("#dataList").datagrid("getSelected");  // 获取行号if(selectRow == null){$.messager.alert("消息提醒", "请选择数据进行删除!", "warning");} else{var clazzid = selectRow.id;$.messager.confirm("消息提醒", "将删除与班级信息(如果班级下存在学生或教师则不能删除),确认继续?", function(r){if(r){$.ajax({type: "post",url: "ClazzServlet?method=DeleteClazz",data: {clazzid: clazzid},success: function(msg){if(msg == "success"){$.messager.alert("消息提醒","删除成功!","info");//刷新表格$("#dataList").datagrid("reload");} else{$.messager.alert("消息提醒","删除失败!","warning");return;}}});}});}});

  通过上面的代码,我们明确了要访问的地址,以及传送的数据等,接下来和之前一样,在doPost中添加代码。

public void doPost(HttpServletRequest req,HttpServletResponse res) throws IOException{....}else if("DeleteClazz".equals(method)){deleteClazz(req,res);}}

后面也是一样要创建一个deleteClazz()方法:

private void deleteClazz(HttpServletRequest req, HttpServletResponse res) {Integer id = Integer.parseInt(req.getParameter("clazzid"));ClazzDao clazzDao = new ClazzDao();if(clazzDao.deleteClazz(id)){try {res.getWriter().write("success");} catch (IOException e) {e.printStackTrace();} finally {clazzDao.closeCon();}}
}

后面的操作和上面的步骤差不多,只是Dao层所使用的的sql语句不一样,就不进行说明了。

修改功能

  修改操作是在已有数据的基础上进行的,这里需要一个新的按钮,并且触发一个编辑的弹窗出来,便于修改其中的数据。修改按钮也给一个id名称为edit-btn。

$("#edit-btn").click(function(){var selectRow = $("#dataList").datagrid("getSelected");if(selectRow == null){$.messager.alert("消息提醒", "请选择数据进行修改!", "warning");return;}$("#editDialog").dialog("open");
});

  定义了一个selectRow变量用来保存我们所选行的数据,我们之前创建datagrid的时候,我们的列是这样定义的,可以使用datagrid(“getSelected”)来选择到,并且可以获得各个列属性值。

	        columns: [[  {field:'chk',checkbox: true,width:50},{field:'id',title:'ID',width:50, sortable: true},    {field:'name',title:'班级名称',width:200},{field:'info',title:'班级介绍',width:100, },]], 

  后面我们会在ajax中的url请求地址是"ClazzServlet?method=EditClazz",在这个模块最后,有这样的几行代码,它确保了我们打开弹窗出现的值是之前选择的行中所对应的值。

onBeforeOpen: function(){var selectRow = $("#dataList").datagrid("getSelected");//设置值$("#edit_name").textbox('setValue', selectRow.name);$("#edit_info").val(selectRow.info); // 设置input框的值$("#edit-id").val(selectRow.id);
}

和之前一样,我们需要在doPost中添加代码。

public void doPost(HttpServletRequest req,HttpServletResponse res) throws IOException{....}else if("EditClazz".equals(method)){editClazz(req,res);}}

  之后再创建一个名为editClazz()的方法,我们获取到,其中id,name,info都是获取的编辑框中填写的值。

	private void editClazz(HttpServletRequest req, HttpServletResponse res) {// TODO Auto-generated method stubInteger id = Integer.parseInt(req.getParameter("id"));String name = req.getParameter("name");String info = req.getParameter("info");Clazz clazz = new Clazz();clazz.setName(name);clazz.setInfo(info);clazz.setId(id);ClazzDao clazzDao = new ClazzDao();if(clazzDao.editClazz(clazz)){try {res.getWriter().write("success");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{clazzDao.closeCon();}}}

  上面也调用到了ClazzDao的方法,如果更改数据库的数据成功之后仍然会返回一个true,方便前台进行处理。

public boolean editClazz(Clazz clazz) {// TODO Auto-generated method stubString sql = "update s_clazz set name= '"+clazz.getName()+"' , info = '"+clazz.getInfo()+"' "+ "where id = '"+ clazz.getId() +"'";return update(sql);
}

关于班级列表的增删改查就基本上整理完了。


http://chatgpt.dhexx.cn/article/yl7H3NZv.shtml

相关文章

数据库系统及应用——班级管理系统

我的GitHub网址 数据库技术 在本次设计中&#xff0c;用SQL Server建了六个表用来存储基本信息&#xff0c;分别为Tb_Student &#xff08;学生信息表&#xff09;、Tb_Course&#xff08;课程信息表&#xff09;、Tb_Course2&#xff08;选修课程表&#xff09;、Tb_ScoreSt…

班级管理系统的设计与实现/java/SSM

SSM班级管理系统 摘 要 随着社会的发展&#xff0c;计算机的优势和普及使得SSM班级管理系统的开发成为必需。SSM班级管理系统主要是借助计算机&#xff0c;通过对首页、商铺信息、班级综合评测数据、综合评测数据商品、新闻资讯、我的、跳转到后台、购物车等信息进行管理。减…

学生管理系统

学生信息管理系统设计 一、需求分析 1、开发背景&#xff1a; 信息化已经渗透到我们生活的方方面面&#xff0c;学校信息化的发展也是一种不可避免的趋势。伴随着高等院校招生规模的不断扩大&#xff0c;传统人工管理信息的方法不但不能满足这种管理上的需求&#xff0c;而且…

基于Java的班级管理系统的设计与实现(论文+源码)_kaic

摘 要 伴随着信息技术不断的飞速发展&#xff0c;信息技术给现在的生活也在带来翻天覆地的变化。信息时代的到来已经成为一种趋势&#xff0c;人类的发展历史正在进入到一个新的时代。信息技术已经在生活中的各个领域得到普及以及被应用。班级管理在信息技术发展之前一直都是…

班级管理系统(SSM+LayUI)

项目预览 1.项目预览 获取项目q 2300852495&#xff08;有偿&#xff09; 项目预览地址 项目源码 角色分类账号密码管理员1705145123老师170507111123学生170507106123 2.系统功能介绍 3.开发环境 系统开发及运行环境 班级管理系统开发环境如下&#xff1a; 操作系统&…

C++课程设计班级管理系统

整体代码展示&#xff1a;借鉴作业的同学可以直接复制粘贴ctrlACV一气呵成&#xff0c;代码可以直接运行。如果怕和同学的重复了再改下参数名就可以&#xff0c;不过记得先备份一份哦。 如果觉得对你们有用还请不要忘记一键三连哟。ヾ(≧▽≦*)o #include <iostream> #i…

c语言编译器好玩的代码,读懂这4个函数,528行代码,你也可以实现一个C语言编译器...

引言 自从华为方舟编译器横空出世,一举成为全民网红之后,一下子点燃了大家对编译器的热情。不过,对于大多数人来说,编译器依旧是遥不可及的神秘存在。 今天,介绍一个国外大牛写的C语言编译器 - C4,揭开编译器的神秘面纱。原来实现一个具备基本功能的编译器,竟是如此简单…

c语言编译器 dev,1.1开篇一:C语言编译器的选择---Dev C++

目录&#xff1a; 1.Dev C的下载&安装&#xff1a; 2.Dev C的使用&#xff1a; 前言&#xff1a; 那么多编译器&#xff0c;为什么选择Dev C&#xff1f;理由有下 理由一&#xff1a;Dev C 体积比较小&#xff0c;不占用太多的内存。 理由二&#xff1a;Dev C 打开速度快&a…

C语言推荐编译器

前言&#xff1a;vs虽然好,但是2015往后的版本相对使用起来比较复杂,对小白不太友好 既然是第一次打C语言,就要使用一个简洁明了,通俗易懂的编译器,这里 推荐 小熊猫devC,这非常的简洁,没有过多的插件,点击下方链接就可以下载&#xff01; DevC官方下载-DevC中文最新版下载(…

C语言编译器Visual Studio官方正版下载安装

首先打开微软官网。 微软官网https://www.microsoft.com/zh-cn/进入Visual Studio的产品介绍页。 一般我们用的是win系统。 点击下载。 选择社区版&#xff0c;因为其他版本要花钱&#xff0c;专业版和企业版。 打开安装包。 选择c&#xff0c;确定没选错&#xff0c;接下来进行…

【Linux03-基本工具之GCC】Linux下的C语言编译器

前言 接上篇&#xff0c;继续学习基本工具。 三、gcc 是什么 Linux下的C语言编译器&#xff08;C的编译器是g&#xff0c;用法选项基本一样&#xff09;。 既然是编译器&#xff0c;我们就再来加点餐…… 链接其实分为两种类型&#xff1a;静态链接和动态链接&#xff0…

初学者-C语言基础练习(二)——C语言编译器的使用方法

安装完之后我们就可以开始我们的程序编写了&#xff0c;但是这里还是有必要讲一下初学者该注意的事项。 1.拒绝堆排多个文件 2.切记不能使用中文输入&#xff0c;编写程序一定要在英文状态下编写&#xff0c;注释内容除外 3.每个语句结束不要忘记分号 说完这三个注意了&am…

c语言编译器苹果下载,c语言编译器ios下载

c语言编译器ios介绍 c语言编译器ios是一款非常实用的编程语言学习类手机软件&#xff0c;软件可以给我们带来许多的功能可以让我们使用&#xff0c;通过软件我们就能够进行代码的编译而且在这里就能够验证许多的小程序&#xff0c;还支持我们文件代码的打开可以在这里进行浏览非…

手机c语言编译器ide文件位置,C语言编译器IDE

C语言编译器IDE是一个手机上的C语言编辑软件&#xff0c;支持在线编译各种代码&#xff0c;创建代码文件或管理不同的代码项目等&#xff1b;里面设置了C语言工程管理中心&#xff0c;其中的工程项目内容一目了然&#xff0c;所有工程项目名称都清晰展示&#xff0c;还显示自己…

新手c语言编译器推荐

c语言程序开发需要在某种编程环境中进行。 c语言常用的编程环境有Dev-C、C-Free、Code::Blocks、CLion、Turbo C、VS、VS Code、Visual C等。 1、VS/VS Code vs和vs code是很好用的编辑器&#xff0c;但是占用空间很大、操作有点繁琐对新手不太友好。 2、C-Free/Turbo C C…

windows系统c语言编译器安装

windows系统c语言编译器安装 1、安装包下载及说明 MinGW 的全称是&#xff1a;Minimalist GNU on Windows &#xff0c;实际上是将gcc&#xff08;c/c编译器&#xff09;移植到了 Windows 平台下&#xff0c;并且包含了 Win32API &#xff0c;因此可以将源代码编译为可在 Win…

c语言如何用编译器编辑,C语言编译器怎么用,C语言编译器使用教程

C语言编译器怎么用的详细解析 一、本站站点下载并安装&#xff0c;解压缩后&#xff0c;运行exe安装文件&#xff0c;单击“下一步” 二、选择已安装的组件后&#xff0c;单击“下一步” 三、单击“下一步”&#xff0c;默认情况下可以设置软件的安装位置&#xff0c;或者单击“…

微信公众号怎么发PDF文件

在微信公众号发表图文时&#xff0c;可以借助“文章附件”小程序在图文素材中添加文件&#xff0c;作为附件给粉丝下载。文章附件小程序支持的文件格式&#xff1a;Word、Excel、PPT、PDF、txt、zip、rar、7z、mp3、psd、wps等&#xff08;还有更多&#xff09;。 方法/步骤 …

业余草微信公众号Markdown编辑器, 适合代码排版

随着大家都转战微信公众平台&#xff0c;如何快速的编写文章就摆在了首要位置。不可否认&#xff0c;使用微信自带的编辑器可以做出好看的排版&#xff0c;甚至用第三方编辑器有更多的模板。但是&#xff0c;这些全部都需要手动的调整。本来公众平台就算是自媒体&#xff0c;非…

Vue微信公众号 创建自定义菜单

创建菜单的程序之前需配置&#xff1a; 1、申请一个测试公众号并设置接口信息&#xff0c;JS接口安全域名以及网页授权获取用户基本信息&#xff0c;这三项都要设置为自己的程序映射的公网地址 网页服务-》网页帐号-》网页授权获取用户基本信息&#xff1a;进行OAuth2.0网页授…