Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

8.8 Program: Playlist (Java) You will be building a linked list. Make sure to ke

ID: 3926836 • Letter: 8

Question

8.8 Program: Playlist (Java)

You will be building a linked list. Make sure to keep track of both the head and tail nodes.

(1) Create two files to submit.

SongEntry.java - Class declaration

Playlist.java - Contains main() method

Build the SongEntry class per the following specifications. Note: Some methods can initially be method stubs (empty methods), to be completed in later steps.

Private fields

String uniqueID - Initialized to "none" in default constructor

string songName - Initialized to "none" in default constructor

string artistName - Initialized to "none" in default constructor

int songLength - Initialized to 0 in default constructor

SongEntry nextNode - Initialized to null in default constructor

Default constructor (1 pt)

Parameterized constructor (1 pt)

Public member methods

insertAfter() (1 pt)

setNext() - Mutator (1 pt)

getID() - Accessor

getSongName() - Accessor

getArtistName() - Accessor

getSongLength() - Accessor

getNext() - Accessor

printPlaylistSongs()

Ex. of printPlaylistSongs output:

(2) In main(), prompt the user for the title of the playlist. (1 pt)

Ex:


(3) Implement the printMenu() method. printMenu() takes the playlist title as a parameter and outputs a menu of options to manipulate the playlist. Each option is represented by a single character. Build and output the menu within the method.

If an invalid character is entered, continue to prompt for a valid choice. Hint: Implement Quit before implementing other options. Call printMenu() in the main() method. Continue to execute the menu until the user enters q to Quit. (3 pts)

Ex:


(4) Implement "Output full playlist" menu option. If the list is empty, output: Playlist is empty (3 pts)

Ex:


(5) Implement the "Add song" menu item. New additions are added to the end of the list. (2 pts)

Ex:


(6) Implement the "Remove song" method. Prompt the user for the unique ID of the song to be removed.(4 pts)

Ex:


(7) Implement the "Change position of song" menu option. Prompt the user for the current position of the song and the desired new position. Valid new positions are 1 - n (the number of nodes). If the user enters a new position that is less than 1, move the node to the position 1 (the head). If the user enters a new position greater than n, move the node to position n (the tail). 6 cases will be tested:

Moving the head node (1 pt)

Moving the tail node (1 pt)

Moving a node to the head (1 pt)

Moving a node to the tail (1 pt)

Moving a node up the list (1 pt)

Moving a node down the list (1 pt)

Ex:


(8) Implement the "Output songs by specific artist" menu option. Prompt the user for the artist's name, and output the node's information, starting with the node's current position. (2 pt)

Ex:


(9) Implement the "Output total time of playlist" menu option. Output the sum of the time of the playlist's songs (in seconds). (2 pts)

Ex:

Explanation / Answer

SongEntry.java

package playlist;

public class SongEntry {
  
   private String uniqueID;
   private String songName;
   private String artistName;
   private int songLength;
   SongEntry nextNode;
  
   SongEntry()
   {
       uniqueID = "";
       songName = "";
       artistName = "";
       songLength = 0;
       nextNode = null;
   }
  
   SongEntry(String uniqueID, String songName, String artistName, int songLength)
   {
       this.uniqueID = uniqueID;
       this.songName = songName;
       this.songLength = songLength;
       this.artistName = artistName;
       this.nextNode = null;
   }
  
   public void insertAfter( SongEntry entry)
   {
       SongEntry entries = this;
       while(entries.nextNode != null)
       {
           entries = entries.nextNode;
       }
       entries.nextNode = entry;
   }
  
   public void setNext(SongEntry entry){
       this.nextNode = entry;
   }
  
   public String getID()
   {
       return this.uniqueID;
   }
  
   public String getSongName()
   {
       return this.songName;
   }
  
   public String getArtistName()
   {
       return this.artistName;
   }
  
   public int getSongLength()
   {
       return this.songLength;
   }
  
   public SongEntry getNext()
   {
       return this.nextNode;
   }
  
   public void printPlaylistSongs()
   {
       System.out.println("Unique ID: "+getID());
       System.out.println("Song Name: "+getSongName());
       System.out.println("Artist Name: "+getArtistName());
       System.out.println("Song Length(in seconds): "+getSongLength());
   }
}

Playlist.java

package playlist;

import java.util.Scanner;

public class Playlist {

  

   public static Scanner sc = new Scanner(System.in);

   public static Scanner scInt = new Scanner(System.in);

   public static SongEntry headSong = new SongEntry();

   public static SongEntry tailSong = new SongEntry();

   public static SongEntry allEntries;

   public static int numberOfNodes = 0;

  

   public static void printMenu(String playlistTitle)

   {

   System.out.println(" "+playlistTitle.toUpperCase()+" PLAYLIST MENU");

   System.out.println("a - Add song d - Remove song c - Change position of song s - Output songs by specific artist");

   System.out.println("t - Output total time of playlist (in seconds) o - Output full playlist q - Quit");

   System.out.println(" Choose an option: ");

   String option = sc.next();

   boolean isEnter = option.equals("a") || option.equals("d") || option.equals("c") || option.equals("s") || option.equals("t") || option.equals("o") || option.equals("q");

   if(isEnter)

   {

   switch(option.charAt(0))

   {

   case 'a': addSong();

   printMenu(playlistTitle);

   break;

  

   case 'd': allEntries = removeSong(allEntries);

   printMenu(playlistTitle);

   break;

  

   case 'c': allEntries = changeSongPosition(allEntries);

   printMenu(playlistTitle);

   break;

  

   case 's': songsBySpecificArtist(allEntries);

   printMenu(playlistTitle);

   break;

  

   case 't': totalTimeofPlaylist(allEntries);

   printMenu(playlistTitle);

   break;

  

   case 'o': outputFullPlaylist(allEntries);

   printMenu(playlistTitle);

   break;

  

   case 'q': break;

  

   }

   }

   else

   {

   System.out.println("Invalid Choice !");

   printMenu(playlistTitle);

   }

   }

  

   public static void outputFullPlaylist(SongEntry entries)

   {

   int counter = 1;

   if(entries != null)

   {

   System.out.println(counter+".");

   entries.printPlaylistSongs(); // head node

   counter++;

   while(entries.nextNode != null) // all the remaining nodes

   {

   entries = entries.nextNode;

   System.out.println(counter+".");

   entries.printPlaylistSongs();

   counter++;

   }

   }

   else

   {

       System.out.println("Playlist is empty");

   }

   }

  

   public static void addSong()

   {

   sc = new Scanner(System.in);

   System.out.println("ADD SONG");

   System.out.println("Enter song's Unique ID: ");

   String songID = sc.next();

   sc = new Scanner(System.in);

   System.out.println("Enter song's name: ");

   String songname = sc.nextLine();

   sc = new Scanner(System.in);

   System.out.println("Enter artist's name: ");

   String artistName = sc.nextLine();

   System.out.println("Enter song's length(in seconds): ");

   int songlength = scInt.nextInt();

  

   SongEntry entry = new SongEntry(songID, songname, artistName, songlength);

   if(allEntries == null)

   {

   headSong = entry; // this is the head

   allEntries = entry;

   tailSong = entry; // this is the tail

   numberOfNodes++;

   }

   else

   {

       allEntries.insertAfter(entry);

   tailSong = entry;

   numberOfNodes++;

   }

   }

  

   public static SongEntry removeSong(SongEntry entries)

   {

   System.out.println("Enter the song's unique ID: ");

   String id = sc.next();

   SongEntry newEntry = null, entry=null;

   int counter = 0;

   while(entries != null)

   {

       if(counter!=0)

       {

           newEntry.nextNode = null;

           newEntry = newEntry.nextNode;

       }

      

       if(!entries.getID().equals(id))

       {

           newEntry = new SongEntry();

           newEntry.setUniqueID(entries.getID());

           newEntry.setSongName(entries.getSongName());

           newEntry.setArtistName(entries.getArtistName());

           newEntry.setSongLength(entries.getSongLength());

           if(entry == null)

               entry = newEntry;

           else

               entry.insertAfter(newEntry);

           counter++;

       }

       else

       {

           System.out.println(entries.getSongName()+" removed");

           numberOfNodes--;

       }

       entries = entries.nextNode;

   }

   return entry;

   }

  

   public static SongEntry changeSongPosition(SongEntry entries)

   {

     

   System.out.println("CHANGE POSITION OF SONG");

   System.out.println("ENTER song's current position: ");

   int currentPos = scInt.nextInt();

   System.out.println("Enter new position of song: ");

   int newPos = scInt.nextInt();

   SongEntry currentPosEntry = null, entry = null, newPosEntry = null, returnEntry = null;

   entry = entries;

   int counter = 1;

// System.out.println("Number of nodes: " + numberOfNodes);

   if(newPos<1)

       newPos = 1;

   else if(newPos>numberOfNodes)

       newPos = numberOfNodes;

   System.out.println("cuurent pos: "+currentPos);

   System.out.println("new pos: "+newPos);

   for(int i=1; i<=numberOfNodes; i++)

   {

      if(i==currentPos)

       currentPosEntry = entries;

      else if(i==newPos)

          newPosEntry = entries;

      else

          entries = entries.nextNode;

   }

// System.out.println("After for loop");

   //System.out.println("Current song details" ); currentPosEntry.printPlaylistSongs();

// System.out.println("New song details"); newPosEntry.printPlaylistSongs();

   entries = entry;

   while(counter <= numberOfNodes+1)

   {

       if(counter == currentPos) // we need to adjust the current position

       {

         

           entries = entries.nextNode;

           if(entries !=null)

           {

           entry = new SongEntry(entries.getID(), entries.getSongName(), entries.getArtistName(), entries.getSongLength());

           if(returnEntry == null)

               returnEntry = entry;

           else

               returnEntry.insertAfter(entry);

           entries = entries.nextNode;  

           }

           counter++;

       }

       else if(counter == newPos)

       {

         

           entry = currentPosEntry;

           entry.nextNode = null;

           if(returnEntry == null)

               returnEntry = entry;

           else

               returnEntry.insertAfter(entry);

           counter++;

       }

       else

       {

         

           if(entries !=null)

           {

           entry = new SongEntry(entries.getID(), entries.getSongName(), entries.getArtistName(), entries.getSongLength());

           if(returnEntry == null)

               returnEntry = entry;

           else

               returnEntry.insertAfter(entry);

           entries = entries.nextNode;  

           }

           counter++;

       }

   }

return returnEntry;

   }

  

   public static void totalTimeofPlaylist(SongEntry entries)

   {

   System.out.println("OUTPUT TOTAL TIME OF PLAYLIST (IN SECONDS)");

   int totalSeconds = entries.getSongLength();

   entries = entries.nextNode;

   while(entries != null)

   {

   totalSeconds += entries.getSongLength();

   entries = entries.nextNode;

  

   }

   System.out.println("Total Time: "+totalSeconds+" seconds");

   }

  

   public static void songsBySpecificArtist(SongEntry entries)

   {

   sc = new Scanner(System.in);

   System.out.println("OUTPUT SONGS BY SPECIFIC ARTIST");

   System.out.println("Enter artist's name: ");

   String artistname = sc.nextLine();

   while(entries != null)

   {

   if(entries.getArtistName().equals(artistname))

   {

   entries.printPlaylistSongs();

   }

   entries = entries.nextNode;

   }

   }

   /**

   * @param args

   */

   public static void main(String[] args) {

  

   System.out.println("Enter playlist's title: ");

   sc = new Scanner(System.in);

   String title = sc.nextLine();

   printMenu(title);

   }

}

OUTPUT:

Enter playlist's title:

jem

JEM PLAYLIST MENU

a - Add song

d - Remove song

c - Change position of song

s - Output songs by specific artist

t - Output total time of playlist (in seconds)

o - Output full playlist

q - Quit

Choose an option:

a

ADD SONG

Enter song's Unique ID:

s1

Enter song's name:

All for you

Enter artist's name:

Minda

Enter song's length(in seconds):

234

JEM PLAYLIST MENU

a - Add song

d - Remove song

c - Change position of song

s - Output songs by specific artist

t - Output total time of playlist (in seconds)

o - Output full playlist

q - Quit

Choose an option:

a

ADD SONG

Enter song's Unique ID:

s2

Enter song's name:

good for you

Enter artist's name:

selena gomez

Enter song's length(in seconds):

233

JEM PLAYLIST MENU

a - Add song

d - Remove song

c - Change position of song

s - Output songs by specific artist

t - Output total time of playlist (in seconds)

o - Output full playlist

q - Quit

Choose an option:

d

Enter the song's unique ID:

s1

All for you removed

JEM PLAYLIST MENU

a - Add song

d - Remove song

c - Change position of song

s - Output songs by specific artist

t - Output total time of playlist (in seconds)

o - Output full playlist

q - Quit

Choose an option:

o

1.

Unique ID: s2

Song Name: good for you

Artist Name: selena gomez

Song Length(in seconds): 233

JEM PLAYLIST MENU

a - Add song

d - Remove song

c - Change position of song

s - Output songs by specific artist

t - Output total time of playlist (in seconds)

o - Output full playlist

q - Quit

Choose an option:

t

OUTPUT TOTAL TIME OF PLAYLIST (IN SECONDS)

Total Time: 233 seconds

JEM PLAYLIST MENU

a - Add song

d - Remove song

c - Change position of song

s - Output songs by specific artist

t - Output total time of playlist (in seconds)

o - Output full playlist

q - Quit

Choose an option:

a

ADD SONG

Enter song's Unique ID:

s3

Enter song's name:

baby

Enter artist's name:

justin beiber

Enter song's length(in seconds):

221

JEM PLAYLIST MENU

a - Add song

d - Remove song

c - Change position of song

s - Output songs by specific artist

t - Output total time of playlist (in seconds)

o - Output full playlist

q - Quit

Choose an option:

s

OUTPUT SONGS BY SPECIFIC ARTIST

Enter artist's name:

selena gomez

Unique ID: s2

Song Name: good for you

Artist Name: selena gomez

Song Length(in seconds): 233

JEM PLAYLIST MENU

a - Add song

d - Remove song

c - Change position of song

s - Output songs by specific artist

t - Output total time of playlist (in seconds)

o - Output full playlist

q - Quit

Choose an option:

c

CHANGE POSITION OF SONG

ENTER song's current position:

1

Enter new position of song:

2

cuurent pos: 1

new pos: 2

JEM PLAYLIST MENU

a - Add song

d - Remove song

c - Change position of song

s - Output songs by specific artist

t - Output total time of playlist (in seconds)

o - Output full playlist

q - Quit

Choose an option:

o

1.

Unique ID: s3

Song Name: baby

Artist Name: justin beiber

Song Length(in seconds): 221

2.

Unique ID: s2

Song Name: good for you

Artist Name: selena gomez

Song Length(in seconds): 233

JEM PLAYLIST MENU

a - Add song

d - Remove song

c - Change position of song

s - Output songs by specific artist

t - Output total time of playlist (in seconds)

o - Output full playlist

q - Quit

Choose an option: q

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote