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 admin@123.com
Tom
cat
tomcat
tomcat@cat.com
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 方法。
注意:
1 、 密码应该让用户输入两遍。
2 UserViewImpl 中应当有一个 UserBiz 类型的属性
7 ) 编写测试代码。
类图如下:
代码:
//实体类
public class User {
    private String username; //用户名
    private String password; //密码
    private String name; //真实姓名
    private String email; //邮箱

    //构造
    private User(){}
    public User(String username, String password, String name, String email) {
        this.username = username;
        this.password = password;
        this.name = name;
        this.email = email;
    }
    // getter/setter
    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;
    }
}
//UserBiz接口
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;
}
//UseView接口
public interface UserView {
    //登录方法
    void login();

    //注册方法
    void register();
}
//UserBizImpl实现类
public class UserBizlmpl implements UserBiz {
    // 保存用户信息,键为登录名,值为对应的User对象。
    Map<String, User> userMap = new HashMap<>();

    // 初始存储的用户信息
    {
        userMap.put("admin", new User("admin", "admin", "Administrator", "admin@123.com"));
        userMap.put("Tom", new User("Tom", "cat", "tomcat", "tomcat@cat.com"));
    }

    @Override
    public void register(String username, String password, String password2, String name, String email) throws RegisterException {
        // 可以使用 contains() 方法来判断元素是否存在于集合当中:
        if (userMap.containsKey(username))
            // 如果用户名在Map中已存在
            throw new RegisterException("抱歉亲亲!用户名:" + username + "已经创建过账户了哦~");
        // 如果两次输入密码不一致
        if (!password.equals(password2))
            throw new RegisterException("您两次输入的密码不同,请重试~");
        // 注册成功,存入Map
        userMap.put(username, new User(username, password, name, email));
        System.out.println(username + "恭喜你,注册成功!");
    }


    @Override
    public void login(String username, String password) throws LoginException {
        // 可以使用 contains() 方法来判断元素是否存在于集合当中:
        if (!userMap.containsKey(username))
            // 如果用户名在Map中不存在
            throw new LoginException("抱歉亲亲!未找到用户名:" + username + ",请注册!");
        // 如果账号密码不匹配 Map.get()获取指定 key 对应对 value,要注意这个get后获得的是User对象,想要密码还得调用getpassword
        if (!password.equals(userMap.get(username).getPassword()))
            throw new LoginException("密码错误,请重试!");
        // 登录成功
        System.out.println("登录成功!"+ username + "欢迎回家~");
    }
}
//UserViewImpl实现类
public class UserViewImpl implements UserView {
    UserBiz ub = new UserBizlmpl();
    Scanner scanner = new Scanner(System.in);

    //登录,输入用户名密码
    @Override
    public void login() {
        System.out.println("请输入用户名:");
        String username = scanner.nextLine();
        System.out.println("请输入密码:");
        String password = scanner.nextLine();
        try {
            //调用UserBiz接口登录方法
            ub.login(username,password);
        }catch (LoginException le){
            le.printStackTrace();
        }
    }

    @Override
    public void register() {
        System.out.println("请输入用户名:");
        String username2 = scanner.nextLine();
        System.out.println("请输入密码:");
        String password2 = scanner.nextLine();
        System.out.println("请再次输入密码:");
        String password3 = scanner.nextLine();
        System.out.println("请输入真实姓名:");
        String name = scanner.nextLine();
        System.out.println("请输入邮箱:");
        String email = scanner.nextLine();
        try{
            ub.register(username2,password2,password3,name,email);
        }catch (RegisterException re){
            re.printStackTrace();
        }
    }
}
//Login异常类
public class LoginException extends Exception{
    public LoginException() {
    }

    public LoginException(String message) {
        super(message);
    }
}
//注册异常类
public class RegisterException extends Exception{
    public RegisterException() {
    }

    public RegisterException(String message) {
        super(message);
    }
}
//测试
public class TestUser {
    public static void main(String[] args) {
        UserView uw = new UserViewImpl();
        // uw.register();
        uw.login();
    }
}

  • 16
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值