Berichtigung meines Progs



  • Hola,
    Ich hab da ein Problem mit einer Aufgabe.Bin ein echter Neuling auf dem Gebiet.
    Hier mal die Aufgabe:

    Schreiben Sie ein C# - Programm zur Verwaltung Ihrer Bücher.
    Das Programm benötigt dazu die Klasse Book, welche ein Buch in Ihrem Bücherregal
    repräsentiert. Diese Klasse hat die Attribute Title, Author, ISBN, und
    eine Liste von Stichworten zum schnellen Auffinden des Buches. Diese Stichwortliste mit dem Namen Headwords soll als Array mit maximal 5 Einträgen
    implementiert werden.
    Implementieren Sie folgende 4 Methoden:
    - void SetAttributes - Setzten der Attribute Title, Author, ISBN
    - bool InsertHeadword - Trägt ein neues Stichwort in das Array ein, falls
    noch Platz ist. Die Methode gibt true zurück, wenn das Stichwort eingef
    ügt werden konnte, anderenfalls gibt sie false zurück.
    - bool SearchHeadword - Sucht ein übergebenes Stichwort im Array und
    gibt true zurück, falls das Stichwort gefunden wurde.Wenn das Stichwort
    nicht gefunden wurde, gibt die Methode false zurück.
    - void Print - gibt alle Daten zu einem Buch in folgender Form aus:
    Autor: ...
    Titel: ...
    ISBN: ...
    Stichworte: ...
    Leiten Sie von der Klasse Book eine Klasse Bookshelf ab. Diese soll in einer
    Liste die Bücher verwalten. Sie benötigt noch die folgenden Attribute:
    Count - Gesamtzahl der abgelegten Bücher
    BList - Verweis auf die Bücherliste
    Implementieren Sie weiterhin noch die Methoden:
    - void InsertBook - Fügt ein Buch in die Liste ein, egal ob am Anfang
    oder am Ende der Liste)
    - void SearchBook - Sucht alle Bücher zu einem übergebenen Stichwort
    und gibt die zugehörigen Daten zu jedem gefundenen Buch auf der Console
    aus
    Verwenden Sie folgende Main-Methode(siehe Programm) und senden Sie diese zusammen mit Ihren Klassen als lau ffähiges Programm ein.

    Hier mal mein Ansatz(nicht schimpfen wenn ich noch weit an der Lösung vorbeibin :-D)Wäre echt nett wenn ihr es mal berichtigt bzw. Ansätze aufzeigt.

    using System;
    namespace test
    {
    class Book
    {
    public string Title;
    public string Author;
    public double ISBN;
    public string Headwords [5]= new string ();
    public int next;
    
    public void SetAttributes (string a, string b, double c)
    {
    this.Titel=a;
    this.Author=b;
    this.ISBN=c;
    }
    public bool InsertHeadword (string g)
    { 
    int i=0;
    if(i<5)
     this.Headwords[i]=g;
     i=i+1;
     return true;
    else
     return false;
    }
    public bool SearchHeadword (string g)
    {
    int j=0;
    while(j<5)
     {if (this.Headwords[i]==g)
        return true;
      else
        return false;
    }
    
    public void Print ()
    {  
    Console.WriteLine("Autor: {0}", this.Author);
    Console.WriteLine("Titel: {0}", this.Title);
    Console.WriteLine("Autor: {0}", this.ISBN);
    Console.WriteLine("Titel: {0}", this.Headwords);
    }
    }
    
    class bookshelf : Book
    {
    bookshelf Liste= new bookshelf();
    public int Count=0;
    Liste Blist;
    
    public void InsertBook (string g)
    {
    this.Liste.Book=g;
    Liste=Liste.next;
    Count=Count+1;
    }
    void SearchBook (string g)
    {
    int l=0;
    while(l<Count)
     {if(g==Liste.Book.Headwords)
         Liste.Book.print();
         l=l+1;
    	 Liste=Liste.next;
     }
    }
    }
    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 Bucher mit diesem Stichwort gefunden");
    }
    }
    


  • Hallo,
    ich hab nur mal kurz drüber geschaut, aber ein paar Dinge fallen jetzt schon auf.
    Zum Beispiel die ISBN, du hast sie als double Variable definiert - bekommst den wert im Hauptprogramm allerdings als string übergeben.
    Entweder du änderst ISBN ebenso in string um oder du benutzt sowas, wie die Funktion Double.Parse(), die das dann umwandelt.

    Da die ISBN Nummer aber keine Kommastellen hat solltest du das eher so abändern:
    public int ISBN;

    public void SetAttributes (string a, string b, string c)
    {
    this.Titel=a;
    this.Author=b;
    this.ISBN=Int32.Parse(c);
    }

    ausprobiert hab ichs allerdings nicht. Wenn du mehr Hilfe haben möchtest rate ich dir aber, dass du morgen einfach mal so ab 14 Uhr in den PC Pool kommst und dich da dran setzt. Da bist du sicher nicht allein 😉



  • 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


Anmelden zum Antworten