JAVA——类间双向关联关系的实现-Contact与Phone类(电话簿管理系统)

news2024/12/23 9:43:35

首先:确定代码雏形框架(原始代码)

先根据以往经验写出一般的电话簿管理系统,先把代码雏形框架确定好。

原始代码运行结果:

在这里插入图片描述

原始代码源码:

package bidirectionalDome;

import java.util.ArrayList;

public class BidirectionalDome {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Contact Contact1 = new Contact(007,"幸存者letp",true);
		Phone Phone1 = new Phone(11,"home",Contact1);
		Phone Phone2 = new Phone(12,"person",Contact1);
		Phone Phone3 = new Phone(13,"company",Contact1);
		
		ArrayList<Phone> phones = Contact1.getPhoneArray();//获取电话簿
		String pername = Contact1.getName();
		for(int i = 0;i<phones.size();i++) {
			System.out.println(phones.get(i).getPhoneNom()+phones.get(i).getType());
		}
		System.out.println("电话号码主人为:"+Contact1.getName());
		
		
	}

}
class Contact{
	private int contectID;
	private String name;
	private boolean isFroqContect;
	private ArrayList<Phone> phoneArray;//实现多对一
	
	//带参构造
	public Contact(int contectID,String name,boolean isFroqContect) {
		this.contectID = contectID;
		this.name = name;
		this.isFroqContect = isFroqContect;
		
		//定义一个电话簿数组—大小为3
		phoneArray = new ArrayList<Phone>(3);
	}
	//标准方法
	public ArrayList<Phone> getPhoneArray() {
		return phoneArray;
	}

	public void setPhoneArray(ArrayList<Phone> phoneArray) {
		this.phoneArray = phoneArray;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	//将电话号码添加到phoneArray数组中——实现contact与电话号码一对多形式
	public void addPhoneToContact(Phone aPhone) {
		phoneArray.add(aPhone);
	}
}
class Phone{
	private int phoneNom;
	private String type;
	private Contact aContact;//实现一对一
	
	//带参构造
	public Phone(int phoneNom,String type,Contact aContact){
		this.phoneNom = phoneNom;
		this.type = type;
		this.aContact = aContact;
		aContact.addPhoneToContact(this);
	}
	//标准方法
	public int getPhoneNom() {
		return phoneNom;
	}

	public void setPhoneNom(int phoneNom) {
		this.phoneNom = phoneNom;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}
}

其次:按题目要求进行修改(终极代码)

【问题描述】编程实现如图所示的类间关联关系(双向关联)
在这里插入图片描述
【输入形式】

输入分4行,

第1行:联系人ID 联系人姓名

第2行:第一个联系电话号码 联系电话类型

第3行:第二个联系电话号码 联系电话类型

第4行:第三个联系电话号码 联系电话类型
【输出形式】

见样例输出
【样例输入】

123 xiaoyu

87542222 office

87558755 home

1397890678 mobile

【样例输出】

ContactName:xiaoyu PhoneNumber:87542222 type:office

ContactName:xiaoyu PhoneNumber:87558755 type:home

ContactName:xiaoyu PhoneNumber:1397890678 type:mobile

Contact of the second phone:xiaoyu

终极代码运行结果:

在这里插入图片描述

终极代码源码:

package bidirectionalDome;

import java.util.ArrayList;
import java.util.Scanner;

public class BidirectionalDome {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		//输入电话主人基本信息
		int ID = in.nextInt();
		String name = in.next();
		boolean isFroq = in.hasNext();
		
		Contact aContact = new Contact(ID,name,isFroq);
		//输入电话号码
		for(int i = 0;i<3;i++) {
			String phoneNom = in.next();
			String type = in.next();
			new Phone(phoneNom,type,aContact);//用到类间关联
			//Phone aPhone = new Phone(phoneNom,type,aContact);
			//aContact.addPhoneToContact(aPhone);
		}
		
		ArrayList<Phone> phones = aContact.getPhoneArray();//获取电话簿
		String pername = aContact.getName();
		for(int i = 0;i<phones.size();i++) {
			System.out.println("ContactName:"+pername+" PhoneNumber:"+phones.get(i).getPhoneNom()+" type:"+phones.get(i).getType());
		}
		System.out.println("Contact of the second phone:"+pername);
		//System.out.println(aContact.isFroqContect());//验证isFroqContect()默认值为true
	}

}
class Contact{
	private int contectID;
	private String name;
	private boolean isFroqContect;//默认为true
	private ArrayList<Phone> phoneArray;//实现多对一
	
	//带参构造
	public Contact(int contectID,String name,boolean isFroqContect) {
		this.contectID = contectID;
		this.name = name;
		this.isFroqContect = isFroqContect;
		
		//定义一个电话簿数组—大小为3
		phoneArray = new ArrayList<Phone>(3);
	}
	//标准方法
	public ArrayList<Phone> getPhoneArray() {
		return phoneArray;
	}

	public void setPhoneArray(ArrayList<Phone> phoneArray) {
		this.phoneArray = phoneArray;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	public boolean isFroqContect() {
		return isFroqContect;
	}
	public void setFroqContect(boolean isFroqContect) {
		this.isFroqContect = isFroqContect;
	}
	//将电话号码添加到phoneArray数组中——实现contact与电话号码一对多形式
	public void addPhoneToContact(Phone aPhone) {
		phoneArray.add(aPhone);
	}
}
class Phone{
	private String phoneNom;
	private String type;
	private Contact aContact;//实现一对一
	
	//带参构造
	public Phone(String phoneNom,String type,Contact aContact){
		this.phoneNom = phoneNom;
		this.type = type;
		this.aContact = aContact;
		aContact.addPhoneToContact(this); //实现一对多——作用等同于void addPhoneToContact(Phone aPhone)
	}
	//标准方法
	public String getPhoneNom() {
		return phoneNom;
	}

	public void setPhoneNom(String phoneNom) {
		this.phoneNom = phoneNom;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}
	public Contact getaContact() {
		return aContact;
	}
	public void setaContact(Contact aContact) {
		this.aContact = aContact;
	}
}

END:放眼远方,聚焦当下。

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

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

相关文章

前端基础面试题八股文

html语义化的理解 代码结构: 使页面在没有css的情况下,也能够呈现出好的内容结构 有利于SEO: 爬虫根据标签来分配关键字的权重,因此可以和搜索引擎建立良好的沟通,帮助爬虫抓取更多的有效信息 方便其他设备解析&#xff1a; 如屏幕阅读器、盲人阅读器、移动设备等&#xff0c…

【敬伟ps教程】自由变换

文章目录 自由变换 自由变换 变换可以针对整个图层(组或链接图层)&#xff0c;或者选区内 基本操作 编辑–自由变换&#xff08;CtrilT&#xff09;&#xff1b; 自由变换的控件框来控制变换的效果&#xff1b; 自由变换是独立进行操作的模式&#xff0c;操作结束后需要点击确…

nginx -- 基本操作命令

修改nginx 配置&#xff0c;重新启动nginx流程,先进入到nginx目录 查看nginx状态 ps -ef | grep nginx 修改完/conf/nginx.conf 配置文件后保存 检查配置文件是否正确 ./sbin/nginx -t 检查文件配置正常 关闭nginx ./sbin/nginx -s quit 启动nginx ./sbin/nginx 完成

无线AP中小型、大型两种常见组网方式

无线AP&#xff08;Access Point&#xff09;网络覆盖是现代无线网络中的重要组成部分。它提供了无线信号的传输和接收功能&#xff0c;使用户能够在无线网络中进行通信和访问互联网。针对不同的需求和场景&#xff0c;存在两种常见的无线AP网络覆盖组网方式&#xff1a;中小型…

IMX6ULL平台的I2C

IMX6ULL平台的I2C 文章目录 IMX6ULL平台的I2C概述模式和操作 外部信号时钟功能描述I2C系统配置仲裁程序时钟同步信号交换外围总线访问复位中断字节顺序 初始化初始化序列启动的生成传输后软件响应停止的生成重复启动的生成从模式仲裁失败软件限制 I2C内存映射/寄存器定义I2C地址…

三维医学图像处理系统(PACS)源码

三维医学图像处理系统&#xff08;PACS&#xff09;源码 系统概述&#xff1a; 它集影像存储服务器、影像诊断工作站及RIS报告系统于一身,主要有图像处理模块、影像数据管理模块、RIS报告模块、光盘存档模块、DICOM通讯模块、胶片打印输出等模块组成&#xff0c; 具有完善的影…

opencv 裁剪图片方法详解

OpenCV 是一个用于计算机视觉和机器学习的开源库。它包含了很多图像处理的功能&#xff0c;包括裁剪图片。在 Python 中&#xff0c;我们可以使用 OpenCV 的 cv2 模块来实现图片的裁剪。 以下是使用 OpenCV 裁剪图片的详细步骤&#xff1a; 1. 导入所需的库&#xff1a; python…

python3.8,torch1.10.2+cu113、torch-geometric 安装

【1】conda create -n name python=3.8 【2】安装 torch 注意先看可适应的最高cuda版本 https://data.pyg.org/whl/ 版本对应 【3】按照顺序安装torch-geometric: torch-sparse、torch-scatter、torch-cluster、 torch-spline-conv \torch-geometric pip install torc…

详解c++新特性—c++11

目录 1、auto 1.1、解释 1.2、语法 1.3、注意事项 1.4、实例 1.5、auto和const的结合 1.6、auto的限制 1.7、auto的应用 2、decltype 2.1、解释 2.2、语法 2.3、注意事项 2.4、实例 2.5、decltype推导规则 2.6、decltype实际运用 3、返回值类型后置 3.1、解释…

怎么用手机拍照方式将车辆合格证转为excel表格?

将车辆合格证转为结构化的Excel文档是一项常见的需求&#xff0c;它可以让用户更方便快捷地对其中的数据进行查询和储存、管理。但当前支持这种需求的手机软件非常少&#xff0c;怎么办呢&#xff1f;用金鸣表格文字识别小程序&#xff0c;即可通过手机拍照&#xff0c;快速地实…

基于JavaSpringBoot+Vue+uniapp实现微信掌上图书小程序

最近开发了一个基于JavaSpringBootVueuniapp实现微信掌上图书小程序&#xff0c;系统非常的nice。 文章目录 1&#xff0c;系统技术简介1.1 Mysql数据库1.2SpringBoot框架 2&#xff0c;系统功能介绍2.1 系统前台功能2.2 系统后台管理2.3 流程图和结构功能图 3&#xff0c;系统…

HydroD 实用教程(八)频域水动力分析

目 录 一、前言二、前处理三、定义/提交作业3.1 创建分析作业3.2 定义分析工况3.3 配置分析选项3.4 设置输出文件3.5 提交求解计算 四、输出文件4.1 Hydrodynamic Results Interface File4.2 Loads Interface File4.3 Analysis Control Data File for Structural Analysis4.4 W…

导线舞动的防范措施

输电线路导线舞动在线监测装置 一、产品描述&#xff1a; 导线舞动幅度过大会导致铁塔等设施发生形变&#xff0c;严重的可能会发生铁塔坍塌&#xff0c;倒塔挂线&#xff0c;进而导致电力系统瘫痪&#xff0c;威胁到电力供应系统的稳定性&#xff0c;电力供应系统的稳定需要保…

SCSI介绍和SCSI命令承载于各类总线的方式

1. SCSI协议简介 小型计算机系统接口(SCSI&#xff0c;Small Computer System Interface&#xff09;是一种用于计算机及其周边设备之间&#xff08;硬盘、软驱、光驱、打印机、扫描仪等&#xff09;系统级接口的独立处理器标准。虽然名字里面带个接口&#xff0c;但实际上是一…

文本三剑客-Sed

sed工作原理 sed的特点&#xff1a; sed基本语法 模式空间中的编辑操作---地址定界 常用编辑命令 增添&#xff08;a&#xff09; 追加&#xff08;i&#xff09; 删除&#xff08;d&#xff09; 读入文件&#xff08;r&#xff09; 固定长度替换&#xff08;y&#xff0…

ChatGPT:你真的了解网络安全吗?浅谈网络安全攻击防御进行时之网络攻击新威胁

ChatGPT&#xff1a;你真的了解网络安全吗&#xff1f;浅谈网络安全攻击防御进行时 网络攻击新威胁1) 人工智能的应用2) 5G和物联网的崛起3) 云安全4) 社交工程的威胁 ChatGPT&#xff08;全名&#xff1a;Chat Generative Pre-trained Transformer&#xff09;&#xff0c;美国…

Netlogo学习笔记

第一行&#xff1a;国际惯例咕咕咕。 第二行&#xff1a;人工势场这个概念好神奇&#xff08;虽然我觉得就是强行捏了一个高大上的词 第三行&#xff1a;希望全天下的软件都能把要用的东西集成成库&#xff0c;然后只需要无脑点点就可以了&#xff08;我本人&#xff1a;又懒…

day14 HTTPServlet

HTTP协议 含义&#xff1a;是TCP、IP协议之上的应用层协议 作用&#xff1a;规定浏览器和服务器数据之间的交互格式 注意&#xff1a;该协议的端口为80&#xff0c;Tomcat是8080 http的特点 1.无状态&#xff0c;无记忆 2.“1.0”版本需要多次请求和响应&#xff0c;1.1一…

CentOS 7 离线安装MySQL

MySQL下载官网&#xff1a; https://downloads.mysql.com/archives/community/ 文章使用的MySQL版本下载地址&#xff1a; https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.41-linux-glibc2.12-x86_64.tar.gz 一、卸载旧的mysql 1、删除MySQL的安装文件 [rootwww ~]# …

软件设计师 计算机网络

名字带IP AP的都是网络层 所有带T的除了TFTP其他都是TCP&#xff0c;所有不带T的除了POP3其他都是UDP​ **物理层的互联设备有中继器和集线器&#xff0c;集线器是一种特殊的多路多端口中继器 网络层&#xff1a;路由器 物理层&#xff1a;中继器 数据链路层&#xff1a;网桥…