【JavaSE_项目练习】用户登录注册

【JavaSE_项目练习】用户登录注册

如何分析需求:
  用户登陆注册案例:
   符号面向对象分析特点:
     1)当前需求中有哪些类?
     2)知道某些类,这些类中有什么东西
     3)这些类和类之间有什么关系

     1)有哪些类:
        用户类
          用户的基本信息描述:
           在这个基本描述类中提供:成员:username password ,提供set()/get()方法
          具体的划分:
           按照功能划分:
             注册功能
             登陆功能

           用户操作的接口:
             注册();登陆();
           用户操作的接口实现类:
             注册(){..}
             登陆(){..}
           用户要进行操作:
             注册
             登陆
       测试类:
          Usertest:用户测试类:
          用户类和测试类:
            在测试类中需要创建用户类对象,来操作登陆和注册功能

经常会按照功能划分,模块划分:
    1)先按照功能划分,在按照模块划分
    2)先模块划分,功能划分.

给每一个包命名的时候:
   用户的描述类:user类
     包:公司域名.entity;实体类
       org.westos.entity;
   用户操作的接口:
     包:公司域名.dao:里面放的 是接口
       org.westos.dao :接口层
   用户操作接口的实现类:
     包:
       org.westos.dao.impl:业务逻辑层:接口子实现类
   测试类:
     包:
       org.westos.test:需要针对注册或者的登陆进行测试

package org.wesots.entity;
/**
 * 用户的实体类
 * @author Apple
 */
public class User {

    //成员变量
    private String username;
    private String password;

    public User() {
        super();
    }

    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;
    }


}
package org.westos.dao;

import org.wesots.entity.User;

/**
 * 用户的操作接口
 * @author Apple
 * @version V1.0
 */
public interface UserDao {

    /**
     * 该方法是用户登陆功能
     * @param username
     *          被传递的用户名
     * @param password
     *          需要被传递的用户密码
     * @return
     *      返回值表示最终登陆是否成功
     */

    public abstract boolean isLogin(String username,String password) ;




    /**
     * 该方法表示是用户注册功能
     * @param user
     *          表示需要注册的用户
     */
    public abstract void regist(User user) ;
}
package org.westos.dao.impl;

import java.util.ArrayList;

import org.wesots.entity.User;
import org.westos.dao.UserDao;

/**
 * 这是用户操作的接口实现类:业务逻辑层
 *      集合版
 * @author Apple
 * @version V1.0
 */

public class UserDaoImpl implements UserDao {
    //为了多个功能使用这个集合中的用户,将集合的对象定义到成员变量中
    //为了不让外界修改集合,所以private修饰
    //将集合对象共享:注册和登陆使用的同一个集合对象
    private static ArrayList array = new ArrayList() ;

    //登陆功能
    @Override
    public boolean isLogin(String username, String password) {
        //登陆,需要将注册的时候用户全都遍历出来,所以创建ArrayList集合
        //假设:定义标记,用户登陆不成成功
        boolean flag = false ;

        //需要遍历集合获取集合中的每一个用户
        for(User u :array){
            //获取到每一个用户对象:u
            //判断
            if(u.getUsername().equals(username) && u.getPassword().equals(password)){
                //修改标记
                flag = true ;
                break ;
            }
        }

        return flag ;

    }


    //注册功能
    @Override
    public void regist(User user) {
        //由于有很多用户,需要将用户存储到集合中,需要创建一个集合
//      ArrayList array = new ArrayList() ;
        //将用户存储到集合中
        array.add(user) ;
    }

}
package org.westos.game;

import java.util.Scanner;

//猜数字游戏的类
public class GuessNumberGame {

    // 无参构造私有
    private GuessNumberGame() {
    }

    //静态功能
    public static void start(){
        //产生一个随机数
        int number = (int) (Math.random()*100 +1) ;

        //定义一个统计变量
        int count = 0 ;
        //多次循环
        while(true){


            //创建键盘录入对象
            Scanner sc = new Scanner(System.in) ;
            System.out.println("请你输入一个数据:");
            int guessNumber = sc.nextInt() ;

            //统计变量++
            count ++ ;

            if(guessNumber>number){
                System.out.println("你要猜的数据"+guessNumber+"大了");

            }else if(guessNumber out.println("你要猜的数据"+guessNumber+"小了");
            }else{
                System.out.println("恭喜您"+count+"次猜中了");
                break ;
            }
        }


    }
}
package org.westos.test;

import java.util.Scanner;

import org.wesots.entity.User;
import org.westos.dao.UserDao;
import org.westos.dao.impl.UserDaoImpl;
import org.westos.game.GuessNumberGame;

/**
 * 用户的测试类
 * 
 * 注意事项:
 *      1)登陆功能和注册功能使用的是同一个集合,将集合的对象的数据共享,应该用static
 *      2):登陆成功应该退出界面,
 *          现在使用switch语句,遇见break,只是结束switch语句并不能结束循环语句----->
 * @author Apple
 */
public class UserTest {

    public static void main(String[] args) {
        //为了能够回来,加入while循环
        while(true){
            //给出选择的界面
            System.out.println("-------------------欢迎光临------------------------");
            System.out.println("请选择:");
            System.out.println("1  登陆");
            System.out.println("2  注册");
            System.out.println("3  退出");

            //创建键盘录入对象
            Scanner sc = new Scanner(System.in) ;

            //根据不同的选择给出界面,简单分析下
            //为了方便数据的录入,就是用String类型接收
            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("谢谢使用,下次再来...");

//                  break ;//遇见break,只是结束switch语句并不能结束循环语句
                    System.exit(0) ;
                }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 u = new User() ;
                u.setUsername(newUserName) ;
                u.setPassword(newPassword) ;

                //调用注册的功能:
                //接口多态:
//              UserDao ud = new UserDaoImpl() ;
                ud.regist(u) ;
                System.out.println("注册成功..");
                break ;
            case "3":
            default:
                System.out.println("谢谢使用,下次再来!");
                System.exit(0) ;
                break ;
            }
        }

    }
}

你可能感兴趣的:(项目练习)