算是回顾以前所学的知识
创建项目以及程序入口类
package top.thecat;
/**
* 电话本项目入口类
*/
public class App {
/**
* 启动电话本项目
* @param args
*/
public static void main(String[] args) {
}
/**
* 控制主菜单
*/
public void start(){
}
}
创建菜单类
菜单类就是用sout来输出菜单格式:
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("*************************");
创建实体类
package top.thecat;
/**
* 实体类
*/
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;
}
// 为成员变量生成get&&set方法
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;
}
// 重写toString 快捷键ctrl O
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
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();
}
}
创建核心业务类
package top.thecat;
import java.util.ArrayList;
import java.util.List;
/**
* 核心业务类
*/
public class Operate {
private List<Person> list;
public Operate(){
// 实例化arraylist容器
this.list = new ArrayList<>();
}
/**
* 用户添加记录业务逻辑控制
*/
public void addLogic(){
}
/**
* 查询记录业务逻辑控制
*/
public void searchLogic(){
}
/**
* 修改记录业务逻辑控制
*/
public void modifyLogic(){
}
/**
* 删除记录业务逻辑控制
*/
public void deleteLogic(){
}
/**
* 排序记录业务逻辑控制
*/
public void orderLogic(){
}
/**
* 添加新记录信息
*/
public void addOperation(){
}
/**
* 查询全部记录
*/
public void showAll(){
}
/**
* 按姓名查询记录
*/
public void searchByName(){
}
/**
* 按年龄查询记录
*/
public void searchByAge(){
}
/**
* 按性别查询记录
*/
public void searchBySex(){
}
/**
* 按电话号码查询记录
*/
public void searchByTelNum(){
}
/**
* 按地址查询记录
*/
public void searchByAdd(){
}
/**
* 修改指定记录
*/
public void modifyOperation(){
}
/**
* 删除指定记录
*/
public void deleteOperation(){
}
/**
* 删除全部记录
*/
public void deleteAllOperation(){
}
/**
* 按用户姓名排序记录
*/
public void orderName(){
}
/**
* 按用户年龄排序记录
*/
public void orderAge(){
}
/**
* 按用户性别排序记录
*/
public void orderSex(){
}
}
创建数据校验类
package top.thecat;
/**
* 数据校验类
*/
public class TelNoteRegex {
/**
* 对菜单输入选项的验证的方法
* @param min
* @param max
* @return
*/
public int menuItemValidate(int min, int max){
return 0;
}
/**
* 对用户输入姓名的验证
* @return
*/
public String nameValidate(){
return null;
}
/**
* 对用户输入年龄的验证
*/
public String ageValidate(){
return null;
}
/**
* 对用户输入性别的验证
*/
public String sexValidate(){
return null;
}
/**
* 对用户输入电话号码的验证
*/
public String phoneValidate(){
return null;
}
/**
* 对用户输入的地址验证
*/
public String addressValidate(){
return null;
}
}
创建排序的比较器类
/**
* 按姓名排序的比较器
*/
class OrderByName implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
return 0;
}
}
/**
* 按年龄进行排序的比较器
* implements 接口实现
*/
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;
}
}
正则表达式介绍
正则表达式又称为规则表达式。
正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
正则表达式的作用:
事先定义好的一些特定字符、及这些特定字符的组和,组成一个“规则过滤字符串”
用来表达对字符串的一种过滤逻辑。
正则表达式的特点:
灵活性、逻辑性和功能性非常的强
可以迅速地用极简单的方式达到字符串的复杂控制
对于刚接触的人来说,比较晦涩难懂
内容限定
我擦不小心删除了,,,上网看看呗
实现菜单项验证方法
/**
* 对菜单输入选项的验证的方法
* @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("输入数字错误,请检查");
}
}
}
实现姓名验证方法
/**
* 对用户输入姓名的验证
* 字母可以是大写或小写,长度1-10之间
* @return
*/
public String nameValidate(){
// 验证姓名的正则表达式
String regex = "[a-zA-Z]{1,10}";
// 创建Scanner对象
Scanner scanner = new Scanner(System.in);
//
while (true){
System.out.println("请输入姓名,格式为:1-10之间的字母");
// 调用键盘输入对象的方法实现用户的输入
String input = scanner.nextLine();
// 正则表达式的验证
if (input.matches(regex)){
return input; //验证通过之后将用户输入争取的内容返回回去。
}else {
System.out.println("您当前输入的姓名有误,请重新输入");
}
}
}
实现年龄验证方法
/**
* 对用户输入年龄的验证
* 年龄的格式要求10-99之间
*/
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("您当前输入的年龄有误,请重新输入");
}
}
}
实现性别验证方法
/**
* 对用户输入性别的验证
* 性别的输入要求:男(M或m) 女(f或F)
*/
public String sexValidate(){
// 对性别验证的正则表达式
String regex = "[m|M|f|F]{1}"; // | 表示或者
// 创建Scanner对象
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("性别输入有误,请重新输入");
}
}
}
实现电话号码验证方法
/**
* 对用户输入电话号码的验证
* 电话号码要求:允许带有区号的做鸡号,允许手机号
*/
public String phoneValidate(){
// 对电话号码的正则表达式
String regex = "(\\d{3,4}-\\d{7,8})|([1]{1}\\d{10})";
// 创建Scanner对象
Scanner scanner = new Scanner(System.in);
while (true){
System.out.println("请输入手机号码");
// 调用Scanner对象的输入方法
String input = scanner.nextLine();
// 判断用户输入的内容是否符合条件
if (input.matches(regex)){
return input;
}else {
System.out.println("输入内容有误,请重新输入");
}
}
}
实现地址验证方法。
/**
* 对用户输入的地址验证
* 地址格式要求:字母或者数字,长度为1-50个字符
* */
public String addressValidate(){
// 定义地址验证表达式
String regex = "\\w{1,50}";
// 创建Scanner 输入对象
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("输入有误,请重新输入");
}
}
测试验证类中得验证方法
// 测试代码用
public static void main(String[] args) {
// 实例化TelNoteRegex类
TelNoteRegex regex = new TelNoteRegex();
/*int menuItem = regex.menuItemValidate(1,6);
System.out.println(menuItem);*/
/*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 tel = regex.telValidate();
System.out.println(tel);
/* String address = regex.addressValidate();
System.out.println(address);*/
}
APP类实现start方法与main方法
package top.thecat;
/**
* 电话本项目入口类
*/
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.mainMenu(); //保证主菜单一直存在
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);
}
}
}
}
Operate类
实现添加记录业务逻辑方法
/**
* 用户添加记录业务逻辑控制
*/
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;
}
}
}
实现查找记录业务逻辑方法
/**
* 查询记录业务逻辑控制
*/
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: this.showAll();break;
case 2: this.deleteOperation();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.telValidate();
String address = telNoteRegex.addressValidate();
// 实例化Person对象
Person person = new Person(name,age,sex,telNum,address); //构造方法传参
this.list.add(person);
person.setId(this.list.size()); //生成ID
}
实现查看全部记录业务功能
/**
* 查询全部记录
*/
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("查无记录");
}
}
实现按性别查找业务记录功能
/**
* 按性别查询记录
*/
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("查无记录");
}
}
实现按电话号码查找记录业务功能
/**
* 按电话号码查询记录
*/
public void searchByTelNum(){
TelNoteRegex telNoteRegex = new TelNoteRegex();
String tel = telNoteRegex.telValidate();
boolean flag = true;
for (int i=0;i<this.list.size();i++){
if (tel.equals(this.list.get(i).getSex())){
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 = 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("查无记录");
}
}
实现修改指定记录业务功能
/**
* 修改指定记录
*/
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 tel = telNoteRegex.telValidate(); (this.list.get(itemNum - 1)).setTelNum(tel); break;
case 5: String address = telNoteRegex.addressValidate(); (this.list.get(itemNum - 1)).setAddress(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(); //clear()方法 用于清空容器的元素
System.out.println("通讯录管理系统已恢复初始化状态,请继续操作!");
}
实现比较器排序规则
/**
* 按姓名排序的比较器
*/
class OrderByName implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
return o1.getName().compareTo(o2.getName());
}
}
/**
* 按年龄进行排序的比较器
* implements 接口实现
*/
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());
}
}
默认按照:按照API字典进行排序
实现排序记录
/**
* 按用户姓名排序记录
*/
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);
}
}
项目演示
java -jar test.jar 让项目跑起来