From 63d3de519120f40d86e84b73b1b8f90631990ec0 Mon Sep 17 00:00:00 2001 From: Matthew Jensen Date: Sat, 14 Dec 2019 17:09:29 -0800 Subject: [PATCH] add phone book assignment from WCC CS 145 Spring 2019. --- phonebook/PhoneBook.java | 85 +++++++++++++++++++++ phonebook/PhoneBookClient.java | 133 +++++++++++++++++++++++++++++++++ phonebook/Prompt.java | 129 ++++++++++++++++++++++++++++++++ phonebook/README.md | 2 + phonebook/TelephoneNode.java | 56 ++++++++++++++ 5 files changed, 405 insertions(+) create mode 100644 phonebook/PhoneBook.java create mode 100644 phonebook/PhoneBookClient.java create mode 100644 phonebook/Prompt.java create mode 100644 phonebook/README.md create mode 100644 phonebook/TelephoneNode.java diff --git a/phonebook/PhoneBook.java b/phonebook/PhoneBook.java new file mode 100644 index 0000000..9e9525e --- /dev/null +++ b/phonebook/PhoneBook.java @@ -0,0 +1,85 @@ +/* +* +* Matt Jensen +* CS 145, Spring 2019 +* Assignment X +* 5/15/19 +* +*/ + +// stores telephone nodes +import java.util.*; + +public class PhoneBook { + + private String name; + private TelephoneNode front; + private TelephoneNode back; + private int size; + + public PhoneBook( String name ) { + this.name = name; + this.size = 0; + } + public void add(TelephoneNode node) { + this.add(this.size, node); + } + public void add( int index, TelephoneNode node ) { + if( index == 0 ) { + node.next = this.front; + this.front = node; + } else { + TelephoneNode nodeBeforeIndex = this.get( index - 1 ); + //TelephoneNode nodeAtIndex = this.get( index ); + //node.next = nodeAtIndex.next; + nodeBeforeIndex.next = node; + } + this.size++; + } + public TelephoneNode get(int index) { + TelephoneNode currentNode = this.front; + for( int i = 0; i < index; i++) { + currentNode = currentNode.next; + } + return currentNode; // change back.next from null to node + } + public int search(String name) { + TelephoneNode currentNode = this.front; + name = name.toLowerCase(); + String nodeName; + for( int i = 0; i < this.size; i++) { + nodeName = currentNode.getName().toLowerCase(); + if(nodeName.indexOf(name) >= 0) { + return i; + } + currentNode = currentNode.next; + } + return -1; + } + public void transfer(int index, PhoneBook destination){ + TelephoneNode node = this.get(index); + this.remove(index); + destination.add(node); + } + public void remove(int index) { + if( index == 0 ) { + this.front = this.front.next; + } else { + TelephoneNode nodeBeforeIndex = this.get( index - 1 ); + TelephoneNode nodeAtIndex = this.get( index ); + nodeBeforeIndex.next = nodeAtIndex.next; + } + } + public String getName() { + return this.name; + } + public String toString() { + String string = this.getName() + "\n"; + TelephoneNode currentNode = this.front; + while( currentNode != null ) { + string += currentNode.toString() + "\n"; + currentNode = currentNode.next; + } + return string; + } +} diff --git a/phonebook/PhoneBookClient.java b/phonebook/PhoneBookClient.java new file mode 100644 index 0000000..82463b5 --- /dev/null +++ b/phonebook/PhoneBookClient.java @@ -0,0 +1,133 @@ +/* +* +* Matt Jensen +* CS 145, Spring 2019 +* Assignment X +* 5/15/19 +* +*/ + +import java.util.*; +import java.awt.*; +import java.io.*; + +public class PhoneBookClient { + + // holds the clients phonebooks + private static ArrayList phonebooks = new ArrayList(); + + // controls the command prompt and manages class relationships. + public static void main( String[] args ) { + //seed(); + Scanner console = new Scanner( System.in ); + Prompt.intro(); + char option = Prompt.forOption(console); + String name; + PhoneBook phonebook = null; + TelephoneNode currentNode = null; + String[] data; + int index; + while(option != 'q') { + if( option == 'c') { + name = Prompt.forString(console); + System.out.println(name); + PhoneBook newPhonebook = new PhoneBook( name ); + phonebooks.add(newPhonebook); + } else if( phonebooks.size() < 1 ) { + System.out.println("No phonebooks yet."); + System.out.println(); + option = Prompt.forOption(console); + continue; + } + if( option == 'a' ) { + phonebook = phonebooks.get(Prompt.forPhoneBookIndexOf(phonebooks, console)); + data = new String[3]; + TelephoneNode newNode = new TelephoneNode(Prompt.forTelephoneNodeData(data, console)); + phonebook.add(newNode); + } + if( option == 'r' ) { + index = Prompt.forPhoneBookIndexOf(phonebooks, console); + if( index != -1 ) { + phonebook = phonebooks.get(index); + } + index = Prompt.forTelephoneNodeIndexOf(phonebook, console); + if( index != -1 ) { + phonebook.remove(index); + } + } + if( option == 'm' ) { + index = Prompt.forPhoneBookIndexOf(phonebooks, console); + if( index != -1 ) { + phonebook = phonebooks.get(index); + index = Prompt.forTelephoneNodeIndexOf(phonebook, console); + if( index != -1 ) { + currentNode = phonebook.get(index); + data = new String[3]; + data = Prompt.forTelephoneNodeData(data, console); + currentNode.setAll(data); + } + } + } + if( option == 'p' ) { + index = Prompt.forPhoneBookIndexOf(phonebooks, console); + if( index != -1 ) { + phonebook = phonebooks.get(index); + } + System.out.println("PhoneBook:"); + System.out.println(phonebook); + } + if( option == 's' ) { + index = Prompt.forPhoneBookIndexOf(phonebooks, console); + if( index != -1 ) { + phonebook = phonebooks.get(index); + index = Prompt.forTelephoneNodeIndexOf(phonebook, console); + if( index != -1 ) { + currentNode = phonebook.get(index); + System.out.println("Entry Found:"); + System.out.println(currentNode); + } + } + } + if( option == 't' ) { + index = Prompt.forPhoneBookIndexOf(phonebooks, console); + if( index != -1 ) { + PhoneBook fromPhoneBook = phonebooks.get(index); + index = Prompt.forTelephoneNodeIndexOf(fromPhoneBook, console); + if( index != -1 ) { + int nodeIndex = index; + currentNode = fromPhoneBook.get(index); + System.out.println("Destination:"); + index = Prompt.forPhoneBookIndexOf(phonebooks, console); + PhoneBook toPhoneBook = phonebooks.get(index); + fromPhoneBook.transfer(nodeIndex, toPhoneBook); + } + } + } + System.out.println(); + option = Prompt.forOption(console); + } + System.out.println("Goodbye!"); + return; + } + private static void seed() { + PhoneBook book = new PhoneBook("Seattle"); + + String[] phoneName = new String[]{"Matt", "555555555", "1234 High St."}; + book.add(new TelephoneNode(phoneName)); + + phoneName = new String[]{"Other", "2525252525", "5555 Main"}; + book.add(new TelephoneNode(phoneName)); + + phoneName = new String[]{"And Another", "111111111", "5555 Main"}; + book.add(new TelephoneNode(phoneName)); + + phonebooks.add(book); + + book = new PhoneBook("Bellingham"); + phoneName = new String[]{"Another", "000000000", "5555 Main"}; + book.add(new TelephoneNode(phoneName)); + + phonebooks.add(book); + + } +} diff --git a/phonebook/Prompt.java b/phonebook/Prompt.java new file mode 100644 index 0000000..26d4008 --- /dev/null +++ b/phonebook/Prompt.java @@ -0,0 +1,129 @@ +/* +* +* Matt Jensen +* CS 145, Spring 2019 +* Assignment X +* 5/15/19 +* +*/ + +import java.util.*; +import java.awt.*; +import java.io.*; + +public class Prompt { + + private static String[] options = {"Create Directory", "Add Telephone to Directory", "Remove Telephone from Directory", "Modify a Telephone entry", "Tranfer a Telephone to New Directory", "Search a Directory", "Print Directory", "Quit"}; + private static String[] values = {"c", "a", "r", "m", "t", "s", "p", "q"}; + private static boolean DEBUG = false; + + // print the introduction to the program on start up. + public static void intro() { + System.out.println("Welcome to my word search generator"); + System.out.println("This program allows you to generate your own word search puzzle"); + } + public static TelephoneNode forTelephoneNodeInPhoneBook(String name, PhoneBook phonebook, Scanner console) { + return phonebook.get(0); + } + + + // prompts from option input + // rejects options outside of class variable + public static char forOption( Scanner console ) { + String question = getOptionPrompt(); + String input = prompt(question, console); + while( ! isOption(input) ) { + System.out.println("Unrecognized input."); + input = prompt(question, console); + } + return getOption(input); + } + // prompts for string + public static String forString( Scanner console ) { + String input = prompt("City?", console); + return getString(input); + } + // prompts for telephonenode data + public static String[] forTelephoneNodeData( String[] data, Scanner console ) { + data[0] = getString(prompt("Name?", console)); + data[1] = getString(prompt("Phone?", console)); + data[2] = getString(prompt("Address?", console)); + return data; + } + // prompts for telephonenode data + public static int forTelephoneNodeIndexOf( PhoneBook phonebook, Scanner console ) { + String input = prompt("Which Telephone Entry?", console); + return phonebook.search(input); + } + + // prompts for PhoneBook Name + public static int forPhoneBookIndexOf(ArrayList phonebooks, Scanner console ) { + String input = prompt("Which Phonebook?", console); + return getPhoneBookIndex(phonebooks, input); + } + + public static boolean hasPhoneBookNamed(ArrayList phonebooks, String name) { + int index = 0; + PhoneBook current = phonebooks.get(index); + for(PhoneBook phonebook : phonebooks) { + if(index != 0) { + current = phonebooks.get(index); + } + if(current.getName().indexOf(name.toLowerCase()) >= 0) { + return true; + } + index++; + } + return false; + } + + private static int getPhoneBookIndex(ArrayList phonebooks, String name) { + name = name.toLowerCase(); + int index = 0; + String currentName = ""; + PhoneBook current = phonebooks.get(index); + for(PhoneBook phonebook : phonebooks) { + if(index != 0) { + current = phonebooks.get(index); + } + currentName = current.getName().toLowerCase(); + if(currentName.indexOf(name) >= 0) { + return index; + } + index++; + } + return -1; + } + + // validates if character is an option + private static boolean isOption(String input) { + for(int i = 0; i < values.length; i++) { + if( input.startsWith(values[i]) ) { + return true; + } + } + return false; + } + private static String getString(String input) { + return input; + } + // return first character of input for options. + private static char getOption(String input) { + return input.charAt(0); + } + private static String prompt(String prompt, Scanner console) { + System.out.println(prompt); + String response = console.nextLine(); + System.out.println(); + return response; + } + + // returns all the possible options + private static String getOptionPrompt() { + String prompt = "Please select an option below:\n"; + for( int i = 0; i < options.length; i++ ) { + prompt += options[i] + " (" + values[i] + ")\n"; + } + return prompt; + } +} diff --git a/phonebook/README.md b/phonebook/README.md new file mode 100644 index 0000000..0b0e6ec --- /dev/null +++ b/phonebook/README.md @@ -0,0 +1,2 @@ +# Phonebook + diff --git a/phonebook/TelephoneNode.java b/phonebook/TelephoneNode.java new file mode 100644 index 0000000..6fa4e98 --- /dev/null +++ b/phonebook/TelephoneNode.java @@ -0,0 +1,56 @@ +/* +* +* Matt Jensen +* CS 145, Spring 2019 +* Assignment X +* 5/15/19 +* +*/ + +// an individual telephone in a phone book. +public class TelephoneNode { + + private String name; + private String number; + private String address; + + public TelephoneNode next; + + public void setName(String name) { + this.name = name; + } + public void setAddress(String address) { + this.address = address; + } + public void setNumber(String number) { + this.number = number; + } + public String getName() { + return this.name; + } + + public TelephoneNode() { + this(null, null); + } + public void setAll(String[] data){ + this.setData(data); + } + + public TelephoneNode(String[] data, TelephoneNode next) { + if( data != null ) { + this.setData(data); + } + this.next = next; + } + public TelephoneNode(String[] data) { + this(data, null); + } + private void setData(String[] data) { + this.name = data[0]; + this.number = data[1]; + this.address = data[2]; + } + public String toString() { + return this.name + " " + this.address + " " + this.number; + } +}