智能电话本项目

1 项目介绍

1.1 项目描述

该项目是用于日常生活中记录联系人信息的一款智能小工具。
实现了对联系人的姓名、年龄、性别、电话号码、住址的添加及修改、查找、删 除、排序等功能。该项目是以 Windows 控制台为运行平台,所有的操作都应在控制台 上进行。

1.2 编写目的

进一步理解什么是面相对象设计(OOD:Object Oriented Design)。充分理解面向对 象设计的精髓。

2 项目演示

双击 start.bat 可启动电话本项目,如图所示:

3 技术说明

3.1 业务流程结构图

在这里插入图片描述
在这里插入图片描述

3.2 数据存储结构

在这里插入图片描述

3.3 技术要求

1.JDK 版本为1.8或以上。
2.键盘输入Scanner类。
3.正则表达式Pattern类。
4.容器 ArrayList 类。
5.排序方式(比较器排序)Comparator 接口,Collections 类的 sort 方法。

3.4 开发环境

Windows 操作系统。

3.5 开发工具

Idea

4 编码规范

4.1 类名

1.App对应Application(程序入口类)。
2.Menu对应Menu( 菜单类)。
3.Operate对应Operate(业务处理类)。
4.Person 对应 Person (实体类) 。
4.TelNoteRegex 对应TelNoteRegex(用户输入验证类) 。
5.OrderByName 对应OrderByName (姓名排序比较器) 。
6.OrderByAge 对应OrderByAge (年龄排序比较器)。
7.OrderBySex 对应OrderBySex(性别排序比较器)。

4.2 方法名

4.2.1 App类中方法

1.main() 启动程序方法。
2.start() 主菜单控制。

4.2.2 Operate类中方法

1.private List list 容器。
2.addLogic() 用户添加记录业务逻辑控制。
3.searchLogic() 用户查询记录业务逻辑控制
4.modifyLogic() 修改记录业务逻辑控制。
5.deleteLogic() 删除记录业务逻辑控制。
6.orderLogic() 排序记录业务逻辑控制。
7.addOperation () 添加新记录信息。
8.howAll() 查询全部记录。
9.searchByName() 按姓名查询记录。
10.searchByAge() 按年龄查询记录。
11.searchBySex() 按性别查询记录。
12.searchByTelNum() 按电话号码查询记录。
13.searchByAdd() 按地址查询记录.
14.modifyOperation() 修改指定记录。
15.deleteOperation() 删除指定记录。
16.deleteAllOperation() 删除全部记录。
17.orderName() 按用户姓名排序记录。
18.orderAge() 按用户年龄排序记录。
19.orderSex() 按用户性别排序记录。

4.2.3 TelNoteRegex类中方法

1.menuItemValidate (int min, int max ) 对菜单输入选项的验证。
2.nameValidate ( ) 对用户输入姓名的验证。
3.ageValidate ( ) 对用户输入年龄的验证。
4.sexValidate ( ) 对用户输入性别的验证。
5.telNumValidate ( ) 对用户输入电话号码的验证。
6.addressValidate ( ) 对用户输入地址的验证。

4.2.4 Menu类中的方法

1.mainMenu() 主菜单。
2.addMenu () 添加记录菜单。
3.searchMenu () 查找记录菜单
4.modifyMenu () 修改记录主菜单。
5.subModifyMenu () 修改记录子菜单。
6.deleteMenu () 删除记录菜单。
7.orderMenu () 排序记录菜单。

4.2.5 Person类中的方法

1.private int id; 用户序号属性。
2.private String name; 用户姓名属性。
3.private String age; 用户年龄属性。
4.private String sex; 用户性别属性。
5.private String telNum; 用户电话号码属性。
6.private String address; 用户地址属性。
7.Person() 无参数构造方法。
8.Person(String name, String age, String sex, String telNum, String address) 有参数构造方法。
9.getName() 读取用户名。
10.setName(String name) 设置用户名。
11.getAge() 读取用户年龄。
12.setAge(String age) 设置用户年龄。
13.getSex() 读取用户性别。
14.setSex(String sex) 设置用户性别.。
15.getTelNum() 读取用户电话号码。
16.setTelNum (String telNum) 设置用户电话号码。
17.getAddress() 读取用户地址。
18.setAddress(String address) 设置用户地址。
19.getID () 读取用户ID号。
20.setID (int ID) 设置用户ID号。
21 toString() 连接字符串方法。

4.2.6OrderByName类中的方法名

1.compare(Person p1, Person p2)根据姓名排序方法。

4.2.7OrderByAge类中的方法名

1.compare(Person p1, Person p2)根据年龄排序方法。

4.2.8OrderBySex类中的方法名

1.compare(Person p1, Person p2)根据性别排序方法。

5 项目开发

5.1 创建项目

1.打开IDEA如图所示的局面,点击Project,选择New Project。在这里插入图片描述
2.选择Java和JDK的版本,点击Next。如图所示:
在这里插入图片描述
3.填写项目名称,点击Finish即可。如图所示:在这里插入图片描述
4.项目结构,如图所示:在这里插入图片描述

5.2 创建类

5.2.1创建程序入口类

演示的代码如下:

package com.txw;

/**
 * 电话本项目的入口
 * @author Adair
 * @email 1578533828@qq.com
 */
@SuppressWarnings("all")   // 注解警告信息
public class App {

    /**
     * 启动电话本项目
     * @param args
     */
    public static void main(String[] args) {

    }

    /**
     * 控制主菜单
     */
    public void start(){

    }
}

如图所示:在这里插入图片描述

5.2.2 创建菜单类

演示的代码如下:

package com.txw;

/**
 * 菜单类 {@link Menu}
 * @author Adair
 * @email 1578533828@qq.com
 */
@SuppressWarnings("all")   // 注解警告信息
public class Menu {

    /**
     * 主界面
     */
    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("*************************");
    }

    /**
     * 添加界面
     */
    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 subModifyNenu(){
        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.2.3 创建实体类

演示的代码如下:

package com.txw;

/**
 * 实体类 {@link Person}
 * @author Adair
 * @email 1578533828@qq.com
 */
@SuppressWarnings("all")   // 注解警告信息
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() {
        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();
    }
}

如图所示:在这里插入图片描述

5.2.4 创建核心业务类

演示的代码如下:

package com.txw;

import java.util.ArrayList;
import java.util.List;
/**
 * 核心业务类 {@link Operate}
 * @author Adair
 * @email 1578533828@qq.com
 */
@SuppressWarnings("all")   // 注解警告信息
public class Operate {
    private List<Person> list;

    public Operate() {
        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(){

    }
}

如图所示:在这里插入图片描述

5.2.5 创建数据校验类

演示的代码如下:

package com.txw;

/**
 * 数据校验类 {@link TelNoteRegex}
 * @author Adair
 * @email 1578533828@qq.com
 */
@SuppressWarnings("all")   // 注解警告信息
public class TelNoteRegex {

    /**
     * 对菜单输入选项的验证
     * @param min
     * @param max
     * @return
     */
    public int menuItemValidate(int min,int max){
        return 0;
    }

    /**
     * 对用户输入姓名的验证
     * @return
     */
    public String menuValidate(){
        return null;
    }

    /**
     * 对用户输入年龄的验证
     * @return
     */
    public String ageValidate(){
        return null;
    }

    /**
     * 对用户输入性别的验证
     * @return
     */
    public String sexValidate(){
        return null;
    }

    /**
     * 对用户输入电话号码的验证
     * @return
     */
    public String telNumValidate(){
        return null;
    }

    /**
     * 对用户输入地址的验证
     * @return
     */
    public String addressValidate(){
        return null;
    }
}

如图所示:在这里插入图片描述

5.2.6 创建比较器类

排序器只能对在电话本中所存储的记录进行排序,不具备通用性,所以定义成 Operate 的内部类。

5.2.6.1 按姓名排序的比较器

演示的代码如下:

/**
 * 按姓名排序的比较器
 */
public class OrderByName implements Comparator<Person> {

    @Override
    public int compare(Person o1, Person o2) {
        return 0;
    }
}

如图所示:在这里插入图片描述

5.2.6.2 按年龄排序的比较器

演示的代码如下:

/**
 * 按年龄排序的比较器
 */
 class OrderByAge implements Comparator<Person> {

    @Override
    public int compare(Person o1, Person o2) {
        return 0;
    }
}

如图所示:在这里插入图片描述

5.2.6.3 按性别排序的比较器

演示的代码如下:

/**
 * 按性别排序的比较器
 */
class OrderBySex implements Comparator<Person> {
    
    @Override
    public int compare(Person o1, Person o2) {
        return 0;
    }
}

如图所示:在这里插入图片描述

6 正则表达式

6.1 正则表达式介绍

6.1.1 什么是正则表达式

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为 regex、 regexp 或 RE),是计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某 个模式(规则)的文本。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。

6.1.2 正则表达式的作用

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这 些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。使用特殊语法来表示字符类、数量限定符和位置关系,然后用这些特殊语法和普通 字符一起表示一个模式。

6.1.3 正则表达式特点

1.灵活性、逻辑性和功能性非常的强;
2.可以迅速地用极简单的方式达到字符串的复杂控制。
3.对于刚接触的人来说,比较晦涩难懂。

6.2 Java 中正则表达式的使用

在 Java 中正则表达式为 String 类型,被验证的内容同样为 String 类型。通过 String 类中 的 matches 方法实现内容的匹配校验。如:“被验证内容”.matches(“正则表达式”)。

6.3 正则表达式语法规则

正则表达式语法规则:[内容限定]{长度限定}

6.3.1 内容限定

在定义限定内容规则时,如果没有指定长度限定,那么默认长度为 1。

6.3.1.1 单个字符限定

[a]:表示当前内容必须是字母 a。

6.3.1.2 范围字符限定

[a-z0-9]:表示内容可以是 a-z 之间的任意字母或者 0-9 之间的任意数字,不分先后。

6.3.1.3 取反限定
 [^abc]:表示内容不能是 a 或 b 或 c。

6.3.2 长度限定

在正则表达式中通过{ }来限定内容长度。
固定长度:{固定长度值}
范围长度:{最小长度值,最大长度值}

  [a-z]{5}:表示内容范围为小写字母 a 到 z 且长度必须为 5
  [a-z]{2,8}:表示内容范围为小写字母 a 到 z 且长度在 28 之间,包含 28
  [a-z]{2,}:表示内容范围为小写字母 a 到 z 且最小长度为 2,最大长度无限制
  [a-z]{0,2}:表示内容范围为小写字母 a 到 z 且最小长度为 0,最大长度为 2

6.3.3 长度限定符号

长度限定符号是指通过预定义符号来完成长度限定。
?:零次或一次。等同于{0,1}
+:一次或多次。等同于{1,}
*:零次或多次。等同于{0,}

6.3.4 预定义字符

在正则表达式中可以通过一些预定义字符来表示内容限定。目的是为了简化内容限定的定义。
常见的预定义字符,如图所示:在这里插入图片描述

6.3.5 正则表达式的组合定义

在正则表达式中可以通过多个内容限定与长度限定来组合定义。
示例:
必须是以字母开头,最少长度为 4,最大长度为 8。

"[a-z]{1}\\w{3,8}"

校验带有区号的电话号码的正则表达式

"\\d{3,4}-\\d{7,8}"
"(\\d{3,4})-(\\d{7,8})"

6.4常见的正则表达式

在这里插入图片描述

7 实现验证类中的方法

7.1 对菜单项的验证

演示的代码如下:

  /**
     * 对菜单输入选项的验证
     * @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 + "\t"+"最大是: " + 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("输入数字错误,请检查!");
            }
        }
    }

如图所示:在这里插入图片描述

7.2 对姓名的验证

演示的代码如下:

    /**
     * 对用户输入姓名的验证
     * 字母可以是大写或者小写,长度1-10之间的
     * @return
     */
    public String nameValidate(){
        // 验证姓名的正则表达式
        String regex = "[a-zA-Z]{1,10}";
        // 创建键盘输入对象
        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("您当前输入的姓名有误,请重新输入!");
            }
        }
    }

如图所示:在这里插入图片描述

7.3 对年龄的验证

演示的代码如下:

    /**
     * 对用户输入年龄的验证
     * 年龄的格式要求:10-99之间的
     * @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("您输入的年龄格式有误,请重新输入!");
            }
        }
    }

如图所示:在这里插入图片描述

7.4 对性别的验证

演示的代码如下:

    /**
     * 对用户输入性别的验证
     * 性别的输入要求:男(m或M) 女(f或F)
     * @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("输入性别格式有误,请重新输入!");
            }
        }
    }

如图所示:在这里插入图片描述

7.5 对电话号码的验证

演示的代码如下:

    /**
     * 对用户输入电话号码的验证
     * 电话号码要求:允许带有区号的座机号,允许手机号
     * @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("输入的电话号码有误,请重新输入!");
            }
        }
    }

如图所示:在这里插入图片描述

7.6 对地址的验证

演示的代码如下:

    /**
     * 对用户输入地址的验证
     * 地址格式要求:字母或者数字,长度 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("您输入的地址格式有误,请重新输入。");
            }
        }
    }
}

如图所示:在这里插入图片描述

7.7 测试验证类中的方法

演示的代码如下:

    public static void main(String[] args) {
        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 telNum = regex.telNumValidate();
        System.out.println(telNum);*/
        String address = regex.addressValidate();
        System.out.println(address);
    }

如图所示:在这里插入图片描述

8 实现APP类中的方法

8.1 实现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);
            }
        }
    }

如图所示:在这里插入图片描述

8.2 实现main方法

演示的代码如下:

    /**
     * 启动电话本项目
     * @param args
     */
    public static void main(String[] args) {
        App app = new App();
        app.start();
    }

如图所示:在这里插入图片描述

9 实现Operate类中的方法

9.1 实现添加记录业务逻辑方法

演示的代码如下:

    /**
     * 用户添加记录业务逻辑控制
     */
    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;
            }
        }
    }

如图所示:在这里插入图片描述

9.2 实现查找记录业务逻辑方法

演示的代码如下:

 /**
     * 用户查询记录业务逻辑控制
     */
    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;
            }
        }
    }

如图所示:在这里插入图片描述

9.3 实现修改记录业务逻辑方法

演示的代码如下:

    /**
     * 修改记录业务逻辑控制
     */
    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.modifyOperation();
                    break;
                case 3:
                    return;
            }
        }
    }

如图所示:在这里插入图片描述

9.4 实现删除记录业务逻辑方法

演示的代码如下:

    /**
     * 删除记录业务逻辑控制
     */
    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;
            }
        }
    }

如图所示:在这里插入图片描述

9.5 实现排序记录业务逻辑控制

演示的代码如下:

    /**
     * 排序记录业务逻辑控制
     */
    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;
            }
        }
    }

如图所示:在这里插入图片描述

9.6 实现添加记录业务功能

演示的代码如下:

  /**
     * 添加新记录信息
     */
    public void addOperation(){
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        String nane = telNoteRegex.nameValidate();
        String age = telNoteRegex.ageValidate();
        String sex = telNoteRegex.sexValidate();
        String telNum = telNoteRegex.telNumValidate();
        String address = telNoteRegex.addressValidate();
        Person person = new Person(nane,age,sex,telNum,address);
        this.list.add(person);
        person.setId(this.list.size());
    }

如图所示:在这里插入图片描述

9.7 实现查看全记录业务功能

演示的代码如下:

    /**
     * 查询全部记录
     */
    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));
        }
    }

如图所示:在这里插入图片描述

9.8 实现按姓名查找记录业务功能

演示的代码如下:

    /**
     * 按姓名查询记录
     */
    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("没有此人记录");
        }
    }

如图所示:在这里插入图片描述

9.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("没有此人记录");
        }
    }

如图所示:在这里插入图片描述

9.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.equalsIgnoreCase(this.list.get(i).getSex())){
                System.out.println(this.list.get(i));
                flag = false;
            }
        }
        if (flag){
            System.out.println("没有此人记录");
        }
    }

如图所示:在这里插入图片描述

9.11 实现按电话号码查找记录业务功能

演示的代码如下:

     /**
     * 按电话号码查询记录
     */
    public void searchByTelNum(){
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        String telNum= telNoteRegex.telNumValidate();
        boolean flag = true;
        for (int i = 0; i < this.list.size(); i ++) {
            if (telNum.equals(this.list.get(i).getTelNum())){
                System.out.println(this.list.get(i));
                flag = false;
            }
        }
        if (flag){
            System.out.println("没有此人记录");
        }
    }

如图所示:在这里插入图片描述

9.12 实现按地址查找记录业务功能

演示的代码如下:

    /**
     * 按地址查询记录
     */
    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("没有此人记录");
        }
    }

如图所示:在这里插入图片描述

9.13 实现修改指定记录业务功能

演示的代码如下:

    /**
     * 修改指定记录
     */
    public void modifyOperation(){
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        Menu menu = new Menu();
        // 对被修改的记录的序号进行验证,可以使用对菜单项验证的方法来完成
        System.out.println("请输入记录的序号");
        int itemNum = telNoteRegex.menuItemValidate(1, this.list.size());
        menu.subModifyNenu();
        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) ).setAddress(address);
                break;
            case 6:
                return;
        }
    }

如图所示:在这里插入图片描述

9.14 实现删除指定记录业务功能

演示的代码如下:

    /**
     * 删除指定记录
     */
    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("删除成功!请继续操作!");
    }

如图所示:在这里插入图片描述

9.15 实现删除全部记录业务功能

演示的代码如下:

    /**
     * 删除全部记录
     */
    public void deleteAllOperation(){
        this.list.clear();
        System.out.println("电话中的记录已清空,请继续操作!");
    }

如图所示:在这里插入图片描述

9.16 实现比较器的排序规则

9.16.1 按姓名排序比较规则

演示的代码如下:

    /**
     * 按年龄排序的比较器
     */
    class OrderByName implements Comparator<Person> {

        @Override
        public int compare(Person o1, Person o2) {
            return o1.getName().compareTo(o2.getName());
        }
    }

如图所示:在这里插入图片描述

9.16.2 按年龄排序比较规则

演示的代码如下:

   /**
     * 按年龄排序的比较器
     */
    class OrderByAge implements Comparator<Person> {

        @Override
        public int compare(Person o1, Person o2) {
            return o1.getAge().compareTo(o2.getAge());
        }
    }

如图所示:在这里插入图片描述

9.16.3 按性别排序比较规则

演示的代码如下:

class OrderBySex implements Comparator<Person> {

    @Override
    public int compare(Person o1, Person o2) {
        return o1.getSex().compareTo(o2.getSex());
    }
}

如图所示:在这里插入图片描述

9…17 实现排序记录

9.17.1 实现按姓名排序业务功能

演示的代码如下:

  /**
     * 按用户姓名排序记录
     */
    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);
        }
    }

如图所示:在这里插入图片描述

9.17.2 实现按年龄排序业务功能

演示的代码如下:

    /**
     * 按用户年龄排序记录
     */
    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);
        }
    }

如图所示:在这里插入图片描述

9.17.3 实现按性别排序业务功能

演示的代码如下:

    /**
     * 按用户性别排序记录
     */
    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);
        }
    }

如图所示:在这里插入图片描述

10 导出项目

10.1 导出电话本项目的jar包

1.点击File,选择Project Structure。如图所示:
在这里插入图片描述
2.选择Artifacts,点击+,选择JAR。如图所示:在这里插入图片描述
3.跳出如图所示的界面,点击OK即可:在这里插入图片描述
4.点击Apply,如图所示:在这里插入图片描述
5.点击Build,选择Build Artifacts。如图所示:在这里插入图片描述
6.如图所示,点击Build即可:在这里插入图片描述

10.2 创建启动项目的批处理文件

创建txt文本,然后修改start.bat即可。
在批处理文件中添加的内容如下:

java -jar phonebook.jar

如图所示:在这里插入图片描述
启动start.bat即可,如图所示:在这里插入图片描述
注意事项:bat和jar包在同一文件夹目录下,否则启动不成功!
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学无止路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值