MusicTrack

Nama: Hafidz Panji Ashari
NRP: 5025231278
KELAS: PBO-A 


Membuat Group Object dari MusicTrack yang menampung data-data dari tiap tracknya.


Struktur Direktori

/MusicApp
    ├── MusicTrack.java
    ├── MusicPlayer.java
    ├── MusicOrganizer.java
    └── Main.java

1. MusicTrack.java

Kelas MusicTrack berfungsi untuk merepresentasikan satu lagu atau track musik. Fungsinya meliputi:

  • Menyimpan informasi mengenai sebuah lagu seperti judul (title), artis (artist), dan durasi lagu (duration).
  • Menampilkan informasi track melalui method displayTrackInfo(), yang mencetak detail lagu seperti judul, artis, dan durasi.

public class MusicTrack {
    private String title;
    private String artist;
    private int duration;

    public MusicTrack(String title, String artist, int duration) {
        this.title = title;
        this.artist = artist;
        this.duration = duration;
    }

    public String getTitle() {
        return title;
    }

    public String getArtist() {
        return artist;
    }

    public int getDuration() {
        return duration;
    }

    public void displayTrackInfo() {
        System.out.println("Title: " + title);
        System.out.println("Artist: " + artist);
        System.out.println("Duration: " + duration + " seconds");
    }
}

2. MusicPlayer.java

Kelas MusicPlayer berfungsi untuk memutar dan menghentikan pemutaran lagu. Fungsinya meliputi:

  • play(MusicTrack track): Memutar lagu yang diberikan sebagai parameter (MusicTrack). Menampilkan pesan bahwa lagu sedang diputar, termasuk judul dan artis.
  • stop(): Menghentikan pemutaran lagu dan mencetak pesan bahwa musik telah dihentikan.

public class MusicPlayer {
    public void play(MusicTrack track) {
        System.out.println("Now playing: " + track.getTitle() + " by " + track.getArtist());
    }

    public void stop() {
        System.out.println("Music stopped.");
    }
}

3. MusicOrganizer.java

Kelas MusicOrganizer bertanggung jawab untuk mengelola kumpulan objek MusicTrack. Fungsinya meliputi:

  • addTrack(String title, String artist, int duration): Menambahkan lagu baru ke dalam koleksi.
  • playTrack(int index): Memutar lagu dari koleksi berdasarkan indeks yang diberikan.
  • stopPlaying(): Menghentikan lagu yang sedang diputar.
  • displayAllTracks(): Menampilkan semua lagu dalam koleksi dengan informasi lengkap.
  • getTrackCount(): Menghitung dan mengembalikan jumlah total lagu dalam koleksi.
  • removeTrack(int index): Menghapus lagu dari koleksi berdasarkan indeks yang diberikan.
  • searchByTitle(String title): Mencari dan menampilkan lagu yang sesuai dengan judul yang diberikan.
  • searchByArtist(String artist): Mencari dan menampilkan semua lagu yang dinyanyikan oleh artis yang diberikan.

import java.util.ArrayList;

public class MusicOrganizer {
    private ArrayList<MusicTrack> tracks;
    private MusicPlayer player;

    public MusicOrganizer() {
        tracks = new ArrayList<>();
        player = new MusicPlayer();
    }

    public void addTrack(String title, String artist, int duration) {
        MusicTrack newTrack = new MusicTrack(title, artist, duration);
        tracks.add(newTrack);
        System.out.println("Track added: " + title);
    }

    public void playTrack(int index) {
        if (index >= 0 && index < tracks.size()) {
            MusicTrack track = tracks.get(index);
            player.play(track);
        } else {
            System.out.println("Invalid track index.");
        }
    }

    public void stopPlaying() {
        player.stop();
    }

    public void displayAllTracks() {
        if (tracks.isEmpty()) {
            System.out.println("No tracks in the organizer.");
        } else {
            for (int i = 0; i < tracks.size(); i++) {
                System.out.println("Track " + (i + 1) + ":");
                tracks.get(i).displayTrackInfo();
                System.out.println();
            }
        }
    }

    public int getTrackCount() {
        return tracks.size();
    }

    public void removeTrack(int index) {
        if (index >= 0 && index < tracks.size()) {
            MusicTrack removedTrack = tracks.remove(index);
            System.out.println("Track removed: " + removedTrack.getTitle());
        } else {
            System.out.println("Invalid index.");
        }
    }

    public void searchByTitle(String title) {
        boolean found = false;
        for (MusicTrack track : tracks) {
            if (track.getTitle().equalsIgnoreCase(title)) {
                track.displayTrackInfo();
                found = true;
            }
        }
        if (!found) {
            System.out.println("Track with title '" + title + "' not found.");
        }
    }

    public void searchByArtist(String artist) {
        boolean found = false;
        for (MusicTrack track : tracks) {
            if (track.getArtist().equalsIgnoreCase(artist)) {
                track.displayTrackInfo();
                found = true;
            }
        }
        if (!found) {
            System.out.println("No tracks found by artist '" + artist + "'.");
        }
    }
}

4. Main.java

Kelas Main berfungsi untuk menjalankan aplikasi, memberikan antarmuka berbasis teks bagi pengguna untuk berinteraksi dengan MusicOrganizer. Fungsinya meliputi:

  • Menampilkan menu interaktif untuk memilih berbagai operasi seperti menambah lagu, melihat daftar lagu, memutar lagu, mencari lagu, dan menghapus lagu.
  • Memanggil metode dari MusicOrganizer berdasarkan pilihan pengguna.
  • Mengontrol alur program dari mulai, menjalankan, hingga menghentikan program.
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        MusicOrganizer organizer = new MusicOrganizer();
        Scanner scanner = new Scanner(System.in);
        int choice;

        do {
            System.out.println("\n=== Music Organizer Menu ===");
            System.out.println("1. Add Track");
            System.out.println("2. View All Tracks");
            System.out.println("3. Play Track");
            System.out.println("4. Stop Playing");
            System.out.println("5. Search Track by Title");
            System.out.println("6. Search Track by Artist");
            System.out.println("7. Remove Track");
            System.out.println("8. Exit");
            System.out.print("Choose an option: ");
            choice = scanner.nextInt();
            scanner.nextLine();  // Consume newline

            switch (choice) {
                case 1:
                    System.out.print("Enter title: ");
                    String title = scanner.nextLine();
                    System.out.print("Enter artist: ");
                    String artist = scanner.nextLine();
                    System.out.print("Enter duration (in seconds): ");
                    int duration = scanner.nextInt();
                    organizer.addTrack(title, artist, duration);
                    break;
                case 2:
                    System.out.println("\nAll Tracks:");
                    organizer.displayAllTracks();
                    break;
                case 3:
                    System.out.print("Enter track number to play: ");
                    int trackNumber = scanner.nextInt();
                    organizer.playTrack(trackNumber - 1);  
                    break;
                case 4:
                    organizer.stopPlaying();
                    break;
                case 5:
                    System.out.print("Enter title to search: ");
                    String searchTitle = scanner.nextLine();
                    organizer.searchByTitle(searchTitle);
                    break;
                case 6:
                    System.out.print("Enter artist to search: ");
                    String searchArtist = scanner.nextLine();
                    organizer.searchByArtist(searchArtist);
                    break;
                case 7:
                    System.out.print("Enter track number to remove: ");
                    int removeTrackNumber = scanner.nextInt();
                    organizer.removeTrack(removeTrackNumber - 1);  // -1 for zero-based index
                    break;
                case 8:
                    System.out.println("Exiting Music Organizer...");
                    break;
                default:
                    System.out.println("Invalid option. Please try again.");
                    break;
            }
        } while (choice != 8);

        scanner.close();
    }
}




Hasil : 












Comments

Popular posts from this blog

Daily Task Manager

EAS

DisplayClock