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

时间: 2023-10-22 15:07:58 浏览: 54
以下是一个使用双向链表作为数据结构的通讯录管理系统的 Java 代码,包括输入信息、显示信息、查找、删除、存盘和装入等功能: ```java import java.io.*; import java.util.Scanner; class Contact { String name; String street; String city; String zip; String state; Contact prev; Contact next; public Contact(String name, String street, String city, String zip, String state) { this.name = name; this.street = street; this.city = city; this.zip = zip; this.state = state; prev = null; next = null; } public void display() { System.out.println("Name: " + name); System.out.println("Street: " + street); System.out.println("City: " + city); System.out.println("Zip: " + zip); System.out.println("State: " + state); } } class ContactList { Contact head; Contact tail; public ContactList() { head = null; tail = null; } public void enter() { Scanner sc = new Scanner(System.in); System.out.print("Enter name: "); String name = sc.nextLine(); System.out.print("Enter street: "); String street = sc.nextLine(); System.out.print("Enter city: "); String city = sc.nextLine(); System.out.print("Enter zip: "); String zip = sc.nextLine(); System.out.print("Enter state: "); String state = sc.nextLine(); Contact newContact = new Contact(name, street, city, zip, state); if (head == null) { head = newContact; tail = newContact; } else { tail.next = newContact; newContact.prev = tail; tail = newContact; } } public void display() { Contact current = head; while (current != null) { current.display(); current = current.next; } } public void search() { Scanner sc = new Scanner(System.in); System.out.print("Enter name to search: "); String name = sc.nextLine(); Contact current = head; boolean found = false; while (current != null) { if (current.name.equalsIgnoreCase(name)) { current.display(); found = true; } current = current.next; } if (!found) { System.out.println("No contact found with name " + name); } } public void delete() { Scanner sc = new Scanner(System.in); System.out.print("Enter name to delete: "); String name = sc.nextLine(); Contact current = head; boolean found = false; while (current != null) { if (current.name.equalsIgnoreCase(name)) { found = true; if (current == head) { head = current.next; if (head != null) { head.prev = null; } } else if (current == tail) { tail = current.prev; if (tail != null) { tail.next = null; } } else { current.prev.next = current.next; current.next.prev = current.prev; } System.out.println("Contact deleted."); break; } current = current.next; } if (!found) { System.out.println("No contact found with name " + name); } } public void save() { try { FileOutputStream fos = new FileOutputStream("contacts.dat"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(head); oos.close(); fos.close(); System.out.println("Contacts saved to file."); } catch (IOException e) { e.printStackTrace(); } } public void load() { try { FileInputStream fis = new FileInputStream("contacts.dat"); ObjectInputStream ois = new ObjectInputStream(fis); head = (Contact) ois.readObject(); ois.close(); fis.close(); System.out.println("Contacts loaded from file."); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } } public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); ContactList list = new ContactList(); while (true) { System.out.println("1. Enter contact"); System.out.println("2. Display contacts"); System.out.println("3. Search contact"); System.out.println("4. Delete contact"); System.out.println("5. Save contacts to file"); System.out.println("6. Load contacts from file"); System.out.println("0. Exit"); System.out.print("Enter your choice: "); int choice = sc.nextInt(); sc.nextLine(); // consume newline switch (choice) { case 1: list.enter(); break; case 2: list.display(); break; case 3: list.search(); break; case 4: list.delete(); break; case 5: list.save(); break; case 6: list.load(); break; case 0: System.exit(0); break; default: System.out.println("Invalid choice."); } } } } ``` 在这个实现中,`Contact` 类表示一个联系人,包含姓名、街道、城市、邮编和国家等信息,以及前后指针。`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

云原生架构与soa架构区别?

云原生架构和SOA架构是两种不同的架构模式,主要有以下区别: 1. 设计理念不同: 云原生架构的设计理念是“设计为云”,注重应用程序的可移植性、可伸缩性、弹性和高可用性等特点。而SOA架构的设计理念是“面向服务”,注重实现业务逻辑的解耦和复用,提高系统的灵活性和可维护性。 2. 技术实现不同: 云原生架构的实现技术包括Docker、Kubernetes、Service Mesh等,注重容器化、自动化、微服务等技术。而SOA架构的实现技术包括Web Services、消息队列等,注重服务化、异步通信等技术。 3. 应用场景不同: 云原生架构适用于云计算环境下的应用场景,如容器化部署、微服务
recommend-type

JSBSim Reference Manual

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