学生管理系统升级版

文章精华

 ctrl+alt+t包围代码显示循环

ctrl+/单行注释

ctrl+shift+/多行注释


目录

文章精华

学生管理系统升级版

需求:

分析:

登录界面:

用户类:

注册功能:

登录功能:

忘记密码:

验证码规则:

开始缕思路

一.注册界面

代码思路:

第一段思路

第二段思路

第三段思路

第四段思路

二.登录界面

代码思路

录入:

验证:

三.忘记密码界面

代码思路

开始撸代码

注册界面 

注意点:

开发细节

但是这种方法中一个循环会调用两次方法大大降低了代码的效率

所以我们可以把username.length先拿到外面定义一下

录入密码

录入身份证号码

录入手机号

登陆界面

忘记密码界面

全部代码展示

app.java

Studentsystem.java

User1.java

霞宝们再见


学生管理系统升级版

需求:

​ 为学生管理系统书写一个登陆、注册、忘记密码的功能。

​ 只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。

分析:

登录界面:

System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作1登录 2注册 3忘记密码");

用户类:

​ 属性:用户名、密码、身份证号码、手机号码

注册功能:

​ 1,用户名需要满足以下要求:

​ 验证要求:

​ 用户名唯一

​ 用户名长度必须在3~15位之间

​ 只能是字母加数字的组合,但是不能是纯数字

​ 2,密码键盘输入两次,两次一致才可以进行注册。

​ 3,身份证号码需要验证。

​ 验证要求:

​ 长度为18位

​ 不能以0为开头

​ 前17位,必须都是数字

​ 最为一位可以是数字,也可以是大写X或小写x

​ 4,手机号验证。

​ 验证要求:

​ 长度为11位

​ 不能以0为开头

​ 必须都是数字

登录功能:

​ 1,键盘录入用户名

​ 2,键盘录入密码

​ 3,键盘录入验证码

验证要求:

​ 用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册

​ 判断验证码是否正确,如不正确,重新输入

​ 再判断用户名和密码是否正确,有3次机会

忘记密码:

​ 1,键盘录入用户名,判断当前用户名是否存在,如不存在,直接结束方法,并提示:未注册

​ 2,键盘录入身份证号码和手机号码

​ 3,判断当前用户的身份证号码和手机号码是否一致,

​ 如果一致,则提示输入密码,进行修改。

​ 如果不一致,则提示:账号信息不匹配,修改失败。

验证码规则:

​ 长度为5

​ 由4位大写或者小写字母和1位数字组成,同一个字母可重复

​ 数字可以出现在任意位置

比如:

​ aQa1K

开始缕思路

一.注册界面

代码思路:

第一段思路

和之前一样登录界面的话需要用户去选择登陆注册忘记密码的选项所以要用一个swith方法 在每个case里面的话需要定义一个方法 顺序是先写注册然后写登录最后写忘记密码

注册界面的需求文档中的要求有四个 

键盘输入的话先去用Scanner去录入用户名

然后要判断是否用户名存在 所以可以使用contains或者getIndex方法 

用户名的长度要求的话需要去用字符串的length方法去判断

用户名的规范要求的话需要先去挨个获取用户名的每一个字符

如果有一个字符不在a-z,A-Z,0-9则不符合条件

统计一下用户名的字符在其中的个数只有满足大于等于0才满足要求的用户名

第二段思路

用scanner方法输入两次密码 再将两次输入的密码进行==如果不相等的话不符合要求

第三段思路

先用scanner方法获取身份证号码

用length方法去看长度是否满足18位

用charAt方法获取第一个字符是否“0”是0的话不满足

遍历前17位,如果有一位不在0-9范围中不符合

获取最后一个字符如果这个字符在0-9之间或xX就满足

第四段思路

键盘录入手机号码

调用length方法获取长度判断是否为11位

charAt获取第一个字符不可以为0

遍历全部手机号如果有一个字符不在0-9之间则不满足

最后得到了符合要求的条件

创建User u=new User(都传进来);

list.add(u);

二.登录界面

代码思路

录入:

首先键盘录入用户名 密码 验证码

但是在验证码的时候你得先获取一个验证码然后再去录入

验证:

1.先判断用户名是否存在 不存在提示未注册

2.将输入的密码和集合中的密码进行比较看密码是否正确

如果正确登录成功 如果不正确的话提示有三次机会

三.忘记密码界面

代码思路

首先键盘录入用户名,判断是否存在 不存在提示用户未注册 直接跳出到注册界面

当代码到第二个需求的时候证明用户名存在 

此时键盘输入身份证号码和手机号

判断身份证号和手机号是否正确 如果错误提示失败

正确的话直接输入密码.

开始撸代码

注册界面 

注意点:

在开始的时候 用户选择了1234系统会直接退出 所以我们要用ctrl+alt+t用一个while循环去包围住这段代码

然后在退出的时候 使用的代码是system.exit(0);(并且要注意case中语句体有多行要有{})

紧接着把挨个登陆注册忘记密码都写一个方法

我们可以直接在case语句1那里直接写login()然后用鼠标点击爆红的单词用alt加回车

接着的话我们需要想到注册需要去用一个容器去存   这边的话就用ArrayList集合

但是集合的创建不能去写到方法里面 因为login要用的话就不可以了

所以写道外面并且在每个方法和case语句中都让去接受到

 ArrayList<User1> list=new ArrayList<>();

把用户信息放到用户对象中

先把用户对象加到集合中

在获取了用户名之后可以使用正则表达式

但是咱们从基础开始抓起

开发细节

我们先验证格式是否正确 再验证是否唯一因为以后的所有数据都是存在数据库中

我们先创建一个方法去验证格式

我们可能会采取这样的方法去验证

private static boolean checkUsername(String username) {
        if (username.length()<3||username.length()>15){
            return false;
        }
        
    }
但是这种方法中一个循环会调用两次方法大大降低了代码的效率
所以我们可以把username.length先拿到外面定义一下
 private static boolean checkUsername(String username) {
        int len=username.length();
        if (len<3||len>15){
            return false;
        }

    }

当通过上面的代码之后证明长度复合要求

继续校验:只能是用户加数字的组合

可以这样想:循环得到username的每一个字符然后有一个字母不符合要求返回false

在循环中可以用charAt方法去得到每一个字符

if判断

  if (!(c>='a'&&c<='z')||(c>='A'&&c<='Z') ||(c>='0'&&c<='9') ){
                return false;
            }

当代码执行到这里满足了长度和内容的校验只需要看是不是重数字的要求就ok

这样可以这样想 如果用户名中的字母大于0就满足条件

所以现在上面定义一个统计变量 int count=0;

int count=0;
        for (int i = 0; i < username.length(); i++) {
            char c = username.charAt(i);
            if ((c>='a'&&c<='z')||(c>='A'&&c<='z')) {
                count++;

            }
        }
        return count>0;

但是当我们查询到一个字母的时候就完全可以满足条件跳出循环了 所以只需要在count++后面跟上一个 break;就ok 可以提高代码的效率

我们cheakUsername就ok了 进入register方法中 if(flag)判断就ok

但是我们注册不可能只进行一次所以要用循环包裹起来

if (!flag1){
                System.out.println("格式不满足条件,需要重新录入:");
                continue;
            }else{

            }

我们将判断语句这样写!flag因为注册满足条件的话就不需要提示 不满足条件的话就进行提示 并continue返回到上面的那个循环中

判断用户名唯一是否就需要去拿着用户名去集合中看一下是否有重复的 就需要去创建一个方法flag2

我们在这个方法中先list.fori得到list集合中的每一个索引 但是索引对我们来说没有用

我们就需要就通过索引的get方法去拿到元素

录入密码

这边在一个方法中由于上面有

Scanner sc=new Scanner(System.in);

 下面所有代码的录入都只需要sc.next就ok

录入身份证号码

在提示输入身份证信息之后 创建一个方法checkPersonID

在这个方法中 写不能以0开头这个需求的时候 我们可以用PersonID.charAt(0)获取第一个字符

也可以用java提供的一个方法是PersonID.startWith(“0”)方法

如果是0开头返回true 我们用一个变量去接受 然后去判断

录入手机号

检查手机号 这个都是模板 前面全是false 当执行到最后一行就证明手机号满足 就返回true

当把录入全部完成之后开始把信息添加到用户对象中

用户对象添加到集合中 这样就注册成工了

为了检验是否注册成功 我们可以定义一个方法 去遍历集合

printlist(list);

    private static void printList(ArrayList<User1> list) {
        for (int i = 0; i < list.size(); i++) {
            User1 user1 = list.get(i);
            System.out.println(user1.getUsername()+","+user1.getPasssword()+","
                    +user1.getPersonID()+","+user1.getPhoneNumber());
        }
    }

登陆界面

首先的话先生成一个验证码 生成这个验证码的方法开头public和private都ok

这边集合的泛型里面要写字符也就是

  ArrayList<Character> list=new ArrayList<>();

循环中要这样获取字母

list.add((char)('a'+i));

i刚开始是0 a字符加0还是97强装成字符还是a

要验证这个方法是否可以用可以单独创建一个Test类去验证

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        getCode();
    }
        private static String getCode(){
            //生成一个验证码
            ArrayList<Character> list=new ArrayList<>();
            for (int i = 0; i < 26; i++) {
                list.add((char)('a'+i));
                list.add((char)('A'+i));

            }
            System.out.println(list);
            return "";
        }

    }

随机抽四个字符就是4.fori

获取随机的话用到了random r=new random();

然后获取随机索引 利用随即索引去获取字符 之后的需要去拼接 拼接的话利用我们之前学过的知识

StringBuilder

接着把一个数字添加到末尾 开始需求是数字可以出现在任意位置

如果我们要修改字符串的内容

先把字符串变成字符数组 在数组中修改 然后再去创建一个新的字符串

拿着最后一个索引,跟随机索引进行交换 最大索引指向的元素,跟随及索引指向的元素交换

这是Test生成验证码的代码展示

import java.util.ArrayList;
import java.util.Random;

public class Test {
    public static void main(String[] args) {
        System.out.println(getCode());;
    }
        private static String getCode(){
            //生成一个验证码
            ArrayList<Character> list=new ArrayList<>();
            for (int i = 0; i < 26; i++) {
                list.add((char)('a'+i));
                list.add((char)('A'+i));

            }
            StringBuilder sb=new StringBuilder();
            Random r=new Random();
            for (int i = 0; i < 4; i++) {
                int index = r.nextInt(list.size());
                char c  = list.get(index);
                sb.append(c);
            }
            //把随机数字加到末尾
            int number = r.nextInt(10);
            sb.append(number);
           
            char[] arr = sb.toString().toCharArray();
            int randomIndex = r.nextInt(arr.length);
            char temp=arr[randomIndex];
            arr[randomIndex]=arr[arr.length-1];
            arr[arr.length-1]=temp;
            return new String(arr);
        }

    }

紧接着做登录界面

在制作过程中需要去验证用户名和密码的正确性 所以要去创建一个方法 方法那边需要去接受用户名和密码作为形参 这边有封装思想

封装思想的应用:

我们可以把一些零散的数据分装成一个对象 这样以后传递参数的时候 只需要创建一个整体就可以了

如果用户输入三次错误密码之后用户名被锁定

忘记密码界面

//比较用户对象中的手机号和身份证号码是否相同
//先把用户对象获取出来

与登录成功界面进行衔接

全部代码展示

app.java

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class App {
    public static void main(String[] args) {
        ArrayList<User1> list=new ArrayList<>();
        Scanner sc=new Scanner(System.in);
        String username;
        String password;
        String personID;
        String phoneNumber;
        while (true) {
        System.out.println("欢迎来到学生管理系统");
        System.out.println("请选择您的操作:1.登录2.注册3.忘记密码4.退出");

        String choose = sc.next();

            switch (choose)
            {
                case"1"-> login(list);
                case"2"-> getRegister(list);
                case"3"-> forgetPassword(list);
                case"4"-> {System.out.println("谢谢使用再见");
                System.exit(0);}
                default -> System.out.println("没有这个选项");
            }
        }

    }

    private static void forgetPassword(ArrayList<User1> list) {
        Scanner sc=new Scanner(System.in);
        System.out.println("输入用户名");
        String username = sc.next();
        boolean flag=contains(list,username);
        if (!flag){
            System.out.println(username+"未注册,请先注册");
            return;
        }
        System.out.println("输入身份证");
        String personID = sc.next();
        System.out.println("手机号");
        String phoneNumber = sc.next();
        //比较用户对象中的手机号和身份证号码是否相同
        //先把用户对象获取出来
        int index=findIndex(list,username);
        User1 user1 = list.get(index);
        if (!(user1.getPersonID().equalsIgnoreCase(personID)&&user1.getPhoneNumber().equals(phoneNumber))){
            System.out.println("身份证号或手机号输入有误,不能改密码");
            return;
        }
        String password;
        while (true) {
            //代码到这里  可以直接修改
            System.out.println("输入新密码");
             password = sc.next();
            System.out.println("输入新密码再次");
            String againPassword = sc.next();
            if (password.equals(againPassword)){
                System.out.println("两次密码一致");
                break;
            }else{
                System.out.println("输入不一致");
                continue;
            }
        }
        //直接修改
        user1.setPasssword(password);
        System.out.println("密码修改成功");

    }

    private static int findIndex(ArrayList<User1> list, String username) {
        for (int i = 0; i < list.size(); i++) {
            User1 user1 = list.get(i);
            if (user1.getUsername().equals(username)){
                return i;
            }
        }
         return -1;
    }

    private static void getRegister(ArrayList<User1> list) {
       Scanner sc=new Scanner(System.in);
        String username;
        String passworsd;
        String personID;
        String phoneNumber;
        //录入用户名
        while (true) {
            System.out.println("输入用户名:");
            username= sc.next();
            boolean flag1=checkUsername(username);
            if (!flag1){
                System.out.println("格式不满足条件,需要重新录入:");
                continue;
            }else{
            boolean flag2=contains(list,username);
            if (flag2){
                //用户名已存在
                System.out.println("当前用户名已注册,请重新注册:");
            }else{
                //不存在,可以继续录入下面的数据
                System.out.println("用户名"+username+"可用");
                break;
            }

            }
        }
        //键盘录入密码
        while (true) {
            System.out.println("请输入要输入的密码:");
            passworsd = sc.next();
            System.out.println("请再次输入密码:");
            String againPasswoed = sc.next();
            if (!passworsd.equals(againPasswoed)){
                System.out.println("两次密码不一致请重新输入:");
                continue;
            }else{
                System.out.println("两次密码一致,请输入其他数据:");
                break;
            }
        }
        //键盘输入身份证号码
        while (true) {
            System.out.println("请输入您的身份证号码:");
             personID = sc.next();
            boolean flag=checkPersonID(personID);
            if (flag){
                System.out.println("身份证号码满足要求");
                break;
            }else{
                System.out.println("身份证号码不满足要求");
                continue;

            }
        }
        //录入手机号
        while (true) {
            System.out.println("输入您的手机号码:");
             phoneNumber = sc.next();
            boolean flag3=checkPhoneNumber(phoneNumber);
            if (flag3){
                System.out.println("手机号正确");
                break;
            }else {
                System.out.println("手机号错误,重新输入:");
                continue;
            }
        }
        //将信息添加到用户对象中
        User1 u=new User1(username,phoneNumber,passworsd,personID);
        list.add(u);
        System.out.println("注册成功");
        printList(list);
    }

    private static void printList(ArrayList<User1> list) {
        for (int i = 0; i < list.size(); i++) {
            User1 user1 = list.get(i);
            System.out.println(user1.getUsername()+","+user1.getPasssword()+","
                    +user1.getPersonID()+","+user1.getPhoneNumber());
        }
    }

    private static boolean checkPhoneNumber(String phoneNumber) {
        if (phoneNumber.length()!=11){
            return false;
        }
        if (phoneNumber.startsWith("0")){
            return false;
        }
        for (int i = 0; i < phoneNumber.length(); i++) {
            char c = phoneNumber.charAt(i);
            if (!(c>='0'&&c<='9')){
                return false;
            }
        }
        return true;
    }

    private static boolean checkPersonID(String personID) {
       if (personID.length()!=18){
           return false;
       }
        boolean flag = personID.startsWith("0");
        if (flag){
            //如果以0开头返回false
        return false;}
        for (int i = 0; i < personID.length()-1; i++) {
            char c = personID.charAt(i);
            if (!(c>='0'&&c<='9')){
                return false;
            }

        }
        char endChar = personID.charAt(personID.length() - 1);
        if ((endChar>='0'&&endChar<='9')||(endChar=='x')||(endChar=='X')){
            return true;
        }
        return false;
    }


    private static boolean contains(ArrayList<User1> list, String username) {
        for (int i = 0; i < list.size(); i++) {
            User1 user1 = list.get(i);
            String rightUsername = user1.getUsername();
            if (rightUsername.equals(username)){
                return true;
            }
        }
        //当循环结束了,表示集合里面的所有用户都比较完毕了,还没有一样的返回false
        return false;
    }

    private static boolean checkUsername(String username) {
        int len=username.length();
        if (len<3||len>15){
            return false;
        }
        for (int i = 0; i < username.length(); i++) {
            char c = username.charAt(i);
            if (!(c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')) {
                return false;
            }
        }
        int count=0;
        for (int i = 0; i < username.length(); i++) {
            char c = username.charAt(i);
            if ((c>='a'&&c<='z')||(c>='A'&&c<='z')) {
                count++;
                break;
            }
        }
        return count>0;



    }


    private static void login(ArrayList list) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String username = sc.next();
        //判断用户名是否存在
        boolean flag = contains(list, username);
        if (!flag) {
            System.out.println("用户名" + username + "未注册,请先注册");
            return;
        }

        System.out.println("输入密码");

        String password;
        while (true) {
            password = sc.next();
            String rightCode = getCode();
            System.out.println("当前正确验证码是" + rightCode);
            System.out.println("请输入验证码:");
            String code = sc.next();
            if (code.equalsIgnoreCase(rightCode)) {
                System.out.println("验证码正确");
                break;
            } else {
                System.out.println("验证码错误");
                continue;
            }
        }
        //封装思想
        User1 userInfo = new User1(username, password,null,null );
        boolean result=checkUserInFo(list,userInfo);
        if (result){
            System.out.println("登录成功");
            //创建对象调用方法,启动学生管理系统
            Studentsystem ss=new Studentsystem();
            ss.startStudentSystem();
        }else{
            System.out.println("登陆失败,用户名密码错误");
        }

    }

    private static boolean checkUserInFo(ArrayList<User1> list, User1 userInfo) {
        //遍历集合,判断用户是否存在,存在成果,不存在登录失败
        for (int i = 0; i < list.size(); i++) {
            User1 user1=list.get(i);
            if (user1.getUsername().equals(userInfo.getUsername())&&user1.getPasssword().equals(userInfo.getPasssword())){
            return  true;
            }
        }
        return false;
    }

    private static String getCode(){
        //生成一个验证码
        ArrayList<Character> list=new ArrayList<>();
        for (int i = 0; i < 26; i++) {
            list.add((char)('a'+i));
            list.add((char)('A'+i));

        }
        StringBuilder sb=new StringBuilder();
        Random r=new Random();
        for (int i = 0; i < 4; i++) {
            int index = r.nextInt(list.size());
            char c  = list.get(index);
            sb.append(c);
        }
        //把随机数字加到末尾
        int number = r.nextInt(10);
        sb.append(number);

        char[] arr = sb.toString().toCharArray();
        int randomIndex = r.nextInt(arr.length);
        char temp=arr[randomIndex];
        arr[randomIndex]=arr[arr.length-1];
        arr[arr.length-1]=temp;
        return new String(arr);
    }
}

Studentsystem.java

import java.util.ArrayList;
import java.util.Scanner;

public class Studentsystem {
    public static void startStudentSystem() {
        ArrayList<Student1> list = new ArrayList<>();
       loop: while (true) {
            System.out.println("欢迎来到管理系统");
            System.out.println("1:添加学生");
            System.out.println("2:删除学生");
            System.out.println("3:修改学生");
            System.out.println("4:查询学生");
            System.out.println("5:退出学生");
            System.out.println("请输入您的选择:");
            Scanner sc =new Scanner(System.in);
            String choose = sc.next();
            switch (choose){
                case "1"-> addStudent(list);
                case "2"-> deleteStudent(list);
                case "3"-> updateStudent(list);
                case "4"-> queryStudent(list);
                case "5"-> {
                    System.out.println("退出");
                    System.exit(0);
                }
                default -> System.out.println("没有这个选项");
            }
        }
    }
    public static void addStudent(ArrayList<Student1> list){
        Student1 stu=new Student1();
        Scanner sc=new Scanner(System.in);
        String id = null;
        while (true) {
            System.out.println("id");
            id = sc.next();
            boolean flag = contains(list, id);
            if (flag){
                //表示id已经存在
                //重新录入
                System.out.println("id存在重新录入");
            }else{
            //id不存在可以使用
                stu.setId(id);
                break;
            }
        }


        System.out.println("name");
        String name = sc.next();
        stu.setName(name);

        System.out.println("age");
        int age = sc.nextInt();
        stu.setAge(age);

        System.out.println("address");
        String address = sc.next();
        stu.setAddress(address);
        list.add(stu);
        //提示用户
        System.out.println("添加成功");

       // Student1 s=new Student1(id,name,age,address);
    }
    public static void deleteStudent(ArrayList<Student1> list){
        Scanner sc=new Scanner(System.in);
        System.out.println("要删除的id");
        String sid = sc.next();
        int index=getIndex(list,sid);
        if (index>=0){
            list.remove(index);
            System.out.println("id为"+sid+"的学生删除成功");
        }else {
            System.out.println("id不存在,删除失败");
        }
    }
    public static void updateStudent(ArrayList<Student1> list){
        Scanner sc=new Scanner(System.in);
        System.out.println("输入修改id");
        String id = sc.next();
        int index = getIndex(list, id);
        if (index==-1){
            System.out.println("要修改的id"+id+"不存在");
            return;
        }
        Student1 stu = list.get(index);
        System.out.println("输入修改的学生姓名:");
        String newName = sc.next();
        stu.setName(newName);
        System.out.println("输入修改的学生年龄:");
        int newAge = sc.nextInt();
        stu.setAge(newAge);
        System.out.println("输入修改的地址:");
        String newaddress = sc.next();
        stu.setAddress(newaddress);

    }
    public static void queryStudent(ArrayList<Student1> list){
        if (list.size()==0){
            System.out.println("无学生信息");
            //结束方法
            return;
        }
        System.out.println("id\t\t姓名\t年龄\t家庭住址");
        //当代码执行到这里 代表集合中有数据
        for (int i = 0; i < list.size(); i++) {
            Student1 stu = list.get(i);
            System.out.println(stu.getId()+"\t"+stu.getName()+"\t"+stu.getAge()+"\t"+stu.getAddress());
        }

    }
    //判断id在集合中是否存在
    public static boolean contains(ArrayList<Student1> list,String id) {
        for (int i = 0; i < list.size(); i++) {
            Student1 stu = list.get(i);
            String sid = stu.getId();
            if (sid.equals(id)) {
                return true;
            }
            }

        return false;

    }
    public static int getIndex(ArrayList<Student1> list,String id){
        for (int i = 0; i < list.size(); i++) {
            Student1 stu = list.get(i);
            String sid = stu.getId();
            if (sid.equals(id)){
                return i;
            }
        }
        return -1;
    }
}

User1.java

public class User1 {
    private String username;
    private String passsword;
    private String personID;
    private String phoneNumber;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPasssword() {
        return passsword;
    }

    public void setPasssword(String passsword) {
        this.passsword = passsword;
    }

    public String getPersonID() {
        return personID;
    }

    public void setPersonID(String personID) {
        this.personID = personID;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public User1(String username, String passsword, String personID, String phoneNumber) {
        this.username = username;
        this.passsword = passsword;
        this.personID = personID;
        this.phoneNumber = phoneNumber;
    }

    public User1() {
    }




}

全部手敲今天四点才写完

再见

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值