目录

一、 项目介绍

1 项目描述

2 编写目的

3.业务流程结构图

 4.数据存储结构

5. 编码规范

1 类名

2 方法名

5.项目源码:

APP类

Menu类

Operate类

Person类

RegexTest类

TelNoteRegex类

6.正则表达式

一、 项目介绍

1 项目描述

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

2 编写目的

通过该项目可以对以往所学过的知识点进行统一的复习,将平时所学的内容综合到一起并运用到实际的项目中。该项目能够充分的体现出一些简单的业务流程处理,能够使同学们掌握基本的业务流程处理。进一步理解什么是面相对象设计(OOD:Object Oriented Design)。充分理解面向对象设计的精髓。

3.业务流程结构图

java拨打电话语音 java自动打电话程序_windows

 4.数据存储结构

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

5. 编码规范

1 类名

App 对应 Application(程序入口类)

Menu 对应 Menu (菜单类)

Operate 对应 Operate (业务处理类)

Person 对应 Person (实体类)

TelNoteRegex 对应 TelNoteRegex(用户输入验证类)

OrderByName 对应 OrderByName (姓名排序比较器)

OrderByAge 对应 OrderByAge (年龄排序比较器)

OrderBySex 对应 OrderBySex(性别排序比较器)

2 方法名

2.1App 类中方法
main() 启动程序方法
start() 主菜单控制
2.2Operate 类中方法
private List<Person> list 容器
addLogic() 用户添加记录业务逻辑控制
searchLogic() 用户查询记录业务逻辑控制
modifyLogic() 修改记录业务逻辑控制
deleteLogic() 删除记录业务逻辑控制
orderLogic() 排序记录业务逻辑控制
addOperation () 添加新记录信息
showAll() 查询全部记录
searchByName() 按姓名查询记录
searchByAge() 按年龄查询记录

searchBySex() 按性别查询记录
searchByTelNum() 按电话号码查询记录
searchByAdd() 按地址查询记录
modifyOperation() 修改指定记录
deleteOperation() 删除指定记录
deleteAllOperation() 删除全部记录
orderName() 按用户姓名排序记录
orderAge() 按用户年龄排序记录
orderSex() 按用户性别排序记录
2.3TelNoteRegex 类中方法
menuItemValidate (int min, int max ) 对菜单输入选项的验证
nameValidate ( ) 对用户输入姓名的验证
ageValidate ( ) 对用户输入年龄的验证
sexValidate ( ) 对用户输入性别的验证
telNumValidate ( ) 对用户输入电话号码的验证
addressValidate ( ) 对用户输入地址的验证
2.4Menu 类中的方法
mainMenu() 主菜单
addMenu () 添加记录菜单
searchMenu () 查找记录菜单

modifyMenu () 修改记录主菜单
subModifyMenu () 修改记录子菜单
deleteMenu () 删除记录菜单
orderMenu () 排序记录菜单
2.5Person 类中的方法
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() 连接字符串方法
2.6OrderByName 类中的方法名
compare(Person p1, Person p2)根据姓名排序方法
2.7OrderByAge 类中的方法名
compare(Person p1, Person p2)根据年龄排序方法
2.8OrderBySex 类中的方法名
compare(Person p1, Person p2)根据性别排序方法

5.项目源码:

APP类

package com.bjsxt;


/**
 * 电话本项目入口类
 */
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);
            }
        }
    }
}

Menu类

package com.bjsxt;

/**
 * 生成项目中的所有的菜单
 */
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类

package com.bjsxt;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * 核心业务类
 */
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;
           }
       }
    }

    /**
     * 用户查询记录业务逻辑控制
     */
    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.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("没有此人记录");
        }
    }

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

        }
    }
    /**
     * 删除指定记录
     */
    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());
        }
    }


}

Person类

package com.bjsxt;


/**
 * 实体类
 */
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();
    }
}

RegexTest类

package com.bjsxt;

public class RegexTest {
    public static void main(String[] args) {
        //String regex = "[^ab]*";
       /* String regex = "\\W*";
        String content = "#@¥&#####";*/
       /*String regex = "[a-z]{1}\\w{3,8}";
       String content = "a234s_df";*/
       String regex = "(\\d{3,4})-(\\d{7,8})";
       String content = "010-1231231";
        System.out.println(content.matches(regex));

        String str = "(\\d{3,4}-\\d{7,8})|([1]{1}[0-9]{10})";
        String email = "155846370211";
        System.out.println(email.matches(str));
    }
}

TelNoteRegex类

package com.bjsxt;

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+"\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("输入数字错误,请检查!");
            }
        }
    }

    /**
     *  对用户输入姓名的验证
     *  字母可以是大写或者小写,长度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之间的
     * @return
     */
    public String ageValidate ( ){
        //对年龄校验的正则表达式
        String regex = "[1-9]{1}[0-9]{1}";
        //创建Scanner对象
        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)
     * @return
     */
    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("输入性别格式有误,请重新输入!");
            }
        }
    }

    /**
     * 对用户输入电话号码的验证
     * 电话号码要求:允许带有区号的座机号,允许手机号
     * @return
     */
    public String telNumValidate ( ){
        //对电话号码验证的正则表达式
        String regex = "(\\d{3,4}-\\d{7,8})|([1]{1}\\d{10})";
        //创建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("输入的电话号码有误,请重新输入!");
            }
        }
    }

    /**
     * 对用户输入地址的验证
     * 地址格式要求:字母或者数字,长度1,50
     * @return
     */
    public String addressValidate ( ){
        //对地址验证的正则表达式
        String regex = "\\w{1,50}";
        //创建Scanner对象
        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 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);
    }
}