Laden...

CD/DVD Bibliothek

Erstellt von R3turnz vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.800 Views
Thema geschlossen
R
R3turnz Themenstarter:in
125 Beiträge seit 2016
vor 8 Jahren
CD/DVD Bibliothek

Hallo,
ich habe mich jetzt an die Bibliothek gemacht, habe bisjetzt:
-Grundlegende Funktionen(Erstellen,Löschen,Anzeigen)
geplant sind:
-Linq Abfragen
-Schauspieler/Track's hinzufügen
Das bisherige Projekt:
Programm.cs:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace CD_DVD_Libary
{
    class Program
    {
        static void Main(string[] args)
        {
            var appDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "DVDCDLibary");
            var client = new CDDVDLibaryClient();
            client.Proccess(appDir);
        }
    }
}


CDDVVDLibaryClient.cs:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace CD_DVD_Libary
{
    class CDDVDLibaryClient
    {
        private CDDVDLibary libary;
        public void Proccess(string applicationDirectory)
        {
            Console.WriteLine("CDDVDLibary V.0.5");
            libary = new CDDVDLibary(applicationDirectory);
            if (Directory.Exists(applicationDirectory))
            {
                Console.WriteLine("Loaded Program Directory.");
            }
            else
            {
                Console.Write("Creating Program Directory...");
                Directory.CreateDirectory(applicationDirectory);
                Console.WriteLine("Done...");
            }
            bool stop = false;
            do
            {
               
                Console.WriteLine("Main Menu:Add/Remove/Exit");
                string cmd = Console.ReadLine();
                if(cmd.ToUpper() == "ADD")
                {
                    Add();
                }
                else if(cmd.ToUpper() == "REMOVE")
                {
                    Remove();
                }
                else if(cmd.ToUpper() ==  "Exit")
                {
                    stop = true;
                }
                else if(cmd.ToUpper() == "Print")
                {
                    libary.Print();
                }
                else
                {
                    Console.WriteLine("Try again...");
                }
                Console.Clear();
            } while (!stop);
            Console.WriteLine("\nSaving...");
            libary.Save();
            Console.ReadKey();
        }
        private void Add()
        {
            IMedium medium;
            Console.Write("What shoud be added?\n0.DVD\n1.CD\nChoose:");
            string input = Console.ReadLine();
            if (input == "0")
            {
                medium = InputDVD();
            }
            else if (input == "1")
            {
                medium = InputCD();
            }
            else
            {
                Console.WriteLine("Can not validate your input.");
                medium = null;
            }
            libary.Mediums.Add(medium);
            Console.WriteLine("Added.");
        }
        private void Remove()
        {
            IMedium toRemove = GetMedium();
            libary.Mediums.Remove(toRemove);
            Console.WriteLine("Removed.");
        }
        private CD InputCD()
        {
            CD output = null;
            string name;
            int length;
            int releaseYear;
            try
            {
                Console.Write("Name:");
                name = Console.ReadLine();
                Console.Write("Length:");
                length = int.Parse(Console.ReadLine());
                Console.WriteLine("Release Year:");
                releaseYear = int.Parse(Console.ReadLine());
                output = new CD(name, length, releaseYear);
            }
            catch
            {
                Console.WriteLine("An Input Error occured.");
            }
            return output;
        }
        private DVD InputDVD()
        {
            DVD output = null;
            string name;
            int length;
            int releaseYear;
            try
            {
                Console.Write("Name:");
                name = Console.ReadLine();
                Console.Write("Length:");
                length = int.Parse(Console.ReadLine());
                Console.Write("Release Year:");
                releaseYear = int.Parse(Console.ReadLine());
                output = new DVD(name, length, releaseYear);
            }
            catch
            {
                Console.WriteLine("An Input Error occured.");
            }
            return output;
        }
        public IMedium GetMedium()
        {
            libary.Print();
            IMedium output;
            Console.Write("Choose:");
            string input = Console.ReadLine();
            Validator validator = new Validator();
            if(validator.ValidateIndex(input, libary.Mediums.Count - 1))
            {
                int validatedinput = int.Parse(input);
                output = libary.Mediums[validatedinput];
            }
            else
            {
                output = null;
                Console.WriteLine("An Validation error occured.");
            }
            return output;
        }
    }
}


CDDVDLibary.cs:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CD_DVD_Libary
{
    class CDDVDLibary
    {
        private string _applicationDirectory;

        public string ApplicationDirectory
        {
            get { return _applicationDirectory; }
            set { _applicationDirectory = value; }
        }
        public  List<IMedium> Mediums;

        public CDDVDLibary(string applicationdirectory)
        {
            this.ApplicationDirectory = applicationdirectory;
        }
        public void Print()
        {
            for(int i = 0; i < Mediums.Count - 1;i++)
            {
                Console.WriteLine(i+"."+Mediums[i].Name);
            }
        }
        public void Save()
        {

        }
        public void Load()
        {

        }

    }
}


Validator.cs:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CD_DVD_Libary
{
    class Validator
    {
        public bool ValidateIndex(string value,int arrayLength)
        {
            int output = 0;
            if (!int.TryParse(value,out output) )
            {
                return false;
            }

            if(output <= arrayLength && output >= 0)
            {
                return true;
            }
            return false;
        }

    }
}


IMedium.cs:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CD_DVD_Libary
{
    interface IMedium
    {
        
        string Name { get; set; }
        int Length { get; set; }
        int ReleaseYear { get; set; }
        
    }
}


CD.cs:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CD_DVD_Libary
{
   public class CD : IMedium
    {
        private string _name;

        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }

        private int _length;

        public int Length
        {
            get { return _length; }
            set { _length = value; }
        }

        private int _releaseYear;

        public int ReleaseYear
        {
            get { return _releaseYear; }
            set { _releaseYear = value; }
        }
        
        public List<Track> Tracks = new List<Track>();

        public CD(string name,int length,int realeaseYear)
        {
            this.Name = name;
            this.Length = length;
            this.ReleaseYear = realeaseYear;
        }


        
    }
}


DVD.cs:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CD_DVD_Libary
{
    class DVD : IMedium
    {
        private string _name;

        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
        private int _length;

        public int Length
        {
            get { return _length; }
            set { _length = value; }
        }

        private int _releaseYear;

        public int ReleaseYear
        {
            get { return _releaseYear; }
            set { _releaseYear = value; }
        }
        public List<Actor> actors = new List<Actor>();

        public DVD(string name,int length,int releaseYear)
        {
            this.Name = name;
            this.Length = length;
            this.ReleaseYear = releaseYear;
        }


    }
}


IAttribut.cs:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CD_DVD_Libary
{
    interface IAttribut
    {
        string Name { get; set; }



    }
}


Actor.cs:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CD_DVD_Libary
{
   public class Actor : IAttribut
    {
        private string _name;

        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
        private int _age;

        public int Age
        {
            get { return _age; }
            set { _age = value; }
        }

        public Actor(string name,int age)
            {
            this.Name = name;
            this.Age = age;
        }
    
    public override string ToString()
        {
            return "Actor Name=" + Name + "Age:" + Age;
        }



    }
}


Track.cs:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CD_DVD_Libary
{
    public class Track : IAttribut
    {
        private string _name;

        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }

        private decimal _length;

        public decimal Length
        {
            get { return _length; }
            set { _length = value; }
        }
        private string _artist;

        public string Artist
        {
            get { return _artist; }
            set { _artist = value; }
        }

        public Track(string name,decimal length,string artist)
        {
            this.Name = name;
            this.Length = length;
            this.Artist = artist;

        }
        public override string ToString()
        {
            return "Track Name=" + Name + " Artist=" + Artist + " Length=" + Length;
        }
    }
}


Ich habe folgende Fragen:
-Soll ich Save/Load/Print als ErweiterungsMethode in List<> implemtieren? Damit würde CDDVDLibary fast unnötig, sollte ich dieses dann löschen oder belassen.
-Eine Null Exception wird ausgelöst wenn ich eine DVD/CD der Liste hinzügen will, das Problem ist die Variable ist garnicht null, hat das etwas mit der generischen Liste zu tun?

LG

PS:Habe gerade gesehen, dass ich die .ToString Methode in DVD/CD vergessen habe.

T
314 Beiträge seit 2013
vor 8 Jahren

Hi,

wenn Du eine Nullexception bekommst, dann ist ganz sicher etwas Null 😃. Was genau kannst Du dir mit dem Debugger ansehen.
Ich würde die Funktionen nicht als Extension Methods bereitstellen. Wenn Du es gerne auf der Liste direkt haben möchtest, dann erb von List<> und implementier dort die Methoden.

Bei deinen ToString() solltest Du etwas wie z.B. string.Format() nutzen.

5.657 Beiträge seit 2006
vor 8 Jahren

Siehe dazu [FAQ] NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt, [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen) bzw. [Artikel] Debugger: Wie verwende ich den von Visual Studio?.

Bitte beachte beim nächsten Mal auch Code-Review Regeln, besonders Punkt 1: "Code muss compilieren" und 2: "Wir suchen nicht eure Fehler".

Auch die andere Frage gehört nicht ins Code-Review-Forum.

Christian

Weeks of programming can save you hours of planning

Thema geschlossen