- *(自定义异常)完成某个计费系统的用户登录和注册模块,要求如下:
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 类型的属性
User.java
package chp11_14;
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) {
super();
this.username = username;
this.password = password;
this.name = name;
this.email = email;
}
public User() {
super();
// TODO Auto-generated constructor stub
}
//get|set方法
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.java
package chp11_14;
//登陆异常
public class LoginException extends Exception{
public LoginException(String s) {
super(s);
// TODO Auto-generated constructor stub
}
public LoginException() {
// TODO Auto-generated constructor stub
}
}
RegisterException.java
package chp11_14;
//注册异常
public class RegisterException extends Exception{
public RegisterException(String s) {
super(s);
// TODO Auto-generated constructor stub
}
public RegisterException() {
// TODO Auto-generated constructor stub
}
}
UserBiz.java
package chp11_14;
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;
}
UserBizlmpl.java
package chp11_14;
public class UserBizlmpl implements UserBiz{
static int index=0;
static User[] map=new User[10];
static{
map[0]=new User("admin", "admin", "Adminstrator", "admin@123.com");
map[1]=new User("Tom", "cat", "tomcat", "tomcat@cat.com");
index=2;
}
@Override
public void register(String username, String password, String password2, String name, String email) throws RegisterException {
// TODO Auto-generated method stub
if(!password.equals(password2))
throw new RegisterException("两次密码不一致");
for(int i = 0;i<map.length;i++){
if(map[i] ==null)
break;
if(map[i].getUsername().equals(username))
throw new RegisterException("用户名已经存在");
}
map[index]=new User(username, password2, name, email);
index++;
System.out.println("注册成功");
}
@Override
public void login(String username, String password) throws LoginException {
// TODO Auto-generated method stub
boolean flag = false;
for(int i=0;i<map.length;i++){
if(map[i]==null)
break;
if(map[i].getUsername().equals(username))
if(!map[i].getPassword().equals(password))
throw new LoginException("用户名与密码不匹配");
if(map[i].getUsername().equals(username))
flag=true;
}
if(!flag)
throw new LoginException("用户名不存在");
System.out.println("登陆成功");
}
}
UserView.java
package chp11_14;
public interface UserView {
void login();
void register();
}
UserViewlmpl.java
package chp11_14;
import java.util.Scanner;
public class UserViewlmpl implements UserView{
UserBiz ub;
public void show(){
ub =new UserBizlmpl();
}
@Override
public void login(){
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String username=sc.next();
System.out.println("请输入密码:");
String password=sc.next();
try {
show();
ub.login(username, password);
} catch (LoginException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return ;
}
}
@Override
public void register(){
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
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 {
show();
ub.register(username, password, password2, name, email);
} catch (RegisterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return ;
}
}
}
TestUser.java
package chp11_14;
import java.util.Scanner;
public class TestUser {
public static void main(String[] args){
UserViewlmpl uv = new UserViewlmpl();
do{
Scanner sc = new Scanner(System.in);
System.out.println("请选择执行的操作:\\n1、登陆\\n2、注册\\n3 退出");
int i = sc.nextInt();
if(i==1)uv.login();
else if(i==2)uv.register();
else break;
}while(true);
}
}