Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #lang racket
- ; chaque personne est caractérisé par :
- ; Identité
- ; id
- ; nom
- ; prenom
- ; date de naissance
- ; Adresse
- ; numero
- ; rue
- ; code postal
- ; ville
- ; pays
- ; Numéro de tel
- ; *** DEFINITION DES DIFFERENTES BASES ***
- (define base '()) ; base commune servant à stocker les personnes
- (define base_adresses '()) ; base servant à stocker toutes les adresses enregistrées
- (define base_telephones '()) ; base servant à stocker tous les téléphones enregistrés
- (define base_identites '()) ; base servant à stocker toutes les identités enregistrés
- ; *** DEFINITION DES COMPTEURS POUR IDENTIFIANTS UNIQUES ***
- (define id_identite 0) ; id pour les identités
- (define id_adresse 0) ; id pour les adresses
- (define id_telephone 0) ; id pour les téléphones
- (define id_personne 0) ; id pour les personnes
- ; *** FONCTION DE TEST SERVANT A DEFINIR DES PERSONNES RANDOM POUR LES ESSAIS ***
- (define (startFunction)
- (creationAdresse '191 'faidherbe '59260 'Hellemmes 'France)
- (creationTelephone '0369719848)
- (createIdentite 'Artisien 'Nathan '08-02-1991)
- (creationPersonne 1 1 1)
- (creationAdresse '191 'liberté '59130 'Leers 'Belgique)
- (creationTelephone '0369719848)
- (createIdentite 'Dupont 'Anthony '08-02-1997)
- (creationPersonne 2 2 2)
- (creationAdresse '191 'faidherbe '59260 'Hellemmes 'France)
- (creationTelephone '0369719848)
- (createIdentite 'Artisien 'Anthony '08-02-1991)
- (creationPersonne 3 3 3)
- (creationAdresse '191 'faidherbe '59130 'Lambersart 'Belgique)
- (creationTelephone '0369719848)
- (createIdentite 'Dupont 'Thomas '08-02-1997)
- (creationPersonne 4 4 4))
- ; *** FONCTION SERVANT A CREER UNE ADRESSE SOUS LA FORME (creationAdresse '01 'faidherbe '59260 'Hellemmes 'France) ***
- (define (creationAdresse numero rue postal ville pays)
- (set! id_adresse (+ id_adresse 1)) ; incrémentation de l'identifiant
- (set! base_adresses (append (list (list id_adresse numero rue postal ville pays)) base_adresses)) ; ajout dans la base adresse
- (car base_adresses)) ; retourne la liste inserée
- ; *** FONCTION SERVANT A CREER UNE ADRESSE SOUS LA FORME (creationTelephone '0320597197) ***
- (define (creationTelephone numero)
- (set! id_telephone (+ id_telephone 1)) ; incrémentation de l'identifiant
- (set! base_telephones (append (list (list id_telephone numero)) base_telephones)) ; ajout dans la base téléphones
- (car base_telephones)) ; retourne la liste inserée
- ; *** FONCTION SERVANT A CREER UNE IDENTITE SOUS LA FORME (creationIdentite 'Artisien 'Nathan '08-02-1997) ***
- (define (createIdentite nom prenom date)
- (set! id_identite (+ id_identite 1)) ; incrémentation de l'identifiant
- (set! base_identites (append (list (list id_identite nom prenom date)) base_identites)) ; ajout dans la base identités
- (car base_identites)) ; retourne la liste insérée
- ; *** FONCTION SERVANT A CREER UNE PERSONNE, UTILISE LES IDENTIFIANTS AFIN DE "link" COMME EN MYSQL ***
- (define (creationPersonne id_iden id_adre id_tele)
- (if (> id_iden id_identite) ; vérification que l'identité existe
- '()
- (if (> id_adre id_adresse) ; vérification que l'adresse existe
- '()
- (if (> id_tele id_telephone) ; vérification que le téléphone existe
- '()
- (begin ; début de la procédure
- (set! id_personne (+ id_personne 1)) ; on incrémente l'identifiant
- (ajoutPersonne (list id_personne id_iden id_adre id_tele))))))) ; on ajoute la personne
- ; *** FONCTION SERVANT A INSERER LA PERSONNE DANS LA BASE ***
- (define (ajoutPersonne personne)
- (set! base (cons personne base)) ; ajoute la personne dans la base
- base) ; retourne la base actualisée
- ; *** FONCTION SERVANT A RETIRER UNE PERSONNE PAR ID ***
- (define (detruirePersonne id)
- (if (equal? base '()) ; vérification que la base n'est pas vide
- #f ; retourne faux auquel cas
- (begin ; Début de la procédure
- (set! base (_detruirePersonne base id)) ; actualisation de la base
- #t))) ; retourne vrai
- ; *** FONCTION AUXILIAIRE SERVANT A FAIRE LE TRAITEMENT DE SUPRESSION ***
- (define (_detruirePersonne bdd id)
- (if (equal? id (caar bdd)) ; si l'identifiant passée correspond à l'identifiant de "l'objet" actuel
- (cdr bdd) ; on renvoie le restant de la liste
- (cons (car bdd) (_detruirePersonne (cdr bdd) id)))) ; Autrement, on ajoute l'élément avec le restant de la liste (sans l'objet, voir l'instruction en haut)
- ; *** RECHERCHES POSSIBLES ***
- ; identifiant : v
- ; - nom : v
- ; - prenom : v
- ; - naissance : v
- ; adresse :
- ; - rue : v
- ; - CP : v
- ; - ville : v
- ; - pays : v
- ; - telephone : V
- ; a entrer sous la forme : (getPersonne base '[xxxx] '[valeur]
- ; où [xxxx] correspond à l'un des arguments en haut
- ; ****************************
- ; *** FONCTION SERVANT A CHERCHER DANS LA BASE DE DONNEES SUIVANT UN MOT CLE ET UNE VALEUR ***
- (define (getPersonne bdd search value)
- (if (equal? search 'identifiant) ; IDENTIFIANT
- (getPersonneById bdd value)
- (if (equal? search 'nom) ; NOM
- (searchInIdentites bdd 'lastname value)
- (if (equal? search 'prenom) ; PRENOM
- (searchInIdentites bdd 'firstname value)
- (if (equal? search 'naissance) ; NAISSANCE
- (searchInIdentites bdd 'birthday value)
- (if (equal? search 'telephone) ; TELEPHONE
- (searchInTelephone bdd value)
- (if (equal? search 'ville) ; Ville
- (searchInAdresse bdd 'city value)
- (if (equal? search 'pays) ; Pays
- (searchInAdresse bdd 'country value)
- (if (equal? search 'cp) ; CP
- (searchInAdresse bdd 'CP value)
- (if (equal? search 'rue) ; Rue
- (searchInAdresse bdd 'rue value)
- #f))))))))))
- ; *** FONCTION SERVANT A CHERCHER UNE PERSONNE PAR SON ID ****
- (define (getPersonneById bdd value)
- (if (equal? '() bdd)
- '()
- (if (equal? (caar bdd) value)
- (car bdd)
- (getPersonneById (cdr bdd) value))))
- ; *** FONCTION SERVANT A CHERCHER UNE IDENTITE PAR SON ID ***
- (define (getIdentiteById bdd id)
- (if (equal? '() bdd)
- '()
- (if (equal? (caar bdd) id)
- (car bdd)
- (getIdentiteById (cdr bdd) id))))
- ; *** FONCTION SERVANT A CHERCHER UN TELEPHONE PAR SON ID ***
- (define (getTelephoneById bdd id)
- (if (equal? '() bdd)
- '()
- (if (equal? (caar bdd) id)
- (car bdd)
- (getTelephoneById (cdr bdd) id))))
- ; *** FONCTION SERVANT A CHERCHER UNE ADRESSE PAR SON ID ***
- (define (getAdresseById bdd id)
- (if (equal? '() bdd)
- '()
- (if (equal? (caar bdd) id)
- (car bdd)
- (getAdresseById (cdr bdd) id))))
- ; *** FONCTION SERVANT A RECUPERER L'IDENTITE DE QUELQU'UN SUIVANT L'ID D'UNE ADRESSE ***
- (define (getPersonneByAdresseId bdd id)
- (if (equal? '() bdd)
- '()
- (let ([info (car bdd)])
- (if (equal? (cadr info) id)
- (getIdentiteById base_identites (caddr info))
- (getPersonneByAdresseId (cdr bdd) id)))))
- ; *** FONCTION SERVANT A CHERCHER DANS LA BASE IDENTITE SUIVANT UN TAG DE RECHERCHE ET UNE VALEUR ***
- (define (searchInIdentites bdd tag value)
- (if (equal? '() bdd)
- '()
- (if (equal? tag 'lastname) ; NOM
- (searchInIdentitesLastName bdd value)
- (if (equal? tag 'firstname) ; PRENOM
- (searchInIdentitesFirstName bdd value)
- (if (equal? tag 'birthday) ; DATE DE NAISSANCE
- (searchInIdentitesBirthday bdd value)
- #f)))))
- ; *** FONCTION SERVANT A CHERCHER DANS LA BASE ADRESSE SUIVANT UN TAG DE RECHERCHE ET UNE VALEUR ***
- (define (searchInAdresse bdd tag value)
- (if (equal? '() bdd)
- '()
- (if (equal? tag 'city) ; VILLE
- (searchInAdresseVille bdd value)
- (if (equal? tag 'country) ; PAYS
- (searchInAdresseCountry bdd value)
- (if (equal? tag 'CP) ; CODE POSTAL
- (searchInAdresseCP bdd value)
- (if (equal? tag 'rue) ; RUE
- (searchInAdresseRue bdd value)
- #f))))))
- ; *** FONCTION SERVANT A CHERCHER UNE VILLE ***
- (define (searchInAdresseVille bdd value)
- (if (equal? '() bdd)
- '()
- (let ([info (getAdresseById base_adresses (car (cddr (car bdd))))]) ; (car (cddr (car bdd))) donne l'identifiant lié à l'adresse
- (if (equal? (car(cddddr info)) value) ; (car (cddddr info)) donne la ville
- (cons (getPersonneByAdresseId bdd (car info)) (searchInAdresseVille (cdr bdd) value)) ; si c'est la bonne ville, on retourne un tableau contenant l'identité de la personne, ainsi que les autres recherches
- (searchInAdresseVille (cdr bdd) value))))) ; Autrement on continue les recherches
- ; *** FONCTION SERVANT A CHERCHER UN PAYS ***
- (define (searchInAdresseCountry bdd value)
- (if (equal? '() bdd)
- '()
- (let ([info (getAdresseById base_adresses (car (cddr (car bdd))))]) ; (car (cddr (car bdd))) donne l'identifiant lié à l'adresse
- (if (equal? (car(cdr(cddddr info))) value) ; (car (cdr (cddddr info))) fdonne le pays
- (cons (getPersonneByAdresseId bdd (car info)) (searchInAdresseCountry (cdr bdd) value)) ; si c'est le bon pays, on retourne un tableau contenant l'identité de la personne, ainsi que les autres résultats
- (searchInAdresseCountry (cdr bdd) value))))) ; autrement on continue la recherche
- ; *** FONCTION SERVANT A RECHERCHER PAR RUE ***
- (define (searchInAdresseRue bdd value)
- (if (equal? '() bdd)
- '()
- (let ([info (getAdresseById base_adresses (car (cddr (car bdd))))]) ; (car (cddr (car bdd))) donne l'identifiant lié à l'adresse
- (if (equal? (caddr info) value) ; (caddr info) donne la rue
- (cons (getPersonneByAdresseId bdd (car info)) (searchInAdresseRue (cdr bdd) value)) ; si c'est la bonne vile, [...]
- (searchInAdresseRue (cdr bdd) value))))) ; autrement on continue la recherche
- ; *** FONCTION SERVANT A RECHERCHER PAR CP ***
- (define (searchInAdresseCP bdd value)
- (if (equal? '() bdd)
- '()
- (let ([info (getAdresseById base_adresses (car (cddr (car bdd))))])
- (if (equal? (cadddr info) value)
- (cons (getPersonneByAdresseId bdd (car info)) (searchInAdresseCP (cdr bdd) value))
- (searchInAdresseCP (cdr bdd) value)))))
- ; *** FONCTION SERVANT A RECHERCHER DANS LA BASE IDENTITES PAR NOM DE FAMILLE ***
- (define (searchInIdentitesLastName bdd value)
- (if (equal? '() bdd)
- '()
- (let ([info (getIdentiteById base_identites (car (cdddr (car bdd))))]) ; (car (cdddr (car bdd))) donne l'identifiant lié à l'identité
- (if (equal? (cadr info) value) ; (cadr info) donne le nom de famille
- (cons info (searchInIdentitesLastName (cdr bdd) value)) ; si c'est le bon nom, on renvoie une liste contenant l'identité + les autres résultats de recherche
- (searchInIdentitesLastName (cdr bdd) value))))) ; autrement on continue de rechercher
- ; *** FONCTION SERVANT A RECHERCHER DANS LA BASE IDENTITES PAR PRENOM ***
- (define (searchInIdentitesFirstName bdd value)
- (if (equal? '() bdd)
- '()
- (let ([info (getIdentiteById base_identites (car (cdddr (car bdd))))])
- (if (equal? (caddr info) value) ; (caddr info) donne le prénom
- (cons info (searchInIdentitesFirstName (cdr bdd) value))
- (searchInIdentitesFirstName (cdr bdd) value)))))
- ; *** FONCTION SERVANT A RECHERCHER DANS LA BASE IDENTITES PAR DATE DE NAISSANCE SOUS LA FORME dd-mm-yyyy ****
- (define (searchInIdentitesBirthday bdd value)
- (if (equal? '() bdd)
- '()
- (let ([info (getIdentiteById base_identites (car (cdddr (car bdd))))])
- (if (equal? (cadddr info) value) ; (cadddr info) donne la date de naissance
- (cons info (searchInIdentitesBirthday (cdr bdd) value))
- (searchInIdentitesBirthday (cdr bdd) value)))))
- ; *** FONCTION SERVANT A RECHERCHER DANS LA BASE TELEPHONE PAR VALEUR ***
- (define (searchInTelephone bdd value)
- (if (equal? '() bdd)
- '()
- (let ([info (getTelephoneById base_telephones (car (cddr (car bdd))))]) ; (car (cddr (car bdd))) donne l'identifiant lié au téléphone
- (if (equal? (cadr info) value) ; (cadr info) donne le numéro de téléphone
- info ; si c'est le bon numéro, on le renvoie. Un numéro est unique, pas besoin de rechercher d'autres numéros identiques
- (searchInTelephone bdd value))))) ; Si c'est pas le bon, on continue les recherches
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement