【Java】基于ArrayList实现的简单登录注册
2015-11-29 21:27
951 查看
—>需求
用Java集合框架Collection接口的ArrayList实现类来做一个简单的登录注册功能。用户选择注册功能注册一个用户名和密码,然后选择登录功能进行登录。登陆成功后,有一个猜数字的小游戏。实现的功能有:注册功能
登录功能
小游戏功能
—>分析
Java语言最本质的特点就是面向对象。为了使我们的功能更符合面向对象思想,我们首先考虑涉及到哪些对象、类:用户类
成员变量
用户名
密码
构造方法
无参构造器
代餐构造器
成员方法
getXxx()
setXxx()
登录
注册
测试类
main()
鉴于用户类可能还包括其他的成员变量和成员方法,为方便将来扩展,我们把用户类划分为用户描述类、功能操作类。如下:
用户描述类
成员变量
用户名
密码
构造方法
无参构造器
带参构造期
成员方法
getXXX()
setXXX()
功能操作类
成员方法
登录
注册
测试类
mian()
—>实现
在测试类中创建用户描述类的实例化对象,并通过对象调用其功能方法。按功能分包如下:如图所示,依次为操作功能接口、操作功能接口实现类、猜数字游戏类、用户描述类、测试类。
操作功能接口UserDao.java源码如下:
package com.liuyi.dao; import com.liuyi.pojo.User; /* * 这是针对用户进行操作的接口 * * @Version V1.0 * * */ public interface UserDao { /* * 这是用户的登录功能 * * username 用户名 * * password 密码 * * return 返回登录是否成功 * */ public abstract boolean isLogin(String username,String password) ; /* * 这是用户注册功能 * * user 这是要注册的用户信息 * */ public abstract void regist(User user) ; }
操作功能接口实现类UserDaoImpl.java源码如下:
package com.liuyi.dao.impl; import java.util.ArrayList; import com.liuyi.dao.UserDao; import com.liuyi.pojo.User; /* * 这是用户操作的具体实现类(集合版) * * */ public class UserDaoImpl implements UserDao { // 为了让多个方法访问同一个集合,把集合定义为成员变量 // 为了不让外部访问,定义为private // 为了让多个对象共享一个集合,定义为static private static ArrayList<User> array = new ArrayList<User>(); @Override public boolean isLogin(String username, String password) { boolean flag = false; for ( User us : array ) { if (us.getUsername().equals(username) && us.getPasword().equals(password)) { flag = true; break; } } return flag; } @Override public void regist(User user) { // 把用户信息存储到集合 //ArrayList<User> array = new ArrayList<User>(); array.add(user); } }
猜数字小游戏类GuessNumberGame.java源码如下:
package com.liuyi.game; import java.util.Scanner; /* * 猜数字小游戏 * * @Version V1.0 * * */ public class GuessNumberGame { public GuessNumberGame() { super(); } //游戏开始 @SuppressWarnings("resource") public static void start() { // 产生一个随机数 int number = (int)(Math.random()*100) + 1; // 定义一个统计变量 int count = 0; // 游戏开始 while (true) { // 键盘录入一个数据 System.out.println("请输入一个你猜的数据(1--100):"); Scanner sc = new Scanner(System.in); 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; } } } }
用户描述类User.java源码如下:
package com.liuyi.pojo; /* * 这是用户基本描述类 * * @Version V1.0 * * */ public class User { // 用户名 private String username; // 密码 private String pasword; public User() { super(); } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPasword() { return pasword; } public void setPasword(String pasword) { this.pasword = pasword; } }
测试类UserTest.java源码如下:
package com.liuyi.test; import java.util.Scanner; import com.liuyi.dao.UserDao; import com.liuyi.dao.impl.UserDaoImpl; import com.liuyi.game.GuessNumberGame; import com.liuyi.pojo.User; /* * 用户测试类 * * @Version V1.0 * * 两个小问题: * 1.多个对象共享一个成员变量,则该长远变量应该用静态,即static修饰。 * 2.循环里如果有switch语句,switch语句里面的break结束的只是switch语句,而不是外层循环。 * * */ public class UserTest { @SuppressWarnings("resource") 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进行选择操作 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("谢谢使用。欢迎下次光临喔^O^ "); System.exit(0); //直接退出外层while死循环 // break; // 注意,这里的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.setPasword(newPassword); // 调用注册功能 多态实现 // UserDao ud = new UserDaoImpl(); // 具体类实现 不建议使用。因为将来可能会修改实现类 // UserDaoImpl ud = new UserDaoImpl(); ud.regist(user); System.out.println("注册成功"); break; case "3": default: System.out.println("谢谢使用。欢迎下次光临喔^O^"); System.exit(0); //直接退出外层while死循环 break; } } } }
—>总结
ArrayList作为Java集合框架Collection接口的子接口List接口的实现类,底层实现代码的数据结构是数组,具有查询快、增删慢、线程不安全的特点。另外,作为Java集合框架中最长赢得实现类之一,ArrayList实现类支持泛型,因此我们可以把它封装成一个栈结构,满足栈的基本特点:先进后出。当然,还可以实现很多其他而功能,我会后续更新^O^相关文章推荐
- Eclipse下使用Maven创建项目出现的archetype错误
- Java自定义注解及注解的使用
- spring-mvc.xml
- 【spring进阶】--控制反转(IoC)和依赖注入(DI)
- 从零开始写javaweb框架笔记6-需求分析与系统设计
- Java集合中HashMap的实现原理
- 在eclipse使用log4j记录日志
- Java.IO note
- 【Eclipse for IAR】使用 Eclipse 编写 IAR 程序
- 操作系统概念 管程Java代码实现
- java+struts+spring验证用户名是否存在
- Java数据库操作
- 今天 java第一课
- 今天来打打java大数模板(整型)
- 关于JavaWeb和mysql中文乱码的经验
- java处理csv文件
- 通过利用引用型数据和基本型数据的区别可以判断出数据的类型是否是引用型的String为例
- 黑马程序员--Eclipse的基本操作(我们的课堂练习)
- Java递归应用:输出树形菜单
- Java语法基础