杨老师课堂_Java核心技术下之控制台模拟微博用户注册案例
案例设计背景介绍:
编写一个新浪微博用户注册的程序,要求使用HashSet集合实现。
假设当用户输入用户名、密码、确认密码、生日(输入格式yyyy-mm-dd为正确)、手机号码(手机长度为11位,并且以13、15、17、或18开头的手机号为正确)、
邮箱(包含符号“@”为正确)信息之后,判断信息是否输入正确,
正确校验用户是否重复注册,如果不是重复注册,则注册成功。
案例效果预览图:
注册成功:

注册失败:
失败1:

失败2:

失败3:

案例设计代码:
本案例共设计到3个类,用户实体类、用户注册类、用户信息校验类。
用户注册类:
package cn.javabs.setdemo; import java.util.HashSet;
import java.util.Scanner;
/**
* Date:2018-05-14
* @author Mryang
*
*
*思路分析:
1.为了便于存储用户信息,需要创建一个用户类,在类中重写其中的HashCode()方法,
其返回用户名的哈希值,再重写equals()方法,来比较对象的用户名属性是否相等。 2.有了用户类之后,再需要1一个用户注册类来模拟注册信息,
该类中可以用HashSet集合来创建一个数据列表,然后向列表中添加两条初始注册信息。 3.从控制台获取用户填写信息,可以通过Scanner类的nextLine()方法来实现,获取后,需要将获取的信息校验。 4.校验信息可以创建一个检验类,在类中实现用户输入的信息的方法。
检验结束后,如果检验结果错误就直接返回错误信息,
这里可以声明一个检验结果变量和一个检验状态变量。
检验结果变量用于存储提示信息,检验状态变量用于存储结果的判断标识。 5.当用户输入的信息不满足格式时,需要修改变量1状态并存储错误信息。 6.判断校验状态,如果所有信息都通过校验,则将用户信息创建成为用户对象,
通过将对象添加到用户列表返回结果来判断用户名是否重复,并记录下返回结果信息。 */
public class UserRegister {
public static HashSet<User> USER_DATE =new HashSet<User>();
public static void main(String[] args) {
initData(); //初始化人员信息
Scanner scanner = new Scanner(System.in);
System.out.print("请输入用户名:");
String userName = scanner.nextLine(); //获取用户名
System.out.print("请输入登录密码:");
String password = scanner.nextLine(); //获取登录密码
System.out.print("请重复密码:");
String rePassword = scanner.nextLine(); // 获取重复密码
System.out.print("出生日期:");
String birthday = scanner.nextLine(); //获取出生日期
System.out.print("请输入手机号:");
String telNumber = scanner.nextLine(); // 获取手机号
System.out.print("请输入邮箱:");
String email = scanner.nextLine(); // 获取邮箱账号
//校验信息,返回登录状态信息
CheckInfo checkInfo = new CheckInfo(USER_DATE);
String result = checkInfo.checkAction(userName,password,rePassword,birthday,telNumber,email);
System.out.println("注册结果:"+result);
}
/**
* 初始化数据
* 已经存在的用户
*/
private static void initData() {
User user1 = new User("小明", "123456", "1998-02-06", "18810319240", "2690582170@qq.com");
User user2 = new User("小王", "654321", "1997-01-01", "15379648332", "1234567890@qq.com");
USER_DATE.add(user1);
USER_DATE.add(user2);
} }
用户实体类
package cn.javabs.setdemo;
/**
* 用户类
*/
public class User {
private String userName ; //用户名
private String password ; //密码
private String birthday ; //生日
private String telNumber ; //手机号
private String email ; //邮箱
public User(){
}
public User(String userName, String password, String birthday, String telNumber, String email) {
super();
this.userName = userName;
this.password = password;
this.birthday = birthday;
this.telNumber = telNumber;
this.email = email;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((userName == null) ? 0 : userName.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
User other = (User) obj;
if (userName == null) {
if (other.userName != null)
return false;
} else if (!userName.equals(other.userName))
return false;
return true;
}
}
注册用户信息校验类
package cn.javabs.setdemo; import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet; /**
* @author MrYang
* @version 创建时间:2018年5月14日
*
*/
/**
* 校验信息类
*/
public class CheckInfo {
public static HashSet<User> USER_DATE = new HashSet<User>();
public CheckInfo(HashSet<User> USER_DATE) {
this.USER_DATE = USER_DATE;
}
//校验用户信息返回登录状态
public String checkAction(String userName, String password, String rePassword, String birthday, String telNumber,
String email) {
StringBuilder result = new StringBuilder(); //字符串构造器
// 1 代表成功 ,2 代表失败
int state = 1;
//密码判断
if (!password.equals(rePassword)) {
System.out.println("两次输入的密码不一致! \r\n");
state = 2 ;
}
//生日判断
if (birthday.length() != 10) {
System.out.println("生日格式不正确!\r\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("生日格式不正确!\r\n");
state =2 ;
}
}else {//验证除了第四位和第七位的字符是否为数字。
if (!(Character.isDigit(thisChar))) {
result.append("生日格式不正确\r\n");
state =2 ;
}
}
}
}
//手机号判断
if (telNumber.length()!=11) {
result.append("手机号码不正确!\r\n");
state =2 ;
//默认有效手机号为13,15,17和18开头的手机号
}else if (!(telNumber.startsWith("13")||telNumber.startsWith("15")||telNumber.startsWith("17")
|| telNumber.startsWith("18"))) {
state = 2;
}
//邮箱判断
if (!email.contains("@")) {
result.append("邮箱不正确!\r\n");
state = 2;
}
//如果以上信息都校验无误,则将新用户加入到集合
if (state ==1 ) {
//格式化日期返会Date 对象
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date dateBirthday = null;
try {
dateBirthday = format.parse(birthday);//parse()从给定的字符串开始解析文本,以生成一个日期。
} catch (ParseException e) {
e.printStackTrace();
}
User newUser = new User(userName, password, birthday, telNumber, email);
//将新用户添加到列表中,同时根据HashSet判断出用户名是否重复
if (!USER_DATE.add(newUser)) {
result.append("用户重复!");
state = 2 ;
}
if (state ==1 ) {
result.append("注册成功!");
}
}
return result.toString();//toString()方法: 将指定的数据以字符串形式返回。
}
}
作者: 杨校
出处: http://www.cnblogs.com/xiaoxiao5016
分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 如有问题, 可邮件(397583050@qq.com)咨询。
杨老师课堂_Java核心技术下之控制台模拟微博用户注册案例的更多相关文章
- 杨老师课堂_Java核心技术下之控制台模拟记事本案例
预览效果图: 背景介绍: 编写一个模拟记事本的程序通过在控制台输入指令,实现在本地新建文件打开文件和修改文件等功能. 要求在程序中: 用户输入指令1代表"新建文件",此时可以从控制 ...
- 杨老师课堂之JavaScript定时器_农夫山泉限时秒杀案例
预览效果图: 使用到的知识点: 定时器 setInterval(函数,毫秒):在指定的毫秒数后调用函数或执行一段代码 取消定时器 clearInterval:取消由setInterval设置的定时器 ...
- 杨老师课堂_VBA学习教程之根据部门列创建工作表
课件下载 : 方式1:本节课件下载地址:链接: https://pan.baidu.com/s/1rf5pRmZ95fjVbz70KYi6Aw 密码: q9yk 方式2:或点击此处下载 效果预览图: ...
- 互评Alpha版本——杨老师粉丝群——Pinball
一.基于NABCD评论作品,及改进建议 1.根据(不限于)NABCD评论作品的选题 (1)N(Need,需求) 成语学习对除汉语言专业外的大学生的需求并不是很高,初中生和高中生因为在升学时需要参加语文 ...
- Ubuntu下QT控制台程序无法运行的解决方案以及XTerm的配置方法
Ubuntu下QT控制台程序无法运行的解决方案以及XTerm的配置方法 最近由于老师要求要在Ubuntu下QT上进程多线程服务器的开发,虽然只是单纯的调用qt的network模块,但是为了避免麻烦,我 ...
- 271. 杨老师的照相排列【线性DP】
杨老师希望给他的班级拍一张合照. 学生们将站成左端对齐的多排,靠后的排站的人数不能少于靠前的排. 例如,12名学生(从后向前)可以排列成每排5,3,3,1人,如下所示: X X X X X X X X ...
- Final互评------《弹球学成语》---- 杨老师粉丝群
一.基于NABCD评论作品,及改进建议 1.根据(不限于)NABCD评论作品的选题; N(Need,需求):本产品面相青少年及小学生,基于这些用户数量再加上一些休闲玩家,需求量还是比较大的. A ...
- Final版本互评——杨老师粉丝群《PinBall》
基于NABCD评论作品,及改进建议 1.根据(不限于)NABCD评论作品的选题 (1)N(Need,需求) 随着民族自信的觉醒,民主文化越来越受到重视,语文在高考中的比重也不断增加,在这种大环境下,成 ...
- 新疆大学ACM-ICPC程序设计竞赛五月月赛(同步赛)C 勤奋的杨老师【DP/正反LIS/类似合唱队形】
链接:https://www.nowcoder.com/acm/contest/116/C 来源:牛客网 题目描述 杨老师认为他的学习能力曲线是一个拱形.勤奋的他根据时间的先后顺序罗列了一个学习清单, ...
随机推荐
- android 加载图片oom若干方案小结
本文根据网上提供的一些技术方案加上自己实际开发中遇到的情况小结. 众所周知,每个Android应用程序在运行时都有一定的内存限制,限制大小一般为16MB或24MB(视手机而定).一般我们可以通过获取当 ...
- mysql进阶(六)模糊查询的四种用法介绍
mysql中模糊查询的四种用法介绍 这篇文章主要介绍了mysql中模糊查询的四种用法,需要的朋友可以参考下. 下面介绍mysql中模糊查询的四种用法: 1 %: 表示任意0个或多个字符.可匹配任意类型 ...
- JNI动态注册native方法及JNI数据使用
前言 或许你知道了jni的简单调用,其实不算什么百度谷歌一大把,虽然这些jni绝大多数情况下都不会让我们安卓工程师来弄,毕竟还是有点难,但是我们还是得打破砂锅知道为什么这样干吧,至少也让我们知道调用流 ...
- 《UNIX网络编程 卷1》之"学习环境搭建"(CentOS 7)
<UNIX网络编程 卷1>的源码可以从www.unpbook.com下载得到.解压之后的目录为unpv13e. 详细步骤 编译 进入unpv13e目录,按如下步骤编译: ./configu ...
- CSS解决无空格太长的字母,数字不会自动换行的问题
其实很简单,代码如下所示,注意 Style: <div class="detail_title" style="word-break: break-all;&quo ...
- 关于hashCode与equals
首先我得说明,在我们自己写得类中你可以复写这两个方法,此时从语法的角度来说,他们没关系. 在object中 public native int hashCode(); public boolean e ...
- 史上最全Android Studio快捷键 -2016-02-28
- android 高斯模糊实现
高斯模糊 高斯模糊就是将指定像素变换为其与周边像素加权平均后的值,权重就是高斯分布函数计算出来的值. 一种实现 点击打开链接<-这里是一片关于高斯模糊算法的介绍,我们需要首先根据高斯分布函数计算 ...
- 深入理解JNI
深入理解JNI 最近在学习android底层的一些东西,看了一些大神的博客,整体上有了一点把握,也产生了很多疑惑,于是再次把邓大神的深入系列翻出来仔细看看,下面主要是一些阅读笔记. JNI概述 JNI ...
- HFile
HFile存储格式 HBase中的所有数据文件都存储在Hadoop HDFS文件系统上,主要包括两种文件类型: 1. HFile, HBase中KeyValue数据的存储格式,HFile是Hadoop ...