用双向链表作数据结构,用java语言编写一个通讯录管理系统,本系统应完成一下几方面的功能: 1)输入信息——enter(); 2)显示信息———display( ); 3)查找以姓名作为关键字 ———search( ); 4)删除信息———delete( ); 5)存盘———save ( ); 6)装入———load( ) ; 设计要求: 1)每条信息至包含 :姓名(NAME )街道(STREET)城市(CITY)邮编(EIP)国家(STATE)几项 2)作为一个完整的系统,应具有友好的界面和较强的容错能力,上机能正常运行 3)具有可视化界面

时间: 2023-10-24 22:07:54 浏览: 36
好的,我已经记录下来了你的问题。对于你的问题,我可以给出以下回答: 实现双向链表可以使用Java的LinkedList类,该类实现了List接口,同时也是一个双向链表。通讯录管理系统的实现可以借助该类来完成。 下面是一个简单的通讯录管理系统的代码示例: ``` import java.io.*; import java.util.*; class Contact { String name; String street; String city; int zip; String state; } class ContactList { LinkedList<Contact> contacts = new LinkedList<Contact>(); public void enter() { Contact contact = new Contact(); Scanner scanner = new Scanner(System.in); System.out.print("Enter name: "); contact.name = scanner.nextLine(); System.out.print("Enter street: "); contact.street = scanner.nextLine(); System.out.print("Enter city: "); contact.city = scanner.nextLine(); System.out.print("Enter zip: "); contact.zip = scanner.nextInt(); scanner.nextLine(); System.out.print("Enter state: "); contact.state = scanner.nextLine(); contacts.add(contact); } public void display() { for (Contact contact : contacts) { System.out.println("Name: " + contact.name); System.out.println("Street: " + contact.street); System.out.println("City: " + contact.city); System.out.println("Zip: " + contact.zip); System.out.println("State: " + contact.state); } } public void search(String name) { boolean found = false; for (Contact contact : contacts) { if (contact.name.equals(name)) { System.out.println("Name: " + contact.name); System.out.println("Street: " + contact.street); System.out.println("City: " + contact.city); System.out.println("Zip: " + contact.zip); System.out.println("State: " + contact.state); found = true; break; } } if (!found) { System.out.println("Contact not found."); } } public void delete(String name) { Iterator<Contact> iterator = contacts.iterator(); while (iterator.hasNext()) { Contact contact = iterator.next(); if (contact.name.equals(name)) { iterator.remove(); System.out.println("Contact deleted."); return; } } System.out.println("Contact not found."); } public void save() { try { ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("contacts.dat")); outputStream.writeObject(contacts); outputStream.close(); System.out.println("Contacts saved."); } catch (IOException e) { System.out.println("Error saving contacts."); } } public void load() { try { ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("contacts.dat")); contacts = (LinkedList<Contact>)inputStream.readObject(); inputStream.close(); System.out.println("Contacts loaded."); } catch (IOException e) { System.out.println("Error loading contacts."); } catch (ClassNotFoundException e) { System.out.println("Error loading contacts."); } } } public class ContactManager { public static void main(String[] args) { ContactList contactList = new ContactList(); Scanner scanner = new Scanner(System.in); while (true) { System.out.println("1. Enter contact"); System.out.println("2. Display contacts"); System.out.println("3. Search contacts"); System.out.println("4. Delete contact"); System.out.println("5. Save contacts"); System.out.println("6. Load contacts"); System.out.println("7. Exit"); System.out.print("Enter choice: "); int choice = scanner.nextInt(); scanner.nextLine(); switch (choice) { case 1: contactList.enter(); break; case 2: contactList.display(); break; case 3: System.out.print("Enter name to search: "); String name = scanner.nextLine(); contactList.search(name); break; case 4: System.out.print("Enter name to delete: "); name = scanner.nextLine(); contactList.delete(name); break; case 5: contactList.save(); break; case 6: contactList.load(); break; case 7: System.exit(0); break; default: System.out.println("Invalid choice."); break; } } } } ``` 该代码示例使用了一个Contact类来表示每个联系人,该类中包含了姓名、街道、城市、邮编和国家等信息。ContactList类则是一个管理联系人的类,它使用LinkedList来存储联系人列表,并提供了enter()、display()、search()、delete()、save()和load()等方法来进行联系人的添加、显示、查找、删除、存储和加载等操作。最后,ContactManager类是一个简单的控制台程序,它通过一个循环来接受用户的输入,并调用ContactList类的相应方法来完成操作。

相关推荐

最新推荐

recommend-type

C++双向链表实现简单通讯录

主要为大家详细介绍了C++双向链表实现简单通讯录,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

数据结构实验报告之一元多项式求和(链表)报告2.doc

把任意给定的两个一元多项式P(x) ,Q(x) 输入计算机,计算它们的和并输出计算结果。 实验内容: 1.问题描述: 一元多项式求和——把任意给定的两个一元多项式P(x) ,Q(x) 输入计算机,计算它们的和并输出计算结果。
recommend-type

java数据结构与算法.pdf

包含了各种数据结构和算法(java)的实现方式和详解(图解),包括单双链表、环形链表(约瑟夫问题)、栈、后缀表达式、中缀表达式转后缀表达式、迷宫问题、八大排序算法、多种查找算法、哈希表、二叉树实现以及操作...
recommend-type

数据结构课程设计实验一:通讯录管理系统

一. 简介: 线形表是数据结构中最简单、最常用的一种线性结构,也 是学习数据结构全部内容的...本实验的任务是使用有关链表的操作来实现通讯录信息系统的管理。 因此,本实验的任务:实现循环和功能选择。 …………
recommend-type

C语言实现食堂就餐管理系统(带链表)

主要为大家详细介绍了C语言实现食堂就餐管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
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

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SPDK_NVMF_DISCOVERY_NQN是什么 有什么作用

SPDK_NVMF_DISCOVERY_NQN 是 SPDK (Storage Performance Development Kit) 中用于查询 NVMf (Non-Volatile Memory express over Fabrics) 存储设备名称的协议。NVMf 是一种基于网络的存储协议,可用于连接远程非易失性内存存储器。 SPDK_NVMF_DISCOVERY_NQN 的作用是让存储应用程序能够通过 SPDK 查询 NVMf 存储设备的名称,以便能够访问这些存储设备。通过查询 NVMf 存储设备名称,存储应用程序可以获取必要的信息,例如存储设备的IP地址、端口号、名称等,以便能
recommend-type

JSBSim Reference Manual

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