> 文章列表 > Java用IO实现简单的用户注册登录并玩猜数字小游戏demo

Java用IO实现简单的用户注册登录并玩猜数字小游戏demo

Java用IO实现简单的用户注册登录并玩猜数字小游戏demo

项目场景:

简单的用Java IO读写操作完整实现用户注册登录并玩猜数字小游戏案例。
(猜数字游戏:系统随机生成一位1-100之间的数字让用户猜,给出猜大了,猜小了,及第几次猜对了的提示)


分析:

有哪些类?
–用户类
–测试类

每个类有哪些内容?
–用户类:
–成员变量:username(用户名),password(密码
–构造方法:无参构造
–成员方法:getXxx() / setXxx()
–测试类:
–main()方法

类与类之间的关系是什么?
–在测试类中创建用户操作类和用户基本描述类的对象,并使用其功能。

按功能分包
–用户基本描述类包 pojo
–用户操作接口 dao
–用户操作类包 dao.impl
–用户测试类 test

项目目录结构如图所示
项目目录结构


实现:

用户基本描述类 User.java

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

用户操作接口 UserDao.java

package dao;import pojo.User;/* 这是针对用户进行操作的接口 @author Y* @version V1.0/public interface UserDao {/* 这是用户登录功能 @param username*           用户名* @param password*            密码* @return 返回登录是否成功*/public abstract boolean isLogin(String username, String password);/ @param user*           要注册的用户信息*/public void regist(User user);
}

用户操作类的具体实现 UserDaoImpl.java

package dao.impl;import dao.UserDao;
import pojo.User;import java.io.*;/* 这是用户操作的具体实现类 (IO版) @author Y* @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("创建文件失败!");}}@Overridepublic boolean isLogin(String username, String password) {boolean flag = false;BufferedReader br = null;try {
//            br = new BufferedReader(new FileReader("user.txt"));br = new BufferedReader(new FileReader(file));String line = null;while ((line = br.readLine()) != null) {// 用户名=密码String datas[] = line.split("=");if (datas[0].equals(username) && datas[1].equals(password)) {flag = true;break;}}} catch (FileNotFoundException e) {System.out.println("登录找不到注册信息所在的文件!");} catch (IOException e) {System.out.println("用户登录失败!");} finally {if (br != null) {try {br.close();} catch (IOException e) {System.out.println("用户登录释放资源失败!");}}}return flag;}@Overridepublic void regist(User user) {/* 为了让注册的数据有一定的规则,自己定义规则如下:*用户名=密码*/BufferedWriter bw = null;try {
//            bw = new BufferedWriter(new FileWriter("user.txt"));// 为了保证数据是追加写入,必须加truebw = 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();}}}}
}

猜数字小游戏 GuessNumber.java

package game;import java.util.Scanner;/* 猜数字小游戏 @author Y* @version V1.0/public class GuessNumber {private GuessNumber() {}public static void start() {// 产生一个随机数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;}}}
}

用户测试类的实现 UserTest.java

import dao.UserDao;
import dao.impl.UserDaoImpl;
import game.GuessNumber;
import pojo.User;import java.util.Scanner;/* 用户测试类 @author Y* @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();// switch语句的多个地方要使用,因此定义在外面// 多态UserDao ud = new UserDaoImpl();switch (choiceString) {case "1":// 登录界面,输入用户名和密码System.out.println("------------登录界面------------");System.out.println("请输入用户名:");String username = sc.nextLine();System.out.println("请输入密码:");String password = sc.nextLine();// 调用登录功能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.out.println("谢谢使用,欢迎下次再来!");System.exit(0);// 这里如果用break,结束的是switch} 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);// 调用注册功能// 具体类使用ud.regist(user);System.out.println("注册成功!");break;case "3":default:System.out.println("谢谢使用,欢迎下次再来!");System.exit(0);break;}}}
}

演示:

注册了六个用户:zhaomeng、yuwenwen、liulian、zhangli、zhangtianai、Jessica
用户注册
注册后在工程目录下由程序中的IO写入文档 user.txt 如下图所示:
注册文档

用户zhaomeng登录,选择是否玩猜数字游戏,选择玩
登录玩猜数字


参考引用:

参考刘意JavaSE视频

Java集合实现简单的用户注册登录并玩猜数字小游戏demo