练习HashSet类的使用,字符串操作及一些常用类的使用。练习面向对象的编程思维。
项目工程文件:
包含用户类User,校验信息类ChackInfo,新用户注册类UserRegister .
用户类 User.java
1 package cn.ftf.sina;
2
3 import java.util.Date;
4
5 /**
6 * 模拟注册新浪新用户---用户类
7 * @author 房廷飞
8 *
9 */
10 public class User {
11 private String userName;
12 private String password;
13 private Date brithday;
14 private String tellNumber;
15 private String email;
16 public User(String userName, String password, Date birthday, String tellNumber, String email) {
17 super();
18 this.userName = userName;
19 this.password = password;
20 this.brithday = birthday;
21 this.tellNumber = tellNumber;
22 this.email = email;
23 }
24
25 //重写toString方法
26 @Override
27 public String toString() {
28 return "User [userName=" + userName + ", password=" + password + ", brithday=" + brithday + ", tellNumber="
29 + tellNumber + ", email=" + email + "]";
30 }
31
32 //重写equal方法,以用户名为是否重复的依据
33 @Override
34 public int hashCode() {
35 final int prime = 31;
36 int result = 1;
37 result = prime * result + ((userName == null) ? 0 : userName.hashCode());
38 return result;
39 }
40 @Override
41 public boolean equals(Object obj) {
42 if (this == obj)
43 return true;
44 if (obj == null)
45 return false;
46 if (getClass() != obj.getClass())
47 return false;
48 User other = (User) obj;
49 if (userName == null) {
50 if (other.userName != null)
51 return false;
52 } else if (!userName.equals(other.userName))
53 return false;
54 return true;
55 }
56
57
58 }
校验信息类 ChackInfo.java
1 package cn.ftf.sina;
2 /**
3 * 校验信息类
4 * @author 房廷飞
5 *
6 */
7
8 import java.text.DateFormat;
9 import java.text.ParseException;
10 import java.text.SimpleDateFormat;
11 import java.util.Date;
12 import java.util.HashSet;
13
14 public class ChackInfo {
15 public static HashSet<User> has=new HashSet<User>(); //初始化chackInfo类,新建一个HashSet集合,目的是将用户集合掺入该类中
16 public ChackInfo(HashSet<User> has) { //构造方法,将用户类USER_DATA传入该类中
17 this.has=has;
18 }
19 //检查用户输入的信息是否合法
20 public String chackAction(String userName,String password,String rePassword,String birthday ,String phone,String email) {
21 StringBuffer str=new StringBuffer(); //新建一个StringBuffer类,用存储要提供给用户的信息 最好是StringBuilder类。StringBuilder类比StringBuffer类节省资源,但线程不安全。
22 int state=1; //int 状态信息,1正常,2异常
23 if(!password.equals(rePassword)) { //判断两个字符串是否一样,equals方法
24 str.append("两次密码输入不一致!"); //向StringBuffer类中添加字符串 .append("")
25 state=2;
26 }
27 //判断日期格式是否正确
28 if(birthday.length()!=10) {
29 str.append("输入日期格式有误1!");
30 state=2;
31 }else {
32 /*
33 for (int i=0;i<birthday.length();i++) {
34 if(i==4||i==7) {
35 if(birthday.charAt(i)!='-') {
36 str.append("输入日期格式有误2!");
37 state=2;
38 }
39 }
40 }
41 */
42 for (int i=0;i<birthday.length();i++) {
43 Character thischar=new Character(birthday.charAt(i)); //包装类,字符串类Character,这里使用包装类是为了下面判断是否是0-9的数字
44 if(i==4||i==7) {
45 if(!(thischar=='-')) {
46 str.append("输入日期格式有误2!");
47 state=2;
48 }
49 }else {
50 if(!(Character.isDigit(thischar))) { //判断是否是0-9的数字,Character.isDiggit(char)方法
51 str.append("输入日期格式有误3!");
52 state=2;
53 }
54 }
55 }
56 }
57
58 //手机号码格式判断
59 if(phone.length()!=11) {
60 str.append("手机号码格式不正确1");
61 state=2;
62 }else{
63 if(phone.startsWith("13")||phone.startsWith("15")||phone.startsWith("17")||phone.startsWith("19")) { //phone字符串是否是这些开头
64 str.append("手机号码格式不正确2!");
65 state=2;
66 }
67 }
68
69 //邮箱判断
70 if(!email.contains("@")) { //Email字符串是否包含“@”
71 str.append("邮箱格式不正确!");
72 state=2;
73 }
74 //日期类的用法
75 if(state==1) {
76 DateFormat format=new SimpleDateFormat("yyy-MM-dd"); //日期DateFormat类,这里需要专门学习了解下,实例化一个DateFormat类,指明期望的格式
77 Date dataBirthday=null; //空的Date类
78 try {
79 dataBirthday=format.parse(birthday); //将字符串日期转换为日期对象
80 } catch (ParseException e) {
81 // TODO Auto-generated catch block
82 e.printStackTrace();
83 }
84
85
86 User newUser=new User(userName,rePassword,dataBirthday,phone,email); //形成一个新用户
87 if(!has.add(newUser)) { //将用户添加到 用户集合中
88 str.append("用户重复");
89 state=2;
90 }
91 if(state==1) {
92 str.append("注册成功!!!");
93 }
94 }
95
96 return str.toString(); //String方法返回校验结果字符串
97
98 }
99
100 }
新用户注册类 UserRegister.java
1 package cn.ftf.sina;
2 /**
3 * 用户注册类
4 * @author 房廷飞
5 *
6 */
7
8 import java.util.Date;
9 import java.util.HashSet;
10 import java.util.Scanner;
11
12 public class UserRegister {
13 public static HashSet<User>USER_DATA=new HashSet<User>(); //static 对类进行初始化,新建一个HashSet集合USER_DATA
14 public static void main(String[] args) {
15 addUserFirst(); //先定义一个方法,写入USER_DATA几个元素初始化
16 Scanner in=new Scanner(System.in);
17 System.out.println("请输入用户名:");
18 String userName=in.nextLine();
19 System.out.println("请输入密码:");
20 String password=in.nextLine();
21 System.out.println("请重复密码:");
22 String rePassword=in.nextLine();
23 System.out.println("请输入出生年月日:");
24 String birthday=in.nextLine();
25 System.out.println("请输入手机号码:");
26 String phone=in.nextLine();
27 System.out.println("请输入Email:");
28 String email=in.nextLine();
29 ChackInfo ch=new ChackInfo(USER_DATA); //新建一个检查对象ch,根据chackInfo类的构造方法传入USER_DATA集合
30 String result=ch.chackAction(userName, password, rePassword, birthday, phone, email); //调用chackInfo的方法,传入参数
31 System.out.println("注册结果:"+result);
32 }
33
34
35 private static void addUserFirst() { //写入集合几个元素初始化
36 User u1=new User("张三","ss,234",new Date(),"18888888888","zhang@qq.com");
37 User u2=new User("张wu","qs,234",new Date(),"18222884568","zhuangng@qq.com");
38 USER_DATA.add(u2);
39 USER_DATA.add(u1);
40
41 }
42
43 }