java用户登录注册

用户登录注册

案例需求

在这里插入图片描述

涉及知识点

面向对象,接口,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的与序列化的相互转化细节,容易出现空指针异常 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值