一、简介:基于ArrayList,实现了增删查改,自定义排序,文件相关操作。以下为功能界面

System.out.println("*******************JAVA通讯录*******************");
        System.out.println("*********1.添加联系人      2.删除联系人    ********");
        System.out.println("*********3.查找联系人      4.修改联系人信息 ********");
        System.out.println("*********5.显示所有联系人   6.保存到本地文件 ********");
        System.out.println("*********7.读取本地文件     8.以年龄排序    ********");
        System.out.println("*****************0.退出通讯录*********************");

二、功能实现(逐类介绍)

1.信息类:联系人的相关属性、构造方法、Setter()、getter()方法、ToString方法(统一输出格式)、compareTo方法(自定义排序)。

/*实现自定义排序可以实现Comparable的compareTo方法*/
public class InforMation implements Comparable<InforMation> {
    private String Name;
    private Integer Age;
    private String Phonenum;
    private String Address;

    public  InforMation()
    {
        this.Name = Name;//姓名
        this.Age = Age;//年龄
        this.Phonenum = Phonenum;//电话
        this.Address = Address;//地址

    }
     public InforMation(String name,Integer age,String phonenum,String address) {
         this.Name =name;
         this.Age =age;
         this.Phonenum =phonenum;
         this.Address =address;
     }
    public void setName(String name) {
        this.Name = name;
    }

    public void setAge(Integer age) {
        this.Age = age;
    }

    public void setPhonenum(String phonenum) {
        this.Phonenum = phonenum;
    }

    public void setAddress(String address) {
        this.Address = address;
    }

    public String getName() {
        return Name;
    }

    public Integer getAge() {
        return Age;
    }

    public String getPhonenum() {
        return Phonenum;
    }

    public String getAddress() {
        return Address;
    }

    @Override
    public int compareTo(InforMation o)//年龄升序
    {

        if((int)this.Age >o.Age)
            return 1;
        if((int)this.Age <o.Age)
            return -1;
        else
            return 0;
    }
    @Override
    public String toString() {
        return "联系人" +
                " 姓名:" + Name +" "+
                " 年龄:" + Age +" "+
                " 电话:" + Phonenum + " " +
                " 地址:" + Address;
    }
}

2.菜单类(打印功能界面)

public class Menu {
    public static void mainmanu() {
        System.out.println("*******************JAVA通讯录*******************");
        System.out.println("*********1.添加联系人      2.删除联系人    ********");
        System.out.println("*********3.查找联系人      4.修改联系人信息 ********");
        System.out.println("*********5.显示所有联系人   6.保存到本地文件 ********");
        System.out.println("*********7.读取本地文件     8.以年龄排序    ********");
        System.out.println("*****************0.退出通讯录*********************");
    }
}

3.功能实现类(实现菜单中的功能)

import java.io.*;
import java.util.Collections;
import java.util.Scanner;
public class Function extends MAIN{
    static Scanner scanner=new Scanner(System.in);
    public void Add(){//添加联系人
        System.out.println("请输入:姓名、年龄、电话、地址");
       InforMation a=new InforMation(scanner.next(),scanner.nextInt(),scanner.next(),scanner.next());
       list.add(a);
        if(!list.isEmpty())
        System.out.println("添加成功");
        else
            System.out.println("添加失败");
        }
    public void Delete( ){//删除联系人
        if(list.isEmpty()) {
            System.out.println("通讯录为空");
            return;
        }
        System.out.println("要删除的人是否为通讯录第一个?输入:是或否");
        String b=scanner.next();
        if(b.equals("否")) {
            System.out.println("请输入要删除联系人的姓名");
            String a = scanner.next();
            for (int i = list.size() - 1; i >= 0; i--) {
                if ((list.get(i).getName()).equals(a))
                    list.remove(list.remove(i));
                return;
            }
        }
        else if(b.equals("是"))
        {
            System.out.println("请输入联系人姓名:");
            String a=scanner.next();
            for(InforMation A:list)
            {
                if(a.equals(A.getName()))
                    list.remove(A);
                return;
            }
        }
    }
    public void Search()//查找联系人
    {
        if(list.isEmpty()) {
            System.out.println("通讯录为空");
            return;
        }
        System.out.println("请输入联系人姓名:");
        String a=scanner.next();
        for(InforMation A:list)
        {
            if(a.equals(A.getName()))
                System.out.println("姓名:"+A.getName()+" 年龄:"+A.getAge()+"  电话:"+A.getPhonenum()+"  地址:"+A.getAddress());
        }
    }
    public void Modify() {//修改联系人信息
        if(list.isEmpty()) {
            System.out.println("通讯录为空");
            return;
        }
        System.out.println("请输入要修改联系人的姓名");
        String a=scanner.next();
        for(InforMation A:list)
        {
            if(a.equals(A.getName()))
            {
                System.out.println("要修改哪项信息?输入:姓名、年龄、电话或地址");
                String b=scanner.next();
                if(b.equals("姓名"))
                {
                    System.out.println("请输入新姓名");
                    A.setName(scanner.next());
                }
                else
                    if(b.equals("年龄"))
                    {
                        System.out.println("请输入新年龄");
                        A.setAge(scanner.nextInt());
                    }
                    else
                        if(b.equals("电话"))
                    {
                        System.out.println("请输入新电话");
                        A.setPhonenum(scanner.next());
                    }
                else
                    if(b.equals("地址"))
                    {
                        System.out.println("请输入新地址");
                        A.setAddress(scanner.next());

                    }
                    else
                        System.out.println("输入错误,请重新选择");
            }
        }
    }
    public void ShowAll(){//显示所有联系人
        if(list.isEmpty()) {
            System.out.println("通讯录为空");
            return;
        }
        for(InforMation A:list)
        {
            System.out.println("姓名:"+A.getName()+" 年龄:"+A.getAge()+"  电话:"+A.getPhonenum()+"  地址:"+A.getAddress());
        }
    }
    public void Write() throws IOException {//将信息写入文件
        FileWriter a=new FileWriter("d:/a.txt");
        BufferedWriter write=new BufferedWriter(a);
        String B;
        for(InforMation A:list)
        {
            String C=A.toString();
            write.write(C);
            write.newLine();
            write.flush();
        }
        write.close();
        a.close();
    }
    public void Read()throws IOException{//读取本地文件
        FileReader a=new FileReader("d:/a.txt");
        BufferedReader reader=new BufferedReader(a);
        String B;
        while(( B=reader.readLine())!=null)
        System.out.println(B);
    }
    public void SortbyAge(){//以年龄排序
        if(list.isEmpty()) {
            System.out.println("通讯录为空");
            return;
        }
        Collections.sort(list);
        for(InforMation a:list)
        {
            System.out.println(a.toString());
        }
    }
}

4.主体类(程序入口)

import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

public class MAIN {
     ArrayList<InforMation> list=new ArrayList<InforMation>();
    public static void main(String[] args) {
        Function b=new Function();
        while (true)
        {
            Menu.mainmanu();
            int c=new Scanner(System.in).nextInt();
            switch (c)
            {
                case 1:
                    b.Add();
                    break;
                case 2:
                    b.Delete();
                    break;
                case 3:
                    b.Search();
                    break;
                case 4:
                    b.Modify();
                    break;
                case 5:
                    b.ShowAll();
                    break;
                case 6:
                    try {
                        b.Write();
                    }
                    catch (IOException e)
                    {}
                    break;
                case 7:
                    try {
                        b.Read();
                    }catch (IOException e){}
                    break;
                case 8:
                    b.SortbyAge();
                    break;
                case 0:
                    System.exit(0);
            }
        }
    }

}

三、总结

 注意事项:删除操作(详见注释)。

 不足之处:异常处理机制不完善,未使用正则表达式规范用户的输入,未使用GUI等。