透過資料結構實現簡易通訊錄
AddressBookTest 是測試類
package MyADB;import java.util.InputMismatchException;
import java.util.Scanner;class InstructionsMistake extends Exception {
public InstructionsMistake(String mo) {
super(mo);
public class AddressBookTest {
public static void main(String[] args) throws InstructionsMistake{
MyAddressBook AdB = new MyAddressBook();
Scanner rb = new Scanner(System.in);
String name = new String();
String cell = new String();
boolean isNum = false;
int co = 0;
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. 退出通訊錄程式 ");
do {
System.out.print("\n******** 請輸入你所要操作的程式碼 :");
try {
co = rb.nextInt();
} catch (InputMismatchException e) {
throw new InstructionsMistake(" 輸入的操作程式碼有誤 ");
}
if (co == 1) {
System.out.print(" 請輸入新的聯絡人姓名 :");
name = rb.next();
System.out.print(" 請輸入新的聯絡人手機號碼 :");
cell = rb.next();
// 運用正規表示式對手機號碼的輸入進行規範
isNum = cell.matches("^1[3|5|7|8]\\d{9}$");
while (!isNum) {
System.out.print(" 輸入的手機號碼有誤,請重新輸入 :");
cell = rb.next();
isNum = cell.matches("^1[3|5|7|8]\\d{9}$");
}
AdB.addAdB(name, cell);
System.out.println(" 聯絡人 " + name + " 成功錄入 ");
} else if (co == 2) {
System.out.print(" 請輸入所查詢的聯絡人姓名 :");
name = rb.next();
String str = AdB.searchAdB(name);
if (str == null) {
System.out.println(" 找不到 " + name + " 聯絡人 ");
} else {
System.out.println(" 查詢成功 ");
System.out.println(" 該聯絡人的手機號碼為 :" + str);
}
} else if (co == 3) {
System.out.print(" 請輸入要更改的聯絡人姓名 :");
name = rb.next();
String str = AdB.searchAdB(name);
if (str == null) {
System.out.println(" 找不到 " + name + " 聯絡人 ");
} else {
System.out.println("1/ 更改聯絡人的姓名 ");
System.out.println("2/ 更改聯絡人的手機號碼 ");
System.out.print(" 請輸入操作程式碼 :");
int cot = rb.nextInt();
if (cot == 1) {
System.out.print(" 請輸入該聯絡人的新姓名 :");
String toName = rb.next();
toName = AdB.ChangeAdBName(name,toName);
System.out.println(" 該聯絡人姓名成功更改為 :" + toName);
} else if (cot == 2) {
System.out.print(" 請輸入該聯絡人的新手機號碼 :");
String toCell = rb.next();
isNum = toCell.matches("^1[3|5|7|8]\\d{9}$");
while (!isNum) {
System.out.print(" 輸入的手機號碼有誤,請重新輸入 :");
toCell = rb.next();
isNum = toCell.matches("^1[3|5|7|8]\\d{9}$");
}
toCell = AdB.ChangeAdBCell(name,toCell);
System.out.println(" 該聯絡人手機號碼成功更改為 :" + toCell)
} else if (co == 4) {
System.out.print(" 輸入要刪除的聯絡人姓名 :");
name = rb.next();
AdB.deleteAdB(name);
} else if (co == 5) {
System.out.println(AdB);
} else if (co == 6){
break;
}
} while (co != 6);
System.out.println("******** 成功退出通訊錄程式 ********");
MyAddressBook 類
package MyADB;
// 雙向
public class MyAddressBook {// 通訊錄
protected Node first;// 第一個聯絡人 ( 通訊錄的管理工具 )
protected Node last;// 最後一個聯絡人
protected int size = 0;// 聯絡人的個數
// 通訊錄中的單個聯絡人
protected class Node {// 聯絡人 ( 內部類 )
Node prev;// 上一個聯絡人
Node next;// 下一個聯絡人
public String name;// 姓名
public String cell;// 手機號碼
public Node(String name, String call) {
this.name = name;
this.cell = call;
// 尾插法
public void addAdB(String name, String call) {
Node node = new Node(name, call);// 新建一個聯絡人
if (size == 0) {
this.first = node;
this.last = node;
} else {
// 把新增聯絡人作為之前最後的聯絡人的下一個
this.last.next = node;
// 把最後一個聯絡人作為新增聯絡人的上一個聯絡人
node.prev = this.last;
// 把新增聯絡人作為通訊錄的最後一個
this.last = node;
}size++;
}// 查詢聯絡人
public String searchAdB(String name) {
if (size == 0) {
System.out.println(" 通訊錄為空 ");
return null;
}Node current = this.first;
for (int i = 0; i < size; i++) {
if (!current.name.equals(name)) {
if (current.next == null) {
// 找不到返回空
return null;
current = current.next;
// 找到後返回該聯絡人的手機號碼
return current.cell;
}// 返回聯絡人自身
public Node retuName(String name) {
if (size == 0) {
System.out.println(" 通訊錄為空 ");
return null;
}Node current = this.first;
for (int i = 0; i < size; i++) {
if (!current.name.equals(name)) {
current = current.next;
return current;
// 更改聯絡人姓名
public String ChangeAdBName(String name, String toName) {
Node current = retuName(name);
current.name = toName;
return current.name;
}// 更改聯絡人手機號碼
public String ChangeAdBCell(String name, String toCell) {
Node current = retuName(name);
current.cell = toCell;
return current.cell;
}// 刪除指定聯絡人
public void deleteAdB(String name) {
if (size == 0) {
System.out.println(" 通訊錄為空 ");
return;
}// 找到被刪除的聯絡人
Node current = this.first;
for (int i = 0; i < size; i++) {
if (!current.name.equals(name)) {
if (current.next == null) {
System.out.println(" 找不到 " + name + " 聯絡人 ");
return;
current = current.next;
// 進行刪除操作
if (current == first) {// 刪除通訊錄中頂部的一個聯絡人
this.first = current.next;
this.first.prev = null;
} else if (current == last) {// 刪除通訊錄中最底部的一個聯絡人
this.last = current.prev;// 將該聯絡人的上一個聯絡人作為通訊錄的最後一個聯絡人
this.last.next = null;// 最後一個聯絡人對下一個聯絡人引用為空
} else // 將該聯絡人的下一個聯絡人作為該聯絡人的上一個聯絡人的 next
current.next英鎊符號https://www.gendan5.com/currency/GBP.html
current.prev.next = current.next; // 將該聯絡人的上一個聯絡人作為該聯絡人的下一個聯絡人的 prev
current.next.prev = current.prev; }size--; System.out.println(" 已將 " + name + " 移除通訊錄 ");
}public String toString() {
if (size == 0) {
return " 通訊錄為空 ";
}// 拼接字串
StringBuilder sbBuilder = new StringBuilder(size * 2 + 1);
Node current = this.first;
int counet = 0;
while (current != null) {
sbBuilder.append(" 聯絡人姓名為 :" + current.name + "\n");
sbBuilder.append(" 該聯絡人手機號碼為 :" + current.cell + "\n");
if (counet != size - 1) {
sbBuilder.append("\n");
counet++;
}current = current.next;
}return sbBuilder.toString();
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2692938/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【練手小專案】簡易通訊錄:單連結串列實現
- 簡易資料結構資料結構
- 完整版通訊錄(實現簡單具體易上手!!)
- 如何透過輕易雲實現旺店通與金蝶雲資料整合
- 簡單通訊錄的實現
- 資料結構--單連結串列(通過陣列實現)資料結構陣列
- 【練習】製作簡易通訊錄
- 異構資料來源同步之表結構同步 → 透過 jdbc 實現,沒那麼簡單JDBC
- Go語言實現的簡易TCP通訊框架GoTCP框架
- 資料結構-棧(通過陣列和單向連結串列實現)資料結構陣列
- 透過結構化資料構建頁面
- Webview獨立程式並通過AIDL實現資料通訊WebViewAI
- js樹型結構資料簡易遞迴JS遞迴
- 無線通訊模組透過TCP/IP協議實現與PC端的資料傳輸TCP協議
- 驅動開發:透過應用堆實現多次通訊
- 驅動開發:透過MDL對映實現多次通訊
- 透過API介面實現資料探勘?API
- 利用SQL實現通訊錄SQL
- 呼叫通訊錄實現思路
- 通過原生js實現資料的雙向繫結JS
- 【Golang】Go 通過結構(struct) 實現介面(interface)GolangStruct
- flink 透過繼承RichSinkFunction實現自定義sink,將資料錄入資料庫繼承Function資料庫
- 透過輕易雲平臺實現湯臣倍健資料的高效入庫
- 透過.NET Core+Vue3 實現SignalR即時通訊功能VueSignalR
- 簡易實現Redis監控自動簡訊告警Redis
- 詳細分析連結串列的資料結構的實現過程(Java 實現)資料結構Java
- C# 通過socket實現UDP 通訊C#UDP
- 透過例子學習Lua(3)----Lua資料結構(轉)資料結構
- oracle透過expdp的remap_data實現簡單的資料脫敏OracleREM
- 如果通過流資料實現實時分析?
- 對於以下資料結構,如何透過JSP做成動態結構樹!資料結構JS
- 數棧產品分享:簡析資料中臺如何透過DataAPI實現資料共享API
- Zabbix透過PSK共享金鑰實現Server和Agent的通訊加密Server加密
- js實現資料結構--棧JS資料結構
- redis資料結構實現(一)Redis資料結構
- C++ 手撕--基本資料結構的簡單實現C++資料結構
- Java實現資料結構之線性結構Java資料結構
- 資料結構之通用樹結構的實現資料結構