Java基础第七天

一、Java中的内存分配

. Java程序在运行时,需要在内存中的分配空间。为了提高运算效率,有对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。 栈存储局部变量( 变量 ) 堆存储new出来的东西( 引用类型 )

方法区(后面讲) ​ 本地方法区(和系统相关)

寄存器(给CPu使用)

栈内存的数据用完就立即释放

堆内存的特点:

  1. 每一个new 出来的对象 , 都地址值

  2. 每个变量都有默认值

    byte, short , int ,long 默认值 0

    float, double 默认0.0

    char '\u0000'

    boolean false

    引用类型 null

  3. 使用完毕后就会变成垃级, 但并不会立即进行回收,等垃级回收器空闲了,才进行回收

二、API

API(Application Programming Interface),应用程序编程接口。Java API是一本程序员的 字典 ,是JDK中提供给我们使用的类的说明文档。这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。所以我们可以通过查询API的方式,来学习Java提供的类,并得知如何使用它们。

三、equals 与 ==

”==" 既可以作用在基本数据类型中,也可以作用在引用数据类型中

equals()只能作用在引用数据类型(两个对象),无法作用在基本数据类型

"== 作用在基本数据类型时比较的的是值是否相同,作用在引用数据类型时比较的是两个对象的地址值是否一致(是否指向相同对象)

equals()方法在不重写的情况下调用的是"=="也就是比较两个对象的地址值是否一致,但是equals()是可以重写的,如果重写后具体对比的含义根据重写规则而定

三、字符串与整型的转换

对应包装类.parseXX(字符串) ;

ATM 机实现

要求

步骤:

  1. 使用数组存储用户的信息( 管理员,用户)

  2. 显示欢迎界面,并提供登录操作

  3. 输入用户名和密码,进行登录 , 判断 否是管理员

  4. 如果是管理员

    a: 管理员登录 , 显示管理员的欢迎界面,及菜单选择

    1. 开卡 2 注销卡 3. 查看所有用户列表 4 冻结账号 5. 返回登录界面 6 退出系统

      开卡

      提示输入卡号

      判断是这个卡号是否已经存在

      不存在,进行提示输入密码

      把这个新对象,加入到用户数组 (扩容 )

      注销卡:

      提示输入卡号

      这个卡号是否已经存在

      卡号存在,记录它的下标位置

      删除这个对象(缩容)

      查看所有用户列表

      遍历数组,且进行输出

      冻结账号

      提示输入卡号

      这个卡号是否已经存在

      卡号存在,记录它的下标位置

      将对应下标位置的状态,改为冻结

  5. 否则认为是用户登录

    判断用户数组中,是数据 是否与输入相等

    相等,登录成功

    显示菜单界面,欢迎xxxx ,

    1. 查看余额 2. 存钱 3. 取钱 4. 转账 5.退出

    不相等,登录失败

代码实现

import java.util.Scanner;

public class ATM {
    public static void main(String[] args) {
        /*
        * 步骤:

1. 使用数组存储用户的信息( 管理员,用户)

2. 显示欢迎界面,并提供登录操作

3. 输入用户名和密码,进行登录 , 判断 否是管理员

4. 如果是管理员
   a:   管理员登录 , 显示管理员的欢迎界面,及菜单选择
    1. 开卡  2 注销卡  3. 查看所有用户列表  4 冻结账号  5. 返回登录界面   6 退出系统
       开卡
       提示输入卡号
          判断是这个卡号是否已经存在
          不存在,进行提示输入密码
          把这个新对象,加入到用户数组  (扩容 )

       注销卡:

              提示输入卡号
              这个卡号是否已经存在
              卡号存在,记录它的下标位置
               删除这个对象(缩容)

       查看所有用户列表
              遍历数组,且进行输出
        冻结账号
              提示输入卡号
              这个卡号是否已经存在
             卡号存在,记录它的下标位置
             将对应下标位置的状态,改为冻结

5. 否则认为是用户登录

        判断用户数组中,是数据 是否与输入相等
        相等,登录成功
            显示菜单界面,欢迎xxxx ,
             1.  查看余额   2. 存钱   3. 取钱    4. 转账    5.退出
        不相等,登录失败
        * */


        /**
         * 1. 使用数组存储用户的信息( 管理员,用户)
         */

        // 管理员数组     用户名   密码
        String[] Admin = {"admin", "123"};
        //用户数组    用户名  密码   余额  状态
        String[] user1 = {"user1", "123", "2000", "正常"};
        String[] user2 = {"user2", "123", "3000", "正常"};
        String[] user3 = {"user3", "123", "4000", "正常"};
        String[] user4 = {"user4", "123", "5000", "正常"};
        String[] user5 = {"user5", "123", "26000", "冻结"};

        //所有用户存在这里
        String[][] AllUser = {user1, user2, user3, user4, user5};

        /**
         * 2. 显示欢迎界面,并提供登录操作
         */
        //do是管理员返回登录的循环
        do {
            System.out.println("欢迎来到本ATM系统!");
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入用户名:");
            String inputName = scanner.nextLine();
            System.out.println("请输入密码:");
            String inputPwd = scanner.nextLine();

            //管理员登录 , 显示管理员的欢迎界面,及菜单选择
            if (inputName.equals(Admin[0])) {
                if (inputPwd.equals(Admin[1])) {
                    //确定管理员后,在进行操作后,循环跳转到菜单,然后继续操作
                    boolean fanhui = true;
                    while (fanhui) {
                        System.out.println("管理员用户你好!你可以使用以下功能");
                        System.out.println("1. 开卡  2 注销卡  3. 查看所有用户列表  4 冻结账号  5. 返回登录界面   6 退出系统");
                        System.out.println("请输入你的操作(对应操作前的数字):");
                        int choose = scanner.nextInt();
                        switch (choose) {
                            //开卡
                            case 1: {
                                System.out.println("请输入用户名:");
                                int i = 0;
                                Scanner sc = new Scanner(System.in);
                                while (true) {
                                    String NewName = sc.nextLine();
                                    if (NewName.equals(Admin[0]) || NewName.equals(AllUser[i][0])) {
                                        System.out.println("账户已经存在!请重新输入:");
                                    } else {
                                        System.out.println("请输入密码;");
                                        String NewPsw = sc.nextLine();

                                        //定义一个新二维数组
                                        String[][] NewAllUser = new String[AllUser.length + 1][];
                                        int temp = AllUser.length;
                                        for (String[] item : AllUser) {
                                            NewAllUser[AllUser.length - temp] = item;
                                            temp--;
                                        }
                                        NewAllUser[AllUser.length] = new String[]{NewName, NewPsw, "0", "正常"};
                                        AllUser = NewAllUser;
                                        System.out.println("创建成功! \n 按任意键返回 y/n ");
                                        sc.next();
                                        break;
                                    }
                                }
                                //跳出内循环,结束开卡操作
                            }
                            break;
                            case 2: {
                                System.out.println("请输入要注销的卡名:");
                                Scanner sc = new Scanner(System.in);
                                String deleName = sc.nextLine();
                                int del = 0;
                                int temp = 1;
                                //判断是否有该账户
                                while (true) {
                                    //如果有这个元素
                                    if (deleName.equals(AllUser[del][0])) {
                                        //定义新数组
                                        String[][] NewAllUser = new String[AllUser.length - 1][];
                                        //去掉选中的用户名后存入新数组
                                        int n = 0;
                                        for (String[] item : AllUser) {
                                            NewAllUser[n] = item;
                                            if (deleName.equals(item[0])) {
                                                continue;
                                            }
                                            n++;
                                        }
                                        AllUser = NewAllUser;
                                        System.out.println("已经注销账户名为:" + deleName + " 的账户1 \n 按任意键返回 y/n ");
                                        sc.next();
                                        break;
                                    }
                                    //当遍历Alluser后没有指定元素,给出提示,继续输入账号
                                    else if (del == AllUser.length - 1) {
                                        System.out.println("没有该账户!");
                                        del = 0;
                                        deleName = sc.nextLine();
                                    }
                                    del++;
                                    temp++;
                                    //当连续3次错误,返回菜单
                                    if (temp == AllUser.length * 3) {
                                        System.out.println("你已经连续错误四次,返回菜单");
                                        break;
                                    }


                                }
                            }
                            break;
                            case 3: {
                                for (String[] item : AllUser) {
                                    for (String str : item) {
                                        System.out.print(" " + str);
                                    }
                                    System.out.println("");
                                }
                                System.out.println("按任意键返回 y/n");
                                scanner.next();
                            }
                            break;
                            case 4: {
                                System.out.println("请输入要冻结的账户:");
                                Scanner sc = new Scanner(System.in);
                                String freeUser = sc.nextLine();
                                int i = 0;
                                String temp = "冻结";
                                while (true) {
                                    //找到目标账户
                                    if (freeUser.equals(AllUser[i][0])) {
                                        //判断是否已经冻结
                                        if (temp.equals(AllUser[i][3])) {
                                            System.out.println("账户已经被冻结!请重新输入");
                                            i = 0;
                                            freeUser = sc.nextLine();
                                        } else {
                                            AllUser[i][3] = temp;
                                            System.out.println("冻结成功!");
                                            System.out.println("按任意键返回 y/n");
                                            sc.next();
                                            break;
                                        }
                                    } else if (i == AllUser.length - 1) {
                                        System.out.println("账户不存在,请检查后输入!");
                                        i = -1;
                                        freeUser = sc.nextLine();
                                    }
                                    i++;
                                    if (i == AllUser.length) {
                                        break;
                                    }


                                }


                            }
                            break;
                            case 5: {
                                System.out.println("确认返回登录? y/n");
                                Scanner sc = new Scanner(System.in);
                                String y = sc.nextLine();
                                String str = "y";
                                if (str.equals(y)) {
                                    fanhui = false;
                                } else {
                                    break;
                                }
                            }
                            break;
                            case 6: {
                                System.out.println("确认退出? y/n");
                                Scanner sc = new Scanner(System.in);
                                String y = sc.nextLine();
                                String str = "y";
                                if (str.equals(y)) {
                                    return;
                                } else {
                                    fanhui=true;
                                }
                            }
                        }
                    }
                } else {
                    System.out.println("账户或者密码错误!\n 按任意键返回 y/n");
                    scanner.next();
                }


            }

            //用户登录  ,
            else {

                int p = 0;
                boolean tuichu = true;
                String str1 = "正常";
                while (tuichu) {
                    for (int i = 0; i < AllUser.length; i++) {
                        p++;
                        //判断用户名
                        if (inputName.equals(AllUser[i][0])) {
                            //判断密码
                            if (inputPwd.equals(AllUser[i][1])) {
                                if (str1.equals(AllUser[i][3])) {
                                    while (tuichu) {
                                        System.out.println("欢迎用户" + AllUser[i][0] + "!");
                                        System.out.println("请选择你的业务  \n 1.  查看余额   2. 存钱   3. 取钱    4. 转账    5.退出");
                                        int choose = scanner.nextInt();
                                        int Addmoney = 0;
                                        int Getmoney;
                                        int money;
                                        switch (choose) {
                                            case 1: {
                                                System.out.println("你的余额为:" + AllUser[i][2] + "元");
                                                System.out.println("输入任意键返回 y/n");
                                                scanner.next();

                                            }
                                            break;
                                            case 2: {
                                                System.out.println("请输入你要存的钱:");
                                                Addmoney = scanner.nextInt();
                                                money = Integer.parseInt(AllUser[i][2]) + Addmoney;

                                                AllUser[i][2] = "" + money;
                                                System.out.println("成功! \n 任意键返回 y/n?");
                                                scanner.next();
                                            }
                                            break;
                                            case 3: {
                                                System.out.println("是否取款? y/n");
                                                Scanner sc = new Scanner(System.in);
                                                String y = sc.nextLine();
                                                String str = "y";
                                                if (str.equals(y)) {
                                                    while (true) {
                                                        System.out.println("请输入你要取的金额:");
                                                        Getmoney = scanner.nextInt();
                                                        money = Integer.parseInt(AllUser[i][2]);
                                                        if (money - Getmoney < 0) {
                                                            System.out.println("余额不足! 请从新输入:");
                                                        } else {
                                                            AllUser[i][2] = "" + (money - Getmoney);
                                                            System.out.println("取款成功!按任意键退出 y/n?");
                                                            scanner.next();
                                                            break;
                                                        }
                                                    }
                                                } else {
                                                    break;
                                                }


                                            }
                                            break;
                                            case 4: {
                                                boolean w = true;
                                                int tranMoney;
                                                int temp = 0;
                                                while (w) {
                                                    System.out.println("请输入对方账号");
                                                    Scanner sc = new Scanner(System.in);
                                                    String tranUser = sc.nextLine();
                                                    if (tranUser.equals(AllUser[i][0])) {
                                                        System.out.println("不能给自己转账!\n 按任意键返回 y/n");
                                                        sc.next();
                                                    }
                                                    //判断账号是否存在
                                                    else {
                                                        for (int j = 0; j < AllUser.length; j++) {
                                                            //找到账号
                                                            if (tranUser.equals(AllUser[j][0])) {
                                                                System.out.println("请输入转账金额:");
                                                                tranMoney = sc.nextInt();
                                                                if (Integer.parseInt(AllUser[i][2]) - tranMoney < 0) {
                                                                    System.out.println("转账金额不能大于自己余额");
                                                                    j--;
                                                                } else {
                                                                    temp = tranMoney + Integer.parseInt(AllUser[j][2]);
                                                                    AllUser[j][2] = "" + temp;
                                                                    AllUser[i][2] = "" + (Integer.parseInt(AllUser[i][2]) - tranMoney);
                                                                    System.out.println("转账成功!\n 按任意键返回 y/n");
                                                                    sc.next();
                                                                    w = false;
                                                                    break;
                                                                }
                                                            } else if (j == AllUser.length - 1) {
                                                                System.out.println("输入的账号不存在!请重新输入:");
                                                            }
                                                        }
                                                    }

                                                }

                                            }
                                            break;
                                            case 5: {
                                                System.out.println("是否退出? y/n");
                                                Scanner sc = new Scanner(System.in);
                                                String y = sc.nextLine();
                                                String str = "y";
                                                if (str.equals(y)) {
                                                    tuichu = false;
                                                } else {
                                                    break;
                                                }
                                            }
                                            break;
                                        }

                                    }
                                    break;
                                } else {
                                    System.out.println("你的账户已经被管理员冻结!\n 按任意键退出 y/n");
                                    scanner.next();
                                    tuichu = false;
                                    break;
                                }

                            }
                        }
                        //用户名不存在
                        else if (p == AllUser.length) {
                            System.out.println("账户或者密码错误!请重新输入!");
                            inputName = scanner.nextLine();
                            System.out.println("请重新输入密码:");
                            inputPwd = scanner.nextLine();
                            i = -1;
                            p = 0;
                        }
                    }

                }

            }


        } while (true);

    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值