黑马程序员_关于使用IO进行登录注册案例

------Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流------ 


本文章主要是使用IO流实现对数据的本地存储和读取登录,而且在注册的时候考虑到用户名已存在的情况并返回"用户名已存在注册失败"
若成功登录后可以玩一个随机猜1-100的小游戏!
通过这些编程的练习可以很好的让我们掌握IO流的存储以及读取数据的应用开发过程,同时加深对其理解!

创建登录注册案例的接口
import cn.xiaodi.dao.domain.User;

public interface UserDao {
	//登录的功能
	public abstract boolean userLogin(String userName , String password) ;
	
	//注册的功能
	
	public abstract void userRegist(User user);
	
}

创建登录注册类并实现登录注册案例的接口
首先是创建登录注册方法,在注册中要考虑如果用户名已存在的情况
代码实现如下:
package cn.xiaodi.dao.imp;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import cn.xiaodi.dao.UserDao;
import cn.xiaodi.dao.domain.User;

public class UserDaoImp implements UserDao {
	
	static{
		//使用静态代码块创建file对象随着类的加载而加载
		File file = new File("E:\\小迪好.txt");
		
		if (!file.exists()) {
			try {
				file.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	@Override
	public boolean userLogin(String userName, String password) {
		
		//登录的功能
		boolean flag = false ;
		//创建高效输入流对象
		BufferedReader br = null;
		try {
			br = new BufferedReader(new FileReader("E:\\小迪好.txt"));
			//频繁的读写
			String line = null ;
			//对异常进行捕获处理
			try {
				while ((line = br.readLine()) != null) {
					String[] splits = line.split("----");
					if (splits[0].equals(userName) && splits[1].equals(password)) {
						flag = true;
						break ;
					}
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			
			try {
				br.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		return flag ;
	}

	//注册的功能
	@Override
	public void userRegist(User user) {
		
		/**
		 * 注册: 我们需要将用户的数据通过流对象写入到一个文本文件中
		 * 我们现在接受的是一个User对象,而到目前为止我们没有学到对应的流把一个对象直接写入到文本文件中.
		 * 但是我们可以将用户的信息存储到文本文件中.而这个用户的信息有哪些呢?
		 * 有用户名和密码. 存储的时候我们如何进行存储.我们在存储的时候应该让一个用户的数据占一行.
		 * 在存储用户名和密码的时候可以指定一个规则: 比如: 用户名----密码
		 */
		//创建高效输出流对象
		BufferedWriter bw = null ;
		try {
			bw = new BufferedWriter(new FileWriter("E:\\小迪好.txt" , true));
			
			//使用if判断该用户名是否存在,若存在提示该用户名已存在,不存在则注册成功
			if (!UserDaoImp.print(user)) {
				
			String userInfo = user.getUserName() + "----" + user.getPassword();
			
					bw.write(userInfo);
					bw.newLine();
					bw.flush();
					System.out.println("恭喜你注册成功!!!");
			
			}else{
				
			System.out.println("该用户名已存在!!!");
			}
			
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			
			try {
				bw.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
		
		
	//注册时判断是否已存在该用户的功能
	public static boolean print(User user){
		
		boolean flag = false ;
		//创建一个高效输入流对象
		BufferedReader br = null ;
		try {
			br = new BufferedReader(new FileReader("E:\\小迪好.txt"));
			//使用每次读取一行
			String line = null ;
				while ((line = br.readLine()) != null) {
				String[] strs = line.split("----");
					//判断用户名是否存在
					if ((strs[0].equals(user.getUserName()))) {
						flag = true ;
						break ;
					} 
				}
		}catch(IOException e) {
				e.printStackTrace();
			}finally{
			
				try {
				br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return flag ; 
	}
}

登录注册测试类,用于对程序运行的检验
package cn.xiaodi.dao.test;

import java.util.Scanner;
import cn.xiaodi.dao.UserDao;
import cn.xiaodi.dao.domain.User;
import cn.xiaodi.dao.imp.UserDaoImp;
import cn.xiaodi.game.GuessNumGame;

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: 退出");
			
			// 创建键盘录入对象
			Scanner sc = new Scanner(System.in);
			System.out.println("请输入您的选择: ");
			String myChoice = sc.nextLine() ;
			
			//创建对象
			UserDao userDao = new UserDaoImp();
			
			//选择
			switch(myChoice){
				case "1" :
					System.out.println("------------欢迎登录------------");
					System.out.println("请您输入用户名: ");
					String loginUserName = sc.nextLine() ;
					System.out.println("请您输入密码: ");
					String loginPassword  = sc.nextLine() ;
					
					//调用方法
					boolean flag = userDao.userLogin(loginUserName, loginPassword);
					
					if (flag) {
						System.out.println("请问是否玩猜数字小游戏: y/n");
						String result = sc.nextLine();
						if ("y".equalsIgnoreCase(result)) {
							GuessNumGame.startGame() ;
						} else {
							System.out.println("欢迎下次再来!!!");
						}
						
					} else {
						System.out.println("用户名或密码错误!!!");
					}
					System.exit(0);
					
				case "2" :
					System.out.println("------------欢迎注册------------");
					System.out.println("请您输入用户名: ");
					String registUserName = sc.nextLine() ;
					System.out.println("请您输入密码: ");
					String registPassword  = sc.nextLine() ;
					
					//创建user对象并将数据封装到user中
					User user = new User();
					user.setUserName(registUserName);
					user.setPassword(registPassword);
					
					//调用注册的功能
					userDao.userRegist(user);
					
					break; 
				case "3" :
				default :
					System.out.println("欢迎下次再来!");
					System.exit(0) ;
			}
		}	
	}
}

登陆于注册用户类,用于接受注册以及登录时读取信息
package cn.xiaodi.dao.domain;

public class User {
	
	private String userName ; 
	
	private String password ;

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

	public User(String userName, String password) {
		super();
		this.userName = userName;
		this.password = password;
	}

	public User() {
		super();
	}	
}

猜数字小游戏类,一但用户登录成功既可以选择是否开始玩这个小游戏
package cn.xiaodi.game;

import java.util.Scanner;

public class GuessNumGame {
	
	/**
	 * 构造方法私有化
	 */
	private GuessNumGame() {}

	/**
	 * 猜数字小游戏
	 */
	public static void startGame(){
		
		// 给出提示
		System.out.println("猜数字小游戏开始了.....");
		
		// 生成一个随机数
		int num = (int)(Math.random() * 100) + 1 ;
		
		// 键盘录入数据
		Scanner sc = new Scanner(System.in) ;
		
		while(true){
			
			System.out.println("请您输入一个数据: ");
			int guessNum = sc.nextInt() ;
			
			if(guessNum > num){
				System.out.println("对不起,大了!");
			}else if(guessNum < num){
				System.out.println("对不起,小了!");
			}else {
				System.out.println("恭喜您猜中了!!!");
				break ;
			}
		}
		
	}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值