黑马程序员_一个登录注册小案例

这是一个使用Java编写的登录注册系统实例,包含用户类、用户数据接口及其实现、测试类和一个简单的猜数字游戏。系统提供了集合版和IO版两种用户信息存储方式,实现了用户信息的读写操作。

 ------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

为了方便阅读,在这里我把这几个类放一起写了,没有分包,请谅解

集合版的

import java.util.ArrayList;

import java.util.Scanner;

//创建一个用户类

class User {
//定义用户名
private String userName ;
//定义密码
private String password ;


public User() {
super();
}


public User(String userName, String password) {
super();
this.userName = userName;
this.password = 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;
}


}

//创建一个功能接口

interface UserDao {

/**
* 登录的功能
* @param userName
* @param password
* @return
*/
public abstract boolean userLogin(String userName , String password) ; 

/**
* 注册的功能
* @param user
*/
public abstract void userRegist(User user) ;

}


//创建接口的子类
class UserDaoImpl implements UserDao {

private static ArrayList<User> users = new ArrayList<User>() ;


@Override
public boolean userLogin(String userName, String password) {

// 定义一个boolean类型的变量,用来记录登录的结果
boolean flag =  false ;

/**
* 遍历集合获取每一个用户的信息,然后和传递进来的用户名和密码进行匹配
*/
for(User u : users){

if(userName.equals(u.getUserName()) && password.equals(u.getPassword())){
flag = true ;
break ;
}

}

return flag;
}


@Override
public void userRegist(User user) {

/**
* 把用户的信息添加到集合中
*/
// 添加
users.add(user) ;

}


}

//创建测试类

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 UserDaoImpl() ;

// 选择
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("恭喜您,登录成功!!!");

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 = new User() ;
user.setUserName(registUserName) ;
user.setPassword(registPassword) ;

// 调用注册的功能
// 调用方法
userDao.userRegist(user) ;

// 提示
System.out.println("恭喜您,注册成功!!!");

break ;
case "3" :
default :
System.out.println("欢迎下次再来!");
System.exit(0) ;
}

}

}


}

//创建游戏类

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

}
}


-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

IO版和集合版的区别主要是创建接口的子类

IO版

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

import java.util.Scanner;

class User {

private String userName ;

private String password ;


public User() {
super();
}


public User(String userName, String password) {
super();
this.userName = userName;
this.password = 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;
}


}

interface UserDao {

/**
* 登录的功能
* @param userName
* @param password
* @return
*/
public abstract boolean userLogin(String userName , String password) ; 

/**
* 注册的功能
* @param user
*/
public abstract void userRegist(User user) ;

}

class UserDaoImpl implements UserDao {

private static final String USER_INFO_FILE_NAME = "userInfo.txt" ;
private static final String USER_INFO_OPER = "=" ;

static {
try {
File file = new File(USER_INFO_FILE_NAME) ;
if(!file.exists()){
file.createNewFile() ;
}
} catch (Exception e) {
e.printStackTrace() ;
}
}


@Override
public boolean userLogin(String userName, String password) {

// 定义一个boolean类型的变量,用来记录登录的结果
boolean flag = false ;

/**
* 登录: 从文本文件中读取数据,一次读取一行. 对读取到的数据进行切割.获取对应的用户名和密码然后在进行判断
*/
// 创建一个高效流对象
BufferedReader br = null ;
try {

br = new BufferedReader(new FileReader(USER_INFO_FILE_NAME)) ;

// 频繁的读取操作
String line = null ;
while((line = br.readLine()) != null){

// 对这个用户信息进行切割
String[] userInfoArr = line.split(USER_INFO_OPER) ;

// 判断
if(userInfoArr[0].equals(userName) && userInfoArr[1].equals(password)){
flag = true ;
break ;
}
}

} catch (IOException e) {
e.printStackTrace();
} finally {
if(br != null){
try {
br.close() ;
} catch (IOException e) {
e.printStackTrace();
}
}
}


return flag;
}


@Override
public void userRegist(User user) {

/**
* 注册: 我们需要将用户的数据通过流对象写入到一个文本文件中
* 我们现在接受的是一个User对象,而到目前为止我们没有学到对应的流把一个对象直接写入到文本文件中.
* 但是我们可以将用户的信息存储到文本文件中.而这个用户的信息有哪些呢?
* 有用户名和密码. 存储的时候我们如何进行存储.我们在存储的时候应该让一个用户的数据占一行.
* 在存储用户名和密码的时候可以指定一个规则: 比如: 用户名=密码
*/
// 创建一个字符输出流 --- 使用高效的字符输出流
BufferedWriter bw = null ;

try {

// 需要使用追加写
bw = new BufferedWriter(new FileWriter(USER_INFO_FILE_NAME , true)) ;

// 按照指定的规则拼接用户信息
String userInfo = user.getUserName() + USER_INFO_OPER + user.getPassword() ;

// 把用户的输出存储的文本文件中
bw.write(userInfo) ;

// 换行
bw.newLine() ;

// 刷新
bw.flush() ;

} catch (IOException e) {
e.printStackTrace();
}finally {

if(bw != null){
try {
bw.close() ;
} catch (IOException e) {
e.printStackTrace();
}
}
}

}


}

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 UserDaoImpl() ;

// 选择
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("恭喜您,登录成功!!!");

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 = new User() ;
user.setUserName(registUserName) ;
user.setPassword(registPassword) ;

// 调用注册的功能
// 调用方法
userDao.userRegist(user) ;

// 提示
System.out.println("恭喜您,注册成功!!!");
break ;
case "3" :
default :
System.out.println("欢迎下次再来!");
System.exit(0) ;
}
}
}
}

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

}
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值