Java语言程序设计基础篇_编程练习题***17.9 (地址簿)

news2024/11/24 12:00:43

目录

题目:***17.9 (地址簿)

习题思路

代码示例 

结果展示


题目:***17.9 (地址簿)

   编写程序用于存储、返回、增加,以及更新如图 17-20 所示的地址薄。使用固定长度的字符串来存储地址中的每个属性。使用随机访问文件来读取和写人一个地址。假设姓名、街道、城市、州以及邮政编码的长度分别是32、32、20、2、5字节

  • 习题思路

1 .按照图片上的布局创建出一个面板 

        1.1 创建五个TextField和五个Label,定义时设置为私有变量。

        1.2 将前两个标签和输入框绑定,为后三个单独创建一个HBox。

        1.3 创建六个按钮,放置在单独的HBox中。

        1.4 最后创建一个VBox,将节点和面板放置。

2. 为六个按钮分别定义一个方法

        2.1 Add方法:读取当前输入框中的字符串并添加到一个ArrayList中。

        2.2 First方法: 读取ArrayList中的第一个字符串,分割后分别设置在输入框中。

        2.3 Next方法:读取ArrayList中当前元素数的下一个字符串,分割后分别设置在输入框中。

        2.4 Previous方法:读取ArrayList中当前元素的上一个字符串,分割后分别设置在输入框中。

        2.5 Last方法:获取ArrayList的长度,将ArrayList的最后一个元素分割后设置在输入框中。

        2.6 Update方法:将ArrayList当前元素数中的元素重新设置为输入框中的值。

3. 为了简化2中的方法,可以定义一个分割方法和一个设置输入框文本的方法。

 

  • 代码示例 

 编程练习题17_9Address.java

package chapter_17;


import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.List;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ContentDisplay;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class 编程练习题17_9Address extends Application{
	private int currentNum = 0;
	private final int NAME_SIZE = 32;
	private final int STREET_SIZE = 32;
	private final int CITY_SIZE = 20;
	private final int STATE_SIZE = 2;
	private final int ZIP_SIZE = 5;
	private final int TOTAL = 91;
	private ArrayList<String> addresses = new ArrayList<String>();
	
	private TextField tfName;
	private TextField tfStreet;
	private TextField tfCity;
	private TextField tfState;
	private TextField tfZip;
	
	@Override
	public void start(Stage primaryStage) throws Exception {
		File file = new File("src/Text/Exereise17_09Address.txt");
		VBox vBox = facePlate();
		vBox.setPadding(new Insets(10, 10, 10, 10));
		vBox.setAlignment(Pos.CENTER_LEFT);
		
		Scene scene = new Scene(vBox,380, 150);
		primaryStage.setTitle("编程练习题17_9Address");
		primaryStage.setScene(scene);
		primaryStage.setOnCloseRequest(event ->{
			System.out.println("Save");
			try {
				save(file);
			}catch(IOException e) {
				 e.printStackTrace();
			}
		});
		primaryStage.setOnShowing(event -> {
            if (addresses.size() > 0) {
                setCurrentAddress(addresses.get(0));
            }
        });
		primaryStage.show();
	}
	private VBox facePlate(){
		VBox vBox = new VBox(7);
	
		
		tfName = new TextField();
		tfName.setPrefWidth(320);
		Label lbName = new Label("Name",tfName);
		lbName.setContentDisplay(ContentDisplay.RIGHT);
		
		tfStreet = new TextField();
		tfStreet.setPrefWidth(320);
		Label lbStreet = new Label("Street",tfStreet);
		lbStreet.setContentDisplay(ContentDisplay.RIGHT);
		
		HBox hBox = new HBox(3);
		hBox.setAlignment(Pos.CENTER_LEFT);
		tfCity = new TextField();
		Label lbCity = new Label("City",tfCity);
		lbCity.setContentDisplay(ContentDisplay.RIGHT);
		
		tfState = new TextField();
		tfState.setPrefWidth(40);
		Label lbState = new Label("State",tfState);
		lbState.setContentDisplay(ContentDisplay.RIGHT);
		
		tfZip = new TextField();
		tfZip.setPrefWidth(50);
		Label lbZip = new Label("Zip",tfZip);
		lbZip.setContentDisplay(ContentDisplay.RIGHT);
		
		hBox.getChildren().addAll(lbCity,lbState,lbZip);
		
		HBox hBox2 = new HBox(5);
		Button btAdd = new Button("Add");
		btAdd.setOnAction(e -> add());
		Button btFirst = new Button("First");
		btFirst.setOnAction(e -> first());
		Button btNext = new Button("Next");
		btNext.setOnAction(e -> next());
		Button btPrevious = new Button("Previous");
		btPrevious.setOnAction(e -> previous());
		Button btLast = new Button("Last");
		btLast.setOnAction(e -> last());
		Button btUpdate = new Button("Update");
		btUpdate.setOnAction(e -> Update());
		hBox2.getChildren().addAll(btAdd, btFirst, btNext,btPrevious,btLast,btUpdate);
		
		vBox.getChildren().addAll(lbName,lbStreet,hBox,hBox2);
		
		return vBox;
	}
	private void add() {
		String str = getAddressString();
		System.out.println(str);
		addresses.add(str);
		currentNum++;
	}
	private void first() {
		if(addresses.size() > 0) {
			currentNum=0;
			setCurrentAddress(addresses.get(currentNum));
		}else {
			
		}
	}
	private void next() {
		if(currentNum < addresses.size()-1) {
			++currentNum;
			setCurrentAddress(addresses.get(currentNum));
		}else {
			
		}
			
	}
	private void previous() {
		if(currentNum > 0) {
			--currentNum;
			setCurrentAddress(addresses.get(currentNum));
		}
	}
	private void last() {
		if(addresses.size()!=0) {
			currentNum = addresses.size()-1;
			setCurrentAddress(addresses.get(currentNum));
		}
	}
	private void Update() {
		addresses.set(currentNum, getAddressString());
	}
	private void setCurrentAddress(String str) {
		tfName.setText(str.substring(0, 32));
		tfStreet.setText(str.substring(32, 64));
		tfCity.setText(str.substring(64, 84));
		tfState.setText(str.substring(84, 86));
		tfZip.setText(str.substring(86, 91));
	}
	protected void save(File file)throws IOException {
		if(!file.exists()) {
			System.out.println("file is not create");
		}
		try {
			RandomAccessFile raf = new RandomAccessFile(file, "rw");
			for(String address:addresses) {
				raf.writeUTF(address);
			}
			raf.close();
		}catch (IOException e) {
			e.printStackTrace();
		}
	}
	private String getAddressString() {
		String address = "";
		
		String name = tfName.getText();
		for(int i = name.length();i < NAME_SIZE;i++) {
			name += " ";
		}
		address += name;
		
		String street = tfStreet.getText();
		for(int i = street.length();i < STREET_SIZE;i++) {
			street += " ";
		}
		address += street;
		String city = tfCity.getText();
		for(int i = city.length();i < CITY_SIZE;i++) {
			city += " ";
		}
		address += city;
		String state = tfState.getText();
		for(int i = state.length();i < STATE_SIZE;i++) {
			state += " ";
		}
		address += state;
		String zip = tfState.getText();
		for(int i = zip.length();i < ZIP_SIZE;i++) {
			zip += " ";
		}
		address += zip;
		
		return address;
	}
	public static void main(String[] args) {
		Application.launch(args);
	}
	
}
  • 结果展示

aaa                             aa                              a                   a a    
bbb                             bb                              b                   b b    
ccc                             cc                              c                   c c    
ddd                             dd                              d                   d d    
Save

 

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

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

相关文章

刚刚认证!网络主播成为国家新职业,易播易赚打造打造职业入门全新模式

近期&#xff0c;人力资源和社会保障部会同国家市场监督管理总局、国家统计局日前增设网络主播为国家新职业&#xff0c;这标志着网络主播的职业身份在“国家确定职业分类”上首次得以确立。 据人社部此前印发的《关于加强新职业培训工作的通知》表示&#xff0c;新职业从业者可…

代码随想录算法训练营第二十三天| 39. 组合总和 40.组合总和II 131.分割回文串

目录 一、LeetCode 39. 组合总和思路&#xff1a;C代码 二、LeetCode 40.组合总和II思路C代码 三、LeetCode 131.分割回文串思路C代码 总结 一、LeetCode 39. 组合总和 题目链接&#xff1a;LeetCode 39. 组合总和 文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;带你学…

直播平台直播API集成之快手篇

前言: 本篇我们来介绍如何使用快手 的直播API创建直播。 准备工作: 1、你首先得有个快手账号; 2、创建快手应用,填写应用审核信息,等待应用创建审核通过,应用成功创建后在开发与上线前还要提前做好API权限申请,如果你只需要获取用户基本信息,以及得到直播API的访问权限…

Python | Leetcode Python题解之第377题组合总和IV

题目&#xff1a; 题解&#xff1a; class Solution:def combinationSum4(self, nums: List[int], target: int) -> int:dp [1] [0] * targetfor i in range(1, target 1):for num in nums:if num < i:dp[i] dp[i - num]return dp[target]

合宙LuatOS产品规格书——Air700EMQ

Air700EMQ是合宙通信的LTE Cat.1bis通信模块&#xff0c; 依托移芯EC716E平台&#xff0c;支持先进的LTE 3GPP Rel.13技术。 主要特点如下&#xff1a; 1. 技术平台与标准支持&#xff1a; Air700EMQ采用移芯EC716E平台&#xff0c;基于先进的LTE技术。支持LTE 3GPP Releas…

leetcode234. 回文链表(java实现)

题目描述&#xff1a; 本道题的思路可以使用集合先存储链表的值&#xff0c;然后进行判断即可。 总体思路比较简单。 代码实现&#xff1a; class Solution {public boolean isPalindrome(ListNode head) {List<Integer> res new ArrayList();ListNode cur head;whil…

3分钟快速本地搭建RSShub服务器并结合内网穿透实现无公网IP远程访问

文章目录 前言1. Docker 安装2. Docker 部署Rsshub3. 本地访问Rsshub4. Linux安装Cpolar5. 配置公网地址6. 远程访问Rsshub7. 固定Cpolar公网地址8. 固定地址访问 前言 今天和大家分享的是如何在本地快速简单部署Rsshub工具&#xff0c;并结合cpolar内网穿透工具使用公网地址远…

Remote Sensing(MDPI)期刊投稿历程(CV方向)

一、期刊简介 期刊官网&#xff1a;https://www.mdpi.com/journal/remotesensing 影响因子&#xff08;2024&#xff09;&#xff1a;4.2 分区&#xff1a;JCR:Q1。中科院二区 版面费&#xff1a;2700瑞士法郎&#xff08;约21000rmb&#xff09; 二、投稿时间线 2024.06.20…

科研绘图系列:R语言对角线矩阵图(corrplot plot)

介绍 对角线矩阵图(Diagonal Matrix Plot)是一种特殊类型的图表,用于可视化对角线矩阵中的元素。对角线矩阵是一种方阵,其中非对角线上的元素都是零,而对角线上的元素可以是任意值。这种矩阵在数学和计算机科学中非常有用,尤其是在线性代数、特征值问题和对角化等操作中…

C语言中的野指针

野指针是指指针指向的位置是随机的&#xff0c;不明确的&#xff0c;未知的&#xff0c;没有限制的。 野指针的成因 指针未初始化 如上图&#xff0c;指针没有初始化&#xff0c;则指针指向的地址是随机的&#xff0c;若该地址已经被其他程序占用&#xff0c;且对指针进行解引…

C++入门基础(内容太干,噎住了)

文章目录 1.缺省参数 2.函数重载 2.1重载条件&#xff1a; 1.参数类型不同 2.参数个数不同 3.参数类型顺序不同 2.2不做重载条件情况&#xff1a; 1.返回值相同时 2.当全缺省遇见无参数 3.引用 3.1引用特性&#xff1a; 3.2引用的使用 1.缺省参数 1.缺省参数是声明…

中庸就是五五开,各打五十大板吗

中庸指的是&#xff0c;人生行事应该把握一个度&#xff0c;既不过分&#xff0c;也无不及&#xff0c;以中为贵&#xff0c;以和为美。 中庸关键在于“中”&#xff0c;要求适中适度、恰如其分。 《论语•先进》中提到&#xff0c;有一次&#xff0c;子路问孔子&#xff0c;…

Springboot中使用Elasticsearch(部署+使用+讲解 最完整)

Elasticsearch&#xff1a;用于数据存储、计算和搜索 Mysql&#xff1a;擅长事务类型操作&#xff0c;可以确保数据的安全和一致性 Elasticsearch&#xff1a;擅长海量数据的搜索、分析、计算 基于这个特点我打算改造用户方面的功能&#xff0c;基于用户量比较多&#xff0c;…

电影《名侦探柯南:百万美元的五棱星》 观后感

上周看了电影《名侦探柯南&#xff1a;百万美元的五棱星》,个人觉得这可能是相对于柯南系列的重度粉丝来说是相当不错的&#xff0c;对于自己这个外行的人来说&#xff0c;可能有些故事背景并不了解&#xff0c;以及里边出场的人物并不熟悉&#xff0c;整体看下来觉得算是中规中…

复习Vue笔记

笔记来源于黑马程序员相关上课笔记 基于脚手架创建前端工程 环境要求 node.js&#xff1a;前端项目的运行环境&#xff08;相当于Java的运行环境JDK&#xff09; npm&#xff1a;JS的包管理工具/器 npm腾讯镜像&#xff1a;npm config set registry http://mirrors.cloud.te…

BaseCTF-Misc-Week2-WP

目录 1、二维码1-街头小广告 2、反方向的雪 3、黑丝上的flag 4、海上又遇了鲨鱼 5、Base?! 6、ez_crypto 7、前辈什么的最喜欢了 8、哇&#xff01;珍德食泥鸭 9、Aura 酱的旅行日记 I 10、Aura 酱的旅行日记 II 11、Aura 酱的旅行日记 III 12、Aura 酱的旅行日…

Docker镜像制作(使用GPU)

由于最近参加天池的大模型比赛&#xff0c;在复赛阶段需要制作并提交Docker进行模型的推理&#xff0c;因此在这里记录一下Docker制作的过程。 准备 featurize阿里云账号 由于需要使用GPU资源&#xff0c;因此选择了预装Docker的featurize服务器。 开通阿里云容器镜像服务 …

74HC595的用法与原理

DS/LDSI&#xff08;SER&#xff09;&#xff0c;串行数据输入引脚 OE/LEDN&#xff0c;输出使能控制脚&#xff0c;它是低电才使能输出&#xff0c;所以接GND RCK/LDSTR&#xff08;STCP&#xff09;&#xff0c;存储寄存器时钟输入引脚。上升沿时&#xff0c;数据从移位寄存器…

万万没想到!秋季里的这些水果,对帕金森治疗大有裨益!——蔡英丽医生

随着秋风轻拂&#xff0c;大地披上了一袭金黄色的外衣&#xff0c;这不仅是收获的季节&#xff0c;更是自然对人类健康的又一次慷慨馈赠。对于帕金森病患者而言&#xff0c;这个秋季尤为特别&#xff0c;因为大自然悄然间准备了五种神奇的秋季水果&#xff0c;它们不仅是味蕾的…

命令模式详解

命令模式 简介:命令模式将一个请求封装为一个对象&#xff0c;从而使你可以用不同的请求对客户进行参数化&#xff0c;对请求排队或记录请求日志&#xff0c;以及支持可撤销的操作。 人话: 总体来说, 就是一个命令类, 一个执行类, 命令类包括执行类, 然后在外部添加一个总的管…