iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >通讯录管理系统
  • 690
分享到

通讯录管理系统

java开发语言数据结构gitee 2023-10-24 07:10:21 690人浏览 八月长安
摘要

作者:狮子也疯狂 专栏:《项目集锦》 坚持做好每一步,幸运之神自然会驾凌在你的身上 目录 一. 🦁 项目描述二. 🦁编写目的三. 🦁技术

作者:狮子也疯狂
专栏:《项目集锦》
坚持做好每一步,幸运之神自然会驾凌在你的身上
在这里插入图片描述

目录

一. 🦁 项目描述

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

二. 🦁编写目的

通过该项目将平时所学的内容综合到一起并运用到实际的项目中。并且通过实现自己实现的数据结构来实现存储和持久化处理(老师不给用集合,自己实现一个数据结构来存储)
该项目能够充分的体现出一些简单的业务流程处理,能够使同学们掌握基本的业务流程处理。进一步理解什么是面相对象设计(OOD:Object Oriented Design)。充分理解面向对象设计的精髓。
总的来说,就是要完成作业。

三. 🦁技术说明

3.1 业务流程结构图

在这里插入图片描述

3.2 数据存储结构

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

3.3 技术要求及开发环境

  • jdk 版本为 11
  • 键盘输入 Scanner 类
  • 正则表达式 Pattern 类
  • 自编写数据结构LinkedList
  • Windows 10 & idea 2020

四. 🦁项目开发

4.1 创建菜单类

进入每个功能模块,用户都有清晰的功能选择。还有返回上一层,降低了代码的耦合性。

public class Menus {        //主界面        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("--------------⭐------------");        }}

在这里插入图片描述

4.2 创建实体类

import java.io.Serializable;public class Users implements Serializable {    private int id;    private String name;    private int age;    private String sex;    private String telNum;    private String address;    public Users() {    }    public Users(String name, int 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 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 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() {        return "id=" + id +                "\tname: " + name  +                " age:  " + age  +                " sex:  " + sex  +                " telNum:   " + telNum  +                " address:  " + address  +"\t\t";    }}

4.3 创建数据校验类

数据校验类是为了避免在使用过程,用户输入错误的数据又跳转了,导致系统出错。

import java.util.Scanner;public class Varify {    Scanner S = new Scanner(System.in);        public int menuVarify(int min,int max){         //菜单选项验证        String str1 = "\\d";        while(true){            System.out.println("最小为"+min+","+"最大为"+max+";"+"请输入您的选择:");            String input = S.nextLine();            if(input.matches(str1)){                int num = Integer.parseInt(input);                if(num >=min&&num<=max){                    return num;                }else{                    System.out.println("请输入有效数字!!!");                }            }else{                System.out.println("您的输入有误,请重新输入!!!");            }        }    }        public String nameVarity(){        String str = "[A-Za-z\\u4e00-\\u9fa5]{1,10}";        while (true){            System.out.println("请输入您的名字(中文/英文):");            String name = S.nextLine();            if(name.matches(str)){                return name;            }else{                System.out.println("您的输入有误,请重新输入!");            }        }    }        public int ageVarity(){        String str = "\\d{0,125}";        while(true){            System.out.println("请输入您的年龄:(0-125)");            String age = S.nextLine();            if(age.matches(str)){                return Integer.parseInt(age);            }else{                System.out.println("输入有误,请重新输入!");            }        }    }    public String sexVarity(){        String str = "[男|女]{1}";        while(true){            System.out.println("请输入您的性别:(男/女)");            String sex = S.nextLine();            if(sex.matches(str)){                return sex;            }else{                System.out.println("输入有误,请重新输入!");            }        }    }    public String tellNumVarity(){        String str = "(\\d{3,4}-\\d{7,8})|([1]{1}\\d{10})";        while(true){            System.out.println("请输入电话号码或者座机号码:");            String inputNum = S.nextLine();            if(inputNum .matches(str)){                return inputNum;            }else{                System.out.println("您输入的电话号码有误,请重新输入:");            }        }    }    public String addressVarity(){        String str = "[a-zA-Z\\u4e00-\\u9fa5]{1,50}";        while(true){            System.out.println("请输入地址:字母或者汉字");            String inputName = S.nextLine();            if(inputName.matches(str)){                return inputName;            }else{                System.out.println("您输入的地址有误,请重新输入:");            }        }    }}

4.4 创建双向链表

这个是模仿LinkedList的双向链表,里面有基本添加,删除,清空链表功能。

import java.io.Serializable;public class DoubleLinkedList<E> implements ListInterface<E>, Serializable {    private node<E> headNode;       //记录头结点    private Node<E> tailNode;       //记录尾结点    private int size;               //记录结点数    public int getSize() {        return size;    }        class Node<E> implements Serializable{         Node prevNode;             //前         E element;                 //记录元素         Node next;                 //后        public Node(Node prevNode, E element, Node next) {            this.prevNode = prevNode;            this.element = element;            this.next = next;        }        public Node(E element) {            this.element = element;        }    }    private void addNode(E element){        Node t = this.tailNode;        Node node = new Node(t,element,null);        this.tailNode = node;        if(t == null){            this.headNode = node;        }else{            t.next = node;        }        this.size++;    }        @Override    public void add(E element) {        this.addNode(element);    }    private Node getNode(int index){        if(index <= (this.size>>1)){            Node node = this.headNode;            for(int i = 0;i<index;i++){                node = node.next;            }            return node;        }        else{           Node node = this.tailNode;            for(int i = this.size-1;i>index;i--){                node = node.prevNode;            }            return node;        }    }        @Override    public  void add(int index,E element){        if(index < 0||index >=this.size){            throw new IndexOutOfBoundsException("下标不合法:"+index);        }        Node<E> node = new Node(element);        if(index == 0){            node.next = this.headNode;            this.headNode.prevNode = node;            this.headNode = node;        }else if(index+1 == this.size){            this.tailNode.next = node;            node.prevNode = tailNode;            this.tailNode = node;        }else{            Node<E> temp = this.getNode(index-1);            node.next = temp.next;            temp.prevNode = node;            temp.next = node;            node.prevNode = temp;        }        this.size++;    }        @Override    public E get(int index) {        if(index < 0||index >=this.size){            throw new IndexOutOfBoundsException("下标不合法:"+index);        }      Node<E> node = this.getNode(index);        return node.element;    }    @Override               //删除元素    public boolean remove(int index) {        if(index <0||index >=this.size){            throw new IndexOutOfBoundsException("下标不合法:"+index);        }        Node<E> node = this.getNode(index);        if(node.prevNode == null){            this.headNode = node.next;        }else{            node.prevNode.next = node.next;        }        if(node.next == null){            this.tailNode = node.prevNode;        } else{            node.next.prevNode = node.prevNode;        }        node.prevNode = null;        this.size--;        return true;    }    @Override               //清空所有元素    public boolean removeAll(){        this.headNode = null;        this.tailNode = null;        this.size = 0;        return true;    }}

4.5 创建持久层文件处理

创建一个IoUtil包,封装好了读取文件方法,和将数据写入文件的方法,专门进行文件的读取和写入,简化了在使用过程中,创建输入输出流的繁琐步骤,加快了生产效率。

import java.io.*;public class IoUtil {      public static  Object readFile(String fileName) throws IOException, ClassNotFoundException {            FileInputStream fileInputStream = new FileInputStream(fileName);            ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);            return objectInputStream.readObject();        }  public static void writeFile(Object obj,String fileName) throws IOException {      ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(fileName));      objectOutputStream.writeObject(obj);  }}

4.6 创建正则表达式

tips:
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。使用特殊语法来表示字符类、数量限定符和位置关系,然后用这些特殊语法和普通字符一起表示一个模式。

这里的校验类有很多种,分别有主菜单的校验,名字的校验,年龄输入的校验,电话号码是否输入正确的校验,还有地址的校验。实现详情请看以下代码:

import java.util.Scanner;public class Varify {    Scanner S = new Scanner(System.in);        public int menuVarify(int min,int max){         //菜单选项验证        String str1 = "\\d";        while(true){            System.out.println("最小为"+min+","+"最大为"+max+";"+"请输入您的选择:");            String input = S.nextLine();            if(input.matches(str1)){                int num = Integer.parseInt(input);                if(num >=min&&num<=max){                    return num;                }else{                    System.out.println("请输入有效数字!!!");                }            }else{                System.out.println("您的输入有误,请重新输入!!!");            }        }    }        public String nameVarity(){        String str = "[A-Za-z\\u4e00-\\u9fa5]{1,10}";        while (true){            System.out.println("请输入您的名字(中文/英文):");            String name = S.nextLine();            if(name.matches(str)){                return name;            }else{                System.out.println("您的输入有误,请重新输入!");            }        }    }        public int ageVarity(){        String str = "\\d{0,125}";        while(true){            System.out.println("请输入您的年龄:(0-125)");            String age = S.nextLine();            if(age.matches(str)){                return Integer.parseInt(age);            }else{                System.out.println("输入有误,请重新输入!");            }        }    }    public String sexVarity(){        String str = "[男|女]{1}";        while(true){            System.out.println("请输入您的性别:(男/女)");            String sex = S.nextLine();            if(sex.matches(str)){                return sex;            }else{                System.out.println("输入有误,请重新输入!");            }        }    }    public String tellNumVarity(){        String str = "(\\d{3,4}-\\d{7,8})|([1]{1}\\d{10})";        while(true){            System.out.println("请输入电话号码或者座机号码:");            String inputNum = S.nextLine();            if(inputNum .matches(str)){                return inputNum;            }else{                System.out.println("您输入的电话号码有误,请重新输入:");            }        }    }    public String addressVarity(){        String str = "[a-zA-Z\\u4e00-\\u9fa5]{1,50}";        while(true){            System.out.println("请输入地址:字母或者汉字");            String inputName = S.nextLine();            if(inputName.matches(str)){                return inputName;            }else{                System.out.println("您输入的地址有误,请重新输入:");            }        }    }}

4.7 创建用户业务层

功能太多,但是较为简单,就不一一阐述。

五. 🦁总结

一个跟数据结构挂钩的期末实验,功能实现并不复杂,接近crud,但是构造整体框架很复杂,花费了很多精力去打磨。唯一一个难点就是双向链表的编写;还有就是正则表达式的使用不够熟练,查询了很多资料,才知道如何去使用。给大家介绍了一个很简单的Java小项目入门,希望大家喜欢。
项目已经开源git,感兴趣的小伙伴点击:下载

来源地址:https://blog.csdn.net/m0_58847451/article/details/128849818

--结束END--

本文标题: 通讯录管理系统

本文链接: https://www.lsjlt.com/news/441181.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 通讯录管理系统
    作者:狮子也疯狂 专栏:《项目集锦》 坚持做好每一步,幸运之神自然会驾凌在你的身上 目录 一. 🦁 项目描述二. 🦁编写目的三. 🦁技术...
    99+
    2023-10-24
    java 开发语言 数据结构 gitee
  • python实现通讯录管理系统
    本文实例为大家分享了python实现通讯录管理系统的具体代码,供大家参考,具体内容如下 题目 期末项目  一. 项目要求 利用函数实现通讯录管理系统,通讯录的内容包含姓名、...
    99+
    2024-04-02
  • python如何实现通讯录管理系统
    一. 项目要求我们可以使用函数来实现通讯录管理系统,该系统需要保存姓名、联系方式、微信号、电子邮件等联系人信息。至少要包含姓名和联系方式两种。该管理系统具备添加、删除、修改、查询、显示和保存信息的功能。二.项目步骤1.使用自定义函数实现每个...
    99+
    2023-05-22
    Python
  • C++实现通讯录管理系统项目
    本文实例为大家分享了C++实现通讯录管理系统的具体代码,供大家参考,具体内容如下 1、通讯录设计要点 1:添加联系人:向通讯录中添加新人(包括:性别,年龄,联系电话,家庭住址),并且...
    99+
    2024-04-02
  • python实现简单通讯录管理系统
    本文实例为大家分享了python实现通讯录管理系统的具体代码,供大家参考,具体内容如下 =====欢迎使用通讯录管理系统=====1.添加2.修改3.册除4.查询5.排序6.退出==...
    99+
    2024-04-02
  • C++实现简易通讯录管理系统
    目录前言结构体联系人结构体通讯录结构体函数模块菜单添加联系人显示联系人判断联系人删除联系人查找联系人清空所有联系人main函数源代码运行结果本文实例为大家分享了C++实现简易通讯录管...
    99+
    2024-04-02
  • Java实现简单通讯录管理系统
    本文实例为大家分享了Java实现通讯录管理系统的具体代码,供大家参考,具体内容如下 题目: 1、完成一个通讯录,需求: (1)添加联系人(联系人:编号,姓名,手机号,QQ,邮箱地址)...
    99+
    2024-04-02
  • C++实现简单通讯录管理系统
    本文实例为大家分享了C++实现简单的通讯录管理系统的具体代码,供大家参考,具体内容如下 一、代码 #include <iostream> #include <str...
    99+
    2024-04-02
  • Java实现通讯录管理系统项目
    本文实例为大家分享了Java实现通讯录管理系统的具体代码,供大家参考,具体内容如下 一、前言 我们学了这么久的知识了,光学知识不会用是一件很悲伤的事情,所以我们应学完 部分练一些项目...
    99+
    2024-04-02
  • C++实现通讯录管理系统设计
    本文实例为大家分享了C++实现通讯录管理系统的具体代码,供大家参考,具体内容如下 最核心的内容是结构体,结构体数组与指针 主要功能包括:添加联系人 ;显示联系人;删除联系人 ;查找联...
    99+
    2024-04-02
  • C++ 实现的通讯录管理系统详解
    代码如下: #include<iostream> #include <sstream> using namespace std; #define Max ...
    99+
    2024-04-02
  • C++实现简单的通讯录管理系统
    本文实例为大家分享了C++实现简单的通讯录管理系统的具体代码,供大家参考,具体内容如下 案例描述: 通讯录是一个可以记录亲人、好友信息的工具。本教程主要利用C++来实现一个通讯录管理...
    99+
    2024-04-02
  • C++实现简易的通讯录管理系统
    本文实例为大家分享了C++实现简易通讯录管理系统的具体代码,供大家参考,具体内容如下 1. 效果图 2. 需要的知识 C++基础知识(包括变量,运算符,顺序,分支,循环)数组函数指...
    99+
    2024-04-02
  • 怎么用C++实现通讯录管理系统
    这篇“怎么用C++实现通讯录管理系统”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么用C++实现通讯录管理系统”文章吧。系...
    99+
    2023-07-02
  • C++实现简单版通讯录管理系统
    这个通讯录管理系统是我听课后做的笔记,都是很基础的逻辑实现,第一次动手写了一个小案例感觉找到了一点方向,也希望能帮到一点忙! 1、系统需求 通讯录是一个可以记录亲人、好友信息的工具。...
    99+
    2024-04-02
  • C++如何实现通讯录管理系统项目
    这篇文章主要介绍“C++如何实现通讯录管理系统项目”,在日常操作中,相信很多人在C++如何实现通讯录管理系统项目问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++如何实现通讯录管理系统项目”的疑惑有所帮助!...
    99+
    2023-07-02
  • C语言开发实现通讯录管理系统
    本文实例为大家分享了C语言通讯录管理系统开发的具体代码,供大家参考,具体内容如下 程序介绍 通讯录管理系统主要是实现对联系人的增、删、查以及显示的基本操作。用户可以根据自己的需要在功...
    99+
    2022-11-13
    C语言通讯录管理系统 C语言通讯录系统 C语言通讯录管理
  • Java如何实现通讯录管理系统项目
    这篇文章主要介绍了Java如何实现通讯录管理系统项目,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、前言我们学了这么久的知识了,光学知识不会用是一件很悲伤的事情,所以我们应...
    99+
    2023-06-25
  • C++如何实现简易通讯录管理系统
    这篇文章主要介绍“C++如何实现简易通讯录管理系统”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++如何实现简易通讯录管理系统”文章能帮助大家解决问题。前言建议收藏,亲手写一遍代码,感受指针神奇的...
    99+
    2023-07-02
  • C语言代码实现通讯录管理系统
    目录一、需求分析二、程序结构三、头文件内容的介绍四、模块化实现各个功能(1)主函数实现(2)初始化通讯录(3)添加联系人信息(4)删除联系人信息(5)查找联系人信息(6)更改联系人信...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作