add phone book assignment from WCC CS 145 Spring 2019.

This commit is contained in:
Matthew Jensen 2019-12-14 17:09:29 -08:00
parent d738aedc12
commit 63d3de5191
5 changed files with 405 additions and 0 deletions

85
phonebook/PhoneBook.java Normal file
View File

@ -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;
}
}

View File

@ -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<PhoneBook> phonebooks = new ArrayList<PhoneBook>();
// 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);
}
}

129
phonebook/Prompt.java Normal file
View File

@ -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<PhoneBook> phonebooks, Scanner console ) {
String input = prompt("Which Phonebook?", console);
return getPhoneBookIndex(phonebooks, input);
}
public static boolean hasPhoneBookNamed(ArrayList<PhoneBook> 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<PhoneBook> 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;
}
}

2
phonebook/README.md Normal file
View File

@ -0,0 +1,2 @@
# Phonebook

View File

@ -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;
}
}