javaSE基础介绍之集合和IO流
程序员文章站
2022-09-26 22:19:35
1.有一个接口,此接口中提供了注册方法,我们注册时只限定账号的长度,和账号是否已经存在,其他不用限定,长度限定自己开心就好2.然后有一个功能类想要实现注册功能,需要实现这个接口,然后对注册方法进行功能实现3.每个用户注册功能限定使用三次,超过三次还没有注册成功,就自动退出,4.每注册成功一个用户,就将用户保存在集合中,可以选择是否继续注册,如果不注册,就跳出循环,如果注册,就可以继续循环5.然后再将集合中所有的用户的信息保存在文件上,保存格式如下:每个用户占用一行 账号 密码 手机号等列头...
1.有一个接口,此接口中提供了注册方法,我们注册时只限定账号的长度,和账号是否已经存在,其他不用限定,长度限定自己开心就好
2.然后有一个功能类想要实现注册功能,需要实现这个接口,然后对注册方法进行功能实现
3.每个用户注册功能限定使用三次,超过三次还没有注册成功,就自动退出,
4.每注册成功一个用户,就将用户保存在集合中,可以选择是否继续注册,如果不注册,就跳出循环,如果注册,就可以继续循环
5.然后再将集合中所有的用户的信息保存在文件上,保存格式如下:
每个用户占用一行 账号 密码 手机号等列头 一定要有
账号 密码 手机号
代码如下.
package day14.test0815; import java.io.*; import java.util.HashMap; import java.util.Map; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; /**
* 账号注册Demo
1.根据要求新建接口,里面只有一个抽象的注册方法,随后根据需要再决定这个方法的参数列表 让测试类实现这个接口
2.创建用户类 成员变量是用户的账号 密码 手机号
3.创建一个hashMap用于存储注册的账号和其他信息.账号作为键,为了确保账号不会重复,每次运行都需要把文件中的账号信息读入此集合中
4.调入注册方法,写进循环里,为了方便之后判断是否继续注册
5.写注册方法,在方法里写输入账号的循环
6.判断账号无误后,分别写输入密码和输入手机号的循环
7.所有信息无误就将信息存入User对象,再将账号和User对象存入hashMap 结束方法
8.写是否继续注册的判断
*/ public class TestDemo1 implements reg{ public static void main(String[] args) throws Exception { File file = new File("d:/account.txt"); //存储账号信息的文件 HashMap<String, User> accounts = new HashMap<>();//存储账号密码的集合 Scanner scanner = new Scanner(System.in); TestDemo1 testDemo1 = new TestDemo1(); //创个测试类对象才能调用本类方法 if (file.length()==0){ //如果文件是空的就把标头写入文件 FileWriter fileWriter = new FileWriter(file,true); BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); bufferedWriter.write("账号"+"\t\t"+"密码"+"\t\t"+"手机号"); bufferedWriter.newLine(); bufferedWriter.close(); } //将account.txt文件中的账号信息读入accounts集合 String line; FileReader fileReader = new FileReader(file); BufferedReader bufferedReader = new BufferedReader(fileReader); long skip = bufferedReader.skip(13); //跳过文件的标头 while ((line=bufferedReader.readLine())!=null){ // System.out.println(line); String[] split = line.split("\\s"); //将读到的每行字符串用空白字符割分 User user = new User(split[0],split[1],split[2]); accounts.put(split[0],user); } a:do { testDemo1.register(accounts,file); //调用注册方法 for (Map.Entry<String, User> entry : accounts.entrySet()) { //打印account集合里的信息 User u = entry.getValue(); System.out.println("[账号:"+entry.getKey()+"\t信息:"+u.getUsername()+"\t"+u.getPassword()+"\t"+u.getPhone()+"]"); } b:do{ //判断是否继续注册 System.out.println("是否继续注册?(y/n)"); String i = scanner.next(); String s = i.toLowerCase().trim(); if (s.equals("n")) { System.out.println("一路走好"); break a; //输入n就结束注册循环 } else if (s.equals("y")) { break; //输入y就跳出是否继续注册的判断,从头调用注册方法 } else { System.out.println("输入有误 请重新选择:"); //输入别的字符串就重新输入 } }while (true); }while (true); } /**
* 注册方法 将注册成功的用户信息存入account.txt
* @param accounts
* @param file
* @throws Exception
*/ @Override public void register(HashMap<String, User> accounts,File file) throws Exception{ int times = 0 ; //用于判断是否注册失败了3次 Scanner scannerA = new Scanner(System.in); System.out.println("欢迎注册"); System.out.println("请输入您的用户名(最小长度为8 最大长度为15):"); do { //输入账号 String sA = scannerA.nextLine().trim(); //账号字符串 if (sA.length() > 7 && sA.length() < 16 && !accounts.containsKey(sA)) {// 如果账号在长度之内且尚未存在 输入密码 String sP; do { //输入密码 System.out.println("请输入密码(最小长度为8 最大长度为15)"); Scanner scannerP = new Scanner(System.in); sP = scannerP.nextLine().trim(); //密码字符串 }while (sP.length() < 8 || sP.length() > 15); //输入手机号 String sN; //手机号字符串 System.out.println("请输入手机号:"); do { Scanner scannerN = new Scanner(System.in); sN = scannerN.nextLine().trim(); if (!isMobileNO(sN)) { //如果手机号不合法打印提示 System.out.println("请重新输入手机号:"); } } while (!isMobileNO(sN)); //如果手机号不合法就继续循环输入 User user = new User(sA, sP, sN); //创建用户对象 accounts.put(sA, user); //将该用户保存在hashmap中 //将此次注册的账号信息写入account.txt文件 FileWriter fileWriter = new FileWriter(file,true); BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); bufferedWriter.write(sA+"\t"+sP+"\t"+sN); bufferedWriter.newLine(); bufferedWriter.close(); System.out.println("注册成功!"); return; } System.out.println("账号不合法"); }while (times++<2);//如果次数超过3次就跳出循环 System.out.println("失败超过三次,请您过段时间再来吧"); } /**
* 验证手机号码
* @param mobiles
* @return
*/ public static boolean isMobileNO(String mobiles){ boolean flag = false; try{ Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$"); Matcher m = p.matcher(mobiles); flag = m.matches(); }catch(Exception e){ flag = false; } return flag; } }
package day14.test0815; public class User { private String username; private String password; private String phone; public User() { } public User(String username, String password, String phone) { this.username = username; this.password = password; this.phone = phone; } @Override public String toString() { return "User{" + "username='" + username + '\'' + ", password='" + password + '\'' + ", phone='" + phone + '\'' + '}'; } 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 getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } }
package day14.test0815; import java.io.File; import java.util.HashMap; public interface reg { void register(HashMap<String, User> accounts, File file) throws Exception; }
PS:BufferedReader真好用.
本文地址:https://blog.csdn.net/weixin_44855583/article/details/108028307