Java基础知识强化之IO流笔记56:IO流练习之 登录注册IO版

1.  登录注册IO版的Java项目框架,如下:

2. 具体代码实现:

(1)User.java(cn.itcast.game):

 1 package cn.itcast.pojo;
 2 
 3 /**
 4  * 这是用户基本描述类
 5  * 
 6  * @author 风清扬
 7  * @version V1.1
 8  * 
 9  */
10 public class User {
11     // 用户名
12     private String username;
13     // 密码
14     private String password;
15 
16     public User() {
17     }
18 
19     public String getUsername() {
20         return username;
21     }
22 
23     public void setUsername(String username) {
24         this.username = username;
25     }
26 
27     public String getPassword() {
28         return password;
29     }
30 
31     public void setPassword(String password) {
32         this.password = password;
33     }
34 }

(2)UserDao.java(cn.itcast.dao):

 1 package cn.itcast.dao;
 2 
 3 import cn.itcast.pojo.User;
 4 
 5 /**
 6  * 这是针对用户进行操作的接口
 7  * 
 8  * @author 风清扬
 9  * @version V1.1
10  * 
11  */
12 public interface UserDao {
13     /**
14      * 这是用户登录功能
15      * 
16      * @param username
17      *            用户名
18      * @param password
19      *            密码
20      * @return 返回登录是否成功
21      */
22     public abstract boolean isLogin(String username, String password);
23 
24     /**
25      * 这是用户注册功能
26      * 
27      * @param user
28      *            要注册的用户信息
29      */
30     public abstract void regist(User user);
31 }

(3)UserDaoImpl.java(cn.itcast.dao.impl):

 1 package cn.itcast.dao.impl;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.BufferedWriter;
 5 import java.io.File;
 6 import java.io.FileNotFoundException;
 7 import java.io.FileReader;
 8 import java.io.FileWriter;
 9 import java.io.IOException;
10 
11 import cn.itcast.dao.UserDao;
12 import cn.itcast.pojo.User;
13 
14 /**
15  * 这是用户操作的具体实现类(IO版)
16  * 
17  * @author 风清扬
18  * @version V1.1
19  * 
20  */
21 public class UserDaoImpl implements UserDao {
22     // 为了保证文件一加载就创建
23     private static File file = new File("user.txt");
24 
25     static {
26         try {
27             file.createNewFile();
28         } catch (IOException e) {
29             System.out.println("创建文件失败");
30             // e.printStackTrace();
31         }
32     }
33 
34     @Override
35     public boolean isLogin(String username, String password) {
36         boolean flag = false;
37 
38         BufferedReader br = null;
39         try {
40             // br = new BufferedReader(new FileReader("user.txt"));
41             br = new BufferedReader(new FileReader(file));
42             String line = null;
43             while ((line = br.readLine()) != null) {
44                 // 用户名=密码
45                 String[] datas = line.split("=");
46                 if (datas[0].equals(username) && datas[1].equals(password)) {
47                     flag = true;
48                     break;
49                 }
50             }
51         } catch (FileNotFoundException e) {
52             System.out.println("用户登录找不到信息所在的文件");
53             // e.printStackTrace();
54         } catch (IOException e) {
55             System.out.println("用户登录失败");
56             // e.printStackTrace();
57         } finally {
58             if (br != null) {
59                 try {
60                     br.close();
61                 } catch (IOException e) {
62                     System.out.println("用户登录释放资源失败");
63                     // e.printStackTrace();
64                 }
65             }
66         }
67 
68         return flag;
69     }
70 
71     @Override
72     public void regist(User user) {
73         /*
74          * 为了让注册的数据能够有一定的规则,我就自己定义了一个规则: 用户名=密码
75          */
76         BufferedWriter bw = null;
77         try {
78             // bw = new BufferedWriter(new FileWriter("user.txt"));
79             // bw = new BufferedWriter(new FileWriter(file));
80             // 为了保证数据是追加写入,必须加true
81             bw = new BufferedWriter(new FileWriter(file, true));
82             bw.write(user.getUsername() + "=" + user.getPassword());
83             bw.newLine();
84             bw.flush();
85         } catch (IOException e) {
86             System.out.println("用户注册失败");
87             // e.printStackTrace();
88         } finally {
89             if (bw != null) {
90                 try {
91                     bw.close();
92                 } catch (IOException e) {
93                     System.out.println("用户注册释放资源失败");
94                     // e.printStackTrace();
95                 }
96             }
97         }
98     }
99 }

(4)GuessNumber.java(cn.itcast.game):

 1 package cn.itcast.game;
 2 
 3 import java.util.Scanner;
 4 
 5 /**
 6  * 这是猜数字小游戏
 7  * 
 8  * @author 风清扬
 9  * @version V1.1
10  * 
11  */
12 public class GuessNumber {
13     private GuessNumber() {
14     }
15 
16     public static void start() {
17         // 产生一个随机数
18         int number = (int) (Math.random() * 100) + 1;
19 
20         // 定义一个统计变量
21         int count = 0;
22 
23         while (true) {
24             // 键盘录入一个数据
25             Scanner sc = new Scanner(System.in);
26             System.out.println("请输入数据(1-100):");
27             int guessNumber = sc.nextInt();
28 
29             count++;
30 
31             // 判断
32             if (guessNumber > number) {
33                 System.out.println("你猜的数据" + guessNumber + "大了");
34             } else if (guessNumber < number) {
35                 System.out.println("你猜的数据" + guessNumber + "小了");
36             } else {
37                 System.out.println("恭喜你," + count + "次就猜中了");
38                 break;
39             }
40         }
41     }
42 }

(5)测试类UserTest.java(cn.itcast.test):

  1 package cn.itcast.test;
  2 
  3 import java.util.Scanner;
  4 
  5 import cn.itcast.dao.UserDao;
  6 import cn.itcast.dao.impl.UserDaoImpl;
  7 import cn.itcast.game.GuessNumber;
  8 import cn.itcast.pojo.User;
  9 
 10 /**
 11  * 用户测试类
 12  * 
 13  * @author 风清扬
 14  * @version V1.1
 15  * 
 16  */
 17 public class UserTest {
 18     public static void main(String[] args) {
 19         // 为了能够回来
 20         while (true) {
 21             // 欢迎界面,给出选择项
 22             System.out.println("--------------欢迎光临--------------");
 23             System.out.println("1 登录");
 24             System.out.println("2 注册");
 25             System.out.println("3 退出");
 26             System.out.println("请输入你的选择:");
 27             // 键盘录入选择,根据选择做不同的操作
 28             Scanner sc = new Scanner(System.in);
 29             // 为了后面的录入信息的方便,我所有的数据录入全部用字符接收
 30             String choiceString = sc.nextLine();
 31 
 32             // switch语句的多个地方要使用,我就定义到外面
 33             UserDao ud = new UserDaoImpl();
 34 
 35             // 经过简单的思考,我选择了switch
 36             switch (choiceString) {
 37             case "1":
 38                 // 登录界面,请输入用户名和密码
 39                 System.out.println("--------------登录界面--------------");
 40                 System.out.println("请输入用户名:");
 41                 String username = sc.nextLine();
 42                 System.out.println("请输入密码:");
 43                 String password = sc.nextLine();
 44 
 45                 // 调用登录功能
 46                 // UserDao ud = new UserDaomImpl();
 47 
 48                 boolean flag = ud.isLogin(username, password);
 49                 if (flag) {
 50                     System.out.println("登录成功,可以开始玩游戏了");
 51 
 52                     System.out.println("你玩吗?y/n");
 53                     while (true) {
 54                         String resultString = sc.nextLine();
 55                         if (resultString.equalsIgnoreCase("y")) {
 56                             // 玩游戏
 57                             GuessNumber.start();
 58                             System.out.println("你还玩吗?y/n");
 59                         } else {
 60                             break;
 61                         }
 62                     }
 63                     System.out.println("谢谢使用,欢迎下次再来");
 64                     System.exit(0);
 65                     // break; //这里写break,结束的是switch
 66                 } else {
 67                     System.out.println("用户名或者密码有误,登录失败");
 68                 }
 69                 break;
 70             case "2":
 71                 // 欢迎界面,请输入用户名和密码
 72                 System.out.println("--------------注册界面--------------");
 73                 System.out.println("请输入用户名:");
 74                 String newUsername = sc.nextLine();
 75                 System.out.println("请输入密码:");
 76                 String newPassword = sc.nextLine();
 77 
 78                 // 把用户名和密码封装到一个对象中
 79                 User user = new User();
 80                 user.setUsername(newUsername);
 81                 user.setPassword(newPassword);
 82 
 83                 // 调用注册功能
 84                 // 多态
 85                 // UserDao ud = new UserDaoImpl();
 86                 // 具体类使用
 87                 // UserDaoImpl udi = new UserDaoImpl();
 88 
 89                 ud.regist(user);
 90                 System.out.println("注册成功");
 91                 break;
 92             case "3":
 93             default:
 94                 System.out.println("谢谢使用,欢迎下次再来");
 95                 System.exit(0);
 96                 break;
 97             }
 98         }
 99     }
100 }

运行效果,如下:

原文地址:https://www.cnblogs.com/hebao0514/p/4871048.html