如果歌曲具有getCertification,则显示getCertifcation

时间:2019-02-05 13:40:38

标签: c#

如果我目前正在使用该方法认证的歌曲(银,金,白金),我需要显示它的认证证书,但是这并不会检查该歌曲是否确实具有认证。

然后,我还将如何显示已显示详细信息的那些歌曲的“总销售数量”和“平均销售数量”。我了解这将需要将副本出售给客户端代码,但我将如何处理。

namespace Songs
{
    class Song
    {
        string name;
        string artist;
        int copiesSold;

        public Song(string name, string artist, int copiesSold)
        {
            this.name = name;
            this.artist = artist;
            this.copiesSold = copiesSold;
        }

        public Song() : this("my_name", "my_artist", 1000)
        {

        }

        public string GetArtist()
        {
            return artist;
        }

        public string GetDetails()
        {
            return $"Name: {name} Artist: {artist} Copies Sold: {copiesSold},";
        }

        public string GetCertification()
        {
            return copiesSold < 200000 ? null : copiesSold < 400000 ? "Silver" : copiesSold < 600000 ? "Gold" : "Platinum";
        }

        public void AddCopiesSold(int number)
        {
            copiesSold += number;
        }
    }
}

程序类

namespace Songs
{
    class Program
    {
        static void Main(string[] args)
        {

            //InputSongDetails();
            //Console.WriteLine(InputSongDetails());

            Song[] songs = new Song[4];
            for (int i = 0; i < songs.Length; i++)
            {
                songs[i] = InputSongDetails();
            }

            Console.WriteLine("Enter an artist name, or just press return for all artists");
            var name = Console.ReadLine().ToUpper();
            name = name.Trim();

            foreach (var song in songs)
            {
                if (string.IsNullOrWhiteSpace(name) || song.GetArtist().Equals(name))
                {
                    Console.WriteLine(song.GetDetails());
                    song.GetCertification();
                }
            }

        }


        static Song InputSongDetails()
        {
            Console.WriteLine("What is the name of your song");
            string name = Console.ReadLine();

            Console.WriteLine("What is the artists name");
            string artist = Console.ReadLine();

            int records;
            Console.WriteLine("How many records did it sell");
            while (!int.TryParse(Console.ReadLine(), out records) || records < 0)
            {
                Console.WriteLine("That is not valid please enter a number");
            }
            return new Song(name, artist, records);
        }


    }
}

2 个答案:

答案 0 :(得分:0)

“如果我现在正在调用具有认证(银,金,白金)的歌曲,那么我需要显示其认证证书,但是这并不会检查歌曲是否真正具有认证。”

foreach (var song in songs)
{
    if (string.IsNullOrWhiteSpace(name) || song.GetArtist().Equals(name))
    {
          Console.WriteLine(song.GetDetails());
          song.GetCertification() != null ? song.GetCertification() : /* Handle no certificate here */;
    }
}

对于您遇到的其他“问题”,您必须使结构更清晰,似乎您希望我们为您编写该功能。 Stackoverflow不是代码编写服务,但这将解决您的null错误(您将copiesSold < 200000设置为)。

答案 1 :(得分:0)

您缺少一些代码。这应该评估传入的歌手,然后按歌手检索歌曲,并返回歌曲的唯一实例。

song.GetArtist().Equals(name)

我没有看到GetArtist()的定义,它应该以艺术家的名字作为参数(我认为)。

此外,您还从歌曲到艺术家重新定义了名称

    Console.WriteLine("What is the name of your song");
    string name = Console.ReadLine();

...

    Console.WriteLine("Enter an artist name, or just press return for all artists");
    var name = Console.ReadLine().ToUpper();
    name = name.Trim();

您应使用 unique 变量(例如artistName,songName等)来防止此类意外碰撞。