java用户登录注册

用户登录注册

案例需求

用例图.png

涉及知识点

面向对象,接口,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的与序列化的相互转化细节,容易出现空指针异常 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335