基于javaweb+mysql的jsp+servlet校园自行车租赁管理系统(java+jsp+javascript+servlet+mysql)

基于javaweb+mysql的jsp+servlet校园自行车租赁管理系统(java+jsp+javascript+servlet+mysql)

运行环境

Java≥8、MySQL≥5.7、Tomcat≥8

开发工具

eclipse/idea/myeclipse/sts等均可配置运行

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

基于javaweb+mysql的JSP+Servlet校园自行车租赁管理系统(java+jsp+javascript+servlet+mysql)

项目介绍

本项目分为前后台,包含管理员、站点管理员、用户三种角色;

管理员角色包含以下功能: 管理员登录,管理员管理,车辆类型管理,租赁站点管理,站点管理员管理,自行车信息管理,校园新闻管理,自行车租用统计,友情链接留言系统公告管理等功能。

站点管理员角色包含以下功能: 站点管理员登录,个人资料密码管理,充值管理,租赁归还记录管理,自行车管理,充值记录查询等功能。 用户角色包含以下功能:用户首页,在线留言,用户注册登录,自行车展示,租用自行车,校园新闻查看,租赁记录管理,归还记录管理等功能。

环境需要

1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 5.数据库:MySql 5.7版本; 6.是否Maven项目:否;

技术栈

JSP+CSS+JavaScript+Servlet+mysql

使用说明

  1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件; 2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven; 若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行; 3. 将项目中CommDAO.java配置文件中的第472行数据库配置改为自己的配置; 4. 运行项目,在浏览器中输入localhost:8080/xxx 登录
			try {
				String filename="";
				request.setCharacterEncoding("UTF-8");
				RequestContext  requestContext = new ServletRequestContext(request);
				if(FileUpload.isMultipartContent(requestContext)){

					DiskFileItemFactory factory = new DiskFileItemFactory();
					factory.setRepository(new File(request.getRealPath("/upfile/")+"/"));
					ServletFileUpload upload = new ServletFileUpload(factory);
					upload.setSizeMax(100*1024*1024);
					List items = new ArrayList();

					items = upload.parseRequest(request);

					FileItem fileItem = (FileItem) items.get(0);
					if(fileItem.getName()!=null && fileItem.getSize()!=0)
					{
						if(fileItem.getName()!=null && fileItem.getSize()!=0){
							File fullFile = new File(fileItem.getName());
							filename = Info.generalFileName(fullFile.getName());
							File newFile = new File(request.getRealPath("/upfile/")+"/" + filename);
							try {
								fileItem.write(newFile);
							} catch (Exception e) {
								e.printStackTrace();
							}
						}else{
						}
					}
				}

				go("/js/uploaddoc3.jsp?docname="+filename, request, response);
			} catch (Exception e1) {
				e1.printStackTrace();
			}
		}

		//导excel
		if(ac.equals("importexcel"))
		{
			String page = request.getParameter("page");
			String whzdstr = request.getParameter("whzdstr");
			String tablename = request.getParameter("tablename");
			try {
				String filename="";
				request.setCharacterEncoding("UTF-8");
				RequestContext  requestContext = new ServletRequestContext(request);
				if(FileUpload.isMultipartContent(requestContext)){

	     

		
		
}

		


	  public static String tform(HashMap map,String formname)
		{
	    	String jscode = "";
	    	try{
	    	jscode+="<script type=\"text/javascript\">\n";
	    	jscode+="function getPvalue()\n";
	    	jscode+="{\n";
	    	
	    	Set set = map.entrySet();
	    	 Iterator it = set.iterator();
	    	 while(it.hasNext())
	    	 {
	    	  String pm=((Object)it.next()).toString();
	    	  String str1 = "";
	    	  String str2 = "";
	    	  String[] strs = pm.split("=");
	    	  str1 = strs[0];
	    	  if(strs.length==1)str2="";
	    	  if(strs.length==2)str2=strs[1];
	    	  str2 = str2.replaceAll("\r\n", "---");
			 // str2 = str2.replaceAll("\"", "'");
	    	 
	    	  if(!str1.equals("content")){
	    	  
	    	  jscode+=" if(document.getElementsByName(\""+str1+"\").length>1)\n";
	    	  jscode+=" {\n";
	    	  jscode+=" var radios = document.getElementsByName(\""+str1+"\");\n";
	    	 
	    	  jscode+=" if(radios[0].type=='radio'){\n";
	    	  jscode+=" for(var i=0;i<radios.length;i++)\n";
	    	  jscode+=" {\n";
	    	  jscode+=" if(radios[i].value==\""+str2+"\")\n";
	    	  jscode+=" {\n";
	    	  jscode+=" radios[i].checked=\"checked\";\n";
	    	  jscode+=" }\n";
	    	  jscode+=" }\n";
	    	  jscode+=" }\n";
	    	   
	    	  
	         end=sourceLowcase.indexOf(to,start);
	         if(end==-1){
	          end=sourceLowcase.indexOf("/>",start); 
	          if(end==-1) {
	           done=false;
	          }
	         }
	         else{
	          end=end+to.length();
	          subLowcase2=sourceLowcase.substring(end,source.length());
	          sub2=source.substring(end,source.length());
	          sourceLowcase=subLowcase1+subLowcase2;
	          source=sub1+sub2;
	         }
	         //System.out.println(start+" "+end);
	        }
	        return source;
	   }
	    
	   
	    public static void delPic(String path,String img)
		{
			 if(img!=null)
			 {
				 if(!img.equals(""))
				 {
			  File file1=new File(path + "/" + img); 
		       if(file1.exists() ) {
		    	//file1.deleteOnExit();
		         //file1.delete();
		       }}}
		}
	    
	    
	     

		
		
}

		


public class MainCtrl extends HttpServlet {

	public MainCtrl() {
		super();
	}

	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		this.doPost(request, response);
	}

	public void go(String url,HttpServletRequest request, HttpServletResponse response)
	{
		try {
			request.getRequestDispatcher(url).forward(request, response);
		} catch (ServletException e) {
			e.printStackTrace();
		} catch (IOException e) {
					}
				}
				go("/admin/"+page+"?docname="+filename, request, response);
			} catch (Exception e1) {
				e1.printStackTrace();
			}
		}

		if(ac.equals("uploadimg"))
		{
			try {
				String filename="";
				request.setCharacterEncoding("UTF-8");
				RequestContext  requestContext = new ServletRequestContext(request);
				if(FileUpload.isMultipartContent(requestContext)){

					DiskFileItemFactory factory = new DiskFileItemFactory();
					factory.setRepository(new File(request.getRealPath("/upfile/")+"/"));
					ServletFileUpload upload = new ServletFileUpload(factory);
					upload.setSizeMax(100*1024*1024);
					List items = new ArrayList();

					items = upload.parseRequest(request);

					FileItem fileItem = (FileItem) items.get(0);
					if(fileItem.getName()!=null && fileItem.getSize()!=0)
					{
						if(fileItem.getName()!=null && fileItem.getSize()!=0){
							File fullFile = new File(fileItem.getName());
							filename = Info.generalFileName(fullFile.getName());
							File newFile = new File(request.getRealPath("/upfile/")+"/" + filename);
							try {
								fileItem.write(newFile);
							} catch (Exception e) {
								e.printStackTrace();
							}
						}else{
						}
					}
				}

				go("/js/uploadimg.jsp?filename="+filename, request, response);
	public String insert(HttpServletRequest request,HttpServletResponse response, String tablename,HashMap extmap,boolean alert,boolean reflush,String tzurl)
	{
		extmap.put("addtime", Info.getDateStr());
		if(request.getParameter("f")!=null){
			HashMap typemap = new HashMap();
			ArrayList<String> collist = new ArrayList();
			String sql = "insert into "+tablename+"(";

			Connection conn = this.getConn();
			try {
				Statement st = conn.createStatement();
				ResultSet rs = st.executeQuery("select * from "+tablename);
				ResultSetMetaData rsmd = rs.getMetaData();
				int i = rsmd.getColumnCount();

				for(int j=1;j<=i;j++)
				{
					if(rsmd.getColumnName(j).equals("id"))continue;
					if(rsmd.getColumnName(j).equals("ID"))continue;
					if(rsmd.getColumnName(j).equals("iD"))continue;
					if(rsmd.getColumnName(j).equals("Id"))continue;
					typemap.put(rsmd.getColumnName(j)+"---", rsmd.getColumnTypeName(j));
					collist.add(rsmd.getColumnName(j));
					sql+=rsmd.getColumnName(j)+",";
				}
				sql = sql.substring(0,sql.length()-1);

				sql+=") values(";
				rs.close();
				st.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			Enumeration enumeration = request.getParameterNames();
			String names = ",";
			while(enumeration.hasMoreElements())
			{
				names += enumeration.nextElement().toString()+",";
			}
			try {
				Statement st = conn.createStatement();
				for(String str:collist)
				{
					if(names.indexOf(","+str+",")>-1)
					{
						String[] values = request.getParameterValues(str);
						String value="";
				go("/login.jsp", request, response);
			}
			else{
				String sql1="";
				if (utype.equals("管理员"))
				{
					sql1 = "select * from allusers where username='"+username+"' and pwd='"+password+"'  ";
				}
				if (utype.equals("站点管理员"))
				{
					sql1 = "select * from zhandianguanliyuan where yonghuming='"+username+"' and mima='"+password+"'";
				}
				List<HashMap> userlist1 = dao.select(sql1);

				if(userlist1.size()==1)
				{
					if (utype.equals("管理员"))
					{
						request.getSession(). setAttribute("username", userlist1.get(0).get("username"));
						request.getSession(). setAttribute("cx",  userlist1.get(0).get("cx"));
					}
					if (utype.equals("站点管理员"))
					{
						request.getSession(). setAttribute("username", userlist1.get(0).get("yonghuming"));
						request.getSession(). setAttribute("zd",  userlist1.get(0).get("zulinzhandian"));
						request.getSession(). setAttribute("cx",utype );
					}
					gor("main.jsp", request, response);
				}else{
					request.setAttribute("error", "");
					go("/login.jsp", request, response);
				}
			}
		}

		//修改密码
		if(ac.equals("uppass"))
		{
			String olduserpass = request.getParameter("ymm");
			String userpass = request.getParameter("xmm1");
			String copyuserpass = request.getParameter("xmm2");
			HashMap m = dao.getmaps("yonghuming",(String)request.getSession().getAttribute("username"), "yonghuzhuce");
			if(!(((String)m.get("mima")).equals(olduserpass)))
			{
				request.setAttribute("error", "");
				go("mod2.jsp", request, response);
			}else{
				//String id = (String)user.get("id");
				String sql = "update yonghuzhuce set mima='"+userpass+"' where yonghuming='"+(String)request.getSession().getAttribute("username")+"'";
				dao.commOper(sql);
		if (parameter != null && parameter.size() != 0) {
			Iterator iterator = parameter.iterator();
			while (iterator.hasNext()) {
				para.append("&").append(iterator.next().toString());
			}
		}
		this.parameter = para.toString();

	}

	/**
	 * 刷新分页路径
	 * 
	 */
	protected void refreshUrl() {
		StringBuffer buf = new StringBuffer();
		buf.append("<font color='#1157B7'>共").append(count);
		buf.append("条");
		buf.append("&nbsp;&nbsp;");
		buf.append("第").append(this.currentPage).append("/").append(
				this.pageNumber).append("页");
		buf.append("&nbsp;&nbsp;&nbsp;&nbsp;");
		if (this.currentPage == 1)
			buf.append("首页");
		else
			buf.append("<a href='").append(this.path).append("&currentPage=1")
					.append(parameter)
					.append("' class='ls'>").append("首页")
					.append("</a>");
		// #1157B7
		buf.append("&nbsp;&nbsp;&nbsp;&nbsp;");

		if (this.currentPage > 1) {
			buf.append("<a href='").append(this.path).append("&currentPage=")
					.append(currentPage - 1).append(parameter).append(
							"' class='ls'>").append("上页")
					.append("</a>");
		} else {
			buf.append("上页");

		}
		buf.append("&nbsp;&nbsp;");

		int currentSegment = this.currentPage % segment == 0 ? this.currentPage
				/ segment : this.currentPage / segment + 1;

		/*for (int i = 1; i <= this.pageNumber; i++) {
			if (this.currentPage == i)
				buf.append("<font color='red'>").append(i).append("</font>");

			else
				buf.append("<a href='").append(this.path).append(
						"&currentPage=").append(i).append(parameter).append(
	        fileName = request.getRealPath("/")+"/upfile/"+Info.generalFileName("a.xls");
	        String[] pros = prosstr.split("@");
	        try {    
	            //首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象    
	            wwb = Workbook.createWorkbook(new File(fileName));    
	        } catch (IOException e) {    
	            e.printStackTrace();    
	        }    
	        if(wwb!=null){    
	            //创建一个可写入的工作表    
	            //Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置    
	            WritableSheet ws = wwb.createSheet("sheet1", 0);    
	            ws.setColumnView(0,20);
	            ws.setColumnView(1,20);
	            ws.setColumnView(2,20);
	            ws.setColumnView(3,20);
	            ws.setColumnView(4,20);
	            ws.setColumnView(5,20);

	            try {
	            
	            	
	            for(int i=0;i<pros.length;i++)
	            {
	            Label label1 = new Label(i, 0,"");
	            
	            label1.setString(pros[i]);
	            ws.addCell(label1);
	            }
	            
	            } catch (RowsExceededException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (WriteException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}    
	             //下面开始添加单元格  
				int i=1;
	            for(List t:mlist){  
	            	try {
	            		
	            	Iterator it = t.iterator();
	            	int jj=0;
	            		while(it.hasNext())
	            		{
	            	Label label1 = new Label(jj, i,"");
	            	
	            	String a = it.next().toString();
		            label1.setString(a);
		            ws.addCell(label1);
		            jj++;
	            		}
		            
			while(rs.next())
			{
				HashMap map = new HashMap();
				int i = rsmd.getColumnCount();
				for(int j=1;j<=i;j++)
				{
					if(!rsmd.getColumnName(j).equals("ID"))
					{
						String str = rs.getString(j)==null?"": rs.getString(j);
						if(str.equals("null"))str = "";
						map.put(rsmd.getColumnName(j), str);
					}
					else
						map.put("id", rs.getString(j));
				}
				list.add(map);
			}
			rs.close();
			st.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return list.get(0);
	}

	public String insert(HttpServletRequest request,HttpServletResponse response, String tablename,HashMap extmap,boolean alert,boolean reflush,String tzurl)
	{
		extmap.put("addtime", Info.getDateStr());
		if(request.getParameter("f")!=null){
			HashMap typemap = new HashMap();
			ArrayList<String> collist = new ArrayList();
			String sql = "insert into "+tablename+"(";

			Connection conn = this.getConn();
			try {
				Statement st = conn.createStatement();
				ResultSet rs = st.executeQuery("select * from "+tablename);
				ResultSetMetaData rsmd = rs.getMetaData();
				int i = rsmd.getColumnCount();

				for(int j=1;j<=i;j++)
				{
					if(rsmd.getColumnName(j).equals("id"))continue;
					if(rsmd.getColumnName(j).equals("ID"))continue;
					if(rsmd.getColumnName(j).equals("iD"))continue;
					if(rsmd.getColumnName(j).equals("Id"))continue;
					typemap.put(rsmd.getColumnName(j)+"---", rsmd.getColumnTypeName(j));
					collist.add(rsmd.getColumnName(j));
							try {
								fileItem.write(newFile);
							} catch (Exception e) {
								e.printStackTrace();
							}
						}else{
						}
					}
				}

				go("/js/uploadimg4.jsp?filename="+filename, request, response);
			} catch (Exception e1) {
				e1.printStackTrace();
			}
		}

		if(ac.equals("uploadimg5"))
		{
			try {
				String filename="";
				request.setCharacterEncoding("UTF-8");
				RequestContext  requestContext = new ServletRequestContext(request);
				if(FileUpload.isMultipartContent(requestContext)){

					DiskFileItemFactory factory = new DiskFileItemFactory();
					factory.setRepository(new File(request.getRealPath("/upfile/")+"/"));
					ServletFileUpload upload = new ServletFileUpload(factory);
					upload.setSizeMax(100*1024*1024);
					List items = new ArrayList();

					items = upload.parseRequest(request);

					FileItem fileItem = (FileItem) items.get(0);
					if(fileItem.getName()!=null && fileItem.getSize()!=0)
					{
						if(fileItem.getName()!=null && fileItem.getSize()!=0){
							File fullFile = new File(fileItem.getName());
							filename = Info.generalFileName(fullFile.getName());
							File newFile = new File(request.getRealPath("/upfile/")+"/" + filename);
							try {
								fileItem.write(newFile);
							} catch (Exception e) {
								e.printStackTrace();
							}
						}else{
						}
			if(j==i)
			{
				thePics1.append(url.replaceAll("\n", ""));
				theLinks1.append("gg_detail.jsp?id="+b.get("id"));
				theTexts1.append(title);
			}

		}
		thePics1.append("';");

		theLinks1.append("';");
		theTexts1.append("';");
		imgStr.append(thePics1+"\n");
		imgStr.append(theLinks1+"\n");
		imgStr.append(theTexts1+"\n");
		imgStr.append("\n setPic(thePics1,theLinks1,theTexts1,"+width+","+height+",'picViwer1');</script>");
		return imgStr.toString();
	}

	public HashMap getmap(String id,String table)
	{
		List<HashMap> list = new ArrayList();
		try {
			Statement st = conn.createStatement();
			//System.out.println("select * from "+table+" where id="+id);
			ResultSet rs = st.executeQuery("select * from "+table+" where id="+id);
			ResultSetMetaData rsmd = rs.getMetaData();
			while(rs.next())
			{
				HashMap map = new HashMap();
				int i = rsmd.getColumnCount();
				for(int j=1;j<=i;j++)
				{
					if(!rsmd.getColumnName(j).equals("ID"))
					{
						String str = rs.getString(j)==null?"": rs.getString(j);
						if(str.equals("null"))str = "";
						map.put(rsmd.getColumnName(j), str);
					}
					else
						map.put("id", rs.getString(j));
				}
				list.add(map);
			}
			rs.close();
			st.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			 
			 checkbox+="<label><input type='checkbox' name='"+name+"' value=\""+optionstr+"\">"+optionstr+"</label>\n";
		 }
		 checkbox+="<input type=hidden name='"+name+"' value='' />";
		 return checkbox;
	 }
	 
	 
	 public static String getCombox(String tablename,String zdname,String where)
	 { 
		 String checkbox="";
		 for(HashMap permap:new CommDAO().select("select * from "+tablename+" where "+where+" order by id desc")){ 
			 
			 String optionstr = "'";
			 for(String str:zdname.split(";"))
			 {
				 if(str.indexOf("~")>-1){
				 String zdstr = str.split("~")[0];
				 String zdnamestr = str.split("~")[1].equals("无名")?"":(str.split("~")[1]+":");
				 optionstr+=zdnamestr+permap.get(zdstr)+" - ";
				 }else{ 
					 optionstr+=permap.get(str); 
				 }
			 }
			 if(optionstr.length()>0)optionstr=optionstr.substring(0,optionstr.length()-3);
			 optionstr+="',";
			 checkbox+= optionstr;
		 }
		 if(checkbox.length()>0)checkbox=checkbox.substring(0,checkbox.length()-1);
		 
		 return checkbox;
	 }
	 
	 
	 
	 
	 public static String getcheckboxDk(String name,String tablename,String zdname,String nstr,String where)
	 { 
		 String checkbox="";
		 int i=0;
		 for(HashMap permap:new CommDAO().select("select * from "+tablename+" where "+where+" order by id desc")){ 
			 
			 String optionstr = "";
			 for(String str:zdname.split(";"))
			 {
				 String zdstr = str.split("~")[0];
				 String zdnamestr = str.split("~")[1].equals("无名")?"":(str.split("~")[1]+":");
				 optionstr+=zdnamestr+permap.get(zdstr)+" - ";
			 }
	                return "den";
	            }
	        } catch (Exception exception) {
	            exception.printStackTrace();
	        }
	        return "den";
	    }
	    
	    /**
	 	 * 过滤html代码
	 	 * 
	 	 */
	    public static String filterStrIgnoreCase(String source, String from, String to){
	        String sourceLowcase=source.toLowerCase();
	        String sub1,sub2,subLowcase1,subLowcase2;
	        sub1=sub2=subLowcase1=subLowcase2="";
	        int start=0,end;
	        boolean done=true;
	        if(source==null) return null;
	        if(from==null||from.equals("")||to==null||to.equals("")) 
	         return source;
	        while(done){
	         start=sourceLowcase.indexOf(from,start);
	         if(start==-1) {
	          break;
	         }
	         subLowcase1=sourceLowcase.substring(0,start);
	         sub1=source.substring(0,start);
	         end=sourceLowcase.indexOf(to,start);
	         if(end==-1){
	          end=sourceLowcase.indexOf("/>",start); 
	          if(end==-1) {
	           done=false;
	          }
	         }
	         else{
	          end=end+to.length();
	          subLowcase2=sourceLowcase.substring(end,source.length());
	          sub2=source.substring(end,source.length());
	          sourceLowcase=subLowcase1+subLowcase2;
	          source=sub1+sub2;
	         }
	         //System.out.println(start+" "+end);
	        }
	        return source;
	   }
	    
	   
	    public static void delPic(String path,String img)
		{
			 if(img!=null)

	public void close()
	{

	}

	/**
	 */
	public List<HashMap> select(String sql, int pageno, int rowsize) {
		List<HashMap> list=new ArrayList<HashMap>();
		List<HashMap> mlist=new ArrayList<HashMap>();
		try{
			list=this.select(sql);
			int min = (pageno-1)*rowsize;
			int max = pageno*rowsize;

			for(int i=0;i<list.size();i++)
			{

				if(!(i<min||i>(max-1)))
				{
					mlist.add(list.get(i));
				}
			}
		}catch(RuntimeException re){
			re.printStackTrace();
			throw re;
		}

		return mlist;
	}

	public static void main(String[] args) {
	}
}

		// "[" + (i + 1) + "]").append("</a>&nbsp;");
		// }

		// }
		buf.append("<select οnchange=\"javascript:window.location='").append(
				this.path).append("&currentPage='+").append(
				"this.options[this.selectedIndex].value").append(parameter)
				.append("\">");
		for (int i = 0; i < this.pageNumber; i++) {
			if (this.currentPage == i + 1)
				buf.append("<option value=" + (i + 1)
						+ " selected=\"selected\">" + (i + 1) + "</option>");
			else
				buf.append("<option value=" + (i + 1) + ">" + (i + 1)
						+ "</option>");

		}
		buf.append("</select>");
		this.info = buf.toString();
		
	}

	public Collection getCollection() {
		return collection;
	}

	public long getCount() {
		return count;
	}

	public int getCurrentPage() {
		return currentPage;
	}

	public long getPageNumber() {
		return pageNumber;
	}

	public int getPageSize() {
		return pageSize;
	}

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值