Blame


1 12687dd9 2023-08-04 jrmu ;; The first three lines of this file were inserted by DrScheme. They record metadata
2 12687dd9 2023-08-04 jrmu ;; about the language level of this file in a form that our tools can easily process.
3 12687dd9 2023-08-04 jrmu #reader(lib "htdp-intermediate-reader.ss" "lang")((modname |23.1|) (read-case-sensitive #t) (teachpacks ((lib "draw.ss" "teachpack" "htdp") (lib "arrow.ss" "teachpack" "htdp") (lib "gui.ss" "teachpack" "htdp"))) (htdp-settings #(#t constructor repeating-decimal #f #t none #f ((lib "draw.ss" "teachpack" "htdp") (lib "arrow.ss" "teachpack" "htdp") (lib "gui.ss" "teachpack" "htdp")))))
4 12687dd9 2023-08-04 jrmu ;;Model
5 12687dd9 2023-08-04 jrmu
6 12687dd9 2023-08-04 jrmu (define-struct pr (name number))
7 12687dd9 2023-08-04 jrmu
8 12687dd9 2023-08-04 jrmu ;A phone-record (pr) is a structure
9 12687dd9 2023-08-04 jrmu ;(make-pr name number)
10 12687dd9 2023-08-04 jrmu ;where name is a symbol and number is a number
11 12687dd9 2023-08-04 jrmu
12 12687dd9 2023-08-04 jrmu (define LOPR (list (make-pr 'John 6265939257)
13 12687dd9 2023-08-04 jrmu (make-pr 'Aaron 6267217410)
14 12687dd9 2023-08-04 jrmu (make-pr 'Hsinya 9195374958)))
15 12687dd9 2023-08-04 jrmu
16 12687dd9 2023-08-04 jrmu ;search-name : symbol (listof pr)-> string
17 12687dd9 2023-08-04 jrmu ;Given aname and alopr, find the phone-record containing aname in the name field and return its phone number as a string. Otherwise returns "name not found".
18 12687dd9 2023-08-04 jrmu
19 12687dd9 2023-08-04 jrmu ;search-number : number (listof pr) -> string
20 12687dd9 2023-08-04 jrmu
21 12687dd9 2023-08-04 jrmu (define (search-name aname alopr)
22 12687dd9 2023-08-04 jrmu (cond
23 12687dd9 2023-08-04 jrmu [(empty? alopr) "name not found"]
24 12687dd9 2023-08-04 jrmu [(symbol=? aname (pr-name (first alopr))) (number->string (pr-number (first alopr)))]
25 12687dd9 2023-08-04 jrmu [else (search-name aname (rest alopr))]))
26 12687dd9 2023-08-04 jrmu
27 12687dd9 2023-08-04 jrmu (define (search-number anumber alopr)
28 12687dd9 2023-08-04 jrmu (cond
29 12687dd9 2023-08-04 jrmu [(empty? alopr) "number not found"]
30 12687dd9 2023-08-04 jrmu [(= anumber (pr-number (first alopr))) (symbol->string (pr-name (first alopr)))]
31 12687dd9 2023-08-04 jrmu [else (search-number anumber (rest alopr))]))
32 12687dd9 2023-08-04 jrmu
33 12687dd9 2023-08-04 jrmu ;;View
34 12687dd9 2023-08-04 jrmu
35 12687dd9 2023-08-04 jrmu (define search-text (make-text "Enter Name:"))
36 12687dd9 2023-08-04 jrmu (define search-result (make-message "Find A Phone Number"))
37 12687dd9 2023-08-04 jrmu
38 12687dd9 2023-08-04 jrmu ;;Controller
39 12687dd9 2023-08-04 jrmu
40 12687dd9 2023-08-04 jrmu ;search-controller : event -> true
41 12687dd9 2023-08-04 jrmu ;Extract the name or number from search-text and draw either the corresponding number or name in search-result.
42 12687dd9 2023-08-04 jrmu
43 12687dd9 2023-08-04 jrmu ;search-controller : (X (listof pr) -> string) (string -> X) -> true
44 12687dd9 2023-08-04 jrmu ;X is either a symbol or number
45 12687dd9 2023-08-04 jrmu ;Extract the name or number from search-text and draw either the corresponding number or name in search-result.
46 12687dd9 2023-08-04 jrmu
47 12687dd9 2023-08-04 jrmu (define (search-controller event)
48 12687dd9 2023-08-04 jrmu (local ((define (search-controller search-op convert-op)
49 12687dd9 2023-08-04 jrmu (draw-message search-result
50 12687dd9 2023-08-04 jrmu (search-op
51 12687dd9 2023-08-04 jrmu (convert-op (text-contents search-text)) LOPR)))
52 12687dd9 2023-08-04 jrmu (define a-num? (string->number (text-contents search-text))))
53 12687dd9 2023-08-04 jrmu (cond
54 12687dd9 2023-08-04 jrmu [(number? a-num?) (search-controller search-number string->number)]
55 12687dd9 2023-08-04 jrmu [else (search-controller search-name string->symbol)])))
56 12687dd9 2023-08-04 jrmu
57 12687dd9 2023-08-04 jrmu (create-window (list (list search-text
58 12687dd9 2023-08-04 jrmu (make-button "Search" search-controller))
59 12687dd9 2023-08-04 jrmu (list search-result)))