Java学习记录——系统的用户登录和注册模块

题目

完成某个计费系统的用户登录和注册模块,要求如下:  
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) throws RegisterException //用户注册  
void login(String username, String password) throws LoginException //用户登录  
其中register 方法接受两个password 参数,原因是:在用户注册时,需要输入
两遍password,只有两次输入的password 一致,才允许注册。  
4) 创建UserBiz 接口的实现类。其中  
为该实现类创建一个属性,该属性为一个Map,用来保存已注册的用户信息。
Map 的键为用户登录名,值为登录名对应的User 对象。初始情况下,Map 中
保存的对象为以下两个:  

用户名 密码   真实姓名    电子邮件  
admin admin   Administrator   [email protected]
Tom   cat    tomcat    [email protected]

register 方法在以下两种情况下抛出异常:  
1) username 在Map 中已存在  
2) 两次输入的password 不一致  
login 方法在以下两种情况下抛出异常:  
1) username 不存在  
2) username 和password 不匹配  
5) 创建一个UserView 接口,该接口中定义两个方法:  
void login();  
void register();  
 
6) 创建UserView 接口的实现类。  
该实现类的login 方法中,利用命令行,让用户输入用户名和密码,之后调用
UserBiz 中的login 方法。部分代码如下:  
void login(){  
System.out.println(“请输入用户名:”);  
String username = /*读入用户名…*/;  
System.out.println(“请输入密码”);  
String password = /*读入密码*/;  
//调用UserBiz 中的login 方法  
}  
该类的register 方法采用类似的方法,让用户输入注册时需要的信息,然后调用 
UserBiz 中的register 方法。


User类:

package billing_System;

/**
 * 创建一个User 类,包括:用户登录名(username)、密码(password)、用
 * 户真实姓名(name)、电子邮件地址(email)属性和相应的构造方法及set/get 方
 * 法。
 */
public class User {

    private String username;
    private String password;
    private String name;
    private String email;

    public User() {
    }

    public User(String username, String password, String name, String email) {
        this.username = username;
        this.password = password;
        this.name = name;
        this.email = email;
    }

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

LoginException 类

package billing_System;

public class LoginException extends RuntimeException {
    public LoginException(String message) {
        super(message);
    }
}

RegisterException类

package billing_System;

public class RegisterException extends RuntimeException {
    public RegisterException(String message) {
        super(message);
    }
}

UserBiz接口

package billing_System;

/**
 * 创建一个UserBiz 接口,该接口中定义两个方法:
 * void register(String username, String password, String password2,
 * String name, String email) throws RegisterException //用户注册
 * void login(String username, String password) throws LoginException //用户登录
 * 其中register 方法接受两个password 参数,原因是:在用户注册时,需要输入
 * 两遍password,只有两次输入的password 一致,才允许注册。
 */
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; //用户登录

}

UserBiz接口实现类UserBizImpl类

package billing_System;

import java.util.HashMap;
import java.util.Map;

/**
 * 4) 创建UserBiz 接口的实现类。其中
 * 为该实现类创建一个属性,该属性为一个Map,用来保存已注册的用户信息。
 * Map 的键为用户登录名,值为登录名对应的User 对象。初始情况下,Map 中
 * 保存的对象为以下两个:
 * 用户名    密码      真实姓名          电子邮件
 * admin    admin    Administrator    [email protected]
 * Tom      cat      tomcat           [email protected]
 * register 方法在以下两种情况下抛出异常:
 * 1) username 在Map 中已存在
 * 2) 两次输入的password 不一致
 * login 方法在以下两种情况下抛出异常:
 * 1) username 不存在
 * 2) username 和password 不匹配
 */
public class UserBizImpl implements UserBiz {

    Map map = new HashMap<>();

    {
        map.put("admin",new User("admin","admin","Administrator","[email protected]"));
        map.put("Tom",new User("Tom","cat","tomcat","[email protected] "));
    }

    @Override
    public void register(String username, String password, String password2,
                         String name, String email) throws RegisterException {
        if (map.get(username) == null){
            if (password.equals(password2)) {
                map.put(username, new User(username, password, name, email));
                System.out.println("注册成功!");
            }else {
                throw new RegisterException("密码确认错误!");
            }
        }else {
            throw new RegisterException("用户已存在!");
        }
    }

    @Override
    public void login(String username, String password) throws LoginException {
        if (map.get(username) != null) {
            if ((map.get(username).getPassword()).equals(password)) {
                System.out.println("登录成功!");
            }else {
                throw new LoginException("密码错误!");
            }
        }else {
            throw new LoginException("用户不存在!");
        }
    }
}

UserView 接口

package billing_System;

/**
 * 创建一个UserView 接口,该接口中定义两个方法:
 * void login();
 * void register();
 */
public interface UserView {
    void login();
    void register();
}

 UserView 接口实现类UserViewImpl类

package billing_System;

import java.util.Scanner;

/**
 * 创建UserView 接口的实现类。
 * 该实现类的login 方法中,利用命令行,让用户输入用户名和密码,之后调用
 * UserBiz 中的login 方法。部分代码如下:
 * void login(){
 * System.out.println(“请输入用户名:”);
 *        String username = /读入用户名…/;
 *        System.out.println(“请输入密码”);
 *        String password= /读入密码/;
 *        //调用UserBiz 中的login 方法
 *}
 *该类的register 方法采用类似的方法,让用户输入注册时需要的信息,然后调用
 *UserBiz 中的register 方法。
 */
public class UserViewImpl implements UserView {
    Scanner input = new Scanner(System.in);
    UserBiz ub = new UserBizImpl();

    @Override
    public void login() {
        System.out.println("请输入用户名:");
        String username = input.next();
        System.out.println("请输入密码:");
        String password= input.next();
        //调用UserBiz 中的login 方法
        try {
            ub.login(username, password);
        }catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

    @Override
    public void register() {
        System.out.println("请输入用户名:");
        String username = input.next();
        System.out.println("请输入密码:");
        String password = input.next();
        System.out.println("请输入确认密码:");
        String password2 = input.next();
        System.out.println("请输入真实姓名:");
        String name = input.next();
        System.out.println("请输入邮箱地址:");
        String email = input.next();
        //调用UserBiz 中的login 方法
        try {
            ub.register(username, password, password2, name, email);
        }catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

Main类

package billing_System;

public class Main {
    public static void main(String[] args) {
        UserViewImpl uvi = new UserViewImpl();
        while (true) {
            System.out.println("选择操作:\n\t1)登录\n\t2)注册\n\t其他)退出");
            String key = uvi.input.next();
            switch (key){
                case "1":
                    uvi.login();
                    break;
                case "2":
                    uvi.register();
                    break;
                default:
                    return;
            }
        }
    }
}

 

你可能感兴趣的:(Java学习笔记,java)