C# :: Aufgabe #105
11 Lösungen

Das Array-Telefonbuch
Anfänger - C#
von Energy
- 17.08.2015 um 15:11 Uhr
Erstelle ein mehrdimensionales Array, in der 5 Datensätze gespeichert werden. Es soll eine Festnetznummer, eine Handynummer und eine Geschäftliche Telefonnummer in der Konsole eingegeben werden. Nach der Eingabe soll die Konsole geleert und die Nummern ausgegeben werden. Bei der Ein- sowie Ausgabe soll eine laufende Eintragsnummer angezeigt werden.
Lösungen:
Mit einer Verschachtelten Auflistung könnte man diese Aufgabe wesentlich sinnvoller lösen.
Dennoch habe ich mich an die Vorgabe gehalten. :)
C#-Code
Dennoch habe ich mich an die Vorgabe gehalten. :)

static void Main(string[] args) { string[,] Directory = new string[5, 4]; string[] Requests = { "Full name", "Mobile line", "Landline", "Business line" }; byte Entries = 0; do { for (byte i = 0; i < 4; i++) { Console.Write(Requests[i] + "\t-> "); Directory[Entries, i] = Console.ReadLine(); } for (byte i = 0; i <= Entries; i++) Console.WriteLine("\n{0}.\n\tFull name\t{1}\n\tMobile line\t{2}\n\tLandline\t{3}\n\tBusiness line\t{4}\n", i + 1, Directory[i, 0], Directory[i, 1], Directory[i, 2], Directory[i, 3]); Console.ReadKey(); } while (++Entries < 5); }

using System; namespace Array_Telefonbuch { class Program { static void Main() { string[,] Foo = new string[5, 3]; string[] Bar = new string[] { "Festnetz", "Handy", "Geschäftlich" }; for (int i = 0; i < Foo.GetLength(0); i++) { Console.WriteLine("{0}. Eintrag:", i + 1); for (int ii = 0; ii < Foo.GetLength(1); ii++) { Console.Write("{0}>", Bar[ii]); Foo[i, ii] = Console.ReadLine(); } Console.WriteLine(); } Console.Clear(); for (int i = 0; i < Foo.GetLength(0); i++) { Console.WriteLine("{0}. Eintrag:", i + 1); for (int ii = 0; ii < Foo.GetLength(1); ii++) { Console.WriteLine("{0}: {1}", Bar[ii], Foo[i, ii]); } Console.WriteLine(); } Console.ReadKey(true); } } }

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ArrayTelefonbuch { class Program { static void Main(string[] args) { long[,] telefonbuch; int anzahlE; do { Console.WriteLine("Wieviele Einträge möchten Sie in ihrem Telefonbuch haben?"); } while (!int.TryParse(Console.ReadLine(), out anzahlE) || anzahlE < 0); telefonbuch = new long[anzahlE, 4]; long tempnummer; for (int i = 0; i < anzahlE; i++) { telefonbuch[i, 0] = i + 1; // Eintragsnummer do { Console.WriteLine("Festnetznummer von Eintrag #{0} ?", telefonbuch[i, 0]); } while (!long.TryParse(Console.ReadLine(), out tempnummer)); telefonbuch[i, 1] = tempnummer; // Festnetznummer do { Console.WriteLine("Handynummer von Eintrag #{0} ?", telefonbuch[i, 0]); } while (!long.TryParse(Console.ReadLine(), out tempnummer)); telefonbuch[i, 2] = tempnummer; // Handynummer do { Console.WriteLine("Geschäftsnummer von Eintrag #{0} ?", telefonbuch[i, 0]); } while (!long.TryParse(Console.ReadLine(), out tempnummer)); telefonbuch[i, 3] = tempnummer; // Geschäftsnummernummer Console.Clear(); } Console.WriteLine("TELEFONBUCH"); Console.WriteLine("-----------"); Console.WriteLine("\n\n"); Console.WriteLine("==============================================================="); for (int i = 0; i < anzahlE; i++) { Console.Write("Eintrag #{0}: ", telefonbuch[i, 0]); Console.WriteLine( "Festnetznummer - {0}", telefonbuch[i, 1]); Console.WriteLine(" Handynummer - {0}", telefonbuch[i, 2]); Console.WriteLine(" Geschäftsnummer - {0}", telefonbuch[i, 3]); Console.WriteLine("==============================================================="); } Console.ReadLine(); } } }
Man kann im Prinzip alles eingeben. Ich wollt's allgemein halten. Keine Ahnung ob das Punktabzug gibt, weil Aufgabenstellung verfehlt? ;)
C#-Code

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace Telefonbuch { class Program { static void Main(string[] args) { int menueAuswahl = 0; //String menueAuswahlStr wird geparst in menueAuswahl string menueAuswahlStr; //Initiale Eingabeannahme von der Konsole string[,] daten = new string[5, 3]; //Die fuenf Datensaetze mit den drei Unterpunkten while (true) { Console.WriteLine("Waehlen sie."); //Hier beginnt das Auswahlmenue Console.Write("1. Daten eintragen.\n2. Programm beenden.\n"); menueAuswahlStr = Console.ReadLine(); //Die Eingabe in die Konsole erfolgt menueAuswahl = Int32.Parse(menueAuswahlStr); //Der String wird in einen Int verwandelt switch (menueAuswahl) { case 1: Console.Clear(); for (int zaehler = 0;zaehler < 5;zaehler++) { //For-Schleife, die die Daten annimmt Console.WriteLine("Datensatz {0}", zaehler + 1); Console.Write((zaehler + 1) + ".1."); daten[zaehler, 0] = Console.ReadLine(); Console.Write((zaehler + 1) + ".2."); daten[zaehler, 1] = Console.ReadLine(); Console.Write((zaehler + 1) + ".3."); daten[zaehler, 2] = Console.ReadLine(); } Console.Clear(); //Leeren der Konsole nach beendigter Eingabe for (int zaehler = 0;zaehler < 5;zaehler++) { //For-Schleife zur Ausgabe der Daten Console.WriteLine((zaehler + 1) + ".1." + daten[zaehler, 0]); Console.WriteLine((zaehler + 1) + ".2." + daten[zaehler, 1]); Console.WriteLine((zaehler + 1) + ".3." + daten[zaehler, 2]); } break; case 2: return; default: //Falls jemand etwas anderes eingibt als 1 und 2 wird das Progamm beendet. return; } } } } }
Screenshot: http://www0.xup.in/exec/ximg.php?fid=10391543
Info: Sorry falls die Darstellung bei euch Variiert, die Konsole von Windows 10 lässt sich in der Breite vergrößern und ist noch ein wenig ungewohnt. Sollte aber passen :)
C#-Code
Info: Sorry falls die Darstellung bei euch Variiert, die Konsole von Windows 10 lässt sich in der Breite vergrößern und ist noch ein wenig ungewohnt. Sollte aber passen :)

using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.Serialization.Formatters.Binary; using System.Text; using System.Threading.Tasks; using System.Diagnostics; namespace Array_Telefonbuch { [Serializable] class Program { static string[,] telefonbuch; static void Main(string[] args) { if (File.Exists("C:\\Telefonbuch.dat")) telefonbuch = Telefonbuch_Laden(); else telefonbuch = new string[1, 5]; int einträge = telefonbuch.Length / 5; Console.Write("Geben Sie einen Namen, eine Telefonnummer, eine Handynummer und eine " + "Geschäftsnummer durch Komma getrennt ein. Möchten Sie einen Eintrag überspringen" + "geben Sie ein Leerzeichen ein.\n" + "Bsp: \"Max Mustermann, 06589 1234, 0170 12345678, 06589 1789 11\"\n" + "Geben Sie \"ausgabe\" ein um das Telefonbuch nur auszugeben. \n\n"); Console.Write(einträge.ToString() + ":"); string input = Console.ReadLine(); if (input == "ausgabe") { Console.Clear(); Telefonbuch_Ausgeben(telefonbuch); Console.ReadKey(); Environment.Exit(0); } string[] check = input.Split(','); for (int j = 0; j < 4; j++) { check[j] = check[j].Trim(); if (check[j].Length > 19) { Console.WriteLine("Einer der Einträge war zu lang. Erlaubt sind max. 19 Zeichen " + "pro Eintrag!"); Console.ReadKey(); Environment.Exit(0); } } if (check.Length == 4) { telefonbuch[einträge - 1, 0] = einträge.ToString(); for (int i = 1; i <= 4; i++) telefonbuch[einträge - 1, i] = check[i - 1]; telefonbuch = Telefonbuch_Vergrössern(telefonbuch); Telefonbuch_Speichern(telefonbuch); Console.Clear(); Telefonbuch_Ausgeben(telefonbuch); Console.ReadKey(); } else { Console.WriteLine("Ihre Eingaben stimmen nicht mit der Signatur des Telefonbuchs überein"); Environment.Exit(0); } } /// <summary> /// Lädt das Telefonbuch vom Datenträger (von C: Root) /// </summary> /// <returns>Telefonbuch</returns> static string[,] Telefonbuch_Laden() { BinaryFormatter bf = new BinaryFormatter(); Stream stream = new FileStream("C://Telefonbuch.dat", FileMode.OpenOrCreate); string[,] tb = (string[,])bf.Deserialize(stream); stream.Close(); return tb; } /// <summary> /// Speichert das Telefonbuch auf dem Datenträger (unter C: Root) /// </summary> /// <param name="tb">Das zweidimensionale Array mit dem Telefonbuch</param> static void Telefonbuch_Speichern(string[,] tb) { BinaryFormatter bf = new BinaryFormatter(); Stream stream = new FileStream("C://Telefonbuch.dat", FileMode.OpenOrCreate); bf.Serialize(stream, tb); stream.Close(); } /// <summary> /// Vergrößert das Array mit dem Telefonbuch /// </summary> /// <param name="tb">Telefonbuch</param> /// <returns>Das vergrößerte Array</returns> static string[,] Telefonbuch_Vergrössern(string[,] tb) { string[,] neu = new string[telefonbuch.Length / 5 + 1, 5]; for (int i = 0; i < tb.Length / 5; i++) for (int j = 0; j < 5; j++) neu[i, j] = telefonbuch[i, j]; return neu; } /// <summary> /// Gibt die Einträge im Telefonbuch in einer Tabellenstruktur in der Konsole aus /// </summary> /// <param name="tb">Telefonbuch</param> static void Telefonbuch_Ausgeben(string[,] tb) { const int spaltenbreite = 15; // Tabellenkopf ausgeben ////////////////////////////////////////////////////////// string[] spaltennamen = new string[] { "ID", "Name", "Telefon", "Handy", "Geschäftlich" }; for (int i = spaltenbreite * 5; i > 0; i--) Console.Write("-"); Console.Write("\n"); for (int n = 0; n <= 4; n++) { Console.Write("|" + spaltennamen[n]); for (int o = spaltenbreite - (spaltennamen[n].Length + 1); o > 0; o--) Console.Write(" "); } Console.Write("\n"); for (int m = spaltenbreite * 5; m > 0; m--) Console.Write("-"); Console.Write("\n"); ////////////////////////////////////////////////////////////////////////////////// // Einträge ausgeben ///////////////////////////////////////////////////////////// for (int j = 0; j < tb.Length / 5 - 1; j++) { for (int k = 0; k <= 4; k++) { Console.Write("|" + tb[j, k]); for (int l = spaltenbreite - (tb[j, k].Length + 1); l > 0; l--) Console.Write(" "); } Console.Write("\n"); } for (int o = spaltenbreite * 5; o > 0; o--) Console.Write("-"); ////////////////////////////////////////////////////////////////////////////////// } } }
Ginge mit [][](jagged) Arrays etwas einfacher als mit [,] (multidimensional) da man ein ganzes 1D Array in ein 2D Array kopieren kann. Dies wäre nützlich in der for-Schlaufe in der MAIN-Funktion
C#-Code

enum NUMMERN { Festnetznummer, Handynummer, Geschaeftsnummer } static void Main(string[] args) { string[,] telefonbuch = new string[5, 3]; int counter = 1; for (int i = 0; i < 5; i++) { Console.WriteLine("Datensatz " + counter); counter++; string[] tmp = leseDatensatz(); telefonbuch[i, 0] = tmp[0]; telefonbuch[i, 1] = tmp[1]; telefonbuch[i, 2] = tmp[2]; ausgebenTelefonbuch(telefonbuch); } } static void ausgebenTelefonbuch(string[,] telefonbuch) { Console.Clear(); for (int i = 0; i < 5; i++) { Console.WriteLine("Datensatz " + (i + 1)); for (int j = 0; j < 3; j++) { if (telefonbuch[i, j] != null) Console.WriteLine((NUMMERN)j + ": " + telefonbuch[i, j]); else Console.WriteLine((NUMMERN)j + ": Noch nicht eingegeben"); } } Console.ReadLine(); Console.Clear(); } static string[] leseDatensatz() { string[] datensatz = new string[3]; for (int i = 0; i < 3; i++) { Console.Write("Geben Sie die " + (NUMMERN)i + " ein: "); datensatz[i] = Console.ReadLine(); } return datensatz; }

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Array_Telefonbuch_typ.de { class Program { static void Main(string[] args) { // Deklaration der Variablen string[,] Telefonbuch; int anzahlDS; Console.Write("Wie viele Datensätze: "); // Inistialisierung (Definition) anzahlDS = Convert.ToInt32(Console.ReadLine()); Telefonbuch = new String[anzahlDS, 4]; Console.Clear(); // Datensätze einlesen for (int i = 0; i < anzahlDS; i++) { Telefonbuch[i, 0] = Convert.ToString(i + 1); if (i == 0) Console.WriteLine(Convert.ToString(i + 1) + ". Datensatz:"); else Console.WriteLine("\n" + Convert.ToString(i + 1) + ". Datensatz:"); Console.Write("Festnetznummer: "); Telefonbuch[i, 1] = Console.ReadLine(); Console.Write("Handynummer: "); Telefonbuch[i, 2] = Console.ReadLine(); Console.Write("Geschäftliche Nummer: "); Telefonbuch[i, 3] = Console.ReadLine(); } Console.Clear(); // Datensätze auslesen for (int i = 0; i < anzahlDS; i++) { if (i == 0) Console.WriteLine("Laufendenummer: " + Telefonbuch[i, 0]); else Console.WriteLine("\nLaufendenummer: " + Telefonbuch[i, 0]); Console.WriteLine("Festnetznummer: " + Telefonbuch[i, 1]); Console.WriteLine("Handynummer: " + Telefonbuch[i, 2]); Console.WriteLine("Geschäftliche Nummer: " + Telefonbuch[i, 3]); } Console.Read(); } } }

using System; namespace Das_Array_Telefonbuch { public class Program { static void Main(string[] args) { string[,] Numbers = new string[5,4]; int EintNr = 1; for (int i = 0; i < 5; i++) { Console.WriteLine("Festnetznummer: "); Numbers[i, 0] = Console.ReadLine(); Console.WriteLine("HandyNummer: "); Numbers[i, 1] = Console.ReadLine(); Console.WriteLine("Gesch. Tel.Nummer: "); Numbers[i, 2] = Console.ReadLine(); Numbers[i, 3] = "Nr. " + EintNr; EintNr++; Console.Clear(); } Console.WriteLine("LETZTER EINTRAG"); Console.ReadKey(); for (int j = 0; j < 5; j++) { Console.WriteLine(Numbers[j, 3]); Console.WriteLine("Festnetznummer " + Numbers[j, 0]); Console.WriteLine("HandyNummer " + Numbers[j, 1]); Console.WriteLine("Gesch. Tel.Nummer " + Numbers[j, 2]); Console.WriteLine(" "); } Console.ReadKey(); } } }

string[,] nummer = new string[5, 4]; string[] details = { "Name", "Festnetznummer", "Handynummer", "Geschaeftnummer"}; int erstIndex; int zweiteIndex; for (erstIndex = 0; erstIndex < 5; erstIndex++) { Console.WriteLine("{0}.Person", erstIndex+16); for (zweiteIndex = 0; zweiteIndex < 4; zweiteIndex++) { Console.Write("{0}: ", details[zweiteIndex]); nummer[erstIndex,zweiteIndex] = Console.ReadLine(); } }

static void Main(string[] args) { string[,] Datenfeld = new string[5, 4]; // string[] Datenfeld1 = new string[] { "name1", "festnetznummer1", "mobilnummer1", "businessnummer1" }; // Datenfeld[Zeilen,Spalten] for (int anzahl = 0; anzahl < 5; anzahl++) { Console.WriteLine("Name?"); Datenfeld[anzahl ,0] = Console.ReadLine(); Console.WriteLine("Festnetznummer"); Datenfeld[anzahl,1] = Console.ReadLine(); Console.WriteLine("Mobilnummer?"); Datenfeld[anzahl,2] = Console.ReadLine(); Console.WriteLine("Businessnummer?"); Datenfeld[anzahl,3] = Console.ReadLine(); for (int eintrag = 0; eintrag < anzahl + 1; eintrag++) { Console.WriteLine(" " + eintrag + 1 + ". " + "Eintrag"); Console.WriteLine(" 1. " + Datenfeld[eintrag, 0]); Console.WriteLine(" 2. " + Datenfeld[eintrag, 1]); Console.WriteLine(" 3. " + Datenfeld[eintrag, 2]); Console.WriteLine(" 4. " + Datenfeld[eintrag, 3]); if (eintrag == 4) { Console.ReadLine(); } } }

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ArrayTelefonbuch { class Program { static void Main(string[] args) { string[,] telefonnummern = new string[5, 3]; do { Console.Clear(); Console.WriteLine("Willkommen beim Telefonbuch\n"); Console.WriteLine("1. Eintrag hinzufügen\n2. Eintrag ausgeben\n3. Alle Einträge Ausgeben"); int eingabe = Convert.ToInt32(Console.ReadLine()); switch (eingabe) { case 1: Console.Clear(); for (int i = 0; i < telefonnummern.GetLength(0); i++) { if (telefonnummern[i, i] == null) { Console.WriteLine("{0}. Eintrag\nFestnetznummer: ", i + 1); telefonnummern[i, 0] = Console.ReadLine(); Console.WriteLine("Handynummer: "); telefonnummern[i, 1] = Console.ReadLine(); Console.WriteLine("Geschäftlich: "); telefonnummern[i, 2] = Console.ReadLine(); break; } } Console.WriteLine("Beliebige Taste drücken um wieder ins Hauptmenü zu gelangen"); Console.ReadKey(); break; case 2: Console.Clear(); Console.WriteLine("Welchen Eintrag möchten Sie ausgeben? (1 - 5) "); int e = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("{0}. Eintrag\nFestnetznummer: {1}\nHandynummer: {2}\nGeschäftlich: {3}\n\n", e, telefonnummern[e - 1, 0], telefonnummern[e - 1, 1], telefonnummern[e - 1, 2]); Console.WriteLine("Beliebige Taste drücken um wieder ins Hauptmenü zu gelangen"); Console.ReadKey(); break; case 3: Console.Clear(); for (int i = 0; i < telefonnummern.GetLength(0); i++) { if (telefonnummern[i, i] != null) { Console.WriteLine("{0}. Eintrag\n", i + 1); Console.WriteLine("Festnetznummer: {0}\nHandynummer: {1}\nGeschäftlich: {2}\n\n", telefonnummern[i, 0], telefonnummern[i, 1], telefonnummern[i, 2]); } else { break; } } Console.WriteLine("Beliebige Taste drücken um wieder ins Hauptmenü zu gelangen"); Console.ReadKey(); break; default: break; } } while (true); } } }