Java实现联系人管理系统

 更新时间:2022年02月28日 12:15:40   作者:Tryci  
这篇文章主要为大家详细介绍了Java实现联系人管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

基于Java的联系人管理系统,供大家参考,具体内容如下

基于eclipse做的一个简单的联系人管理系统

对于联系人姓名首字母进行了一个排序,对于存入信息时手机号码与电子邮箱做了一个判断,只有在输入正确格式的手机号和电子邮箱才能成功存入数据

联系人基本属性类

此类包含联系人编号、姓名、手机号、QQ、电子邮箱等信息

/** 编号*/
private int sno;
/** 姓名*/
private String name;
/** 手机号*/
private String phone;
/** QQ*/
private String qq;
/** 电子邮箱*/
private String email;

快捷生成相应的方法与构造器

public User(int sno, String name, String phone, String qq, String email) {
        super();
        this.sno = sno;
        this.name = name;
        this.phone = phone;
        this.qq = qq;
        this.email = email;
    }
    public int getSno() {
        return sno;
    }
    public void setSno(int sno) {
        this.sno = sno;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getQq() {
        return qq;
    }
    public void setQq(String qq) {
        this.qq = qq;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    @Override
    public String toString() {
        return sno + "\t" + name + "\t" + phone + "\t" + qq + "\t" + email;
    }

由此完成联系人属性定义,再实现对联系人进行管理的功能

功能类

功能我在功能类与测试类中共同实现,因在测试类中反复调用方法
首先定义一个ArrayList数组来对信息进行存储

static ArrayList<User> list = new ArrayList<>();

添加联系人方法

/** 1-添加联系人 */
public void add(User u) {
        list.add(u);
}

联系人查询功能(根据不同信息进行查询:编号、姓名、手机号)

/** 2-联系人查询(根据编号查询) */
public User findBySno(int sno) {
        User us = null;
        for (User u : list) {
            if (u.getSno() == sno) {
                us = u;
                break;
            }
        }
        return us;
    }

    /** 3-联系人查询(根据姓名查询) */
    public User findByName(String name) {
        User us = null;
        for (User u : list) {
            if (u.getName().equals(name)) {
                us = u;
                break;
            }
        }
        return us;
    }
    
    /** 4-联系人查询(根据手机号查询) */
    public User findByPhone(String phone) {
        User us = null;
        for (User u : list) {
            if (u.getPhone().equals(phone)) {
                us = u;
                break;
            }
        }
        return us;
    }

联系人列表

/** 5-联系人列表 */
public ArrayList<User> findAll() {
        return list;
}

删除联系人

/** 6-删除联系人 */
    public boolean delete(int sno) {
        User user = findBySno(sno);
        if (user != null) {
            return list.remove(user);
        }
        return false;
}

此类完成

测试实现类

此类调用功能类中方法实现功能的运用
首先创建对象与控制台输入功能

private UserManage um = new UserManage();
private Scanner sc = new Scanner(System.in);

创建窗口指令界面提供用户提示消息

/** 输入窗口的指令界面 */
public void menu() {
        msg("===================================");
        msg("======SOFTEEM联系人管理系统============");
        msg("======【1】联系人添加==================");
        msg("======【2】根据编号查看联系人信息==========");
        msg("======【3】根据姓名查看联系人信息==========");
        msg("======【4】根据手机号查看联系人信息=========");
        msg("======【5】查看所有联系人===============");
        msg("======【6】根据标号删除联系人============");
        msg("======【0】退出系统===================");
        msg("请输入操作指令: ");
        start();
    }

按照提示消息来使用功能,在此方法中调用各个功能

/** 程序按键入口 */
private void start() {
        sc = new Scanner(System.in);
        int i = sc.nextInt();
        switch (i) {
        case 1:
            add();
            break;
        case 2:
            queryById();
            break;
        case 3:
            queryByname();
            break;
        case 4:
            queryByPhone();
            break;
        case 5:
            list();
            break;
        case 6:
            delete();
            break;
        case 0:
            exit();
            break;
        default:
            msg("请输入正确的操作指令!!!");
            break;
        }
        menu();
    }

联系人的增删改查功能,另外添加了对联系人姓名首字母进行排序的功能

/** 1-用户添加的客户端实现 */
private void add() {
        String regex = "^1[13456789]\\d{9}$";
        String email="\\w+@\\w+\\.\\w+";
        msg("请输入用户信息:((按以下格式:编号/姓名/手机号/QQ/邮箱))");
        sc = new Scanner(System.in);
        String s = sc.nextLine();
        // 根据"/"截取用户信息
        String[] info = s.split("/");
        if (um.findBySno(Integer.parseInt(info[0])) != null) {
            msg("该ID用户已存在,请重新输入!");
            add();
            return;
        } else {
            User u = new User(Integer.parseInt(info[0]), info[1], info[2], info[3], info[4]);
            if (info[2].matches(regex)) {
                
            }else{
                msg("格式错误,请输入正确的手机号!");
                add();
            }
            if (info[4].matches(email)) {
                
            }else{
                msg("格式错误,请输入正确的邮箱!");
                add();
            }
            um.add(u);
            msg("添加成功!");    
        }
    }

    /** 2-根据编号查询联系人 */
    private void queryById() {
        sc = new Scanner(System.in);
        msg("请输入联系人编号:");
        int sno = sc.nextInt();
        User u = um.findBySno(sno);
        if (u == null) {
            msg(sno + "号不存在,请重新输入!");
            queryById();
            return;
        }
        msg("编号\t姓名\t手机号\t\tQQ\t\t邮箱");
        msg(u);
    }

    /** 3-根据姓名查询联系人 */
    private void queryByname() {
        sc = new Scanner(System.in);
        msg("请输入联系人姓名:");
        String name = sc.next();
        User u = um.findByName(name);
        if (u == null) {
            msg(name + "不存在,请重新输入");
            queryByname();
            return;
        }
        msg("编号\t姓名\t手机号\t\tQQ\t\t邮箱");
        msg(u);
    }
    
    /** 4-根据手机号查询联系人*/
    private void queryByPhone() {
        sc = new Scanner(System.in);
        msg("请输入联系人手机号:");
        String phone = sc.next();
        User u = um.findByPhone(phone);
        if (u == null) {
            msg(phone + "不存在,请重新输入");
            queryByPhone();
            return;
        }
        msg("编号\t姓名\t手机号\t\tQQ\t\t邮箱");
        msg(u);
    }

    /** 5-显示所有联系人(按名字首拼音排序) */
    private void list() {
        (um.findAll()).sort((a, b) -> {
            //分别获取要比较的两个联系人的的姓名
            String name1 = a.getName();
            String name2 = b.getName();
            //声明变量存储转换之后的汉语拼音
            String p1 = "";
            String p2 = "";
            //将汉字转拼音
            for (int i = 0; i < name1.length(); i++) {
                p1 += PinyinHelper.toHanyuPinyinStringArray(name1.charAt(i))[0];
            }
            for (int i = 0; i < name2.length(); i++) {
                p2 += PinyinHelper.toHanyuPinyinStringArray(name2.charAt(i))[0];
            }
            
            return p1.compareTo(p2);
        });
        
        msg("编号\t姓名\t手机号\t\tQQ\t\t邮箱");
        for (User u : um.findAll()) {
            msg(u);
        }
    }

    /** 6-根据编号删除联系人 */
    private void delete() {
        sc = new Scanner(System.in);
        msg("请输入用户编号:");
        int sno = sc.nextInt();
        if (um.delete(sno)) {
            msg("删除成功!");
        } else {
            msg("删除失败!");
        }
    }
        public void msg(Object obj) {
        System.out.println(obj);
    }

程序的退出功能

/** 0-体统退出 */
private void exit() {
        sc = new Scanner(System.in);
        msg("是否确定退出?(Y/N)");
        String op = sc.next();
        if (op.equalsIgnoreCase("Y")) {
            msg("谢谢使用,再见!");
            System.exit(1);
        }
    }

联系人管理系统的程序入口

public static void main(String[] args) {
        TestUser tu = new TestUser();
        tu.menu();
    }

功能实现里没有什么技术难点,只要细心一点将对象方法调用和一些简单的判断语句使用灵活就能轻松的完成此系统。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

相关文章

  • 如何用Netty实现高效的HTTP服务器

    如何用Netty实现高效的HTTP服务器

    这篇文章主要介绍了如何用Netty实现高效的HTTP服务器,对HTTP感兴趣的同学可以参考一下
    2021-04-04
  • Java中ArrayList和LinkedList的区别

    Java中ArrayList和LinkedList的区别

    ArrayList和LinkedList在这个方法上存在一定的性能差异,本文就介绍了Java中ArrayList和LinkedList的区别,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 聊聊Mybatis反射之ObjectWrapper的使用

    聊聊Mybatis反射之ObjectWrapper的使用

    本文主要介绍了Mybatis反射之ObjectWrapper的使用,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • spring cloud实现前端跨域问题的解决方案

    spring cloud实现前端跨域问题的解决方案

    这篇文章主要介绍了 spring cloud实现前端跨域问题的解决方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • java中ThreadPoolExecutor常识汇总

    java中ThreadPoolExecutor常识汇总

    这篇文章主要介绍了java中ThreadPoolExecutor常识汇总,线程池技术在并发时经常会使用到,java中的线程池的使用是通过调用ThreadPoolExecutor来实现的,需要的朋友可以参考下
    2019-06-06
  • Scala入门教程详解

    Scala入门教程详解

    这篇文章主要介绍了Scala入门教程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • java如何实现项目启动时执行指定方法

    java如何实现项目启动时执行指定方法

    这篇文章主要为大家详细介绍了java项目如何启动时执行指定方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 详解Http请求中Content-Type讲解以及在Spring MVC中的应用

    详解Http请求中Content-Type讲解以及在Spring MVC中的应用

    这篇文章主要介绍了Http请求中Content-Type讲解以及在Spring MVC中的应用的相关资料,需要的朋友可以参考下
    2017-02-02
  • Java中值传递的深度分析

    Java中值传递的深度分析

    这篇文章主要给大家介绍了关于Java中值传递的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • Java和C#下的参数验证方法

    Java和C#下的参数验证方法

    下面小编就为大家带来一篇Java和C#下的参数验证实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09

最新评论