黑马程序员技术交流社区
标题:
【武汉校区】用户登录注册
[打印本页]
作者:
武汉分校-小舞
时间:
2019-3-5 16:40
标题:
【武汉校区】用户登录注册
案例需求
用例图.png
(91.03 KB, 下载次数: 8)
下载附件
2019-3-5 15:48 上传
涉及知识点
面向对象,接口,Java序列化,HashMap,IO流
欢迎界面
public class
BootStrap
{
public static
void
main(
String
[] args) {
System.out.println(
"欢迎来到自动售货系统,请选择:"
);
FrontMenu.showFirstLevelMeun();
}
}
一级目录
public class
FrontMenu
{
public static
void
showFirstLevelMeun() {
UserService userService
=
new
UserServiceImp();
System.out.println(
"1、注册 2、登录"
);
Scanner sc
=
new
Scanner(System.in);
String
select
=
sc.nextLine();
//注册
if
(select.equals(
"1"
)) {
System.out.println(
"请输入用户名:"
);
String
username
=
sc.nextLine();
System.out.println(
"请输入密码:"
);
String
password
=
sc.nextLine();
System.out.println(
"请再次输入密码:"
);
String
password2
=
sc.nextLine();
if
(password.equals(password2)) {
boolean
isExists = userService.isExists(username);
if
(isExists) {
System.out.println(
"此用户名已存在"
);
showFirstLevelMeun();
}
else
{
System.out.println(
"请输入地址:"
);
String
address
=
sc.nextLine();
userService.regist(username,password,address);
}
}
else
{
System.out.println(
"您输入的密码不一致"
);
showFirstLevelMeun();
}
}
else if
(select.equals(
"2"
)) {
//登录
System.out.println(
"请输入用户名:"
);
String
username
=
sc.nextLine();
System.out.println(
"请输入密码:"
);
String
password
=
sc.nextLine();
boolean
success
=
userService.login(username,password);
if
(success) {
System.out.println(
"登录成功"
);
}
else
{
System.out.println(
"用户名或者密码错误"
);
showFirstLevelMeun();
}
}
else
{
System.out.println(
"您输入的选项不正确"
);
showFirstLevelMeun();
}
}
}
登录注册功能交互
public interface
UserService
{
/*
* 判断用户名是否已经存在
*/
boolean
isExists(
String
username);
/*
* 注册一个用户
*/
void
regist(
String
username,
String
password,
String
address);
/*
* 登录
*/
boolean
login(
String
username,
String
password); }
实现接口中的具体方法
public class
UserServiceImp
implements
UserService{
UserDao userdao = new UserDaoImp();
/*
* 判断用户名是否存在
*/
@Override
public
boolean
isExists(
String
username) {
HashMap
<
String
,User
>
userMap
=
userdao.loadUserData();
return
userMap.containsKey(username);
}
/**
* 注册
*/
@Override
public
void
regist(
String
username,
String
password,
String
address) {
User user
=
new
User();
user.setUsername(username);
user.setPassword(password);
user.setAddress(address);
//调用dao将user数据添加到hashmap中
HashMap
<
String
,User
>
userMap
=
userdao.loadUserData();
//将新用户对象添加到userMap中
userMap.put(user.getUsername(), user);
//调用dao将添加后usermap保存到数据文件中
userdao.saveUserData(userMap);
System.out.println(
"注册成功"
);
FrontMenu.showFirstLevelMeun();
}
/*
* 登录
*/
@Override
public
boolean
login(
String
username,
String
password) {
//调用dao将user数据添加到hashmap中
HashMap
<
String
,User
>
userMap
=
userdao.loadUserData();
if
(userMap.containsKey(username)) {
User user
=
userMap.get(username);
if
(user.getPassword().equals(password)) {
return
true
;
}
else
{
return
false
;
}
}
else
{
return
false
;
}
}
}
程序中的用户数据与磁盘文件存储数据的接口
public interface
UserDao
{
/**
* 将数据文件中得数据读取到hashmap中
*/
HashMap
<
String
, User
>
loadUserData();
/**
* 将hashmap中的数据保存到数据文件中
*/
void
saveUserData(HashMap
<
String
, User
>
userMap);
}
实现接口中的具体方法
public class
UserDaoImp
implements
UserDao{
/**
* 将hashMap中的数据保存到用户数据文件中
*/
@Override
public
HashMap
<
String
, User
>
loadUserData() {
File file
=
new
File(
"D:/user.data"
);
try
{
if
(
!
file.exists()) {
HashMap
<
String
, User
>
userMap
=
new
HashMap
<
String
, User
>
();
ObjectOutputStream oos
=
new
ObjectOutputStream(
new
FileOutputStream(file));
oos.writeObject(userMap);
oos.close();
return
userMap;
}
ObjectInputStream ois
=
new
ObjectInputStream(
new
FileInputStream(file));
HashMap
<
String
, User
>
userMap
=
(HashMap
<
String
, User
>
)ois.readObject();
ois.close();
return
userMap;
}
catch
(Exception e) {
System.out.println(
"文件里没有对象"
);
e.printStackTrace();
}
System.out.println(
3
);
return
null
;
}
/*
* 将hashMap中的数据保存文件中
*/
@Override
public
void
saveUserData(HashMap
<
String
, User
>
userMap) {
try
{
ObjectOutputStream oos
=
new
ObjectOutputStream(
new
FileOutputStream(
"D:/user.data"
));
oos.writeObject(userMap);
oos.flush();
oos.close();
}
catch
(Exception e) {
e.printStackTrace();
}
}
}
使用的user类
public class
User
implements
Serializable{
private
String
username;
private
String
password;
private
String
address;
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;
}
public
String
getAddress() {
return
address;
}
public
void
setAddress(
String
address) {
this
.address
=
address;
}
}
注意事项
1.进行序列化的对象必须要实现Serializable接口
2.IO流的关流操作
3.HashMap的与序列化的相互转化细节,容易出现空指针异常
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2