• Aucun résultat trouvé

Solutions possibles

Dans le document Apprenez à programmer avec Ada (Page 91-96)

Comme promis, voici une solution possible à comparer avec votre travail.

Maktaba.adb :

---- Contient la procédure principale du logiciel MAKTBA ainsi que les

procédures d'affichage et de saisie.

-- ---

---Retrouvez le tuto à l'adresse suivante

d'informations, tapez l'instruction MANUAL. ") ; end if ;

--Partie 3 : Ada, les types composites 91/312

-- Contient les différents types nécessaires au fonctionnement du

---Retrouvez le tuto à l'adresse suivante

http://www.siteduzero.com/tutoriel-3-558031-1-second-tp-un-logiciel-de-gestion-de-bibliotheque.html

package Maktaba_Types is

type T_Categorie is (FILM,JEU,ALBUM,AUTRE) ; type T_Support is (CD, DVD, BLURAY, VHS, HDDVD) ; type T_Morceaux is array(1..30) of string(1..50) ; type T_Oeuvre(categorie : T_Categorie := AUTRE) is record

type T_Film is new T_Oeuvre(FILM) ; type T_Jeu is new T_Oeuvre(JEU) ; type T_Album is new T_Oeuvre(ALBUM) ; type T_Autre is new T_Oeuvre(AUTRE) ; end ;

---- Contient les fonctions de saisie, d'affichage, de sauvegarde…

du

logiciel MAKTABA.

-- ---

---Retrouvez le tuto à l'adresse suivante

http://www.siteduzero.com/tutoriel-3-558031-1-second-tp-un-logiciel-de-gestion-de-bibliotheque.html

with Maktaba_Types ; use Maktaba_Types ; WITH Ada.Sequential_IO ;

package Maktaba_Functions is

Package P_Fichier is new Ada.Sequential_IO(T_Oeuvre) ; use P_Fichier ;

subtype T_Fichier is P_Fichier.File_type ; procedure sauvegarde(Oeuvre : in T_Oeuvre) ;

procedure sauvegarde(oeuvre : in T_Oeuvre ; rang : natural) ; procedure creation(cat : T_categorie) ;

procedure Ouvrir(F: in out T_Fichier ; mode :

P_Fichier.File_Mode := P_Fichier.In_file ; cat : T_Categorie);

procedure supprimer(cat : T_Categorie ; rang : natural) ; -- SAISIES

function get_text(size : integer) return string ; function get_categorie return T_Categorie ; function saisie(cat : T_Categorie) return T_Oeuvre ; -- MANIPULATION DE LA BDD

procedure affichage_oeuvre(Oeuvre : in T_Oeuvre) ; procedure affichage_bdd(cat : T_categorie) ; procedure Edit_bdd(cat : T_Categorie) ; -- Manuel

procedure affichage_manuel ; end Maktaba_Functions ;

---- Contient les fonctions de saisie, d'affichage, de sauvegarde ... du

logiciel MAKTABA.

-- ---

---Retrouvez le tuto à l'adresse suivante

http://www.siteduzero.com/tutoriel-3-558031-1-second-tp-un-logiciel-de-gestion-de-bibliotheque.html

Partie 3 : Ada, les types composites 92/312

with Ada.Text_IO ; use Ada.Text_IO ;

---procedure sauvegarde(Oeuvre : in T_Oeuvre) is F : T_Fichier ;

procedure sauvegarde(oeuvre : in T_Oeuvre ; rang : natural) is F,G : T_Fichier ;

tmp : T_Oeuvre ; begin

-- Ouverture de F en In et de G en Append ouvrir(F,In_File,oeuvre.categorie) ; create(G,Append_File,Name(F) & "2") ; -- copie de F+oeuvre dans G

read(F,tmp) ; --lecture de l'élément à supprimer while not end_of_file(F) loop

read(F,tmp) ;

open(G,In_File,Name(F) & "2") ; -- copie de G dans F while not end_of_file(G) loop read(G,tmp) ;

when FILM => create(F,out_file,"./data/ListeFilm.bdd") ; close(F) ;

when JEU => create(F,out_file,"./data/ListeJeu.bdd") ; close(F) ;

when ALBUM => create(F,out_file,"./data/ListeAlbum.bdd") ; close(F) ;

when AUTRE => create(F,out_file,"./data/ListeAutre.bdd") ; close(F) ;

end case ; end creation ;

procedure Ouvrir(F: in out T_Fichier ;

mode : P_Fichier.File_Mode := P_Fichier.In_file ; cat : T_Categorie) is

begin case cat is

when FILM => open(F,mode,"./data/ListeFilm.bdd") ; when JEU => open(F,mode,"./data/ListeJeu.bdd") ; when ALBUM => open(F,mode,"./data/ListeAlbum.bdd") ; when AUTRE => open(F,mode,"./data/ListeAutre.bdd") ; end case ;

end Ouvrir;

procedure supprimer(cat : T_Categorie ; rang : natural) is F,G : T_Fichier ;

tmp : T_Oeuvre ; begin

-- Ouverture de F en In et de G en Append ouvrir(F,In_File,cat) ;

create(G,Append_File,Name(F) & "2") ; -- copie de F-1 oeuvre dans G

while not end_of_file(F) loop read(F,tmp) ;

open(G,In_File,Name(F) & "2") ; -- copie de G dans F while not end_of_file(G) loop read(G,tmp) ; function get_text(size : integer) return string is U : Unbounded_String := Null_Unbounded_String ; T : string(1..size) := (others => ' ') ;

function get_categorie return T_Categorie is choix_cat : character ;

begin

Put_line("Choisissez la categorie desiree : ") ; Put_line("F-Film M-Album de Musique") ; Put_line("J-Jeu Video Autre ?") ;

Get_Immediate(choix_cat) ; choix_cat := to_upper(choix_cat)

; case choix_cat is

when 'F' => return FILM ;

Partie 3 : Ada, les types composites 93/312

when 'M' => return ALBUM ; when 'J' => return JEU;

when others => return AUTRE ; end case ;

end get_categorie ;

function saisie(cat : T_Categorie) return T_Oeuvre is oeuvre : T_Oeuvre(cat) ;

Put_line("Sur quel type de support l'oeuvre est-elle enregistree ?") ;

put(" >>>Titre : ") ; put(Oeuvre.titre) ; new_line ; put(" >>>Support : ") ; put(T_Support'image(Oeuvre.support)) ; new_line ;

put(" >>>Note : ") ; put(Oeuvre.note,1) ; new_line ; case oeuvre.categorie is

when FILM => put(" >>>Realisateur : ") ; --Affiche toute une base de données selon la catégorie demandée n : natural := 1 ; while not end_of_file(F) loop if n = 0

Partie 3 : Ada, les types composites 94/312

--- EDITION DE LA BASE DE DONNEES

---procedure Edit_bdd(cat : T_Categorie) is --Edite une base de données pour modification ou suppression

choix : character ; n : natural := 1 ; Oeuvre : T_Oeuvre(cat) ; F : T_Fichier ; begin

ouvrir(F,In_File,cat) ; while not end_of_file(F) loop read(F,Oeuvre) ; Affichage_oeuvre(oeuvre) ;

put_line("Que voulez-vous faire : Supprimer(S), Modifier(M), Quitter(Q) ou Continuer ?") ;

Get_Immediate(choix) ; choix := to_upper(choix) ; if choix = 'M'

then close(F) ;

oeuvre := saisie(cat) ; sauvegarde(oeuvre,n) ; exit ;

elsif choix = 'S' then close(F) ; Supprimer(cat,n) ; exit ; elsif choix = 'Q' then close(F) ; exit ; end if ; n := n + 1 ; end loop ; if Is_Open(F) then close(F) ; end if ; end Edit_bdd ;

--- EDITION DE LA BASE DE DONNEES

---procedure affichage_manuel is F : Ada.text_IO.File_Type ; begin

open(F,In_File,"./manual/manual.txt") ; while not end_of_file(F) loop put_line(get_line(F)) ; end loop ;

close(F) ; end affichage_manuel ; end Maktaba_Functions ;

Manual.txt :

Secret (cliquez pour afficher) Code : Français

Commandes :

Quitter : Quit / Exit Nouveau : New Manuel : Manual Réinitialiser une base : Init / Erase Afficher une base : Print Modifier une base : Edit

Pistes d'amélioration :

Fournir une interface graphique plutôt que cette vilaine console. Pour l'instant, vous ne pouvez pas encore le faire, mais cela viendra.

Proposer de gérer d'autres types de supports : disque durs, clés USB…

Proposer l'enregistrement de nouvelles informations : le genre de l’œuvre (film d'horreur ou d'aventure, album rock ou rap…), une description, les acteurs du film, les membres du groupe de musique, l'éditeur du jeu vidéo, la durée des morceaux…

Proposer l'exportation de vos bases de données sous formes de fichiers textes consultables plus aisément ou l'importation d'une œuvre à partir d'un fichier texte.

Permettre de compléter les instructions en ligne de commande par des options : modify -f modifierait un film par exemple.

Implémenter un service de recherche d’œuvre par titre, par auteur ou même par mots-clés !

Encore une fois, ce ne sont pas les idées qui manquent pour développer un tel logiciel. J'espère toutefois que ce TP vous aura permis de faire un point sur les notions abordées depuis le début de la partie III car nous allons maintenant nous atteler à un type de données plus complexe : les pointeurs. Et, de la même manière que nous avons parlé, reparlé et rereparlé des tableaux, nous allons parler, reparler et rereparler des pointeurs dans les prochains chapitres.

Partie 3 : Ada, les types composites 95/312

Dans le document Apprenez à programmer avec Ada (Page 91-96)