JAVASE基础模块三十四( 菜鸡版简单登录验证模块系统IO流文件写入)

  • 开发流程:需求文档 接口文档 效果图
    开发环境统一:JDK1.8 IDEA win10 GIT SSM SSH SpringBoot MySql
    分组开发 分模块开发开发的模式 JavaWeb 经典的一个模式MVC
    MOdel 数据模型
    View  视图
    Controller 控制器JavaWeb 有三层架构对MVC的具体实现
    

需求

  • 用户手误没有输入数字,程序不能报错,提示用户输入数字,直到输入数字为止
  • 登录机会给三次,三次登录不上,退出系统
  • 注册是对用户名和密码进行规则校验,用户名6-16位大小写字母,密码6-16位数字
  • 注册时判断该用户名是否已被注册
  • 登录注册,配合IO流把用户名和密码存到文件里

实现

  • 进入系统

    1. 选择需求(1.注册、2.登录、3.修改密码、4.退出)
    2. 对输入内容进行限制(1-4)
    3. 非法字符不报错重新输入
  • 注册
    1. 输入用户名(对用户名规则进行校验)
    2. 对账号唯一性进行校验 用户名已存在
    3. 输入密码(对密码规则进行校验)
    4. 注册成功,将账号密码存储到文件中
  • 登录
    1. 三次登陆机会
    2. 输入用户名(对用户名是否存在进行校验)
    3. 输入密码(对密码是否正确进行校验)(限定密码输入次数)
    4. 密码正确,是否进入游戏内容
    5. 密码错误,退出系统
  • 修改密码
    1. 输入用户名(对用户名是否存在进行校验)
    2. 先进行登录 登录规则同登录一致
    3. 输入旧密码(对密码是否正确进行校验)(限定密码输入次数)
    4. 输入新密码(对密码规则进行校验)(新密码不能与旧密码一致)
    5. 修改成功,将新密码存储到文件中
  • 退出
    1. 关闭程序

代码

  • 接口的定义

    1. 注册的抽象方法
    2. 登录的抽象方法
package com.westos.Dao;public interface UserDao {public abstract void registerUser(User user);public abstract boolean login(String username,String password);
}
  • UserDaoImpl实现接口进行简单的注册 不保存文件版本

    1. 通过将信息存储在ArrayList中进行简单登录 此方法无法保存用户信息到文件
package com.westos.Dao;import java.util.ArrayList;
public class UserDaoImpl implements UserDao {private ArrayList<User> l = new ArrayList<User>();@Overridepublic void registerUser(User user) {l.add(user);}@Overridepublic boolean login(String username, String password) {boolean b = false;for (User u : l) {if (u.getUsername().equals(username) && u.getUsername().equals(password)) {b = true;}}return b;}
}
  • DocumentUser实现接口 可以将信息保存文件

    1. 通过 Properties ArrayList的配合进行登录验证与文件的保存
    2. panDuan判断用户名是否被注册
    3. panDuan1
    4. panDuan2
    5. xiuGai
package com.westos.Dao;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Properties;public class DocumentUser implements UserDao {Properties p = new Properties();private ArrayList<User> l = new ArrayList<User>();@Overridepublic void registerUser(User pp) {l.add(pp);p.setProperty(pp.getUsername(), pp.getPassword());FileOutputStream ff = null;try {ff = new FileOutputStream("user.properties" );p.store(ff, null);ff.flush();} catch (IOException e) {e.printStackTrace();} finally {if (ff != null) {try {ff.close();} catch (IOException e) {e.printStackTrace();}}}}@Overridepublic boolean login(String username, String password) {return true;}public boolean panDuan(String username) {try {p.load(new FileInputStream("user.properties"));} catch (IOException e) {e.printStackTrace();}return p.containsKey(username);}public boolean panDuan1(String username, String password) {String f = "";try {p.load(new FileInputStream("user.properties"));f = (String) p.get(username);} catch (IOException e) {e.printStackTrace();}return f.equals(password);}public boolean panDuan2(String username, String password) {try {p.load(new FileInputStream("user.properties"));} catch (IOException e) {e.printStackTrace();}return p.get(username).equals(password);}public void xiuGai(String username, String password) {try {p.load(new FileInputStream("user.properties"));p.setProperty(username, password);p.store(new FileOutputStream("user.properties" ),null);} catch (IOException e) {e.printStackTrace();}}
}
  • User类的定义 username 与 password属性
package com.westos.Dao;public class User {private String username;private String password;public User() {}public User(String username, String password) {this.username = username;this.password = password;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", password='" + password + '\'' +'}';}
}
  • 注册类方法

    1. 判断用户名是否被注册 并选择继续注册或返回主界面
    2. 判断用户名格式是否有误并重新输入
    3. 判断密码格式是否有误并重新输入
package com.westos.UI;import com.westos.Dao.DocumentUser;
import com.westos.Dao.User;
import com.westos.Dao.UserDao;import java.util.InputMismatchException;
import java.util.Scanner;public class ZhuCe {public static void zc(UserDao u, DocumentUser d1) {User uu = new User();int m=1;while (m==1) {while (true) {Scanner s = new Scanner(System.in);System.out.println("请输入要注册的用户名");String regx = "[a-zA-Z]{6,16}";String username = s.nextLine();if (d1.panDuan(username)) {System.out.println("用户名已被注册");break;} else {uu.setUsername(username);if (!username.matches(regx)) {System.out.println("用户名格式有误!请重新输入");} else {while (true) {Scanner ss = new Scanner(System.in);System.out.println("请输入密码");String password = ss.nextLine();uu.setPassword(password);String regx1 = "[0-9]{6,16}";if (!password.matches(regx1)) {System.out.println("密码格式有误!请重新输入");} else {break;}}u.registerUser(uu);d1.registerUser(uu);break;}}}System.out.println("继续注册请按1 返回请按0");Scanner scanner = new Scanner(System.in);m = scanner.nextInt();}}}
  • 登录类方法

    1. 三次机会 用完还未登陆成功则退出系统
    2. 判断用户名是否存在
    3. 存在进行密码输入
    4. 判断密码是否正确
    5. 错误重新输入密码
    6. 正确登录成功
    7. 上限退出系统
package com.westos.UI;import com.westos.Dao.DocumentUser;
import com.westos.Dao.UserDao;import java.util.Scanner;public class DengLu {public static void dl( DocumentUser d1) {int i = 3;while (i > 0) {Scanner s = new Scanner(System.in);System.out.println("请输入用户名");String username1 = s.nextLine();if (d1.panDuan(username1)) {System.out.println("请输入密码");String password1 = s.nextLine();boolean d =d1.panDuan1(username1, password1);if (d) {System.out.println("登陆成功!");break;} else {i--;if (i == 0) {System.out.println("登陆次数达到上限 系统已退出!");System.exit(0);}System.out.println("用户名或密码错误 登陆失败 请重新登陆!");System.out.println("您还有" + i + "次机会 请重新登陆!");}} else {System.out.println("用户名不存在");}}}}
  • 修改类方法

    1. 先进行登录验证 同登录类方法 三次机会
    2. 登陆成功进行密码修改
    3. 输入旧密码并判断 三次输入错误退出系统
    4. 正确则输入新密码
    5. 并判断密码格式是否正确
    6. 正确则修改成功
package com.westos.UI;import com.westos.Dao.DocumentUser;
import com.westos.Dao.UserDao;import java.util.Scanner;public class XiuGai {public static void dl(DocumentUser d1) {int i = 3;while (i > 0) {Scanner s = new Scanner(System.in);System.out.println("请输入用户名");String username1 = s.nextLine();if (d1.panDuan(username1)) {System.out.println("请输入密码");String password1 = s.nextLine();boolean d =d1.panDuan1(username1, password1);if (d) {System.out.println("登陆成功!");int ii = 3;while (ii > 0) {System.out.println("请输入旧密码");String password2 = s.nextLine();boolean ddd = d1.panDuan2(username1, password2);if (ddd) {while (true) {System.out.println("请输入新密码");String password5 = s.nextLine();String regx1 = "[0-9]{6,16}";if (!password5.matches(regx1)) {System.out.println("密码格式有误!请重新输入");} else {d1.xiuGai(username1, password5);System.out.println("密码修改成功!");break;}}break;} else {ii--;if (ii == 0) {System.out.println("登陆次数达到上限 系统已退出!");System.exit(0);}System.out.println("旧密码不正确!您还有" + ii + "次机会 请重新输入!");}}break;} else {i--;if (i == 0) {System.out.println("登陆次数达到上限 系统已退出!");System.exit(0);}System.out.println("用户名或密码错误 登陆失败 请重新登陆!");System.out.println("您还有" + i + "次机会 请重新登陆!");}} else {System.out.println("用户名不存在");}}}}
  • 主页面
package com.westos.UI;import com.westos.Dao.DocumentUser;
import com.westos.Dao.User;
import com.westos.Dao.UserDaoImpl;import java.util.InputMismatchException;
import java.util.Scanner;public class LoginUI {public static void main(String[] args) {UserDaoImpl u = new UserDaoImpl();DocumentUser d1 = new DocumentUser();while (true) {System.out.println("*****欢迎使用登录系统   请选择*****");System.out.println("*****选项1.     注册        *****");System.out.println("*****选项2.     登录        *****");System.out.println("*****选项3.     修改        *****");System.out.println("*****选项4.     退出        *****");Scanner s = new Scanner(System.in);int num = 0;while (true) {try {while(true){Scanner ss = new Scanner(System.in);num = ss.nextInt();if(num==1||num==2||num==3||num==4){break;}else {System.out.println("请输入1-3选择正确选项");}}break;} catch (InputMismatchException e) {System.out.println("请输入数字来选择正确选项");}}if (num == 4) {System.out.println("*****欢迎使用本系统 再见*****");break;}switch (num) {case 1://注册ZhuCe.zc(u, d1);break;case 2:DengLu.dl( d1);break;case 3:XiuGai.dl(d1);break;case 4:default:System.out.println("*****欢迎使用本系统 再见*****");break;}}}
}

运行结果分析

  • 注册
运行结果:
*****欢迎使用登录系统   请选择*****
*****选项1.     注册        *****
*****选项2.     登录        *****
*****选项3.     修改        *****
*****选项4.     退出        *****
1
请输入要注册的用户名
pppp
用户名格式有误!请重新输入
请输入要注册的用户名
pppppppp
请输入密码
11111111
继续注册请按1 返回请按0
1
请输入要注册的用户名
oooooooo
请输入密码
5555555
继续注册请按1 返回请按0
1
请输入要注册的用户名
pppppppp
用户名已被注册
继续注册请按1 返回请按0
1
请输入要注册的用户名
iiiiiiii
请输入密码
123
密码格式有误!请重新输入
请输入密码
33333333
继续注册请按1 返回请按0
0
*****欢迎使用登录系统   请选择*****
*****选项1.     注册        *****
*****选项2.     登录        *****
*****选项3.     修改        *****
*****选项4.     退出        *****
TXT文件保存结果:
#Tue Aug 18 23:44:57 CST 2020
oooooooo=5555555
pppppppp=11111111
iiiiiiii=33333333
  • 登录

    1. 登录失败
    2. 登录成功
运行结果:
*****欢迎使用登录系统   请选择*****
*****选项1.     注册        *****
*****选项2.     登录        *****
*****选项3.     修改        *****
*****选项4.     退出        *****
2
请输入用户名
uiyuirty
用户名不存在
请输入用户名
pppppppp
请输入密码
123456
用户名或密码错误 登陆失败 请重新登陆!
您还有2次机会 请重新登陆!
请输入用户名
pppppppp
请输入密码
4567891
用户名或密码错误 登陆失败 请重新登陆!
您还有1次机会 请重新登陆!
请输入用户名
pppppppp
请输入密码
123456
登陆次数达到上限 系统已退出!Process finished with exit code 0
运行结果:
*****欢迎使用登录系统   请选择*****
*****选项1.     注册        *****
*****选项2.     登录        *****
*****选项3.     修改        *****
*****选项4.     退出        *****
2
请输入用户名
pppppppp
请输入密码
11111111
登陆成功!
  • 修改
运行结果:*****欢迎使用登录系统   请选择*****
*****选项1.     注册        *****
*****选项2.     登录        *****
*****选项3.     修改        *****
*****选项4.     退出        *****
3
请输入用户名
pppppppp
请输入密码
123456
用户名或密码错误 登陆失败 请重新登陆!
您还有2次机会 请重新登陆!
请输入用户名
pppppppp
请输入密码
789456
用户名或密码错误 登陆失败 请重新登陆!
您还有1次机会 请重新登陆!
请输入用户名
pppppppp
请输入密码
11111111
登陆成功!
请输入旧密码
1111
旧密码不正确!您还有2次机会 请重新输入!
请输入旧密码
123456
旧密码不正确!您还有1次机会 请重新输入!
请输入旧密码
11111111
请输入新密码
4578
密码格式有误!请重新输入
请输入新密码
4589
密码格式有误!请重新输入
请输入新密码
88888888
密码修改成功!
*****欢迎使用登录系统   请选择*****
*****选项1.     注册        *****
*****选项2.     登录        *****
*****选项3.     修改        *****
*****选项4.     退出        *****
TXT文件保存结果:
#Tue Aug 18 23:49:52 CST 2020
oooooooo=5555555
pppppppp=88888888
iiiiiiii=33333333
  • 退出
*****欢迎使用登录系统   请选择*****
*****选项1.     注册        *****
*****选项2.     登录        *****
*****选项3.     修改        *****
*****选项4.     退出        *****
4
*****欢迎使用本系统 再见*****Process finished with exit code 0

over

JAVASE基础模块三十四( 菜鸡版简单登录验证模块系统IO流文件写入)相关推荐

  1. Java基础(三十四)String、StringBuffer类和数据缓冲区Buffer类

    一.String类 1.创建字符串对象 创建字符串对象有两种方法:直接用"="或者使用"new String(...)" String aStr = " ...

  2. java基本类型有缓冲区类型的有_Java基础(三十四)String、StringBuffer类和数据缓冲区Buffer类...

    一.String类 1.创建字符串对象 创建字符串对象有两种方法:直接用"="或者使用"new String(...)" String aStr = " ...

  3. 机器学习基础(三十四)—— 协同过滤(之获得推荐)

    为未被某人评分的电影的进行打分,我们当然可以查找品味与此人最为接近(依据相似性度量)的人的相应评分,但是这样做过于简单和随意(permissive).这种做法的问题在于:我们会找到一个热衷某部电影的古 ...

  4. Word基础(三十四)引文与书目

    在Word中,如何设置引文.插入引文.插入书目呢? 方法:设置引文 点击引用选项卡,引文与书目分类中点击管理源 在弹出的源管理器中,点击新建(N)- 在弹出的创建源对话框中,输入相关内容后点击确定即可 ...

  5. PPT基础(三十四)调整表格边框和颜色

    调整表格边框: 鼠标框选表格(选中想要调整的单元格) 点击设计选项卡,找到边框,点击其下拉三角 点击所有框线(A),则会出现框线 注:调整框线粗细方法,在设计选项卡中,右侧笔颜色上方调整框线粗细,再次 ...

  6. 回溯法采用的搜索策略_强化学习基础篇(三十四)基于模拟的搜索算法

    强化学习基础篇(三十四)基于模拟的搜索算法 上一篇Dyna算法是基于真实经验数据和模拟经验数据来解决马尔科夫决策过程的问题.本篇将结合前向搜索和采样法,构建更加高效的搜索规划算法,即基于模拟的搜索算法 ...

  7. JAVASE基础模块三十五( 线程 线程创建的第一种方法 以及线程的一些方法)

    JAVASE基础模块三十五( 线程 线程创建的第一种方法 以及线程的一些方法) 线程 首先要清楚的是 线程依赖于进程 进程 是 正在运行的应用程序 一个正在运行的应用程序 是个进程 这个应用程序又要执 ...

  8. JAVASE基础模块二十四(泛型)

    JAVASE基础模块二十四(泛型) 泛型的引出 我们这样定义一个obj类的时候 使用的时候需要向下转型 会很麻烦 public class Fananan {public static void ma ...

  9. 【零基础学Java】—Calendar类(三十四)

    [零基础学Java]-Calendar类(三十四) java.util.Calendar日历类 Calendar类是一个抽象类,里面提供了很多操作日历字段的方法 Calendar类无法直接创建对象,里 ...

最新文章

  1. SAP Spartacus buildCmsStructure 构建逻辑
  2. mysql写入监控_zabbix 自定义key 监控mysql增删查改
  3. ModelArts 与HiLens Kit联合开发丨行人社交距离风险提示Demo
  4. VC2008下安装OpenCV2.3.1
  5. 大白用html5制作,暖心大白纸雕灯的制作过程 给圣诞节礼物助力啦
  6. 如何高效率的使用Google搜索
  7. dux修改index.php,DUX主题修改首页轮播图为通栏模式
  8. 合思·易快报,奔向费控「自动驾驶」无人区
  9. 过滤敏感词汇(trie树实现敏感词过滤)
  10. 操作系统中的进程间相互作用
  11. [开源工具]2022/2023 分享好用的免费的云短信/临时短信[Temp Message]
  12. 服务器配置jdk环境
  13. 航嘉服务器维修电源,无故障60000小时,服务器/工控机电源推荐
  14. YOLOV3在windwos下的配置和训练过程简述
  15. 实战批量查询四级成绩
  16. 基于java(springboot框架)的购物商城系统 毕业论文
  17. 一次帮用户解决源码被敲诈事件
  18. 数据可视化matplotlib(一)---亚马逊销售飙升榜
  19. 来自yuzan1830的挑战(五)
  20. IM学习-Openfire管理界面-服务器设置(七)

热门文章

  1. 汉语属于哪个语系_汉语,日语,韩语分别属于什么语系?
  2. android 日历 签到,Android MaterialCalendarView 日历使用 每日签到
  3. 不需要个人信息的云服务器,那些云服务器不需要实名
  4. 【C进阶】之动态内存分配及内存操作函数
  5. html消除冒泡,取消冒泡.html
  6. 最小生成树问题:算法分析 Java 实现
  7. MySQL备份工具之xtrabackup
  8. android 监控id代码,茗伊插件 剑三技能监控代码
  9. 如何测试服务器及端口是否畅通?
  10. 谷歌手机地图中文java_谷歌地图开发(1)使用MapView显示地图