需求:用户登录注册案例(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;
}
}
}
}