用java来实现利用文件构建用户电话号码本。(需实现增、删、查(按指定属性排序并查询)、改、显示的功能)。 1. “添加”功能(addEntry):接收用户的输入,将新的记录添加到文件中 2. “删除”功能(removeEntry):接收用户输入的姓名或电话号码,搜索文件中相应的记录并将其删除。 3. “查询”功能(sortedSearch):接收用户输入的排序方式和查询关键词,对文件中的记录按照指定属性进行排序并进行查询。 4. “修改”功能(updateEntry):接收用户输入的姓名或电话号码,搜索文件中相应的记录并将其更新为新输入的信息。 5. “显示”功能(displayEntries):从文件中读取并展示所有已存储的记录。

时间: 2024-02-01 16:14:25 浏览: 26
好的,以下是一个可能的实现: ```java import java.io.*; import java.util.*; public class Phonebook { private static final String FILENAME = "phonebook.txt"; private static final String DELIMITER = ","; private static final int NAME_INDEX = 0; private static final int PHONE_INDEX = 1; public static void main(String[] args) { Scanner sc = new Scanner(System.in); boolean exit = false; while (!exit) { 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. 退出"); int choice = sc.nextInt(); switch (choice) { case 1: addEntry(); break; case 2: removeEntry(); break; case 3: sortedSearch(); break; case 4: updateEntry(); break; case 5: displayEntries(); break; case 6: exit = true; break; default: System.out.println("无效的选择,请重新输入。"); } } } private static void addEntry() { Scanner sc = new Scanner(System.in); System.out.print("请输入姓名:"); String name = sc.nextLine(); System.out.print("请输入电话号码:"); String phone = sc.nextLine(); try (FileWriter fw = new FileWriter(FILENAME, true); PrintWriter pw = new PrintWriter(fw)) { pw.println(name + DELIMITER + phone); System.out.println("已添加联系人:" + name + ",电话号码:" + phone); } catch (IOException e) { System.out.println("添加联系人失败:" + e.getMessage()); } } private static void removeEntry() { Scanner sc = new Scanner(System.in); System.out.print("请输入要删除的联系人的姓名或电话号码:"); String search = sc.nextLine(); List<String> entries = new ArrayList<>(); try (Scanner fileSc = new Scanner(new File(FILENAME))) { while (fileSc.hasNextLine()) { String line = fileSc.nextLine(); String[] parts = line.split(DELIMITER); if (!parts[NAME_INDEX].equals(search) && !parts[PHONE_INDEX].equals(search)) { entries.add(line); } } } catch (IOException e) { System.out.println("读取联系人失败:" + e.getMessage()); return; } try (FileWriter fw = new FileWriter(FILENAME); PrintWriter pw = new PrintWriter(fw)) { for (String entry : entries) { pw.println(entry); } System.out.println("已删除联系人:" + search); } catch (IOException e) { System.out.println("删除联系人失败:" + e.getMessage()); } } private static void sortedSearch() { Scanner sc = new Scanner(System.in); System.out.print("请输入排序方式(name或phone):"); String sort = sc.nextLine(); System.out.print("请输入要查询的关键词:"); String search = sc.nextLine(); List<String> entries = new ArrayList<>(); try (Scanner fileSc = new Scanner(new File(FILENAME))) { while (fileSc.hasNextLine()) { entries.add(fileSc.nextLine()); } } catch (IOException e) { System.out.println("读取联系人失败:" + e.getMessage()); return; } Comparator<String> comparator = sort.equals("name") ? Comparator.comparing((String entry) -> entry.split(DELIMITER)[NAME_INDEX]) : Comparator.comparing((String entry) -> entry.split(DELIMITER)[PHONE_INDEX]); entries.sort(comparator); boolean found = false; for (String entry : entries) { String[] parts = entry.split(DELIMITER); if (parts[NAME_INDEX].contains(search) || parts[PHONE_INDEX].contains(search)) { System.out.println(parts[NAME_INDEX] + ",电话号码:" + parts[PHONE_INDEX]); found = true; } } if (!found) { System.out.println("未找到符合条件的联系人。"); } } private static void updateEntry() { Scanner sc = new Scanner(System.in); System.out.print("请输入要修改的联系人的姓名或电话号码:"); String search = sc.nextLine(); List<String> entries = new ArrayList<>(); try (Scanner fileSc = new Scanner(new File(FILENAME))) { while (fileSc.hasNextLine()) { String line = fileSc.nextLine(); String[] parts = line.split(DELIMITER); if (!parts[NAME_INDEX].equals(search) && !parts[PHONE_INDEX].equals(search)) { entries.add(line); } else { System.out.print("请输入新的姓名(留空表示不修改):"); String newName = sc.nextLine(); System.out.print("请输入新的电话号码(留空表示不修改):"); String newPhone = sc.nextLine(); if (newName.isEmpty()) { newName = parts[NAME_INDEX]; } if (newPhone.isEmpty()) { newPhone = parts[PHONE_INDEX]; } entries.add(newName + DELIMITER + newPhone); System.out.println("已更新联系人:" + search + " -> " + newName + ",电话号码:" + newPhone); } } } catch (IOException e) { System.out.println("读取联系人失败:" + e.getMessage()); return; } try (FileWriter fw = new FileWriter(FILENAME); PrintWriter pw = new PrintWriter(fw)) { for (String entry : entries) { pw.println(entry); } } catch (IOException e) { System.out.println("更新联系人失败:" + e.getMessage()); } } private static void displayEntries() { try (Scanner fileSc = new Scanner(new File(FILENAME))) { boolean found = false; while (fileSc.hasNextLine()) { String[] parts = fileSc.nextLine().split(DELIMITER); System.out.println(parts[NAME_INDEX] + ",电话号码:" + parts[PHONE_INDEX]); found = true; } if (!found) { System.out.println("电话号码本为空。"); } } catch (IOException e) { System.out.println("读取联系人失败:" + e.getMessage()); } } } ``` 其中,我们假设电话号码本的文件名为`phonebook.txt`,每条记录以逗号分隔姓名和电话号码。在实现上,我们使用了以下方法: - `addEntry()`:接收用户输入并将新记录添加到文件末尾。 - `removeEntry()`:接收用户输入的搜索关键词,读取文件中的所有记录,将匹配的记录从列表中删除,再将剩下的记录写回文件中。 - `sortedSearch()`:接收用户输入的排序方式和搜索关键词,读取文件中的所有记录,根据排序方式排序,然后输出所有匹配的记录。 - `updateEntry()`:接收用户输入的搜索关键词,读取文件中的所有记录,将匹配的记录更新为新的信息,然后将所有记录写回文件中。 - `displayEntries()`:读取文件中的所有记录并输出。 在程序运行时,我们使用一个`while`循环不断接收用户的选择,根据选择调用相应的方法。每个方法中,我们使用`try-with-resources`语句来自动释放文件资源,避免忘记关闭文件。

相关推荐

最新推荐

recommend-type

Java编程通过list接口实现数据的增删改查代码示例

是介绍Java编程基础方面的内容,涉及list接口的操作,通过list接口实现对数据的增删改查的相关代码,具有一定参考价值,需要的朋友可以了解下。
recommend-type

AJAX实现数据的增删改查操作详解【java后台】

主要介绍了AJAX实现数据的增删改查操作,结合实例形式详细分析了ajax结合java后台实现数据库增删改查相关操作技巧,需要的朋友可以参考下
recommend-type

Java中SSM框架实现增删改查功能代码详解

主要介绍了Java中SSM框架实现增删改查功能代码详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

java连接mongoDB并进行增删改查操作实例详解

主要介绍了java连接mongoDB并进行增删改查操作,结合实例形式详细分析了java环境下MongoDB扩展包的下载、安装及操作MongoDB连接、增删改查等相关操作技巧,需要的朋友可以参考下
recommend-type

JAVA使用ElasticSearch查询in和not in的实现方式

今天小编就为大家分享一篇关于JAVA使用Elasticsearch查询in和not in的实现方式,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

用Spring boot和vue写一个登录注册界面

好的,这是一个比较常见的技术问题,我可以为您提供一些参考资料和思路。首先,您可以使用Spring Boot作为后端框架来处理用户认证和注册的逻辑,比如使用Spring Security实现用户登录认证。同时,您还需要设计相应的数据模型和数据库表结构来存储用户信息。在前端方面,您可以使用Vue.js作为框架来构建登录注册页面,使用Axios来发起API请求并和后端进行交互。当然,在实现过程中,还需要考虑一些具体细节,比如数据校验、安全性和用户体验等方面。希望这些信息能够帮助到您。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。