循环注册十个账号,保证程序重启之后,使用这十个账号都能登录成功

 

 

 

 

用户模板

import java.io.Serializable;

public class User implements Serializable{

    
    //账号
    private String id;
    
    
    //密码
    private String password;


    public User(String id, String password) {
        super();
        this.id = id;
        this.password = password;
    }


    public String getId() {
        return id;
    }


    public void setId(String id) {
        this.id = id;
    }


    public String getPassword() {
        return password;
    }


    public void setPassword(String password) {
        this.password = password;
    }
    
    
    public static void main(String[] args) {
    
    }
    
}

 

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Zuoye02 {

    
    static Scanner sc = new Scanner(System.in);
    public static Map<String,String> map = new HashMap();
    static String choose = null;
    public static void logo() {
        
        
        //注册 
        System.out.println("注册:");
        System.out.println("请输入您要注册的账号:");
        String id = sc.next();
        
        System.out.println("请输入您要注册账号的密码:");
        String password = sc.next();
        
        
        map.put(id,password);
        
        
        
        
    }
    
    public static void main(String[] args) {
        
        
        //写一个集合
        
        //需求:
        //循环注册十个账号,保证程序重启之后,使用这十个账号都能登录成功
        
    
        //调用注册方法:
        
        
            logo();
            System.out.println("注冊成功!");
            start:while(true) {
            System.out.println("是否继续注册(y/n)");
            String choose = sc.next();
            
            if(choose.equalsIgnoreCase("y")) {
                
                logo();
                
            }else {
                
                break start;
            }
            }
    

        //要保证系统重启后再使用账号也能登录成功,那么就要把程序(注册好的账号)=>文件夹
        //而这里是把对象给对象流化了  可以用序列化和反序列化
        
        
        
        //1 地址   2 输出: 调用FileOutStra..  ObjectOutStr.. 两个类  write
    
            FileOutputStream fos = null;
            ObjectOutputStream ops = null;
        
        //再输入 读取  read  FileIn.....   ObjectRead
                FileInputStream fis = null;
                ObjectInputStream ois = null;
                
        
        try {
            fos = new FileOutputStream("C:/User/User.txt");
            fis = new FileInputStream("C:/User/User.txt");
            
            try {
                ops = new ObjectOutputStream(fos);
                ois = new ObjectInputStream(fis);
                
                ops.writeObject(map);
                
                System.out.println("注册成功!");
                ops.flush();
                ops.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Map<String, String> userIn = null;
        System.out.println("用户登录:");
        System.out.println("请输入用户账号:");
        try {
             try {
                userIn = (Map<String,String>)ois.readObject();
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
                //登录
            String id = sc.next();
            System.out.println("请输入密码:");
            String password = sc.next();
            
            User in = new User(id,password);
            if(userIn.containsKey(in.getId())&&userIn.containsValue(in.getPassword())) {
                
                
                System.out.println("登录成功!");
                
                
                
            }else if(!userIn.containsKey(in.getId())||!userIn.containsValue(in.getPassword())){
                System.out.println("密码输入错误");
                
                
            }else {
                
                
                System.out.println("登录失败!");
                
                
            }
            
//        } catch (ClassNotFoundException e) {
//            // TODO Auto-generated catch block
//            e.printStackTrace();
//    } catch (IOException e) {
//            // TODO Auto-generated catch block
//            e.printStackTrace();
        }finally {
            
            try {
                fis.close();
                ois.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            
            
        }
    
        
        
    }

    
    
}
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Reader;
import java.util.HashMap;
import java.util.Map;

//测试读取 文本类是否保存了我们注册好的账号
public class Demo {
    
    public static void main(String[] args) {
        
        //读取  用反序列化  输入
         Map<String,String> map1 = new HashMap();
        
        FileInputStream fis = null;
        
        ObjectInputStream ois = null;
        
        
        try {
            fis = new FileInputStream("C:/User/User.txt");
            try {
                ois = new ObjectInputStream(fis);
                try {
                    Map<String,String>  user = (Map<String,String>)ois.readObject();
                    
                    for (Map.Entry<String, String> demo : user.entrySet()) {
                        
                        System.out.println("用户账号是:"+demo.getKey()+"用户密码是:"+demo.getValue());
                }
                
                    
                    
                } catch (ClassNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally{
            
            try {
                ois.close();
                fis.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            
        }

        
        
    }
    

}

测试结果  先测在程序中注册成功后是否能登录成功(没重启的)

 

 看文本是否被程序传进了东西

 

 发现有被存入内容后,测试一下是不是我们刚刚注册好的账号:

 

 这里我就发现一个BUG 明明注册三个但却只显示两个但这个在后面才知道这个是正确的 (因为Map集合就是为了确保账号的唯一性)  是在注册那里少加了条件   

经过我的一番独自思考,才发现是在注册的时候少加了条件

本来我用Map集合就是为了确保账号的唯一性 但后面做着做着却完记了

 

于是我就是在注册的那边的代码进行了修改(开闭原则)

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Zuoye02 {

    static Scanner sc = new Scanner(System.in);
    public static Map<String, String> map = new HashMap();
    static String choose = null;

    public static void logo() {

        // 注册
        System.out.println("注册:");
        System.out.println("请输入您要注册的账号:");
        String id = sc.next();
        System.out.println("请输入您要注册账号的密码:");
        String password = sc.next();

//以下为修改内容:
for (Map.Entry<String, String> entry : map.entrySet()) { if (id.equalsIgnoreCase(entry.getKey())) { System.out.println("用户已存在!"); return; } } //这里结束 map.put(id, password); }

我加入判断后再输出的结果:

 

 

 

 原来输入可以正确的,因为用户已存在 则就没有将其存入文本这样再输出:

 

就是只能输出用户账号唯一的用户,确保了用户账号的唯一性  但有时也要看需求而定

 

本答案仅供参考

 

posted @ 2019-08-03 15:38  AxeBurner  阅读(322)  评论(0编辑  收藏  举报