Java数据结构——用顺序表编写一个简易通讯录

java实现通讯录管理系统(附完整源码) 阅读详情


Java数据结构——用顺序表编写一个简易通讯录

打开IDEA等java编译器,新建一个软件包后按如下步骤创建类或接口。具体代码如下:

============================================

1、定义线性表的抽象数据类型(接口)

public interface IList {
	
    public void addPerson(); //添加联系人
    public void deletePerson(); //删除联系人
    public void modifyPerson(); //修改联系人信息
    public void findPerson(); //查找联系人
    public void showPerson(); //显示所有联系人
    public void cleanPerson(); //清空所有联系人
    
}

2、编写顺序表(类)

public class SqList implements IList {

    private Person[] personArray;//线性表存储空间
    private int curlen;//用于记录通讯录当前长度
    int maxSize = 500;//将通讯录最大人数设置为500
    static Scanner sc=new Scanner(System.in);
    
    //顺序表的构造函数
    public SqList() {
        curlen = 0;
        personArray = new Person[maxSize];//为顺序表分配maxSize个存储单元
    }
    //定义联系人类
    class Person {
        private String name;
        private String phone;
        Person(String name, String phone) {
            this.name = name;
            this.phone = phone;
        }
        public String getName() {
            return name;
        }
        public String getPhone() {
            return phone;
        }
        public void setName(String name) {
            this.name = name;
        }
        public void setPhone(String phone) {
            this.phone = phone;
        }
    }

    //添加联系人
        public void addPerson() {
            //先判断通讯录是否已满
            if (curlen >= maxSize){
                System.out.println("通讯录已满,无法添加!");
            }
            else {
                System.out.println("请输入您要添加的联系人姓名:");
                String name = sc.next();
                System.out.println("请输入您要添加的联系人电话:");
                String phone = sc.next();
                Person person = new Person(name,phone);
                this.personArray[curlen] = person;//将实例化对象person放入线性表中
                curlen++;
            }
        }
        
    //判断某个联系人是否存在,并得到其位置
        public int isExit(String name){
        //存在就返回该联系人的数组下标
        for ( int i=0;i<curlen;i++){
            if (this.personArray[i].getName().equals(name)){
                return i;
            }
        }
        return -1; //不存在则返回-1
        }

    //删除联系人
        public void deletePerson() {
            System.out.println("请输入您要删除的联系人姓名:");
            String name = sc.next();
            int ret = isExit(name);
            if (ret != -1){  //存在该联系人
                for (int i = ret;i<curlen;i++){
                        personArray[i] = personArray[i+1];
                }
                curlen--;
                System.out.println("删除成功!");
            }
            else {
                System.out.println("您要删除的联系人不存在!");
            }
        }

    //修改联系人信息
        public void modifyPerson() {
            System.out.println("请输入您要修改的联系人姓名:");
            int ret = isExit(sc.next());//将输入的姓名传入isExit函数,并得到其返回值
            if (ret != -1){  //存在该联系人
                System.out.println("请输入更改后的姓名:");
                personArray[ret].setName(sc.next());
                System.out.println("请输入更改后的号码:");
                personArray[ret].setPhone(sc.next());
                System.out.println("修改成功!");
            }
            else {
                System.out.println("您要修改的联系人不存在!");
            }
        }

    //查找联系人,找到则显示其信息
        public void findPerson() {
            System.out.println("请输入您要查找的联系人姓名:");
            int ret = isExit(sc.next());//将输入的姓名传入isExit函数,并得到其返回值
            if (ret != -1){  //存在该联系人
                System.out.print("姓名:"+personArray[ret].getName()+"\t");
                System.out.println("电话:"+personArray[ret].getPhone());
            }
            else {
                System.out.println("您要查找的联系人不存在!");
            }
        }

    //显示所有联系人
        public void showPerson() {
        //先判断当前通讯录是否为空
        if (curlen == 0){
            System.out.println("当前通讯录为空!");
        }
        else {
            for (int i=0;i<curlen;i++){
                System.out.print("姓名:"+personArray[i].getName()+"\t");
                System.out.println("电话:"+personArray[i].getPhone());
            }
        }
        }
        
    //清空所有联系人
        public void cleanPerson() {
            System.out.println("请确定是否清空所有联系人?确定请输入’是‘");
            if ("是".equals(sc.next())){
                curlen = 0; //清空
                System.out.println("通讯录已成功清空!");
            }
            else {
                System.out.println("清空操作已取消");
            }
    }
}

3、编写测试程序(main方法所在的可运行类)

public class text_SqList {

	//展示通讯录菜单
   	 public static void showMenu(){
        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("### 0、退出通讯录 ###");
        System.out.println("###################");
    }


    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        SqList seqList = new SqList();//创建顺序表对象

        while (true){
            showMenu();
            int select = sc.nextInt();
            switch (select){
                case 1: //添加联系人
                    seqList.addPerson();
                    break;
                case 2: //删除联系人
                    seqList.deletePerson();
                    break;
                case 3: //修改联系人
                    seqList.modifyPerson();
                    break;
                case 4: //查找联系人
                    seqList.findPerson();
                    break;
                case 5: //显示联系人
                    seqList.showPerson();
                    break;
                case 6: //清空通讯录
                    seqList.cleanPerson();
                    break;
                case 0: //退出通讯录
                    System.out.println("退出通讯录成功,欢迎下次使用!");
                    System.exit(0);
                    break;
                default:
                    break;
            }
        }

    }
}

以上几个步骤完成后,一个简易的通讯录就创建好了。可以运行下对程序进行测试。

java写的通讯录 通讯录管理系统要求完成一个单机版的应用程序,主要功能是通讯录内容。 用户可以存储的内容包括: (1)基本信息:姓名、手机号码电子邮箱、生日、所属组、备注 、像片。 (2)工作单位:国家、省份 、城市地址、工作单位 、所属 部门、 职位部门、 职位 邮编、电话传真 (3)网络信息:个人主页、 即时通工具及号码、备用邮箱 (4)家庭资料:国、省份城市、地址、邮编电话 通讯录数据的查询功能:输入并存储新的通讯录数据 ,输入时如果有同 名或同电话号码时,应该给出提示。 删除和修改功能: (1)默认列出所有条目。 (2)模糊查询,可以按:姓名、电话号码手机的汉语拼音声母 或全拼查询。 支持模 糊即输入部分数据后,可以出符合条件的目或全拼查询。 (3)指定分组后,列出某的所有条目 通信录内容的导入和导出功能:要求够以 CSV和vCard格式导入 和导出通讯录的全部内容。 通讯录显示设置:可以在查询结果时设置一个条目可以或不可以显示哪些内容。 立即下载

相关推荐

模拟通讯录-数据结构(顺序表实现基本功能).doc

模拟通讯录,设计相关数据结构,用菜单选择方式实现:通讯录的建立、通讯联系人的插入、删除、修改、查找等功能。

【通讯录项目 (1 / 3)】基于顺序表的通讯录实现——顺序表介绍

常⻅的数值1、2、3、4…、教务系统⾥保存的⽤⼾信息(姓名、性别、年龄、学历等等)、⽹⻚⾥⾁眼可以看到的信息(⽂字、图⽚、视频等等),这些都是数据当我们想要使⽤⼤量使⽤同⼀类型的数据时,通过⼿动定义⼤量的独⽴的变量对于程序来说,可读性⾮常差,我们可以借助数组这样的数据结构将⼤量的数据组织在⼀起,结构也可以理解为组织数据的⽅式。想要找到草原上名叫“咩咩”的⽺很难,但是从⽺圈⾥找到1号⽺就很简单,⽺圈这样的结构有效将⽺群组织起来。

叫我龙翔的博客 607

5个免费股票数据API实测对比:从AkShare到BaoStock,哪个最适合你的AI量化项目?

本文深度评测了AkShare、BaoStock、yfinance、Alpha Vantage和EOD Historical Data这五个免费股票数据API,从数据质量、覆盖范围、更新频率、稳定性及易用性进行对比。针对AI量化项目,文章提供了详细的选型策略,帮助开发者根据项目阶段与需求,精准选择最适合的数据源,并强调了多源验证与数据清洗的重要性。

weixin_29290947的博客 5104

用Java编写通讯录,实现新增、修改、查看、删除、退出的功能

import java.util.Scanner; public class UseManger { public static void main(String[] args) { Scanner sc = new Scanner(System.in); User[] users=new User[50]; while (true) { System.out.println(" 通讯录 "); System.out.println("===========");

weixin_46686232的博客 4423

实测昇腾310P跑Qwen3有多慢?手把手带你部署vLLM并记录性能数据

本文实测了昇腾310P在vLLM框架下部署Qwen3模型的性能表现,详细记录了2.5 tokens/s的生成速度及其技术瓶颈。通过环境搭建、基准测试和深度分析,揭示了计算资源利用率不足等关键问题,并提供了实用的优化技巧与监控方案,帮助开发者更好地理解和优化昇腾平台上的大模型部署。

weixin_28724319的博客 896

华为海思IC设计岗位笔试全解析:物理、电路与工艺三大方向备考指南

本文全面解析华为海思IC设计岗位笔试的物理、电路与工艺三大方向备考要点。针对物理设计方向,重点讲解半导体能带理论、载流子输运机制等核心考点;电路设计方向涵盖Verilog语法、UVM验证等关键技术;工艺方向则深入探讨FinFET工艺、光刻技术等前沿知识。提供高效备考策略和应试技巧,助力考生提升通过率。

weixin_29196613的博客 1089

Java数据结构——用单链表编写一个简易通讯录

/添加联系人//删除联系人//修改联系人信息//查找联系人//显示所有联系人//清空所有联系人}//数据域,存放Person类型的数据//地址域,引用后继节点//构造函数}}}}}}

Jay_Java_的博客 1938

医药行业SAP序列号管理深度解析:如何满足GMP合规要求

本文深度解析了医药行业如何利用SAP序列号管理构建满足GMP合规要求的数字化追溯体系。文章详细阐述了SAP序列号在实现从生产到患者全流程“一物一码”精准追溯中的核心作用,并探讨了其与质量管理、冷链监控等系统的关键集成配置,为医药企业应对严格监管、保障产品质量与安全提供了切实可行的技术方案。

backprop5master的博客 656

顺序表实现简易通讯录 附带源码

顺序表实现简易通讯录

Mike的博客 2268

用Multisim仿真AD630锁定放大器:从2012年电赛A题实战到避坑指南

本文详细介绍了如何使用Multisim仿真AD630锁定放大器,从2012年电赛A题实战出发,提供完整的电路搭建、参数优化及避坑指南。重点解析AD630的开关调制架构和双相位检测的工程实现,帮助读者在强噪声背景下有效提取微弱信号,提升电子设计竞赛和工程实践中的信号处理能力。

weixin_42549451的博客 203

Open Dynamics Engine(ODE)物理引擎基础教程(I)——特点介绍

下一教程 Open Dynamics Engine(ODE)物理引擎基础教程(II)——相关概念 (在这一教程中将学习刚体、关节、碰撞的概念在ODE中的特点) 本文结构引言介绍特点使用ODE总结 引言 本文翻译自ODE官方教程英文版,有些地方增加了自己的理解。这一节介绍ODE的相关概念。 基础教程英文原版链接【http://ode.org/wiki/index.php?title=Manua...

腿足机器人领域 1680

【数据结构】以不完整拼音搜索通讯录算法设计

本文主要分享算法设计思路,其中代码均原创,供大家参考和学习 文章目录前言一、问题描述1.概述2.具体要求二、数据存储方案1.名字对应的音节组合2.拼音库2.读入数据三、拼音模糊匹配的递归回溯算法总结 前言 开始学习数据结构的时候,很多像顺序表、二叉树、邻接链表的结构学会了完全不知道该在什么地方使用。到学习算法一段时间,做了些题目后,发现自己还是需要阅读一些博客和以前写过的数据结构去“启发式”的引导自己解决问题。其实我们一开始在学习数据结构的时候就应该去思考每个数据结构可以应用的场景,这样学习数据结构才.

weixin_45781381的博客 2394

Python数据分析师必备:OpenClaw开启Pandas清洗脚本自动生成新时代

本文介绍了OpenClaw这一AI智能体框架如何帮助Python数据分析师高效完成数据清洗工作。OpenClaw通过自然语言交互理解用户需求,自动生成Pandas清洗脚本,显著提升了数据清洗效率,降低了技术门槛。文章详细阐述了OpenClaw的工作原理、实战应用步骤及其在电商、金融、医疗等行业中的成功案例。相比传统手动编写脚本方式,OpenClaw能快速生成规范准确的清洗代码,使数据分析师能更专注于业务洞察。该工具为数据驱动决策提供了可靠支持,是数据分析领域的重要创新。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 230

初阶数据结构-----顺序表的使用(详解)及通讯录项目

顺序表的底层结构就是数组,对数组的封装,实现了常用的增删改查等接口,换句话说就是对一个数组可以实现增删查改等操作。静态顺序表和动态顺序表。静态顺序表概念:使用定长数组存储元素空间大小固定,给少了空间不够用,给多了造成空间浪费。动态顺序表:动态顺序表则与静态顺序表相反,动态顺序表是按需申请空间存储数据,给一个数组存储数据,当给的数组空间不够时即可向堆申请足够大的空间去存储数据,一般在空间不够时申请原空间的2~3倍的空间大小,按需申请即可。//动态顺序表---按需申请空间int size;

2402_83215991的博客 739

点云焊缝提取

本文介绍了一个基于PCL库的点云处理流程,包含三个核心模块:MLS平滑处理通过多项式拟合修正点云位置;差异提取通过双向匹配定位源/目标点云的非重叠区域;统计过滤剔除离群噪声点。该流程采用"平滑-筛选-净化"的通用思路,将复杂算法封装为可配置接口,实现了工业级点云预处理。文章重点分析了各模块的原理、PCL接口调用及参数设计逻辑,同时指出参数调优、算法扩展等深入探索方向,展现了PCL在点云处理中的模块化优势与实用价值。

weixin_45196569的博客 251

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

JAVA散列表个人通讯录_散列表实现简易通讯录

散列表实现通讯录1、项目研究背景与意义背景:随着信息活动在国民经济中主导地位的确立和信息产业的崛起,信息资源管理作为一个专有名词和独立的学科逐渐发展起来。如何积极开发、合理配置和有效利用信息资源,日益成为社会中急需解决的问题。由于计算机和通信技术的高速发展,推广应用计算机进行信息管理成为推动信息化工作的重要内容,信息管理系统正是应用计算机信息化过程中出现的新事物。它能够提供信息、支持企业和组织的运...

weixin_30384285的博客 748

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

顺序表(SeqList)的理解以及实现

SeqList的底层实现(C++),通讯录的实现:模板的好处

Small_entreprene的博客 1423

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

顺序表初级项目——通讯录(内附leetcode经典算法OJ题!)

项目共由5个文件构成,其中包括两个基础顺序表的实现(SeqList.h、SeqList.c),两个通讯录功能实现文件(Contact.h,Contact.c)和一个最终功能测试文件(test.c),而通讯录项目其实就是在基础顺序表上进行扩展而来的。所以对于了解博主上一篇文章的伙伴(详见C数据结构初阶详解——顺序表专题)就可以直接看一下通讯录的两个文件了。其实通讯录项目在逻辑复杂程度上并不高,都是在基础顺序表上扩展了更高级的功能,所以大家就根据我为大家写的注释理解一下功能实现就好。

2502_91380778的博客 870

数据结构之顺序表(Java实现)

顺序表概述二级目录二级目录二级目录二级目录 顺序表概述 简介: 顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。 顺序表存储示意图: 二级目录 二级目录 二级目录 二级目录 ...

Easenyang的博客 1092

简单java实现顺序表

创建一个顺序表,实现相关功能。 //顺序表类 import java.util.Arrays;//数组操作工具类 public class MyArrayList { private int[] elem; private int usedSize; private final int CAPACITY = 10; public MyArrayList() { ...

weixin_43909643的博客 170

用顺序表做一个电话簿

先看看结构体定义 #define MAXSIZE 50 //表最大容量 //定义联系人信息 备注,电话,年龄,该声明要在顺序表结构体之前声明 typedef struct person { char remark[20]; char telephone[20]; int age; }; //定义顺序表结构体 typedef struct { struct person data[MAXSIZE]; //顺序表元素为结构体元素 int last; //表尾指针 }seqli

m0_57662538的博客 605

顺序表详解及基本实现

线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列…线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。顺序表作为一种简单的数据结构, 其中必然会出现一些小问题1. 顺序表中间/头部的插入删除,时间复杂度为O(N)2. 增容需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗.

Aqua_yyds的博客 554

Java讯序_java使用顺序表制作电子通讯录,实现添加,删除和排序的功能.

展开全部翻了半天找到以前写的,只写了部分,你可以参考一下public class Data {private long stuNumber;private String stuName;private long stuScore;public Data(){}public Data(long stuNumber,String stuName,long stuScore){this.stuNumbe...

weixin_39729262的博客 873

数据结构(2)-顺序表专题

连续存储:顺序表通常使用一个数组来实现,所有数据元素在内存中连续存放。动态数组:顺序表可以根据需要自动调整大小,以容纳更多的元素。随机访问:可以通过索引快速访问顺序表中的任何元素。可变大小:顺序表可以根据需要增长或缩小,以适应数据的添加或删除。在Java中,顺序表的概念可以通过ArrayList类来实现,它是一个动态数组的实现,提供了在列表末尾快速添加和删除元素的能力,同时也支持随机访问。一、顺序表的功能实现!​​​​​​​。

weixin_54114700的博客 489

职工管理系统Java数据结构,数据结构课程设计—java通讯录管理系统

import java.io.*;import java.util.*;public class LittleProgram {static boolean isDelete = true;static boolean isFind = true;public static void main(String [] args)//主方法,程序从这里开始运行 throws IOExcep...

weixin_39725873的博客 259

【数据结构】初识集合框架

1. 什么是集合框架 2. 集合框架的重要性 3. 背后所涉及的数据结构以及算法 3.1 什么是数据结构 3.2 容器背后对应的数据结构 3.3 相关java知识 3.4 什么是算法 3.5 如何学好数据结构以及算法

2402_85428625的博客 1034
上一篇: Java数据结构——用单链表编写一个简易通讯录
下一篇: Java数据结构——图-邻接表
Jay_Java_
博客等级 码龄5年 206粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值