Java实现用户登录注册案例(IO版)

需求:用户登录注册案例(IO版本)
分析:大部分的分析在我的上一个文章里面有,这次在上次的基础上,改动一下,变为IO流版本

图片展示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里用的写入文件存储注册信息,然后判断也是读取文件信息
因为写入文件,所以用的自负缓冲输出流 (BufferWriter)

因为读取文件,所以用的高效字节输入流
(BufferReader)

下面是源代码:
cn.itcast.dao

package cn.itcast.dao;

import cn.itcast.pojo.User;

/**
 * 这是针对用户进行操作的接口
 *
 * @author 徐文
 * @version v1.1
 * */
public interface UserDao {
    /**
     * 这是用户登录功能
     * @param username 用户名
     * @param password 密码
     * @return  返回登录是否成功
     * */
    public abstract boolean isLogin(String username,String password);

    /**
     * 这是用户注册功能
     * @param user 需注册的用户信息
     * */
    public abstract void regist(User user);
}

cn.itcast.dao.impl

package cn.itcast.dao.impl;

import cn.itcast.dao.UserDao;
import cn.itcast.pojo.User;

import java.io.*;


/**
 * 这是用户操作的具体实现类(IO版)
 *
 * @author 徐文
 * @version v1.1
 * */
public class UserDaoImpl implements UserDao {
    private static File file = new File("user.txt");

    static {
        try {
            file.createNewFile();
        } catch (IOException e) {
            System.out.println("创建文件失败");
            //e.printStackTrace();
        }
    }


    @Override
    public boolean isLogin(String username, String password) {
        boolean flag = false;

        BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader("user.txt"));
            String line = null;
            while ((line=br.readLine())!=null){
                //用户名=密码
                String[] datas = line.split("=");
                if(datas[0].equals(username) && datas[1].equals(password)){
                    flag = true;
                }
            }
        } catch (FileNotFoundException e) {
            System.out.println("登录找不到信息所在的文件");
            //e.printStackTrace();
        }catch(IOException e){
            System.out.println("用户登录失败");
        }finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    System.out.println("用户登录释放资源失败");
                    //e.printStackTrace();
                }
            }
        }

        return flag;
    }

    @Override
    public void regist(User user) {
        /*
        * 为了让注册的数据能够有一定的规则,我就自己定义了一个规则:
        * 用户名=密码
        * */
        BufferedWriter bw = null;
        try {
            //bw=new BufferedWriter(new FileWriter(file));
            //为了保证数据是追加写入,后面必须加true
            bw=new BufferedWriter(new FileWriter(file,true));
            bw.write(user.getUsername()+"="+user.getPassword());
            bw.newLine();
            bw.flush();
        } catch (IOException e) {
            System.out.println("用户注册失败");
            //e.printStackTrace();
        } finally {
            if (bw != null) {
                try {
                    bw.close();
                } catch (IOException e) {
                    System.out.println("用户注册释放资源失败");
                    //e.printStackTrace();
                }
            }
        }

    }

}

cn.itcast.game

package cn.itcast.game;

import java.util.Scanner;

/**
 * 这是猜数字小游戏
 *
 * @author 徐文
 * @version v1.1
 *
 * */
public class GuessNumber {
    private GuessNumber(){}

    public static void start(){
        System.out.println("--------------欢迎进入猜数字小游戏--------------");
        //产生一个随机数
        int number = (int) (Math.random()*100)+1;

        //定义一个统计变量
        int count = 0;

        while (true) {
            //键盘录入一个数据
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入数据(1-100):");
            int guessNumber = sc.nextInt();

            count++;

            //判断
            if (guessNumber > number) {
                System.out.println("你猜的数据" + guessNumber + "大了");
            } else if (guessNumber < number) {
                System.out.println("你猜的数据" + guessNumber + "小了");
            } else {
                System.out.println("恭喜你"+count+"次就猜中了");
                break;
            }

        }
    }
}

cn.itcast.pojo

package cn.itcast.pojo;

/**
 * 这是用户基本描述类
 *
 * @author 徐文
 * @version v1.1
 * */
public class User {
    //用户名
    private String username;
    //密码
    private String password;

    public User() {
    }

    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;
    }
}


cn.itcast.test

package cn.itcast.test;

import cn.itcast.dao.UserDao;
import cn.itcast.dao.impl.UserDaoImpl;
import cn.itcast.game.GuessNumber;
import cn.itcast.pojo.User;

import java.util.Scanner;



/**
 * 用户测试类
 *
 * @author 徐文
 * @version v1.1
 * */
public class UserTest {
    public static void main(String[] args) {
        //为了能够回来
        while (true) {
            //欢迎界面,给出选择项
            System.out.println("--------------欢迎光临--------------");
            System.out.println("1 登录");
            System.out.println("2 注册");
            System.out.println("3 退出");
            System.out.println("请输入您的选择");
            //键盘录入选择,根据选择做不同的操作
            Scanner sc = new Scanner(System.in);
            //为了后面的录入信息的方便,我所有的数据录入全部用字符串接受
            String choiceString = sc.nextLine();

            //swich语句多个地方要使用,我就定义到外面
            UserDao ud = new UserDaoImpl();

            //经过简单的思考,我选择了swich
            switch (choiceString) {
                case "1":
                    //登录界面,请输入用户名和密码
                    System.out.println("--------------登录界面--------------");
                    System.out.println("请输入用户名:");
                    String username = sc.nextLine();
                    System.out.println("请输入密码:");
                    String password = sc.nextLine();

                    //调用登录功能
                    //UserDao ud = new UserDaoImpl();

                    boolean flag = ud.isLogin(username, password);
                    if (flag) {
                        System.out.println("登陆成功,可以选择是否开始玩游戏了");

                        System.out.println("您玩猜数字小游戏吗?y/n");
                        while (true) {
                            String resultString = sc.nextLine();
                            if (resultString.equalsIgnoreCase("y")) {
                                //玩游戏
                                GuessNumber.start();
                                System.out.println("您还玩吗?y/n");
                            } else {
                                break;
                            }
                        }
                        System.exit(0);
                        //break;//这里写break,结束的是swich
                    } else {
                        System.out.println("用户名或者密码有误,登陆失败");
                    }

                    break;
                case "2":
                    //欢迎界面,请输入用户名和密码
                    System.out.println("--------------注册界面--------------");
                    System.out.println("请输入用户名:");
                    String newUsername = sc.nextLine();
                    System.out.println("请输入密码:");
                    String newPassword = sc.nextLine();

                    //把用户名和密码封装到一个对象中
                    User user = new User();
                    user.setUsername(newUsername);
                    user.setPassword(newPassword);

                    //调用注册功能
                    //多态
                    //UserDao ud = new UserDaoImpl();
                    //具体类使用
                    //UserDaoImpl udi = new UserDaoImpl();

                    ud.regist(user);
                    System.out.println("注册成功");
                    break;
                case "3":
                default:
                    System.out.println("谢谢使用,欢迎下次再来");
                    System.exit(0);
                    break;
            }
        }
    }
}

发布了4 篇原创文章 · 获赞 13 · 访问量 161

猜你喜欢

转载自blog.csdn.net/weixin_46316012/article/details/105641637