Entwickler-Ecke

C# - Die Sprache - Telefonbuch


sepp_a_u - Mi 03.10.07 22:48
Titel: Telefonbuch
hi @ all

bin gerade dabei ein telefon-geb-adressbuch zu schreiben. bin soweit auch schon recht weit glaube ich.
jetzt habe ich noch folgende probleme:

1) bei der ausgabe ist leider keine struktur drin
2) beim menü kommt immer ne fehlermeldung, wenn man einen string eingibt


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace telefonbuch
{
    class Program
    {
        static void Main(string[] args)
        {
            Menue();            
        }
        static void WriteFile()
        {
            StreamWriter schreiben = new StreamWriter(@"test.txt"true);
            schreiben.Write(Console.ReadLine());
            schreiben.Close();            
        }
        static void ReadFile()
        {
            StreamReader lesen = new StreamReader("test.txt");
            while (!lesen.EndOfStream)
            {
                Console.WriteLine(lesen.ReadLine());                               
            }
            lesen.Close();
            Console.ReadLine();
        }        
        static void Menue()
        {
            bool beenden = false;
            string[] neueAdresse = new string[7];
            neueAdresse[0] = "Name";
            neueAdresse[1] = "Vorname";
            neueAdresse[2] = "Strasse";
            neueAdresse[3] = "Plz";
            neueAdresse[4] = "Ort";
            neueAdresse[5] = "Telefonnr.";
            neueAdresse[6] = "Geburtstag";
            int eingabe;
            string daten;
            Console.WriteLine("\n\n\t \t      Was möchtest du tun? \n\n \t \t -----------------------------");
            Console.Write("\n \t \t |###########################|");
            Console.Write("\n \t \t |# 1.Neue Adresse eingeben #| \n \t"); 
            Console.Write("\t |# 2.Adresse suchen        #| \n \t \t |# 3.Beenden               #|" );              
            Console.Write("\n \t \t |###########################|");
            Console.WriteLine("\n \t \t -----------------------------");
            eingabe = Int32.Parse(Console.ReadLine());           
            
            do
            {
                if (eingabe == 1 && !beenden)
                {
                  foreach (string adressen in neueAdresse)
                  {
                    Console.Write("{0}: ",adressen);
                    WriteFile();
                    daten = Console.Read().ToString();                    
                  }                  
                  

                    beenden = true;

                    if (beenden)
                    {
                      Console.ReadLine();
                        Menue();
                        
                    }
                                        
                }
                else if (eingabe == 2 && !beenden)
                {
                    ReadFile();
                    beenden = true;

                    if (beenden)
                    {
                        Menue();
                    }
                }
                else if (eingabe != 1 || eingabe != 2 || !beenden)
                {
                  Console.WriteLine("Fehlerhafte Eingabe!");
                  beenden = true;
                  
                  if (beenden)
                  {
                    Menue();
                  }
                }
            }
            while (eingabe != 3);                     
        }

    }
}


so das ist mal der code.
jetzt wie kann ich hier:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
 else if (eingabe != 1 || eingabe != 2 || !beenden)
                {
                  Console.WriteLine("Fehlerhafte Eingabe!");
                  beenden = true;
                  
                  if (beenden)
                  {
                    Menue();
                  }
                }

noch einfügen, dass auch die strings berücksichtigt werden?

mfg


jasocul - Do 04.10.07 11:26

Ich sehe zwei Möglichkeiten:
1. Du verwendest einen Try - Catch - Block für diese Zeile:

C#-Quelltext
1:
eingabe = Int32.Parse(Console.ReadLine());                    

Der im Catch-Fall "eingabe" auf einen definierten Wert setzt (z.B. 99).
2. Du machst aus "eingabe" einen String und prüfst nicht mehr auf numerische Eingabe, sonder auf String-Eingabe.


Kha - Do 04.10.07 11:56

Die "beenden"-Variable kommt mir ein wenig sinnlos vor :gruebel: . Ich verstehe auch nicht, weshalb du Rekursion und eine Schleife benötigst. Du erlaubst mir hoffentlich ein wenig Umstrukturierung deiner Funktion ;) :

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
    // zur Übersicht aus der Methode herausgezogen
    static string[] addressProperties = new string[] { "Name""Vorname", ... };

    static void Menu()
    {
      Console.WriteLine("\n\n\t \t      Was möchtest du tun? \n\n \t \t -----------------------------");
      Console.Write("\n \t \t |###########################|");
      Console.Write("\n \t \t |# 1.Neue Adresse eingeben #| \n \t");
      Console.Write("\t |# 2.Adresse suchen        #| \n \t \t |# 3.Beenden               #|");
      Console.Write("\n \t \t |###########################|");
      Console.WriteLine("\n \t \t -----------------------------");

      switch (Console.ReadLine().Trim()) {
        case "1":
          foreach (string property in addressProperties) {
            Console.Write("{0}: ", property);
            WriteFile();
            // Wird das noch irgendwo genutzt?
            // daten = Console.Read().ToString();
          }
          break;
        case "2":
          ReadFile();
          break;
        case "3":
          return;
        default:
          Console.WriteLine("Fehlerhafte Eingabe!");
      }

      Console.ReadLine();
      // rekursiver Aufruf, der nur durch das return in case "3" beendet werden kann
      Menu();
    }


sepp_a_u - Do 04.10.07 22:26

tut mir ja herzlich leid, aber der code funktioniert bei mir absolut nicht!
hab jedoch meinen code noch ein weiteres mal überarbeitet und jetzt läuft er quasi einwandfrei.
jetzt fehlt nur noch, dass die aus- und eingabe schön formatiert wird, wie in einer tabelle. weiß vll jemand, wie ich das machen kann? das wäre zu geil. dann wäre mein prog quasi fertig :) bzw es wäre die beta mit ein paar funktionen...



C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace telefonbuch
{
    class Program
    {
        static void Main(string[] args)
        {
            Menue();            
        }
        static void WriteFile()
        {
            StreamWriter schreiben = new StreamWriter(@"test.txt"true);
            schreiben.Write(Console.ReadLine());
            schreiben.Close();            
        }
        static void ReadFile()
        {
            StreamReader lesen = new StreamReader("test.txt");
            while (!lesen.EndOfStream)
            {
                Console.WriteLine(lesen.ReadLine());                               
            }
            lesen.Close();
            Console.ReadLine();
        }        
        static void Menue()
        {     
            bool Ende = true;
            string[] neueAdresse = new string[7];
            neueAdresse[0] = "Name";
            neueAdresse[1] = "Vorname";
            neueAdresse[2] = "Strasse";
            neueAdresse[3] = "Plz";
            neueAdresse[4] = "Ort";
            neueAdresse[5] = "Telefonnr.";
            neueAdresse[6] = "Geburtstag";
            string eingabe;        
            Console.WriteLine("\n\n\t \t      Was möchtest du tun? \n\n \t \t -----------------------------");
            Console.Write("\n \t \t |#############################|");
            Console.Write("\n \t \t |# N - Neue Adresse eingeben #| \n \t"); 
            Console.Write("\t |# A - Datensätze anzeigen   #| \n \t \t |# B - Beenden               #|" );              
            Console.Write("\n \t \t |#############################|");
            Console.WriteLine("\n \t \t -----------------------------");            
            
            do
            {
              switch (eingabe = Console.ReadLine().ToUpper())
              {
                case "N":                  
                    foreach (string adressen in neueAdresse)
                    {
                      Console.Write("{0}: ",adressen);
                        WriteFile();                        
                    }         
                    Menue();       
                    break;
                  
                case "A":           
                    ReadFile();                    
                    Menue();               
                    break;
                  
                case "B":
                  Ende = true;
                  break;   
                default:
                  Console.WriteLine("Fehlerhafte Eingabe!");
                  Menue();
                  break;
              }
            } while (!Ende);                     
        }

    }
}


mfg

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt


Kha - Do 04.10.07 22:34

user profile iconsepp_a_u hat folgendes geschrieben:
tut mir ja herzlich leid, aber der code funktioniert bei mir absolut nicht!
Erkläre dich bitte einmal etwas näher, bei mir funktioniert er... Und die Antwort auf deine letzte Frage ist ebenfalls in ihm enthalten.


sepp_a_u - Do 04.10.07 22:40

user profile iconKhabarakh hat folgendes geschrieben:
user profile iconsepp_a_u hat folgendes geschrieben:
tut mir ja herzlich leid, aber der code funktioniert bei mir absolut nicht!
Erkläre dich bitte einmal etwas näher, bei mir funktioniert er... Und die Antwort auf deine letzte Frage ist ebenfalls in ihm enthalten.



bei mir kommen halt etliche fehlermeldungen. und bevor ich jetzt mein ganzes prog auseinanderreiße mache ich lieber so weiter.
hab teilweise deine ideen umgesetzt (bool variable weg, string variable weg usw)

es fehlt mir jetzt nur noch, dass struktur in die ein-bzw ausgabe hineingebracht wird. das mit der eingabe ist auch behoben, d.h. es werden alle fehler abgefangen

mfg


Narses - Do 04.10.07 22:44

Hallo user profile iconsepp_a_u,

bitte erstelle für jede deiner Fragen ein separates Topic, da die Diskussion mehrerer Fragen in einem Topic für gewöhnlich für Verwirrung und Durcheinander sorgt. Daher:

*geschlossen*


cu
Narses