WITH Ada.Text_IO;
WITH Screen;
WITH Compact;
PROCEDURE My_CD_Manager IS
------------------------------------------------------------------
--| shell of menu-driven user interface for CD record "database"
--| when correct input is entered, a message is displayed
--| instead of actually executing the command .
--|
--| Author: Michael B. Feldman, The George Washington University
--| Last Modified: April 1996
------------------------------------------------------------------
TYPE MenuValues IS (C, -- Clear database
R, -- Read database from disk
W, -- Write database to disk
A, -- Add a CD record
D, -- Delete a CD record
F, -- Find and display a CD record
P, -- Display all records
Q); -- Quit the program
PACKAGE Menu_IO IS
NEW Ada.Text_IO.Enumeration_IO (Enum => MenuValues);
MenuSelection : MenuValues;
BEGIN -- My_CD_Manager
Screen.ClearScreen;
LOOP -- main program loop
-- First display the menu on the screen
Screen.MoveCursor (Row => 5, Column => 20);
Ada.Text_IO.Put (Item => "Select one of the operations below.");
Screen.MoveCursor (Row => 7, Column => 20);
Ada.Text_IO.Put (Item => "C Clear the database");
Screen.MoveCursor (Row => 8, Column => 20);
Ada.Text_IO.Put (Item => "R Read database from disk");
Screen.MoveCursor (Row => 9, Column => 20);
Ada.Text_IO.Put (Item => "W Write database to disk");
Screen.MoveCursor (Row => 10, Column => 20);
Ada.Text_IO.Put (Item => "A Add CD record to database");
Screen.MoveCursor (Row => 11, Column => 20);
Ada.Text_IO.Put (Item => "D Delete CD record from database");
Screen.MoveCursor (Row => 12, Column => 20);
Ada.Text_IO.Put (Item => "F Find a CD record in the database");
Screen.MoveCursor (Row => 13, Column => 20);
Ada.Text_IO.Put (Item => "P Display all records in the database");
Screen.MoveCursor (Row => 14, Column => 20);
Ada.Text_IO.Put (Item => "Q Exit the program");
-- Now get a menu selection, robustly
LOOP
BEGIN -- exception handler block
Screen.MoveCursor (Row => 16, Column => 20);
Ada.Text_IO.Put ("Please type a command, then press Enter > ");
-- this statement will raise Data_Error if input is invalid
Menu_IO.Get (Item => MenuSelection);
-- these statements will be executed only if the input is correct
-- otherwise, control passes to exception handler
Screen.MoveCursor (Row => 18, Column => 20);
Ada.Text_IO.Put ("Thank you for correct input.");
Ada.Text_IO.New_Line;
EXIT; -- valid data; go ahead to process it
EXCEPTION -- invalid data
WHEN Ada.Text_IO.Data_Error =>
Screen.Beep;
Screen.MoveCursor (Row => 22, Column => 20);
Ada.Text_IO.Put (Item => " ");
Screen.MoveCursor (Row => 22, Column => 20);
Ada.Text_IO.Put (Item => "Value entered is not a command.");
Ada.Text_IO.Skip_Line;
WHEN OTHERS =>
Screen.Beep;
Screen.MoveCursor (Row => 22, Column => 20);
Ada.Text_IO.Put (Item => " ");
Screen.MoveCursor (Row => 22, Column => 20);
Ada.Text_IO.Put (Item => "Unknown error; try again, please.");
Ada.Text_IO.Skip_Line;
END; -- of exception handler block
END LOOP;
-- Now select which command to dispatch
Screen.MoveCursor (Row => 22, Column => 20);
Ada.Text_IO.Put (Item => " ");
Screen.MoveCursor (Row =>22, Column => 20);
CASE MenuSelection IS
WHEN C =>
Ada.Text_IO.Put (Item => "C entered; here we'd clear");
WHEN R =>
Ada.Text_IO.Put (Item => "R entered; here we'd add");
WHEN W =>
Ada.Text_IO.Put (Item => "W entered; here we'd delete");
WHEN A =>
Ada.Text_IO.Put (Item => "A entered; here we'd add");
WHEN D =>
Ada.Text_IO.Put (Item => "D entered; here we'd delete");
WHEN F =>
Ada.Text_IO.Put (Item => "F entered; here we'd find");
WHEN P =>
Ada.Text_IO.Put (Item => "P entered; here we'd display all");
WHEN Q =>
Ada.Text_IO.Put (Item => "Q entered; have a niiiiccce day.....");
EXIT; -- the main loop and quit the program
END CASE;
Ada.Text_IO.New_Line;
END LOOP;
END My_CD_Manager;