智能电话本系统
-
创建项目PhoneBook项目工程名称
-
编码规范
-
类名规范
App对应 Application(程序入口)
package com.zcl; /** * 1、项目入口类 */ public class App { /** * 2、电话本启动项目 * @param args */ public static void main(String[] args) { } /** * 2、控制主菜单 */ public static void start(){ } }
Menu对应Menu(菜单类)
package com.zcl; /** * 2、生成项目中所有的菜单 */ public class Menu { /** * 2.1、程序主控制菜单 */ public void mainMenu(){ System.out.println("--------------------"); System.out.println("--- 1、添加记录 ---"); System.out.println("--- 2、查找记录 ---"); System.out.println("--- 3、修改记录 ---"); System.out.println("--- 4、删除记录 ---"); System.out.println("--- 5、排序记录 ---"); System.out.println("--- 6、退出系统 ---"); System.out.println("--------------------"); } /** * 2.2、添加一级菜单 */ public void addMenu(){ System.out.println("---------------------"); System.out.println("--- 1、添加记录 ---"); System.out.println("--- 2、查全记录 ---"); System.out.println("--- 3、返回上一级 ---"); System.out.println("---------------------"); } /** * 2.2、添加二级菜单 */ public void searchMenu(){ System.out.println("---------------------"); System.out.println("--- 1、按姓名查找 ---"); System.out.println("--- 2、按年龄查找 ---"); System.out.println("--- 3、按性别查找 ---"); System.out.println("--- 4、按号码查找 ---"); System.out.println("--- 5、按地址查找 ---"); System.out.println("--- 6、查看全记录 ---"); System.out.println("--- 7、返回上一级 ---"); System.out.println("---------------------"); } /** * 2.2、添加三级菜单 */ public void modifyMenu(){ System.out.println("---------------------"); System.out.println("--- 1、查看全记录 ---"); System.out.println("--- 2、修改指定记录 ---"); System.out.println("--- 3、返回上一级 ---"); System.out.println("---------------------"); } /** * 2.3、添加三级菜单的一级菜单 */ public void subModifyMenu(){ System.out.println("-------------------"); System.out.println("--- 1、修改姓名 ---"); System.out.println("--- 2、修改年龄 ---"); System.out.println("--- 3、修改性别 ---"); System.out.println("--- 4、修改号码 ---"); System.out.println("--- 5、修改地址 ---"); System.out.println("--- 6、返回上一级 ---"); System.out.println("---------------------"); } /** * 2.4、添加四级菜单 */ public void deleteMenu(){ System.out.println("---------------------"); System.out.println("--- 1、查看全记录 ---"); System.out.println("--- 2、删除指定记录 ---"); System.out.println("--- 3、删除全部记录 ---"); System.out.println("--- 4、返回上一级 ---"); System.out.println("---------------------"); } /** * 2.5、添加五级菜单 */ public void orderMenu(){ System.out.println("---------------------"); System.out.println("--- 1、按姓名排序 ---"); System.out.println("--- 2、按年龄排序 ---"); System.out.println("--- 3、按性别排序 ---"); System.out.println("--- 4、查看全部记录 ---"); System.out.println("--- 5、返回上一级 ---"); System.out.println("---------------------"); } }
创建Person实体类
package com.zcl; /** * 3、实体类存放手机号数据 */ public class Person { private int id; // 用户序号属性 private String name; // 姓名 private String age; // 年龄 private String sex; // 性别 private String telNum; // 手机号 private String address; // 地址 public Person() { } public Person(String name, String age, String sex, String telNum, String address) { this.name = name; this.age = age; this.sex = sex; this.telNum = telNum; this.address = address; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getTelNum() { return telNum; } public void setTelNum(String telNum) { this.telNum = telNum; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("序号").append(this.id).append("#").append("\t"); sb.append("姓名").append(this.name).append("\t\t"); sb.append("年龄").append(this.age).append("\t\t"); sb.append("性别").append(this.sex).append("\t\t"); sb.append("电话号码").append(this.telNum).append("\t\t"); sb.append("地址").append(this.address); return sb.toString(); } }
Operate对应Operate(业务处理类)
package com.zcl; import java.util.ArrayList; import java.util.List; /** * 4、核心业务类 */ public class Operate { private List<Person> list; // 容器 public Operate(){ this.list = new ArrayList<Person>(); } /** * 1、用户添加记录业务逻辑控制 */ public void addLogic(){ } /** * 2、用户查询记录业务逻辑控制 */ public void searchLogic(){ } /** * 3、用户修改业务逻辑控制 */ public void modifyLogic(){ } /** * 4、用户删除记录业务逻辑控制 */ public void deleteLogic(){ } /** * 5、用户排序记录业务逻辑控制 */ public void orderLogic(){ } /** * 6、添加用户信息 */ public void addOperation(){ } /** * 7、查询全部记录 */ public void showAll(){ } /** * 8、按姓名查询记录 */ public void searchByName(){ } /** * 9、按年龄查询记录 */ public void searchByAge(){ } /** * 10、按性别查询记录 */ public void searchBySex(){ } /** * 11、按电话号码查询记录 */ public void searchByTelNum(){ } /** * 12、按地址查询记录 */ public void searchByAddress(){ } /** * 13、修改指定记录 */ public void modifyOperation(){ } /** * 14、删除指定记录 */ public void deleteOperation(){ } /** * 15、修改全部记录 */ public void modifyAllOperation(){ } /** * 16、按姓名排序记录 */ public void orderName(){ } /** * 17、按年龄排序记录 */ public void orderAge(){ } /** * 18、按性别排序记录 */ public void orderSex(){ } }
TelNoteRegex 数据校验类
package com.zcl; /** * 5、数据校验类 */ public class TelNoteRegex { /** * 1、校验菜单输入的合法性 * @param min 最小值 * @param max 最大值 * @return 返回值 */ public int menultemValidate(int min,int max){ return 0; } /** * 2、对用户输入姓名的校验 */ public String nameValidate(){ return ""; } /** * 3、对用户输入年龄的校验 */ public String ageValidate(){ return ""; } /** * 4、对用户输入性别的校验 */ public String sexValidate(){ return ""; } /** * 5、对用户输入电话号码的校验 */ public String TelNumValidate(){ return ""; } /** * 6、对用户输入地址的校验 */ public String addressValidate(){ return ""; } }
创建比较器类
/** * 根据姓名进行排序,实现Comparable接口 */ class OrderByName implements Comparator<Person>{ @Override public int compare(Person o1, Person o2) { return 0; } } /** * 根据年龄排序方法 */ class OrderByAge implements Comparator<Person>{ @Override public int compare(Person o1, Person o2) { return 0; } } /** * 根据性别排序方法 */ class OrderBySex implements Comparator<Person>{ @Override public int compare(Person o1, Person o2) { return 0; } }
-
-
正则表达式
在 Java 中正则表达式为 String 类型,被验证的内容同样为String 类型。通过过String类中matches 方法实现内容的匹配校验。如:“被验证内容”.matches(“正则表达式"),返回一个布尔类型
-
对输入的命令进行验证
/** * 1、校验菜单输入的合法性 * * @param min 最小值 * @param max 最大值 * @return 返回值 */ public int menultemValidate(int min, int max) { // 定义验证菜单项的正则表达式 String regex = "[1-9]{1}"; // 创建输入对象 Scanner sc = new Scanner(System.in); while (true) { System.out.println("请输入如上命令:最小是:" + min + "\t最大值是:" + max); String input = sc.nextLine(); // 判断输入的数据释放合法 if (input.matches(regex)) { // 将String转换成int int inputNumber = Integer.parseInt(input); if (inputNumber >= min && inputNumber <= max) { return inputNumber; } else { System.out.println("您输入的菜单项不符合,请重新输入"); } return 0; } else { System.out.println("您输入的命令是:" + input + ",不符合命令规则"); } } }
-
对姓名进行验证
/** * 2、对用户输入姓名的校验 */ public String nameValidate() { // 验证姓名的表达式 String regex = "[a-zA-Z0-9]{1,10}"; // 创建键盘输入对象 Scanner sc = new Scanner(System.in); while(true){ System.out.println("请输入姓名,格式为:1-9之间或大小写字母:"); String name = sc.nextLine(); if(name.matches(regex)){ return name; }else{ System.out.println("您输入的格式不正确,请重新输入"); } } }
-
对年龄的验证
/** * 3、对用户输入年龄的校验 */ public String ageValidate() { String regex = "[1-9]{1}[0-9]{1}"; Scanner sc = new Scanner(System.in); while (true) { System.out.println("请输入您的合法年龄:格式为10-99之间的"); String age = sc.nextLine(); if(age.matches(regex)){ return age; }else{ System.out.println("您输入的年龄不符合,请重新输入"); } } }
-
对性别进行验证
/** * 4、对用户输入性别的校验 */ public String sexValidate() { // [m|M|f|F] String regex = "[男\\|女]{1}"; Scanner sc = new Scanner(System.in); while (true) { System.out.println("请输入合法的性别:"); String sex = sc.nextLine(); if(sex.matches(regex)){ return sex; }else { System.out.println("您输入的性别有误,请重新输入:"); } } }
-
对手机号进行验证
/** * 5、对用户输入电话号码的校验 */ public String TelNumValidate() { // 可以是区号座机和手机号 String regex = "(\\d{3,4}-\\d{7,8})|([1]{1}\\d{10})"; Scanner sc = new Scanner(System.in); while (true) { System.out.println("请输入合法的11位手机号:"); String TelNumber = sc.nextLine(); if(TelNumber.matches(regex)){ return TelNumber; }else{ System.out.println("您输入的手机号不合法,请重新输入:"); } } }
-
对地址进行验证
/** * 6、对用户输入地址的校验 */ public String addressValidate() { // 由字母或者数组长度1-50 String regex = "\\w{1,50}"; Scanner sc = new Scanner(System.in); while (true) { System.out.println("请输入合法的地址:"); String address = sc.nextLine(); if(address.matches(regex)){ return address; }else{ System.out.println("您输入的地址不合法,请重新输入:"); } } }
所有的数据校验方法完成之后,可以创建main方法进行校验是否可用
public static void main(String[] args) { TelNoteRegex telNoteRegex = new TelNoteRegex(); // telNoteRegex.menultemValidate(1,10); System.out.println(telNoteRegex.TelNumValidate()); }
-
实现start方法和main方法完成
package com.zcl; /** * 1、项目入口类 */ public class App { /** * 2、电话本启动项目 * * @param args */ public static void main(String[] args) { App app = new App(); app.start(); } /** * 2、控制主菜单 */ public static void start() { Menu menu = new Menu(); Operate operate = new Operate(); TelNoteRegex telNoteRegex = new TelNoteRegex(); while (true) { menu.mainMenu(); // 调用主菜单页面 int item = telNoteRegex.menultemValidate(1, 6); // 获取到最小最大值 // 使用switch来判断用户输入的具体流程 switch (item) { case 1: // 控制添加用户逻辑 operate.addLogic(); break; case 2: // 控制查找子菜单方法 operate.searchLogic(); break; case 3: // 控制修改的子菜单 operate.modifyLogic(); break; case 4: // 控制删除的子菜单 operate.deleteLogic(); break; case 5: // 控制排序记录 operate.orderLogic(); break; case 6: System.exit(0); // 结束虚拟机; } } } }
-
用户添加记录业务完善
/** * 1、用户添加记录业务逻辑控制 */ public void addLogic() { Menu menu = new Menu(); TelNoteRegex telNoteRegex = new TelNoteRegex(); while (true) { menu.modifyMenu(); // 显示二级菜单项 int item = telNoteRegex.menultemValidate(1, 3);// 最大最小值,需要根据每一个菜单项的值设置 // 判断菜单项的选择来执行为问题 switch (item) { case 1: this.addOperation(); // 调用添加用户 break; case 2: this.showAll(); // 调用查看用户 break; case 3: return; // 结束当前这个方法 } } }
-
完善用户查找业务逻辑控制
/** * 2、用户查询记录业务逻辑控制 */ public void searchLogic() { Menu menu = new Menu(); TelNoteRegex telNoteRegex = new TelNoteRegex(); while (true) { menu.searchMenu(); // 查找二级子菜单 int item = telNoteRegex.menultemValidate(1, 7); // 菜单的最值 switch (item) { case 1: this.searchByName(); // 按姓名查询记录 break; case 2: this.searchByAge(); // 按年龄查找 break; case 3: this.searchBySex(); // 按性别查找 break; case 4: this.searchByTelNum(); // 按号码查找 break; case 5: this.searchByAddress(); // 按地址查找 break; case 6: this.showAll(); // 查看全记录 break; case 7: return; } } }
-
用户修改业务完善
/** * 3、用户修改业务逻辑控制 */ public void modifyLogic() { Menu menu = new Menu(); TelNoteRegex telNoteRegex = new TelNoteRegex(); while (true) { menu.modifyMenu(); // 修改页面的子菜单 int item = telNoteRegex.menultemValidate(1, 3); switch (item) { case 1: this.showAll(); // 查看全记录 break; case 2: modifyOperation(); // 修改指定记录 break; case 3: return; } } }
-
用户删除记录逻辑完善
/** * 4、用户删除记录业务逻辑控制 */ public void deleteLogic() { Menu menu = new Menu(); TelNoteRegex telNoteRegex = new TelNoteRegex(); while (true) { menu.deleteMenu(); // 删除页面的子菜单 int item = telNoteRegex.menultemValidate(1, 4); switch (item) { case 1: this.showAll(); // 查看全记录 break; case 2: this.deleteOperation(); // 删除指定记录 break; case 3: this.deleteAllOperation(); // 删除全部记录 break; case 4: return; } } }
-
排序逻辑业务完善
/** * 5、用户排序记录业务逻辑控制 */ public void orderLogic() { Menu menu = new Menu(); TelNoteRegex telNoteRegex = new TelNoteRegex(); while (true) { menu.orderMenu(); // 排序页面的子菜单 int item = telNoteRegex.menultemValidate(1, 5); switch (item) { case 1: this.orderName(); // 按姓名排序 break; case 2: this.orderAge(); // 按年龄排序 break; case 3: this.orderSex(); // 按性别排序 break; case 4: this.showAll(); // 查看全记录 break; case 5: return; } } }
-
添加新记录业务功能
/** * 6、添加用户信息 */ public void addOperation() { Menu menu = new Menu(); TelNoteRegex telNoteRegex = new TelNoteRegex(); // 校验类对象 // 对用户信息进行校验 String name = telNoteRegex.nameValidate(); String age = telNoteRegex.ageValidate(); String sex = telNoteRegex.sexValidate(); String tel = telNoteRegex.TelNumValidate(); String address = telNoteRegex.addressValidate(); // 实例化pesso对象法 Person p = new Person(name,age,sex,tel,address); this.list.add(p); // 拿list的size来作为ID,有几个p就有几个ia p.setId(this.list.size()); }
-
查看全部记录业务
/** * 7、查询全部记录 */ public void showAll() { if(this.list.size() == 0){ System.out.println("没有任何手机号记录"); return; } // 遍历集合 for (Person person : this.list) { System.out.println(person); } }
-
按姓名查找业务
/** * 8、按姓名查询记录 */ public void searchByName() { TelNoteRegex telNoteRegex = new TelNoteRegex(); String name = telNoteRegex.nameValidate(); boolean flag = false; // 默认没有找到 for (int i = 0; i < this.list.size(); i++) { if(name.equals(list.get(i).getName())){ System.out.println(this.list.get(i)); flag = true; } } // 判断是否找到信息 if(flag == false){ System.out.println("没有此人记录"); } }
-
按年龄的业务功能完成
/** * 9、按年龄查询记录 */ public void searchByAge() { TelNoteRegex telNoteRegex = new TelNoteRegex(); String age = telNoteRegex.ageValidate(); boolean flag = true; for (int i = 0; i < this.list.size(); i++) { if(age.equals(this.list.get(i).getAge())){ System.out.println(this.list.get(i)); flag = false; } } if(flag){ System.out.println("无年龄符合的信息"); } }
-
按性别查找的功能
/** * 10、按性别查询记录 */ public void searchBySex() { TelNoteRegex telNoteRegex = new TelNoteRegex(); String sex = telNoteRegex.sexValidate(); boolean flag = true; for (int i = 0; i < this.list.size(); i++) { if(sex.equals(this.list.get(i).getSex())){ System.out.println(this.list.get(i)); flag = false; } } if(flag){ System.out.println("无性别符合的信息"); } }
-
按照电话号码查找功能
/** * 11、按电话号码查询记录 */ public void searchByTelNum() { TelNoteRegex telNoteRegex = new TelNoteRegex(); String tel = telNoteRegex.TelNumValidate(); boolean flag = true; for (int i = 0; i < this.list.size(); i++) { if(tel.equals(this.list.get(i).getTelNum())){ System.out.println(this.list.get(i)); flag = false; } } if(flag){ System.out.println("无性别符合的信息"); } }
-
按照地址查找功能
/** * 12、按地址查询记录 */ public void searchByAddress() { TelNoteRegex telNoteRegex = new TelNoteRegex(); String address = telNoteRegex.addressValidate(); boolean flag = true; for (int i = 0; i < this.list.size(); i++) { if(address.equals(this.list.get(i).getAddress())){ System.out.println(this.list.get(i)); flag = false; } } if(flag){ System.out.println("无性地址符合的信息"); } }
-
修改指定的内容
/** * 13、修改指定记录 */ public void modifyOperation() { TelNoteRegex telNoteRegex = new TelNoteRegex(); Menu menu = new Menu(); menu.subModifyMenu(); // 指定修改子菜单 int menuItem = telNoteRegex.menultemValidate(1,6); System.out.println("请输入记录的序号:"); // 对输入的序号进行判断,可以使用菜单项验证的方法来完成 int item = telNoteRegex.menultemValidate(1,this.list.size()); switch(menuItem){ case 1: String name = telNoteRegex.nameValidate(); // 姓名 this.list.get(item-1).setName(name); break; case 2: String age = telNoteRegex.ageValidate(); // 年龄 this.list.get(item - 1).setAge(age); break; case 3: String sex = telNoteRegex.sexValidate(); // 性别 this.list.get(item - 1).setSex(sex); break; case 4: String num = telNoteRegex.TelNumValidate(); // 号码 this.list.get(item - 1).setTelNum(num); break; case 5: String address = telNoteRegex.addressValidate(); // 号码 this.list.get(item - 1).setAddress(address); break; case 6: return; } }
-
删除指定记录
/** * 14、删除指定记录 */ public void deleteOperation() { TelNoteRegex telNoteRegex = new TelNoteRegex(); System.out.println("请输入删除记录的记号:"); int itemNum = telNoteRegex.menultemValidate(1,this.list.size()); this.list.remove(itemNum-1); // 重新为需要设置新序号 for (int i = 0; i < this.list.size(); i++) { (this.list.get(i)).setId(i+1); } System.out.println("删除成功,请继续操作!"); }
-
删除全部记录的功能
/** * 15、删除全部记录 */ public void deleteAllOperation() { this.list.clear(); // 删除集合全部记录 System.out.println("电话本的记录已全部清空,请继续操作!"); }
-
实现比较规则的排序
/** * 根据姓名进行排序,实现Comparable接口 */ class OrderByName implements Comparator<Person> { @Override public int compare(Person o1, Person o2) { // 按照字符串的compareTo()来进行比较(字典) return o1.getName().compareTo(o2.getName()); } } /** * 根据年龄排序方法 */ class OrderByAge implements Comparator<Person> { @Override public int compare(Person o1, Person o2) { return o1.getAge().compareTo(o2.getAge()); } } /** * 根据性别排序方法 */ class OrderBySex implements Comparator<Person> { @Override public int compare(Person o1, Person o2) { return o1.getSex().compareTo(o2.getSex()); } }
-
实现排序二级菜单
/** * 16、按姓名排序记录 */ public void orderName() { Collections.sort(this.list,new OrderByName()); // 重新设置序号 for (int i = 0; i < this.list.size(); i++) { (this.list.get(i)).setId(i+1); } System.out.println("排序成功---"); } /** * 17、按年龄排序记录 */ public void orderAge() { Collections.sort(this.list,new OrderByAge()); // 重新设置序号 for (int i = 0; i < this.list.size(); i++) { (this.list.get(i)).setId(i+1); } System.out.println("排序成功---"); } /** * 18、按性别排序记录 */ public void orderSex() { Collections.sort(this.list,new OrderBySex()); // 重新设置序号 for (int i = 0; i < this.list.size(); i++) { (this.list.get(i)).setId(i+1); } System.out.println("排序成功---"); }