-------------------------------------------------------- -- Nome Programma: Procedura prova - -- Funzioni Programma: - -- - - -------------------------------------------------------- -- Creato il: 27.4.2001 - -- Ultima modifica: 11.05.2001 - -------------------------------------------------------- -- Sviluppato da: Dalessi, Mussi, Muggiasca - -- per il progetto Agenda. - -------------------------------------------------------- with Ada.Text_IO, Ada.Long_Integer_Text_IO, Ada.Integer_Text_IO, Ada.Float_Text_IO; use Ada.Text_IO, Ada.Long_Integer_Text_IO, Ada.Integer_Text_IO, Ada.Float_Text_IO; procedure Main is -- DEFINIZIONE TIPI DI DATO ------------------------------- type ARR is array(1..100) of STRING(1..100); -- DICHIARAZIONE DELLE VARIABILI -------------------------- Riga: STRING(1..100); MyFile: File_Type; Lung: INTEGER; Salvare: CHARACTER; Dummy: CHARACTER; NO_CAMPI: INTEGER; CAMPI: ARR; Esci: BOOLEAN; -- PROCEDURE ---------------------------------------------- procedure VisualizzaMenu is begin -- Inizializzo il terminale --------------- Put(ASCII.ESC); Put("[2J"); Put(ASCII.ESC); Put("[1;H"); Put("-----------------------MENU PRINCIPALE----------------------------"); New_Line; Put("- A: Ricerca Record | B: Aggiungi Record | C: Rimuovi Record -"); New_Line; Put("- D: Modifica Record | E: Cancella File | F: Esci -"); New_Line; Put("------------------------------------------------------------------"); New_Line(1); end VisualizzaMenu; ----------------- procedure CAMPI_VisualizzaTutti is begin -- INIZIALIZZO IL TERMINALE------- Put(ASCII.ESC); Put("[2J"); VisualizzaMenu; Put(ASCII.ESC); Put("[8;H"); New_Line; for j in 1..(NO_CAMPI) loop put("---------------------------------------------"); New_Line; put(j,1); put(" - "); Put(CAMPI(j)); New_Line; end loop; end CAMPI_VisualizzaTutti; ------------------ procedure CAMPI_Modifica is begin -- INIZIALIZZO IL TERMINALE------- Put(ASCII.ESC); Put("[5;H"); Put("Inserire il numero corrispondente all'evento da modificare ---> "); Get(Lung); Put("Inserire il testo del nuovo evento ---> "); CAMPI(Lung)(10..90):= (others => ' '); Skip_Line; Get_Line(CAMPI(Lung)(11..90),Lung); end CAMPI_Modifica; ------------------ procedure CAMPI_Cerca is Trovati: ARR; Data: STRING(1..8); begin for i in 1..NO_CAMPI loop Trovati(i):=(others=> ' '); end loop; Put("Inserire la data per la ricerca degli eventi: "); Skip_Line; Get_Line(Data,Lung); for i in 1..NO_CAMPI loop if CAMPI(i)(1..8) = Data then Trovati(i):= CAMPI(i); end if; end loop; -- INIZIALIZZO IL TERMINALE------- Put(ASCII.ESC); Put("[2J"); VisualizzaMenu; Put(ASCII.ESC); Put("[8;H"); for i in 1..NO_CAMPI loop if Trovati(i)(1..1) /= " " then put("---------------------------------------------"); New_Line; Put(i,1); Put(" - "); Put(CAMPI(I)); New_Line; end if; End loop; Put(ASCII.ESC);Put("[5;H"); Put("Selezionare un carattere a caso per visualizzare tutti gli eventi."); Get(Dummy); end CAMPI_Cerca; ------------------ procedure CAMPI_Ordina is TEMP: STRING(1..100); A: LONG_INTEGER; B: LONG_INTEGER; begin TEMP:= (others=> ' '); for i in 1..(NO_CAMPI-1) loop A:= ((LONG_INTEGER'Value(CAMPI(i)(1..2)))+(LONG_INTEGER'Value(CAMPI(i)(4..5)))*60+(LONG_INTEGER'Value(CAMPI(i)(7..8)))*722); B:= ((LONG_INTEGER'Value(CAMPI(i+1)(1..2)))+(LONG_INTEGER'Value(CAMPI(i+1)(4..5)))*60+(LONG_INTEGER'Value(CAMPI(i+1)(7..8)))*722); if A > B then TEMP:= CAMPI(i+1); CAMPI(i+1):=CAMPI(i); CAMPI(i):=TEMP; end if; end loop; if TEMP(1..2) /= " " then CAMPI_Ordina; end if; end CAMPI_Ordina; ------------------ procedure CAMPI_Aggiungi is begin Skip_Line; Put("Inserire la data dell'evento nella forma XX.XX.XX . -->"); get_Line(CAMPI(NO_CAMPI+1)(1..9),Lung); CAMPI(NO_CAMPI+1)(10..10):= " "; Put("Inserire l'evento (Max 80 caratteri) --> "); get_Line(CAMPI(NO_CAMPI+1)(11..90),Lung); NO_CAMPI:=NO_CAMPI+1; CAMPI_Ordina; end CAMPI_Aggiungi; ------------------ procedure CAMPI_Rimuovi is begin Put("Digitare il numero corrispondente all'evento da eliminare."); Get(Lung); for i in Lung..(NO_CAMPI) loop CAMPI(i):=CAMPI(i+1); end loop; NO_CAMPI:=NO_CAMPI-1; end CAMPI_Rimuovi; ----------------- procedure FILE_to_ARRAY is begin NO_CAMPI:=0; while not End_Of_File(MyFile) loop NO_CAMPI:=NO_CAMPI+1; Riga:= (others=> ' '); Get_Line(MyFile, Riga, Lung); CAMPI(NO_CAMPI):= Riga; end loop; end FILE_to_ARRAY; ------------------ procedure ARRAY_TO_FILE is begin close(Myfile); Open(MyFile, Out_File, "Agenda.TXT"); for i in 1..NO_CAMPI loop put_Line(MyFile, CAMPI(i)(1..90)); end loop; end ARRAY_TO_FILE; ----------------- procedure ControlloFile is begin Open(MyFile, In_File, "Agenda.TXT"); Put("-----> Ricerca File Agenda.TXT"); New_Line; Put("-----> File 'Agenda.TXT' trovato."); end ControlloFile; ----------------- procedure SelezioneMenu is Selezione : CHARACTER; begin New_Line; Get(Selezione); Put(ASCII.ESC); Put("[6;H"); New_Line(1); case Selezione is when 'a' | 'A' =>-- INIZIALIZZO IL TERMINALE------- Put(ASCII.ESC); Put("[5;H"); CAMPI_Cerca; CAMPI_VisualizzaTutti; when 'b' | 'B' => -- INIZIALIZZO IL TERMINALE------- Put(ASCII.ESC); Put("[5;H"); CAMPI_Aggiungi; CAMPI_VisualizzaTutti; when 'c' | 'C' => -- INIZIALIZZO IL TERMINALE------- Put(ASCII.ESC); Put("[5;H"); CAMPI_Rimuovi; CAMPI_VisualizzaTutti; When 'd' | 'D' => -- INIZIALIZZO IL TERMINALE------- Put(ASCII.ESC); Put("[5;H"); CAMPI_Modifica; CAMPI_VisualizzaTutti; when 'f' | 'F' => Esci:=TRUE; -- INIZIALIZZO IL TERMINALE------- Put(ASCII.ESC); Put("[5;H"); when others => null; end Case; if Esci = True then put("Salvare le modifiche prima di uscire? S/N"); get(Salvare); if salvare = 'S' OR salvare ='s' then ARRAY_TO_FILE; end if; -- Inizializzo il terminale --------------- Put(ASCII.ESC); Put("[2J"); else SelezioneMenu; end if; end SelezioneMenu; ------------------ -- MAIN PRINCIPALE ------------------------- begin -- INIZIALIZZAZIONE VARIABILI -------- NO_CAMPI:=0; Esci:= FALSE; ControlloFile; FILE_TO_ARRAY; CAMPI_Ordina; VisualizzaMenu; New_Line(4); CAMPI_VisualizzaTutti; SelezioneMenu; exception when NAME_ERROR => Create(MyFile, Out_File, "Agenda.TXT"); Put("-----> Il file 'Agenda.TXT' non e' stato trovato."); New_Line(1); Put("-----> Creo un nuovo file 'Agenda.TXT' nella vostra cartella principale."); Close(MyFile); Main; end Main;