Java项目实战:ATM系统


前言

需求:模拟ATM系统

一、系统构架搭建、欢迎页设计

分析:
1、定义一个账户类Account,至少需要包含(卡号、姓名、性别、密码、余额、每次取现额度)
2、定义一个ATM类,用来代表ATM系统,负责提供所有的业务需求,比如:展示ATM系统的系统欢迎页、开通账户、转账
3、定义一个测试类Demo,负责对我们开发的ATM系统进行测试

系统欢迎页设计

在ATM类中设计一个方法start(),方法里面负责展示欢迎界面

展示页面功能部分代码

    //展示页面
    public void start(){
        while (true) {
            System.out.println("=========ATM系统=========");
            System.out.println("1、用户登录");
            System.out.println("2、用户开户");
            System.out.println("请选择您要操作的命令");
            String command = sc.next();

            switch (command){
                //用户登录
                case "1":

                    break;
                //用户开户
                case "2":

                    break;
                default:
                    System.out.println("命令错误,请重新输入");
            }
        }
    }

二、开户功能实现

用户开户功能

分析:
1、定义一个开户方法:creatAccount
2、在方法里创建一个Account账户对象,负责封装用户的账户信息(姓名、性别、密码、卡号等)
3、卡号需要由系统自动生成(卡号要求是8位数字,且不能重复)
4、把账户对象存入到账户集合中去
5、提示开户成功

用户开户功能部分代码

    //用户开户
    private void creatAccount(){
        //1、创建一个Account对象
        Account account = new Account();

        System.out.println("++++++++++系统开户操作++++++++++");

        //2、输入用户的开户信息,赋值给账户对象
        System.out.println("请输入用户名");
        String name = sc.next();
        //将信息存入account中
        account.setUserName(name);

        //3、存入用户性别
        while (true) {
            System.out.println("请输入性别男/女");
            char sex = sc.next().charAt(0); // 获取一串字符串,提取第一个字符
            //判断
            if(sex == '男' || sex == '女'){
                account.setSex(sex);        //将信息存入account中
                break;
            }else{
                System.out.println("性别有误,请重新输入男/女");
            }
        }

        //两次确认用户密码,并存入密码
        while (true) {
            System.out.println("请输入您的账户密码");
            String userPassWord = sc.next();
            System.out.println("请输入您的确认密码");
            String okUserPassWord = sc.next();
            if(userPassWord.equals(okUserPassWord)){
                account.setPassWord(userPassWord);  //将信息存入account中
                break;
            }else{
                System.out.println("两次密码不一样,请重新输入");
            }
        }

        //用户取现额度
        while (true) {
            System.out.println("请输入账户限额");
            double limit1 = sc.nextDouble();
            if(limit1 >= 0) {
                account.setLimit(limit1);
                break;
            }else{
                System.out.println("取现额度非法,请重新设置取现额度");
            }
        }

        //自动为用户生成一个8位的卡号且卡号不能重复



        //3、把Account对象存入ATM集合中去
        accounts.add(account);

        System.out.println("恭喜您," + account.getUserName() + "开户成功,您的卡号是:" + account.getIdCard());
    }

为新开户的账号生成一个新卡号

需求:
1、新卡号要求是一个8位的数字,且不能与其他账户对象的卡号重复
2、新卡号得到后,需要赋值给当前账户对象

系统随机生成卡号部分代码

    //返回一个八位数字的卡号,且不能重复
    private String creatIdCard(){
        Random r = new Random();

        while (true) {
            String IdCard = "";

            for(int i = 0 ; i < 8 ; i++){
                int data = r.nextInt(10);
                IdCard += data;
            }

            //根据卡号查找用户,找到重新生成,查无此人存入account对象中
            Account acc = getAccountByCardId(IdCard);
            if(acc == null){
                // 查无此人,随机生成的号码可以使用,返回生成的卡号
                return IdCard;
            }
        }
    }

    //根据卡号查找用户
    private Account getAccountByCardId(String idCard){
        Account account = new Account();

        //获取集合对象中idCard的值
        for(int i = 0 ; i < accounts.size() ; i++){
            account = accounts.get(i);
            if(account.getIdCard().equals(idCard)){
                return account;
            }
        }
        return null; // 查无此人
    }

三、登录功能实现


登录功能实现部分代码

    //用户登录
    private void login(){
        Scanner sc = new Scanner(System.in);
        String okPassWord = "";

        System.out.println("++++++++++系统登录操作++++++++++");
        if(accounts.size() == 0){
            //系统中一个用户都没有
            System.out.println("系统中没有用户,请先开户");
            return;
        }

        //系统中有用户
        Account acc = null;
        while (true) {
            System.out.println("输入登录卡号:");
            String idCard = sc.next();

            //调用卡号查找用户功能
            acc = getAccountByCardId(idCard);
            if(acc == null){
                System.out.println("卡号错误,请重新输入");
                return;
            }
            //卡号正确,获取用户密码
            okPassWord = acc.getPassWord();
            break; // 结束循环
        }

        while (true) {
            System.out.println("输入账户密码:");
            String passWord = sc.next();
            if(passWord.equals(okPassWord)){
                System.out.println("登录成功");
                //卡号密码验证通过,进入系统操作页面



                break;
            }else{
                System.out.println("密码错误,请重新输入");
            }
        }

    }

四、操作页展示、查询账户、退出账户

操作页设计、查询账户、退出账户功能

操作页面设计部分代码

//展示系统操作页面
    private void showUserCommand(Account account){
        Scanner sc = new Scanner(System.in);

        while (true) {
            System.out.println("++++++++++系统操作页面++++++++++");
            System.out.println("欢迎" + account.getUserName() + ",您可以办理一下业务:");
            System.out.println("1、查询账户");
            System.out.println("2、存款");
            System.out.println("3、取款");
            System.out.println("4、转账");
            System.out.println("5、修改密码");
            System.out.println("6、退出");
            System.out.println("7、注销账户");
            System.out.println("请选择您要进行的操作:");

            int command = sc.nextInt();
            switch (command){
                case 1:
                    //查询账户
                    showLoginAccount();
                    break;
                case 2:
                    //存款

                    break;
                case 3:
                    //取款

                    break;
                case 4:
                    //转账

                    break;
                case 5:
                    //修改密码

                    break;
                case 6:
                    //退出
                    System.out.println(acc.getUserName() + "退出操作系统");
                    return; //结束当前方法 AAAAAAAAAAAAAAAAAAAA
                case 7:
                    //注销账户

                    break;
                default:
                    System.out.println("非法操作");
            }
        }

    }

查询账户部分代码

    //展示登录后的查询信息功能
    private void showLoginAccount(){
        System.out.println("++++++++++ 当前您的账户信息如下: ++++++++++");
        System.out.println("卡号" + acc.getIdCard());
        System.out.println("户主" + acc.getUserName());
        System.out.println("性别" + acc.getSex());
        System.out.println("余额" + acc.getMoney());
        System.out.println("每次取现额度" + acc.getLimit());
    }

退出账户功能部分代码

                case 6:
                    //退出
                    System.out.println(acc.getUserName() + "退出操作系统");
                    return; //结束当前方法 AAAAAAAAAAAAAAAAAAAA

五、存款、取款功能实现

分析


取款功能部分代码

    //展示登录后的取款功能
    private void drawMoney(){
        while (true) {
            System.out.println("==取款操作==");
            //账户余额>=100,才可以取款
            if(acc.getMoney() >= 100){
                System.out.println("取款金额:");
                double money = sc.nextDouble();

                // 判断取款金额是否大于账户余额,取款金额不能大于当次取款限额
                if(acc.getMoney() >= money){

                    if(money <= acc.getLimit()) {
                        //更新当前登录的账户余额
                        acc.setMoney(acc.getMoney() - money);
                        System.out.println("取款成功," + "当前余额:" + acc.getMoney());
                        break; //结束当前循环   BBBBBBBBBBBBBBBBBB
                    }else{
                        System.out.println("取款金额大于当次取款限额,无法取款" + "当前取款限额:" + acc.getLimit());
                    }
                }else{
                    System.out.println("您的余额小于取款金额" + "当前余额:" + acc.getMoney());
                }
            }else{
                System.out.println("您的余额不足100,无法操作" + "当前余额:" + acc.getMoney());
                return;
            }
        }
    }

存款功能部分代码

    //展示登陆后的存款功能
    private void depositMoney(){
        System.out.println("==存钱操作==");
        System.out.println("存款金额:");
        double money = sc.nextDouble();

        //更新当前登录的账户余额
        acc.setMoney(acc.getMoney() + money);
        System.out.println("存钱成功," + "当前余额:" + acc.getMoney());
    }

六、转账功能实现

分析

转账功能部分代码

//展示登录后的转账功能
    private void transferMoney(){
        System.out.println("==用户转账操作==");
        //判断当前系统用户是否大于2
        if(accounts.size() < 2){
            System.out.println("当前系统只有一个账户,无法进行转账");
            return;
        }

        //判断账户中是否有钱
        if(acc.getMoney() == 0){
            System.out.println("账户余额不足");
            return;
        }

        //开始转账
        while (true) {
            System.out.println("请输入对方卡号");
            String id = sc.next();

            //判断卡号是否存在
            Account ac = getAccountByCardId(id);
            if(ac == null){
                System.out.println("对方卡号不存在,退出转账服务");
                return;
            }else{
                //对方账户存在,认证对方户主的姓氏
                String name = "*" + ac.getUserName().substring(1); //前面加一个*,先获取用户名,然后调用String方法,从第二个字符开始截取
                System.out.println("请您输入" + name + "姓氏");
                String okName = sc.next();
                //判断姓氏是否正确
                if(ac.getUserName().startsWith(okName)){
                    while (true) {
                        //认证通过
                        System.out.println("请您输入转账给对方的金额:");
                        double money = sc.nextDouble();
                        // 判断金额是否没有超过自己的金额
                        if(acc.getMoney() >= money){
                            if(money <= acc.getLimit()){
                                //转账操作,本人账户情况
                                acc.setMoney(acc.getMoney() - money);

                                //对方账户情况
                                ac.setMoney(ac.getMoney() + money);
                                return; // 结束当前方法 CCCCCCCCCCCCCCCCCCC
                            }else{
                                System.out.println("当次转账金额大于限制金额,请重新转账" + "当前账户限制金额:" + acc.getLimit() );
                            }
                        }else{
                            System.out.println("余额不足,无法转账给对方");
                        }
                    }
                }else{
                    System.out.println("认证姓氏有问题,请重新输入");
                }
            }
        }
    }

七、销户功能实现

分析

销户功能部分代码

    //展示登陆后的销户操作
    private boolean deleteAccount(){
        boolean rs = false;
        System.out.println("==销户操作==");
        //判断当前用户是否还有余额
        if(acc.getMoney() != 0){
            System.out.println("当前账号剩余余额:" + acc.getMoney() + "无法销户");
            return rs;
        }else{
            System.out.println("请问你是否要销户y/n:");
            String command = sc.next();
            switch (command){
                case "y":
                    //二次确认销户
                    rs = true;
                    accounts.remove(acc);
                    System.out.println("销户成功");
                    return rs;
                case "n":
                    //取消销户
                    return rs;
                default:
                    System.out.println("非法操作");
            }

            return rs;
        }
    }

八、用户密码修改

分析

用户密码修改部分代码

    //展示登录后的密码修改操作
    private void updatePassWord(){
        while (true) {
            System.out.println("==修改密码操作==");
            System.out.println("请您输入当前密码:");

            String nowPassWord = sc.next();
            //如果当前密码正确,进行修改
            if(nowPassWord.equals(acc.getPassWord())){
                System.out.println("请输入新的密码:");
                String passWord1 = sc.next();
                System.out.println("二次确认新密码:");
                String passWord2 = sc.next();

                if(passWord2.equals(passWord1)){
                    //替换原来密码,并回到欢迎界面
                    acc.setPassWord(passWord1); //赋值给当前对象密码
                    System.out.println("修改密码成功");
                    return;
                }else{
                    System.out.println("两次密码输入错误");
                }
            }else{
                System.out.println("当前密码错误,请重新输入");
            }
        }
    }

ATM.java

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

public class ATM {
    //存储Account对象
    private ArrayList<Account> accounts = new ArrayList<>();

    //记住登录后的用户账户
    private Account acc = null;

    Scanner sc = new Scanner(System.in);


    //展示页面
    public void start(){
        while (true) {
            System.out.println("=========ATM系统=========");
            System.out.println("1、用户登录");
            System.out.println("2、用户开户");
            System.out.println("请选择您要操作的命令");
            String command = sc.next();

            switch (command){
                //用户登录
                case "1":
                    login(); // AAAAAAAAAAAAAAAAAAA
                    break;
                //用户开户
                case "2":
                    creatAccount();
                    break;
                default:
                    System.out.println("命令错误,请重新输入");
            }
        }
    }

    //用户登录
    private void login(){
        Scanner sc = new Scanner(System.in);
        String okPassWord = "";

        System.out.println("++++++++++系统登录操作++++++++++");
        if(accounts.size() == 0){
            //系统中一个用户都没有
            System.out.println("系统中没有用户,请先开户");
            return;
        }

        //系统中有用户
        while (true) {
            System.out.println("输入登录卡号:");
            String idCard = sc.next();

            //调用卡号查找用户功能
            acc = getAccountByCardId(idCard);
            if(acc == null){
                System.out.println("卡号错误,请重新输入");
                return;
            }

            //卡号正确,获取用户密码
            okPassWord = acc.getPassWord();
            System.out.println("输入账户密码:");
            String passWord = sc.next();
            if(passWord.equals(okPassWord)){
                System.out.println("登录成功");
                //卡号密码验证通过,进入系统操作页面
                showUserCommand(acc);
                return; //跳出并结束当前方法,返回登录界面  AAAAAAAAAAAAA
            }else{
                System.out.println("密码错误,请重新输入");
            }
        }

    }

    //用户开户
    private void creatAccount(){
        //1、创建一个Account对象
        Account account = new Account();

        System.out.println("++++++++++系统开户操作++++++++++");

        //2、输入用户的开户信息,赋值给账户对象
        System.out.println("请输入用户名");
        String name = sc.next();
        //将信息存入account中
        account.setUserName(name);

        //3、存入用户性别
        while (true) {
            System.out.println("请输入性别男/女");
            char sex = sc.next().charAt(0); // 获取一串字符串,提取第一个字符
            //判断
            if(sex == '男' || sex == '女'){
                account.setSex(sex);        //将信息存入account中
                break;
            }else{
                System.out.println("性别有误,请重新输入男/女");
            }
        }

        //两次确认用户密码,并存入密码
        while (true) {
            System.out.println("请输入您的账户密码");
            String userPassWord = sc.next();
            System.out.println("请输入您的确认密码");
            String okUserPassWord = sc.next();
            if(userPassWord.equals(okUserPassWord)){
                account.setPassWord(userPassWord);  //将信息存入account中
                break;
            }else{
                System.out.println("两次密码不一样,请重新输入");
            }
        }

        //用户取现额度
        while (true) {
            System.out.println("请输入账户限额");
            double limit1 = sc.nextDouble();
            if(limit1 >= 0) {
                account.setLimit(limit1);
                break;
            }else{
                System.out.println("取现额度非法,请重新设置取现额度");
            }
        }

        //自动为用户生成一个8位的卡号且卡号不能重复
        String id = creatIdCard();
        //将卡号存入对象中
        account.setIdCard(id);

        //3、把Account对象存入ATM集合中去
        accounts.add(account);

        System.out.println("恭喜您," + account.getUserName() + "开户成功,您的卡号是:" + account.getIdCard());
    }

    //返回一个八位数字的卡号,且不能重复
    private String creatIdCard(){
        Random r = new Random();

        while (true) {
            String IdCard = "";

            for(int i = 0 ; i < 8 ; i++){
                int data = r.nextInt(10);
                IdCard += data;
            }

            //根据卡号查找用户,找到重新生成,查无此人存入account对象中
            Account acc = getAccountByCardId(IdCard);
            if(acc == null){
                // 查无此人,随机生成的号码可以使用,返回生成的卡号
                return IdCard;
            }
        }
    }

    //根据卡号查找用户
    private Account getAccountByCardId(String idCard){
        Account account = new Account();

        //获取集合对象中idCard的值
        for(int i = 0 ; i < accounts.size() ; i++){
            account = accounts.get(i);
            if(account.getIdCard().equals(idCard)){
                return account;
            }
        }
        return null; // 查无此人
    }


    //展示系统操作页面
    private void showUserCommand(Account account){
        Scanner sc = new Scanner(System.in);

        while (true) {
            System.out.println("++++++++++系统操作页面++++++++++");
            System.out.println("欢迎" + account.getUserName() + ",您可以办理一下业务:");
            System.out.println("1、查询账户");
            System.out.println("2、存款");
            System.out.println("3、取款");
            System.out.println("4、转账");
            System.out.println("5、修改密码");
            System.out.println("6、退出");
            System.out.println("7、注销账户");
            System.out.println("请选择您要进行的操作:");

            int command = sc.nextInt();
            switch (command){
                case 1:
                    //查询账户
                    showLoginAccount();
                    break;
                case 2:
                    //存款
                    depositMoney();
                    break;
                case 3:
                    //取款
                    drawMoney(); // BBBBBBBBBBBBBBBBBBBBBBB
                    break;
                case 4:
                    //转账
                    transferMoney();  // CCCCCCCCCCCCCCCCC
                    break;
                case 5:
                    //修改密码
                    updatePassWord();
                    return; // 结束当前方法
                case 6:
                    //退出
                    System.out.println(acc.getUserName() + "退出操作系统");
                    return; //结束当前方法 AAAAAAAAAAAAAAAAAAAA
                case 7:
                    //注销账户
                    boolean rs = deleteAccount();
                    if(rs){
                        //rs为true,销户成功,回到欢迎页
                        return;
                    }else {
                        // rs为false,销户失败
                        break;
                    }
                default:
                    System.out.println("非法操作");
            }
        }

    }

    //展示登录后的查询信息功能
    private void showLoginAccount(){
        System.out.println("++++++++++ 当前您的账户信息如下: ++++++++++");
        System.out.println("卡号:" + acc.getIdCard());
        System.out.println("户主:" + acc.getUserName());
        System.out.println("性别:" + acc.getSex());
        System.out.println("余额:" + acc.getMoney());
        System.out.println("每次取现额度:" + acc.getLimit());
    }

    //展示登陆后的存款功能
    private void depositMoney(){
        System.out.println("==存钱操作==");
        System.out.println("存款金额:");
        double money = sc.nextDouble();

        //更新当前登录的账户余额
        acc.setMoney(acc.getMoney() + money);
        System.out.println("存钱成功," + "当前余额:" + acc.getMoney());
    }

    //展示登录后的取款功能
    private void drawMoney(){
        while (true) {
            System.out.println("==取款操作==");
            //账户余额>=100,才可以取款
            if(acc.getMoney() >= 100){
                System.out.println("取款金额:");
                double money = sc.nextDouble();

                // 判断取款金额是否大于账户余额,取款金额不能大于当次取款限额
                if(acc.getMoney() >= money){

                    if(money <= acc.getLimit()) {
                        //更新当前登录的账户余额
                        acc.setMoney(acc.getMoney() - money);
                        System.out.println("取款成功," + "当前余额:" + acc.getMoney());
                        break; //结束当前循环   BBBBBBBBBBBBBBBBBB
                    }else{
                        System.out.println("取款金额大于当次取款限额,无法取款" + "当前取款限额:" + acc.getLimit());
                    }
                }else{
                    System.out.println("您的余额小于取款金额" + "当前余额:" + acc.getMoney());
                }
            }else{
                System.out.println("您的余额不足100,无法操作" + "当前余额:" + acc.getMoney());
                return;
            }
        }
    }

    //展示登录后的转账功能
    private void transferMoney(){
        System.out.println("==用户转账操作==");
        //判断当前系统用户是否大于2
        if(accounts.size() < 2){
            System.out.println("当前系统只有一个账户,无法进行转账");
            return;
        }

        //判断账户中是否有钱
        if(acc.getMoney() == 0){
            System.out.println("账户余额不足");
            return;
        }

        //开始转账
        while (true) {
            System.out.println("请输入对方卡号");
            String id = sc.next();

            //判断卡号是否存在
            Account ac = getAccountByCardId(id);
            if(ac == null){
                System.out.println("对方卡号不存在,退出转账服务");
                return;
            }else{
                //对方账户存在,认证对方户主的姓氏
                String name = "*" + ac.getUserName().substring(1); //前面加一个*,先获取用户名,然后调用String方法,从第二个字符开始截取
                System.out.println("请您输入" + name + "姓氏");
                String okName = sc.next();
                //判断姓氏是否正确
                if(ac.getUserName().startsWith(okName)){
                    while (true) {
                        //认证通过
                        System.out.println("请您输入转账给对方的金额:");
                        double money = sc.nextDouble();
                        // 判断金额是否没有超过自己的金额
                        if(acc.getMoney() >= money){
                            if(money <= acc.getLimit()){
                                //转账操作,本人账户情况
                                acc.setMoney(acc.getMoney() - money);

                                //对方账户情况
                                ac.setMoney(ac.getMoney() + money);
                                return; // 结束当前方法 CCCCCCCCCCCCCCCCCCC
                            }else{
                                System.out.println("当次转账金额大于限制金额,请重新转账" + "当前账户限制金额:" + acc.getLimit() );
                            }
                        }else{
                            System.out.println("余额不足,无法转账给对方");
                        }
                    }
                }else{
                    System.out.println("认证姓氏有问题,请重新输入");
                }
            }
        }
    }

    //展示登陆后的销户操作
    private boolean deleteAccount(){
        boolean rs = false;
        System.out.println("==销户操作==");
        //判断当前用户是否还有余额
        if(acc.getMoney() != 0){
            System.out.println("当前账号剩余余额:" + acc.getMoney() + "无法销户");
            return rs;
        }else{
            System.out.println("请问你是否要销户y/n:");
            String command = sc.next();
            switch (command){
                case "y":
                    //二次确认销户
                    rs = true;
                    accounts.remove(acc);// 从集合中移除当前登录账户的对象
                    System.out.println("销户成功");
                    return rs;
                case "n":
                    //取消销户
                    return rs;
                default:
                    System.out.println("非法操作");
            }

            return rs;
        }
    }

    //展示登录后的密码修改操作
    private void updatePassWord(){
        while (true) {
            System.out.println("==修改密码操作==");
            System.out.println("请您输入当前密码:");

            String nowPassWord = sc.next();
            //如果当前密码正确,进行修改
            if(nowPassWord.equals(acc.getPassWord())){
                System.out.println("请输入新的密码:");
                String passWord1 = sc.next();
                System.out.println("二次确认新密码:");
                String passWord2 = sc.next();

                if(passWord2.equals(passWord1)){
                    //替换原来密码,并回到欢迎界面
                    acc.setPassWord(passWord1); //赋值给当前对象密码
                    System.out.println("修改密码成功");
                    return;
                }else{
                    System.out.println("两次密码输入错误");
                }
            }else{
                System.out.println("当前密码错误,请重新输入");
            }
        }
    }

}

Demo.java

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

public class Demo {
    public static void main(String[] args) {
        ATM atm = new ATM();
        //ATM页面
        atm.start();

        /*
        账户1:                    账户2:
        申                           深
        男                           男
        111111                      222222
        5000                        0.0
        限制金额:
        2000                        2000
         */

    }
}

Account.java

public class Account {

    //卡号
    private String idCard;
    //用户名
    private String userName;
    //性别
    private char sex;
    //密码
    private String passWord;
    //余额
    private double money;
    //限额
    private double limit;

    //构造器
    public Account(String idCard, String userName, char sex, String passWord, double money, double limit) {
        this.idCard = idCard;
        this.userName = userName;
        this.sex = sex;
        this.passWord = passWord;
        this.money = money;
        this.limit = limit;
    }

    public Account() {
    }

    public String getIdCard() {
        return idCard;
    }

    public void setIdCard(String idCard) {
        this.idCard = idCard;
    }

    public String getUserName() {
        return userName + (sex == '男' ? "先生" : "女士");
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

    public double getLimit() {
        return limit;
    }

    public void setLimit(double limit) {
        this.limit = limit;
    }
}

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值