JSP学籍信息管理系统实现增删改查的相关功能操作

JSP学籍信息管理系统

前言

这是我大二上学期那年学习JSP做的实训项目,现在把它贴在网上供自己和需要的人进行回顾和参考,如有哪里做的不规范还请指出,因为这是第一次做的项目所以不是特别完善,界面也不够美观,简单的实现了相关功能,该项目使用的软件是myeclipse2014,数据库为mysql,实现了学籍信息管理系统中相关的增删改查操作能够运行实现,以及验证码等功能,如有不够规范,还敬请谅解!


一、学籍信息管理项目实训要求

学籍信息管理模块
1、管理员表,学生表,学籍信息表(学校,专业,班级,学历,总学分,入学年月,毕业年月);
2、学生表:注册,登录,查询自己的信息,修改密码和个人信息,用户只能修改和查看自己的学籍信息。
3、管理员表:查看所有人信息,对所有人信息以及学籍信息进行增删改。

二、数据库设计

1.创建数据库

数据库代码如下(示例):

create database DB_StudentstatusInfo_xxd

use DB_StudentstatusInfo_xxd

--创建超级管理员(后缀名xxd为本人的缩写名)
create table T_SupAdmin_xxd(
supid_xxd bigint primary key identity(10,1),
supname_xxd varchar(200) not null,
suppwd_xxd varchar(200) not null)


--创建管理员表
create table T_Admin_xxd(
Aid_xxd bigint primary key identity(1000,1),
useName_xxd varchar(200) not null,
pwd_xxd varchar(200) not null
)


--创建学生表
create table T_Student_xxd(
Sid_xxd bigint primary key identity(10000,1),
Sname_xxd varchar(200) not null,
Spwd_xxd varchar(200) not null,
Sgender_xxd varchar(4) not null,
Sbrith_xxd date not null,
Stell_xxd varchar(300) not null,
Saddress_xxd varchar(300) not null,
Squestion_xxd varchar(300) not null,
Sanswer_xxd varchar(200) not null,
Snote_xxd text)


--创建学籍表
create table T_Studentstatus_xxd(
Xid_xxd bigint primary key identity(100,1),
Xid1_xxd bigint not null,
Xschool_xxd varchar(300) not null,
Xspecial_xxd varchar(300) not null,
Xclass_xxd varchar(300) not null,
Xeducation_xxd varchar(300) not null,
Xtotalcredit_xxd varchar(300) not null,
Xschoolyear_xxd date not null,
Xgraduation_xxd date )


insert into T_SupAdmin_xxd values('胡图图','1')

--建立主外键关系(学生表与学籍表)
alter table T_Studentstatus_xxd
add constraint FK_T_Studentstatus_xxd_T_Student_xxd_Xid1_xxd
foreign key(Xid1_xxd) references T_Student_xxd(Sid_xxd)

三.实现代码

附上github源码及数据库地址:https://github.com/xxd6772123/xxd6772123.github.io

1.创建学籍管理系统的web工程

工程创建类包如图所示:工程整体类包
添加配置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

①首先开始写entity层:

com.xxd.
分别创建好管理员类、学生类、学籍信息类、以及超级管理员类(超级管理员可有可无,我是在要求之上添加到,但你也可以根据自己的要求进行添加与否)

1.创建超级管理员类

package com.xxd.entity;

public class SupAdmin_xxd {
   
   
	long supid_xxd;
	String supname_xxd;
	String suppwd_xxd;
	public long getSupid_xxd() {
   
   
		return supid_xxd;
	}
	public void setSupid_xxd(long supid_xxd) {
   
   
		this.supid_xxd = supid_xxd;
	}
	public String getSupname_xxd() {
   
   
		return supname_xxd;
	}
	public void setSupname_xxd(String supname_xxd) {
   
   
		this.supname_xxd = supname_xxd;
	}
	public String getSuppwd_xxd() {
   
   
		return suppwd_xxd;
	}
	public void setSuppwd_xxd(String suppwd_xxd) {
   
   
		this.suppwd_xxd = suppwd_xxd;
	}
	public SupAdmin_xxd(long supid_xxd, String supname_xxd, String suppwd_xxd) {
   
   
		this.supid_xxd = supid_xxd;
		this.supname_xxd = supname_xxd;
		this.suppwd_xxd = suppwd_xxd;
	}
	public SupAdmin_xxd(String supname_xxd, String suppwd_xxd) {
   
   
		this.supname_xxd = supname_xxd;
		this.suppwd_xxd = suppwd_xxd;
	}
	public SupAdmin_xxd() {
   
   
	}

}

2.创建管理员类

package com.xxd.entity;

public class Admin_xxd {
   
   
	long Aid_xxd;
	String useName_xxd;
	String pwd_xxd;
	public long getAid_xxd() {
   
   
		return Aid_xxd;
	}
	public void setAid_xxd(long aid_xxd) {
   
   
		Aid_xxd = aid_xxd;
	}
	public String getUseName_xxd() {
   
   
		return useName_xxd;
	}
	public void setUseName_xxd(String useName_xxd) {
   
   
		this.useName_xxd = useName_xxd;
	}
	public String getPwd_xxd() {
   
   
		return pwd_xxd;
	}
	public void setPwd_xxd(String pwd_xxd) {
   
   
		this.pwd_xxd = pwd_xxd;
	}
	public Admin_xxd(long aid_xxd, String useName_xxd, String pwd_xxd) {
   
   
		super();
		Aid_xxd = aid_xxd;
		this.useName_xxd = useName_xxd;
		this.pwd_xxd = pwd_xxd;
	}
	public Admin_xxd(String useName_xxd, String pwd_xxd) {
   
   
		super();
		this.useName_xxd = useName_xxd;
		this.pwd_xxd = pwd_xxd;
	}
	public Admin_xxd() {
   
   
		super();
	}
	
}

3.创建学生类

package com.xxd.entity;

public class Student_xxd {
   
   
	long Sid_xxd;
	String Sname_xxd;
	String Spwd_xxd;
	String Sgender_xxd;
	String Sbrith_xxd;
	String Stell_xxd;
	String Saddress_xxd;
	String Squestion_xxd;
	String Sanswer_xxd;
	String Snote_xxd;
	public long getSid_xxd() {
   
   
		return Sid_xxd;
	}
	public void setSid_xxd(long sid_xxd) {
   
   
		Sid_xxd = sid_xxd;
	}
	
	public String getSname_xxd() {
   
   
		return Sname_xxd;
	}
	public void setSname_xxd(String sname_xxd) {
   
   
		Sname_xxd = sname_xxd;
	}
	public String getSpwd_xxd() {
   
   
		return Spwd_xxd;
	}
	public void setSpwd_xxd(String spwd_xxd) {
   
   
		Spwd_xxd = spwd_xxd;
	}
	public String getSgender_xxd() {
   
   
		return Sgender_xxd;
	}
	public void setSgender_xxd(String sgender_xxd) {
   
   
		Sgender_xxd = sgender_xxd;
	}
	public String getSbrith_xxd() {
   
   
		return Sbrith_xxd;
	}
	public void setSbrith_xxd(String sbrith_xxd) {
   
   
		Sbrith_xxd = sbrith_xxd;
	}
	public String getStell_xxd() {
   
   
		return Stell_xxd;
	}
	public void setStell_xxd(String stell_xxd) {
   
   
		Stell_xxd = stell_xxd;
	}
	public String getSaddress_xxd() {
   
   
		return Saddress_xxd;
	}
	public void setSaddress_xxd(String saddress_xxd) {
   
   
		Saddress_xxd = saddress_xxd;
	}
	public String getSquestion_xxd() {
   
   
		return Squestion_xxd;
	}
	public void setSquestion_xxd(String squestion_xxd) {
   
   
		Squestion_xxd = squestion_xxd;
	}
	public String getSanswer_xxd() {
   
   
		return Sanswer_xxd;
	}
	public void setSanswer_xxd(String sanswer_xxd) {
   
   
		Sanswer_xxd = sanswer_xxd;
	}
	public String getSnote_xxd() {
   
   
		return Snote_xxd;
	}
	public void setSnote_xxd(String snote_xxd) {
   
   
		Snote_xxd = snote_xxd;
	}
	public Student_xxd(long sid_xxd,String sname_xxd, String spwd_xxd,
			String sgender_xxd, String sbrith_xxd, String stell_xxd,
			String saddress_xxd, String squestion_xxd, String sanswer_xxd,
			String snote_xxd) {
   
   
		super();
		Sid_xxd = sid_xxd;
		Sname_xxd = sname_xxd;
		Spwd_xxd = spwd_xxd;
		Sgender_xxd = sgender_xxd;
		Sbrith_xxd = sbrith_xxd;
		Stell_xxd = stell_xxd;
		Saddress_xxd = saddress_xxd;
		Squestion_xxd = squestion_xxd;
		Sanswer_xxd = sanswer_xxd;
		Snote_xxd = snote_xxd;
	}

	public Student_xxd(String sname_xxd, String spwd_xxd,
			String sgender_xxd, String sbrith_xxd, String stell_xxd,
			String saddress_xxd, String squestion_xxd, String sanswer_xxd,
			String snote_xxd) {
   
   
		super();
		
		Sname_xxd = sname_xxd;
		Spwd_xxd = spwd_xxd;
		Sgender_xxd = sgender_xxd;
		Sbrith_xxd = sbrith_xxd;
		Stell_xxd = stell_xxd;
		Saddress_xxd = saddress_xxd;
		Squestion_xxd = squestion_xxd;
		Sanswer_xxd = sanswer_xxd;
		Snote_xxd = snote_xxd;
	}
	public Student_xxd() {
   
   
		super();
	}
	
}

4.创建学籍信息类

package com.xxd.entity;

public class StudentStatus_xxd {
   
   
	long Xid_xxd;
	long Xid1_xxd;
	String Xschool_xxd;
	String Xspecial_xxd;
	String Xclass_xxd;
	String Xeducation_xxd;
	String Xtotalcredit_xxd;
	String Xschoolyear_xxd;
	String Xgraduation_xxd;
	public long getXid_xxd() {
   
   
		return Xid_xxd;
	}
	public void setXid_xxd(long xid_xxd) {
   
   
		Xid_xxd = xid_xxd;
	}
	public long getXid1_xxd() {
   
   
		return Xid1_xxd;
	}
	public void setXid1_xxd(long xid1_xxd) {
   
   
		Xid1_xxd = xid1_xxd;
	}
	public String getXschool_xxd() {
   
   
		return Xschool_xxd;
	}
	public void setXschool_xxd(String xschool_xxd) {
   
   
		Xschool_xxd = xschool_xxd;
	}
	public String getXspecial_xxd() {
   
   
		return Xspecial_xxd;
	}
	public void setXspecial_xxd(String xspecial_xxd) {
   
   
		Xspecial_xxd = xspecial_xxd;
	}
	public String getXclass_xxd() {
   
   
		return Xclass_xxd;
	}
	public void setXclass_xxd(String xclass_xxd) {
   
   
		Xclass_xxd = xclass_xxd;
	}
	public String getXeducation_xxd() {
   
   
		return Xeducation_xxd;
	}
	public void setXeducation_xxd(String xeducation_xxd) {
   
   
		Xeducation_xxd = xeducation_xxd;
	}
	public String getXtotalcredit_xxd() {
   
   
		return Xtotalcredit_xxd;
	}
	public void setXtotalcredit_xxd(String xtotalcredit_xxd) {
   
   
		Xtotalcredit_xxd = xtotalcredit_xxd;
	}
	public String getXschoolyear_xxd() {
   
   
		return Xschoolyear_xxd;
	}
	public void setXschoolyear_xxd(String xschoolyear_xxd) {
   
   
		Xschoolyear_xxd = xschoolyear_xxd;
	}
	public String getXgraduation_xxd() {
   
   
		return Xgraduation_xxd;
	}
	public void setXgraduation_xxd(String xgraduation_xxd) {
   
   
		Xgraduation_xxd = xgraduation_xxd;
	}
	public StudentStatus_xxd(long xid_xxd,long xid1_xxd,String xschool_xxd,
			String xspecial_xxd, String xclass_xxd, String xeducation_xxd,
			String xtotalcredit_xxd, String xschoolyear_xxd,
			String xgraduation_xxd) {
   
   
		super();
		Xid_xxd = xid_xxd;
		Xid1_xxd = xid_xxd;
		Xschool_xxd = xschool_xxd;
		Xspecial_xxd = xspecial_xxd;
		Xclass_xxd = xclass_xxd;
		Xeducation_xxd = xeducation_xxd;
		Xtotalcredit_xxd = xtotalcredit_xxd;
		Xschoolyear_xxd = xschoolyear_xxd;
		Xgraduation_xxd = xgraduation_xxd;
	}
	
	public StudentStatus_xxd(long xid1_xxd, String xschool_xxd,
			String xspecial_xxd, String xclass_xxd, String xeducation_xxd,
			String xtotalcredit_xxd, String xschoolyear_xxd,
			String xgraduation_xxd) {
   
   
		super();
		Xid1_xxd = xid1_xxd;
		Xschool_xxd = xschool_xxd;
		Xspecial_xxd = xspecial_xxd;
		Xclass_xxd = xclass_xxd;
		Xeducation_xxd = xeducation_xxd;
		Xtotalcredit_xxd = xtotalcredit_xxd;
		Xschoolyear_xxd = xschoolyear_xxd;
		Xgraduation_xxd = xgraduation_xxd;
	}
	public StudentStatus_xxd() {
   
   
		super();
	}

}

②然后开始写dao层:
dao层分类
在Dao层分别创建四个Class对应每个类的方法接口


1.SupAdminDao层代码如下:

package com.xxd.Dao;

import java.util.List;

import com.xxd.entity.Admin_xxd;

public interface SupAdminDao_xxd {
   
   
	
	//验证超级管理员的账号和密码(超级管理员只能在数据库中插入)
	public int supUseNameandpwd(String supname_xxd, String suppwd_xxd);
	
	//遍历所有管理员的信息
	public List<Admin_xxd> queryAllAdminInfo();

}

2.AdminDao层代码如下:

package com.xxd.Dao;

import java.util.List;

import com.xxd.entity.Admin_xxd;

public interface AdminDao_xxd {
   
   
	
	//注册管理员
	public int insertAdmin_xxd(Admin_xxd a);
	
	//检测用户名是否存在
	public int checkuseNameIsExist(String useName_xxd);

	//验证用户名和密码是否正确
	public int UseNameandpwd(String useName_xxd, String pwd_xxd);
	
	//表格遍历所有管理员信息
	public List<Admin_xxd> queryAllAdminInfo();

	//超级管理员修改管理员信息
	public int updateAdminInfoBySup(Admin_xxd admin);
	
	//删除管理员
	public int delAdmin(long Aid_xxd);
	
	//通过管理员id查询所有学生信息
	List<Admin_xxd> queryStuByAid(long Aid_xxd);
}

3.StudentDao代码如下:

package com.xxd.Dao;

import java.util.List;

import com.xxd.entity.Student_xxd;



public interface StudentDao_xxd {
   
   
	
	//添加学生信息
	public int insertStudent_xxd(Student_xxd s);
	
	//验证用户名和密码
	public int queryStuBySnameAndSpwd(String Sname_xxd, String Spwd_xxd);
	
	//用户名找回密码
	public Student_xxd queryStuInfoByUserName(String Sname_xxd);
	
	//学生通过问题答案修改密码
	public int modifyPwdByUserNameAndQuestionAndAnswer(String Sname_xxd,String Squestion_xxd, String Sanswer_xxd);
	
	//通过登录后修改密码
	public int updatePwdBySname(String Sname_xxd, String Spwd_xxd);
	
	//通过学生id添加学籍
	public long checkstuId(String Sname_xxd);
	
	//所有学生信息表的修改
	public int updateStuInfoByStudent(Student_xxd student);

	//通过学号查询姓名
	String getSname(long Sid_xxd);
	
	
	//遍历所有学生信息
	public List<Student_xxd> queryAllStuInfo();
	
	//删除学生
	public int delstu(long Sid_xxd);

	//表格查询通过学生姓名查询到该生所有信息
	public List<Student_xxd> queryStuBySname(String Sname_xxd);

	//表格查询通过学生姓名查询到该生所有信息
	public List<Student_xxd> queryStuBySid(long Sid_xxd);
	
}

4.StudentstatusDao代码如下:

package com.xxd.Dao;

import com.xxd.entity.StudentStatus_xxd;

public interface StudentStatusDao_xxd {
   
   

	//添加学籍信息
	public int addStudentStatus(StudentStatus_xxd d);
	
	//删除学籍
	public int delsta(long Xid_xxd);
	
	//通过学号查询学籍号
	public long checkXid(long Xid1_xxd);
	
	//通过学号查询到对的学籍信息
	public StudentStatus_xxd queryStuStaInfoByXid(long Xid1_xxd);
	
	//修改学籍信息
	public int updateStuStaInfoByStudentSta(StudentStatus_xxd Studentstatus);
}

③其次是Util(工具)层的代码片段(类创建如图所示)
在这里插入图片描述


CEF.java代码如下所示:

package com.xxd.util;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;

@WebFilter(filterName="a",urlPatterns="/*")
public class CEF_xxd implements Filter{
   
   

	@Override
	public void destroy() {
   
   
		
	}

	@Override
	public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {
   
   
		req.setCharacterEncoding("utf-8");
		resp.setCharacterEncoding("utf-8");
		resp.setContentType("text/html;charset=utf-8");
		chain.doFilter(req, resp);
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
   
   
		
	}

}

DBuilt.java代码如下所示:
注意:String url = “jdbc:sqlserver://127.0.0.1:1433;database=DB_StudentstatusInfo_xxd;user=sa;password=1234”;中的database、user、password都要根据个人设置情况进行修改!!!

package com.xxd.util;

import java.sql.Connection;
import java.sql.DriverManager;

import org.junit.Test;

public class DButil_xxd {
   
   
public static Connection conn = null;
	
	public static Connection getConn(){
   
   
		try{
   
   
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			String url = "jdbc:sqlserver://127.0.0.1:1433;database=DB_StudentstatusInfo_xxd;user=sa;password=1234";
			conn = DriverManager.getConnection(url);
			if(conn != null) {
   
   
//				System.out.println("ok!!!!!!");
			}else{
   
   
				System.out.println("failed");
			}
		}catch(Exception e){
   
   
			e.printStackTrace();
		}
		return conn;
	}
	public void closeConn(Connection conn){
   
   
		if(conn != null){
   
   
			try{
   
   
				conn.close();
			}catch(Exception e){
   
   
				e.printStackTrace();
			}
		}
	}
	@Test
	public void test(){
   
   
		getConn();
	}
}

④再是写Daoimplement层(Dao实现层)
dao实现层
1.首先是SupAdminDaoImpl.java的代码(超级管理员实现类)

package com.xxd.DaoImpl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com.xxd.Dao.SupAdminDao_xxd;
import com.xxd.entity.Admin_xxd;
import com.xxd.entity.Student_xxd;
import com.xxd.util.DButil_xxd;

public class SupAdminDaompl_xxd implements SupAdminDao_xxd{
   
   
	//验证超级管理员用户名和密码
	public int supUseNameandpwd(String supname_xxd, String suppwd_xxd) {
   
   
		int x = 0 ;
		try{
   
   
			Connection conn = DButil_xxd.getConn();
			String checkSupUser_sql="select * from T_SupAdmin_xxd where supname_xxd=? and suppwd_xxd=?";
			PreparedStatement ps = conn.prepareStatement(checkSupUser_sql);
			ps.setString(1, supname_xxd);
			ps.setString(2, suppwd_xxd);
			ResultSet rs = ps.executeQuery();
			if(rs.next()){
   
   
				x=1;
			}
		}catch(Exception e){
   
   
			e.printStackTrace();
		}
		return x;
	}

	//查询所有管理员信息
	@Override
	public List<Admin_xxd> queryAllAdminInfo() {
   
   
		List<Admin_xxd> list = new ArrayList<Admin_xxd>();
		try{
   
   
			Connection conn = DButil_xxd.getConn();
			String query_adm="select * from T_Admin_xxd";
			Statement stmt = conn.createStatement();
			ResultSet rs = stmt.executeQuery(query_adm);
			while(rs.next()){
   
   
				Admin_xxd a = new Admin_xxd(rs.getLong(1),rs.getString(2),rs.getString(3));
				list.add(a);
			}
		}catch (Exception e){
   
   
			e.printStackTrace();
		}
		return list;
	}
}

2.其次是AdminDaoImpl.java代码(管理员实现类)

package com.xxd.DaoImpl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com.xxd.Dao.AdminDao_xxd;
import com.xxd.entity.Admin_xxd;
import com.xxd.entity.Student_xxd;
import com.xxd.util.DButil_xxd;

public class AdminDaoImpl_xxd implements AdminDao_xxd{
   
   
	//添加管理员
	public int insertAdmin_xxd(Admin_xxd a) {
   
   
		int x = 0;
		try{
   
   
//			System.out.println("insertAdmin");
			Connection conn = DButil_xxd.getConn();
			String insert_sql = "insert into T_Admin_xxd values(?,?)";
			PreparedStatement ps = conn.prepareStatement(insert_sql);
			ps.setString(1, a.getUseName_xxd());
			ps.setString(2, a.getPwd_xxd());
			x = ps.executeUpdate();
		}catch(Exception e){
   
   
			e.printStackTrace();
		}
		return x;
	}
	//通过管理员的用户名进行查询操作
	public List<Admin_xxd> queryStuByuseName(String useName_xxd) {
   
   
		List<Admin_xxd> list = new ArrayList<Admin_xxd>();
		try {
   
   
			Connection conn = DButil_xxd.getConn();
			String query_str = "select * from T_Admin_xxd where useName_xxd like '%'+?+'%'";
			PreparedStatement ps = conn.prepareStatement(query_str);
			ps.setString(1, useName_xxd);
			ResultSet rs = ps.executeQuery();
			while (rs.next()) {
   
   
				Admin_xxd a = new Admin_xxd(rs.getLong(1), useName_xxd,rs.getString(3));
				list.add(a);
			}
		} catch (Exception e) {
   
   
			e.printStackTrace();
		}
		return list;
	}
	//通过管理员id查询管理员信息
	@Override
	public List<Admin_xxd> queryStuByAid(long Aid_xxd) {
   
   
		List<Admin_xxd> list = new ArrayList<Admin_xxd>();
		try {
   
   
			Connection conn = DButil_xxd.getConn();
			String query_str = "select * from T_Admin_xxd where Aid_xxd=?";
			PreparedStatement ps = conn.prepareStatement(query_str);
			ps.setLong(1, Aid_xxd);
			ResultSet rs = ps.executeQuery();
			while (rs.next()) {
   
   
				Admin_xxd a = new Admin_xxd(Aid_xxd, rs.getString(2),rs.getString(3));
				list.add(a);
			}
		} catch (Exception e) {
   
   
			e.printStackTrace();
		}
		return list;
	}
	//进行修改管理员信息操作
	public int updateAdminInfoBySup(Admin_xxd admin) {
   
   
		int x = 0;
		try {
   
   
			Connection conn = DButil_xxd.getConn();
			String updateAdmin_sql = "update T_Admin_xxd set useName_xxd=?,pwd_xxd=? where Aid_xxd=?";
			Admin_xxd a = admin;
			PreparedStatement ps = conn.prepareStatement(updateAdmin_sql);
			ps.setString(1, a.getUseName_xxd());
			ps.setString(2, a.getPwd_xxd());
			ps.setLong(3, a.getAid_xxd());
			x = ps.executeUpdate();
		} catch (Exception e) {
   
   
			e.printStackTrace();
		}
		return x;
	}

	//查看用户名是否存在
	@Override
	public int checkuseNameIsExist(String useName_xxd) {
   
   
		int x = 0 ;
		try{
   
   
//			System.out.println("checkusename");
			Connection conn = DButil_xxd.
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值