杨老师课堂_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 来源:牛客网 题目描述 杨老师认为他的学习能力曲线是一个拱形.勤奋的他根据时间的先后顺序罗列了一个学习清单, ...
随机推荐
- 高性能C++网络库libtnet实践:comet单机百万连接挂载测试
最近在用go语言做一个挂载大量长连接的推送服务器,虽然已经完成,但是内存占用情况让我不怎么满意,于是考虑使用libtnet来重新实现一个.后续我会使用comet来表明推送服务器. 对于comet来说, ...
- Android实现无线调试自己的应用
开发Android的朋友都知道,真机调试需要把手机与PC相连,然后把应用部署到真机上进行安装和调试.长长的USB线显得很麻烦,而且如果需要USB接口与其他设备连接的话显得很不方便.今天介绍一种不通过U ...
- 【Android 系统开发】下载 编译 Android源代码 和 Android kernel源代码
下载Android源码简要流程 : a. 获取repo文件: curl http://commondatastorage.googleapis.com/git-repo-downloads/repo ...
- 一张图了解cocos2d坐标系
一张图了解cocos2d坐标系 平面直角坐标系
- Linux - sed 工具
我们先来谈一谈 sed 好了, sed 本身也是一个管线命令,可以分析 standard input 的啦! 而且 sed 还可以将数据进行取代.删除.新增.撷取特定行等等的功能呢!很不错吧- 我们先 ...
- android 资源文字ids的作用
ids.xml--为应用的相关资源提供唯一的资源id.id是为了获得xml中的对象而需要的参数,也就是Object = findViewById(R.id.id_name)中的id_name.这些值可 ...
- PLSQL表
PL/SQL表 一,什么是PL/SQL表? 首先PL/SQL表和记录(Record)一样,都是复合数据类型.可以看做是一种用户自定义数据类型. PL/SQL表由多列单行的标量构成的临时索引表对象.组成 ...
- leetcode之旅(7)-Move Zeroes
Move Zeroes 题目描述: Given an array nums, write a function to move all 0's to the end of it while maint ...
- C# 视频多人脸识别
上一篇内容的调整,并按 @轮回 的说法,提交到git了,https://github.com/catzhou2002/ArcFaceDemo 基本思路如下: 一.识别线程 1.获取当前图片 2.识别当 ...
- JMS详细的工作原理
如果手机只能进行实时通话,没有留言和短信功能会怎么样?一个电话打过来,正好没有来得及接上,那么这个电话要传递的信息肯定就收不到了.为什么不能先将信息存下来,当用户需要查看信息的时候再去获得信息呢?伴随 ...