Java实现简单的通讯录

每日一言

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


简单的通讯录实现,跟写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;}@Overridepublic 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{@Overridepublic 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{@Overridepublic 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{@Overridepublic 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{@Overridepublic 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{@Overridepublic 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{@Overridepublic 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.rhkb.cn/news/278657.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker部署TeamCity来完成内部CI、CD流程

使用TeamCity来完成内部CI、CD流程 本篇教程主要讲解基于容器服务搭建TeamCity服务&#xff0c;并且完成内部项目的CI流程配置。至于完整的DevOps&#xff0c;我们后续独立探讨。 一个简单的CI、CD流程 以下分享一个简单的CI、CD流程&#xff08;仅供参考&#xff09;&#…

AR/MR产品设计(二):如何用一双手完成与虚拟对象的自然交互

AR/MR产品设计&#xff08;二&#xff09;&#xff1a;如何用一双手完成与虚拟对象的自然交互 - 知乎 手是我们与现实世界交互最重要的方式&#xff0c;同样在虚实混合的世界中是最重要的交互方式 在AR/MR/VR的交互中&#xff0c;手势交互会作为XR的重要交互动作&#xff0c;因…

自然语言处理: 第十七章RAG的评估技术RAGAS

论文地址&#xff1a;[2309.15217] RAGAS: Automated Evaluation of Retrieval Augmented Generation (arxiv.org) 项目地址: explodinggradients/ragas: Evaluation framework for your Retrieval Augmented Generation (RAG) pipelines (github.com) 上一篇文章主要介绍了R…

Spring boot2.7整合jetcache方法缓存

前面的文章 我们讲了 spring boot 整合 jetcache 做基本字符串数据缓存 但是 我这里有个这样的逻辑 我的 domain 包下 有一个 book 属性类 里面就 id 和 name 属性 设置了 对应的 set get函数 和一个整体的构造函数 package com.example.javadom.domain;public class book {pr…

免费阅读篇 | 芒果YOLOv8改进110:注意力机制GAM:用于保留信息以增强渠道空间互动

&#x1f4a1;&#x1f680;&#x1f680;&#x1f680;本博客 改进源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可 该专栏完整目录链接&#xff1a; 芒果YOLOv8深度改进教程 该篇博客为免费阅读内容&#xff0c;直接改进即可&#x1f680;&#x1f680;&#x1f…

最细致最简单的 Arm 架构搭建 Harbor

更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; ARM离线版本安装 官方提供了一个 arm 版本&#xff0c;但是好久都没更新了&#xff0c;地址&#xff1a;https://github.com/goharbor/harbor-arm 。 也不知道为什么不更新&#xff0c;我看…

Linux docker3--数据卷-nginx配置示例

一、因为docker部署服务都是以最小的代价部署&#xff0c;所以通常在容器内部很多依赖和命令无法执行。进入容器修改配置的操作也比较麻烦。本例介绍的数据卷作用就是将容器内的配置和宿主机文件打通&#xff0c;之后修改宿主机的配置文件就相当于修改了docker进程的配置文件&a…

【IC设计】Verilog线性序列机点灯案例(四)(小梅哥课程)

文章目录 该系列目录&#xff1a;设计环境设计目标设计思路RTL及Testbench代码RTL代码Testbenchxdc约束 仿真结果 声明&#xff1a;案例和代码来自小梅哥课程&#xff0c;本人仅对知识点做做笔记&#xff0c;如有学习需要请支持官方正版。 该系列目录&#xff1a; Verilog线性…

uniapp微信小程序随机生成canvas-id报错?

uniapp微信小程序随机生成canvas-id报错&#xff1f; 文章目录 uniapp微信小程序随机生成canvas-id报错&#xff1f;效果图遇到问题解决 场景&#xff1a; 子组件&#xff0c;在 mounted 绘制 canvas&#xff1b;App、H5端正常显示&#xff0c;微信小程序报错&#xff1b; 效…

spring-boot-starter-thymeleaf加载外部html文件

在Spring MVC中&#xff0c;我们可以使用Thymeleaf模板引擎来实现加载外部HTML文件。 1.Thymeleaf介绍 Thymeleaf是一种现代化的服务器端Java模板引擎&#xff0c;用于构建漂亮、可维护且易于测试的动态Web应用程序。它适用于与Spring框架集成&#xff0c;并且可以与Spring M…

VSCode下使用github初步

由于各种需要&#xff0c;现在需要统一将一些代码提交搞github&#xff0c;于是有了在VSCode下使用github的需求。之前只是简单的使用git clone&#xff0c;代码提交这些用的是其他源代码工具&#xff0c;于是得学习实操下&#xff0c;并做一记录以备后用。 安装 VSCode安装 …

swagger使用手册

1.导入依赖 <!--引入swagger--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.7.0</version></dependency><dependency><groupId>io.springfox</…

深度学习面经-part3(RNN、LSTM)

3.RNN 核心思想&#xff1a;像人一样拥有记忆能力。用以往的记忆和当前的输入&#xff0c;生成输出。 RNN 和 传统神经网络 最大的区别:在于每次都会将前一次的输出结果&#xff0c;带到下一次的隐藏层中&#xff0c;一起训练。 RNN应用场景: 1.文本生成 2.语音识别 3.机器翻…

25考研|北大软微会「爆炸」吗?

软微不是已经爆炸了吗&#xff1f; 大家去看看他的录取平均分就知道了&#xff0c;没有实力千万别碰&#xff0c;现在考软微已经不存在捡漏之说。 110408的复试线已经划到了465分&#xff0c;这个人真的不低了&#xff0c;因为有数学一和408两个比较难的专业课&#xff0c;复…

判断闰年(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int year 2000;//执行循环判断&#xff1b;while (year < 2010){//执行流程&#xff1b;//判断能否整除4&#xff1…

云原生(三)、Docker网络

Docker网络 在 Docker 中&#xff0c;不同容器之间的网络访问原理取决于容器所使用的网络模式。下面是 Docker 中常见的两种网络模式下容器间网络访问的原理&#xff1a; 桥接模式&#xff08;Bridge&#xff09;&#xff1a; 在桥接模式下&#xff0c;Docker 使用 Linux 桥接…

CSS案例-3.背景练习

效果1 用背景加入图标 效果2 将图片设为页面背景,图片主体在中间 效果3 鼠标放到导航栏上会变颜色 知识点 CSS背景 属性 描述 取值 background 复合属性 看独立属性 background-color 背景颜色 <color> background-image 背景图像 none | url background-repeat 背景…

计算机网络——物理层(信道复用技术)

计算机网络——物理层&#xff08;信道复用技术&#xff09; 信道复用技术频分多址与时分多址 频分复用 FDM (Frequency Division Multiplexing)时分复用 TDM (Time Division Multiplexing)统计时分复用 STDM (Statistic TDM)波分复用码分复用 我们今天接着来看信道复用技术&am…

Android下的匀速贝塞尔

画世界pro里的画笔功能很炫酷 其画笔配置可以调节流量&#xff0c;密度&#xff0c;色相&#xff0c;饱和度&#xff0c;亮度等。 他的大部分画笔应该是通过一个笔头图片在触摸轨迹上匀速绘制的原理。 这里提供一个匀速贝塞尔的kotlin实现&#xff1a; class EvenBezier {p…

前端安全——最新:lodash原型漏洞从发现到修复全过程

人生的精彩就在于你永远不知道惊喜和意外谁先来&#xff0c;又是一个平平无奇的早晨&#xff0c;我收到了一份意外的惊喜——前端某项目出现lodash依赖原型污染漏洞。咋一听&#xff0c;很新奇。再仔细一看&#xff0c;呕吼&#xff0c;更加好奇了~然后就是了解和修补漏洞之旅。…