题目要求:
编写程序:实现登录注册功能,程序一进来如果没有账号就选择注册,如果有账号就直接登录。
注册功能的时候要输入注册账号、设置密码、输入确认密码、输入邮箱号码、输入性别、输入个人简介、输入你的身份证号码、根据身份证号码获取你的出生年月日、输入验证码。
账号就是你的电话号码,不能小于11位 只能是13 、15、18开头的。
密码不能小于6位 不能大于10位, 首字母必须是大写字母开头,密码不能是纯数字,必须有大写字母和小写字母和数字组成。
确认密码必须与设置的密码一致
邮箱号码 必须进行验证 只能是 QQ 和163 邮箱
性别 是根据身份证号码的来判断男和女。
个人简介必须使用可变字符串进行保存设置
必须对身份证号码进行验证 长度验证 (【如果有能力就根据你的身份证号码进行你的省份验证】)
出生年月日 根据你的身份证号码获取你的出生年月日,并计算出你现在的年龄。
随机产生一组数字 四个数字 与输入的验证码进行比对。如果验证码不对就注册失败
第一步:创建UserDao类
利用抽象类进行登录和注册方法的封装,考虑到要用集合存储。所以必须要传入List集合的参数。
package com.xingyun.dao;
import java.util.Collection;
import java.util.List;
import com.xingyun.bean.User;
public interface userDao {
void enter(List<User> coll); //登录界面
void apply(List<User> coll);//申请界面
}
第二步:创建User的实体类
由于要输入用户名 密码 邮箱 身份证号 年 月 日 性别 和 个人简介 所以在这个User实体类中封装了这些属性。
package com.xingyun.bean;
public class User{
private String userName;//用户名
private StringBuilder userPwd;//密码
private String email;//邮箱
private String idNumber; //身份证号
private String sex;//性别
private String year,money,day;//出生的年月日
private StringBuilder intro; //个人简介
public User() {
super();
// TODO Auto-generated constructor stub
}
//有参构造方法
public User(String userName, StringBuilder userPwd, String email, String idNumber, String sex, String year, String money,
String day, StringBuilder intro) {
super();
this.userName = userName;
this.userPwd = userPwd;
this.email = email;
this.idNumber = idNumber;
this.sex = sex;
this.year = year;
this.money = money;
this.day = day;
this.intro = intro;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public StringBuilder getUserPwd() {
return userPwd;
}
public void setUserPwd(StringBuilder userPwd) {
this.userPwd = userPwd;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getIdNumber() {
return idNumber;
}
public void setIdNumber(String idNumber) {
this.idNumber = idNumber;
}
public StringBuilder getIntro() {
return intro;
}
public void setIntro(StringBuilder intro) {
this.intro = intro;
}
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
public String getMoney() {
return money;
}
public void setMoney(String money) {
this.money = money;
}
public String getDay() {
return day;
}
public void setDay(String day) {
this.day = day;
}
}
第三步:创建实现接口的Imp类
实现登录和注册功能
1、首先申请账户的时候,必须满足是手机号,并且是11位的手机号所以利用String.length来判断是否是11位,同时必须是 13 15 18 开头的手机号 ,所以利用,username.indexOf(“13”)==0方法来判断一开始输入的字符是否符合要求。 并且下一次注册的时候会先调用自己定义的查找函数,查看是否有相同的手机号 已经被注册使用了。返回boolean值
@Override
public void apply(List<User> coll) {
String username = null; //定义的 输入用户名
StringBuilder userpwd = null;//定义的输入的 密码 由于要反转密码 所以使用 StringBuilder
String email = null; //定义的email 输入
String idNumber = null; //定义的身份证号
String year= null,money = null,day= null; //定义的年 月 日
String sex= null; //定义的 性别
int age;
StringBuilder intro = null; //定义的个人介绍
boolean bools = true; //定义的 输入用户名 循环
boolean bool1 = true;//定义的 输入 密码 循环
boolean bool2 = true;//定义的 输入email 循环
boolean bool3 = true;//定义的 输入 身份证号 循环
boolean bool4= true;//定义的 输入验证码 循环
boolean bool5= true;//定义的 输入个人简介 循环
System.out.println("——————申请界面——————");
while(bools){
System.out.println("请输入用户名(11位手机号--13--15--18-开头的手机号)");
username = input.next();
if(username.length()==11 && username.indexOf("13")==0||username.indexOf("15")==0||username.indexOf("18")==0){
//判断输入的手机号 是否 是 13 15 18 开头 并且是否是 11位
boolean rePetitionName = RePetition.RePetitionName(coll,username); //调用类 让他去查看是否 存在相同的手机号 然后返回Boolean值
if(rePetitionName){
System.out.println("该用户名已经被注册");
}else{
bools = false;
}
}else{
System.out.println("用户名输入错误!");
}
}
2、注册密码的时候,首先判断输入的不能全是小写字符和数字,所以定义了一个字符串让它为真,然后进行for循环判断 如果全是小写字符或者全是数字就将字符串=假;等到下面第二次判断的时候 如果为假就提示密码输入错误。同时使用 userpwd.charAt(0),来判断输入的是否是大写字母。由于要反转密码 所以定义的密码是StringBuilder类型的。当输入的确认密码和之前输入的密码相同 就将反转的密码 存到List集合里 对象的userpwd中。
//输入密码的循环
while(bool1){
int sumChar=0; //判断输入的是否全都是 小写字符
int sumNum=0; //判断是否 输入的 全是 纯数字
System.out.print("请输入密码(首字母大写!密码在6到10位!密码不能是纯数字!密码必须有大小写字母)");
userpwd =new StringBuilder(input.next());
String userPwd = userpwd.substring(0, userpwd.length()-1);//将输入的密码截取 下来
String bool ="真";
for( int j=0;j< userpwd.length();j++){
if((byte) userpwd.charAt(j)>=97 &&(byte) userpwd.charAt(j)<=122){
//如果是 小写字符 sumChar就加一
sumChar++;
if(sumChar==userpwd.length()-1){
bool = "假"; //如果 输入的 全是 小写字符 就bool 就 变为假
}
}else if((byte) userpwd.charAt(j)>=48 && (byte) userpwd.charAt(j)<=57){
//如果输入的是 数字 sumNum 就加一
sumNum++;
if(sumNum==userpwd.length()-1){
//直到 这个 sum 等于 这个密码的长度 说明 全是 数字
bool = "假"; //就 将字符串 bool 判断为假
}
}
}
//判断输入的密码长度 是否 符合 并且 首字母 是不是 大写 然后加上 bool 是否为真
if(userpwd.length()>=6 && userpwd.length()<=10&&(byte) userpwd.charAt(0)>=65&&(byte) use