Java实现简单的通讯录

news2024/12/24 10:16:50

每日一言

泪眼问花花不语,乱红飞过秋千去。 —欧阳修-


简单的通讯录实现,跟写Java实现图书管理系统差不多,用到的知识也差不多,就当个小练习,练习一下写Java程序的手感。

Java实现图书管理系统

关于通讯录的代码都写在下面了

1. 代码

1.1 contact 包

1.1.1 Contact

package contact;

public class Contact {
    private int size;//当前占用容量
    private Person[] people = new Person[3];

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public Person getPerson(int pos) {
        return people[pos];
    }

    public void setPerson(Person person,int pos) {
        this.people[pos] = person;
    }

    public Boolean isFull(Contact contact) {
        return contact.getSize() == people.length;
    }
}

1.1.2 Person

package contact;

public class Person {
    private String name;
    private String sex;
    private int age;
    private String telephone;

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "名字='" + name + '\'' +
                ", 性别='" + sex + '\'' +
                ", 年龄=" + age +
                ", 电话='" + telephone + '\'' +
                '}';
    }

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

1.2 option 包

1.2.1 AddContact

package option;

import contact.Contact;
import contact.Person;

import java.util.Scanner;

public class AddContact implements IOperation{
    @Override
    public void work(Contact contact) {
        if(contact.isFull(contact)) {
            System.out.println("通讯录已满,无法添加!");
            return;
        }else {
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入联系人姓名:>");
            String name = scanner.nextLine();
            System.out.println("请输入联系人性别:>");
            String sex = scanner.nextLine();
            System.out.println("请输入联系人年龄:>");
            int age = scanner.nextInt();
            System.out.println("请输入联系人电话:>");
            String telephone = scanner.next();
            Person person = new Person(name,sex,age,telephone);

            int size = contact.getSize();
            contact.setPerson(person,size);
            contact.setSize(size+1);
            System.out.println("添加成功!");
        }
    }


}

1.2.2 DelContact

package option;

import contact.Contact;

import java.util.Scanner;

public class DelContact implements IOperation{
    @Override
    public void work(Contact contact) {
        int size = contact.getSize();
        if(0 == size) {
            System.out.println("通讯录为空,无法删除!");
            return;
        }else {
            System.out.println("请输入要删除的联系人姓名");
            Scanner scanner = new Scanner(System.in);
            String name = scanner.nextLine();

            for (int i = 0; i < size; i++) {
                if(name.equals(contact.getPerson(i).getName())) {
                    //删除
                    for (int j = i; j < size-1; j++) {
                        contact.setPerson(contact.getPerson(j+1),j);
                    }
                    contact.setSize(size-1);
                    System.out.println("删除成功!");
                    return;
                }
            }

            System.out.println("没有你要删除的联系人!");
        }
    }
}

1.2.3 ExitContact

package option;

import contact.Contact;

public class ExitContact implements IOperation{
    @Override
    public void work(Contact contact) {
        //释放占用内存
        for (int i = 0; i < contact.getSize(); i++) {
            contact.setPerson(null,i);
        }
        System.out.println("退出成功!");
        System.exit(0);
    }
}

1.2.4 FindContact

package option;

import contact.Contact;

import java.util.Scanner;

public class FindContact implements IOperation{
    @Override
    public void work(Contact contact) {
        int size = contact.getSize();
        System.out.println("请输入要查找的联系人姓名");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();

        for (int i = 0; i < size; i++) {
            if(name.equals(contact.getPerson(i).getName())) {
                System.out.println(contact.getPerson(i).toString());
                return;
            }
        }

        System.out.println("没有你要查找的联系人!");
    }
}

1.2.5 IOperation 接口

package option;

import contact.Contact;

public interface IOperation {
    void work(Contact contact);
}

1.2.6 ModifyContact

package option;

import contact.Contact;
import contact.Person;

import java.util.Scanner;

public class ModifyContact implements IOperation{
    @Override
    public void work(Contact contact) {
        int size = contact.getSize();
        System.out.println("请输入要修改的联系人姓名");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();

        for (int i = 0; i < size; i++) {
            if(name.equals(contact.getPerson(i).getName())) {
                //修改
                System.out.println("请输入联系人姓名:>");
                String name1 = scanner.nextLine();
                System.out.println("请输入联系人性别:>");
                String sex = scanner.nextLine();
                System.out.println("请输入联系人年龄:>");
                int age = scanner.nextInt();
                System.out.println("请输入联系人电话:>");
                String telephone = scanner.next();
                Person person = new Person(name1,sex,age,telephone);

                contact.setPerson(person,i);
                System.out.println("修改成功!");
                return;
            }
        }

        System.out.println("没有你要修改的联系人!");
    }
}

1.2.7 ShowContact

package option;

import contact.Contact;

public class ShowContact implements IOperation{
    @Override
    public void work(Contact contact) {
        if(0 == contact.getSize()) {
            System.out.println("通讯录为空");
            return;
        }else {
            for (int i = 0; i < contact.getSize(); i++) {
                System.out.println(contact.getPerson(i).toString());
            }
        }
    }
}

1.3 Main

import contact.Contact;
import option.AddContact;

import java.util.Scanner;

public class Main {
    public static int menu() {
        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("0.退出通讯录");
        System.out.println("*********************");
        System.out.println("请输入选项:>");

        Scanner scanner = new Scanner(System.in);
        return scanner.nextInt();
    }
    public static void main(String[] args) {
        int op;
        User user = new User();
        Contact contact = new Contact();
        do {
            op = menu();
            if(op > user.iOperation.length || op < 0) {
                System.out.println("输入错误!");
                continue;
            }
            user.doOperation(contact,op);
        }while (0 != op);
    }
}

1.4 User

import contact.Contact;
import option.*;

public class User {
    IOperation[] iOperation = new IOperation[]{
            new ExitContact(),
            new AddContact(),
            new DelContact(),
            new ShowContact(),
            new FindContact(),
            new ModifyContact(),
    };
    public void doOperation(Contact contact,int op) {
        this.iOperation[op].work(contact);
    }
}

2. 效果

2.1 添加联系人

在这里插入图片描述

2.2 展示联系人

在这里插入图片描述

2.3 删除联系人

在这里插入图片描述

2.4 查找联系人

在这里插入图片描述

2.5 修改联系人

在这里插入图片描述

2.6 退出通讯录

在这里插入图片描述


结语

请给自己些耐心,一口吃不成胖子。
山外青山楼外楼,莫把百尺当尽头。
保持空杯心态加油努力吧!


都看到这里啦!真棒(*^▽^*)

可以给作者一个免费的赞赞吗,这将会鼓励我继续创作,谢谢大家

编程小白写作,如有纰漏或错误,欢迎指正


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1523548.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

P8681 [蓝桥杯 2019 省 AB] 完全二叉树的权值:做题笔记

目录 思路 代码 注意点 题目链接&#xff1a; P8681 [蓝桥杯 2019 省 AB] 完全二叉树的权值 (可跳) 这道题刚看到的时候想着主要就是算出每层2的次方个节点的权值和。 我的思路经过了很多次缝缝补补。创建一个sum数组&#xff0c;下标表示深度&#xff0c;每个元素代表…

Unity游戏项目接广告

Unity游戏项目中接入GoogleAdMob 先看效果图 接入测试横幅广告,代码如下: using System.Collections; using System.Collections.Generic; using UnityEngine; using GoogleMobileAds.Api; using System;public class GoogleAdMobManager : MonoBehaviour {private static …

C语言初学12:强制类型转换

一、强制数据类型转换举例 1.1 double赋值给int #include<stdio.h> int main() {double sum 18, count 5;int mean;mean sum / count;printf("Value of mean : %d\n", mean);} 执行结果&#xff1a; double赋值给int&#xff0c;小数部分会删除&#xff…

存内领域前沿,基于忆阻器的存内计算----浅析忆阻存内计算

目录 一.概念浅析 1.存内计算 2.忆阻器 3.基于忆阻器的存内计算 二.忆阻器的分类 1.磁效应忆阻器 2 .相变效应忆阻器 3 .阻变效应忆阻器 三.基于忆阻器的存内计算原理 1. 利用二值忆阻器的布尔计算 3.1R-R 逻辑运算 3.2V-R 逻辑运算 3.3V-V 逻辑运算 2. 利用模拟…

旋转中心 机械手抓料方式

一、为什么要计算旋转中心&#xff1f; 机器视觉——旋转中心的标定_旋转标定-CSDN博客 在机械手抓料的时候传送带上过来的料可能是各个角度的&#xff0c;不同的位置&#xff0c;这样如果我们没有做好机械手标定的话很难抓取&#xff0c;因此我们要做旋转中和和机械手TCP标定…

Oracle19c静默部署

Oracle19c静默部署文档 下载地址 https://www.oracle.com/database/technologies/oracle-database-software-downloads.html#db_free 一、系统基础配置 1、创建用户和用户组 # 创建oinstall和dba用户组 groupadd oinstall groupadd dba# 创建Oracle用户 useradd -g oinstall…

redis学习-Hash类型相关命令及特殊情况分析

目录 1. hset KEY key1 value1 key2 value2 ... 2. hget KEY key 3. hgetall KEY 4. hmget KEY key1 key2 ... 5. hkeys KEY 6. hvals KEY 7. hdel KEY key1 key2 ... 8. hlen KEY 9. hexists KEY key 10. hincrby KEY key num 11. hsetnx KEY key value Hash的内部…

HDFSDATANODE数据传输详解

本文主要阐述datanode中一个socket连接接收字节流的构成&#xff0c;帮助datanode的接收与处理数据。注意hadoop版本为3.1.1。 写在前面 Datanode本质上也是TCPServer&#xff0c;一般的TCPServer接到客户端请求以后会分配一个线程处理&#xff0c;对于Datanode而言&#xff…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:SideBarContainer)

提供侧边栏可以显示和隐藏的侧边栏容器&#xff0c;通过子组件定义侧边栏和内容区&#xff0c;第一个子组件表示侧边栏&#xff0c;第二个子组件表示内容区。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:TextTimer)

通过文本显示计时信息并控制其计时器状态的组件。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 TextTimer(options?: TextTimerOptions) 参数&#xff1a; 参数名参数类型…

数据仓库数据分层详解

数据仓库中的数据分层是一种重要的数据组织方式&#xff0c;其目的是为了在管理数据时能够对数据有一个更加清晰的掌控。以下是数据仓库中的数据分层详解&#xff1a; 原始数据层&#xff08;Raw Data Layer&#xff09;&#xff1a;这是数仓中最底层的层级&#xff0c;用于存…

【老旧小区用电安全谁能管?】安科瑞智慧用电安全管理系统解决方案

行业背景 电气火灾指由电气故障引发的火灾。每年以30%的比例高居各类火灾原因之首。以50%到80%的比例高居重特大火灾之首。已成为业界重点关注的对象并为此进行着孜孜不倦的努力。 国务院安委会也于2017年5月至2020年4月年开展了为期3年的电气火灾综合治理工作。在各界努力的…

主干网络篇 | YOLOv8更换主干网络之ShuffleNetV2

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。ShuffleNetV2是一种轻量级的神经网络架构&#xff0c;用于图像分类和目标检测任务。它是ShuffleNet的改进版本&#xff0c;旨在提高模型的性能和效率。ShuffleNetV2相比于之前的版本&#xff0c;在保持模型轻量化的同时&am…

LeetCode刷题小记 八、【回溯算法】

1.回溯算法 文章目录 1.回溯算法写在前面1.1回溯算法基本知识1.2组合问题1.3组合问题的剪枝操作1.4组合总和III1.5电话号码的字母组合1.6组合总和1.7组合总和II1.8分割回文串1.9复原IP地址1.10子集问题1.11子集II1.12非递减子序列1.13全排列1.14全排列II1.15N皇后1.16解数独 写…

WanAndroid(鸿蒙版)开发的第三篇

前言 DevEco Studio版本&#xff1a;4.0.0.600 WanAndroid的API链接&#xff1a;玩Android 开放API-玩Android - wanandroid.com 其他篇文章参考&#xff1a; 1、WanAndroid(鸿蒙版)开发的第一篇 2、WanAndroid(鸿蒙版)开发的第二篇 3、WanAndroid(鸿蒙版)开发的第三篇 …

三级等保技术建议书

1信息系统详细设计方案 1.1安全建设需求分析 1.1.1网络结构安全 1.1.2边界安全风险与需求分析 1.1.3运维风险需求分析 1.1.4关键服务器管理风险分析 1.1.5关键服务器用户操作管理风险分析 1.1.6数据库敏感数据运维风险分析 1.1.7“人机”运维操作行为风险综合分析 1.2…

EPICS和Arduino Uno之间基于串行文本协议的控制开发

Arduino Uno的串口服务程序设置如文本的串口通信协议设计以及在Arduino上的应用-CSDN博客中所示。通过在串口上发送约定的文本协议&#xff0c;它实现的功能如下&#xff1a; 实现功能&#xff1a; 读取三路0.0V~5.0V模拟量输入&#xff0c;读取端口A0~A2设置三路0.0V~5.0V的模…

Github 2024-03-16 开源项目日报Top10

根据Github Trendings的统计,今日(2024-03-16统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目5非开发语言项目2TypeScript项目1C++项目1Lua项目1Swift项目1《Hello 算法》:动画图解、一键运行的数据结构与算法教程 创建周期:4…

spring boot3登录开发-微信小程序用户登录设计与实现

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途 目录 写在前面 登录流程 流程解析 具体实现 相关代码 说明 服务端 小程序端 写在最后 写在前面 本文介绍了springb…

BigDL-LLM 安装指南——在iGPU集成显卡下使用BigDL-LLM大模型库加速LLM

文章目录 iGPU是什么&#xff1f;一、环境准备1.1 Visual Studio 2022 Community 安装1.2 安装或更新最新版本的GPU驱动程序1.3 安装英特尔oneAPI工具包2024.0版本1.4 安装Anaconda 二、BigDL -LLM 安装2.1 创建虚拟环境2.2 激活虚拟环境2.3 安装bigdl-llm[xpu] 三、运行环境配…