;; The first three lines of this file were inserted by DrScheme. They record metadata
;; about the language level of this file in a form that our tools can easily process.
#reader(lib "htdp-beginner-reader.ss" "lang")((modname 21.5.1) (read-case-sensitive #t) (teachpacks ()) (htdp-settings #(#t constructor repeating-decimal #f #t none #f ())))
; Worked exercise 21.5.1

; An employee has three parts: name, id, and salary.
; The name is a string, while the id and salary are numbers.
(define-struct employee (name id salary))
; make-employee: string(name) number(id) number(salary) -> employee
; employee-name: employee -> string
; employee-id: employee -> number
; employee-salary: employee -> number
; employee? : anything -> boolean

(define emp1 (make-employee "Bob" 470 36000))
(define emp2 (make-employee "Chris" 471 41000))

#|
(check-expect (function-on-employee emp1) ...)
(check-expect (function-on-employee (make-employee "Joe" 348 42995)) ...)

(define (function-on-employee emp)
  ; emp                    an employee
  ; (employee-name emp)    string
  ; (employee-id emp)      number
  ; (employee-salary emp)  number
  ...
  )

(check-expect (function-returning-employee ...) emp1)
(check-expect (function-returning-employee ...)
              (make-employee "Joe" 348 42995))

(define (function-returning-employee ...)
  (make-employee ... ... ...) ; 
  )
|#

; change-salary : employee number -> employee
(check-expect
 (change-salary (make-employee "Joe" 352 65000) 66000)
 (make-employee "Joe" 352 66000))
(check-expect
 (change-salary (make-employee "Croesus" 2 197000) 1.49)
 (make-employee "Croesus" 2 1.49))

(define (change-salary emp new-salary)
  ; emp                    an employee  (make-employee "Joe" 352 65000)
  ; (employee-name emp)    string "Joe"
  ; (employee-id emp)      number 352
  ; (employee-salary emp)  number 65000
  ; new-salary             number 66000
  ; right answer           employee (make-employee "Joe" 352 66000)
  (make-employee (employee-name emp)
                 (employee-id emp)
                 new-salary)
  )
