Advertisement
Guest User

Untitled

a guest
Apr 5th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 5.92 KB | None | 0 0
  1. #lang racket
  2. (require racket/gui/base)
  3.  
  4. ;;;;;;;;;;;;;;; Fct du Repertoire ;;;;;;;;;;;;;;;;;;;;;;;;;;;
  5. ;un repertoire vide"
  6. (define repertoire '())
  7.  
  8. ;fct ajout (elle ne modifie pas le rep, elle renvoie un nouveau rep)
  9. (define (ajout-r rep nom prenom)
  10.   (if (null? rep)
  11.       (cons (list 0 nom prenom) rep)
  12.       (cons (list (add1 (caar rep)) nom prenom) rep)))
  13.  
  14. ; on peuple le repertoire
  15. (set!  repertoire (ajout-r repertoire "dupond" "jean"))
  16. (set!  repertoire (ajout-r repertoire "dupond" "jacques"))
  17. (set!  repertoire (ajout-r repertoire "duval" "jean"))
  18. (set!  repertoire (ajout-r repertoire "dupres" "jacques"))
  19.  
  20. ;affichage brut
  21. repertoire
  22.  
  23. ; la fct affichage
  24. (define (affiche-r rep)
  25.   (cond ((null? rep) (display ""))
  26.         (else (display (caar rep))(display " : ") (display (cadar rep))(display " -- ") (display (caddar rep)) (newline) (affiche-r (cdr rep)))))
  27.  
  28. ; affichage du repertoire
  29. (affiche-r repertoire)
  30.  
  31.  
  32. ;tri insertion generique
  33. (define (tri-ins L pred?)
  34.   (define (insere x L)
  35.     (cond ((null? L) (cons x L))
  36.           ((pred? x (car L)) (cons (car L) (insere x (cdr L))))
  37.           (else (cons x L))))
  38.     (if (null? L)
  39.         L
  40.         (insere (car L) (tri-ins (cdr L) pred?))))
  41.  
  42. (define (compare-p p1 p2)
  43.   (or (string>? (cadr p1) (cadr p2))
  44.       (and (string=? (cadr p1) (cadr p2))
  45.            (string>? (caddr p1) (caddr p2)))))
  46.  
  47. (define (affiche-tri-r rep)
  48.   (affiche-r (tri-ins rep compare-p)))
  49.  
  50. (set!  repertoire (ajout-r repertoire "aa" "aa"))
  51. (set!  repertoire (ajout-r repertoire "aa" "zz"))
  52. (set!  repertoire (ajout-r repertoire "zz" "aa"))
  53. (set!  repertoire (ajout-r repertoire "zz" "zz"))
  54.  
  55. "repertoire non trié"
  56. (affiche-r repertoire)
  57.  
  58. "repertoire trié"
  59. (affiche-tri-r repertoire)
  60.  
  61. ;suppression
  62. (define (supprime-r rep id)
  63.   (if (= id (caar rep))
  64.       (cdr rep)
  65.       (cons (car rep) (supprime-r (cdr rep) id))))
  66.  
  67. "suppression de 0, 7 et 3"
  68. (set!  repertoire (supprime-r repertoire 0))
  69. (set!  repertoire (supprime-r repertoire 7))
  70. (set!  repertoire (supprime-r repertoire 3))
  71.  
  72. "repertoire non trié"
  73. (affiche-r repertoire)
  74.  
  75. (define (extract rep lettre)
  76.   (cond ((null? rep) '())
  77.         ((eq? lettre (string-ref (cadar rep) 0)) (cons (car rep) (extract (cdr rep) lettre)))
  78.         (else (extract (cdr rep) lettre))))
  79.  
  80. "repertoire commence par d"
  81. (define repertoire-d (extract repertoire #\d))
  82. (affiche-r repertoire-d)
  83.  
  84. "repertoire commence par a"
  85. (define repertoire-a (extract repertoire #\a))
  86. (affiche-r repertoire-a)
  87.  
  88. "sauvegarde dans un fichier"
  89. (define (save-r rep)
  90.   (define out (open-output-file "repertoire.txt" #:exists 'replace ))
  91.   (write rep out)
  92.   (close-output-port out))
  93.  
  94. "lecture dans un fichier"
  95. (define (load-r)
  96.   (define in (open-input-file "repertoire.txt"))
  97.   (read in))
  98.  
  99.  
  100.  
  101. (define (application)
  102.   (define repertoire '())
  103.   (define (menu)
  104.     (display "0-quitter")(newline)
  105.     (display "1-afficher")(newline)
  106.     (display "2-ajouter")(newline)
  107.     (display "3-sauver")(newline)
  108.     (display "4-charger")(newline)
  109.     (display "...")(newline)
  110.     (let ((choix (read)))
  111.       (cond ((eq? choix 0) (display "bye \n"))
  112.             ((eq? choix 1) (affiche-r repertoire) (menu))
  113.             ((eq? choix 2) (set! repertoire (ajout-r repertoire (read) (read))) (menu))
  114.             (else (display " pas encore implémenté\n") (menu)))))
  115.   (menu))
  116.  
  117. ;menu du répertoire
  118. (define $fenetre
  119.   (new dialog% [label "Repertoire"][parent #f][width 800][height 400]))
  120. (define $panel (new horizontal-panel% [parent $fenetre]))
  121. (send $panel set-alignment 'center 'bottom)
  122.  
  123. (define $bouton-cancel
  124. (new button% [label "AJOUTER"] [parent $fenetre]
  125.        [callback
  126.         (lambda (b e)
  127.            ( send $fenetre2 show #t))]
  128.        ))
  129.  
  130. (define (go)
  131. (send $fenetre show #t))
  132.  
  133. ;supprimer
  134. (define $panel-v(new vertical-panel%[parent $panel]))
  135.  
  136. (define (aff-rep rep)
  137.   (let (($panel-ho (new horizontal-panel% [parent $panel-v])))
  138.     (send $panel-ho set-alignment 'left'top)
  139.    
  140.   (define $bouton-supp
  141.   (new button% [label "delete"] [parent $panel-ho]
  142.        [callback
  143.         (lambda (b e)
  144.           (set!  repertoire (supprime-r repertoire (caar repertoire)))
  145.           (define (delete)
  146.             (define (delete1)
  147.              (send $panel-ho delete-child (car (send $panel-ho get-children))) (delete))
  148.             (cond
  149.               ((not (null? (send $panel-ho get-children))) (delete1))
  150.               ))
  151.           (affiche-r repertoire)
  152.           (delete)
  153.           )
  154.  
  155.         ]
  156.        ))
  157.   (cond ((null? rep) '())
  158.         ((null? (cdr rep)) (send $bouton-supp show #t)(new message% [label (string-append (number->string (caar rep)) " " (cadar rep) " " (caddar rep) "\n")] [parent $panel-ho]))
  159.         (else (new message% [label (string-append (number->string (caar rep)) " " (cadar rep) " " (caddar rep) "\n")] [parent $panel-ho])(aff-rep (cdr rep))))))
  160.  
  161. ;ajouter
  162. (define $nom "Inconnue")
  163. (define $prenom "inconnue")
  164. (define $fenetre2   (new dialog% [label "Ajouter Contact"] [parent #f] [width 200] [height 100] ))
  165. (define $texte   (new text-field% [label "Votre nom :"][parent $fenetre2][init-value "NOM"]))
  166. (define $texte2   (new text-field% [label "Votre prenom :"][parent $fenetre2][init-value "PRENON"]))
  167.  
  168.  
  169. (define $panel2 (new horizontal-panel% [parent $fenetre2]))
  170. (send $panel2 set-alignment 'center 'center)
  171.  (define $bouton-ok
  172.    (new button% [label "Ok"]
  173.         [parent $panel2]
  174.         [callback
  175.          (lambda (b e)
  176.  
  177.            (let ((nom (send $texte get-value)))
  178.               (let ((prenom (send $texte2 get-value)))
  179.                 (set! $nom nom)
  180.                 (set! $prenom prenom )
  181.  
  182.                 (set!  repertoire (ajout-r repertoire $nom $prenom))
  183.                 (newline)
  184.              
  185.              (send $fenetre2 show #f)))
  186.            (delete)
  187.            (aff-rep repertoire))
  188.            
  189.          
  190.          ]
  191.        )
  192.    )
  193.  
  194.  
  195.  
  196. ;menu du répertoire
  197.  
  198. (aff-rep (reverse repertoire))
  199. (go)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement