Pascal Text Menu Музыкальный проигрыватель - PullRequest
0 голосов
/ 30 мая 2018

Мне нужна помощь в создании музыкального проигрывателя, я получаю ту же ошибку и, похоже, не могу ее обойти.Спасибо.Я приложил свой код ниже, а также мои ошибки.

Ошибки:

Бесплатный компилятор Pascal версии 2.6.4 [2014/02/26] для i386 Copyright (c) Флориан Клэмпфл и др. 1993-2014 гг. Целевая ОС: Darwin для i386 Компиляция MusicPlayer.pas

MusicPlayer.pas (82,37) Ошибка: несовместимый тип для аргумента №.1: получен "ShortString", ожидаемый "Album"

MusicPlayer.pas (138,31) Ошибка: несовместимый тип для аргумента №.1: получен "albumArray", ожидаемый "Album"

MusicPlayer.pas (164,44) Ошибка: несовместимый тип для аргумента №.1: Получен "albumArray", ожидаемый "Альбом"

MusicPlayer.pas (174) Неустранимый: Произошло 3 ошибки при компиляции модуля, остановка Неустранимая: Компиляция прервана Ошибка: / usr / local / bin / ppc386 вернул ошибкукод выхода (обычно, если вы не указали исходный файл для компиляции)

    program MusicPlayer;
uses TerminalUserInput;

type
    Track = record
       trackName: String;
       location: String;
    end;

    TrackArray = array of Track;

    Album = record
       albumName: String;
       artistName: String;
       genre: String;
       track: TrackArray;
       // key: Integer;
       trackNum: Integer;
       fileName: String;
    end;

    albumArray = array of Album;


function GetAlbums(): albumArray;
var
    // anAlbum: Album;
    //albums: albumArray;
    fileName: String;
    myFile: TextFile;
    numOfAlb: Integer;
    trackNum: Integer;
    i: Integer;
    j: Integer;
begin
    fileName := ReadString('Enter filename: ');
    AssignFile(myFile, fileName);
    // AssignFile(myFile, 'albums.dat');
    Reset(myFile);
    ReadLn(myFile, numOfAlb);
    setLength(result, numOfAlb);
    for i:= 0 to High(result) do
    begin
        ReadLn(myFile, result[i].albumname);
        ReadLn(myFile, result[i].artistName);
        ReadLn(myFile, result[i].genre);
        ReadLn(myFile, trackNum);
        setLength(result[i].track, trackNum);
        for j:= 0 to trackNum -1 do
        begin
            ReadLn(myFile, result[i].track[j].trackName);
            ReadLn(myFile, result[i].track[j].location);
        end;
    end;
end;

procedure DisplayAlbum(a: Album);
var
    //t: Track;
    i: Integer;

begin
    WriteLn('Album name is: ', a.albumName);
    WriteLn('Album artist name is: ', a.artistName);
    WriteLn('Album genre is: ', a.genre);
    WriteLn('Number of tracks are: ', a.trackNum);
    for i:= 0 to High(a.track) do
    begin
        WriteLn('Track name is: ', a.track[i].trackName);
        WriteLn('Album name is: ', a.track[i].location);
    end;
end;


function PrintAllGenres(albums: albumArray): albumArray;
var
    i: Integer;

begin
    for i := 0 to High(albums) do
    begin
        DisplayAlbum(albums[i].genre);
    end;

end;



procedure SelectAlbum(const albums: albumArray);
var
   val: Integer;
   i: Integer;
begin
   WriteLn('<< Welcome to the Track Player >>');
   val := ReadInteger('Enter an Album''s key number: ');
   for i := 0 to High(albums) do
   begin
     WriteLn('Album is now playing.');
   end;
   if (i > High(albums)) then
   begin
      WriteLn('Album was not found, now returning to Main Menu ');
   end;
end;

function UpdateAlbum(a: Album): Album;
begin
    a.albumName := ReadString('Please enter a new name for this album: ');
    a.genre := ReadString('Please enter a new genre for this album: ');
end;

// function UpdateAlbums(): albumArray;
// var
//    val: Integer;
//    i: Integer;
// begin
//    WriteLn('<< Album Updater >>');
//    val := ReadInteger('Enter an Album''s key number: ');
//    if (val = True) then
//         WriteLn('Album was found.')
//    else
//           WriteLn('Album was not found, now returning to Main Menu ');
// end;


procedure DisplayAlbums(albums: albumArray);
var
    val: Integer;
begin
   repeat
    WriteLn('<< Displaying Albums >>');
    WriteLn('1. Display all albums');
    WriteLn('2. Display genre');
    WriteLn('3. Return to main menu');
    val := ReadInteger('Enter a number to enter menu: ');

    case val of
        1: DisplayAlbum(albums);
        2: PrintAllGenres(albums);
    end;

  until val = 3;
end;


procedure Main();
var
    albums: albumArray;
    val: Integer;
begin
    repeat
        WriteLn('<< Text Music Player Menu >>');
        WriteLn('1. Read in Albums');
        WriteLn('2. Display Albums');
        WriteLn('3. Select an Album to play');
        WriteLn('4. Update an existing Album');
        WriteLn('5. Quit');
        val := ReadInteger('Enter a number to enter menu: ');

        case val of
            1: albums := GetAlbums();
            2: DisplayAlbums(albums);
            3: SelectAlbum(albums);
            4: albums := UpdateAlbum(albums);

        end;

    until val = 5;
end;

begin
    Main();
end.

1 Ответ

0 голосов
/ 30 мая 2018

В вашем коде вы написали

procedure DisplayAlbum(a: Album);

, что означает, что вам нужно передать Album в процедуру, но в строке 82 вы написали

    DisplayAlbum(albums[i].genre);

genre - это поле Album, в то время как вы должны передать целое Album

Измените строку 82 на

    DisplayAlbum(albums[i]);

Я оставляю другие ошибки для вас самих,ошибки очень похожи, и теперь вы должны быть в состоянии разобраться с ними.Как я говорил вам вчера, вы можете (или даже должны) поговорить со своим наставником, чтобы лучше понять.

...