0
点赞
收藏
分享

微信扫一扫

Java中级(四):面向对象的封装

卿卿如梦 2022-03-24 阅读 35
java

一:面向对象的三大特征之一:封装 Encapsulation

//oop三大特征之一:封装
public class Encapsulation {
    public static void main(String[] args) {

        /*
        封装:尽可能隐藏对象内部实现细节,控制对象的修改以及访问的权限
        访问修饰符:private (可将属性修饰为私有,仅本类可见)
        私有的属性是不被外界的访问,外界访问只能访问公用方法
        这个时候只能提供公共的访问方法,以保证数据的正常输入
        命名规范:
           赋值:setXXX()  //使用的方法参数是实现赋值
           取值:getXXX()  //使用方法返回值现实取值
          get/set方法是外界访问对象私有属性的唯一通道,方法内部可对数据进行检测和过滤
         */
        Student student = new Student();
        student.name="李磊";
        //student.age=100;  运行会有提示是私有化 java: age 在 com.javastudy04.Student 中是 private 访问控制
        student.setAge(600); //在set方法中已经做了age的判断范围
        student.sex="人妖";
        student.score = 100.0;
        student.sayHello();

    }
}

class Student {
    String name;
    private int age;
    String  sex;
    double score;
    // private char gender; 私有属性在类的外部不可访问
    public  void sayHello(){
        System.out.println(
                "姓名:"+this.name+"\t"+
                "年龄:"+this.age+"\t"+
                "性别:"+this.sex+"\t"+
                "成绩:"+this.score
        );
    }
    public void setAge(int age){

        if (age>0 && age<=120){ //判断了范围
            this.age = age;
        }else{
            this.age = 18;
        }
    }
}

二:练习

public class Practice_01 {
    public static void main(String[] args) {
        /*
        实现银行功能
            用户输入正确的卡号和密码后取款以及一下操作
            菜单如下:1、存款 2、取款 3、转账 4、查询余额 5、修改密码 0、退出
         分析:
         User:(cardNo、identity、username、password、phone、balance)
         Bank类主要包含一下功能
            初始化用户(initial)
            用户登录(login)
            显示菜单(shoeMenu)
            存款(save)
            取款(withdraw)
            转帐(trans)
            查询余额(query)
            修改密码(modelPassword)
         */
        //用户初始化
        Bank bank = new Bank();
        bank.initial();
        bank.login();

    }
}

//银行类
class Bank {
    //把这些用户放到一个数组里面,保存用户数据
    private User[] users = new User[5]; //放了五个数据,数组的长度是5
    //保存数组里面的个数
    private int size;
    //用户输入
    Scanner input = new Scanner(System.in);

    //1、初始化方法
    public void initial() {
        //创建用户1
        User user1 = new User();
        user1.setCardNo("6565232135465123");
        user1.setIdentity("87945665465");
        user1.setUsername("小明");
        user1.setPassword("123456");
        user1.setPhone("123");
        user1.setBalance(1000);
        //创建用户2
        User user2 = new User("98798535513221", "789456131", "小红", "0123", "130", 10000);

        //将创建好的两个用户放入数组里面
        users[0] = user1;
        users[1] = user2;
        size = 2; //长度成为2
        System.out.println("用户初始化完成");
    }

    //2、用户登录

    public void login() {
        System.out.println("请输入卡号");
        String cardNo = input.next();
        System.out.println("请输入密码");
        String password = input.next();
        //遍历这个数组
        User u = null; //保存这个找到的用户
        for (int i = 0; i < size; i++) {
            if (users[i].getCardNo().equals(cardNo) && users[i].getPassword().equals(password)) {
                u = users[i];
                break;
            }
        }
        if (u != null) {
            //显示菜单并登录成功
            System.out.println("恭喜你登录成功");
            this.shoeMenu(u);
        } else {
            System.out.println("你输入的密码错误");
        }
    }

    //3、显示菜单
    public void shoeMenu(User u) { //登录成功的用户传输过来然后进入页面
        while (true) {
            System.out.println("=====欢迎来到乐客银行=========" + u.getCardNo() + "============");
            System.out.println("===1、存款 2、取款 3、转账 4、查询余额 5、修改密码 0、退出==");
            int choice = input.nextInt(); //用户输入的数字
            switch (choice) {
                case 1:
                    this.Save(u);
                    break;
                case 2:
                    this.withdraw(u);
                    break;
                case 3:
                    this.trans(u);
                    break;
                case 4:
                    this.query(u);
                    break;
                case 5:
                    this.modelPassword(u);
                    break;
                case 0:
                    return; //结束整个程序,之前有笔记,break结束本次循环
                default:
                    System.out.println("你输入的有误请重新输入");
            }
        }
    }

    //4、存钱
    public void Save(User u) { //登录进来传进来的这个人
        System.out.println("请输入存款金额");
        double m = input.nextDouble();
        //判断存钱的数值是否大于0
        if (m > 0) {
            u.setBalance(u.getBalance() + m);
            System.out.println("存钱成功" + u.getBalance());
        } else {
            System.out.println("存钱失败。请重新输入");
        }
    }

    //5、取钱
    public void withdraw(User u) {
        System.out.println("请输入取款金额");
        double m = input.nextDouble();
        //判断取得钱数是否大于原来的钱数
        if (0 < m) {
            if (m < u.getBalance()) {
                //double money = u.getBalance() - m;
                u.setBalance(u.getBalance() - m); //取出来的钱,剩下的相当于在放进去
                System.out.println("取钱成功" + u.getBalance());
            } else {
                System.out.println("余额不足");
            }
        } else {
            System.out.println("你输入的金额有误");
        }
    }

    //6、转账
    public void trans(User u) {
        System.out.println("请输入你要转账的账户");
        String cardNo = input.next();
        System.out.println("请输入转账金额");
        double m = input.nextDouble();
        //建立
        User toUser = null; //判断对方卡号是否存在
        for (int i = 0; i < size; size++) {
            if (users[i].getCardNo().equals(cardNo)) {
                toUser = users[i];
                break;
            }
        }
        //用户不为空
        if (toUser != null) { //存在对方的卡号
            if (u.getBalance() >= m) {
                //转账
                //扣钱
                u.setBalance(u.getBalance()-m);
                //加钱
                toUser.setBalance(toUser.getBalance()+m);
                System.out.println("恭喜你转账成功");
            }else{
                System.out.println("转账失败余额不足");
            }
        } else {
            System.out.println("对不起你输入的卡号不存在,请重新输入");
        }
    }
        //7、查询卡号
        public void query(User u){
            System.out.println(
                    "卡号:" + u.getCardNo() + "\t" +
                            "姓名:" + u.getUsername() + "\t" +
                            "余额:" + u.getBalance()
            );
        }

        //8、修改密码
        public void modelPassword (User u){
            System.out.println("请输入你的密码");
            String newPassword = input.next();
            if (newPassword.length() == 6) {
                u.setPassword(newPassword);
                System.out.println("恭喜你修改密码成功");
            } else {
                System.out.println("你输入的密码长度不符合标准");
            }
        }
    }


    //用户类
    class User {
        private String cardNo;      //卡号
        private String identity;    //身份证
        private String username;    //姓名
        private String password;    //密码
        private String phone;       //点话
        private double balance;     //余额

        //无参构造方法
        public User() {
        }

        //带参构造方法
        public User(String cardNo, String identity, String username, String password, String phone, double balance) {
            this.cardNo = cardNo;
            this.identity = identity;
            this.username = username;
            this.password = password;
            this.phone = phone;
            this.balance = balance;
        }

        public String getCardNo() {
            return cardNo;
        }

        public void setCardNo(String cardNo) {
            this.cardNo = cardNo;
        }

        public String getIdentity() {
            return identity;
        }

        public void setIdentity(String identity) {
            this.identity = identity;
        }

        public String getUsername() {
            return username;
        }

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

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        public String getPhone() {
            return phone;
        }

        public void setPhone(String phone) {
            this.phone = phone;
        }

        public double getBalance() {
            return balance;
        }

        public void setBalance(double balance) {
            this.balance = balance;
        }
    }
举报

相关推荐

0 条评论