用户登录注册案例

  1. 分析功能
    . 这里写图片描述
  2. 搭建环境
    1. 创建一个java Project
    2. 把包结构创建出来
      a) Cn.itcast.view
      b) Cn.itcast.entity
      c) Cn.itcast.dao
      dao date access object
  3. 创建类
    User类
    UserDao类
    User界面类
    这里写图片描述
package cn.itcast.entiry;

//创建用户类
public class User {

    private String name;
    private String sex;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        User other = (User) obj;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }

}
package cn.itcast.view;

import java.util.Scanner;

import cn.itcast.dao.UserDao;
import cn.itcast.entiry.User;

//用户操作界面类
public class UserFrame {
    Scanner sc = new Scanner(System.in);
    UserDao dao = new UserDao();

    // 1.创建一个初始化页面的方法
    public void initFrame() {
        while (true) {
            System.out.println("请选择你要做的操作:\n 0:注册 \n 1:登录\n 2:退出");
            int type = sc.nextInt();
            switch (type) {
            case 0:
                registFrame();
                break;
            case 1:
                loginFrame();
                break;
            case 2:
                exit();
                break;
            default:
                System.out.println("谢谢光临.");
            }
        }
    }

    // 这是选择退出时要执行的方法
    public void exit() {
        System.out.println("谢谢你的访问");
        System.exit(0); // jvm停止
    }

    // 这是选择注册操作时要执行的内容
    public void registFrame() {
        System.out.println("请输入你的姓名");
        String name = sc.next();
        System.out.println("请输入你的性别");
        String sex = sc.next();
        System.out.println("请输入你的年龄");
        int age = sc.nextInt();
        // 将数据封装到User对象中。
        User user = new User();
        user.setName(name);
        user.setSex(sex);
        user.setAge(age);

        // 需要调用UserDao中的regist方法
        // UserDao dao = new UserDao();
        dao.regist(user);

        // dao.regist(name,sex,age);
        System.out.println("注册成功");
    }

    // 这是选择登录操作时要执行的内容:
    public void loginFrame() {
        System.out.println("请输入你的姓名");
        String name = sc.next();

        // 需要调用UserDao中的login方法
        // UserDao dao = new UserDao();

        // boolean flag = dao.login(name);

        User user = new User();
        user.setName(name);
        boolean flag = dao.login(user);
        if (flag) {
            System.out.println("登录成功");
        } else {
            System.out.println("登录失败");
        }
    }
}
package cn.itcast.dao;

import java.util.ArrayList;
import java.util.List;

import cn.itcast.entiry.User;

public class UserDao {
    private  List<User> users = new ArrayList<User>(); // 它就是一個用于存儲用户信息的数据库。

    // 注册操作
    public void regist(User user) {
        // System.out.println("用户注册操作");

        users.add(user); //将用户存储到集合中.
    }

    // 登录操作
    public boolean login(String name) {
//      System.out.println("用户的登录操作");

        for(User user:users){ //遍历集合
            if(user.getName().equals(name)){//集合中每一个User对象的名字与传递过来要登录用户的名称一样
                return true;
            }
        }
        return false;
    }

    public boolean login(User user) {       
        return users.contains(user);
    }
}

功能实现

1. 注册功能

  1. 先访问的是UserFrame类中的initFrame方法,在提示中我们选择0就要进行注册操作。
  2. 会调用UserFrame类中的registFrame方法,这个方法中会提示,让我们输入name sex age信息。
  3. 调用UserDao中的regist方法进行注册操作。
    a) 问题:注册的数据怎样传递到regist方法中
  4. 需要我们在得到数据后,将数据封装到User对象
  5. 将封装后的User对象传递到regist方法中,在regist方法中完成注册操作(将user对象存储到集合中)

2. 登录功能

  1. 当程序 运行时先访问的是UserFrame类中的initFrame方法,当我们根据提示输入1,代表要进行登录操作。这时会调用loginFrame方法,要求我们输入用户名。
  2. 当访问loginFrame方法时,我们输入了name值,这时就会调用UserDao中的login方法,完成登录操作。
    a) 问题:需要将输入的用户名传递到login方法中才可以进行判断是否能登录。
    b) 问题:在login方法中怎样完成登录操作哪?
    遍历集合,将集合中所有的用户取出,判断用户的name属性与我们传递的name值是否一样,如果一样,就说明这个用户存在,可以登录,如果不一样,说明,用户不存在,登录失败。
    我们让login方法的返回值为boolean类型,通过返回值来判断是否登录成功。
  3. 对代码进行改进及优化
    问题:现在的代码,注册或登录操作执行完成后,程序就结束了,内存中存储的信息也就消失了。
    //就是做了一个死循环,让程序没有选择”退出”永远执行
while (true) {
            System.out.println("请选择你要做的操作:\n 0:注册 \n 1:登录\n 2:退出");
            int type = sc.nextInt();
            switch (type) {
            case 0:
                registFrame();
                break;
            case 1:
                loginFrame();
                break;
            case 2:
                exit();
                break;
            default:
                System.out.println("谢谢光临.");
            }
}

问题:我们现在将用户的信息注册成功后,登录时也是失败的?
原因 :因为我们在UserDao中声明的的private List users它是成员变量,那么代表的就是只要是UserDao的对象中就有自己的users.而我们在loginFrame,registFrame中每一次都是重新new UserDao();

解决方案:
1. 将UserDao中的集合声明成static
2. 在UserFrame中声明一个UserDao对象,在所有方法中使用同一个对象就可以。
优化:
在loginFrame中我们调用UserDao 中的login方法进行登录操作。
1. 我们在传递时,不传递String 类型的name属性,而是传递一个User对象。
2. 在UserDao中将login方法改进
public boolean login(User user) {
return users.contains(user);
}
现在这个操作是有问题的,我们知道contains方法是判断集合中是否包含指定的对象,是根据equals方法比较。我们只需要将user类中的equals方法重写就可以。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的 Vue 用户登录注册案例: 在 Vue 项目中创建一个名为 Login.vue 的组件: ```html <template> <div> <h2>用户登录</h2> <form> <div> <label>用户名:</label> <input type="text" v-model="username" /> </div> <div> <label>密码:</label> <input type="password" v-model="password" /> </div> <button type="button" @click="login">登录</button> </form> <hr /> <h2>用户注册</h2> <form> <div> <label>用户名:</label> <input type="text" v-model="newUsername" /> </div> <div> <label>密码:</label> <input type="password" v-model="newPassword" /> </div> <button type="button" @click="register">注册</button> </form> </div> </template> <script> export default { data() { return { username: "", password: "", newUsername: "", newPassword: "", }; }, methods: { login() { // 发送登录请求 console.log("用户名:" + this.username); console.log("密码:" + this.password); }, register() { // 发送注册请求 console.log("用户名:" + this.newUsername); console.log("密码:" + this.newPassword); }, }, }; </script> ``` 在 App.vue 中使用 Login 组件: ```html <template> <div id="app"> <login /> </div> </template> <script> import Login from "./components/Login.vue"; export default { components: { Login, }, }; </script> ``` 这是一个非常简单的登录注册案例,你可以根据自己的需求进行修改和完善。在实际项目中,你需要发送 AJAX 请求到后端服务器,进行用户登录注册的处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值