简单的用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("创建文件失败!");
}
}
@Override
public 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;
}
@Override
public void regist(User user) {
/* 为了让注册的数据有一定的规则,自己定义规则如下:
*用户名=密码
*/
BufferedWriter bw = null;
try {
// bw = new BufferedWriter(new FileWriter("user.txt"));
// 为了保证数据是追加写入,必须加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();
}
}
}
}
}
猜数字小游戏 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 如下图所示:
参考引用:
参考刘意JavaSE视频
Java集合实现简单的用户注册登录并玩猜数字小游戏demo