Autor Beitrag
AccessDenied
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 29.12.15 15:10 
Hallo zusammen,

ich weiß nicht, ob meine Frage hier richtig ist oder ob das nicht passt. Wir müssen für die Schule eine Personenverwaltung in C# als Konsolenanwendung schreiben. Das lustige ist nur, dass wir nie wirklich was zu dem Thema gemacht haben und ich dementsprechend ziemlich ratlos bin wie ich das umsetzen kann.

Ich bin aktuell soweit, dass man ein Menü hat wo man wählen kann, was man machen möchte. Quasi:
Geben Sie 1 ein für Person anlegen, 2 für Personen verwalten und 3 für Programm beenden.


Jetzt hänge ich allerdings an den folgenden Punkten:

Person anlegen. Wie muss ich es machen, dass ich z.B.: Vorname, Nachname und Geburtsdatum eingebe und dies dann in einer CSV speichern kann?
Wie kann ich diese CSV Datei wieder anzeigen lassen in der Konsole?
Wie kann ich Daten darin bearbeiten und wie kann ich diese löschen?



Kann mir da jemand Code Beispiele für geben, wie man das realisieren kann?
Ich bin echt verzweifelt ...


Gruß
AccessDenied


P.S. Ich möchte kein fertiges Programm oder ähnliches haben!
Bitte keine Kommentare wie: Wenn ihr das noch nie gemacht habt, dann sollte man da auch nicht einfach losprogrammieren. Ich weiß das, aber Fakt ist, wir haben nicht so viel C# gemacht bisher..


Moderiert von user profile iconTh69: Topic aus C# - Die Sprache verschoben am Sa 02.01.2016 um 14:31
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 29.12.15 15:27 
a.) Ignoriere das speichern in eine Datei erstmal.
b.) Schreibe dir eine Klasse die alle Daten einer Person enthält (Name, Geschlecht et.)
c.) Schreibe dein Programm so das es eine Liste der in b.) definierten Klasse verwalten kann (anlegen, bearbeiten etc.)
d.) jetzt überlege dir wie du die Liste der Personen in eine Datei speicherst (.Net hat da viele Standardmöglichkeiten, wenn es nicht gerade csv sondern was aktuelleres sein soll ist das relativ einfach)
Csharp-programmierer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Di 29.12.15 19:30 
Ich würde eine Textdatei (.txt) verwenden und eine Klasse anlegen, welche folgenden Code hat:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
public void Speichern(string Name, string Nachname, string Alter, string Straße //...)
{
string defaultPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Personenverwaltung");
// du erstellst einen String, der mit dem Systempfad "Desktop" und dem Namen deiner Anwendung kombiniert wird.
string HauptPfad = Path.Combine(defaultPfad, "So wie die Datei heißen soll.txt");
//hier hast du einen String, mit einem Pfad, der auch den Dateinamen (in den Gänsefüßen) enthält.

  using (StreamWriter streamWriter = new StreamWriter(HauptPfad))
  {
    //du erstellt sozusagen eine Schreibmaschine, welche die Daten in eine Datei speichert
    streamWriter.WriteLine(Name);
    streamWriter.WriteLine(Nachname);
    streamWriter.WriteLine(Alter);
    streamWriter.WriteLine(Straße);
    //die "Schreibmaschine schreibt nun eine Zeile mit die Daten aus den Parametern.
    streamWriter.Close();  //nun schließt du den Stream
  }
}


Angenommen die Klasse heißt Datenaustausch dann schreibst du in den Konsolencode:
ausblenden C#-Quelltext
1:
2:
3:
Datenaustausch daten = new Datenaustausch();
//du hast nun ein Objekt von der Klasse [b]Datenaustausch[/b]
daten.Speichern(Console.ReadLine(), Console.ReadLine(), Console.ReadLine(), Console.ReadLine());


Ich hoffe, ich konnte dir helfen :)
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Di 29.12.15 20:04 
Ich würde es mir beim Speichern ganz einfach machen und einfach die Liste an Person-Objekten sowie die Datei durch die XmlSerializer-Klasse jagen.

Wenn die Datenstrukturen nicht zu komplex werden, dann regelt die das Speichern und Lesen int bzw. aus einer Datei komplett eigenständig.
Und am Ende kommt XML raus. Dasist vielleicht nicht so hübsch zu lesen, aber es ist flexibel und wozu muss man die Datei hübsch lesen können, wenn es doch die Anwendung dafür gibt?


Aber wie Ralf schon sagt: Am besten erst zum Schluss an's Speichern denken.
Der Kram davor ist viel wichtiger, niemand interessiert sich dafür, dass er die Daten in eine Datei schreiben kann, wenn das Bearbeiten in der Anwendung nicht funktioniert :D


Was das ein- bzw. ausgeben der Daten in der Konsole angeht:
Da könntest Du z.B. eine Methode zum neu einlesen einer Person schreiben, die dann für jede Eigenschaft (Name, Geburtsdatum, etc.) extra mit Console.WriteLine um die Eingabe der Daten bittet und dann mit Console.ReadLine dieselben entgegen nimmt.
Dazu eine zweite Methode, die eine Liste an Eigenschaften anbietet und der Nutzer kann dann auswählen, was er ändern will.

Das Hinzufügen einer neuen Person ist damit geritzt.
Das Bearbeiten einer vorhandenen Person braucht davor noch einen Zwischenschritt: Es muss gefragt werden, welche Person geändert werden soll.


Im Prinzip könnte es z.B. diese Komponenten haben:

Klasse: Person
+ Name
+ Birthdate
...

Und diese Methoden in der Program.cs:

ausblenden C#-Quelltext
1:
2:
3:
4:
Person CreateNewPerson()
Person SelectPerson()
void ModifyPerson()
void DeletePerson()


Die CreatePerson() erzeugt zusammen mit dem User den neuen Eintrag und gibt ihn zurück.
Die ShowAllPeople() alle Personen an. Dann fragt sie den User (z.B. über den Index) welche Person gewählt werden soll.
Die ModifyPerson() fragt erst mit ShowAllPeople() nach, welche Person geändert werden soll und fragt dann, welche Eigenschaft welchen neuen Wert erhalten soll.
Die DeletePerson() fragt auch mit ShowAllPeople() nach, allerdings löscht sie die gewählte Person danach.
Die einzelnen Methoden sind über ein einfaches if anhand der zuvor gewählten Eingabe erreichbar.

Die Personen selber werden als Liste gesammelt.

Danach kannst Du dann Methoden zum Speichern und Laden hinzufügen, die beim Start die Personen Laden und in die Liste füllen bzw. beim Schließen die vorhandene Datei mit der aktuellen Liste überschreiben.


Zuletzt bearbeitet von Palladin007 am Di 29.12.15 20:06, insgesamt 1-mal bearbeitet
Stundenplan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128
Erhaltene Danke: 32

Win 7
Delphi 7 Pers., C# (VS 2010 Express)
BeitragVerfasst: Di 29.12.15 20:04 
user profile iconCsharp-programmierer Das wird aber recht umständlich mit all den Einzel-Parametern. Das Laden wird noch schwieriger. Deshalb lieber eine Klasse Person o. ä. anlegen, welche all diese Daten kapselt, sodass man am Ende bloß noch die Instanzen in eine Datei schreiben muss.

(EDIT: ...wie user profile iconPalladin007 schon ausführlich beschreibt.)

Für diesen Beitrag haben gedankt: Csharp-programmierer
Csharp-programmierer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Di 29.12.15 21:34 
Und deswegen bevorzuge ich Windows Forms Anwendungen --> benutzerfreundlich, einfach, unkompliziert, grafisch ;)
AccessDenied Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 29.12.15 21:57 
Hallo zusammen,

schonmal Danke für Eure Antworten, ich werde mir das morgen nochmal genauer ansehen und dann mal was ausprobieren. Irgendwie muss ich das ja hinbekommen..
Mega nervig, dass man was machen muss, obwohl man es nicht mal richtig beigebracht bekommen hat -.-


@Csharp-programmierer: Ich würde auch lieber mit Windows Forms Anwendungen arbeiten, da hab ich nämlich noch genug Code Beispiele, aber Lehrer will halt Konsolenanwendung :(
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 29.12.15 22:29 
Zitat:
Mega nervig, dass man was machen muss, obwohl man es nicht mal richtig beigebracht bekommen hat -.-


Ähm. Du musst jetzt gaaaaanz stark sein. Es wird in deinem Leben der Normalfall sein das du dir Dinge weitestgehend selbst bei bringst ;) Das kann (und bestenfalls sollte) eine Menge Spass machen.

Zitat:
@Csharp-programmierer: Ich würde auch lieber mit Windows Forms Anwendungen arbeiten, da hab ich nämlich noch genug Code Beispiele, aber Lehrer will halt Konsolenanwendung :(


Das mag jetzt von jemanden der es schon kann ziemlich neunmal klug rüberkommen ich sags aber trotzdem ;) Es ist furchtbar egal für den Großteil deiner Anwendung ob es Konsole, Winforms, Web oder sonstwas ist. Es ist eins der vielen Teilproblemchen die eine ganze Anwendung ausmachen. Diese Problemchen auseinander zuhalten so das man sie möglichst unabhängig lösen kann ist ein große Stärke die man sich am besten so früh wie möglich aneignet. So wie ich dir geraten habe erstmal das Speichern/Laden zu ignorieren und dich um andere Probleme zu kümmern könnte ich dir auch raten erstmal die UI zu ignorieren. Also einfach ein Klassenmodel zu erstellen das Daten verwaltet kann und später dann unabhängig davon die UI davor zu setzen und laden/speichern zu ergänzen. Es sind eigentlich völlig unabhängige Probleme (du hast es vermutlich nur noch nicht erkannt). Ich würde dir empfehlen einfach mal loszulegen und und uns dann mit konkreteren Problemen zu behelligen. Wir helfen dir dann gern weiter. Im Moment wo du nix in Händen hast ist da aber schwer sinnvoll zu beraten denn wir haben nur eine grobe Vorstellung deines Kenntnisstands und kennen dich noch zuwenig um eine Idee zu haben an welcher Stelle man dich am besten in die richtige Richtung schubst ;)

Für diesen Beitrag haben gedankt: Csharp-programmierer
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Di 29.12.15 22:45 
Wenn Du nicht nur programmierst, weil der Lehrer es will, sondern weil Du Spaß dran hast, würde ich die Forms-Anwendung bauen.
Vorausgesetzt, die Zeit reicht :D

Wenn dein Lehrer das nicht akzeptiert, ist er erstens ein mieser Lehrer und kriegt zweitens die Konsolen-Anwendung an den Kopf geworfen nachgeliefert.
Ich denke aber, dass doch so einige Lehrer auf dieser Welt das würdigen. Wäre ich Lehrer, ich wäre begeistert :D

Behalte aber im Hinterkopf, dass Du jetzt zwar Beispiele für Forms hast, die Programmierung mit der Konsole aber doch bedeutend einfacher ist.
Es mag sein, dass die ziemlich unhandlich dabei ist, aber Du must vergleichsweise nur wenig wissen und beachten um ein lauffähiges Programm zu entwickeln.



Als kleiner Hinweis noch:
Wenn Du noch neu bist, würde ich zu WPF tendieren.
Vielleicht rupft mich jetzt der Eine oder Andere, weil ich einem Anfänger (Tut mir Leid, sollte ich das falsch deuten) WPF empfehle, allerdings gibt es immer noch den Designer und wenn Du mit dem arbeitest, sollte es ungefähr ähnlich laufen, wie mit Windows Forms.
Der Unterschied ist aber, dass Du potentiell viel flexibler in der UI-Gestaltung bist, mit WPF aktuell bleibst (Forms ist eingestellt) und einige Features hast, die Du (mit etwas Vorkenntniss) lieben wirst :D
Außerdem kann ich dann mit helfen :D Mit WinForms hab ich vor Ewigkeiten mal etwas rum gespielt und dann komplett begraben.




Zitat:
Mega nervig, dass man was machen muss, obwohl man es nicht mal richtig beigebracht bekommen hat -.-

Als kleines Beispiel von mir: Ich habe vor 5 Jahren angefangen und seit dem praktisch alles selber gelernt.
Nun bin ich seit bald 3 Jahren in der Ausbildung und sollte eigentlich Anwendungsentwicklung lernen, geändert hat sich aber nichts.
Und in der Berufsschule kratzen wir das Minimum an, sodass meine Mitschüler jetzt vor einem ähnlichen Problem stehen: Sie sollen eine komplette Software (Mit Datenbank, Oberfläche, Office-Anbindung, etc.) entwickeln, tatsächliches Vorwissen wurde aber nicht geliefert.

Was ich damit sagen will:
Sei froh, dass Du im Unterricht tatsächlich was sinnvolles machst und halbwegs zaghaft an das Thema heran geführt wirst. Es geht noch extremer - viieel extremer.
Außerdem ist das gut so. In der informatik wirst Du immer sehr viel selbstständig lernen müssen, je früher Du das lernst, desto besser. Außerdem mögen das Arbeitgeber :D
Das gilt übrigens nicht nur für die Informatik, da ist es nur besonders deutlich ^^

Für diesen Beitrag haben gedankt: Csharp-programmierer
AccessDenied Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Sa 02.01.16 14:58 
Hallo nochmal,

habe leider erst jetzt Zeit gefunden mich nochmal dran zu setzen und alles durchzulesen und dann hoffentlich mit dem Programmieren anzufangen.

Also:

Das was csharp-programmierer geschrieben hat mit dem anlegen der Person und speichern in einer Textdatei habe ich soweit verstanden. Jetzt wüsste ich aber nicht, wie ich da wieder Personen anzeigen, bearbeiten und löschen kann.


Das was Palladin007 geschrieben hat .. da fehlt mir einfach ein Code Beispiel. Ansonsten hört sich das ja auch ziemlich nach dem an, was ich brauche.

user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Zitat:

Ähm. Du musst jetzt gaaaaanz stark sein. Es wird in deinem Leben der Normalfall sein das du dir Dinge weitestgehend selbst bei bringst ;) Das kann (und bestenfalls sollte) eine Menge Spass machen.

Ja ich weiß .. aber ich bin eigentlich Fachinformatiker für Systemintegration und habe mit Entwicklung so gar nichts zu tun auf der Arbeit, deswegen fällt es mir schon schwer mich dafür zu begeistern.. :D


Übrigens - Ja man kann mich in C# als Anfänger bezeichnen xD
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Sa 02.01.16 15:21 
Ein Fachinformatiker muss alles können, einziger Unterschied ist eine leicht unterschiedliche Spezialisierung.
Ich (Fachinformatiker Anwendungsentwicklung) könnte vermutlich genauso als Systemintegrator arbeiten, wie Du als Anwendungsentwickler.
Abgesehen davon ist das in der Berufssgruppe durchaus wichtig.


Code-Beispiel:

ausblenden volle Höhe 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:
public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime BirthDate { get; set; }
}

private static void ShowPerson(Person person)
{
    Console.WriteLine(person.Id);
    Console.WriteLine(person.FirstName);
    Console.WriteLine(person.LastName);
    Console.WriteLine(person.BirthDate);
}

private static void ShowPeople(IEnumerable<Person> people)
{
    foreach (var person in people)
    {
        Console.WriteLine("----------");
        ShowPerson(person);
    }
}

private static void ModifyPerson(Person person)
{
    Console.Write("Id: ");
    var idString = Console.ReadLine();
    int id;
    if (int.TryParse(idString, out id))
        person.Id = id;

    Console.Write("Vorname: ");
    person.FirstName = Console.ReadLine();

    // ...
}

private static Person CreatePerson()
{
    var person = new Person();
    ModifyPerson(person);
    return person;
}


Um es mal ganz einfach zu halten.
Ich würde da noch ein entsprechendes Fehlerhandling mit einbauen, speziell bei der ID, weil das eben ein int ist.
Das würde dann so aus sehen, dass eine Schleiße läuft, die so lange nach der ID fragt, bis eine gültige Zahl oder nichts eingegeben wurde.
Das Gleiche beim Geburtsdatum, das muss auch erst geparst werden.

Wer Fehler findet, darf sie behalten :D
Ich hab das frei Hand im Browser getippt, also pscht :D
AccessDenied Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Sa 02.01.16 15:52 
Blöde Frage:

Was von deinem Code kommt jetzt worein? Alles in die Klasse "Person"?
Und wie kann ich dann von meinem Hauptprogramm auf die Klasse zugreifen?


Es nervt mich, dass ich das nicht kann und auch nicht so richtig verstehe -.-
Das muss ja nicht mal perfekt sein ..
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Sa 02.01.16 16:21 
Ich kann dir nur empfehlen einfach mal anzufangen. Die Frage nach "was wohin gehört" führt uns letztlich nur dazu das wir dir ein fertiges Kochrezept liefern das du nachkochst. Dadurch lernst du aber nicht koche... äh programmieren.

Als hilfreichen kleinen Einstieg, nimm dir die Person Klasse so wie von Paladin007 gezeigt oder schreib die eine äquivalente Entsprechung mit den Personendaten von denen du meinst das du sie brauchst und versuche in deiner Konsolenanwendung eine Instanz dieser Klasse diese zu befüllen. Diese Klasse ist ja ein ganz simples Ding so wie sie jetzt schon aussieht sie wird aber zentral sein für die Anwendung und dir helfen die verschiedenen Teilprobleme zu isolieren und einzeln lösen zu können (was einfacher ist als sich allen Problemen gleichzeitig stellen zu wollen).

Dann wenn du solch einen Code hast und nicht weiterweist komm zu uns zurück zeig was du dann hast und wir werden versuchen dir weiterzuhelfen. Wir können dich aber nicht über die Schwelle tragen. Das inertiale musst du selber liefern ansonsten programmierst du unsere Lösung nach und hilfreich/lehrreich ist nur wen du deine eigene anschiebst.
AccessDenied Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Sa 02.01.16 18:27 
Ja mein Problem ist folgendes:

Ich habe jetzt die Klasse Person mit folgendem Inhalt:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
public class Person

    public int ID { get; set; }
    public string Vorname { get; set; }
    public string Nachname { get; set; }
}

Soo und mein Hauptprogramm sieht so aus:
ausblenden volle Höhe 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:
var menu2 = Console.ReadLine();
int auswahl2 = 0;

if (int.TryParse(menu2, out auswahl2))
{
    switch (auswahl2)
    {
        case 1:
            Console.Clear();
            Console.Title = "Personen anzeigen";
            Console.WriteLine("Hier werden die gespeicherten Personen angezeigt");
            Console.ReadLine();
            break;

        case 2:
            Console.Clear();
            Console.Title = "Personen bearbeiten";
            Console.WriteLine("Hier können Personen bearbeitet werden");
            Console.ReadLine();
            break;

        case 3:
            Console.Clear();
            Console.Title = "Personen löschen";
            Console.WriteLine("Hier können Personen gelöscht werden");
            Console.ReadLine();
            break;
        }
    }
    break;

    case 3:
        Environment.Exit(0);
        break;

    default:

Ist jetzt nur ein Ausschnitt, hab nicht den ganzen Code kopiert. So und genau da verstehe ich nicht, wie ich es hinbekomme, dass ich die Eingaben unter Case 1 angezeigt bekomme.
Den Code von Paladin007 kann ich ja nicht einfach in den Case reinschreiben, da bekomm ich nen Haufen Fehler.

Da wo steht:
ausblenden C#-Quelltext
1:
2:
3:
"Console.WriteLine("Hier werden die gespeicherten Personen angezeigt");"
"Console.WriteLine("Hier können Personen bearbeitet werden");"
"Console.WriteLine("Hier können Personen gelöscht werden");"

Der Text ist nur als Platzhalter aktuell.. genau da sollen ja die Funktionen hin.

Ich glaub ich bin ein hoffnungsloser Fall ..

Moderiert von user profile iconTh69: Quote- durch C#-Tags ersetzt
Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Sa 02.01.16 18:35 
Person ist erstmal eine einzelne Person. Wenn du mehrere verwalten willst brauchst du dann eine Menge/Liste von diesen Klassen. Als Basisklasse für diese Liste biete sich aus dem Framework die List<T> Klasse an. Wenn du dich fragst was da bei der Klasse das T zu bedeuten hat lies kurz nach was Generics sind. Dass muss du nicht komplett verstehen hilft aber das Beispiel der verlinkten Hilfe zu List<T> zu deuten. In dem Beispiel siehst du wie eine Liste von Part Klassen verwaltet werden. Es ist nur ein wenig Anpassungsleistungs nötig um die Lösung für die dortige Part Klasse ähnlich für die Person Klasse bei dir anzuwenden.
AccessDenied Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Sa 02.01.16 19:29 
Also ich bin erstmal froh, wenn ich eine Person erzeugen, speichern, bearbeiten und löschen kann...

Aber ehrlich gesagt, komm ich da heute nicht weiter. Ich mach morgen dran weiter, auch wenn ich keine Hoffnung habe, dass es morgen besser laufen wird. :(
Was sich mir einfach nicht erschließt ist, wie ich die ganzen Einzelteile an Code Beispielen in meinen Code integrieren kann, aber da muss ich halt morgen nochnal dran.

Danke auf jeden Fall für Eure bisherige Hilfe schonmal. :)
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Sa 02.01.16 21:00 
Zitat:
Was sich mir einfach nicht erschließt ist, wie ich die ganzen Einzelteile an Code Beispielen in meinen Code integrieren kann, aber da muss ich halt morgen nochnal dran.


Programmieren hat ganz wenig mit Lego zu tun. Man nimmt sich nicht Code und sucht dann die Stelle wo man den dranklickt. Code denn du findest oder hier gezeigt bekommt sind Beispiel die du verstehen solltest um dann ein Transferleistung zu erbringen das Verstandene/die Idee auch mit deinem Code in deiner Anwendung umzusetzen. Wenn du den Code von Paladin nicht verstehst wäre deine Aufgabe entweder a.) ihn zu ignorieren aus welchem Grund auch immer (unfug, zu advanced, am Thema vorbei etc.) oder b.) dich in den Zustand zu versetzen ihn zu verstehen (zum Beispiel ihn in ein ausführbares Stückchen Code zu packen um ihn zu debuggen). Debuggen ist da bei eine entscheidende Kompetenz. Code kann man meist besser verstehen wenn man ihn laufen sieht (Was was macht diese Codestelle wenn ich drüber steppe, wie verändert sich dabei der Inhalt der beteiligten Variablen etc.). Denn Code nicht zu verstehen und zu versuchen in irgendwo hinzupacken wird dich nirgendwo hinführen.
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Sa 02.01.16 23:01 
Was ich dir geschickt habe sind Methoden. Das, worin Du programmierst ist auch eine Methode, die Main-Methode. Dort startet das Programm.
Meine Methoden kannst Du da nicht einfach rein kopieren, Methoden liegen neben anderen Methoden und müssen extra aufgerufen werden. Dabei übergibst Du dann die Argumente, die die Methode verlangt.
Die ModifyPerson-Methode verlangt zum Beispiel ein Objekt vom Typ Person (Die Klasse Person stellt einen eigenen Typen da)
Wie das mit dem Aufruf geht, siehst Du in der CreatePerson-Methode. Die verlangt keine Parameter, gibt aber etwas zurück und in ihr passiert folgendes:
- Es wird ein neues Objekt vom Typ Person erzeugt und in eine Variable gelegt. Das geht mit dem new-Operator
- Es wird die ModifyPerson-Methode aufgerufen, sie bekommt das neu erstellte Objekt übergeben
- Es wird das neu erstellte Objekt zurück gegeben, das geht mit dem return-Operator.


Wenn Du dich fragst, was das var bedeutet:
Das ist ein Platzhalter für den Typ. Wenn der Compiler schon beim Programmieren weiß, was da für ein Typ drin sein wird, musst Du ihn nicht extra hin schreiben.
ausblenden C#-Quelltext
1:
var person = new Person();					

ist gleichbedeutend mit:
ausblenden C#-Quelltext
1:
Person person = new Person();					



Wenn Du dich fragst, was IEnumerable<Person> bedeutet:
Es gibt s.g. Interfaces. Das sind Schnittstellen, die definieren einige Inhalte, die jede Klasse haben muss. Diese Klasse implementieren dann das Interface.
Solche Interfaces können ebenfalls als Typ (wie die Klasse Person) verwendet werden. Du kannst dann an dem Objekt aber nur das nutzen, was das Interface beinhaltet.

ausblenden volle Höhe 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:
public interface IMyInterface
{
    void DoSomething();
}
public class MyClass : IMyInterface
{
    public void DoSomething()
    {
        Console.WriteLine("some crap");
    }
    public void DoSomethingElse()
    {
        Console.WriteLine("some other crap");
    }
}

// Die Nutzung der Klasse:

var myObject = new MyClass();
myObject.DoSomething(); // funzt
myObject.DoSomethingElse(); // funzt auch

// Wenn ich nun eine Methode haben, die ein Parameter mit dem Typ IMyInterface bekommt:

public void DoSomethingWithMyInterface(IMyInterface obj)
{
    obj.DoSomething(); // funzt
    obj.DoSomethingElse(); // Fehler
}

// Oder das:

IMyInterface myObject = new MyClass();
myObject.DoSomething(); // funzt
myObject.DoSomethingElse(); // Fehler


IEnumerable<T> ist dabei eine generisches Interface (siehe der Generics-Link von Ralf), das die meisten Klassen in .NET implementieren. List<T> ist eine solche Klasse.
Das Interface erlaubt es, dass ein Objekt in der foreach-Schleife genutzt werden kann. Diese beiden Beispiele sind funktionsfähig:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
public void DoSomething1(List<int> zahlen)
{
    foreach (var zahl in zahlen)
    {
        Console.WriteLine(zahl);
    }
}
public void DoSomething2(IEnumerable<int> zahlen)
{
    foreach (var zahl in zahlen)
    {
        Console.WriteLine(zahl);
    }
}


Ich nehme meistens IEnumerable<T>, wenn ich nur das brauche, da beim Aufruf dann egal ist, was ich der Methode übergebe, solange es IEnumerable<T> implementiert.
So erreiche ich Wiederverwendbarkeit, da die Klassen, die ich verwende, alle völlig verschieden sein können, sie müssen nur diese eine kleine Gemeinsamkeit haben.
Der Methode DoSomething2 kann ich z.B. genauso gut List<int> übergeben, während ein Array int[] genauso gut geht.


Was Du brauchst, ist irgendwo eine Liste, die die Personen enthalten kann.
Neben der Main-Methoden meine Methoden (und Andere, die Du brauchst), die dann auch etwas sinnvolles tun.
Im Programmablauf kannst Du dann bei jeder Funktion die Methoden aufrufen und verwendest dabei immer die gleiche Liste.



Ich hoffe, es ist jetzt etwas klarer.
Wenn noch konkrete Fragen zu dem sind, was ich geschrieben habe, dann halte damit nicht hinter dem Berg.


Wenn Du, Ralf, noch Anmerkungen hast, gerne her damit.
Du bist ein wenig länger hier vertreten und hast wohl deutlich mehr Erfahrung, wenn es darum geht, jemandem Objektorientiertes Programmieren zu erklären, einfach ist das ja nicht unbedingt :D
AccessDenied Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 13.01.16 12:16 
Hallo zusammen,

sorry das ich mich erst jetzt wieder melde.
Habe nun, nachdem ich mich mit ein paar Azubi-Kollegen dran gesetzt habe endlich was auf die Reihe bekommen.
Ok, wenn man den Code sieht, wird sich wahrscheinlich jeder denken: WTF .. aber egal. Für mich ist die hauptsache, dass alles so funktioniert wie ich es gern hätte und vorallendingen, dass ich den Code verstehe.


Ich kann den fertigen Code ja später mal hier reinkopieren, aber wie gesagt, sieht mega unschön aus und ist mega unstrukturiert. xD
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 13.01.16 12:43 
Zitat:
Ich kann den fertigen Code ja später mal hier reinkopieren, aber wie gesagt, sieht mega unschön aus und ist mega unstrukturiert. xD


Beim Lernen ist schlecht selbstgemacht besser als gut kopiert ;)
Wenn du Lust hast für ein wenig Kritik stell es ruhig hier rein. Du mußt aber mit der Kritik dann vorsichtig umgehen. Wir neigen dazu mit der Kritik/Hilfe oft am obere Ende anzusetzen.
Also Dinge zu kritisieren die eigentlich noch außer Reichweite sind wenn man gerade lernt und du eigentlich eher unter "nett mal gehört zu haben" verbuchen solltest anstatt daraus eine Handlungsanweisung abzuleiten.