Zurück zum Manuskript
// Datei: TelefonbuchServer.java // Autor: Werner Brecht // Datum: 23.07.2018 // Thema: Ein TelefonbuchServer mit einer Benutzerschnittstelle // und einer Analysemethode. // // Die Benutzerschnittstelle besteht aus den beiden // Methoden auswahl() und ausgabe(). Die Analysemethode // heißt analyse(). // // Eine Beschreibung der Arbeitsweise des Servers findet // sich im Grobentwurf des Lösungsbeispiels zur // Aufgabe 1. // ============================================================= import java.util.*; import java.io.*; import java.util.regex.*; class TelefonbuchServer { public static void main(String[] unused) throws Exception { // Ergebnisliste bereitstellen // --------------------------------------------------------- ArrayList<String> erg = null; String qs = null; // Benutzer abfragen, Eingaben untersuchen, ggf. Suchvor- // gänge starten und Ergebnis ausgeben. Abbruch auf // Benutzerwunsch in auswahl() // --------------------------------------------------------- while(true) { qs = auswahl(); erg = analyse(qs); ausgabe(erg); } } // main() // ============================================================= static String auswahl() throws Exception { // Das Programm arbeitet mit einer Windows-Konsole, weshalb // als Zeichenkodierung Cp850 eingestellt wird // --------------------------------------------------------- BufferedReader br = new BufferedReader( new InputStreamReader(System.in, "Cp850")); PrintStream ps = new PrintStream(System.out, true, "Cp850"); String ein = null; while(true) { ps.println("\nTelefonbuchabfrage"); ps.println("------------------"); ps.println("Sie können durch Eingabe der Ziffer"); ps.println(" 1 : nach einem Namen,"); ps.println(" 2 : nach einer Nummer,"); ps.println(" 3 : nach einem Namen und einer " + "Nummer suchen oder mit"); ps.println(" 4 : das Programm beenden.\n"); ps.print("Ihre Eingabe ->"); ein = br.readLine().trim(); // Je nach Eingabe des Benutzers: // ------------------------------------------------------- String sna = "Geben Sie jetzt bitte einen Namen ein und achten" + "\nSie darauf, dass er kein Kaufmanns-Und (&) " + "enthält."; String snu = "Geben Sie jetzt bitte eine Nummer ein und achten" + "\nSie darauf, dass sie kein Kaufmanns-Und (&) " + "enthält."; if(ein.equals("1")) { ps.println("\n" + sna); ps.print("\nIhre Eingabe ->"); ein = br.readLine().trim(); ein = ein + "&"; // Query String break; } if(ein.equals("2")) { ps.println("\n" + snu); ps.print("\nIhre Eingabe ->"); ein = br.readLine().trim(); ein = "&" + ein; // Query String break; } if(ein.equals("3")) { ps.println("\n" + sna); ps.print("\nIhre Eingabe ->"); ein = br.readLine().trim(); ein = ein + "&"; // Query String Anfang ps.println("\n" + snu); ps.print("\nIhre Eingabe ->"); ein = ein + br.readLine().trim(); // Query String Rest break; } if(ein.equals("4") ) { ps.println("\n============================"); ps.println("Benutzerwunsch: Programmende"); ps.println("============================\n"); System.exit(0); } ps.println("\n==================="); ps.println("Unzulässige Auswahl"); ps.println("Bitte wiederholen"); ps.println("===================\n"); continue; } // while return ein; // Query String } // auswahl() // ============================================================= static ArrayList<String> analyse(String qs) throws Exception { // Telefonbuch erzeugen und Ergebnisliste anlegen // --------------------------------------------------------- Telefonbuch tb = new Telefonbuch(); ArrayList<String> erg = new ArrayList<String>(); // Ergebnislisten im Telefonbuch löschen // --------------------------------------------------------- tb.suErgNa.clear(); tb.suErgNu.clear(); // Ist in den Eingaben genau ein & enthalten? // --------------------------------------------------------- String regex = "^[^&]*&[^&]*$"; if(! qs.matches(regex)) { erg.add("Syntaxfehler"); return erg; } // Sind die Benutzereingaben leer? // --------------------------------------------------------- if(qs.equals("&")) { erg.add("Leere Eingabe"); return erg; } // Der Query String ist korrekt aufgebaut // --------------------------------------------------------- erg = tb.tBuchAbfrage(qs); erg.add("Suche"); return erg; } // ============================================================= static void ausgabe(ArrayList<String> erg) throws Exception { // Die Ausgaben gehen in eine Windows-Konsole, deshalb Cp850 // --------------------------------------------------------- PrintStream ps = new PrintStream(System.out, true, "Cp850"); int len = erg.size(); String analyseErg = erg.get(len-1); ps.println("\n========================================"); if(analyseErg.equals("Syntaxfehler")) { ps.println("Syntaktisch falsche Eingabe"); ps.println("Bitte wiederholen"); ps.println("========================================\n"); return; } if(analyseErg.equals("Leere Eingabe")) { ps.println("Leere Eingabe"); ps.println("Bitte wiederholen"); ps.println("========================================\n"); return; } ps.println("Suchergebnis:\n"); // War die Suche ergebnislos? // --------------------------------------------------------- if(len == 1) { ps.println("Die Suche war ergebnislos"); ps.println("========================================\n"); return; } String[] token = null; for(int i=0; i<len-1; i++) { token = erg.get(i).split("&"); ps.println("\t" + token[0] + "\t\t" + token[1]); } ps.println("========================================\n"); return; } // ausgabe() } // class

Zurück zum Manuskript