天天看点

JAVA智能电话本项目|JavaSE中篇项目 第一版本

** 如有错误,感谢指正**

请根据目录寻找自己需要的段落

导语:本博客为个人整理Java学习记录帖,如有错误,感谢指正。系统学习,欢迎持续关注,后续陆陆续续更新Java后端项目,Java部分我不打算更新基础部分知识,会从JavaWeb开始更新文章。

Java 交流qq群 383245788

项目描述

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

程序关闭,所有数据消失,下一步优化方向是本地保存,JavaIO相关的使用。后续会在JavaWeb时,再优化一下,实现网络通信。

项目目的

通过该项目可以对以往所学过的知识点进行统- -的复 习,将平时所学的内容综合到一起并运用到实际的项目中。

该项目能够充分的体现出一些简单的业务流程处理,能够使同学们掌握基本的业务流程处理。

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

项目分析

数据存储结构

id 序号
name 姓名
age 年龄
sex 性别
telephoneNumber 电话号码
address 地址

技术要求

JDK版本1.8以上

键盘输入Scanner类

正则表达式Pattern类

容器ArrayList类

排序方式(比较强排序)Comparator接口,Collections类的sort方法

开发环境

windows操作系统

开发工具

Idea

编码规范

类名

App 对应 Application 程序入口类

Menu 对应Menu 菜单类

Operate 对应 Operate 业务处理类

Person 对应 Person 实体类

TelNoteRegex 对应TelNoteRegex 用户输入验证类

OrderByName 对应 OrderByName 姓名排序比较器

OrderByAge 对应 OrderByAge 年龄排序比较器

OrderBySex 对应 OrderBySex 性别排序比较器

方法名

App类中方法

main()启动程序方法

start()主菜单控制

Operate 类

private List<Person> list容器

addLogic()用户添加记录业务逻辑控制

searchLogic()用户查询记录业务逻辑控制

modifyLogic()修改记录业务逻辑控制

deletelogic()删除记录业务逻辑控制

orderLogic()排序记录业务逻辑控制

addOperation ()添加新记录信息

showAl()查询全部记录

searchByName()按姓名查询记录

searchByAge()按年龄查询记录

searchBySex()按性别查询记录

searchByTelNum()按电话号码查询记录

searchByAdd()按地址查询记录

modifyOperation()修改指定记录

deleteOperation() 删除指定记录

deleteAllOperation() 删除全部记录

orderName()按用户姓名排序记录

orderAge()按用户年龄排序记录

orderSex()按用户性别排序记录

TelNoteRegex 类

menuItemValidate (int min, int max )对菜单输入选项的验证

nameValidate ()对用户输入姓名的验证

ageValidate ()对用户输入年龄的验证

sexValidate ()对用户输入性别的验证

telNumValidate ()对用户输入电话号码的验证

addressValidate ()对用户输入地址的验证

Menu 类

mainMenu()主菜单

addMenu ()添加记录菜单

searchMenu()查找记录菜单

modifyMenu ()修改记录主菜单

subModifyMenu()修改记录子菜单

deleteMenu ()删除记录菜单

Person类

private int id;用户序号属性

private String name;用户姓名属性

private String age;用户年龄属性

private String sex;用户性别属性

private String telNum;用户电话号码属性

private String address;用户地址属性

Person()无参数构造方法

Person(String name, String age, String sex, String telNum, String address)有参数构造方法

getName()读取用户名

setName(String name)设置用户名

getAge()读取用户年龄

setAge(String age)设置用户年龄

getSex()读取用户性别

setSex(String sex)设置用户性别

getTelNum()读取用户电话号码

setTelNum (String telNum)设置用户电话号码

getAddress()读取用户地址

setAddress(String address)设置用户地址

getID ()读取用户ID号.

setID (int ID)设置用户ID号

toString()连接字符串方法

OrderByName 类

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

OrderByAge 类

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

OrderBySex 类

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

APP类

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

    // 控制主菜单
    public void start() {
        Menu menu = new Menu();
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        Operate operate = new Operate();
        while (true) {
            menu.mainMenu();
            int item = telNoteRegex.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);
            }
        }
    }
}
           

MENU 类

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 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("*************************");
    }
}
           

Operate 类

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 key = telNoteRegex.menuItemValidate(1, 3);
            switch (key) {
                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 key = telNoteRegex.menuItemValidate(1, 7);
            switch (key) {
                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 key = telNoteRegex.menuItemValidate(1, 3);
            switch (key) {
                case 1:
                    this.showAll();
                    break;
                case 2:
                    this.modifyOperation();
                    break;
                case 3:
                    return;
            }
        }
    }

    // 删除记录业务逻辑控制
    public void deleteLogic() {
        Menu menu = new Menu();
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        while (true) {
            menu.deleteMenu();
            int key = telNoteRegex.menuItemValidate(1, 4);
            switch (key) {
                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 key = telNoteRegex.menuItemValidate(1, 5);
            switch (key) {
                case 1:
                    this.orderByName();
                    break;
                case 2:
                    this.orderByAge();
                    break;
                case 3:
                    this.orderBySex();
                    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());
        System.out.println("添加成功");
    }

    // 查询全部记录
    public void showAll() {
        if (this.list.size() == 0) {
            System.out.println("没有记录");
            return;
        }
        for (Person p : this.list
        ) {
            System.out.println(p);
        }
    }

    // 按姓名查询记录
    public void searchByName() {
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        String name = telNoteRegex.nameValidate();
        boolean flag = true;
        for (Person p : this.list
        ) {
            if (name.equals(p.getName())) {
                System.out.println(p.getId());
                flag = false;
            }
        }
        if (flag) {
            System.out.println("没有找到此人记录");
        }
    }

    // 按年龄查询记录
    public void searchByAge() {
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        String age = telNoteRegex.ageValidate();
        boolean flag = true;
        for (Person p : this.list
        ) {
            if (age.equals(p.getAge())) {
                System.out.println(p.getId());
                flag = false;
            }
        }
        if (flag) {
            System.out.println("没有找到此人记录");
        }
    }

    // 按性别查询记录
    public void searchBySex() {
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        String sex = telNoteRegex.sexValidate();
        boolean flag = true;
        for (Person p : this.list
        ) {
            if (sex.equals(p.getSex())) {
                System.out.println(p.getId());
                flag = false;
            }
        }
        if (flag) {
            System.out.println("没有找到此人记录");
        }
    }

    // 按电话号码查询记录
    public void searchByTelNum() {
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        String telNum = telNoteRegex.telNumValidate();
        boolean flag = true;
        for (Person p : this.list
        ) {
            if (telNum.equals(p.getTelNum())) {
                System.out.println(p.getId());
                flag = false;
            }
        }
        if (flag) {
            System.out.println("没有找到此人记录");
        }
    }

    // 按地址查询记录
    public void searchByAdd() {
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        String address = telNoteRegex.addressValidate();
        boolean flag = true;
        for (Person p : this.list
        ) {
            if (address.equals(p.getAddress())) {
                System.out.println(p.getId());
                flag = false;
            }
        }
        if (flag) {
            System.out.println("没有找到此人记录");
        }
    }

    // 修改指定记录
    public void modifyOperation() {
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        Menu menu = new Menu();
        Scanner scanner = new Scanner(System.in);
        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).setAddress(address);
                break;
            case 6:
        }

    }

    // 删除指定记录
    public void deleteOperation() {
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        System.out.println("请输入记录序号");
        int itemNum = telNoteRegex.menuItemValidate(1, this.list.size());
        this.list.remove(itemNum - 1);
        int i = 1;
        for (Person p : this.list
        ) {
            p.setId(i);
            i++;
        }
        System.out.println("删除成功,请继续操作");
    }

    // 删除全部记录
    public void deleteAllOperation() {
        this.list.clear();
        System.out.println("删除成功,请继续操作");
    }

    // 按用户姓名排序记录
    public void orderByName() {
        this.list.sort(new OrderByName());
        int i = 1;
        for (Person p : this.list
        ) {
            p.setId(i);
            i++;
        }
    }

    // 按用户年龄排序记录
    public void orderByAge() {
        this.list.sort(new OrderByAge());
        int i = 1;
        for (Person p : this.list
        ) {
            p.setId(i);
            i++;
        }
    }

    // 按用户性别排序记录
    public void orderBySex() {
        this.list.sort(new OrderBySex());
        int i = 1;
        for (Person p : this.list
        ) {
            p.setId(i);
            i++;
        }
    }

    /**
     * OrderByName
     */
    private static class OrderByName implements Comparator<Person> {
        @Override
        public int compare(Person o1, Person o2) {
            return o1.getName().compareTo(o2.getName());
        }
    }

    /**
     * OrderByAge
     */
    private static class OrderByAge implements Comparator<Person> {
        @Override
        public int compare(Person o1, Person o2) {
            return o1.getAge().compareTo(o2.getAge());
        }
    }

    /**
     * OrderBySex
     */
    private static class OrderBySex implements Comparator<Person> {
        @Override
        public int compare(Person o1, Person o2) {
            return o1.getSex().compareTo(o2.getSex());
        }
    }

}
           

Person 类

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 stringBuffer = new StringBuffer();
        stringBuffer.append("ID").append(this.id).append("#").append("\t");
        stringBuffer.append("name").append(this.name).append("\t\t");
        stringBuffer.append("age").append(this.age).append("\t\t");
        stringBuffer.append("gender").append(this.sex).append("\t\t");
        stringBuffer.append("telNum").append(this.telNum);
        stringBuffer.append("address").append(this.address).append("\t\t");
        return stringBuffer.toString();
    }
}
           

TelNoteRegex类

public class TelNoteRegex {

    // 对菜单输入选项的验证
    public int menuItemValidate(int min, int max) {
        String regex = "[1-9]";
        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("输入数字错误,请检查");
            }
        }
    }

    // 对用户输入姓名的验证
    public String nameValidate() {
        String regex = "[a-zA-Z]{1,10}";
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.println("请输入name:格式为字母");
            String input = scanner.nextLine();
            if (input.matches(regex)) {
                return input;
            } else {
                System.out.println("您输入的姓名格式有误,请重新输入!");
            }
        }
    }

    // 对用户输入年龄的验证
    public String ageValidate() {
        String regex = "[1-9]?[0-9]";
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.println("请输入年龄:格式为 0-99 之间");
            String input = scanner.nextLine();
            if (input.matches(regex)) {
                return input;
            } else {
                System.out.println("您输入的年龄格式有误,请重新输入!");
            }
        }
    }

    // 对用户输入性别的验证
    public String sexValidate() {
        String regex = "[m|M|f|F]";
        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 telNumValidate() {
        String regex = "(\\d{3,4}-\\d{7,8})|([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("输入的电话号码有错误,请重新输入");
            }
        }

    }

    // 对用户输入地址的验证
    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("请输入合法地址");
            }
        }
    }
}
           

导出jar包

JAVA智能电话本项目|JavaSE中篇项目 第一版本

注意下图这个Output Directory是jar包到出路径

![第二步](https://img-blog.csdnimg.cn/3deb7f5f35364b7aab245f39d8ecee13.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzUyMDc0Mzk2,size_16,color_FFFFFF,t_70#pic_center

JAVA智能电话本项目|JavaSE中篇项目 第一版本
JAVA智能电话本项目|JavaSE中篇项目 第一版本
JAVA智能电话本项目|JavaSE中篇项目 第一版本

cmd中 执行java - jar -phoneBook.jar 就会执行这个jar包。

JAVA智能电话本项目|JavaSE中篇项目 第一版本

可以用bat文件解决。(同目录下)

先用txt把命令写进去

JAVA智能电话本项目|JavaSE中篇项目 第一版本

再重命名start.bat 注意必须和jar包同目录

JAVA智能电话本项目|JavaSE中篇项目 第一版本