1.业务流程图
2. 技术要求
a
JDK
版本为
1.8
或以上
b
键盘输入
Scanner
类
c
正则表达式
Pattern
类
e
容器
ArrayList
类 排序方式(比较器排序)
Comparator
接口,
Collections
类的
sort
方法
3.创建程序入口类
package com.wx; /** * 电话本项目人口类 */ public class App { /** * 启动电话本项目 * @param args */ public static void main(String[] args) { App app = new App(); app.start(); } /** * 控制主持的 */ public void start(){ Menu menu=new Menu(); TelNoteRegex regex=new TelNoteRegex(); Operate operate=new Operate(); while (true){ menu.mainMean(); int item = regex.menuItemValidate(1, 6); 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); } } } }
4.创建菜单类
package com.wx; /** * 生成项目中的所有菜单 */ public class Menu { //主界面 public void mainMean(){ 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("*******************************"); } //添加界面 public void addMenu(){ System.out.println("*********************************"); System.out.println("** 1 添加新记录 **"); System.out.println("** 2 查看全记录 **"); System.out.println("** 3 返回上一级 **"); System.out.println("*********************************"); } //查找界面 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("*********************************"); } //修改界面 public void modifyMenu(){ System.out.println("*********************************"); System.out.println("** 1 查看全记录 **"); System.out.println("** 2 修改指定记录 **"); System.out.println("** 3 返回上一级 **"); System.out.println("*********************************"); } //修改子界面 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("*********************************"); } //删除界面 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("*********************************"); } //排序界面 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("*********************************"); } }
5.创建实体类
package com.wx; /** * 实体类 */ 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 Person(int id, String name, String age, String sex, String telNum, String address) { this.id = id; 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() { StringBuffer sb = new StringBuffer(); sb.append("序号").append(this.id).append("#").append("\t"); sb.append("姓名").append(this.name).append("\t"); sb.append("年龄").append(this.age).append("\t"); sb.append("性别").append(this.sex).append("\t"); sb.append("电话号码").append(this.telNum).append("\t\t"); sb.append("地址").append(this.address); return sb.toString(); } }
6.创建核心业务类
package com.wx; import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput; import java.util.*; /** * 核心业务类 */ public class Operate { private List<Person> list; public Operate() { this.list = new ArrayList<>(); } /** * 用户添加记录业务逻辑控制 */ public void addLogic() { Menu menu = new Menu(); TelNoteRegex telNoteRegex = new TelNoteRegex(); while (true){ menu.addMenu(); //二级添加菜单 int item = telNoteRegex.menuItemValidate(1, 3); switch (item){ case 1:this.addOperation();break; case 2:this.showAll();break; case 3:return; } } } /** * 13 * 用户查询记录业务逻辑控制 */ public void searchLogic() { Menu menu = new Menu(); TelNoteRegex telNoteRegex = new TelNoteRegex(); while (true){ menu.searchMenu(); int item = telNoteRegex.menuItemValidate(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.searchByAdd();break; case 6:this.showAll();break; case 7:return; } } } /** * 修改记录业务逻辑控制 */ public void modifyLogic() { Menu menu = new Menu(); TelNoteRegex telNoteRegex = new TelNoteRegex(); while (true){ menu.modifyMenu(); int item = telNoteRegex.menuItemValidate(1, 3); switch (item){ case 1:showAll();break; case 2:modifyOperation();break; case 3:return; } } } /** * 删除记录业务逻辑控制 */ public void deleteLogic() { Menu menu = new Menu(); TelNoteRegex telNoteRegex = new TelNoteRegex(); while (true){ menu.deleteMenu(); int item = telNoteRegex.menuItemValidate(1, 4); switch (item){ case 1:this.showAll();break; case 2:this.deleteOperation();break; case 3:this.deleteAllOperation();break; case 4:return; } } } /** * 排序记录业务逻辑控制 */ public void orderLogic() { Menu menu = new Menu(); TelNoteRegex telNoteRegex = new TelNoteRegex(); while (true){ menu.orderMenu(); int item=telNoteRegex.menuItemValidate(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; } } } /** * 添加新记录信息 */ public void addOperation() { TelNoteRegex telNoteRegex = new TelNoteRegex(); String name=telNoteRegex.nameValidate(); String age=telNoteRegex.ageValidate(); String sex=telNoteRegex.sexValidate(); String telNum=telNoteRegex.telNumValidate(); String address=telNoteRegex.addressValidate(); Person person = new Person(name,age,sex,telNum,address); this.list.add(person); person.setId(this.list.size()); } /** * 查询全部记录 */ public void showAll() { if (this.list.size()==0){ System.out.println("没有任何记录"); return; } for (int i = 0; i < this.list.size(); i++) { System.out.println(this.list.get(i)); } } /** * 按姓名查询记录 */ public void searchByName() { TelNoteRegex telNoteRegex = new TelNoteRegex(); String name = telNoteRegex.nameValidate(); boolean flag=true; for (int i = 0; i < this.list.size(); i++) { if (name.equals(this.list.get(i).getName())){ System.out.println(this.list.get(i)); flag=false; } } if (flag){ System.out.println("没有此人记录"); } } /** * 按年龄查询记录 */ 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("没有此人记录"); } } } /** * 按性别查询记录1 */ public void searchBySex() { TelNoteRegex telNoteRegex = new TelNoteRegex(); String sex=telNoteRegex.sexValidate(); boolean flag=false; for (int i = 0; i < this.list.size(); i++) { if (sex.equals(list.get(i).getSex())){ System.out.println(this.list.get(i)); flag=false; } if (flag){ System.out.println("没有此人记录"); } } } /** * 按电话号码查询记录 */ public void searchByTelNum() { TelNoteRegex telNoteRegex = new TelNoteRegex(); String telNum=telNoteRegex.telNumValidate(); boolean flag=false; for (int i = 0; i < this.list.size(); i++) { if (telNum.equals(list.get(i).getTelNum())){ System.out.println(this.list.get(i)); flag=false; } if (flag){ System.out.println("没有此人记录"); } } } /** * 按地址查询记录 */ public void searchByAdd() { TelNoteRegex telNoteRegex = new TelNoteRegex(); String address=telNoteRegex.addressValidate(); boolean flag=false; for (int i = 0; i < this.list.size(); i++) { if (address.equals(list.get(i).getAddress())){ System.out.println(this.list.get(i)); flag=false; } if (flag){ System.out.println("没有此人记录"); } } } /** * 修改指定记录 */ public void modifyOperation() { TelNoteRegex telNoteRegex = new TelNoteRegex(); Menu menu = new Menu(); //对被修改的记录进行验证,可以使用对菜单项验证的方法来完成 System.out.println("请输入记录的序号"); int itemNum = telNoteRegex.menuItemValidate(1,this.list.size()); menu.subModifyMenu(); int menuItem = telNoteRegex.menuItemValidate(1, 6); switch (menuItem){ case 1:String name=telNoteRegex.nameValidate();(this.list.get(itemNum-1)).setName(name);break; case 2:String age=telNoteRegex.ageValidate();(this.list.get(itemNum-1)).setAge(age);break; case 3:String sex=telNoteRegex.sexValidate();(this.list.get(itemNum-1)).setSex(sex);break; case 4:String telNum=telNoteRegex.telNumValidate();(this.list.get(itemNum-1)).setTelNum(telNum);break; case 5:String address=telNoteRegex.addressValidate();(this.list.get(itemNum-1)).setTelNum(address);break; case 6:return; } } /** * 删除指定记录 */ public void deleteOperation() { TelNoteRegex telNoteRegex = new TelNoteRegex(); System.out.println("请输入记录序号"); int itemNum = telNoteRegex.menuItemValidate(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("删除成功,请继续操作"); } /** * 删除全部记录 */ public void deleteAllOperation() { this.list.clear(); System.out.println("电话中的记录已经清空,请继续操作"); } /** * 按用户姓名排序记录 */ 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); } } /** * 按用户年龄排序记录 */ 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); } } /** * 按用户性别排序记录 */ 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); } } /** * 按姓名排序的比较器 */ class OrderByName implements Comparator<Person> { @Override public int compare(Person o1, Person o2) { 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()); } } }
7.创建数据校验类
package com.wx; import java.util.Scanner; /** * 数据校验类 */ public class TelNoteRegex { /** * 对菜单输入选项的验证 * * @param min * @param max * @return */ public int menuItemValidate(int min, int max) { //定义正则表达式 String regex = "[1-9]{1}"; //键盘输入对象 Scanner scanner = new Scanner(System.in); while (true) { System.out.println("请输入正确的数字,最小是:" + min + " 最大是:" +max); String input = scanner.nextLine(); if (input.matches(regex)) { int inputNum = Integer.parseInt(input); if (inputNum >= min && inputNum <= max) { return inputNum; } else { System.out.println("你输入的菜单项不符,请重新输入"); } } else { System.out.println("输入数字错误,请检查!"); } } } /** * 对用户输入姓名的验证 *字母可以是大写或者小写 * @return */ public String nameValidate() { //验证姓名正则表达式 String regex="[a-zA-z]{1,10}"; //创建键盘输入 Scanner scanner=new Scanner(System.in); while (true){ System.out.println("请输入姓名:格式为1-19之间的大写或者字母小写"); String input = scanner.nextLine(); if (input.matches(regex)){ return input; }else { System.out.println("你输入的姓名有误,请重新输入!"); } } } /** * 对用户输入年龄的验证 * * @return */ public String ageValidate() { //验证年龄正则表达式 String regex="[1-9]{1}[0-9]{1}"; //键盘的输入 Scanner scanner=new Scanner(System.in); while (true){ System.out.println("请输入你的年龄:格式为10-99"); String input = scanner.nextLine(); if (input.matches(regex)){ return input; }else { System.out.println("你输入的年龄有误,请重新输入"); } } } /** * 对用户输入性别的验证 * * @return */ public String sexValidate() { //验证性别正则表达式 String regex="[m|M|f|F]{1}"; //键盘输入 Scanner scanner=new Scanner(System.in); while (true){ System.out.println("请输入你的性别:男(m or M)女(f or F)"); String input = scanner.nextLine(); if (input.matches(regex)){ return input; }else { System.out.println("你输入的性别有误,请重新输入!"); } } } /** * 17 * 对用户输入电话号码的验证 *电话号码要求:允许带有区号的座机号,允许手机号 * @return */ public String telNumValidate() { //验证性别正则表达式 String regex="(\\d{3,4}-\\d{7,8})|([1]{1}\\d{10})"; //创建键盘输入 Scanner scanner=new Scanner(System.in); while (true) { System.out.println("请输入电话号码:座机号,允许手机号"); String input = scanner.nextLine(); if (input.matches(regex)) { return input; } else { System.out.println("你输入的电话号码有误,请重新输入 "); } } } /** * 对用户输入地址的验证 *地址格式要求:字母或者数字,长度1,50 * @return */ public String addressValidate() { String regex="(\\w{1,50})"; Scanner scanner=new Scanner(System.in); while (true){ System.out.println("请输入你的地址:格式为字母或者数字,长度为1,50"); String input = scanner.nextLine(); if (input.matches(regex)){ return input; }else { System.out.println("你输入的地址有误,请重新输入!"); } } } public static void main(String[] args) { TelNoteRegex regex = new TelNoteRegex(); // int menuItemValidate= regex.menuItemValidate(1,6); // System.out.println(menuItemValidate); // String name = regex.nameValidate(); // System.out.println(name); // String age = regex.ageValidate(); // System.out.println(age); // String sex = regex.sexValidate(); // System.out.println(sex); // String address = regex.addressValidate(); // System.out.println(address); } }