如何分析需求:
用户登陆注册案例:
符号面向对象分析特点:
1)当前需求中有哪些类?
2)知道某些类,这些类中有什么东西
3)这些类和类之间有什么关系
1)有哪些类:
用户类
用户的基本信息描述:
在这个基本描述类中提供:成员:username password ,提供set()/get()方法
具体的划分:
按照功能划分:
注册功能
登陆功能
用户操作的接口:
注册();登陆();
用户操作的接口实现类:
注册(){..}
登陆(){..}
用户要进行操作:
注册
登陆
测试类:
Usertest:用户测试类:
用户类和测试类:
在测试类中需要创建用户类对象,来操作登陆和注册功能
经常会按照功能划分,模块划分:
1)先按照功能划分,在按照模块划分
2)先模块划分,功能划分.
给每一个包命名的时候:
用户的描述类:user类
包:公司域名.entity;实体类
org.westos.entity;
用户操作的接口:
包:公司域名.dao:里面放的 是接口
org.westos.dao :接口层
用户操作接口的实现类:
包:
org.westos.dao.impl:业务逻辑层:接口子实现类
测试类:
包:
org.westos.test:需要针对注册或者的登陆进行测试
package org.wesots.entity;
/**
* 用户的实体类
* @author Apple
*/
public class User {
//成员变量
private String username;
private String password;
public User() {
super();
}
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;
}
}
package org.westos.dao;
import org.wesots.entity.User;
/**
* 用户的操作接口
* @author Apple
* @version V1.0
*/
public interface UserDao {
/**
* 该方法是用户登陆功能
* @param username
* 被传递的用户名
* @param password
* 需要被传递的用户密码
* @return
* 返回值表示最终登陆是否成功
*/
public abstract boolean isLogin(String username,String password) ;
/**
* 该方法表示是用户注册功能
* @param user
* 表示需要注册的用户
*/
public abstract void regist(User user) ;
}
package org.westos.dao.impl;
import java.util.ArrayList;
import org.wesots.entity.User;
import org.westos.dao.UserDao;
/**
* 这是用户操作的接口实现类:业务逻辑层
* 集合版
* @author Apple
* @version V1.0
*/
public class UserDaoImpl implements UserDao {
//为了多个功能使用这个集合中的用户,将集合的对象定义到成员变量中
//为了不让外界修改集合,所以private修饰
//将集合对象共享:注册和登陆使用的同一个集合对象
private static ArrayList array = new ArrayList() ;
//登陆功能
@Override
public boolean isLogin(String username, String password) {
//登陆,需要将注册的时候用户全都遍历出来,所以创建ArrayList集合
//假设:定义标记,用户登陆不成成功
boolean flag = false ;
//需要遍历集合获取集合中的每一个用户
for(User u :array){
//获取到每一个用户对象:u
//判断
if(u.getUsername().equals(username) && u.getPassword().equals(password)){
//修改标记
flag = true ;
break ;
}
}
return flag ;
}
//注册功能
@Override
public void regist(User user) {
//由于有很多用户,需要将用户存储到集合中,需要创建一个集合
// ArrayList array = new ArrayList() ;
//将用户存储到集合中
array.add(user) ;
}
}
package org.westos.game;
import java.util.Scanner;
//猜数字游戏的类
public class GuessNumberGame {
// 无参构造私有
private GuessNumberGame() {
}
//静态功能
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("请你输入一个数据:");
int guessNumber = sc.nextInt() ;
//统计变量++
count ++ ;
if(guessNumber>number){
System.out.println("你要猜的数据"+guessNumber+"大了");
}else if(guessNumber out.println("你要猜的数据"+guessNumber+"小了");
}else{
System.out.println("恭喜您"+count+"次猜中了");
break ;
}
}
}
}
package org.westos.test;
import java.util.Scanner;
import org.wesots.entity.User;
import org.westos.dao.UserDao;
import org.westos.dao.impl.UserDaoImpl;
import org.westos.game.GuessNumberGame;
/**
* 用户的测试类
*
* 注意事项:
* 1)登陆功能和注册功能使用的是同一个集合,将集合的对象的数据共享,应该用static
* 2):登陆成功应该退出界面,
* 现在使用switch语句,遇见break,只是结束switch语句并不能结束循环语句----->
* @author Apple
*/
public class UserTest {
public static void main(String[] args) {
//为了能够回来,加入while循环
while(true){
//给出选择的界面
System.out.println("-------------------欢迎光临------------------------");
System.out.println("请选择:");
System.out.println("1 登陆");
System.out.println("2 注册");
System.out.println("3 退出");
//创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//根据不同的选择给出界面,简单分析下
//为了方便数据的录入,就是用String类型接收
String choiceString = sc.nextLine() ;
//由于用户都需要调用登陆和注册功能,通过接口多态,所以将该用户操作的登陆对象定义到switch语句外面
UserDao ud = new UserDaoImpl() ;
//简单分析:就可以使用switch语句
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")){
//开始玩游戏
GuessNumberGame.start() ;
System.out.println("你还玩吗?y/n");
}else{
break ;
}
}
System.out.println("谢谢使用,下次再来...");
// break ;//遇见break,只是结束switch语句并不能结束循环语句
System.exit(0) ;
}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 u = new User() ;
u.setUsername(newUserName) ;
u.setPassword(newPassword) ;
//调用注册的功能:
//接口多态:
// UserDao ud = new UserDaoImpl() ;
ud.regist(u) ;
System.out.println("注册成功..");
break ;
case "3":
default:
System.out.println("谢谢使用,下次再来!");
System.exit(0) ;
break ;
}
}
}
}