java面向对象

面向对象

写程序的套路
在这里插入图片描述
简单易懂逻辑清晰
在这里插入图片描述

设计类

public class 类名{
1 成员变量(代表属性,一般名词)
2 成员方法 (代表行为,一般名词)
3 构造器
4 代码块
5 内部类
在这里插入图片描述
调用类
在这里插入图片描述

内存机制

在这里插入图片描述

购物车案例

实现录入 查询 更新 计算
package com.xu.creatobject;

import java.util.Scanner;

public class shopCardemo {
public static void main(String[] args) {
// 定义购物车对象
Goods[] shopcar = new Goods[100];
while (true) {
System.out.println(“请进行如下命令选择”);
System.out.println(“添加商品到购物车:add”);
System.out.println(“查询商品到购物车:query”);
System.out.println(“修改商品购买数量:update”);
System.out.println(“结算购买商品金额:pay”);
Scanner sc=new Scanner(System.in);
System.out.println(“请输入命令”);
String command=sc.next();
switch (command){
case “add”:
// 添加商品
addGoods(shopcar,sc);
break;
case “query”:
// 查询商品
queryGoods(shopcar);
break;
case “update”:
// 修改
updateGoods(shopcar,sc);
break;
case “pay”:
pay(shopcar);
// 结算
break;
default:
System.out.println(“没有该功能”);
}
}
}

public static void addGoods(Goods[] shopcar,Scanner sc) {

// 录入用户购买信息
System.out.println(“请输入商品编号(不重复)”);
int id=sc.nextInt();
System.out.println(“请输入商品名称”);
String name=sc.next();
System.out.println(“请输入商品价格”);
double price=sc.nextDouble();
System.out.println(“请输入商品数量”);
int buynumber=sc.nextInt();
// 创建对象录入用户信息
Goods g=new Goods();
g.id=id;
g.name=name;
g.price=price;
g.buyNumber=buynumber;
// 把信息存入购物车数组
for (int i = 0; i < shopcar.length; i++) {
if(shopcar[i]==null)
{
shopcar[i]=g;
break;
}
System.out.println(“您的商品” + g.name + “添加到了购物车”);
}

}

public static void queryGoods(Goods[] shopcar) {
    System.out.println("============查询购物车信息如下==============");
    System.out.println("编号\t\t名称\t\t\t\t价格\t\t\t\t数量\t\t\t\t");
    for (int i = 0; i < shopcar.length; i++) {
        Goods g=shopcar[i];
        if(g!=null){
            System.out.println(g.id + "\t\t" + g.name + "\t\t\t\t" + g.price + "\t\t\t\t" + g.buyNumber);

        }else{
            break;
        }
        
    }
}

public static void updateGoods(Goods[] shopcar,Scanner sc) {
    while (true) {
        System.out.println("请输入要修改商品的id");
        int id=sc.nextInt();

// 添加修改方法
Goods g=Getgoodsid(id,shopcar);
if (g!=null){
System.out.println(“请输入”+g.name+“商品最新购买个数”);
int number=sc.nextInt();
g.buyNumber=number;
System.out.println(“修改完成”);
queryGoods(shopcar);
break;
}else{
System.out.println(“对不起没有购买商品”);
}
}
}
public static Goods Getgoodsid(int id,Goods[] shopcar)
{
for (int i = 0; i < shopcar.length; i++) {
Goods g=shopcar[i];
if(g!=null){
if(g.id==id)
{
return g;
}
}else
{
return null;
}
}
return null;
}

public static void pay(Goods[] shopcar) {
    System.out.println("以下是您购买的商品");
    queryGoods(shopcar);
    double sum=0;
    for (int i = 0; i < shopcar.length; i++) {
        if(shopcar[i]!=null) {
            sum += (shopcar[i].price * shopcar[i].buyNumber);
        }else{
            break;
        }
    }
    System.out.println("您购买的商品总价是" + sum);
}

}

构造器

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

this关键字

在这里插入图片描述
在这里插入图片描述
不加this会无效赋值

封装

在这里插入图片描述
在这里插入图片描述

javabean

在这里插入图片描述

String类

在这里插入图片描述
在这里插入图片描述

ArrayList集合

在这里插入图片描述

使用add方法对集合增加数据
 public static void main(String[] args) {
        ArrayList list=new ArrayList();
        list.add("我的");
        list.add(2.5);
        list.add("g");
        list.add(90);
        list.add("123");
        list.add(4,"www");
        System.out.println(list);

    }
    public static void main(String[] args) {
//        常用API
        ArrayList<String> list=new ArrayList<>();
        list.add("java");
        list.add("linux");
        list.add("hadoop");
        list.add("ubuntu");
//        1获取索引位置元素值get
        String s=list.get(1);
        System.out.println(s);
//        2获取集合大小
        System.out.println(list.size());
//        3完成集合遍历fori
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        //            4删除某个位置值并返回remove
        String s1=list.remove(2);
        System.out.println(s1);
        System.out.println(list);
//            5直接删除remove
        System.out.println(list.remove("java"));
        System.out.println(list);
//        6修改某个位置的值set
        list.set(0,"solar");
        System.out.println(list);
    }

}

在这里插入图片描述
和数组遍历不一样容易删除覆盖

    public static void main(String[] args) {
        ArrayList<Integer> list=new ArrayList<Integer>();
        list.add(98);
        list.add(77);
        list.add(66);
        list.add(89);
        list.add(79);
        list.add(50);
        list.add(100);
        System.out.println(list);

//     错误方案   for (int i = 0; i < list.size(); i++) {
//            if(list.get(i)<80){
//                list.remove(i);
//            }
//        }


//        正确方案1
//  for (int i = 0; i < list.size(); i++) {
//           if(list.get(i)<80){
//                list.remove(i);
//                i--;
//                删除后退一位
//            }
//       }
//        正确方案2倒着遍历
        for (int i = list.size()-1; i >=0; i--) {
            if(list.get(i)<80){
                list.remove(i);
            }
        }

        System.out.println(list);

    }

在这里插入图片描述

//    1定义电影类
//    2定义对象赋值
    Movie m1=new Movie("<<肖申克的救赎>>",9.7,"罗宾斯");
    Movie m2=new Movie("<<霸王别姬>>",8.7,"张国荣");
    Movie m3=new Movie("<<阿甘正传>>",7.7,"汉克斯");
//    3创建电影集合存储
    ArrayList<Movie> movies=new ArrayList<>();
    movies.add(m1);
    movies.add(m2);
    movies.add(m3);
        System.out.println(movies);
//        4遍历对象信息
        for (int i = 0; i < movies.size(); i++) {
            Movie m=movies.get(i);
//            将第一个电影对象地址给m
            System.out.println("电影名称" + m.getName());
            System.out.println("电影得分" + m.getScore());
            System.out.println("电影演员" + m.getActor());
            System.out.println("-------------");
        }
    }

在这里插入图片描述
public static void main(String[] args) {
ArrayList students=new ArrayList<>();
students.add(new Student(“20180302”,“叶孤城”,23,“护理一班”));
students.add(new Student(“20180303”,“东方不败”,23,“推拿二班”));
students.add(new Student(“20180304”,“令狐冲”,26,“中药学四班”));
students.add(new Student(“20180305”,“西门吹雪”,26,“神经科二班”));
System.out.println(“学生学号\t\t学生姓名\t\t学生年龄\t\t学生班级”);
for (int i = 0; i < students.size(); i++) {
Student s=students.get(i);
System.out.println(s.getId()+“\t\t”+s.getName()+“\t\t”+s.getAge()+“\t\t”+s.getClassname());
}
// 学生查找功能测试
Scanner sc=new Scanner(System.in);
while (true){
System.out.println(“请输入你要查找学生的学号”);
String idnumber=sc.next();
Student s=getStudentById(students, idnumber);
if(s!=null){
System.out.println(“您查询的学生信息如下”);
System.out.println(s.getId()+“\t\t”+s.getName()+“\t\t”+s.getAge()+“\t\t”+s.getClassname());
}else
{
System.out.println(“查无此人”);
}

    }

}

/**
 * 根据学生学号来查找学生
 * @param students 学生对象的集合
 * @param idnumber 学生学号
 * @return 学生对象
 */
public static Student getStudentById(ArrayList<Student> students,String idnumber){
    for (int i = 0; i < students.size(); i++) {
        Student m=students.get(i);

// 比较字符串方法用equals等于没法比较地址
if (m.getId().equals(idnumber))
{
return m;
}

    }
    return null;

}

ATM项目设计

在这里插入图片描述

ArrayList<Account> accounts=new ArrayList<>();
//        展示系统首页
        while (true) {
            System.out.println("=====================嘘的ATM系统=====================");
            System.out.println("1、账户登录");
            System.out.println("2、账户开户");
            Scanner sc=new Scanner(System.in);
            System.out.println("请选择你的操作");
            int command =sc.nextInt();
            switch (command){
                case 1:
//                    用户登录功能
                    break;
                case 2:
//                    用户开户功能
                    break;
                default:
                    System.out.println("您输入的操作不存在");
            }

在这里插入图片描述

   /**
     * 用户开户功能实现
     *
     * @param accounts 接受的账号集合
     */
    private static void register(ArrayList<Account> accounts, Scanner sc) {
        System.out.println("==============系统开户操作==============");
        //创建账户对象用以封装输入信息
        //结束账户名
        Account account = new Account();
        System.out.println("请输入用户名");
        String userName = sc.next();
        account.getUserName();
        //接受账户密码
        while (true) {
            System.out.println("请输入账户密码:");
            String passWord = sc.next();
            System.out.println("请输入确认密码:");
            String okpassWord = sc.next();
            if (passWord.equals(okpassWord)) {
                account.getPassWord();
                break;
            } else {
                System.out.println("对不起,您输入两次密码不一致,请重新确认");
            }
        }
        //接受账户限额
        System.out.println("请输入账户限额:");
        double quotaMoney = sc.nextDouble();
        account.getQuotaMoney();

        //生成账户卡号(独立成一个方法)
        String carId = getRandomCarId(accounts);
        account.setCarId(carId);
        System.out.println("感谢您," + userName + "先生/女生您开户成功,您的卡号是" + carId + "请妥善保管卡号");

    }

    /**
     * 为账户生成随机八位卡号
     *
     * @return返回卡号值
     */
    private static String getRandomCarId(ArrayList<Account> accounts) {
        Random r = new Random();
        while (true) {
            String carId = "";//空字符连接
            for (int i = 0; i < 8; i++) {
                carId += r.nextInt(9);
            }
            //判断八位卡号是否重复
            if(getAccountByCarId(carId,accounts)==null){
                return carId;
            }
        }
    }

    /**
     * 根据id查找账户对象
     * @param carId 传来新生成的卡号
     * @param accounts 账户集合
     * @return
     */
    private static Account getAccountByCarId(String carId,ArrayList<Account> accounts){
        for (int i = 0; i < accounts.size(); i++) {
            Account acc=accounts.get(i);
            if(acc.getCarId().equals(carId)){
                return acc;
            }
            
        }
        return null;
    }

在这里插入图片描述

private static void login(ArrayList<Account> accounts,Scanner sc) {
        System.out.println("====================系统登录操作====================");
        //判断账户是否为空
        if(accounts.size()==0){
            System.out.println("对不起当前系统中无账户,请先去开户,再来登录!");
            return;
        }
        //正式进入登陆操作
        while (true) {
            System.out.println("请输入您的卡号");
            String carId=sc.next();
            //判断卡号是否存在
            Account acc=getAccountByCarId(carId,accounts);
            if(acc!=null){
                //卡号存在的
                //输入密码
                while (true) {
                    System.out.println("请输入密码");
                    String passWord=sc.next();
                    if(acc.getPassWord().equals(passWord)){
                        //登陆成功
                        System.out.println("恭喜你" + acc.getUserName() + "先生/女生进入系统,您的卡号是" + acc.getCarId());
                    }else{
                        System.out.println("对不起您输入的密码有误");
                    }
                }


            }else{
                System.out.println("对不起系统中不存在该卡号");
            }
        }
    }

操作界面功能

   /**
     * 操作页面
     * @param sc
     */
    private static void showUserCommand(Scanner sc,Account acc) {
        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("6、退出");
            System.out.println("7、注销账户");
            System.out.println("请选择:");
            int command=sc.nextInt();
            switch (command){
                case 1:
                    //展示当前账户信息
                    showAccount(acc);

                    break;
                case 2:
                    //存款
                    pushMoney(acc,sc);
                    break;
                case 3:
                    //取款
                    getMoney(acc,sc);
                    break;
                case 4:
                    break;
                case 5:
                    break;
                case 6:
                    System.out.println("退出成功");
                    return;
                case 7:
                    break;
                default:
                    System.out.println("没有这项操作请重新选择");
                    break;

        }
        }
    }

存款功能

  private static void pushMoney(Account acc, Scanner sc) {
        System.out.println("===============存款===============");
        System.out.println("请输入存款金额");
        double money=sc.nextDouble();
        acc.setMoney(acc.getMoney()+money);
        System.out.println("存款成功");
    }

取款功能

   private static void getMoney(Account acc, Scanner sc) {
        System.out.println("==================取款================");
        System.out.println("请输入取款金额");
        double getmoney= sc.nextDouble();
        if(getmoney<100){
            System.out.println("账户余额不足一百先去存钱吧");
            pushMoney(acc,sc);
        }else if(getmoney> acc.getQuotaMoney()){
            System.out.println("对不起您超过了取款最大限额:" + acc.getQuotaMoney());
            System.out.println("请重新取款");
            getMoney(acc,sc);

        } else if(getmoney> acc.getMoney()){
            System.out.println("对不起您的余额不足账户仅剩"+acc.getMoney()+"元");
            System.out.println("请重新取款");
            getMoney(acc,sc);

        }else {
            acc.setMoney(acc.getMoney()-getmoney);
            System.out.println("恭喜你取款"+getmoney+"成功");
        }
    }

转账功能
在这里插入图片描述
private static void transferMoney(Scanner sc, Account acc, ArrayList accounts) {
System.out.println(“===用户转账功能”);
//1判断系统用户是否足够两人
if(accounts.size()<2){
System.out.println(“当前系统用户不足两人无法转账,请去开户吧”);
return;//结束方法
}
//2判断自己账户是否有钱
if(acc.getMoney()!=0){
while (true) {
System.out.println(“请输入你要转账的卡号”);
String carid=sc.next();
if(carid.equals(acc.getCarId())){
System.out.println(“对不起您不可以给自己的卡转账”);
continue;//跳出当此执行继续循环
}
Account account=getAccountByCarId(carid,accounts);
if(account!=null){
//判断姓名
String username=account.getUserName();
String tip=“*”+username.substring(1);
System.out.println(“请输入”+tip+“姓氏”);
String pername=sc.next();
if(username.startsWith(pername)){
//认证通过
System.out.println(“请输入转账金额”);
double zmoney=sc.nextDouble();
//判断余额是否足够
if(zmoney>acc.getMoney()){
System.out.println(“对不起您的余额不足,您最多可以转账:” + acc.getMoney());
}else {
//余额够了
acc.setMoney(acc.getMoney()-zmoney);
account.setMoney(account.getMoney()+zmoney);
System.out.println(“转账成功,您还剩” + acc.getMoney());
return;
}

                }else{
                    System.out.println("对不起您输入的认证信息有误");
                }

            }else {
                System.out.println("您输入的卡号不存在");
            }
        }

    }else{
        System.out.println("您的账户余额不足就别转了吧");
        return;
    }
}

在这里插入图片描述
销户
private static boolean removeAccount(Scanner sc, Account acc, ArrayList accounts) {
System.out.println(“用户销户”);
System.out.println(“你真的要销户吗y/n”);
String rs=sc.next();
switch (rs){
case “y”:
//正真的销户
if(acc.getMoney()>0){
System.out.println(“你账户中还有钱没有取完不允许销户”);
return false;
}else
{
accounts.remove(acc);
System.out.println(“您的账户销户完毕”);
return true;
}
default:
System.out.println(“好的当前账户继续保留”);
return false;
}

}

修改密码
private static void updataPassword(Account acc, Scanner sc) {
while (true) {
System.out.println(“请输入您当前账户的密码”);
String password=sc.next();
if(password.equals(acc.getPassWord())){
System.out.println(“请你输入新的密码”);
String newpassword=sc.next();
System.out.println(“请在此输入密码确认”);
String oknewpassword=sc.next();
if (newpassword.equals(oknewpassword)){
acc.setPassWord(newpassword);
System.out.println(“密码修改成功请重新登录”);
return;

            }else{
                System.out.println("密码确认错误,请重新修改");

            }
        }else{
            System.out.println("当前账户密码不正确");
        }
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值