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

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

    @Override
    public void registerUser(User user) {
        l.add(user);
    }

    @Override
    public 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>();
    @Override
    public 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();
                }
            }
        }
    }
    @Override
    public 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;
    }

    @Override
    public 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值