Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #lang racket
- (require racket/gui/base)
- ;;;;;;;;;;;;;;; Fct du Repertoire ;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;un repertoire vide"
- (define repertoire '())
- ;fct ajout (elle ne modifie pas le rep, elle renvoie un nouveau rep)
- (define (ajout-r rep nom prenom)
- (if (null? rep)
- (cons (list 0 nom prenom) rep)
- (cons (list (add1 (caar rep)) nom prenom) rep)))
- ; on peuple le repertoire
- (set! repertoire (ajout-r repertoire "dupond" "jean"))
- (set! repertoire (ajout-r repertoire "dupond" "jacques"))
- (set! repertoire (ajout-r repertoire "duval" "jean"))
- (set! repertoire (ajout-r repertoire "dupres" "jacques"))
- ;affichage brut
- repertoire
- ; la fct affichage
- (define (affiche-r rep)
- (cond ((null? rep) (display ""))
- (else (display (caar rep))(display " : ") (display (cadar rep))(display " -- ") (display (caddar rep)) (newline) (affiche-r (cdr rep)))))
- ; affichage du repertoire
- (affiche-r repertoire)
- ;tri insertion generique
- (define (tri-ins L pred?)
- (define (insere x L)
- (cond ((null? L) (cons x L))
- ((pred? x (car L)) (cons (car L) (insere x (cdr L))))
- (else (cons x L))))
- (if (null? L)
- L
- (insere (car L) (tri-ins (cdr L) pred?))))
- (define (compare-p p1 p2)
- (or (string>? (cadr p1) (cadr p2))
- (and (string=? (cadr p1) (cadr p2))
- (string>? (caddr p1) (caddr p2)))))
- (define (affiche-tri-r rep)
- (affiche-r (tri-ins rep compare-p)))
- (set! repertoire (ajout-r repertoire "aa" "aa"))
- (set! repertoire (ajout-r repertoire "aa" "zz"))
- (set! repertoire (ajout-r repertoire "zz" "aa"))
- (set! repertoire (ajout-r repertoire "zz" "zz"))
- "repertoire non trié"
- (affiche-r repertoire)
- "repertoire trié"
- (affiche-tri-r repertoire)
- ;suppression
- (define (supprime-r rep id)
- (if (= id (caar rep))
- (cdr rep)
- (cons (car rep) (supprime-r (cdr rep) id))))
- "suppression de 0, 7 et 3"
- (set! repertoire (supprime-r repertoire 0))
- (set! repertoire (supprime-r repertoire 7))
- (set! repertoire (supprime-r repertoire 3))
- "repertoire non trié"
- (affiche-r repertoire)
- (define (extract rep lettre)
- (cond ((null? rep) '())
- ((eq? lettre (string-ref (cadar rep) 0)) (cons (car rep) (extract (cdr rep) lettre)))
- (else (extract (cdr rep) lettre))))
- "repertoire commence par d"
- (define repertoire-d (extract repertoire #\d))
- (affiche-r repertoire-d)
- "repertoire commence par a"
- (define repertoire-a (extract repertoire #\a))
- (affiche-r repertoire-a)
- "sauvegarde dans un fichier"
- (define (save-r rep)
- (define out (open-output-file "repertoire.txt" #:exists 'replace ))
- (write rep out)
- (close-output-port out))
- "lecture dans un fichier"
- (define (load-r)
- (define in (open-input-file "repertoire.txt"))
- (read in))
- (define (application)
- (define repertoire '())
- (define (menu)
- (display "0-quitter")(newline)
- (display "1-afficher")(newline)
- (display "2-ajouter")(newline)
- (display "3-sauver")(newline)
- (display "4-charger")(newline)
- (display "...")(newline)
- (let ((choix (read)))
- (cond ((eq? choix 0) (display "bye \n"))
- ((eq? choix 1) (affiche-r repertoire) (menu))
- ((eq? choix 2) (set! repertoire (ajout-r repertoire (read) (read))) (menu))
- (else (display " pas encore implémenté\n") (menu)))))
- (menu))
- ;menu du répertoire
- (define $fenetre
- (new dialog% [label "Repertoire"][parent #f][width 800][height 400]))
- (define $panel (new horizontal-panel% [parent $fenetre]))
- (send $panel set-alignment 'center 'bottom)
- (define $bouton-cancel
- (new button% [label "AJOUTER"] [parent $fenetre]
- [callback
- (lambda (b e)
- ( send $fenetre2 show #t))]
- ))
- (define (go)
- (send $fenetre show #t))
- ;supprimer
- (define $panel-v(new vertical-panel%[parent $panel]))
- (define (aff-rep rep)
- (let (($panel-ho (new horizontal-panel% [parent $panel-v])))
- (send $panel-ho set-alignment 'left'top)
- (define $bouton-supp
- (new button% [label "delete"] [parent $panel-ho]
- [callback
- (lambda (b e)
- (set! repertoire (supprime-r repertoire (caar repertoire)))
- (define (delete)
- (define (delete1)
- (send $panel-ho delete-child (car (send $panel-ho get-children))) (delete))
- (cond
- ((not (null? (send $panel-ho get-children))) (delete1))
- ))
- (affiche-r repertoire)
- (delete)
- )
- ]
- ))
- (cond ((null? rep) '())
- ((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]))
- (else (new message% [label (string-append (number->string (caar rep)) " " (cadar rep) " " (caddar rep) "\n")] [parent $panel-ho])(aff-rep (cdr rep))))))
- ;ajouter
- (define $nom "Inconnue")
- (define $prenom "inconnue")
- (define $fenetre2 (new dialog% [label "Ajouter Contact"] [parent #f] [width 200] [height 100] ))
- (define $texte (new text-field% [label "Votre nom :"][parent $fenetre2][init-value "NOM"]))
- (define $texte2 (new text-field% [label "Votre prenom :"][parent $fenetre2][init-value "PRENON"]))
- (define $panel2 (new horizontal-panel% [parent $fenetre2]))
- (send $panel2 set-alignment 'center 'center)
- (define $bouton-ok
- (new button% [label "Ok"]
- [parent $panel2]
- [callback
- (lambda (b e)
- (let ((nom (send $texte get-value)))
- (let ((prenom (send $texte2 get-value)))
- (set! $nom nom)
- (set! $prenom prenom )
- (set! repertoire (ajout-r repertoire $nom $prenom))
- (newline)
- (send $fenetre2 show #f)))
- (delete)
- (aff-rep repertoire))
- ]
- )
- )
- ;menu du répertoire
- (aff-rep (reverse repertoire))
- (go)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement