Java用户注册程序(正则表达式;异常;日期类)

本文将介绍如何使用Java编写用户注册程序,涵盖正则表达式进行邮箱和手机号验证,异常处理确保程序健壮性,以及日期类库的运用来记录用户注册时间。
package usersystem;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class UserSystem {

   
    public static void main(String[] args) {
        // TODO code application logic here
        UserDao dao = new UserDaoForArray();
		
	Application app=new Application(dao);
		
	System.out.println("******注册用户******");
	app.registe();
		
	
		
	System.out.println("******登录******");
	app.login();
    }
    
}

interface UserDao {
    public User getUser(String userName,String password);
	
    public boolean addUser(User user);

}
class UserDaoForArray implements UserDao{
        private User[] data;
	private int count=0;
	
	public UserDaoForArray(){
		data=new User[10];
	}
	
	public boolean addUser(User user) {
		if(count==data.length){
			return false;
		}
		
		for(int i=0;i<count;i++){
			if(data[i].getName().equals(user.getName())){
				return false;
			}
		}
		
		data[count]=user;
		count++;
		return true;
	}

	public User getUser(String userName, String password) {
		for(int i=0;i<count;i++){
			if(data[i].getName().equals(userName) && data[i].getPassword().equals(password) ){
				return data[i];
			}
		}
		return null;
	}
    
}
 class User {
    
    private String name;
    private String password;
    private String email;
    private String qq;
    private Date birthday;
    private String phoneNumber;	
	
    public User(String name, String password, String email, String qq,
			Date birthday, String phoneNumber) {
		super();
		this.name = name;
		this.password = password;
		this.email = email;
		this.qq = qq;
		this.birthday = birthday;
		this.phoneNumber = phoneNumber;
	}
	/*public User() {
		super();
		// TODO Auto-generated constructor stub
	}*/
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getQq() {
		return qq;
	}
	public void setQq(String qq) {
		this.qq = qq;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public String getPhoneNumber() {
		return phoneNumber;
	}
	public void setPhoneNumber(String phoneNumber) {
		this.phoneNumber = phoneNumber;
	}

	public String toString(){
	    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		
	    StringBuilder builder = new StringBuilder("");
	    builder.append("用户名:"+name+"\n");
	    builder.append("密码:"+password+"\n");
	    builder.append("email:"+email+"\n");
	    builder.append("QQ:"+qq+"\n");
	    builder.append("生日:"+sdf.format(birthday)+"\n");//format方法:Date数据转换成String
	    builder.append("手机:"+phoneNumber);
		
	    return builder.toString();
	}        
}
 class Application {
	private UserDao dao;
	private String regex_name="\\w{6,8}";
	private String regex_password="[a-zA-Z]{4,8}";
	private String regex_email="[a-zA-Z0-9_+.-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z0-9]{2,4}";
	private String regex_qq="[1-9][0-9]{4,11}";
	private String regex_birthday="(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)";
	private String regex_phoneNumber="((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[05-9]))\\d{8}";
	public Application(UserDao dao){
		this.dao=dao;
	}
	
	public void setDao(UserDao dao) {
		this.dao = dao;
	}

	public void login(){
		Scanner scn=new Scanner(System.in);
		
		System.out.print("请输入用户名:");
		String userName=scn.next();
		System.out.print("请输入密码:");
		String password=scn.next();
		
		User user=dao.getUser(userName,password);
		if(user==null){
			System.out.println("登录失败,用户名或密码不正确");
		}else{
			System.out.println(user.getName()+"已登录");
		}
	}
	
	public void registe(){
		Scanner scn=new Scanner(System.in);
		
		System.out.print("请输入用户名:");
                System.out.println("用户名(字母、数字和下划线)6-8个字符:");
                while(!scn.hasNext(regex_name)){
                    scn.next();
                    System.out.println("输入不合要求,重新输入!");
                }
		String userName=scn.next();
                
		System.out.print("请输入密码:");
                System.out.println("密码(只能是字母)4-8个字符:");
                String password=null;
                while(true){
                    if(!scn.hasNext(regex_password)){
                        scn.next();
                        System.out.println("输入不合要求,重新输入!");
                        continue;
                    }               
		    password=scn.next();
		    System.out.println("请再次输入密码:");
		    String password2=scn.next();
		    
		    if(!(password.equals(password2))){
			System.out.println("两次输入的密码不相符,请重新输入!");			
		    }
                    else break;
                }
                
                System.out.println("请输入邮箱:");		
		while(!scn.hasNext(regex_email)){
			System.out.println("输入的邮箱格式错误,请重新输入!");			
			scn.next();
		}
                String email=scn.next();
                
                System.out.println("QQ:");		
		while(!scn.hasNext(regex_qq)){
			System.out.println("输入的QQ格式错误,请重新输入!");			
			scn.next();
		}
                String qq=scn.next();
                
                System.out.println("生日(yyyy-MM-dd):");
                Date birthday=null;
                SimpleDateFormat  sdf = new SimpleDateFormat("yyyy-MM-dd");
                sdf.setLenient(false);
//setLenient(boolean lenient):
//该方法是用来控制是否将正确格式的不正确时间转化成正确的时间, 
//默认为true,设置为false时,如果时间不正确,不会自动转化,而是抛出java.text.ParseException异常。
                while(birthday==null){
		    while(!scn.hasNext(regex_birthday)){
			System.out.println("输入的生日格式有误,请重新输入!");			
			scn.next();
		    }
                    String birth=scn.next();
		   	
		    try{
			birthday = sdf.parse(birth);//parse方法,将String日期变成Date
                        
		    }catch (ParseException e) {
			System.out.println("输入的生日格式有误,请重新输入!");
		    }
                }
                
                System.out.println("手机:");		
		while(!scn.hasNext(regex_phoneNumber)){
			System.out.println("输入的手机格式有误,请重新输入!");			
			scn.next();
		}
                String phone=scn.next();
                
		User user=new User(userName,password,email,qq,birthday,phone);
		if(dao.addUser(user)){
			System.out.println("注册成功!");
                        System.out.println(user);
		}else{
			System.out.println(userName+",注册失败,可能存在同名用户!");
		}		
	}    
}


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值