Berichtigung meines Progs
-
Ich habe mir jetzt mal die Mühe gemacht und es vollständig funktionierend programmiert, sodass du einfach alles überschreiben kannst.
Nichtsdestotrotz weist du riesige Lücken auf, auf dem Stand auf dem ihr seid würde ich sagen, musst du wirklich dran arbeiten weil du sicherlich nicht jeden Tag jemanden wie mich findest der nichts zutun hat.
Und du solltest dir definitiv einen Compiler zulegen
using System; namespace test { class Book { private string Title; private string Author; private string ISBN; private string[] Headwords = new string[5]; public void SetAttributes(string a, string b, string c) { this.Title = a; this.Author = b; this.ISBN = c; } public bool InsertHeadword(string g) { for (int i = 0; i < 5; i++) { if (Headwords[i] == null || Headwords[i].Length == 0) { Headwords[i] = g; return true; } } return false; } public bool SearchHeadword(string g) { for (int i = 0; i < 5; i++) { if (Headwords[i] != null && Headwords[i].Length != 0 && Headwords[i] == g) { return true; } } return false; } public void Print() { Console.WriteLine("Autor: {0}", this.Author); Console.WriteLine("Titel: {0}", this.Title); Console.WriteLine("ISBN: {0}", this.ISBN); string tmpHeads = ""; if (Headwords[0] != null && Headwords[0] != "") tmpHeads = Headwords[0]; for (int i = 1; i < 5; i++) { if (Headwords[i] != null && Headwords[i] != "") tmpHeads += ", " + Headwords[i]; } Console.WriteLine("Stichworte: {0}", tmpHeads); } } class Bookshelf : Book { public System.Collections.Generic.List<Book> BList = new System.Collections.Generic.List<Book>(); public int Count { get { return BList.Count; } set { } } public void InsertBook(Book g) { this.BList.Add(g); } public bool SearchBooks(string g) { System.Collections.Generic.List<Book> tmp = new System.Collections.Generic.List<Book>(); ; for(int i = 0; i < this.Count; i++) { if (BList[i].SearchHeadword(g) == true) { tmp.Add(BList[i]); } } if (tmp.Count > 0) { for (int i = 0; i < tmp.Count; i++) { tmp[i].Print(); } return true; } else { return false; } } } class Program { public static void Main() { Bookshelf MyBooks = new Bookshelf(); Book MyBook; MyBook = new Book(); MyBook.SetAttributes("Jacob Grimm", "Grimms Maerchen", "215"); MyBook.InsertHeadword("Maerchen"); MyBook.InsertHeadword("gelesen"); MyBooks.InsertBook(MyBook); MyBook = new Book(); MyBook.SetAttributes("Agatha Christie", "Mord im Spiegel", "910"); MyBook.InsertHeadword("Krimi"); MyBook.InsertHeadword("gelesen"); MyBooks.InsertBook(MyBook); MyBook = new Book(); MyBook.SetAttributes("Manfred Backhaus", "Omas Apotheke", "503"); MyBook.InsertHeadword("Kraeuter"); MyBooks.InsertBook(MyBook); if (!MyBooks.SearchBooks("gelesen")) Console.WriteLine("Keine Bücher mit diesem Stichwort gefunden"); Console.ReadKey(); // Für Ergebnis } } }
-
Echt vielen lieben Dank,brauch jetzt aber erstmal Zeit um alles zu verstehen und deine ganzen Änderungen durchzugehen. Echt klasse aber
-
@Siraja:
Damit hast du seinem Lernfortschritt nicht wirklich geholfen. Vielmehr sollten wir hier Tips geben in welche Richtung er etwas zu machen hat, und nicht komplette Haushaufgaben erledigen. Auch wenn du Zeit und Langeweile hast, ist das für ihn nicht förderlich.
-
Firefighter schrieb:
@Siraja:
Damit hast du seinem Lernfortschritt nicht wirklich geholfen. Vielmehr sollten wir hier Tips geben in welche Richtung er etwas zu machen hat, und nicht komplette Haushaufgaben erledigen. Auch wenn du Zeit und Langeweile hast, ist das für ihn nicht förderlich.
Ja, sehe ich auch so.
@Bauko: wenigstens kannst du jetzt mal sehen, wie ein halbwegs vernünftig formatierter Code auszusehen hat. Du musst auch dringend an deiner Einrückung arbeiten. Wenn du einen neuen Scope (geschweifte Klammer) aufmachst, rücke einen Tab oder x Leerzeichen (aber bitte mehr als eins) nach rechts ein. Schließt du den Scope, gehst du auch mit der Einrückung wieder zurück. Nur so kann man auf Dauer und vor allem bei größeren Programmen den Überblick behalten. Es macht ja auch keinen Spaß, wenn man den eigenen Code nicht mehr durchschaut, weil man 12 geschweifte Klammern untereinander auf der gleichen Ebene notiert hat und ständig rätselt, welche schließende Klammer jetzt nochmal zu welcher öffnenden gehört.
-
BTW, wieso leitet man das Regal von Buch ab? Was soll denn das? Welche Eigenschaften haben beide Klassen gemeinsam? Das vorliegende Beispiel wird doch nicht als Kompositum verwendet. WTF?
-
Und das
set { }
ist doch auch Mist oder!?
Man kann Count setzen, merkt aber nicht, dass dabei gar nix passiert.
Besser set ganz weg lassen.
-
Weiterhin würde ich die SetAttributes Methode rausnehmen, wozu gibts sonst Konstruktor und die kannst du hier auch gut anwenden?!
Eventuell sollte die Print Methode keine direkten CW aufrufe beinhalten, da würde ich lieber auf einen StringBuilder zurückgreifen und mir alles zusammenbauen und dann den string aus dem Stringbuilder via stringBuilderObject.ToString() rausholen.
Schließlich soll eine Klasse ja meistens "Unagbhängig" von iher "Umgebung" arbeiten können. So hast du den vorteil das wenn du die Klasse mal in einem Windows Forms projekt nutzt oder woanders, du nicht die Print Methode umbauen musst, weil du bekommst ja einen String zurück
-
Wenn er sich es durchliest und versteht hab ich ihm doch geholfen, es gibt unterschiedliche Typen von Menschen: lerning by doing, nur lesen, aufschreiben... ausserdem ist es bei der Menge an Fehlern recht schwierig als Anfänger alles zu verbessern, man erkennt nur schwer Fortschritte bei den Compilerfehlern.
Ich kann das Set {} bei mir nicht weglassen, VS05 meckert.
Man kann sicherlich vieles daran ändern und optimieren aber Aufgabenstellung ist Aufgabenstellung. Ich kann nur aus persönlicher Erfahrung sagen Lehrer sehen das teilweise sehr eng, nach meiner Lehrerin habe ich auch einen falschen "Programmierstil" wenn ich in einer Klasse eine Methode mit Parametern erstelle und diese einfach direkt benutze, anstatt die Parameter in private Variablen innerhalb der Klasse zu packen und mit den privaten Variablen dann weiter arbeiten, obwohl ich jene danach nicht mehr brauche.
-
Siraja schrieb:
Ich kann das Set {} bei mir nicht weglassen, VS05 meckert.
Mmmh? Das ging aber doch eigentlich schon immer.
Diese ganzen Abkürzungen gehen erst seit 3.0 aber das set muss man doch weglassen können!
Was meckert er denn?
-
hm oh meckert doch nicht ^^ hab mich wohl verguckt dann ist das natürlich wirklich überflüssig