Java集合写的通讯录


这是我们这一学期的实践大作业~

花了大概七八个小时写出来的......

用Vector集合储存信息,实现了增删改查和排序、退出六个基本功能~

说实话感觉多余且麻烦,但要求是这样,我也没办法......

一共五个文件,分别为Person、Menu、App、Operate、TelNoteRegex:

Person类为实例类

Menu类定义一个主菜单和各个子菜单的方法

App类只有一个作用,在主方法中创建Menu类的对象,并调用主菜单方法......

Operate类就是各个具体操作的实现方法

TelNoteRegex类定义了对信息进行验证的方法,毕竟输入的信息不能什么都接受~

 

好了下边贴代码:

 

App.java

class Application
{
    public static void main(String[] args)
    {
        Menu menu = new Menu();
        menu.mainMenu();
    }
}

 

Menu.java

import java.util.*;
public class Menu
{
    Operate operate = new Operate();
    Scanner in = new Scanner(System.in);
    public void mainMenu()
    {
        while(true)
        {
            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("请选择您要进行的操作(1~6):");
            String choice = in.nextLine().replace(" ","");
            switch(choice)
            {
                case "1":
                    printLine();
                    addMenu();
                    break;
                case "2":
                    printLine();
                    searchMenu();
                    break;
                case "3":
                    printLine();
                    modifyMenu();
                    break;
                case "4":
                    printLine();
                    deleteMenu();
                    break;
                case "5":
                    printLine();
                    orderMenu();
                    break;
                case "6":
                    exitMenu();
                    break;
                default:
                    System.out.println("您的输入有误!请重新输入!");
                    printLine();
            }
        }
    }
    
    //添加记录对应的菜单
    public void addMenu()
    {
        int a = 1;
        while(true)
        {
            System.out.println("☆1:添加新纪录");
            System.out.println("☆2:查看全纪录");
            System.out.println("☆3:返回上一级");
            System.out.println("请选择您要进行的操作(1~3):");
            String choice01 = in.nextLine().replace(" ","");
            switch(choice01)
            {
                case "1":
                    operate.addOperation();
                    break;
                case "2":
                    operate.showAll();
                    break;
                case "3":
                    a = 0;
                    printLine();
                    break;
                default:
                    System.out.println("您的输入有误!请重新输入!");
                    printLine();
            }
            if(a == 0)
                break;
        }
    }
    
    //查找记录所对应的菜单
    public void searchMenu()
    {
        int a = 1;
        while(true)
        {
            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("请输入您的选择(1~7):");
            String choice02 = in.nextLine().replace(" ","");
            switch(choice02)
            {
            case "1":
                operate.searchByName();
                printLine();
                break;
            case "2":
                operate.searchByAge();
                printLine();
                break;
            case "3":
                operate.searchBySex();
                printLine();
                break;
            case "4":
                operate.searchByTelNum();
                printLine();
                break;
            case "5":
                operate.searchByAddress();
                printLine();
                break;
            case "6":
                operate.showAll();
                printLine();
                break;
            case "7":
                a = 0;
                printLine();
                break;
            default:
                System.out.println("您的选择有误!请重新输入!");
                printLine();
            }
            if(a == 0)
                break;
        }
    }
    
    //修改记录对应的菜单
    public void modifyMenu()
    {
        int a = 1;
        while(true)
        {
            System.out.println("☆1:查看全记录");
            System.out.println("☆2:修改指定记录");
            System.out.println("☆3:返回上一级");
            System.out.println("请输入您的选择(1~3):");
            String choice03 = in.nextLine().replace(" ","");
            switch(choice03)
            {
            case "1":
                operate.showAll();
                break;
            case "2":
                subModifyMenu();
                break;
            case "3":
                a = 0;
                printLine();
                break;
            default:
                System.out.println("您的输入有误!请重新输入!");
                printLine();
            }
            if(a == 0)
            break;
        }    
    }
    
    //修改信息的子菜单
    public void subModifyMenu()
    {
        int a = 1;
        while(true)
        {
            printLine();
            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("请输入您的选择(1~6):");
            String choice0301 = in.nextLine().replace(" ","");
            switch(choice0301)
            {
            case "1":
                operate.modify("name");
                break;
            case "2":
                operate.modify("age");
                break;
            case "3":
                operate.modify("sex");
                break;
            case "4":
                operate.modify("telNum");
                break;
            case "5":
                operate.modify("address");
                break;
            case "6":
                a = 0;
                printLine();
                break;
            default:
                System.out.println("您的输入有误!请重新输入!");
                printLine();    
            }
            if(a == 0)
                break;
        }
    }
    
    //删除记录对应的菜单
    public void deleteMenu()
    {
        int a= 1;
        while(true)
        {
            System.out.println("☆1:查看全记录");
            System.out.println("☆2:删除指定记录");
            System.out.println("☆3:删除全部记录");
            System.out.println("☆4:返回上一级");
            System.out.println("请输入您的选择(1~4):");
            String choice04 = in.nextLine().replace(" ","");
            switch(choice04)
            {
            case "1":
                operate.showAll();
                break;
            case "2":
                operate.delete();
                Menu.printLine();
                break;
            case "3":
                operate.deleteAll();
                Menu.printLine();
                break;
            case "4":
                a = 0;
                printLine();
                break;
            default:
                System.out.println("您的输入有误!请重新输入!");
                printLine();
            }
            if(a == 0)
                break;
        }
    }
    
    //排序记录对应的菜单
    public void orderMenu()
    {
        int a = 1;
        while(true)
        {
            System.out.println("☆1:按姓名排序");
            System.out.println("☆2:按年龄排序");
            System.out.println("☆3:按性别排序");
            System.out.println("☆4:查看全部记录");
            System.out.println("☆5:返回上一级");
            System.out.println("请输入您的选择(1~5):");
            String choice05 = in.nextLine().replace(" ","");
            switch(choice05)
            {
            case "1":
                operate.orderName();
                break;
            case "2":
                operate.orderAge();
                break;
            case "3":
                operate.orderSex();
                break;
            case "4":
                operate.showAll();
                break;
            case "5":
                a = 0;
                printLine();
                break;
            default:
                System.out.println("您的输入有误!请重新输入!");
                printLine();
            }
            if(a == 0)
                break;
        }
    }
    
    //退出操作对应的菜单
    public void exitMenu()
    {
        System.out.println("您确定要退出吗?(y/n)");
        String choice06 = in.nextLine().replace(" ","");
        if(choice06.equals("Y") || choice06.equals("y"))
        {
            System.out.println("您已经成功退出!");
            printLine();
            System.exit(0);
        }
        else if(choice06.equals("N") || choice06.equals("n"))
        {
            System.out.println("您已经取消了退出操作!");
        }
        else
        {
            System.out.println("您的输入有误!默认取消退出操作!");
        }
        printLine();
    }
    
    //打印分割线
    public static void printLine()
    {
        System.out.println("----------------------------------------------------------------"
                +"----------------------------------------------------------");
    }
    
    //打印信息栏
    public static void printInfo()
    {
        System.out.println("序号\t\t"+"姓名\t\t"+"年龄\t\t"+"性别\t\t"+"电话号码\t\t"+"地址\t\t");
    }
}

 

Operate.java

import java.util.*;
public class Operate 
{
    Scanner in = new Scanner(System.in);
    Vector<Person> vector = new Vector<Person>();
    TelNoteRegex regex = new TelNoteRegex();
    
    //添加信息方法
    public void addOperation()
    {
        int a = 1;
        String name;
        String age;
        String sex;
        String telNum;
        String address;
        System.out.println("输入姓名,1~10位字母:");
        name = in.nextLine().replace(" ","");
        System.out.println("输入年龄,1~100+");
        age = in.nextLine().replace(" "," ");
        System.out.println("输入性别(男M或m),女(F或f):");
        sex = in.nextLine().replace(" ","");
        System.out.println("输入电话号码,6~10位数字:");
        telNum = in.nextLine().replace(" ","");
        System.out.println("输入地址,1~50位字母或数字:");
        address = in.nextLine().replace(" ","");
        if(!regex.nameRegex(name))
        {
            a = 0;
            System.out.println("您输入的姓名格式不符合要求");
        }
        if(!regex.ageRegex(age))
        {
            a = 0;
            System.out.println("您输入的年龄格式不符合要求");
        }
        if(!regex.sexRegex(sex))
        {
            a = 0;
            System.out.println("您输入的性别格式不符合要求");
        }
        if(!regex.telNumRegex(telNum))
        {
            a = 0;
            System.out.println("您输入的电话号码格式不符合要求");
        }
        if(!regex.addressRegex(address))
        {
            a = 0;
            System.out.println("您输入的地址格式不符合要求");
        }
        if(a == 1)
        {
            Person p1 = new Person(name,age,sex,telNum,address);
            vector.add(p1);
            System.out.println("添加成功!");
        }
        Menu.printLine();
    }
    
    //显示全部信息方法
    public void showAll()
    {
        if(vector.isEmpty())
            System.out.println("没有任何信息记录!");
        else
        {
            Menu.printInfo();
            Enumeration<Person> en = vector.elements();
            int id = 0;
            while(en.hasMoreElements())
            {
                Person p2 = en.nextElement();
                System.out.print(id+1+"\t\t");
                System.out.println(p2);
                id++;
            }
        }
        Menu.printLine();
    }
    
    //按姓名查找
    public void searchByName()
    {
        System.out.println("请输入要查找的名字:");
        String str = in.nextLine().replace(" ","");
        Menu.printInfo();
        for(Person p3 : vector)
        {
            if(p3.getName().equals(str))
                System.out.println(p3);
        }
    }
    
    //按年龄查找
    public void searchByAge()
    {
        System.out.println("请输入要查找的年龄:");
        String str = in.nextLine().replace(" ","");
        Menu.printInfo();
        for(Person p3 : vector)
        {
            if(p3.getAge().equals(str))
                System.out.println(p3);
        }
    }
    
    //按性别查找
    public void searchBySex()
    {
        System.out.println("请输入要查找的性别(男M或m),女(F或f):");
        String str = in.nextLine().replace(" ","");
        Menu.printInfo();
        for(Person p3 : vector)
        {
            if(p3.getSex().equals(str))
                System.out.println(p3);
        }
    }
    
    //按电话号码查找
    public void searchByTelNum()
    {
        System.out.println("请输入要查找的电话号码:");
        String str = in.nextLine().replace(" ","");
        Menu.printInfo();
        for(Person p3 : vector)
        {
            if(p3.getTelNum().equals(str))
                System.out.println(p3);
        }
    }
    
    //按地址查找
    public void searchByAddress()
    {
        System.out.println("请输入要查找的地址:");
        String str = in.nextLine().replace(" ","");
        Menu.printInfo();
        for(Person p3 : vector)
        {
            if(p3.getAddress().equals(str))
                System.out.println(p3);
        }
    }
    
    //按姓名排序信息
    public void orderName()
    {
        Collections.sort( vector,new nameComparator());
        System.out.println("排序成功!");
        System.out.println("按姓名排序的结果如下:");
        showAll();
    }
    //自定义姓名排序类
    class nameComparator implements Comparator<Person>
    {
        public int compare(Person p1,Person p2)
        {
            return p1.getName().compareTo(p2.getName());
        }
    }
    
    //按年龄排序信息
    public void orderAge()
    {
        Collections.sort( vector,new ageComparator());
        System.out.println("排序成功!");
        System.out.println("按年龄排序的结果如下:");
        showAll();
    }
    //自定义年龄排序类
    class ageComparator implements Comparator<Person>
    {
        public int compare(Person p1,Person p2)
        {
            return Integer.valueOf(p1.getAge()).compareTo(Integer.valueOf(p2.getAge()));
        }
    }
    
    //按性别排序信息
    public void orderSex()
    {
        Collections.sort( vector,new sexComparator());
        System.out.println("排序成功!");
        showAll();
    }
    //自定义性别排序类
    class sexComparator implements Comparator<Person>
    {
        public int compare(Person p1,Person p2)
        {
            return p1.getSex().compareTo(p2.getSex());
        }
    }
    
    //删除指定信息方法
    public void delete()
    {
        if(vector.isEmpty())
            System.out.println("没有任何信息记录!");
        else
        {
            Menu.printInfo();
            Enumeration<Person> en = vector.elements();
            int id = 0;
            while(en.hasMoreElements())
            {
                Person p2 = en.nextElement();
                System.out.print(id+1+"\t\t");
                System.out.println(p2);
                id++;
            }
            System.out.println("请输入您要删除的信息的序号(1~"+id+")");
            String num = in.nextLine().replace(" ","");
            if(!regex.isAllDigit(num))
            {
                System.out.println("您的输入有误!");
            }
            else
            {
                int num1 = Integer.valueOf(num);
                if(num1<1)
                    System.out.println("您的输入有误!");
                else
                {
                    vector.remove(num1-1);
                    System.out.println("删除成功!");
                }
            }
        }
    }
    
    //删除所有信息方法
    public void deleteAll()
    {
        System.out.println("您确定要删除全部信息吗?(y/n)");
        String choice = in.nextLine().replace(" ","");
        if(choice.equals("Y") || choice.equals("y"))
        {
            Enumeration<Person> en = vector.elements();
            while(en.hasMoreElements())
            {
                vector.clear();
                System.out.println("信息已经被全部删除!");
            }
        }
        else if(choice.equals("N") || choice.equals("n"))
        {
            System.out.println("已取消删除操作!");
        }
        else
        {
            System.out.println("您的输入有误!默认取消删除操作!");
        }
    }
    
    //修改信息方法
    public void modify( String choice)
    {
        int id = 0;
        if(vector.isEmpty())
            System.out.println("没有任何信息记录!");
        else
        {
            Menu.printInfo();
            Enumeration<Person> en = vector.elements();
            while(en.hasMoreElements())
            {
                Person p2 = en.nextElement();
                System.out.print(id+1+"\t\t");
                System.out.println(p2);
                id++;
            }
        }
        System.out.println("请输入您要修改的信息的序号(1~"+id+")");
        String num = in.nextLine().replace(" ","");
        if(!regex.isAllDigit(num))
        {
            System.out.println("您的输入有误!");
        }
        else
        {
            int num1 = Integer.valueOf(num);
            if(num1<1 || num1>id)
                System.out.println("您的输入有误!");
            else
            {
                if(choice.equals("name"))
                {
                    System.out.println("请输入新的姓名");
                    String newName = in.nextLine().replace(" ","");
                    if(!regex.nameRegex(newName))
                        System.out.println("您输入的新姓名不符合格式!");
                    else
                    {
                        vector.elementAt(num1-1).setName(newName);
                        System.out.println("姓名修改成功!");
                    }
                }
                else if(choice.equals("age"))
                {
                    System.out.println("请输入新的年龄:");
                    String newAge = in.nextLine().replace(" ","");
                    if(!regex.ageRegex(newAge))
                        System.out.println("您输入的新姓名不符合格式!");    
                    else
                    {
                        vector.elementAt(num1-1).setAge(newAge);
                        System.out.println("年龄修改成功!");
                    }
                }
                else if(choice.equals("sex"))
                {
                    System.out.println("请输入新的性别(男M或m),女(F或f):");
                    String newSex = in.nextLine().replace(" ","");
                    if(!regex.sexRegex(newSex))
                        System.out.println("您输入的新性别不符合格式!");    
                    else
                    {
                        vector.elementAt(num1-1).setSex(newSex);
                        System.out.println("性别修改成功!");
                    }
                }
                else if(choice.equals("telNum"))
                {
                    System.out.println("请输入新的年龄:");
                    String newTelNum = in.nextLine().replace(" ","");
                    if(!regex.telNumRegex(newTelNum))
                        System.out.println("您输入的新电话号码不符合格式!");    
                    else
                    {
                        vector.elementAt(num1-1).setTelNum(newTelNum);
                        System.out.println("电话号码修改成功!");
                    }
                }
                else if(choice.equals("address"))
                {
                    System.out.println("请输入新的地址:");
                    String newAddress = in.nextLine().replace(" ","");
                    if(!regex.addressRegex(newAddress))
                        System.out.println("您输入的新地址不符合格式!");    
                    else
                    {
                        vector.elementAt(num1-1).setAddress(newAddress);
                        System.out.println("地址修改成功!");
                    }
                }
            }
        }
    }
}

 

TelNoteRegex.java

public class TelNoteRegex 
{
    
    //检查姓名是否符合格式
    public boolean nameRegex(String name)
    {
        boolean b = true;
        if(name.length()<1 || name.length()>10)
        {
            b = false;
        }
        char [] array = name.toCharArray();
        for(int i=0;i<array.length;i++)
        {
            if( !(array[i] >='A' && array[i] <='Z') && !(array[i] >='a' && array[i] <='z') )
            {
                b = false;
                break;
            }
        }
        return b;
    }
    
    //检查年龄是否符合各式
    public boolean ageRegex(String age)
    {
        boolean b = true;
        if(!isAllDigit(age))
            return false;
        else
        {
            int num = Integer.parseInt(age);
            if(num<=0 || num>200)
                return false;
        }
        return b;
    }
    
    //检查性别是否符合要求
    public boolean sexRegex(String sex)
    {
        boolean b = true;
        if( !sex.equals("M") && !sex.equals("m") && !sex.equals("F") && !sex.equals("f"))
            b = false;
        return b;
    }
    
    //检查电话号码
    public boolean telNumRegex(String telNum)
    {
        boolean b = true;
        if(!isAllDigit(telNum))
            return false;
        else
        {
            if( !( telNum.length() >=6 && telNum.length() <=10))
                return false;
        }
        return b;
    }
    
    //检查地址
    public boolean addressRegex(String address)
    {
        boolean b = true;
        if( address.length()<1 || address.length()>50 )
            return false;
        char array[] = address.toCharArray();
        for(int i=0;i<array.length;i++)
        {
            if( !( ( array[i]>='0' && array[i]<='9' ) || ( array[i]>='a' && array[i]<='z' ) 
                    || ( array[i]>='A' && array[i]<='Z' ) ) )
                b = false;
        }
        return b;
    }
    
    //检查传入的字符串是否全部为数字
    public boolean isAllDigit(String str)
    {
        boolean b = true;
        char array[] = str.toCharArray();
        for(int i=0;i<array.length;i++)
        {
            if( !(array[i] >='0' && array[i] <='9'))
            {
                b = false;
                break;
            }
        }
        return b;
    }
}

 

Person.java

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) {
        super();
        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;
    }
    
    public String toString()
    {
        String str = null;
        if( sex.equals("M") || sex.equals("m") )
            str = "男";
        else if( sex.equals("F") || sex.equals("f") )
            str = "女";
        return name+"\t\t"+age+"\t\t"+str+"\t\t"+telNum+"\t\t"+address;
    }
}

 

其实Person类中定义的Id属性根本就没用上,因为在后边的排序操作时所有的信息的顺序都可能会被打乱......所以正在显示全部信息的时候才给它们加上了Id,这个Id是在showAll()方法体内定义的,在其他需要输出的地方也都是这样解决的......我才疏学浅,暂时没想到更好的解决办法~如果有大神有办法,还请在评论区中不吝赐教!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM