用户登录注册案例
2015-05-07 02:04
274 查看
分析功能
.
搭建环境
创建一个java Project
把包结构创建出来
a) Cn.itcast.view
b) Cn.itcast.entity
c) Cn.itcast.dao
dao date access object
创建类
User类
UserDao类
User界面类
功能实现
会调用UserFrame类中的registFrame方法,这个方法中会提示,让我们输入name sex age信息。
调用UserDao中的regist方法进行注册操作。
a) 问题:注册的数据怎样传递到regist方法中
需要我们在得到数据后,将数据封装到User对象
将封装后的User对象传递到regist方法中,在regist方法中完成注册操作(将user对象存储到集合中)
当访问loginFrame方法时,我们输入了name值,这时就会调用UserDao中的login方法,完成登录操作。
a) 问题:需要将输入的用户名传递到login方法中才可以进行判断是否能登录。
b) 问题:在login方法中怎样完成登录操作哪?
遍历集合,将集合中所有的用户取出,判断用户的name属性与我们传递的name值是否一样,如果一样,就说明这个用户存在,可以登录,如果不一样,说明,用户不存在,登录失败。
我们让login方法的返回值为boolean类型,通过返回值来判断是否登录成功。
对代码进行改进及优化
问题:现在的代码,注册或登录操作执行完成后,程序就结束了,内存中存储的信息也就消失了。
//就是做了一个死循环,让程序没有选择”退出”永远执行
问题:我们现在将用户的信息注册成功后,登录时也是失败的?
原因 :因为我们在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方法重写就可以。
.
搭建环境
创建一个java Project
把包结构创建出来
a) Cn.itcast.view
b) Cn.itcast.entity
c) Cn.itcast.dao
dao date access object
创建类
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. 注册功能
先访问的是UserFrame类中的initFrame方法,在提示中我们选择0就要进行注册操作。会调用UserFrame类中的registFrame方法,这个方法中会提示,让我们输入name sex age信息。
调用UserDao中的regist方法进行注册操作。
a) 问题:注册的数据怎样传递到regist方法中
需要我们在得到数据后,将数据封装到User对象
将封装后的User对象传递到regist方法中,在regist方法中完成注册操作(将user对象存储到集合中)
2. 登录功能
当程序 运行时先访问的是UserFrame类中的initFrame方法,当我们根据提示输入1,代表要进行登录操作。这时会调用loginFrame方法,要求我们输入用户名。当访问loginFrame方法时,我们输入了name值,这时就会调用UserDao中的login方法,完成登录操作。
a) 问题:需要将输入的用户名传递到login方法中才可以进行判断是否能登录。
b) 问题:在login方法中怎样完成登录操作哪?
遍历集合,将集合中所有的用户取出,判断用户的name属性与我们传递的name值是否一样,如果一样,就说明这个用户存在,可以登录,如果不一样,说明,用户不存在,登录失败。
我们让login方法的返回值为boolean类型,通过返回值来判断是否登录成功。
对代码进行改进及优化
问题:现在的代码,注册或登录操作执行完成后,程序就结束了,内存中存储的信息也就消失了。
//就是做了一个死循环,让程序没有选择”退出”永远执行
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方法重写就可以。
相关文章推荐
- 用户注册和登录案例(服务器端:数据控制,业务层,dao层)
- Java基础知识强化之集合框架笔记37:用户登录注册案例
- 集合框架_用户登录注册案例分析图解
- 用户登录注册案例分析
- 用户登录注册案例分析
- 用户注册登录案例
- Redis用户添加、分页、登录、注册、加关注案例
- 用户注册和登录案例
- 用户登录注册案例分析
- java基础学习_集合类03_用户登录注册案例(集合版)、Set集合、Collection集合总结_day17总结
- 【Android】用户登录注册界面开发及用户信息管理案例代码详解
- 案例——用户登录注册xml版
- 用户注册登录案例分析以及简单实现
- JavaWeb-13 (用户的注册和登录案例)
- Android用户登录注册界面开发及用户信息管理案例代码详解
- 用户登录注册案例(集合版)
- Java实现--登录和注册案例(把用户信息存进集合)
- 【Android】用户登录注册界面开发及用户信息管理案例代码详解
- GUI_用户登录注册加入四则运算案例
- 集合框架_用户登录注册案例详细分析和分包的实现、用户基本描述类和用户操作接口的实现、用户操作类的具体实现、用户测试类的实现、加入猜数字小游戏