版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/qq_42680327
/**
* @author 志
* @version 创建时间:2018年10月12日上午 11:12:59
*
*/
1、任务描述
编写一个新浪微博用户注册的程序,要求使用HashSet集合实现。
假设当用户输入用户名、密码、确认密码、生日(输入格式yyyy-mm-dd为正确)、手机号码(手机长度为11位,并且以13、15、17、或18开头的手机号为正确)、邮箱(包含符号“@”为正确)信息之后,判断信息是否输入正确,正确校验用户是否重复注册,如果不是重复注册,则注册成功。例如:用户信息列表中已经存在用户“lisi”,当lisi再次注册时,则输出“注册结果:用户重复!”。
2、运行结果
任务目标
- 学会分析"模拟新浪微博用户注册"程序的实现思路
- 根据思路独立完成"模拟新浪微博用户注册"程序源代码的编写、编译及运行
- 掌握Hashset存储数据的流程
实现思路
(1)为了便于存储用户信息,需要创建一个用户类,在类中重写其中的HashCode()方法,令其返回用户名的哈希值,再重写equals()方法,来比较对象的用户名属性是否相等。
(2)有了用户类之后,再需要1一个用户注册类来模拟注册信息,该类中可以用HashSet集合来创建一个数据列表,然后向列表中添加两条初始注册信息。
(3)从控制台获取用户填写信息,可以通过Scanner类的nextLine()方法来实现,获取后,需要将获取的信息校验。
(4)校验信息可以创建一个检验类,在类中实现用户输入的信息的方法。检验结束后,如果检验结果错误就直接返回错误信息,这里可以声明一个检验结果变量和一个检验状态变量。检验结果变量用于存储提示信息,检验状态变量用于存储结果的判断标识。
(5)当用户输入的信息不满足格式时,需要修改变量1状态并存储错误信息。
(6)判断校验状态,如果所有信息都通过校验,则将用户信息创建成为用户对象,通过将对象添加到用户列表返回结果来判断用户名是否重复,并记录下返回结果信息。
下面来看看代码
User类: 创建用户类,并重写其hashCode()方法和equals()方法。
package cn.itcast.chapter011;
import java.util.Date;
/**
* @author 志
* @version 创建时间:2018年10月12日上午 11:12:59
*
*/
public class user {
private String name;//用户名
private String mima;//密码
private Date birthday; //生日
private String telephone;//电话号码
private String email;//邮箱
//自己手动输入生日Date birthday
public user(String name, String mima, Date birthday, String telephone, String email) {
this.name = name;
this.mima = mima;
this.birthday = birthday;
this.telephone = telephone;
this.email = email;
}
//重写hashcode与equals方法
public int hashCode() {
return name.hashCode();
}
public boolean equals(Object obj) {
if(this==obj) { //判断是否为同一个对象
return true;
}
if(obj==null) { //判断这个对象是否为空
return false;
}
if(getClass()!=obj.getClass()) { //判断这个对象是否为user类型
return false;
}
user u1=(user)obj; //强制类型转换
if(name==null) { //判断集合中用户名是否为空
if(u1.name!=null) { //判断对象中用户名是否为空
return false;
}
else if(!name.equals(u1.name)) { //判断用户名是否相同
return false;
}
}
return true;
}
}
用户注册类:创建用户注册完类,模拟注册信息。
package cn.itcast.chapter011;
import java.util.Date;
import java.util.HashSet;
import java.util.Scanner;
//注册类信息
public class userregister {
public static HashSet<user> hs=new HashSet<user>(); //用户数据---无序
public static void main(String[] args) {
initdata(); //初始化人员信息
Scanner scan=new Scanner(System.in);
System.out.print("请输入用户名: ");
String name=scan.nextLine();
System.out.print("请输入密码: ");
String mima=scan.nextLine();
System.out.print("请重复密码: ");
String remima=scan.nextLine();
System.out.print("请输入出生日期: ");
String birthday=scan.nextLine();
System.out.print("请输入手机号码: ");
String telephone=scan.nextLine();
System.out.print("请输入电子邮箱: ");
String email=scan.nextLine();
//检验用户信息,返回登录信息
checkinfo checkinfo=new checkinfo(hs);
String result=checkinfo.checkaction(name, mima,
remima, birthday, telephone, email);
System.out.println("注册结果: "+result);
}
//初始化数据,创建用户信息
private static void initdata() {
user use1=new user("zhangsan", "zz.123", new Date(), "18810319249", "zhaowu@itcasat.cn");
user use2=new user("lisi", "xx.123", new Date(), "18810319240", "liliu@itcasat.cn");
hs.add(use1);
hs.add(use2);
}
}
创建信息校验类:
package cn.itcast.chapter011;
import java.util.Date;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.HashSet;
public class checkinfo {
public static HashSet<user> hs=new HashSet<user>(); //用户数据---无序
public checkinfo(HashSet<user> hs) {
this.hs=hs;
}
//检验用户信息,返回登录信息
public String checkaction(String name, String mima,
String remima, String birthday,
String telephone, String email) {
//StringBuilder是一个类,可以用来处理字符串
StringBuilder result=new StringBuilder();
int state=1; //1代表成功, 2代表失败
//密码判断
if(!mima.equals(remima)) {
result.append("两次输入密码不一致!\n");
state=2;
}
//生日判断
if(birthday.length()!=10) {
result.append("生日格式不正确!\n");
state=2;
}else {
for(int i=0;i<birthday.length();i++) {
Character thischar=birthday.charAt(i);
if(i==4 || i==7) {
if(!(thischar=='-')) {
result.append("生日格式不正确!\n");
state=2;
}else {
if((Character.isDigit(thischar))) {
result.append("");
state=2;
}
}
}
}
}
//手机号判断
if(telephone.length()!=11) {
result.append("手机号不正确!\n");
state=2;
}
else if(!(telephone.startsWith("13")
||telephone.startsWith("15")
||telephone.startsWith("17")
||telephone.startsWith("18"))) {
result.append("手机号不正确!\n");
state=2;
}
//邮箱判断
if(!email.contains("@")) { //判断邮箱地址,默认不带@符号的邮箱为无效邮箱
result.append("邮箱不正确!\n");
state=2;
}
//如果信息正确
if(state==1) {
DateFormat format=new SimpleDateFormat("yyy-MM-dd");
//databirthday--------------注意
Date databirthday=null;
try {
databirthday=format.parse(birthday);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//databirthday--------------注意
user newuser=new user(name, remima, databirthday, telephone, email);
if(!hs.add(newuser)) {
result.append("用户重复");
state=2;
}
if(state==1) {
result.append("注册成功!");
}
}
return result.toString();
}
}