• Java-->IO流模拟实现用户登录以及登录信息


    --> Test 测试类

    package com.dragon.java.hwlogin;
    
    import java.io.FileNotFoundException;
    import java.util.HashSet;
    import java.util.Scanner;
    import java.util.Set;
    
    /*
     * 模拟用户登陆,并记录登陆日志。
     a:根据用户的选择是注册用户还是登陆用户。   
     b:如果是用户注册把用户注册的用户名和密码保存在文件中,文件可以记录多组用户名和密码。    
     c:每个用户每登陆一次都生产一个登陆记录,把登陆记录保存在文件中,形成登陆日志。登陆记录格式(用户名, 密码, 登陆时间): ==zhangsan, xxxxx, 2016年8月16日 13:20:20==  
     d:如果是用Admin管理员的身份登陆的,可以查看所有的用户的登陆记录。否则其他用户只可以查看自己的登陆记录。
     */
    public class Test {
        static Set<User> set = new HashSet<>();
    
        @SuppressWarnings("resource")
        public static void main(String[] args) throws FileNotFoundException {
            Scanner scanner = new Scanner(System.in);
            AdminUser adminUser = new AdminUser();
            User thisUser = null;
            // 首先将曾经的用户信息存入集合中
            adminUser.splitFile(AdminUser.filePath2, set);
            while (true) {
                System.out.println("-----欢迎使用xxx系统-----");
                System.out.println("1.注册用户           2.登录用户");
                System.out.println("3.管理员登录       4.退出");
                System.out.println("请输入序号:");
                String name = null, password = null;
                switch (scanner.nextInt()) {
                case 1:
                    System.out.println("-----用户注册:-----");
                    System.out.println("请输入用户名:");
                    name = scanner.next();
                    System.out.println("请输入密码:");
                    password = scanner.next();
                    System.out.println("请确认密码:");
                    if (!scanner.next().equals(password)) {
                        System.out.println("两次输入的密码不相同!");
                        continue;
                    }
                    if (set.size() != 0) {
                        if (adminUser.userExist(name, set) != null) {
                            System.out.println("该用户已存在!");
                            break;
                        } else {
                            adminUser.userRegister(name, password, set);
                        }
                    } else {
                        adminUser.userRegister(name, password, set);
                    }
                    break;
                case 2:
                    System.out.println("-----用户登录:-----");
                    if (set.size() != 0) {
                        System.out.println("请输入用户名:");
                        name = scanner.next();
                        System.out.println("请输入密码:");
                        password = scanner.next();
                        if ((thisUser = adminUser.userExist(name, set)) == null) {
                            System.out.println("该用户不存在!");
                        } else if (!password.equals(thisUser.getPassword())) {
                            System.out.println("密码错误!");
                        } else {
                            System.out.println("亲爱的" + thisUser.getName()
                                    + ",您的登录记录为:");
                            // 得到所有的用户曾登录信息并与当前用户进行比较
                            Set<User> setTime = new HashSet<>();
                            adminUser.splitFile(AdminUser.filePath, setTime);
                            for (User user : setTime) {
                                if (thisUser.getName().equals(user.getName())) {
                                    System.out.println(user);
                                }
                            }
                            System.out.println("您现于" + adminUser.loginTime()
                                    + "登录!");
                            adminUser.userLogin(name, password,
                                    adminUser.loginTime(), set);
                        }
                    } else {
                        System.out.println("还没有用户注册!");
                        continue;
                    }
                    break;
                case 3:
                    adminUser.readUser();
                    break;
                case 4:
                    System.out.println("已退出!");
                    System.exit(0);
                default:
                    System.out.println("输入有误!...");
                    continue;
                }
            }
        }
    }

    --> AdminUser 类对用户登录进行控制以及录入信息

    package com.dragon.java.hwlogin;
    
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.PrintStream;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Locale;
    import java.util.Set;
    
    class AdminUser {
        @SuppressWarnings("unused")
        private static InputStream in = System.in;
        private static PrintStream out = System.out;
        private static PrintStream ps = null;
        private static BufferedReader br = null;
        static String filePath = "D:/workspace/08-16/src/com/dragon/java/hwlogin/login.txt";
        static String filePath2 = "D:/workspace/08-16/src/com/dragon/java/hwlogin/users.txt";
    
        /**
         * 判断user 是否存在
         * 
         * @param name
         * @param set
         * @return
         */
        public User userExist(String name, Set<User> set) {
            for (User user : set) {
                if (name.equals(user.getName())) {
                    return user;
                }
            }
            return null;
        }
    
        /**
         * 用户登录
         * 
         * @param name
         * @param password
         * @param time
         * @param set
         */
        public void userLogin(String name, String password, String time,
                Set<User> set) {
            User user = new User(name, password, time);
            writeUser(ps, user, filePath, set);
        }
    
        /**
         * 用户注册
         * 
         * @param name
         * @param password
         * @param set
         */
        public void userRegister(String name, String password, Set<User> set) {
            User user = new User(name, password);
            writeUser(ps, user, filePath2, set);
        }
    
        /**
         * 登录用的曾登录信息,通过读取当前的系统时间
         * 
         * @return
         */
        public String loginTime() {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
                    "yyyy年MM月dd日  hh:mm:ss", Locale.CHINA);
            Date date = new Date(System.currentTimeMillis());
            String time = simpleDateFormat.format(date); // 当前系统时间
            return time;
        }
    
        /**
         * 读取所有用户的登录信息
         */
        public void readUser() {
            try {
                br = new BufferedReader(new FileReader(filePath));
                String line = null;
                while ((line = br.readLine()) != null) {
                    System.out.println(line);
                }
            } catch (IOException e) {
                System.out.println(e);
            } finally {
                try {
                    br.close();
                } catch (IOException e) {
                    System.out.println(e);
                }
            }
        }
    
        /**
         * 将用户信息(或登录信息)写入到文件中
         * 
         * @param ps
         * @param user
         * @param file
         * @param set
         */
        public void writeUser(PrintStream ps, User user, String file, Set<User> set) {
            set.add(user);
            try {
                // FileOutputStream(file,true) --> true表示确认文件追加 --> 即不刷新文件
                ps = new PrintStream(new FileOutputStream(file, true), true);
                System.setOut(ps);
                System.out.println(user);
            } catch (FileNotFoundException e) {
                System.out.println(e);
            } finally {
                // 重新设置"标准"输出流到控制台
                System.setOut(out);
            }
        }
    
        /**
         * 将存储信息的文件分割得到用户数据并存入集合
         * 
         * @param file
         * @param set
         */
        public void splitFile(String file, Set<User> set) {
            try {
                br = new BufferedReader(new FileReader(file));
                String line = null;
                while ((line = br.readLine()) != null) {
                    String[] strings = line.split(",");
                    User user = new User(strings[0].substring(11,
                            strings[0].length()), strings[1].substring(10,
                            strings[1].length()), strings[2].substring(6,
                            strings[2].length()));
                    set.add(user);
                }
            } catch (IOException e) {
                System.out.println(e);
            } finally {
                try {
                    br.close();
                } catch (IOException e) {
                    System.out.println(e);
                }
            }
        }
    }

    --> User 类存放用户的属性

    package com.dragon.java.hwlogin;
    
    class User {
        private String name;
        private String password;
        private String time;
    
        User() {
            super();
        }
    
        User(String name, String password) {
            super();
            this.name = name;
            this.password = password;
        }
    
        User(String name, String password, String time) {
            this(name, password);
            this.time = time;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public String getTime() {
            return time;
        }
    
        public void setTime(String time) {
            this.time = time;
        }
    
        @Override
        public String toString() {
            return "User [name=" + name + ", password=" + password + ", time="
                    + time + "]";
        }
    
    }

    --> 重定向输入输出流之前要先保存系统默认的输入输出流(即System.in 和 System.out),以便恢复...

  • 相关阅读:
    C++中智能指针的设计和使用
    [转]C++ 智能指针详解
    C++ const 常量和常指针
    深入理解C++中的mutable关键字
    C++ 静态常量
    BZOJ 1875: [SDOI2009]HH去散步
    BZOJ 1024: [SCOI2009]生日快乐
    BZOJ 1059: [ZJOI2007]矩阵游戏
    bzoj 1833: [ZJOI2010]count 数字计数
    LUOGU P2587 [ZJOI2008]泡泡堂
  • 原文地址:https://www.cnblogs.com/xmcx1995/p/5779687.html
Copyright © 2020-2023  润新知