WITH Ada.Text_IO; WITH Screen; WITH Tables; PROCEDURE Employee_UI IS ------------------------------------------------------------------ --| --| shell of menu-driven user interface for Employee "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: October 1995 --| ------------------------------------------------------------------ TYPE MenuValues IS (I, -- Initialize database A, -- Add a record D, -- Delete a record F, -- retrieve (Find) and display a record R, -- find and Replace a record P, -- Display all records Q); -- Quit the program PACKAGE Menu_IO IS NEW Ada.Text_IO.Enumeration_IO (Enum => MenuValues); MenuSelection : MenuValues; BEGIN -- Employee_UI LOOP -- main program loop Screen.ClearScreen; Screen.MoveCursor (To=>(Row => 5, Column => 20)); Ada.Text_IO.Put (Item => "Select one of the operations below."); Screen.MoveCursor (To=>(Row => 7, Column => 20)); Ada.Text_IO.Put (Item => "I Initialize the Employee Database"); Screen.MoveCursor (To=>(Row => 8, Column => 20)); Ada.Text_IO.Put (Item => "A Add a New Employee to the Database"); Screen.MoveCursor (To=>(Row => 9, Column => 20)); Ada.Text_IO.Put (Item => "D Delete an Employee from the Database"); Screen.MoveCursor (To=>(Row => 10, Column => 20)); Ada.Text_IO.Put (Item => "F Find and Display One Employee"); Screen.MoveCursor (To=>(Row => 11, Column => 20)); Ada.Text_IO.Put (Item => "R Replace Old Record with New One"); Screen.MoveCursor (To=>(Row => 11, Column => 20)); Ada.Text_IO.Put (Item => "P Display All Records in the Database"); Screen.MoveCursor (To=>(Row => 12, Column => 20)); Ada.Text_IO.Put (Item => "Q Exit the program"); LOOP BEGIN -- exception handler block Screen.MoveCursor (To=>(Row => 14, 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 (To=>(Row => 15, 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 (To=>(Row => 15, Column => 20)); Ada.Text_IO.Put (Item => "Value entered is not a command."); Ada.Text_IO.New_Line; DELAY 1.0; Ada.Text_IO.Skip_Line; Screen.MoveCursor (To=>(Row => 15, Column => 20)); Ada.Text_IO.Put (Item => " "); WHEN OTHERS => Screen.Beep; Screen.MoveCursor (To=>(Row => 15, Column => 20)); Ada.Text_IO.Put (Item => "Unknown error; try again, please."); Ada.Text_IO.New_Line; DELAY 1.0; Ada.Text_IO.Skip_Line; Screen.MoveCursor (To=>(Row => 15, Column => 20)); Ada.Text_IO.Put (Item => " "); END; -- of exception handler block END LOOP; Screen.MoveCursor (To=>(Row =>22, Column => 20)); CASE MenuSelection IS WHEN I => Ada.Text_IO.Put (Item => "I entered; here we'd initialize"); WHEN A => Ada.Text_IO.Put (Item => "A entered; here we'd insert"); 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 R => Ada.Text_IO.Put (Item => "R entered; here we'd replace"); 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; DELAY 2.0; END LOOP; END Employee_UI;