zoukankan      html  css  js  c++  java
  • 用户登录注册案例(集合版)

    用户登录注册案例(集合版)分析:

    需求:用户登录注册案例(集合版)。
    
    按照如下的操作,可以让我们更符合面向对象思想
        A:有哪些类呢?
        B:每个类有哪些东西呢?
        C:类与类之间的关系是什么呢?
        
    分析:
        A:有哪些类呢?
            用户类
            测试类
        B:每个类有哪些东西呢?
            用户类:
                成员变量:用户名,密码
                构造方法:无参构造
                成员方法:getXxx()/setXxx()
                       登录
                       注册
                           
                假如用户类的内容比较多,将来维护起来就比较麻烦,为了更清晰的分类,我们就把用户又划分成了两类
                    用户基本描述类
                        成员变量:用户名,密码
                        构造方法:无参构造   
                        成员方法:getXxx()/setXxx()
                    用户操作类
                        登录
                        注册
            测试类:
                main方法。
        C:类与类之间的关系是什么呢?
            在测试类中创建用户操作类和用户基本描述类的对象,并使用其功能。
            
    分包:
        A:功能划分
        B:模块划分
        C:先按模块划分,再按功能划分
        
    今天我们选择按照功能划分:
        用户基本描述类包 cn.itcast.pojo
        用户操作接口 cn.itcast.dao
        用户操作类包 cn.itcast.dao.impl
            今天是集合实现,过几天是IO实现,再过几天是GUI实现,就业班我们就是数据库实现
        用户测试类 cn.itcast.test

    用户登录注册案例分析图解:

      

    示例代码如下:

      这是用户基本描述类

     1 package cn.itcast.pojo;
     2 
     3 /**
     4  * 这是用户基本描述类
     5  * 
     6  * @author 风清扬
     7  * @version V1.0
     8  * 
     9  */
    10 public class User {
    11     // 用户名
    12     private String username;
    13     // 密码
    14     private String password;
    15 
    16     public User() {
    17     }
    18 
    19     public String getUsername() {
    20         return username;
    21     }
    22 
    23     public void setUsername(String username) {
    24         this.username = username;
    25     }
    26 
    27     public String getPassword() {
    28         return password;
    29     }
    30 
    31     public void setPassword(String password) {
    32         this.password = password;
    33     }
    34 }
    User.java

      这是针对用户进行操作的接口

     1 package cn.itcast.dao;
     2 
     3 import cn.itcast.pojo.User;
     4 
     5 /**
     6  * 这是针对用户进行操作的接口
     7  * 
     8  * @author 风清扬
     9  * @version V1.0
    10  * 
    11  */
    12 public interface UserDao {
    13     /**
    14      * 这是用户登录功能
    15      * 
    16      * @param username
    17      *            用户名
    18      * @param password
    19      *            密码
    20      * @return 返回登录是否成功
    21      */
    22     public abstract boolean isLogin(String username, String password);
    23 
    24     /**
    25      * 这是用户注册功能
    26      * 
    27      * @param user
    28      *            要注册的用户信息
    29      */
    30     public abstract void regist(User user);
    31 }
    UserDao.java

      这是用户操作的具体实现类(集合版)

     1 package cn.itcast.dao.impl;
     2 
     3 import java.util.ArrayList;
     4 
     5 import cn.itcast.dao.UserDao;
     6 import cn.itcast.pojo.User;
     7 
     8 /**
     9  * 这是用户操作的具体实现类(集合版)
    10  * 
    11  * @author 风清扬
    12  * @version V1.0
    13  * 
    14  */
    15 public class UserDaoImpl implements UserDao {
    16     // 为了让多个方法能够使用同一个集合,就把集合定义为成员变量
    17     // 为了不让外人看到,用private修饰
    18     // 普通的成员变量是每个对象所特有的
    19     // private ArrayList<User> array = new ArrayList<User>();
    20     // 为了让多个对象共享同一个成员变量,用static修饰
    21     // 即静态的成员变量是每个对象都可以使用的
    22     private static ArrayList<User> array = new ArrayList<User>();
    23 
    24     @Override
    25     public boolean isLogin(String username, String password) {
    26         // 遍历集合,获取每一个用户,并判断该用户的用户名和密码是否和传递过来的匹配
    27         boolean flag = false;
    28 
    29         for (User u : array) {
    30             if (u.getUsername().equals(username) && u.getPassword().equals(password)) {
    31                 flag = true;
    32                 break;
    33             }
    34         }
    35 
    36         return flag;
    37     }
    38 
    39     @Override
    40     public void regist(User user) {
    41         // 把用户信息存储到集合
    42         // ArrayList<User> array = new ArrayList<User>();
    43         array.add(user);
    44     }
    45 }
    UserDaoImpl.java

      这是用户测试类

      1 package cn.itcast.test;
      2 
      3 import java.util.Scanner;
      4 
      5 import cn.itcast.dao.UserDao;
      6 import cn.itcast.dao.impl.UserDaoImpl;
      7 import cn.itcast.game.GuessNumber;
      8 import cn.itcast.pojo.User;
      9 
     10 /**
     11  * 这是用户测试类
     12  * 
     13  * @author 风清扬
     14  * @version V1.0
     15  * 
     16  *        新增加了两个小问题
     17  *          A:多个对象共享同一个成员变量时,该成员变量用静态修饰
     18  *          B:循环里面如果有switch,并且在switch里面有break,那么结束的不是循环,而是switch语句
     19  * 
     20  */
     21 public class UserTest {
     22     public static void main(String[] args) {
     23         // 为了能够回来
     24         while (true) {
     25             // 欢迎界面,给出选择项
     26             System.out.println("--------------欢迎光临--------------");
     27             System.out.println("1 登录");
     28             System.out.println("2 注册");
     29             System.out.println("3 退出");
     30             System.out.println("请输入你的选择:");
     31             
     32             // 键盘录入选择,根据选择做不同的操作
     33             Scanner sc = new Scanner(System.in);
     34             // 为了后面的录入信息的方便,我所有的数据录入全部用字符串进行接收
     35             String choiceString = sc.nextLine();
     36 
     37             // switch语句的多个地方要使用它,我就定义到外面
     38             UserDao ud = new UserDaoImpl();
     39 
     40             // 经过简单的思考,我选择了switch,必须是JDK7以后,因为switch的表达式是字符串(JDK7的新特性)
     41             switch (choiceString) {
     42             case "1":
     43                 // 登录界面,请输入用户名和密码
     44                 System.out.println("--------------登录界面--------------");
     45                 System.out.println("请输入用户名:");
     46                 String username = sc.nextLine();
     47                 System.out.println("请输入密码:");
     48                 String password = sc.nextLine();
     49 
     50                 // 调用登录功能
     51                 // UserDao ud = new UserDaomImpl();
     52 
     53                 boolean flag = ud.isLogin(username, password);
     54                 if (flag) {
     55                     System.out.println("登录成功,可以开始玩游戏了");
     56 
     57                     System.out.println("你玩吗?y/n");
     58                     while (true) {
     59                         String resultString = sc.nextLine();
     60                         if (resultString.equalsIgnoreCase("y")) {
     61                             // 玩游戏
     62                             GuessNumber.start();
     63                             System.out.println("你还玩吗?y/n");
     64                         } else {
     65                             break;
     66                         }
     67                     }
     68                     
     69                     System.out.println("谢谢使用,欢迎下次再来");
     70                     
     71                     System.exit(0);
     72                     // break; // 这里的break,结束的是switch,而while循环没有结束
     73                 } else {
     74                     System.out.println("用户名或者密码有误,登录失败");
     75                 }
     76                 break;
     77             case "2":
     78                 // 注册界面,请输入用户名和密码
     79                 System.out.println("--------------注册界面--------------");
     80                 System.out.println("请输入用户名:");
     81                 String newUsername = sc.nextLine();
     82                 System.out.println("请输入密码:");
     83                 String newPassword = sc.nextLine();
     84 
     85                 // 调用注册功能
     86                 // 多态用法
     87                 // UserDao ud = new UserDaoImpl();
     88                 // 具体类用法
     89                 // UserDaoImpl udi = new UserDaoImpl();
     90 
     91                 // 把用户名和密码封装到一个对象中
     92                 User user = new User();
     93                 user.setUsername(newUsername);
     94                 user.setPassword(newPassword);
     95                 
     96                 ud.regist(user); // 肯定注册成功,因为该方法的底层调用的是ArrayList的add()方法,该方法总是返回true。
     97                 System.out.println("注册成功"); 
     98                 break;
     99             case "3":
    100             default:
    101                 System.out.println("谢谢使用,欢迎下次再来");
    102                 System.exit(0); // 强制退出
    103                 break;
    104             }
    105         }
    106     }
    107 }

      这是猜数字小游戏

     1 package cn.itcast.game;
     2 
     3 import java.util.Scanner;
     4 
     5 /**
     6  * 这是猜数字小游戏
     7  * 
     8  * @author 风清扬
     9  * @version V1.0
    10  * 
    11  */
    12 public class GuessNumber {
    13     private GuessNumber() {
    14     }
    15 
    16     public static void start() {
    17         // 产生一个随机数
    18         int number = (int) (Math.random() * 100) + 1;
    19 
    20         // 定义一个统计变量
    21         int count = 0;
    22 
    23         while (true) {
    24             // 键盘录入一个数据
    25             Scanner sc = new Scanner(System.in);
    26             System.out.println("请输入数据[1-100]:");
    27             int guessNumber = sc.nextInt();
    28 
    29             count++;
    30 
    31             // 判断
    32             if (guessNumber > number) {
    33                 System.out.println("你猜的数据" + guessNumber + "大了");
    34             } else if (guessNumber < number) {
    35                 System.out.println("你猜的数据" + guessNumber + "小了");
    36             } else {
    37                 System.out.println("恭喜你," + count + "次就猜中了");
    38                 break;
    39             }
    40         }
    41     }
    42 }
    View Code
  • 相关阅读:
    Javascript高级程序设计第二版第十四章异常笔记
    九大另类中文垂直搜索引擎
    弹出拖动层
    Javascript高级程序设计第二版第十一章DOM2,DOM3笔记
    【物联网智能网关15】WAV播放器(WinForm+WavPlay库实例)
    【物联网中间件平台03】YFIOs安装指南
    【物联网中间件平台05】YFIOs策略开发指南
    【物联网中间件平台01】真正面向物联网的组态软件 YFIOs和YFHMI的前生今世
    【物联网中间件平台02】YFIOs技术白皮书(V1.1)
    【物联网中间件平台06】RFID刷卡拍照
  • 原文地址:https://www.cnblogs.com/chenmingjun/p/8654721.html
Copyright © 2011-2022 走看看