Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Your Text Based Music Application must have the following functionality: You must use while loops for this task - do not use for loops or

Your Text Based Music Application must have the following functionality:
You must use while loops for this task - do not use for loops or other loops.
Display a menu that offers the user the following options:
1. Read in Albums
2. Display Albums
3. Select an Album to play
5. Exit the application
Menu option 1 should prompt the user to enter a filename of a file that contains the following information:
The number of albums
The first artist name
The first album name
The record label
The genre of the album
The number of tracks
The name and file location (path) of each track.
The album information for the remaining albums.
Menu option 2 should allow the user to either display all albums or all albums for a particular genre. The albums should be listed with a unique album number which can be used in Option 3 to select an album to play. The album number should serve the role of a primary key for locating an album. But it is allocated internally by your program, not by the user. If the user chooses list by genre - list the available genres.
Menu option 3 should prompt the user to enter the primary key (or album number) for an album as listed using Menu option 2.If the album is found the program should list all the tracks for the album, along with track numbers. The user should then be prompted to enter a track number. If the track number exists, then the system should display the message Playing track then the track name, from album then the album name. You may or may not call an external program to play the track, but if not the system should delay for several seconds before returning to the main menu.
require 'io/console'
# Function to read an integer from the user within a specified range
def read_integer_in_range(prompt, min, max)
loop do
print prompt
input = $stdin.gets.chomp
if input.match?(/\A\d+\z/)
number = input.to_i
return number if number >= min && number = max
end
puts "Invalid input. Please enter a number between #{min} and #{max}."
end
end
# Function to read a string from the user
def read_string(prompt)
print prompt
$stdin.gets.chomp
end
require './input_functions'
# Define a data structure to store album information
class Album
attr_accessor :artist, :title, :label, :genre, :tracks
def initialize(artist, title, label, genre)
@artist = artist
@title = title
@label = label
@genre = genre
@tracks =[]
end
end
# Function to read an album's information with tracks
def read_album_with_tracks(file)
artist = file.gets.chomp
title = file.gets.chomp
label = file.gets.chomp
genre = file.gets.chomp
num_tracks = file.gets.chomp.to_i
tracks =[]
# Read track information
while num_tracks >0
track_name = file.gets.chomp
track_audio = file.gets.chomp
track ={
name: track_name,
audio: track_audio
}
tracks track
num_tracks -=1
end
album = Album.new(artist, title, label, genre)
album.tracks = tracks
album
end
# Function to display a list of albums
def display_albums(albums)
puts "Available albums:"
albums.each_with_index do |album, index|
puts "#{index +1}. #{album.artist}- #{album.title}(Genre: #{album.genre})"
end
end
# Function to display a list of genres
def display_genres(albums)
genres = albums.map {|album| album.genre }.uniq
puts "Available genres:"
genres.each_with_index do |genre, index|
puts "#{index +1}. #{genre}"
end
end
# Function to play a track
def play_track(album, track_number)
if track_number >=0 && track_number album.tracks.size
track = album.tracks[track_number]
puts "Playing track #{track[:name]} from album #{album.title}"
sleep(3) # Delay for a few seconds (simulating playing the track)
else
puts "Invalid track number. Track not found."
end
end
# Main function to manage the menu options
def main
albums =[]
loop do
puts "Menu:"
puts "1. Read in Albums"
puts "2. Display Albums"
puts "3. Select an Album to play"
puts "4. Exit"
choice = read_integer_in_range("Enter your choice (1-4): ",1,4)
case choice
when 1
file_name = read_string("Enter the filename that contains album information: ")
file = File.open(file_name)
num_albums = file.gets.chomp.to_i
num_albums.times do
album = read_album_with_tracks(file)
albums album
end
file.close
puts "Album information has been successfully loaded."
when 2
display_option = read_integer_in_range("Display all albums (1) or albums by genre (2): ",1,2)
if display_option ==1
display_albums(albums)
elsif display_option ==2
display_genres(albums)
genre_index = read_integer_in_range("Enter the number of the genre you want to list: ",1, genres.size)-1
selected_g
Your Text Based Music Application must have the following functionality:
You must use while loops for this task - d
image text in transcribed

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

More Books

Students also viewed these Databases questions

Question

A primary key usually has a value of NULL. True False

Answered: 1 week ago

Question

The company openly shares plans and information with employees.

Answered: 1 week ago