Advertisement
Guest User

Untitled

a guest
Nov 13th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 12.73 KB | None | 0 0
  1. #lang racket
  2.  
  3. ; chaque personne est caractérisé par :
  4. ; Identité
  5. ;    id
  6. ;    nom
  7. ;    prenom
  8. ;    date de naissance
  9. ; Adresse
  10. ;    numero
  11. ;    rue
  12. ;    code postal
  13. ;    ville
  14. ;    pays
  15. ; Numéro de tel
  16.  
  17. ; *** DEFINITION DES DIFFERENTES BASES ***
  18. (define base '())             ; base commune servant à stocker les personnes
  19. (define base_adresses '())    ; base servant à stocker toutes les adresses enregistrées
  20. (define base_telephones '())  ; base servant à stocker tous les téléphones enregistrés
  21. (define base_identites '())   ; base servant à stocker toutes les identités enregistrés
  22.  
  23. ; *** DEFINITION DES COMPTEURS POUR IDENTIFIANTS UNIQUES ***
  24. (define id_identite 0)  ; id pour les identités
  25. (define id_adresse 0)   ; id pour les adresses
  26. (define id_telephone 0) ; id pour les téléphones
  27. (define id_personne 0)  ; id pour les personnes
  28.  
  29. ; *** FONCTION DE TEST SERVANT A DEFINIR DES PERSONNES RANDOM POUR LES ESSAIS ***
  30. (define (startFunction)
  31.   (creationAdresse '191 'faidherbe '59260 'Hellemmes 'France)
  32.   (creationTelephone '0369719848)
  33.   (createIdentite 'Artisien 'Nathan '08-02-1991)
  34.   (creationPersonne 1 1 1)
  35.  
  36.   (creationAdresse '191 'liberté '59130 'Leers 'Belgique)
  37.   (creationTelephone '0369719848)
  38.   (createIdentite 'Dupont 'Anthony '08-02-1997)
  39.   (creationPersonne 2 2 2)
  40.  
  41.   (creationAdresse '191 'faidherbe '59260 'Hellemmes 'France)
  42.   (creationTelephone '0369719848)
  43.   (createIdentite 'Artisien 'Anthony '08-02-1991)
  44.   (creationPersonne 3 3 3)
  45.  
  46.   (creationAdresse '191 'faidherbe '59130 'Lambersart 'Belgique)
  47.   (creationTelephone '0369719848)
  48.   (createIdentite 'Dupont 'Thomas '08-02-1997)
  49.   (creationPersonne 4 4 4))
  50.  
  51. ; *** FONCTION SERVANT A CREER UNE ADRESSE SOUS LA FORME (creationAdresse '01 'faidherbe '59260 'Hellemmes 'France) ***
  52. (define (creationAdresse numero rue postal ville pays)
  53.   (set! id_adresse (+ id_adresse 1)) ; incrémentation de l'identifiant
  54.   (set! base_adresses (append (list (list id_adresse numero rue postal ville pays)) base_adresses)) ; ajout dans la base adresse
  55.   (car base_adresses)) ; retourne la liste inserée
  56.  
  57. ; *** FONCTION SERVANT A CREER UNE ADRESSE SOUS LA FORME (creationTelephone '0320597197) ***
  58. (define (creationTelephone numero)
  59.   (set! id_telephone (+ id_telephone 1)) ; incrémentation de l'identifiant
  60.   (set! base_telephones (append (list (list id_telephone numero)) base_telephones)) ; ajout dans la base téléphones
  61.   (car base_telephones)) ; retourne la liste inserée
  62.  
  63. ; *** FONCTION SERVANT A CREER UNE IDENTITE SOUS LA FORME (creationIdentite 'Artisien 'Nathan '08-02-1997) ***
  64. (define (createIdentite nom prenom date)
  65.   (set! id_identite (+ id_identite 1)) ; incrémentation de l'identifiant
  66.   (set! base_identites (append (list (list id_identite nom prenom date)) base_identites)) ; ajout dans la base identités
  67.   (car base_identites)) ; retourne la liste insérée
  68.  
  69. ; *** FONCTION SERVANT A CREER UNE PERSONNE, UTILISE LES IDENTIFIANTS AFIN DE "link" COMME EN MYSQL ***
  70. (define (creationPersonne id_iden id_adre id_tele)
  71.   (if (> id_iden id_identite) ; vérification que l'identité existe
  72.       '()
  73.       (if (> id_adre id_adresse) ; vérification que l'adresse existe
  74.           '()
  75.           (if (> id_tele id_telephone) ; vérification que le téléphone existe
  76.               '()
  77.               (begin ; début de la procédure
  78.                 (set! id_personne (+ id_personne 1)) ; on incrémente l'identifiant
  79.                 (ajoutPersonne (list id_personne id_iden id_adre id_tele))))))) ; on ajoute la personne
  80.  
  81. ; *** FONCTION SERVANT A INSERER LA PERSONNE DANS LA BASE ***
  82. (define (ajoutPersonne personne)
  83.   (set! base (cons personne base)) ; ajoute la personne dans la base
  84.   base) ; retourne la base actualisée
  85.  
  86. ; *** FONCTION SERVANT A RETIRER UNE PERSONNE PAR ID ***
  87. (define (detruirePersonne id)
  88.   (if (equal? base '()) ; vérification que la base n'est pas vide
  89.       #f ; retourne faux auquel cas
  90.       (begin ; Début de la procédure
  91.         (set! base (_detruirePersonne base id)) ; actualisation de la base
  92.         #t))) ; retourne vrai
  93.  
  94. ; *** FONCTION AUXILIAIRE SERVANT A FAIRE LE TRAITEMENT DE SUPRESSION ***
  95. (define (_detruirePersonne bdd id)
  96.   (if (equal? id (caar bdd)) ; si l'identifiant passée correspond à l'identifiant de "l'objet" actuel
  97.       (cdr bdd) ; on renvoie le restant de la liste
  98.       (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)
  99.  
  100. ; *** RECHERCHES POSSIBLES ***
  101. ; identifiant : v
  102. ; - nom : v
  103. ; - prenom : v
  104. ; - naissance : v
  105. ; adresse :
  106. ;    - rue : v
  107. ;    - CP : v
  108. ;    - ville : v
  109. ;    - pays : v
  110. ; - telephone : V
  111. ; a entrer sous la forme : (getPersonne base '[xxxx] '[valeur]
  112. ; où [xxxx] correspond à l'un des arguments en haut
  113. ; ****************************
  114.  
  115. ; *** FONCTION SERVANT A CHERCHER DANS LA BASE DE DONNEES SUIVANT UN MOT CLE ET UNE VALEUR ***
  116. (define (getPersonne bdd search value)
  117.   (if (equal? search 'identifiant) ; IDENTIFIANT
  118.       (getPersonneById bdd value)
  119.       (if (equal? search 'nom) ; NOM
  120.           (searchInIdentites bdd 'lastname value)
  121.           (if (equal? search 'prenom) ; PRENOM
  122.               (searchInIdentites bdd 'firstname value)
  123.               (if (equal? search 'naissance) ; NAISSANCE
  124.                   (searchInIdentites bdd 'birthday value)
  125.                   (if (equal? search 'telephone) ; TELEPHONE
  126.                       (searchInTelephone bdd value)
  127.                       (if (equal? search 'ville) ; Ville
  128.                           (searchInAdresse bdd 'city value)
  129.                           (if (equal? search 'pays) ; Pays
  130.                               (searchInAdresse bdd 'country value)
  131.                               (if (equal? search 'cp) ; CP
  132.                                   (searchInAdresse bdd 'CP value)
  133.                                   (if (equal? search 'rue) ; Rue
  134.                                       (searchInAdresse bdd 'rue value)
  135.                                       #f))))))))))
  136.  
  137. ; *** FONCTION SERVANT A CHERCHER UNE PERSONNE PAR SON ID ****
  138. (define (getPersonneById bdd value)
  139.   (if (equal? '() bdd)
  140.       '()
  141.       (if (equal? (caar bdd) value)
  142.           (car bdd)
  143.           (getPersonneById (cdr bdd) value))))
  144.  
  145. ; *** FONCTION SERVANT A CHERCHER UNE IDENTITE PAR SON ID ***
  146. (define (getIdentiteById bdd id)
  147.   (if (equal? '() bdd)
  148.       '()
  149.       (if (equal? (caar bdd) id)
  150.           (car bdd)
  151.           (getIdentiteById (cdr bdd) id))))
  152.  
  153. ; *** FONCTION SERVANT A CHERCHER UN TELEPHONE PAR SON ID ***
  154. (define (getTelephoneById bdd id)
  155.   (if (equal? '() bdd)
  156.       '()
  157.       (if (equal? (caar bdd) id)
  158.           (car bdd)
  159.           (getTelephoneById (cdr bdd) id))))
  160.  
  161. ; *** FONCTION SERVANT A CHERCHER UNE ADRESSE PAR SON ID ***
  162. (define (getAdresseById bdd id)
  163.   (if (equal? '() bdd)
  164.       '()
  165.       (if (equal? (caar bdd) id)
  166.           (car bdd)
  167.           (getAdresseById (cdr bdd) id))))
  168.  
  169. ; *** FONCTION SERVANT A RECUPERER L'IDENTITE DE QUELQU'UN SUIVANT L'ID D'UNE ADRESSE ***
  170. (define (getPersonneByAdresseId bdd id)
  171.   (if (equal? '() bdd)
  172.       '()
  173.       (let ([info (car bdd)])
  174.         (if (equal? (cadr info) id)
  175.             (getIdentiteById base_identites (caddr info))
  176.             (getPersonneByAdresseId (cdr bdd) id)))))
  177.  
  178. ; *** FONCTION SERVANT A CHERCHER DANS LA BASE IDENTITE SUIVANT UN TAG DE RECHERCHE ET UNE VALEUR ***
  179. (define (searchInIdentites bdd tag value)
  180.   (if (equal? '() bdd)
  181.       '()
  182.       (if (equal? tag 'lastname) ; NOM
  183.           (searchInIdentitesLastName bdd value)
  184.           (if (equal? tag 'firstname) ; PRENOM
  185.               (searchInIdentitesFirstName bdd value)
  186.               (if (equal? tag 'birthday) ; DATE DE NAISSANCE
  187.                   (searchInIdentitesBirthday bdd value)
  188.                   #f)))))
  189.  
  190. ; *** FONCTION SERVANT A CHERCHER DANS LA BASE ADRESSE SUIVANT UN TAG DE RECHERCHE ET UNE VALEUR ***
  191. (define (searchInAdresse bdd tag value)
  192.   (if (equal? '() bdd)
  193.       '()
  194.       (if (equal? tag 'city) ; VILLE
  195.           (searchInAdresseVille bdd value)
  196.           (if (equal? tag 'country) ; PAYS
  197.               (searchInAdresseCountry bdd value)
  198.               (if (equal? tag 'CP) ; CODE POSTAL
  199.                   (searchInAdresseCP bdd value)
  200.                   (if (equal? tag 'rue) ; RUE
  201.                       (searchInAdresseRue bdd value)
  202.                       #f))))))
  203.  
  204. ; *** FONCTION SERVANT A CHERCHER UNE VILLE ***
  205. (define (searchInAdresseVille bdd value)
  206.   (if (equal? '() bdd)
  207.       '()
  208.       (let ([info (getAdresseById base_adresses (car (cddr (car bdd))))]) ; (car (cddr (car bdd))) donne l'identifiant lié à l'adresse
  209.         (if (equal? (car(cddddr info)) value) ; (car (cddddr info)) donne la ville
  210.             (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
  211.             (searchInAdresseVille (cdr bdd) value))))) ; Autrement on continue les recherches
  212.  
  213. ; *** FONCTION SERVANT A CHERCHER UN PAYS ***
  214. (define (searchInAdresseCountry bdd value)
  215.   (if (equal? '() bdd)
  216.       '()
  217.       (let ([info (getAdresseById base_adresses (car (cddr (car bdd))))]) ; (car (cddr (car bdd))) donne l'identifiant lié à l'adresse
  218.         (if (equal? (car(cdr(cddddr info))) value) ; (car (cdr (cddddr info))) fdonne le pays
  219.             (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
  220.             (searchInAdresseCountry (cdr bdd) value))))) ; autrement on continue la recherche
  221.  
  222. ; *** FONCTION SERVANT A RECHERCHER PAR RUE ***
  223. (define (searchInAdresseRue bdd value)
  224.   (if (equal? '() bdd)
  225.       '()
  226.       (let ([info (getAdresseById base_adresses (car (cddr (car bdd))))]) ; (car (cddr (car bdd))) donne l'identifiant lié à l'adresse
  227.         (if (equal? (caddr info) value) ; (caddr info) donne la rue
  228.             (cons (getPersonneByAdresseId bdd (car info)) (searchInAdresseRue (cdr bdd) value)) ; si c'est la bonne vile, [...]
  229.             (searchInAdresseRue (cdr bdd) value))))) ; autrement on continue la recherche
  230.  
  231. ; *** FONCTION SERVANT A RECHERCHER PAR CP ***
  232. (define (searchInAdresseCP bdd value)
  233.   (if (equal? '() bdd)
  234.       '()
  235.       (let ([info (getAdresseById base_adresses (car (cddr (car bdd))))])
  236.         (if (equal? (cadddr info) value)
  237.             (cons (getPersonneByAdresseId bdd (car info)) (searchInAdresseCP (cdr bdd) value))
  238.             (searchInAdresseCP (cdr bdd) value)))))
  239.  
  240. ; *** FONCTION SERVANT A RECHERCHER DANS LA BASE IDENTITES PAR NOM DE FAMILLE ***
  241. (define (searchInIdentitesLastName bdd value)
  242.   (if (equal? '() bdd)
  243.       '()
  244.       (let ([info (getIdentiteById base_identites (car (cdddr (car bdd))))]) ; (car (cdddr (car bdd))) donne l'identifiant lié à l'identité
  245.       (if (equal? (cadr info) value) ; (cadr info) donne le nom de famille
  246.           (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
  247.           (searchInIdentitesLastName (cdr bdd) value))))) ; autrement on continue de rechercher
  248.  
  249. ; *** FONCTION SERVANT A RECHERCHER DANS LA BASE IDENTITES PAR PRENOM ***
  250. (define (searchInIdentitesFirstName bdd value)
  251.   (if (equal? '() bdd)
  252.       '()
  253.       (let ([info (getIdentiteById base_identites (car (cdddr (car bdd))))])
  254.         (if (equal? (caddr info) value) ; (caddr info) donne le prénom
  255.             (cons info (searchInIdentitesFirstName (cdr bdd) value))
  256.             (searchInIdentitesFirstName (cdr bdd) value)))))
  257.  
  258. ; *** FONCTION SERVANT A RECHERCHER DANS LA BASE IDENTITES PAR DATE DE NAISSANCE SOUS LA FORME dd-mm-yyyy ****
  259. (define (searchInIdentitesBirthday bdd value)
  260.   (if (equal? '() bdd)
  261.       '()
  262.       (let ([info (getIdentiteById base_identites (car (cdddr (car bdd))))])
  263.         (if (equal? (cadddr info) value) ; (cadddr info) donne la date de naissance
  264.             (cons info (searchInIdentitesBirthday (cdr bdd) value))
  265.             (searchInIdentitesBirthday (cdr bdd) value)))))
  266.  
  267. ; *** FONCTION SERVANT A RECHERCHER DANS LA BASE TELEPHONE PAR VALEUR ***
  268. (define (searchInTelephone bdd value)
  269.   (if (equal? '() bdd)
  270.       '()
  271.       (let ([info (getTelephoneById base_telephones (car (cddr (car bdd))))]) ; (car (cddr (car bdd))) donne l'identifiant lié au téléphone
  272.         (if (equal? (cadr info) value) ; (cadr info) donne le numéro de téléphone
  273.             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
  274.             (searchInTelephone bdd value))))) ; Si c'est pas le bon, on continue les recherches
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement