手记

JAVA通讯录管理小项目

**自己写的简单通讯录管理项目**

有集合基本的增删改查,我还没有学数据库什么的,就用对象序列化和反序列化来保存信息了。
本人菜鸟一枚,有不足之处请多指点。

package aatroxcarry.txl;

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

public class Start {

    public static void main(String[] args) throws Exception {

        Crud crud = new Crud();
        // 通讯录信息只会在正常退出时保存。
        System.out.println("    欢迎使用通讯录管理系统!");

        while (true) {

            crud.print();

            String command = crud.input.next();

            switch (command) {
            case "1":
                crud.one();
                break;
            case "2":
                crud.two();
                break;
            case "3":
                crud.three();
                break;
            case "4":
                crud.four();
                break;
            case "5":
                crud.five();
                break;
            case "6":
                ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(crud.file));
                oos.writeObject(crud.txl);
                oos.close();
                System.out.println("通讯录的信息已保存在 " + crud.file + " 路径下。");
                System.out.println("感谢您的使用,再见~");
                System.exit(0);
            default:
                System.out.println("输入有误!");
                break;
            }

        }

    }

}
package aatroxcarry.txl;

import java.io.Serializable;

@SuppressWarnings("serial")
public class Person implements Serializable{
    private String name;//姓名
    private int age;//年龄
    private String sex;//性别
    private long telephone;//电话
    private String address;//地址

    public Person(String name, int age, String sex, long telephone, String address) {
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.telephone = telephone;
        this.address = address;
    }

    @Override
    public String toString() {
        return  name + "\t" + age + "\t" + sex + "\t" + telephone + "\t" + address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public long getTelephone() {
        return telephone;
    }

    public void setTelephone(long telephone) {
        this.telephone = telephone;
    }

    public String getAddress() {
        return address;
    }

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

}
package aatroxcarry.txl;

import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Crud {

    Scanner input;
    ArrayList<Person> txl;//英语不好,通讯录就用拼音表示了。
    ObjectInputStream ois;
    File file;

    @SuppressWarnings("unchecked")
    public Crud() throws Exception {
        input = new Scanner(System.in);
        //保存的路径,可以修改
        file = new File("c:/txl.dat");
        if(!file.exists()){
            file.createNewFile();
        }
        try {
            ois = new ObjectInputStream(new FileInputStream(file));
            txl = (ArrayList<Person>) ois.readObject();
        } catch (EOFException e) {
            txl = new ArrayList<>();
        }
    }

    public void print(){
        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("**************************");
        System.out.println("输入要使用的功能:");
    }
    //查看通讯录中的对象
    public void see(){
        if(txl.size() == 0){
            System.out.println("通讯录中无任何记录!");
            return;
        }
        System.out.println("序号\t姓名\t年龄\t性别\t电话号码\t\t住址");
        for(int i = 0; i < txl.size(); i++){
            System.out.println(i+1 + "\t" + txl.get(i).toString());
        }
    }

    /**
     * 从键盘输入姓名、年龄、性别、电话、地址的方法。
     * 由于后面有多处需要键盘输入这些属性,直接把这些输入写成方法,
     * 简化代码,方便调用。
     * @return 输入的姓名、年龄、性别、电话、地址
     */
    public String inputName(){
        System.out.println("输入姓名:");
        String name = input.next();
        return name;
    }
    public int inputAge(){
        int age;
        while(true){
            System.out.println("输入年龄:");
            String tempAge = input.next();
            //利用正则判断
            if(!tempAge.matches("[1-9]\\d?")){
                System.out.println("请输入正确的年龄!(1~99之间)");
                continue;
            }
            age = Integer.parseInt(tempAge);
            break;
        }
        return age;
    }
    public String inputSex(){
        String sex;
        while (true) {
            System.out.println("输入性别,(男 or 女)");
            sex = input.next();
            //利用正则判断,性别只能是男或女
            if(!sex.matches("男|女")){
                System.out.println("输入的性别不符合要求,请重新输入!");
                continue;
            }
            break;
        }
        return sex;
    }
    public long inputTelephone(){
        long telephone;
        outer :
        while(true){
            System.out.println("输入电话号码:");
            String tempTelephone = input.next();
            //利用正则判断,规定号码必须是11位,以1开头。
            if(!tempTelephone.matches("1\\d{10}")){
                System.out.println("请输入正确的电话号码!(以1开头,共11位)");
                continue;
            }
            telephone = Long.parseLong(tempTelephone);
            //判断号码是否已经存在,若存在,则重新输入
            for(int i = 0; i < txl.size(); i++){
                if(txl.get(i).getTelephone() == telephone){
                    System.out.println("此号码已经存在,请重新输入!");
                    continue outer;
                }
            }
            break;
        }
        return telephone;
    }
    public String inputAddress(){
        String address;
        while(true){
            System.out.println("输入地址:");
            address = input.next();
            //利用正则判断,地址中应该不包含数字
            if(!address.matches("[^0-9]+")){
                System.out.println("地址输入有误!不能包含数字。");
                continue;
            }
            break;
        }
        return address;
    }
    public void one() throws Exception{
        while(true){
            System.out.println("***************************");
            System.out.println("**      1 添加新记录      **");
            System.out.println("**      2 查看全记录      **");
            System.out.println("**      3 返回上一级      **");
            System.out.println("***************************");

            String command = input.next();

            switch(command){
            case "1":
                //调用输入姓名、年龄、性别、电话、地址的方法
                txl.add(new Person(inputName(), inputAge(), inputSex(), inputTelephone(), inputAddress()));
                System.out.println("添加记录成功!");
                break;
            case "2":
                see();
                break;
            case "3":
                return;
            default :
                System.out.println("输入有误!");
                break;
            }
        }
    }
    /**
     * 由于姓名、年龄、性别、住址的查找算法相同,就直接定义成一个方法
     * @param type 根据type传的参数来判断查找的属性(姓名、年龄、性别、住址)
     * @param obj 具体要查找的内容
     */
    public void find(String type, Object obj){
        //如果内容匹配则将其索引保存到list集合中。
        ArrayList<Integer> list = new ArrayList<Integer>();
        for (int i = 0; i < txl.size(); i++) {
            if("姓名".equals(type)){
                if(txl.get(i).getName().equals(obj)){
                    list.add(i);
                    continue;
                }
            }else if("年龄".equals(type)){
                if(txl.get(i).getAge() == (int)obj){
                    list.add(i);
                    continue;
                }
            }else if("性别".equals(type)){
                if(txl.get(i).getSex().equals(obj)){
                    list.add(i);
                    continue;
                }
            }else if("住址".equals(type)){
                if(txl.get(i).getAddress().equals(obj)){
                    list.add(i);
                    continue;
                }
            }

        }
        //遍历list,根据list中的内容来取得txl中的索引
        if(list.size() != 0){
            System.out.println("序号\t姓名\t年龄\t性别\t电话号码\t\t住址");
            for(int i = 0; i < list.size(); i++){
                System.out.println(list.get(i) + 1 + "\t" + txl.get(list.get(i)).toString());
            }
        }else{
            System.out.println("没有找到此" + type + "的人!");
        }
    }
    public void two(){
        if(txl.isEmpty()){
            System.out.println("通讯录中无任何记录!请先进行添加!");
            return;
        }
        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("**      7 返回上一级      **");
            System.out.println("***************************");

            String command = input.next();

            switch(command){
            case "1":
                String name = inputName();
                find("姓名", name);
                break;
            case "2":
                int age = inputAge();
                find("年龄", age);
                break;
            case "3":
                String sex = inputSex();
                find("性别", sex);
                break;
            case "4":
                //查找电话的标记。
                boolean telephoneFlag = false;
                long telephone;
                while(true){
                    System.out.println("输入电话号码:");
                    String tempTelephone = input.next();
                    //利用正则判断,规定号码必须是11位,以1开头。
                    if(!tempTelephone.matches("1\\d{10}")){
                        System.out.println("请输入正确的电话号码!(以1开头,共11位)");
                        continue;
                    }
                    telephone = Long.parseLong(tempTelephone);
                    break;
                }
                //遍历查找
                int i = 0;
                for(; i < txl.size(); i++){
                    //如果找到,标记为true。
                    if(txl.get(i).getTelephone() == telephone){
                        telephoneFlag = true;
                        break;
                    }
                }
                //利用标记判断是否找到。
                if(telephoneFlag){
                    System.out.println("序号\t姓名\t年龄\t性别\t电话号码\t\t住址");
                    System.out.println((i + 1) + "\t" + txl.get(i).toString());
                }else{
                    System.out.println("没有找到此号码的人!");
                }
                break;
            case "5":
                String address = inputAddress();
                find("住址", address);
                break;
            case "6":
                see();
                break;
            case "7":
                return;
            default :
                System.out.println("输入有误!");
                break;
            }
        }
    }

    public void three() throws Exception{
        if(txl.isEmpty()){
            System.out.println("通讯录中无任何记录!请先进行添加!");
            return;
        }
        while(true){
            System.out.println("***************************");
            System.out.println("**      1 查看全纪录      **");
            System.out.println("**      2 修改指定目录     **");
            System.out.println("**      3 返回上一级      **");
            System.out.println("***************************");
            String command = input.next();
            switch(command){
            case "1":
                see();
                break;
            case "2":
                int xuhao;
                while(true){
                    System.out.println("输入修改的序号:");
                    String tempIndex = input.next();
                    if(!tempIndex.matches("\\d+")){
                        System.out.println("序号输入错误,请重新输入!");
                        continue;
                    }
                    xuhao = Integer.parseInt(tempIndex);
                    if (xuhao <= 0 || xuhao > txl.size()) {
                        System.out.println("序号越界!请重新输入!");
                        continue;
                    }
                    break;
                }
                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("***************************");
                String xiugai = input.next();
                switch(xiugai){
                case "1":
                    String name = inputName();
                    txl.get(xuhao - 1).setName(name);
                    System.out.println("姓名修改成功!");
                    break;
                case "2":
                    int age = inputAge();
                    txl.get(xuhao - 1).setAge(age);
                    System.out.println("年龄修改成功!");
                    break;
                case "3":
                    String sex = inputSex();
                    txl.get(xuhao - 1).setSex(sex);
                    System.out.println("性别修改成功!");
                    break;
                case "4":
                    long telephone = inputTelephone();
                    txl.get(xuhao - 1).setTelephone(telephone);
                    System.out.println("号码修改成功!");
                    break;
                case "5":
                    String address = inputAddress();
                    txl.get(xuhao - 1).setAddress(address);
                    System.out.println("地址修改成功!");
                    break;
                case "6":
                    break;
                default :
                    System.out.println("输入有误!");
                    break;
                }
                break;
            case "3":
                return;
            default :
                System.out.println("输入有误!");
                break;
            }
        }
    }

    public void four() throws Exception{
        if(txl.isEmpty()){
            System.out.println("通讯录中无任何记录!请先进行添加!");
            return;
        }
        while(true){
            System.out.println("***************************");
            System.out.println("**      1 查看全纪录      **");
            System.out.println("**      2 删除指定目录     **");
            System.out.println("**      3 删除全部目录     **");
            System.out.println("**      4 返回上一级      **");
            System.out.println("***************************");
            String command = input.next();
            switch(command){
            case "1":
                see();
                break;
            case "2":
                int xuhao;
                System.out.println("请输入要删除的记录序号:");
                while(true){
                    String tempIndex = input.next();
                    if(!tempIndex.matches("\\d+")){
                        System.out.println("序号输入错误,请重新输入!");
                        continue;
                    }
                    xuhao = Integer.parseInt(tempIndex);
                    if (xuhao <= 0 || xuhao > txl.size()) {
                        System.out.println("序号越界!请重新输入!");
                        continue;
                    }
                    break;
                }
                txl.remove(xuhao - 1);
                System.out.println("删除成功!");
                break;
            case "3":
                System.out.println("确定删除全部目录?");
                System.out.println("确定 or 取消");
                String remove = input.next();
                switch(remove){
                case "确定":
                    txl.clear();
                    System.out.println("通讯录已清空!");
                    break;
                case "取消":
                    break;
                default :
                    System.out.println("输入有误!");
                    break;
                }
                break;
            case "4":
                return;
            default :
                System.out.println("输入有误!");
                break;
            }
        }
    }

    public void five() throws Exception{
        if(txl.isEmpty()){
            System.out.println("通讯录中无任何记录!请先进行添加!");
            return;
        }
        while(true){
            System.out.println("***************************");
            System.out.println("**      1 按姓名排序      **");
            System.out.println("**      2 按年龄排序      **");
            System.out.println("**      3 按性别排序      **");
            System.out.println("**      4 按号码排序      **");
            System.out.println("**      6 查看全记录      **");
            System.out.println("**      7 返回上一级      **");
            System.out.println("***************************");
            String command = input.next();
            switch(command){
            case "1":
                System.out.println("未完成~");
                break;
            case "2":
                Collections.sort(txl, ( p1,  p2)->
                    p1.getAge() - p2.getAge()
                );
                System.out.println("按年龄排序完成!");
                break;
            case "3":
                System.out.println("未完成~");
                break;
            case "4":
                Collections.sort(txl, ( p1,  p2)->{
                    if(p1.getTelephone() > p2.getTelephone()){
                        return 1;
                    }
                    if(p1.getTelephone() < p2.getTelephone()){
                        return -1;
                    }
                    return 0;
                });
                System.out.println("按号码排序完成!");
                break;
            case "6":
                see();
                break;
            case "7":
                return;
            default :
                System.out.println("输入有误!");
                break;
            }
        }
    }

}
27人推荐
随时随地看视频
慕课网APP

热门评论

这个调试成功了吗,能直接用吗

从零开始都是自己写的???

查看全部评论