2017-05-14 1 views
0

私は、ユーザーがアルバムの名前、ジャンル、アーティストなどを入力し、4つのメニューオプションでアルバムを表示、再生、更新できるパスカルテキストプログラムを作成しようとしています。しかし、私は最初のメニュー(新しいアルバムを追加するためのメニュー)に入るときに問題を抱えているだけで、メインメニューを再印刷します。私は崇高なテキストエディタとMingwをターミナルとして使用しています。ここにコードがある、私は問題がGetAlbumとGetAlbums関数を含むと信じている。パスカルのテキストメニューの問題

感謝:)あなたは、あなたが実際に他の人のために多くの困難にそれを作ったとさえ自分が効果的に起こっているかを理解するために、コードモジュール化する試みにおいて

program TextMusicPlayer; 
uses TerminalUserInput; 

type 
    Tracks = record 
     name: String; 
    end; 

    Album = record 
     name: String; 
     artist: String; 
     genre: String; 
     track: array of String; 
     key: Integer; 
     trackcount: integer; 
    end; 

    playlist = array of Album; 

function GetAlbum(var myFile: TextFile): Album; 
var 
    albumInfo: Album; 
    i: Integer; 
begin 
    albumInfo.name := ReadString('Enter name: '); 
    albumInfo.artist := ReadString('Enter artist: '); 
    albumInfo.genre := ReadString('Enter genre: '); 
    albumInfo.trackcount := ReadInteger('Enter track no.: '); 
    SetLength(albumInfo.track, albumInfo.trackcount); 
    for i := 0 to High(albumInfo.track) do 
    begin 
     ReadLn(myFile, albumInfo.track[i]); 
    end; 
    albumInfo.key := -1; 
    result := albumInfo; 
    Close(myFile); 
end; 

function GetAlbums(): playlist; 
var 
    myFile: TextFile; 
    playlist: array of Album; 
    i, r: integer; 
begin 
    AssignFile(myFile, 'music.txt'); 
    Reset(myFile); 
    ReadLn(myFile, r); 
    SetLength(playlist, r); 
    for i := 0 to High(playlist) do 
     begin 
      playlist[i] := GetAlbum(myFile); 
     end; 
    result := playlist; 
end; 

function PrintAllAlbums(playlist: playlist): playlist; 
var 
    i: integer; 
begin 
    for i := 0 to High(playlist) do 
    begin 
     playlist[i].key := i; 
     WriteLn(playlist[i].name, ' key number: ', i); 
    end; 
    result := playlist; 
end; 

function PrintAllGenres(playlist: Playlist): Playlist; 
var 
    genre: String; 
    i: Integer; 
    r: Integer; 
    m: Integer; 
begin 
    m := 0; 
    for i := 0 to High(playlist) do 
    begin 
     playlist[i].key := -1; 
    end; 

    genre := ReadString('Enter the Genre: '); 

    for r := 0 to High(playlist) do 
    begin 
     if (genre = playlist[r].genre) then 
     begin 
     playlist[i].key := m; 
     WriteLn(playlist[r].name, ' key number: ', m); 
     m := m + 1; 
     end; 
    end; 
    result := playlist; 
end; 

function PrintAlbums(playlist: playlist): playlist; 
var 
    val: integer; 
begin 
    WriteLn('***Displaying Albums***'); 
    WriteLn('1 - Display all albums'); 
    WriteLn('2 - Display all of one genre'); 
    WriteLn('3 - Back to Main Menu'); 
    val := ReadInteger('Enter a number to enter a Menu: '); 

    case val of 
     1: playlist := PrintAllAlbums(playlist); 
     2: playlist := PrintAllGenres(playlist); 
    end; 
    result := playlist; 
end; 

procedure PlayAlbum(albumInfo: Album); 
var 
    i: Integer; 
    r: Integer; 
begin 
    WriteLn('Album:', albumInfo.name); 
    for i := 0 to High(albumInfo.track) do 
    begin 
     WriteLn(i + 1, albumInfo.track[i]); 
    end; 
    r := ReadInteger('Select a track number to play: '); 
    while (r < 1) or (r > (High(albumInfo.track) + 1)) do 
    begin 
     r := ReadInteger('Please select a track number from above: '); 
    end; 
    WriteLn('Playing track ', r, albumInfo.track[(r - 1)], ' from the album ', albumInfo.name); 
    ReadString('Press Enter to return to Main Menu '); 
end; 

procedure SelectAlbum(playlist: Playlist); 
var 
    val: Integer; 
    i: Integer; 
    r: Integer; 
begin 
    r := 0; 
    WriteLn('***Welcome to the Track Player***'); 
    val := ReadInteger('Enter an Albums key number'); 
    for i := 0 to High(playlist) do 
    begin 
     if (playlist[i].key = val) then 
     begin 
     PlayAlbum(playlist[i]); 
     end 
     else 
     begin 
     r := r + 1; 
     end; 
    end; 
    if r > High(playlist) then 
    begin 
     WriteLn('Album was not found, now returning to Main Menu '); 
    end; 
end; 

function ChangeAlbum(albumInfo: Album): Album; 
begin 
    albumInfo.name := ReadString('Please enter a new name for this album'); 
    albumInfo.genre := ReadString('Please enter a new gernre for this album'); 
    result := albumInfo; 
end; 

function ChangeAlbums(playlist: Playlist): Playlist; 
var 
    val: Integer; 
    i: Integer; 
    j: Integer; 
begin 
    j := 0; 
    WriteLn('***Album Updater***'); 
    val := ReadInteger('Enter an Albums key number: '); 
    for i := 0 to High(playlist) do 
    begin 
     if (playlist[i].key = val) then 
     begin 
     playlist[i] := ChangeAlbum(playlist[i]); 
     end 
     else 
     begin 
     j := j + 1; 
     end; 
    end; 
    if j > High(playlist) then 
    begin 
     WriteLn('Album was not found, now returning to Main Menu '); 
    end; 
    result := playlist; 
end; 

procedure Main(); 
var 
    i, val: Integer; 
    playlist: array of Album; 
begin 
    i := 0; 
    while (i = 0) do 
    begin 
     WriteLn(''); 
     WriteLn('***Text Music Player Menu***'); 
     WriteLn('1 - Add new Albums'); 
     WriteLn('2 - View Albums'); 
     WriteLn('3 - Play an Album'); 
     WriteLn('4 - Update an Album'); 
     WriteLn('5 - Quit'); 
     val := ReadInteger('Enter a number to enter a Menu: '); 

     case val of 
      1: playlist := GetAlbums(); 
      2: playlist := PrintAlbums(playlist); 
      3: SelectAlbum(playlist); 
      4: playlist := ChangeAlbums(playlist); 
     else 
      i := i + 1; 
     end; 
    end; 
end; 

begin 
    Main(); 
end. 
+0

のようにすべて書かれた右側のだろうと思います。あなたはちょうどメモリ内のアルバムを読んで、プログラムはメインメニューを表示する次のステップを待ちます。 – user3811082

+0

のプログラムを持っているのは、アルバムの情報を入力することができないということです。 – PYUO

+0

コードを踏んだことはありますか?あなたがアルバム情報を入力することを許可されていない場合、GetAlbumが呼び出されていないため、forループが実行されていないことを意味するためです。 – juus

答えて

0

。はるかに簡単なアプローチは、テキストファイルからアルバムを読み込む単一の手順をとるだけであると私は信じています。

また、私は、メニューのためにユーザーの入力を得るために、より適切なアプローチは、この

repeat 
    val := ReadInteger('Enter a number to enter a Menu: '); 
     case val of 
       1: playlist := GetAlbums(); 
       2: playlist := PrintAlbums(playlist); 
       3: SelectAlbum(playlist); 
       4: playlist := ChangeAlbums(playlist); 
    until val = 5 
    end;