java基础_模拟实现注册与登录

124 阅读4分钟

题目要求

1.创建一个User 类,包括:用户登录名(username)、密码(password)、用户真实姓 名(name)、电子邮件地址(email)属性和相应的构造方法及set/get 方法。  
2.创建两个自定义异常类,一个LoginException,表示登录异常。一个RegisterException, 表示注册异常。自定义的两个异常,都要求有一个接受字符串类型参数的构造方法。 
3.创建一个UserBiz 接口,该接口中定义两个方法:  
    void register(String username, String password, String password2,  String name, String email) //用户注册  
    void login(String username, String password)  //用户登录  
其中register 方法接受两个password 参数,原因是:在用户注册时,需要输入两遍 password,只有两次输入的password 一致,才允许注册。
4.创建UserBiz 接口的实现类。其中,为该实现类创建一个属性,该属性为一个Map,用来保存已注册的用户信息(可能很多,模拟数据库中已存在数据的表)。Map 的键为用户登录名,值为登录名对应的User 对象。初始情况下,Map 中保存的对 象为以下两个:
            用户名    密码	真实姓名	      电子邮件
            admin	admin	Administrator	admin@123.com
            tom     cat	    tomcat	        tomcat@cat.com
 register 方法在以下两种情况下抛出异常: 
            username 在Map 中已存在 
            两次输入的password 不一致 
 login 方法在以下两种情况下抛出异常: 
            username 不存在  
            username 和password 不匹配  
5.写一个类。  该实现类的login 方法中:让用户输入用户名和密码,之后调用UserBiz 中的login 方法,完成登录的业务逻辑;该类的register 方法中,通过让用户输入注册时需要的信息,然后调用 UserBiz 中的register 方法。 
6.编写测试代码
   注意:异常的抛出与处理

解答如下:

  1. User

    package com.java10.demo;
    
    /**
     * @author: Mr.shan
     * @date: 2022/6/29 20:36
     * @bz:
     */
    
    public class User {
        private String username;
        private String password;
        private String name;
        private String email;
    
    
        public User(String username, String password, String name, String email) {
            this.username = username;
            this.password = password;
            this.name = name;
            this.email = email;
        }
    
        public User() {
        }
    
        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;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getEmail() {
            return email;
        }
    
        public void setEmail(String email) {
            this.email = email;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "username='" + username + '\'' +
                    ", password='" + password + '\'' +
                    ", name='" + name + '\'' +
                    ", email='" + email + '\'' +
                    '}';
        }
    }
    
    
  2. RegisterException 注册异常类

    package com.java10.demo;
    
    /**
     * @author: Mr.shan
     * @date: 2022/6/29 20:38
     * @bz:
     */
    
    public class RegisterException extends Exception{
        public RegisterException() {
        }
    
        public RegisterException(String message) {
            super(message);
        }
    }
    
    
  3. LoginException 登录异常类

    package com.java10.demo;
    
    /**
     * @author: Mr.shan
     * @date: 2022/6/29 20:39
     * @bz:
     */
    
    public class LoginException extends Exception {
        public LoginException() {
        }
    
        public LoginException(String message) {
            super(message);
        }
    }
    
    
  4. UserBiz 用户服务接口

    package com.java10.demo;
    
    public interface UserBiz {
         void register(String username,String password,String password2,String name,String email)throws RegisterException;
         void login(String username,String password)throws LoginException;
        void see();
    }
    
  5. UserBizImpl 用户服务实现类

    package com.java10.demo;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * @author: Mr.shan
     * @date: 2022/6/29 20:42
     * @bz:
     */
    
    public class UserBizImpl implements UserBiz{
        private Map<String,User> userMap;
    
        public UserBizImpl() {
            userMap = new HashMap<>();
            userMap.put("admin",new User("admin","1","1","1"));
            userMap.put("js",new User("js","1","1","1"));
        }
    
        @Override
        public void register(String username, String password, String password2, String name, String email) throws RegisterException {
            User user = userMap.get(username);
            if (user!=null){
                throw new RegisterException("用户名已存在");
            }else if (!password2.equals(password)){
                throw new RegisterException("两次输入密码不相等");
            }else{
                userMap.put(username,new User(username,password,name,email));
                System.out.println("注册成功");
            }
        }
    
        @Override
        public void login(String username, String password) throws LoginException {
            User user = userMap.get(username);
            if (user==null){
                throw new LoginException("用户不存在");
            }else if(!user.getPassword().equals(password)){
                throw new LoginException("用户名和密码不匹配");
            }else{
                System.out.println("登陆成功");
            }
        }
    
        @Override
        public void see() {
            System.out.println(userMap.values());
        }
    }
    
    
    
  6. UserView 用户界面接口

    package com.java10.demo;
    
    public interface UserView {
        void register();
        void login();
    }
    
    
  7. UserViewImpl 用户界面实现类

    package com.java10.demo;
    
    import java.util.Scanner;
    
    /**
     * @author: Mr.shan
     * @date: 2022/6/29 20:55
     * @bz:
     */
    
    public class UserViewImpl implements UserView{
        UserBiz userBiz=new UserBizImpl();
        Scanner sc=new Scanner(System.in);
        @Override
        public void register() {
            System.out.println("请输入用户名");
            String username = sc.next();
            System.out.println("请输入密码");
            String password=sc.next();
            System.out.println("请再次输入密码");
            String password2=sc.next();
            System.out.println("请输入名字");
            String name = sc.next();
            System.out.println("请输入邮箱");
            String email = sc.next();
    
            try {
                userBiz.register(username,password,password2,name,email);
            } catch (RegisterException e) {
                e.printStackTrace();
            }
    
        }
    
        @Override
        public void login() {
            System.out.println("请输入用户名");
            String username = sc.next();
            System.out.println("请输入密码");
            String password=sc.next();
    
            try {
                userBiz.login(username,password);
            } catch (LoginException e) {
                e.printStackTrace();
            }
        }
    
        public void see(){
            userBiz.see();
        }
    }
    
    
    
  8. Test 测试类

    package com.java10.demo;
    
    import java.util.Scanner;
    
    /**
     * @author: Mr.shan
     * @date: 2022/6/29 20:55
     * @bz:
     */
    
    public class UserViewImpl implements UserView{
        UserBiz userBiz=new UserBizImpl();
        Scanner sc=new Scanner(System.in);
        @Override
        public void register() {
            System.out.println("请输入用户名");
            String username = sc.next();
            System.out.println("请输入密码");
            String password=sc.next();
            System.out.println("请再次输入密码");
            String password2=sc.next();
            System.out.println("请输入名字");
            String name = sc.next();
            System.out.println("请输入邮箱");
            String email = sc.next();
    
            try {
                userBiz.register(username,password,password2,name,email);
            } catch (RegisterException e) {
                e.printStackTrace();
            }
    
        }
    
        @Override
        public void login() {
            System.out.println("请输入用户名");
            String username = sc.next();
            System.out.println("请输入密码");
            String password=sc.next();
    
            try {
                userBiz.login(username,password);
            } catch (LoginException e) {
                e.printStackTrace();
            }
        }
    
        public void see(){
            userBiz.see();
        }
    }