用数组实现简单的登录注册

数组的小使用
/*
作业:使用数组实现注册登陆功能,
第一步: 提示用户选择功能, 1(注册) 2(登陆) 。
1. 提示用户输入注册的账号(数字)与密码,如果输入账号已经存在数组中,提示用户重新输入。
登陆
提示用户输入登陆的账号与密码,如果账号与密码这个用户已经存在数组中,那么登陆成功,否则登陆失败
查看
查看注册完毕之后,把集合中的所有用户信息打印出来。
退出登录,修改密码放在登录中做
退出系统
*/


import java.util.Scanner;
public class UserManage {
    // 总数组长度 最大能够存储多少个账号
    public static final int USER_COUNT = 1000;
    // 声明数组 用于存在一定数量的账号 同一个账号对应的密码下标必须一致
    public static String[] accountArr = new String[USER_COUNT];
    public static String[] passwordArr = new String[USER_COUNT];
    // 表示当前数组存储数据的下标
    public static int index = 0;
    /**
     * 记录登录用户的用户名
     */
    public static String loggedUserName;
    // 记录登录用户在数组中的下标
    public static int loggedUserIndex = -1;


    /**
     * 根据用户名获取在数组对应的下标
     *
     * @return -1表示没有找到对应的账号
     */
    public static int getIndexByName(String name) {
        // 一定要注意判断name是否为null
        if (name == null) return -1;
        for (int i = 0; i < accountArr.length; i++) {
            if (name.equals(accountArr[i])) { // 依次使用用户名和数组的每个元素进行判断
                return i; // 相等 则说明找到 可以直接返回对应的下标
            }
        }
        return -1; // 没有找到对应的数据 则返回-1
    }

    /**
     * 保存用户名和密码
     *
     */
    public static void register() {
        String name = getInput("请输入用户名:");
        String password = getInput("请输入密码:");
        // 存储数据的下标该多少?
        // 1. 声明一个变量进行计数
        // 2. 通过循环找到对应的下标值为null的位置
        if (index >= USER_COUNT) {
            System.out.println("用户已满");
            return;
        }
        // 1.判断是否已经存在相同的用户
        if (getIndexByName(name) != -1) {
            System.out.println("注册失败,存在相同用户名,请重新填写!");
            return; // 存储失败
        }
        // 使用相同下标进行数据的存储 保证数据的对应
        accountArr[index] = name;
        passwordArr[index] = password;
        index++;//计数 增加 使下一次存储的数据在下一个位置
        System.out.println("注册成功");
    }

    /**
     * 登录
     *
     */
    public static boolean login() {
        String name = getInput("请输入用户名:");
        String password = getInput("请输入密码:");
        int i = getIndexByName(name); // 通过用户找下标
        if (i < 0 || i >= USER_COUNT) {
            System.out.println("用户名不存在");
            return false;
        }
        // 判断密码
        if (!password.equals(passwordArr[i])) { // 密码的下标必须和用户的下标一致
            System.out.println("密码不正确");
            return false;
        }
        // 保存登录用户的信息
        loggedUserIndex = i; // 下标
        loggedUserName = name;// 用户名
        return true;
    }

    // 显示未登录的菜单
    public static void showUnLoginMenu() {
        System.out.println("-------------");
        System.out.println("1.登录");
        System.out.println("2.注册");
        System.out.println("3.退出系统");
        // 直接调用方法获取输入的值
        int input = getInput(3);
        if (input == 3) {
            return;
        }

        if (input == 1) {
            // 进行登录
            boolean result = login();// 进行登录并获取登录结果
            if (result) {
                showLoggedMenu(); // 显示已经登录的按钮
            }
        } else {
            // 进行注册
            register();
        }
        showUnLoginMenu(); // 继续显示菜单
    }

    public static void showLoggedMenu() {
        System.out.println("-----欢迎 " + loggedUserName + " 使用系统--------");
        System.out.println("1.修改密码");
        System.out.println("2.查看所有用户");
        System.out.println("3.退出登录");
        System.out.println("4.退出系统");
        int input = getInput(4);
        switch (input) {
            case 1 -> updatePassword(); // 密码修改
            case 2 -> showAll(); // 列出用户
            case 3 -> {
                // 重置登录信息
                loggedUserName = null;
                loggedUserIndex = -1;
                return;
            }
            case 4 ->
                    // 退出系统 -- 不能return,因为此处return仅仅是返回到showUnLoginMenu 方法 还是会显示未登录菜单
                    System.exit(0);
        }
        showLoggedMenu();
    }

    /**
     * 修改密码
     */
    public static void updatePassword(){
        String oldPwd = getInput("请输入原始密码:");
        // 通过登录的下标获取保存的密码
        String oriPwd = passwordArr[loggedUserIndex];
        if(oldPwd.equals(oriPwd)){
            // 继续输入新密码进行
            String newPwd = getInput("请输入新的密码:");
            passwordArr[loggedUserIndex] = newPwd; // 覆盖原始密码
            System.out.println("密码修改成功");
        }else{
            System.out.println("原始密码不正确!");
        }
    }
    /**
     * 显示所有已经注册的用户
     */
    public static void showAll(){
        // 此处可以写 accountArr.length 但是没有必要 因为 当前数组只存储到index结束的
        for (int i = 0;i < index; i ++){
            System.out.printf("%s\t",accountArr[i]);
            if((i + 1) % 4 == 0){
                System.out.println();
            }
        }
        System.out.println();
    }

    /**
     * 获取输入的int值
     *
     * @param max 最大值
     */
    private static int getInput(int max) {
        System.out.print("请选择操作编号:");
        Scanner in = new Scanner(System.in);

        while (true) {
            int input = in.nextInt();
            // 判断输入的值是否在范围内
            if (input < 1 || input > max) {
                System.out.print("输入的菜单编号不正确,请重新输入:");
                continue;
            }
            return input;
        }
    }

    /**
     * 获取输入的字符串
     *
     * @param title 输入提示字符串
     */
    private static String getInput(String title) {
        System.out.print(title);
        Scanner in = new Scanner(System.in);
        return in.next();
    }

    // 入口方法
    public static void main(String[] args) {
        index++;
        accountArr[0] = "aa";
        passwordArr[0] = "123";
        // 程序启动直接显示未登录的菜单
        showUnLoginMenu();
    }
}

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值