杨老师课堂_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 来源:牛客网 题目描述 杨老师认为他的学习能力曲线是一个拱形.勤奋的他根据时间的先后顺序罗列了一个学习清单, ...
随机推荐
- Cocos2d中update与fixedUpdate的区别(五)
在真实情况中update:和fixedUpdate方法如何去调用? 由上所述,所以update方法在每帧被调用1次,从而给你一个机会去更新你的游戏对象的状态在其绘制之前.而fixedUpdate:方法 ...
- Google性能工程师Ilya Grigorik谈HTTP/2
via:http://www.infoq.com/cn/news/2014/11/http2-develop HTTP/2,也就是超文本传输协议第2版,是下一代HTTP协议.该版本是自1999年HTM ...
- 程序员编程艺术:第三章续、Top K算法问题的实现
程序员编程艺术:第三章续.Top K算法问题的实现 作者:July,zhouzhenren,yansha. 致谢:微软100题实现组,狂想曲创作组. 时间:2011年05月08日 ...
- redis简介(keeper实时报表的基本部分)
网上有一篇介绍Redis的文章,由浅入深地讲解了Redis:http://blog.mjrusso.com/2010/10/17/redis-from-the-ground-up.html.强烈建议对 ...
- Media Player Classic - HC 源代码分析 1:整体结构
===================================================== Media Player Classic - HC 源代码分析系列文章列表: Media P ...
- LeetCode(67)-Rotate Array
题目: Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the ar ...
- mybatis 开发环境搭建
不说废话直接上代码,首先看下我的目录机构: 红色部分,表明你所需的jar包,已经配置文件. 创建用户表,以及插入数据. create table books(id int (11) not null ...
- obj-c编程01:第一个类和对象的范例
这是obj-c学习过程中的第一篇博文,接下来还会有未知的N篇内容(关键是不知道obj-c有多难搞啊!),而且在以后不断的学习中,还会不断的在以前写的博文中修改和添加新的内容.在遇到暂时无法解决的问题时 ...
- javascript访问html元素的内容(1)
形如如下格式的html元素: <p id="my_p">I'm <strong>BIG</strong> panda!!!</p> ...
- Xcode使用心得02:如何在项目中关闭ARC特性
在obj-c系列内存管理的博文里大家应该对ARC有所了解,一般是不推荐关闭ARC特性的,但你也保不齐啥时候有这个需求,于是乎我们看看在最新的x6b中如何将其关闭吧. 因为Build Seting里的子 ...