入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

【Java】基于ArrayList实现的简单登录注册

创建时间:2015-11-29 投稿人: 浏览次数:3735

—>需求

用Java集合框架Collection接口的ArrayList实现类来做一个简单的登录注册功能。用户选择注册功能注册一个用户名和密码,然后选择登录功能进行登录。登陆成功后,有一个猜数字的小游戏。实现的功能有:

  • 注册功能
  • 登录功能
  • 小游戏功能

—>分析

Java语言最本质的特点就是面向对象。为了使我们的功能更符合面向对象思想,我们首先考虑涉及到哪些对象、类:

  • 用户类
    • 成员变量
      • 用户名
      • 密码
    • 构造方法
      • 无参构造器
      • 代餐构造器
    • 成员方法
      • getXxx()
      • setXxx()
      • 登录
      • 注册
  • 测试类
    • main()

鉴于用户类可能还包括其他的成员变量和成员方法,为方便将来扩展,我们把用户类划分为用户描述类、功能操作类。如下:

  • 用户描述类
    • 成员变量
      • 用户名
      • 密码
    • 构造方法
      • 无参构造器
      • 带参构造期
    • 成员方法
      • getXXX()
      • setXXX()
  • 功能操作类
    • 成员方法
      • 登录
      • 注册
  • 测试类
    • mian()

—>实现

在测试类中创建用户描述类的实例化对象,并通过对象调用其功能方法。按功能分包如下:

分包

如图所示,依次为操作功能接口、操作功能接口实现类、猜数字游戏类、用户描述类、测试类。

操作功能接口UserDao.java源码如下:

package com.liuyi.dao;

import com.liuyi.pojo.User;

/*
 * 这是针对用户进行操作的接口
 * 
 * @Version V1.0
 * 
 * */

public interface UserDao {
    /*
     * 这是用户的登录功能
     * 
     * username  用户名
     * 
     * password  密码
     * 
     * return  返回登录是否成功
     * */
    public abstract boolean isLogin(String username,String password) ;

    /*
     * 这是用户注册功能
     * 
     * user  这是要注册的用户信息
     * */
    public abstract void regist(User user) ;
}

操作功能接口实现类UserDaoImpl.java源码如下:

package com.liuyi.dao.impl;

import java.util.ArrayList;

import com.liuyi.dao.UserDao;
import com.liuyi.pojo.User;

/*
 * 这是用户操作的具体实现类(集合版)
 * 
 * */

public class UserDaoImpl implements UserDao {

    // 为了让多个方法访问同一个集合,把集合定义为成员变量
    // 为了不让外部访问,定义为private
    // 为了让多个对象共享一个集合,定义为static
    private static ArrayList<User> array = new ArrayList<User>();

    @Override
    public boolean isLogin(String username, String password) {
        boolean flag = false;

        for ( User us : array ) {
            if (us.getUsername().equals(username) && us.getPasword().equals(password)) {
                flag = true;
                break;
            }
        }
        return flag;
    }

    @Override
    public void regist(User user) {
        // 把用户信息存储到集合
        //ArrayList<User> array = new ArrayList<User>();
        array.add(user);
    }
}

猜数字小游戏类GuessNumberGame.java源码如下:

package com.liuyi.game;

import java.util.Scanner;

/*
 * 猜数字小游戏
 * 
 * @Version V1.0
 * 
 * */

public class GuessNumberGame {

    public GuessNumberGame() {
        super();
    }

    //游戏开始
    @SuppressWarnings("resource")
    public static void start() {

        // 产生一个随机数
        int number = (int)(Math.random()*100) + 1;

        // 定义一个统计变量
        int count = 0;

        // 游戏开始
        while (true) {
            // 键盘录入一个数据
            System.out.println("请输入一个你猜的数据(1--100):");
            Scanner sc = new Scanner(System.in);
            int guessNumber = sc.nextInt();

            count++;

            // 判断
            if ( guessNumber>number ) {
                System.out.println("你猜的数据" + guessNumber + "大了。再接再厉喔");
            } else if ( guessNumber<number ) {
                System.out.println("你猜的数据" + guessNumber + "小了。再接再厉喔");
            } else {
                System.out.println("恭喜你!" + count + "次就猜中啦");
                break;
            }
        }
    }
}

用户描述类User.java源码如下:

package com.liuyi.pojo;

/*
 * 这是用户基本描述类
 * 
 * @Version V1.0
 * 
 * */

public class User {
    // 用户名
    private String username;
    // 密码
    private String pasword;

    public User() {
        super();
    }

    public String getUsername() {
        return username;
    }

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

    public String getPasword() {
        return pasword;
    }

    public void setPasword(String pasword) {
        this.pasword = pasword;
    }
}

测试类UserTest.java源码如下:

package com.liuyi.test;

import java.util.Scanner;

import com.liuyi.dao.UserDao;
import com.liuyi.dao.impl.UserDaoImpl;
import com.liuyi.game.GuessNumberGame;
import com.liuyi.pojo.User;

/*
 * 用户测试类
 * 
 * @Version V1.0
 * 
 * 两个小问题:
 *      1.多个对象共享一个成员变量,则该长远变量应该用静态,即static修饰。
 *      2.循环里如果有switch语句,switch语句里面的break结束的只是switch语句,而不是外层循环。
 * 
 * */

public class UserTest {
    @SuppressWarnings("resource")
    public static void main(String[] args) {

        while (true) {
            // 欢迎界面。给出选择项
            System.out.println("--------------欢迎光临--------------");
            System.out.println("1---->登录");
            System.out.println("2---->注册");
            System.out.println("3---->退出");
            System.out.println("请输入你的选择:");

            // 键盘录入选择。根据选择做不同的操作
            Scanner sc = new Scanner(System.in);
            // 为了后面录入信息的方便,所有的数据录入都用字符串接收
            String choiceString = sc.nextLine();

            // switch语句的多个地方要使用,所以我定义在外面
            UserDao ud = new UserDaoImpl();

            // 这里用switch进行选择操作
            switch (choiceString) {
            case "1":

                // 登录界面。请输入用户名和密码
                System.out.println("--------------登录界面--------------");
                System.out.println("请输入用户名:");
                String username = sc.nextLine();
                System.out.println("请输入密码:");
                String password = sc.nextLine();

                // UserDao ud = new UserDaoImpl();
                boolean flag = ud.isLogin(username, password);
                if ( flag ) {
                    System.out.println("恭喜你!登陆成功。可以开始玩游戏啦");

                    System.out.println("你要玩吗(y/n)?");
                    while (true) {
                        String resultString = sc.nextLine();
                        if (resultString.equalsIgnoreCase("y")) {
                            GuessNumberGame.start();  // 猜数字游戏开始
                            System.out.println("你还玩吗(y/n)?");
                        } else {
                            break;
                        }
                    }
                    System.out.println("谢谢使用。欢迎下次光临喔^O^ ");
                    System.exit(0);  //直接退出外层while死循环
                    // break;    // 注意,这里的break结束的是switch,而不是外循环
                } else {
                    System.out.println("用户名或密码有误,登录失败咯");
                }
                break;

            case "2":
                // 注册界面。请输入用户名和密码
                System.out.println("--------------注册界面--------------");
                System.out.println("请输入用户名:");
                String newUsername = sc.nextLine();
                System.out.println("请输入密码:");
                String newPassword = sc.nextLine();

                // 把注册的用户名、密码封装到一个对象中
                User user = new User();
                user.setUsername(newUsername);
                user.setPasword(newPassword);

                // 调用注册功能  多态实现
                // UserDao ud = new UserDaoImpl();
                // 具体类实现  不建议使用。因为将来可能会修改实现类
                // UserDaoImpl ud = new UserDaoImpl();

                ud.regist(user);
                System.out.println("注册成功");
                break;

            case "3":
            default:
                System.out.println("谢谢使用。欢迎下次光临喔^O^");
                System.exit(0);  //直接退出外层while死循环
                break;
            }
        }
    }
}

—>总结

ArrayList作为Java集合框架Collection接口的子接口List接口的实现类,底层实现代码的数据结构是数组,具有查询快、增删慢、线程不安全的特点。另外,作为Java集合框架中最长赢得实现类之一,ArrayList实现类支持泛型,因此我们可以把它封装成一个栈结构,满足栈的基本特点:先进后出。当然,还可以实现很多其他而功能,我会后续更新^O^

阅读更多
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
  • 上一篇:没有了
  • 下一篇:没有了
未上传头像