Untitled

ZTP4
mail@pastecode.io avatar
unknown
plain_text
a year ago
4.9 kB
2
Indexable
Never
//ZADANIE 4 - CELE
Podstawa (50%):

Napisz klasę Utwór, która reprezentuje utwór muzyczny. Powinna ona pozwalać na odczyt i edycję informacji o utworze (tytuł, wykonawca, czas trwania) oraz uruchomienie jego odtwarzania (wyświetlenie odpowiedniego komunikatu).

Napisz klasę Biblioteka, która przechowuje listę utworów. Powinna ona pozwalać na dodawanie, usuwanie i pobieranie utworów z listy (np. po indeksie).

Korzystając ze wzorca Obserwator, powiadamiaj Bibliotekę za każdym razem, gdy jakiś Utwór jest odtwarzany. Biblioteka powinna liczyć sumaryczną cenę wszystkich odtworzeń (stała opłata za pojedyncze odtworzenie).

Możesz skorzystać z interfejsu Observer i klasy Observable (Java) lub IObserver oraz IObservable (C#) lub stworzyć własne odpowiedniki.

Utwór jest obiektem obserwowanym.
Biblioteka jest obserwatorem.
Biblioteka rejestruje się jako obserwator Utworu w momencie, gdy jest on do niej dodawany.
Usunięcie utworu z biblioteki powinno powodować odrejestrowanie obserwatora.
Odtwarzany Utwór powiadamia o tym swych obserwatorów.
Powiadomiona Biblioteka może zliczać cenę.
Rozszerzenie (+50%):

Dodaj klasę Cennik, która przechowuje cenę odtworzenia pojedynczego utworu i pozwala na jego zmianę. Powinno to wpływać na cenę za odtworzone utwory widoczną w bibliotece. Sam zdecyduj kto powinien być obserwatorem, a kto obiektem obserwowanym.


//KOD
//KOD
//KOD







//BIBLIOTEKA.CS

class Biblioteka : IObserver
{
    private List<Utwor> songs;
    private double totalCost;
    public double costPerPlay;

    public Biblioteka()
    {
        this.songs = new List<Utwor>();
        this.totalCost = 0;
        this.costPerPlay = 0.1;
    }

    public void AddSong(Utwor song)
    {
        songs.Add(song);
        song.RegisterObserver(this);
    }

    public void RemoveSong(Utwor song)
    {
        songs.Remove(song);
        song.RemoveObserver(this);
    }

    public Utwor GetSong(int index)
    {
        return songs[index];
    }

    public void Update(IObservable observable)
    {
        if (observable is Utwor)
        {
            totalCost += costPerPlay;
            Console.WriteLine("Aktualna cena za odtworzenia: " + totalCost);
        }
    }
}


//CENNIK.CS

class PriceList : IObserver
{
    private double costPerPlay;

    public PriceList()
    {
        this.costPerPlay = 0.1;
    }

    public double CostPerPlay { get => costPerPlay; set => costPerPlay = value; }

    public void Update(IObservable observable)
    {
        if (observable is Biblioteka)
        {
            ((Biblioteka)observable).costPerPlay = costPerPlay;
        }
    }
}


//UTWOR.CS

using System;
using System.Collections.Generic;

// Interfejs dla obiektów obserwowanych
interface IObservable
{
    void RegisterObserver(IObserver observer);
    void RemoveObserver(IObserver observer);
    void NotifyObservers();
}

// Interfejs dla obiektów obserwujących
interface IObserver
{
    void Update(IObservable observable);
}

class Utwor : IObservable
{
    private string title;
    private string artist;
    private double duration;
    private double play_cost;
    private List<IObserver> observers;

    public Utwor(string title, string artist, double duration, double play_cost)
    {
        this.title = title;
        this.artist = artist;
        this.duration = duration;
        this.play_cost = play_cost;
        this.observers = new List<IObserver>();
    }

    public string Title { get => title; set => title = value; }
    public string Artist { get => artist; set => artist = value; }
    public double Duration { get => duration; set => duration = value; }

    public double Play_Cost { get => play_cost; set => Play_Cost = value; }

    public void Play()
    {
        Console.WriteLine("Odtwarzam utwór: " + Title + " wykonawcy " + Artist + " trwający " + Duration + " sekund. Odtworzenie kosztowało: " + Play_Cost + "zł.");
        NotifyObservers();
    }

    public void RegisterObserver(IObserver observer)
    {
        observers.Add(observer);
    }

    public void RemoveObserver(IObserver observer)
    {
        observers.Remove(observer);
    }

    public void NotifyObservers()
    {
        foreach (IObserver observer in observers)
            observer.Update(this);
    }
}


//PROGRAM.CS

using System;

class Program
{
    static void Main(string[] args)
    {
        Utwor w1 = new Utwor("Tytul", "Artysta", 3.5, 1);
        Utwor w2 = new Utwor("Drugi", "yyyy", 7.00, 2);
        Utwor w3 = new Utwor("Trzeci", "vvvv", 2.00, 3);
        Utwor w4 = new Utwor("Czwarty", "zzzz", 11.00, 4);

        Biblioteka biblioteka = new Biblioteka();
        biblioteka.AddSong(w1);
        biblioteka.AddSong(w4);
        //biblioteka.removeSong(w1);
        w1.Play();
        w2.Play();
        w3.Play();
        w4.Play();
    }
}