IO流实现注册与登陆以及遇到的问题

    本例是通过IO流实现模拟登陆的小程序。编写过程中也出现了不少bug,不过都一一调试改正了过来。编写过程中出现的相关问题:

1.关于键盘录入用户信息,因为在注册和登陆过程中都使用到了,故把其封装成一个方法,在注册和登陆使用时调用即可,节省内存空间;

2.在注册和登陆过程中都需要判断原本存储用户信息的文本是否为空,此处应该是不能多次调用IO流中的BufferedReader的readLine方法,只能使用一次,所以需要创建连两个流对象,分别调用;    

3.关于return、break、continue三个关键字的使用问题:(1)return并不是用于结束循环语句的,其功能是结束一个方法,当一个方法执行到return语句时(return关键字后还可以跟变量、常量和表达式),这个方法将被结束。Return是直接结束整个方法,不管这个return处于多少层循环中。(2)break用于完全结束一个循环,跳出循环体。除此外,break,还可以直接结束其外层循环,此时需要在break后紧跟一个标签这个标签用于结束一个外层循环。(3)continue的作用是只是忽略本次循环的剩下语句,接着开始下一次循环,并不会终止循环。与break类似,continue后也可以紧跟一个标签,用于直接跳过标签所标示循环的档次循环的剩下语句,重写开始下一次循环。

4.关于String的split方法的使用:

 String[]

split(String regex)
          根据给定正则表达式的匹配拆分此字符串。

split

    public String[] split(String regex)

根据给定正则表达式的匹配拆分此字符串。

该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 split 方法。因此,所得数组中不包括结尾空字符串。

例如,字符串 "boo:and:foo" 使用这些表达式可生成以下结果:

Regex

结果

:

{ "boo", "and", "foo" }

o

{ "b", "", ":and:f" }

参数:

regex - 定界正则表达式

返回:

字符串数组,它是根据给定正则表达式的匹配拆分此字符串确定的

抛出:

PatternSyntaxException - 如果正则表达式的语法无效

5.关于编写过程中语句的顺序问题,循环嵌套的问题,其实自己感觉实现编写首先要有一个大体的思路,然后才能进行编写,对于不明白的流程,可以使用Debug进行程序执行流程的查看,进而找出问题,解决问题。。。

6.注册和登陆过程中的判断使用了变量count来计数,通过count的比较,从而进行输出语句的控制。。。感觉自己太low了!。。。

以下是具体实现的代码:

package cn.itcast.test_02;

import java.io.BufferedOutputStream;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.util.Scanner;

 

/*

需求:在src目录下创建一个peoperties文件,文件信息为以下内容:

杰克,1234

rose,1234

编写程完成登录和注册功能,

*/

public class Test {

 

    public static void main(String[] args) throws IOException {

        while (true) {

            // 欢迎界面,给出选择项

            System.out.println("--------------欢迎光临--------------");

            System.out.println("1 登录");

            System.out.println("2 注册");

            System.out.println("3 退出");

            System.out.println("请输入你的选择:");

            // 键盘录入选择,根据选择做不同的操作

            Scanner sc = new Scanner(System.in);

            int choice = sc.nextInt();

            // switch判断

            switch (choice) {

            case 1:

                dengLu();

                break;

            case 2:

                zhuCe();

                break;

            case 3:

                System.out.println("谢谢使用,欢迎下次再来");

                System.exit(0);

                break;

            default:

                System.out.println("您输入的选项不存在,请确认后重新输入!");

            }

        }

 

    }

 

    // 键盘录入信息方法

    public static String init() {

        // 创建字符串缓冲区对象

        StringBuffer s1 = new StringBuffer();

        // 创建键盘录入对象

        Scanner sc = new Scanner(System.in);

        System.out.println("请输入用户名:");

        s1.append(sc.nextLine());

        s1.append(",");

        System.out.println("请输入密码:");

        s1.append(sc.nextLine());

        String s = s1.toString();

        return s;

    }

 

    // 登录方法

    private static void dengLu() throws IOException {

        // 登录界面,请输入用户名和密码

        System.out.println("--------------登录界面--------------");

        // 调用键盘录入方法

        String s = init();

        // 创建高效输入流对象

        BufferedReader br = new BufferedReader(new FileReader("peoperties.txt"));

        BufferedReader br1 = new BufferedReader(new FileReader("peoperties.txt"));

        // 操作数据

 

        String b;

        if ((b = br.readLine()) == null) {

            System.out.println("未检测到您的用户名,请先注册。。。");

        } else {

            int count1 = 0;

            int count2 = 0;

            while ((b = br1.readLine()) != null) {

                //统计总共循环多少次

                count1++;

                if (s.equals(b)) {

                    System.out.println("登录成功!");

                    break;

                } else {

                    //统计输入的信息与一注册信息不相同的次数

                    count2++;

                    // System.out.println("您的用户名或密码不正确,请确认后,重新登录!");

                }

 

            }

 

            if (count2 == count1++) {

                System.out.println("您的用户名或密码不正确,请确认后,重新登录!");

            }

 

        }

 

        // 关闭资源

        br.close();

        br1.close();

    }

 

    // 注册功能

    @SuppressWarnings("resource")

    public static void zhuCe() throws IOException {

        System.out.println("--------------注册界面--------------");

        // 调用键盘录入方法

        String s = init();

 

        // 创建高效输出流对象

        BufferedReader br = new BufferedReader(new FileReader("peoperties.txt"));

        BufferedWriter bw = new BufferedWriter(new FileWriter("peoperties.txt", true));

        BufferedReader br1 = new BufferedReader(new FileReader("peoperties.txt"));

        BufferedWriter bw1 = new BufferedWriter(new FileWriter("peoperties.txt", true));

 

        String b;

        // 判断是否为空

        if ((b = br.readLine()) == null) {

            bw.write(s);

            bw.newLine();

            System.out.println("恭喜您注册成功!");

            // break;

        } else {

            // 如果不为空

            int count = 0;

            while ((b = br1.readLine()) != null) {

                // 把读到的字符串根据给定正则表达式的匹配拆分,按逗号拆分,

                String[] arr = b.split(",");

                if (s.split(",")[0].equals(arr[0])) {

                    count++;

                    System.out.println("您注册的用户名已经注册过,请确认后重新选择");

                    // 判断是否继续注册

                    Scanner sc1 = new Scanner(System.in);

                    System.out.println("还要继续注册吗? Y/N");

                    String s2 = sc1.next();

                    // 输入Y则继续注册,调用注册方法

                    if (s2.equals("Y")) {

                        zhuCe();

                        // System.out.println("恭喜您注册成功!");

                    } else if (s2.equals("N")) {

                        System.out.println("谢谢使用!");

                    } else {

                        System.out.println("您输入的选项有误。。。");

                    }

                    break;

                }

 

            }

            if (count == 0) {

                // 不相同,则写出

                bw1.write(s);

                bw1.newLine();

                System.out.println("恭喜您注册成功!");

            }

        }

        // 关闭资源

        br.close();

        bw.close();

        br1.close();

        bw1.close();

    }

 

}

小温

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: