案例设计背景介绍:

编写一个新浪微博用户注册的程序,要求使用HashSet集合实现。

假设当用户输入用户名、密码、确认密码、生日(输入格式yyyy-mm-dd为正确)、手机号码(手机长度为11位,并且以13、15、17、或18开头的手机号为正确)、

邮箱(包含符号“@”为正确)信息之后,判断信息是否输入正确,

正确校验用户是否重复注册,如果不是重复注册,则注册成功。

案例效果预览图:

注册成功:

注册失败:

失败1:

失败2:

失败3:

案例设计代码:

本案例共设计到3个类,用户实体类、用户注册类、用户信息校验类。

用户注册类:

packagecn.javabs.setdemo;importjava.util.HashSet;importjava.util.Scanner;/*** Date:2018-05-14

*@authorMryang

*

*

*思路分析:

1.为了便于存储用户信息,需要创建一个用户类,在类中重写其中的HashCode()方法,

其返回用户名的哈希值,再重写equals()方法,来比较对象的用户名属性是否相等。

2.有了用户类之后,再需要1一个用户注册类来模拟注册信息,

该类中可以用HashSet集合来创建一个数据列表,然后向列表中添加两条初始注册信息。

3.从控制台获取用户填写信息,可以通过Scanner类的nextLine()方法来实现,获取后,需要将获取的信息校验。

4.校验信息可以创建一个检验类,在类中实现用户输入的信息的方法。

检验结束后,如果检验结果错误就直接返回错误信息,

这里可以声明一个检验结果变量和一个检验状态变量。

检验结果变量用于存储提示信息,检验状态变量用于存储结果的判断标识。

5.当用户输入的信息不满足格式时,需要修改变量1状态并存储错误信息。

6.判断校验状态,如果所有信息都通过校验,则将用户信息创建成为用户对象,

通过将对象添加到用户列表返回结果来判断用户名是否重复,并记录下返回结果信息。*/

public classUserRegister {public static HashSet USER_DATE =new HashSet();public static voidmain(String[] args) {

initData();//初始化人员信息

Scanner scanner = newScanner(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 = newCheckInfo(USER_DATE);

String result=checkInfo.checkAction(userName,password,rePassword,birthday,telNumber,email);

System.out.println("注册结果:"+result);

}/*** 初始化数据

* 已经存在的用户*/

private static voidinitData() {

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);

}

}

用户实体类

packagecn.javabs.setdemo;/*** 用户类*/

public classUser {private String userName ; //用户名

private String password ; //密码

private String birthday ; //生日

private String telNumber ; //手机号

private String email ; //邮箱

publicUser(){

}publicUser(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;

}

@Overridepublic inthashCode() {final int prime = 31;int result = 1;

result= prime * result + ((userName == null) ? 0: userName.hashCode());returnresult;

}

@Overridepublic booleanequals(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;

}

}

注册用户信息校验类

packagecn.javabs.setdemo;importjava.text.DateFormat;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Date;importjava.util.HashSet;/***@authorMrYang

*@version创建时间:2018年5月14日

**/

/*** 校验信息类*/

public classCheckInfo {public static HashSet USER_DATE = new HashSet();public CheckInfo(HashSetUSER_DATE) {this.USER_DATE =USER_DATE;

}//校验用户信息返回登录状态

publicString 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

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= newUser(userName, password, birthday, telNumber, email);//将新用户添加到列表中,同时根据HashSet判断出用户名是否重复

if (!USER_DATE.add(newUser)) {

result.append("用户重复!");

state= 2;

}if (state ==1) {

result.append("注册成功!");

}

}return result.toString();//toString()方法: 将指定的数据以字符串形式返回。

}

}

作者: 杨校

分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 如有问题, 可邮件(397583050@qq.com)咨询。

java模仿微博代码_杨老师课堂_Java核心技术下之控制台模拟微博用户注册案例相关推荐

  1. 杨老师课堂_Java核心技术下之控制台模拟文件管理器案例

    背景需求介绍: 编写一个模拟文件管理器的程序,实现控制台对文件和文件夹的管理操作. 要求在此程序中: 当用户输入指令 1 时,代表"指定关键字检索文件",此时需要用户输入检索的目录 ...

  2. 杨老师课堂_Java核心技术下之控制台模拟记事本案例...

    预览效果图: 背景介绍: 编写一个模拟记事本的程序通过在控制台输入指令,实现在本地新建文件打开文件和修改文件等功能. 要求在程序中: 用户输入指令1代表"新建文件",此时可以从控制 ...

  3. 杨老师课堂之网页制作HTML的学习入门-含有案例

    网页制作入门 - Html的学习 本篇所授任务 网站信息页面案例 网站图片信息页面案例 网站友情链接页面案例 网站首页案例 网站注册页面案例 网站后台页面案例 教学导航 教学目标 了解什么是标记语言 ...

  4. 杨老师课堂_Java教程第一篇之认识计算机

    1了解计算机基础知识之计算机概述 A:什么是计算机?计算机在生活中的应用举例 计算机(Computer)全称:电子计算机,俗称电脑.是一种能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备. ...

  5. 杨老师课堂_Java教程第六篇之引用数据类型_类的运用

    今天主要是讲解以下知识点: 1.自定义类型的定义及使用 2.自定义类的内存图 3.ArrayList集合的基本功能 4.王者荣耀随机迎战案例及库存案例代码优化 01引用数据类型_类 * A: 数据类型 ...

  6. 杨老师课堂_Java教程第四篇之数组运用

    今天主要是讲解以下知识点: 1.流程控制语句switch 2.数组 3.王者荣耀英雄随机出战案例 01switch语句解构 * A:switch语句解构* a:switch只能针对某个表达式的值作出判 ...

  7. 杨老师课堂_Java教程第五篇之函数运用

    今天主要是讲解以下知识点: 1.方法基础知识 2.方法高级内容 3.方法案例 01方法的概述 * A: 为什么要有方法(函数)* 提高代码的复用性 * B: 什么是方法* 完成特定功能的代码块. 02 ...

  8. 台州杨老师课堂 UI设计培训班

    课程内容 一.图形界面设计基础 1.Photoshop 应用 通过各种不同风格网页整体GUI设计,掌握photoshop相关软件操作基础,熟练使用更重要是学会直接应用软件,通过项目实训直接设计. 2. ...

  9. 杨老师课堂_安卓教程第一篇之入门

    1.1G-4G g:generation 代 3g:第三代移动通信技术1g: 大哥大特点:安全性差,容易受干扰,通话不稳定,不能发短信 2g:小灵通等功能机特点:通话质量稳定,可以发短信彩信,简单wa ...

最新文章

  1. META Header
  2. oracle中计算某月的天数
  3. 在eclipse中使用JDBC连接MySQL5.7.24
  4. munmap_chunk(): invalid pointer
  5. csv 字符串_爬虫|python读写csv文件的方法完成生涯规划表
  6. 深度学习核心技术精讲100篇(六)-keras 实战系列之推荐系统FM(Factorization Machine)算法
  7. 关于USBOS V3.0 teamviewer13打开无反应的问题
  8. RabbitMQ在Windows环境下部署(简单有效)
  9. diff算法_Virtual Dom和Diff算法
  10. [翻译] 物理引擎javascript实现
  11. jquery-galleryview-2.0 漂亮多样化的图片特效(多项自定义)
  12. java随机点名器_基于JavaScript实现随机点名器
  13. CentOS7设置镜像源
  14. IDEA设置好看的字体
  15. iOS 一键加入QQ群
  16. Spring Boot基础学习笔记08
  17. NGUI-动画Tween
  18. Elasticsearch报错received plaintext traffic on an encrypted channel, closing connection Netty4TcpChann
  19. C语言半框,不同的镜架结构优劣大盘点
  20. 四个福利性在线网站分享,每一个都让你欲罢不能……

热门文章

  1. 解决$ is not defined 的几种方法
  2. FC200 长广防盗维修专家
  3. 有限元-朗格朗日和欧拉描述的区别
  4. MMDetection 基准测试 和 Model Zoo | 三
  5. 【LOJ574】「LibreOJ NOI Round #2」黄金矿工
  6. 热身赛T3(奖学金评定)
  7. unity3d.com国际版下载
  8. 我的.emacs配置(原生Emacs,不依赖任何插件)
  9. JavaScript (mp3、mp4、jpg、doc、txt、rar)单个、多文件批量下载
  10. 首个AI数字人唱作歌曲刷屏背后:百度APP数字人度晓晓用AI陪伴亿万用户