Instructor Solutions Manual (Page 1 of 443) INSTRUCTOR SOLUTIONS MANUAL to accompany An Introduction to Programming Using Visual Basic, 10th Edition by David I. Schneider © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 2 of 443) Copyright © 2017 by Pearson Higher Education. All rights reserved. © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 3 of 443) CONTENTS Chapter 2 Visual Basic Controls and Events Exercises 2.2 Visual Basic Controls 5 Exercises 2.3 Visual Basic Events 11 Chapter 3 Variables, Input, and Output Exercises 3.1 Numbers 16 Exercises 3.2 Strings 21 Exercises 3.3 Input and Output 29 Programming Projects 36 Chapter 4 Decisions Exercises 4.1 Relational and Logical Operators 40 Exercises 4.2 If Blocks 41 Exercises 4.3 Select Case Blocks 56 Exercises 4.4 Input via User Selection 65 Programming Projects 79 Chapter 5 General Procedures Exercises 5.1 Function Procedures 87 Exercises 5.2 Sub Procedures, Part I 96 Exercises 5.3 Sub Procedures, Part II 103 Programming Projects 109 Chapter 6 Repetition Exercises 6.1 Do Loops 119 Exercises 6.2 For…Next Loops 127 Exercises 6.3 List Boxes and Loops 141 Programming Projects 155 Chapter 7 Arrays Exercises 7.1 Creating and Using Arrays 165 Exercises 7.2 Using LINQ with Arrays 179 Exercises 7.3 Arrays of Structures 190 Exercises 7.4 Two-Dimensional Arrays 214 Programming Projects 226 Chapter 8 Text Files Exercises 8.1 Managing Text Files 246 Exercises 8.2 StreamReaders, StreamWriters, Structured Exception Handling 255 Exercises 8.3 XML 266 Programming Projects 274 © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 4 of 443) Chapter 9 Additional Controls and Objects Exercises 9.1 List Boxes and Combo Boxes 284 Exercises 9.2 Eight Additional Controls and Objects 290 Exercises 9.3 Multiple-Form Programs 300 Exercises 9.4 Graphics 317 Programming Projects 333 Chapter 10 Databases Exercises 10.1 An Introduction to Databases 351 Exercises 10.2 Editing and Designing Databases 373 Programming Projects 376 Chapter 11 Object-Oriented Programming Exercises 11.1 Classes and Objects 378 Exercises 11.2 Working with Objects 391 Exercises 11.3 Inheritance 416 Programming Projects 431 Some Common Commands 443 © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 5 of 443) CHAPTER 2 EXERCISES 2.2 1. While the mouse cursor is still hovering over the button that was just clicked, the button has a pale blue color. After the cursor leaves the button, the button has a dark blue border. 2. Tabbing to another control, clicking on another control, or pressing Alt plus the access key for another control. 3. Click on the form to make it the selected object. Click on the Properties window or Press F4 to activate the Properties window. Select the Text property. Type "CHECKING ACCOUNT" and press the Enter key. 4. Double-click the TextBox icon in the Toolbox. Activate the Properties window, and select the ForeColor property. Click on the down-arrow button to the right of the Settings box. Click on the Custom tab. Click on the desired blue in the palette. Move around the Properties window with the up- and down-arrow keys until the Text property is selected. Click on the Settings box and then type "PLAY IT, SAM" (without the quotes). Click on the text box and then widen it slightly to see the words. 5. Double-click the TextBox icon in the Toolbox. Activate the Properties window. Select the BackColor property. Click on the down-arrow to the right of the Settings box. Click on the Custom tab, and then click on the desired yellow in the palette. Click on the form to see the yellow text box. 6. Double-click on the TextBox icon in the Toolbox. Activate the Properties window, and select the Name property. Type "txtGreeting". (The name will appear in the Settings box.) Select the Text property. Type the requested word, "HELLO". Select the Font property. Click on the ellipsis to the right of the Settings box. Click on the Size box. To increase the size of the word, either type the number for the font size (such as "14") or click on a number in the list below the current size. Click on Italic in the "Font style" list. Click OK. If necessary, widen the text box. © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 6 of 443) 7. Double-click on the Label icon in the Toolbox. Activate the Properties window, and select the AutoSize property. Set the AutoSize property to False. Select the Text property and type the requested sentence. Select the TextAlign property. Click on the down-arrow button to the right of the Settings box, and click on one of the center rectangles. Resize the label so that the sentence occupies three lines. 8. Double-click on the TextBox icon in the Toolbox. Activate the Properties window, and select the Text property. Type "Visual Basic" and then press the Enter key. If the text isn't all visible, drag the text box's right sizing handle to the right until all the text can be seen. Select the ReadOnly property. Double-click on the ReadOnly property to change it's setting to True. (Or, go to the Settings box, press the down-arrow button, and click on True.) Select the Font property. Click on the ellipsis to the right of the Settings box. In the Font style box, click on Bold. Click on the OK button. Select the BackColor property and click on the down-arrow button. Click on the Custom tab. Click on the desired red in the palette. Select the ForeColor property and click on the down-arrow button. Click on the Custom tab. Click on the white square in the upper-left corner of the palette. 9. Double-click on the TextBox icon in the Toolbox. Activate the Properties window. Set the Name property to txtLanguage. Select the Text property and type "Visual Basic 2015". Select the Font property and click on the ellipsis to the right of the Settings box. Scroll up the Font box, and click on Courier New in the Font box. Click on the OK button. Widen the text box to accommodate its text. 10. Double-click on the Button icon in the Toolbox. Activate the Properties window, and select the Text property. Type "PUSH". Select the BackColor property and click on the down-arrow button. Click on the Custom tab. Click on the yellow square (the third square in the fourth column) in the palette. Double-click on the setting for the (Name) property, type in "btnPush", and press the Enter key. © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 7 of 443) 11. Double-click on the Button icon in the Toolbox. Activate the Properties window, and select the BackColor property. Click on the down-arrow button to the right of the Settings box. Click on the Custom tab, and then click on the white square in upper-left corner of the palette. Select the Text property and type "PUSH". Select the Font property, and click on the ellipsis. Click on Oblique in the "Font style" list. Click on 24 in the Size list. Click on the OK button. Resize the button. 12. Double-click on the Button icon in the Toolbox. Activate the Properties window, and select the Text property. Type "&PUSH". Select the Font property and click on the ellipsis. Click on Bold in the "Font Style" box. Click OK. Click on the form to see the resulting button. 13. Double-click on the Button icon in the Toolbox. Activate the Properties window. Select the Text property and type "PUS&H". Click on the form to see the resulting button. 14. Double-click on the Label icon in the Toolbox. Activate the Properties window, and select the Text property. Type "ALIAS". Select the ForeColor property and click on the down-arrow button. Click on the Custom tab. Click on the desired white in the palette. Select the BackColor property and click on the down-arrow button. Click on the Custom tab. Click on the desired shade of blue in the palette. Click on the form to see the resulting label. 15. Double-click on the Label icon in the Toolbox. Activate the Properties window. Select the Name property and type "lblAKA". Select the Text property and type "ALIAS". Select the AutoSize property and set it to False. Select the Font property and click on the ellipsis. Click on Oblique in the "Font style" list. Click on the OK button. Select the TextAlign property, click on the down-arrow box to the right of the Settings box, and click on one of the center rectangles. © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 8 of 443) 16. Click on the form to make it the selected object. Activate the Properties window, and select the Text property. Type "BALANCE SHEET". Select the BackColor property and click on the down-arrow button. Click on the Custom tab. Click on the desired shade of yellow in the palette. 17. Double-click on the Label icon in the Toolbox. Activate the Properties window, and select the TextAlign property. Click on the down-arrow box to the right of the Settings box, and click on one of the rectangles on the right. Select the AutoSize property and set it to False. Select the Text property, type "VISUAL BASIC", and press Enter. If the words " VISUAL BASIC " are on one line, resize the label until the words occupy two lines. 18. In the Solution Explorer, right-click on the file Form1.vb. Select “Rename” from the drop-down list. Change the filename from Form1.vb to frmHello.vb. In the Properties window, change the setting of the Text property from Form1 to Hello World. 19. Double-click on the Label icon in the Toolbox. Activate the Properties window and set the Text property of the label to PROGRAM. Select the Font property, and click on the ellipsis to the right of its Settings box. Click on Oblique in the "Font style" list, and click on the Underline box. Click on the OK button. 20. Double-click on the Label icon in the Toolbox. Activate the Properties window, and select the Text property. Type "ALIAS". Select the Font property and click on the ellipsis. Click on Bold in the Font style box. Click on Courier New in the Font box and press OK. Click on the form to see the resulting label. 21. Double-click on the ListBox icon in the Toolbox. Activate the Properties window, and select the BackColor property. Click on the down-arrow button to the right of the Settings box. Click on the Custom tab and click on the desired yellow square in the palette. Click on the form. 22. Double-click on the ListBox icon in the Toolbox. Activate the Properties window, and select the Visible property. Double-click on the Visible property to change it's setting to False. (Or, go to the Settings box, press the down-arrow button, and click on False.) © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 9 of 443) 23. In the Solution Explorer window, right click on “Form1.vb” and select Rename from the context menu that appears. Change Form1.vb to frmYellow.vb, and click the No button in the box that appears. Right-click on the form in the Form Designer, and click on Properties in the context menu. Click on BackColor property in the Properties window. Click on the down-arrow button in the right part of the Settings box, click on the Custom tab, and click on a yellow square. 24. Double-click on the Button icon in the Toolbox. Activate the Properties window and set the Text property of the button to BUTTON. Select the Font property, and click on the ellipsis to the right of its Settings box. Click on Bold in the "Font style" list. Place a check mark in the small square to the left of the word "Underline" by clicking on the square. Click on the OK button. 25. Begin a new program. Change the text in the form's title bar to "Dynamic Duo". Place two buttons on the form. Position and resize the buttons as shown. Enter “Batman” as the text of the first button, and enter “Robin” as the text of the second button. Increase the font size for both buttons to 14. 26. Begin a new program. Change the text in the form's title bar to "Enter Names". Place on the form a label, a text box, and a button in the sizes and locations shown. Change the text on the label to "Name". Change the text on the button to "Enter". Increase the Font size for the label and the button to 12. 27. Begin a new program. Change the text in the form's title bar to "Fill in the Blank". Place a label, a text box, and another label on the form at appropriate locations. Change the Text setting of the first label to "I’m the king of the" and the Text setting of the second label to "A Quote by Leonardo DiCaprio". 28. Begin a new program. Change the text in the form's title bar to "Similarity". Place a big label and a normal-sized label on the form. Move the small label to the bottom of the form, and move and resize the big label so that it covers most of the top of the form. Select the normal-sized label. Change the setting of the Text property to "A Quote". Select the big label. Change the setting of the Text property to the specified sentence. Increase the font size to 12. Resize and position the labels as needed. © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 10 of 443) 29. Begin a new program. Change the text in the form's title bar to "Uncle's Advice". Place five labels and three buttons on the form at appropriate locations. Change the Text setting of each label as indicated. Change the settings of the buttons' Text properties to "1", "2", and "3". Resize and position the labels and buttons. 30. Begin a new program. Change the text in the form's title bar "3 Rectangles". Place a label on the form and increase its size to provide plenty of space. Change the background color to red. Place a smaller label inside the red label. Change its background color to some shade of white. Finally, place a yet smaller label inside the white box. Change its background color to blue. Resize and position the labels as needed. 33. 1 34. 0 35. Each arrow key moves the text box in the indicated direction. 36. Pressing the right- and left-arrow keys widen and narrow the text box. The up- and downarrow keys have no effect. 37. Pressing the right- and left-arrow keys widens and narrows the text boxes, buttons, and list boxes in the group of selected controls. The up- and down-arrow keys shorten and lengthen the buttons and list boxes in the group. The arrow keys have no effect on the labels, and only the left- and right-arrow keys affect the text boxes. 38. Each arrow key moves every control in the group in the indicated direction. 39. Drag a label and a list box onto the form. Click on the label. Hold down the Ctrl key and click on the list box. (You have now selected a group of two controls.) In the Properties window, click on the symbol to the left of the Font property. Click on the Size property, change the setting to 12, and press the Enter key. (Alternative: Replace the last two lines with the following steps.) In the Properties window, select the Font property. Click on the ellipsis button to the right of the Settings box. Click on 12 in the Size list and click on the OK button. 40. The button moves to a comfortable distance from one of the sides of the form. 41. The label is positioned just to the left of the text box, and the middles of the two controls are aligned. © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 11 of 443) 42. The left sides of the buttons are aligned and the two buttons are a comfortable distance apart. 43. Center refers to the midpoint horizontally, whereas middle refers to the midpoint vertically. 44. Select the four buttons as a group. Click on the Format menu, click on Make Same Size, and then click on Both. Click on the Format menu again, click on Vertical Spacing, and then click on Make Equal. 45. First blue snap line: tops of the two controls are aligned Purple snap line: texts of the two controls are aligned Second blue snap line: bottoms of the two controls are aligned 46. The setting toggles between True and False. 47. The setting is cycling through the different available colors. EXERCISES 2.3 1. The word Hello 2. The word Hello in red letters 3. The word Hello on an orange-colored background 4. The word Hello 5. The text box vanishes. 6. The word Hello on a yellow background 7. The word Hello in green letters 8. The word Hello on a white background 9. The word Hello on a gold background. 10. Nothing, the label cannot be seen. 11. Form1.Text should be Me.Text. 12. The word Hello must be surrounded with quotation marks. 13. Red should be replaced with Color.Red. 14. Replace txtBox with txtBox.Text. 15. Font.Size is a read-only property. The statement txtOutput.Text = txtBox.Font.Size is valid since it is reading the value of txtBox.Font.Size. However, txtBox.Font.Size = 20 is not valid since it is setting the value of txtBox.Font.Size. © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 12 of 443) 16. Me.Color must be replaced by Me.ForeColor or Me.BackColor 17. lblTwo.Text = "E.T. phone home." 18. lblTwo.Text = "Play it, Sam." lblTwo.ForeColor = Color.Red 19. txtBox.ForeColor = Color.Red txtBox.Text = "The stuff that dreams are made of." 20. txtBox.ForeColor = Color.Blue txtBox.BackColor = Color.Gold txtBox.Text = "Life is like a box of chocolates." 21. txtBox.Enabled = False 22. Me.Text = "Hello World" 23. lblTwo.Visible = False 24. lblName.ForeColor = Color.Red 25. btnOutcome.Enabled = True 26. btnCompute.Focus() 27. txtBoxTwo.Focus() 28. Me.BackColor = Color.White 29. The Enter event occurs when a control gets the focus. 30. A control's Leave event occurs when the control loses the focus. 31. Private Sub Label1_Click(...) Handles Label1.Click lstOutput.Items.Add("Click") End Sub Private Sub Label1_DoubleClick(...) Handles Label1.DoubleClick lstOutput.Items.Add("Double Click") End Sub Whenever the DoubleClick event is raised, the Click event is also raised. 32. Private Sub Button1_Click(...) Handles Button1.Click lstOutput.Items.Add("Click") End Sub 33. Private Sub btnLeft_Click(...) Handles btnLeft.Click txtBox.Text = "Left Justify" txtBox.TextAlign = HorizontalAlignment.Left End Sub Private Sub btnCenter_Click(...) Handles btnCenter.Click txtBox.Text = "Center" txtBox.TextAlign = HorizontalAlignment.Center End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 13 of 443) Private Sub btnRight_Click(...) Handles btnRight.Click txtBox.Text = "Right Justify" txtBox.TextAlign = HorizontalAlignment.Right End Sub 34. Private Sub btnSmile_Click(...) Handles btnSmile.Click lblFace.Text = ":-)" End Sub Private Sub btnFrown_Click(...) Handles btnFrown.Click lblFace.Text = ":-(" End Sub 35. Private Sub btnRed_Click(...) Handles btnRed.Click txtBox.BackColor = Color.Red End Sub Private Sub btnBlue_Click(...) Handles btnBlue.Click txtBox.BackColor = Color.Blue End Sub Private Sub btnWhite_Click(...) Handles btnWhite.Click txtBox.ForeColor = Color.White End Sub Private Sub btnYellow_Click(...) Handles btnYellow.Click txtBox.ForeColor = Color.Yellow End Sub 36. Private Sub txtOne_Enter(...) Handles txtOne.Enter txtOne.ForeColor = Color.Red txtTwo.ForeColor = Color.Black txtThree.ForeColor = Color.Black End Sub Private Sub txtTwo_Enter(...) Handles txtTwo.Enter txtOne.ForeColor = Color.Black txtTwo.ForeColor = Color.Red txtThree.ForeColor = Color.Black End Sub Private Sub txtThree_Enter(...) Handles txtThree.Enter txtOne.ForeColor = Color.Black txtTwo.ForeColor = Color.Black txtThree.ForeColor = Color.Red End Sub Private Sub btnLeft_Click(...) Handles btnLeft.Click txtOne.TextAlign = HorizontalAlignment.Left txtTwo.TextAlign = HorizontalAlignment.Left txtThree.TextAlign = HorizontalAlignment.Left End Sub Private Sub btnRight_Click(...) Handles btnRight.Click txtOne.TextAlign = HorizontalAlignment.Right txtTwo.TextAlign = HorizontalAlignment.Right txtThree.TextAlign = HorizontalAlignment.Right End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 14 of 443) 37. Private Sub txtLife_Enter(...) Handles txtLife.Enter txtQuote.Text = "I like life, it's something to do." End Sub Private Sub txtFuture_Enter(...) Handles txtFuture.Enter txtQuote.Text = "The future isn't what it used to be." End Sub Private Sub txtTruth_Enter(...) Handles txtTruth.Enter txtQuote.Text = "Tell the truth and run." End Sub 38. Private Sub btnDisable_Click(...) Handles btnDisable.Click txtBox.Enabled = False End Sub Private Sub btnEnable_Click(...) Handles btnEnable.Click txtBox.Enabled = True txtBox.Focus() End Sub 39. Private Sub btnOne_Click(...) Handles btnOne.Click btnOne.Visible = False btnTwo.Visible = True btnThree.Visible = True btnFour.Visible = True End Sub Private Sub btnTwo_Click(...) Handles btnTwo.Click btnOne.Visible = True btnTwo.Visible = False btnThree.Visible = True btnFour.Visible = True End Sub Private Sub btnThree_Click(...) Handles btnThree.Click btnOne.Visible = True btnTwo.Visible = True btnThree.Visible = False btnFour.Visible = True End Sub Private Sub btnFour_Click(...) Handles btnFour.Click btnOne.Visible = True btnTwo.Visible = True btnThree.Visible = True btnFour.Visible = False End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 15 of 443) 40. Private Sub txtGreen_Enter(...) Handles txtGreen.Enter txtGreen.BackColor = Color.Green txtYellow.BackColor = Color.DarkGray txtRed.BackColor = Color.DarkGray End Sub Private Sub txtYellow_Enter(...) Handles txtYellow.Enter txtGreen.BackColor = Color.DarkGray txtYellow.BackColor = Color.Yellow txtRed.BackColor = Color.DarkGray End Sub Private Sub txtRed_Enter(...) Handles txtRed.Enter txtGreen.BackColor = Color.DarkGray txtYellow.BackColor = Color.DarkGray txtRed.BackColor = Color.Red End Sub 41. Private Sub btnVanish_Click(...) Handles btnVanish.Click lblFace.Visible = False End Sub Private Sub btnReappear_Click(...) Handles btnReappear.Click lblFace.Visible = True End Sub 42. Private Sub txtName_Enter(...) Handles txtName.Enter lblInstructions.Text = "Enter your full name." End Sub Private Sub txtPhone_Enter(...) Handles txtPhone.Enter lblInstructions.Text = "Enter your phone number, including area code." End Sub 43. Private Sub btnAny_Click(...) Handles btnOne.Click, btnTwo.Click txtOutput.Text = "You just clicked on a button." End Sub 44. Private Sub txtBox1_Click(...) Handles txtBox1.Click txtBox2.Text = txtBox1.Text txtBox1.Clear() End Sub Private Sub txtBox2_Click(...) Handles txtBox2.Click txtBox1.Text = txtBox2.Text txtBox2.Clear() End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 16 of 443) CHAPTER 3 EXERCISES 3.1 1. 12 2. 49 3. .125 4. 23 5. 8 6. –96 7. 2 8. 2 9. 1 10. 1 11. 3 12. 0 13. Not valid 14. Not valid 15. Valid 16. Not valid 17. Not valid 18. Not valid 19. 10 20. 14 21. 16 22. 16 23. 9 24. 8 25. Private Sub btnCompute_Click(...) Handles btnCompute.Click lstOutput.Items.Add((7 * 8) + 5) End Sub 26. Private Sub btnCompute_Click(...) Handles btnCompute.Click lstOutput.Items.Add((1 + (2 * 9)) ^ 3) End Sub 27. Private Sub btnCompute_Click(...) Handles btnCompute.Click lstOutput.Items.Add(0.055 * 20) End Sub 28. Private Sub btnCompute_Click(...) Handles btnCompute.Click lstOutput.Items.Add(15 - 3 * (2 + (3 ^ 4))) End Sub 29. Private Sub btnCompute_Click(...) Handles btnCompute.Click lstOutput.Items.Add(17 * (3 + 162)) End Sub 30. Private Sub btnCompute_Click(...) Handles btnCompute.Click lstOutput.Items.Add((4 + (1 / 2)) - (3 + (5 / 8))) End Sub 31. Private Sub btnEvaluate_Click(...) Handles btnEvaluate.Click Dim x, y As Double x = 2 y = 3 * x x = y + 5 lstResults.Items.Clear() lstResults.Items.Add(x + 4) y = y + 1 End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. x y 0 2 2 11 11 11 11 0 0 6 6 6 6 7 Instructor Solutions Manual (Page 17 of 443) 32. Private Sub btnEvaluate_Click(...) Handles btnEvaluate.Click Dim bal, inter, withDr As Decimal bal = 100 inter = 0.05D withDr = 25 bal += inter * bal bal = bal – withDr End Sub 33. 6 34. 24 35. 1 8 9 36. 10 37. 1 64 38. 225 bal inter withDr 0 100 100 100 105 80 0 0 0.05 0.05 0.05 0.05 0 0 0 25 25 25 39. 2 15 40. 5 10 41. The third line should read c = a + b 42. The third assignment statement does not work. In the last statement, there needs to be an asterisk after the 5. Also, the last statement needs two extra closing parenthesis at the end. 43. The first assignment statement should not contain a comma. The second assignment statement should not contain a dollar sign. 44. The first assignment statement should read interest = 0.05D 45. 9W is not a valid variable name. 46. Round should be changed to Math.Round 47. Dim quantity As Integer = 12 48. Dim m As Integer = 2, n As Double = 3 49. 10 50. 7 51. 6 52. 8 53. 3.128 54. -3 55. –3 56. 2 57. 0 58. 3 59. 6 60. 1 61. cost += 5 62. sum *= 2 63. cost /= 6 64. sum -= 7 65. sum ^= 2 66. sum += 3 67. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim revenue, costs, profit As Decimal revenue = 98456 costs = 45000 profit = revenue - costs lstOutput.Items.Add(profit) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 18 of 443) 68. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim costPerShare, numberOfShares, amount As Decimal costPerShare = 25.625D numberOfShares = 400 amount = costPerShare * numberOfShares lstOutput.Items.Add(amount) End Sub 69. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim price, discountPercent, markdown As Decimal price = 19.95D discountPercent = 30 markdown = (discountPercent / 100) * price price = price - markdown lstOutput.Items.Add(Math.Round(price, 2)) End Sub 70. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim fixedCosts, pricePerUnit, costPerUnit, breakEvenPoint As Decimal fixedCosts = 5000 pricePerUnit = 8 costPerUnit = 6 breakEvenPoint = fixedCosts / (pricePerUnit - costPerUnit) lstOutput.Items.Add(breakEvenPoint) End Sub 71. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim balance As Decimal balance = 100 balance += 0.05D * balance balance += 0.05D * balance balance += 0.05D * balance lstOutput.Items.Add(Math.Round(balance, 2)) End Sub 72. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim balance As Decimal balance = 100 balance += 0.05D * balance + 100 balance += 0.05D * balance + 100 balance += 0.05D * balance lstOutput.Items.Add(Math.Round(balance, 2)) End Sub 73. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim purchasePrice As Decimal = 215.50D Dim sellingPrice As Decimal = 644.99D Dim markup As Decimal = sellingPrice - purchasePrice Dim percentageMarkup As Decimal = 100 * (markup / purchasePrice) lstOutput.Items.Add(percentageMarkup) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 19 of 443) 74. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim purchasePrice As Decimal = 215.50D Dim sellingPrice As Decimal = 429.99D Dim markup As Decimal = sellingPrice - purchasePrice Dim profitMargin As Decimal = 100 * (markup / sellingPrice) lstOutput.Items.Add(profitMargin) End Sub 75. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim acres, yieldPerAcre, corn As Double acres = 30 yieldPerAcre = 18 corn = yieldPerAcre * acres lstOutput.Items.Add(corn) End Sub 76. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim initialVelocity, initialHeight, height, t As Double initialVelocity = 50 initialHeight = 5 t = 3 height = (-16 * t ^ 2) + (initialVelocity * t) + initialHeight lstOutput.Items.Add(height) End Sub 77. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim distance, elapsedTime, averageSpeed As Double distance = 233 elapsedTime = 7 - 2 averageSpeed = distance / elapsedTime lstOutput.Items.Add(averageSpeed) End Sub 78. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim miles, gallonsUsed, milesPerGallon As Double miles = 23695 - 23352 gallonsUsed = 14 milesPerGallon = miles / gallonsUsed lstOutput.Items.Add(milesPerGallon) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 20 of 443) 79. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim waterPerPersonPerDay, people, days, waterUsed As Double waterPerPersonPerDay = 1600 people = 315000000 days = 365 waterUsed = waterPerPersonPerDay * people * days lstOutput.Items.Add(waterUsed) End Sub 80. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim numPerDay As Integer numPerDay = 350 * 60 * 60 * 24 lstOutput.Items.Add(numPerDay) End Sub 81. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim pizzarias, percent, restaurants As Double pizzarias = 70000 percent = 0.12 restaurants = pizzarias / percent lstOutput.Items.Add(Math.Round(restaurants)) End Sub 82. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim pop2000, pop2050, percentGrowth As Double pop2000 = 281 pop2050 = 404 percentGrowth = Math.Round(100 * ((pop2050 - pop2000) / pop2000)) lstOutput.Items.Add((percentGrowth)) End Sub 83. Private Sub btnConvert_Click(...) Handles btnConvert.Click Dim conversionFactor As Double = 0.6214 Dim kilometersPerHr, milesPerHr As Double kilometersPerHr = CDbl(txtSpeedKil.Text) milesPerHr = conversionFactor * kilometersPerHr txtSpeedMph.Text = milesPerHr.ToString("N") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 21 of 443) 84. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click lstValue.Items.Add(4 * 20 + 7) End Sub 85. Private Sub btnEstimate_Click(...) Handles btnEstimate.Click Dim cal As Double cal = (5280 ^ 3) * 48600 lstCalories.Items.Add(cal) End Sub 86. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim debt As Double = 16.8 * 10 ^ 12 Dim pop As Double = 315 * 10 ^ 6 lstDebt.Items.Add(CInt(debt / pop)) End Sub EXERCISES 3.2 1. Visual Basic 2. Hello 3. Ernie 4. Bert 5. flute 6. acute 7. 123 8. 8 9. Your age is 21. 10. Fred has 2 children. 11. A ROSE IS A ROSE IS A ROSE 12. 76 trombones 13. 5.5 14. 3 15. goodbye 17. WALLAWALLA 18. murmur 19. ABC 2 4 55 mph STU 20. 8 ball 21. 12 22. 9 -1 MUNICIPALITY microsoft 5 city os evolutionary 6 5 10 23. 8 (0 through 7) 24. 7 25. True 16. eighth 26. True 27. The variable phoneNumber should be declared as type String, not Double. © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 22 of 443) 28. The sentence in the second line should be surrounded by quotation marks. 29. End is a keyword and cannot be used as a variable name. 30. txtBox should be changed to txtBox.Text. 31. The IndexOf method cannot be applied to a number, only a string. 32. A number does not have a Length property, only a String has a Length property. 33. 2 ^ 3 is a Double value and therefore cannot be assigned to the Decimal variable m. Also, 4 / 2 is a Double value and cannot be assigned to an Integer variable. 34. 3.45 is a Double value and therefore cannot be assigned to a Decimal variable. The second line should be replaced with either m = 3.45D or m = CDec(3.45). 35. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim firstName, middleName, lastName As String, yearOfBirth As Integer firstName = "Thomas" middleName = "Alva" lastName = "Edison" yearOfBirth = 1847 txtOutput.Text = firstName & " " & middleName & " " & lastName & ", " & yearOfBirth End Sub 36. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim item As String, regularPrice, discount As Decimal item = "ketchup" regularPrice = 1.8D discount = 0.27D txtOutput.Text = (regularPrice - discount) & " is the sale price of " & item & "." End Sub 37. Dim str As String 'Place in the Declarations section of the program. 38. Dim str As String 'Place near the top of the event procedure. 39. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim distance As Double distance = CDbl(txtNumSec.Text) / 5 distance = Math.Round(distance, 2) txtOutput.Text = "The distance of the storm is " & distance & " miles." End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 23 of 443) 40. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim thr, age, rhr As Double age = CDbl(txtAge.Text) rhr = CDbl(txtRestHR.Text) thr = 0.7 * (220 - age) + 0.3 * rhr thr = Math.Round(thr) txtTrainHR.Text = "Your THR is " & thr & " beats per minute." End Sub 41. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim cycling, running, swimming, pounds As Double cycling = CDbl(txtCycle.Text) running = CDbl(txtRun.Text) swimming = CDbl(txtSwim.Text) pounds = ((200 * cycling) + (475 * running) + (275 * swimming)) / 3500 pounds = Math.Round(pounds, 1) txtWtLoss.Text = pounds & " pounds were lost." End Sub 42. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim wattage, hours, price, costInCents, costInDollars As Double wattage = CDbl(txtWattage.Text) hours = CDbl(txtHoursUsed.Text) price = CDbl(txtPricePerKWh.Text) costInCents = (wattage * hours * price) / 1000 costInDollars = Math.Round(costInCents) / 100 txtCost.Text = CStr(costInDollars) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 24 of 443) 43. Private Sub btnAdd_Click(...) Handles btnAdd.Click Dim hr1, hr2, min1, min2, totalMinutes, totalHours As Integer hr1 = CInt(txtHours1.Text) hr2 = CInt(txtHours2.Text) min1 = CInt(txtMin1.Text) min2 = CInt(txtMin2.Text) totalMinutes = (min1 + min2) Mod 60 totalHours = hr1 + hr2 + ((min1 + min2) \ 60) txtSum.Text = totalHours & " hours and " & totalMinutes & " minutes" End Sub 44. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim numberOfGames As Integer Dim percent, percentage As Double numberOfGames = CInt(txtWon.Text) + CInt(txtLost.Text) percent = CDbl(txtWon.Text) / numberOfGames percentage = 100 * Math.Round(percent, 5) txtPercent.Text = "The " & txtTeam.Text & " won " & percentage & " percent of their games." End Sub 45. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim revenue, expenses, income As Decimal revenue = CDec(txtRevenue.Text) expenses = CDec(txtExpenses.Text) income = revenue - expenses txtNetIncome.Text = CStr(income) End Sub 46. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim per As Decimal per = CDec(txtPrice.Text) / CDec(txtEarnings.Text) txtPER.Text = CStr(per) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 25 of 443) 47. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim speed, distance As Double distance = CDbl(txtDistanceSkidded.Text) speed = Math.Sqrt(24 * distance) speed = Math.Round(speed, 2) txtEstimatedSpeed.Text = speed & " mph" End Sub 48. Private Sub btnConvert_Click(...) Handles btnConvert.Click Dim per As String, num As Double per = txtPercent.Text per = per.Substring(0, per.Length - 1) num = CDbl(per) / 100 txtNumber.Text = CStr(num) End Sub 49. Dim number As Integer = 100 'in Declarations section Private Sub btnPressMe_Click(...) Handles btnPressMe.Click number = number - 1 'decrease number by 1 txtOutput.Text = CStr(number) End Sub 50. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim phoneNumber As String phoneNumber = txtPhoneNumber.Text txtAreaCode.Text = phoneNumber.Substring(0, 3) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 26 of 443) 51. Dim sum As Double Dim num As Integer 'sum of the scores entered 'number of scores entered Private Sub btnRecord_Click(...) Handles btnRecord.Click num += 1 sum += CDbl(txtScore.Text) txtScore.Clear() txtScore.Focus() End Sub Private Sub btnCalculate_Click(...) Handles btnCalculate.Click txtAverage.Text = CStr(sum / num) End Sub 52. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim sentence = "THE QUICK BROWN FOX JUMPS OVER A LAZY DOG" Dim letter As String, position As Integer letter = txtLetter.Text.ToUpper position = sentence.IndexOf(letter) txtOutput.Text = letter & " first occurs in position " & position & "." End Sub 53. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim amount, percentage, tip As Decimal amount = CDec(txtAmount.Text) percentage = CDec(txtPercentage.Text) tip = amount * (percentage / 100) txtTip.Text = CStr(Math.Round(tip, 2)) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 27 of 443) 54. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim number As String, position As Integer number = txtNumber.Text position = number.IndexOf(".") txtLeft.Text = CStr(position) txtRight.Text = CStr(number.Length - position - 1) End Sub 55. Private Sub btnModifySentence_Click(...) Handles btnModifySentence.Click Dim sentence, oldWord, newWord As String Dim position As Integer sentence = txtSentence.Text oldWord = txtOriginalWord.Text newWord = txtReplacementWord.Text position = sentence.IndexOf(oldWord) txtOutput.Text = sentence.Substring(0, position) & newWord & sentence.Substring(position + oldWord.Length) End Sub 56. Dim totalSales As Decimal Private Sub btnDisplay_Click(...) Handles btnDisplay.Click lstOutput.Items.Add(txtItem.Text & ": " & txtPrice.Text) totalSales += CDec(txtPrice.Text) txtItem.Clear() txtPrice.Clear() txtItem.Focus() End Sub Private Sub btnShow_Click(...) Handles btnShow.Click lstOutput.Items.Add("Total commission = " & (0.06 * totalSales)) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 28 of 443) 57. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim num1, num2, sum As Double num1 = CDbl(txtFirstNum.Text) num2 = CDbl(txtSecondNum.Text) sum = num1 + num2 txtSum.Text = CStr(sum) End Sub Private Sub txtEitherNum_TextChanged(...) Handles _ txtFirstNum.TextChanged, txtSecondNum.TextChanged txtSum.Clear() End Sub 58. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim principal, interestRate, balance As Decimal Dim numYears As Integer principal = CDec(txtPrincipal.Text) interestRate = CDec(txtInterest.Text) numYears = CInt(txtYears.Text) balance = CDec(principal * (1 + interestRate / 100) ^ numYears)) txtBalance.Text = balance.ToString("C") End Sub 59. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim futureValue, interestRate, presentValue As Decimal Dim numYears As Integer futureValue = CDec(txtFutureValue.Text) interestRate = CDec(txtInterest.Text) numYears = CInt(txtYears.Text) presentValue = CDec(futureValue / (1 + interestRate / 100) ^ numYears) txtPresentValue.Text = CStr(Math.Round(presentValue, 2)) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 29 of 443) 60. Private Sub btnConvert_Click(...) Handles btnConvert.Click Dim numMonths As Integer = CInt(txtMonths.Text) Dim years As Integer = numMonths \ 12 Dim remainingMonths = numMonths Mod 12 txtAnswer.Text = years.ToString("N0") & " years and " & remainingMonths & " months" End Sub 61. Private Sub btnConvert_Click(...) Handles btnConvert.Click Dim feet, inches As Integer inches = CInt(txtInches.Text) feet = inches \ 12 inches = inches Mod 12 txtFeetAndInches.Text = feet & " feet and " & inches & " inches" End Sub 62. Private Sub btnFind_Click(...) Handles btnFind.Click Dim taxBracket As Decimal = CDec(txtTaxBracket.Text) Dim bondRate As Decimal = CDec(txtMunIntRate.Text) Dim equivCDrate As Decimal = bondRate / (1 - taxBracket) txtCDIntRate.Text = CStr(Math.Round(equivCDrate, 3)) End Sub EXERCISES 3.3 1. 1,235 5. 0.0 2. –12.346 6. 0.1 3. 1,234.0 7. -0.67 4. 12,345.00 8. 1.20 9. 12,346.000 10. 12 11. 12 12. $1,234.50 13. $12,346 14. ($1,234,567.00) 15. ($0.23) 16. $3,200.00 17. $0.80 18. 4 % 19. $0.08 20. -5.000 % 21. 100.00 % 22. 1.00 % 23. 66.67 % 24. 75.0 % 25. Pay to France $27,267,622.00 26. Manhattan was purchased for $24.00 27. 25.6 % of the U.S. population 25+ years old are college graduates. 28. 1,711,500 degrees were conferred. 29. The likelihood of Heads is 50 % 30. Pi = 3.1416 31. 10/23/2015 32. Sunday, June 15, 2017 33. Thursday, November 24, 2016 34. 1/1/2015 © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 30 of 443) 35. 10/2/2017 36. 2/9/2016 37. 4/5/2019 38. 11/2/2015 39. 29 40. 366 41. 5 42. 2 43. 1 44. 2016 45. 2018 46. 1, 2, 3 48. Untied 49. Hello John Jones 47. You might win 360 dollars. 50. At the current interest rate, money will double in 18 years. 51. $106.00 52. You owe $900,000.00 in estate taxes. 53. 123456789012345678901234567890 Mountain Place Ht (ft) K2 Kashmir 28,250 54. 12345678901234567890 College Mascot Univ. of MD Terrapins Duke Blue Devils 55. 12345678901234567890 Element Weight Percent Oxygen 97.5 65.0 % Carbon 27.0 18.0 % 56. 12345678901234567890 Tuition College & Fees Stanford $42,690 Harvard $42,292 57. The statement n += 1 is not valid since the value of a named constant cannot be changed. 58. The statement n = n.ToUpper is not valid since the value of a constant cannot be changed. 59. The second line should use CDbl to convert the right-hand side to type Double. 60. There needs to be a string inside the InputBox() call (i.e., the "Prompt" argument is required). 61. (123456).ToString("N") is a string and therefore cannot be assigned to a numeric variable. 62. Must remove the dollar sign. 63. You must insert .Show after the word MessageBox. 64. 1776 should be surrounded with quote marks 65. 000 66. LLLLLLLLLL 67. LLL000 68. 0LLL000 69. 0-00-000000-& 70. LL 71. MessageBox.Show("First solve the problem. Then write the code.", "Good Advice") 72. MessageBox.Show("You can't steal second base and keep one foot on first.", "Taking Risks Proverb") © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 31 of 443) 73. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click 'Inflation Dim begOfYearCost, endOfYearCost As Decimal Dim percentIncrease As Decimal begOfYearCost = 200 endOfYearCost = CDec(InputBox("Enter cost at the end of the year:")) percentIncrease = (endOfYearCost - begOfYearCost) / begOfYearCost txtOutput.Text = "The increase in cost for the year is " & percentIncrease.ToString("P") & "." End Sub 74. Private Sub btnDisplayReport_Click(..) Handles btnDisplayReport.Click 'Report the amount of money raised in a walk-a-thon Dim pledge, miles As Decimal pledge = CDec(InputBox("Enter amount pledged per mile:", "Walk-A-Thon")) miles = CDec (InputBox("Enter number of miles walked:", "Walk-A-Thon")) txtReport.Text = "Collect " & (pledge * miles).ToString("C") & " from this sponsor." End Sub 75. Private Sub txtPhoneNumber_Enter(...) Handles txtPhoneNumber.Enter 'Reminder MessageBox.Show("Be sure to include the area code!", "Reminder") End Sub 76. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click 'Days since Declaration of Independence ratified Dim dateDOC As Date = #7/4/1776# Dim numDays As Double = DateDiff(DateInterval.Day, dateDOC, Today) txtNumDays.Text = numDays.ToString("N0") End Sub 77. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click 'Length of year Dim firstDayOfYr, firstDayOfNextYr As Date Dim numDays As Double firstDayOfYr = CDate("1/1/" & mtbYear.Text) firstDayOfNextYr = firstDayOfYr.AddYears(1) numDays = DateDiff(DateInterval.Day, firstDayOfYr, firstDayOfNextYr) txtNumDays.Text = CStr(numDays) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 32 of 443) 78. Private Sub Determine_Click(...) Handles btnDetermine.Click 'Day of week Dim dt As Date = CDate(mtbDate.Text) Dim fullDate As String = dt.ToString("D") Dim position As Integer = fullDate.IndexOf(",") Dim dayOfWeek As String = fullDate.Substring(0, position) txtDayOfWeek.Text = dayOfWeek End Sub 79. Private Sub Determine_Click(...) Handles btnDetermine.Click 'Day of week Dim dt As Date = CDate(mtbDate.Text) Dim laterDate = dt.AddYears(10) Dim fullDate As String = laterDate.ToString("D") Dim position As Integer = fullDate.IndexOf(",") Dim dayOfWeek As String = fullDate.Substring(0, position) txtDayOfWeek.Text = dayOfWeek End Sub 80. Private Sub Determine_Click(...) Handles btnDetermine.Click 'Day of birth Dim dt As Date = CDate(mtbDate.Text) Dim turn21Date = dt.AddYears(21) Dim fullDate As String = turn21Date.ToString("D") Dim position As Integer = fullDate.IndexOf(",") Dim dayOfWeek As String = fullDate.Substring(0, position) txtDayOfWeek.Text = dayOfWeek End Sub 81. Private Sub btnConvert_Click(...) Handles btnConvert.Click 'Convert date formats Dim dt As Date dt = CDate(txtUS.Text) txtEurope.Text = dt.Day & "/" & dt.Month & "/" & dt.Year End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 33 of 443) 82. Private Sub btnWhen_Click(...) Handles btnWhen.Click 'Valentine’s day Dim yr As String Dim dt As Date yr = txtYear.Text dt = CDate("2/14/" & yr) txtDate.Text = dt.ToString("D") End Sub 83. Private Sub Determine_Click(...) Handles btnDetermine.Click 'Length of month Dim month, yr As Integer 'month given as 1 through 12 Dim dt, dt2 As Date Dim numDays As Double month = CInt(txtMonth.Text) yr = CInt(mtbYear.Text) dt = CDate(month & "/1/" & yr) dt2 = dt.AddMonths(1) numDays = DateDiff(DateInterval.Day, dt, dt2) txtNumDays.Text = CStr(numDays) End Sub 84. Private Sub btnCompute_Click(...) Handles btnCompute.Click 'Age on Mercury Dim dob As Date = CDate(mtbDayOfBirth.Text) Dim ageOnEarthInDays, ageOnMercuryInYears As Double txtToday.Text = Today.ToString("d") ageOnEarthInDays = DateDiff(DateInterval.Day, dob, Today) ageOnMercuryInYears = ageOnEarthInDays / 88 txtAgeOnMercury.Text = ageOnMercuryInYears.ToString("N1") & " Mercurian years" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 34 of 443) 85. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click 'Change in salary Dim begSalary, salary As Decimal begSalary = CDec(txtBeginningSalary.Text) salary = begSalary + (0.1D * begSalary) salary = salary – (0.1D * salary) txtNewSalary.Text = salary.ToString("C") txtChange.Text = ((salary - begSalary) / begSalary).ToString("P") End Sub 86. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click 'Change in salary Dim begSalary, salary As Decimal begSalary = CDec(txtBeginningSalary.Text) salary = begSalary + 0.05D * begSalary salary = salary + 0.05D * salary salary = salary + 0.05D * salary txtNewSalary.Text = salary.ToString("C") txtChange.Text = ((salary - begSalary) / begSalary).ToString("P") End Sub 87. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click 'Taxi fare Dim distance As Double distance = CDbl(txtDistance.Text) txtFare.Text = (0.8 + 0.2 * (Int(4 * distance))).ToString("C") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 35 of 443) 88. Private Sub txtCalculate_Click(...) Handles txtCalculate.Click 'Marketing terms Dim purchasePrice As Decimal = CDec(txtPurchasePrice.Text) Dim sellingPrice As Decimal = CDec(txtSellingPrice.Text) Dim markup, percentageMarkup, profitMargin As Decimal markup = sellingPrice - purchasePrice percentageMarkup = markup / purchasePrice profitMargin = markup / sellingPrice txtMarkup.Text = markup.ToString("C") txtPercentageMarkup.Text = percentageMarkup.ToString("P") txtProfitMargin.Text = profitMargin.ToString("P") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 36 of 443) CHAPTER 3 PROGRAMMING PROJECTS 1. Private Sub btnAdd_Click(...) Handles btnAdd.Click Dim num1 As Double = CDbl(txtFirstNum.Text) Dim num2 As Double = CDbl(txtSecondNum.Text) txtOutput.Text = num1 & " + " & num2 & " = " & num1 + num2 End Sub Private Sub btnSubtract_Click(...) Handles btnSubtract.Click Dim num1 As Double = CDbl(txtFirstNum.Text) Dim num2 As Double = CDbl(txtSecondNum.Text) txtOutput.Text = num1 & " - " & num2 & " = " & num1 - num2 End Sub Private Sub btnMultiply_Click(...) Handles btnMultiply.Click Dim num1 As Double = CDbl(txtFirstNum.Text) Dim num2 As Double = CDbl(txtSecondNum.Text) txtOutput.Text = num1 & " x " & num2 & " = " & (num1 * num2) End Sub Private Sub input_TextChanged(...) Handles txtFirstNum.TextChanged, txtSecondNum.TextChanged txtOutput.Clear() End Sub 2. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Const TAX_RATE As Decimal = 0.05D '5% sales tax Const LABOR_RATE As Decimal = 35D 'dollars per hour Dim labor, parts, total As Decimal labor = CDec(txtHours.Text) * LABOR_RATE 'cost of labor parts = CDec(txtCost.Text) parts += parts * TAX_RATE total = labor + parts lstBill.Items.Clear() lstBill.Items.Add("Customer " & txtCustomer.Text) lstBill.Items.Add("Labor cost " & labor.ToString("C")) lstBill.Items.Add("Parts cost " & parts.ToString("C")) lstBill.Items.Add("Total cost " & total.ToString("C")) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 37 of 443) 3. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim remainder As Integer = CInt(txtAmount.Text) Dim quarters, dimes, nickels, cents As Integer quarters = remainder \ 25 remainder = remainder Mod 25 dimes = remainder \ 10 remainder = remainder Mod 10 nickels = remainder \ 5 remainder = remainder Mod 5 cents = remainder txtQuarters.Text = CStr(quarters) txtDimes.Text = CStr(dimes) txtNickels.Text = CStr(nickels) txtCents.Text = CStr(cents) End Sub 4. Private Sub btnConvert_Click(...) Handles btnConvert.Click 'Length conversion Dim totalInches As Double Dim totalMeters As Double Dim meters, kilometers As Double Dim centimeters As Double 'Step #1: Add up given measurements into inches totalInches = CDbl(txtInches.Text) 'inches box totalInches += 12 * CDbl(txtFeet.Text) 'add in feet totalInches += 36 * CDbl(txtYards.Text) 'add in yards totalInches += 63360 * CDbl(txtMiles.Text) 'add in miles 'Step #2: Convert total inches into total meters totalMeters = totalInches / 39.37 'total inches to total meters 'Step #3: Compute kilometers, whole meters, and centimeters 'Step 3a: compute # of kilometers, subtract from meters kilometers = Int(totalMeters / 1000) totalMeters = totalMeters – (1000 * kilometers) 'Put the whole part of totalMeters into meters, 'and the fractional part into centimeters. meters = Int(totalMeters) centimeters = 100 * (totalMeters - meters) centimeters = Math.Round(centimeters, 1) lstOutput.Items.Clear() lstOutput.Items.Add("The metric length is") lstOutput.Items.Add(kilometers & " kilometers") lstOutput.Items.Add(meters & " meters") lstOutput.Items.Add(centimeters & " centimeters.") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 38 of 443) 5. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click 'Car loan Dim loanAmount, interestRate, monthlyPayment, i As Decimal 'i is the monthly interest in decimal form Dim numYears As Integer loanAmount = CDec(txtAmount.Text) interestRate = CDec(txtInterest.Text) numYears = CInt(txtYears.Text) i = interestRate / 1200 monthlyPayment = CDec(i / (1 - ((1 + i) ^ (-12 * numYears)))) * loanAmount txtMonthlyPayment.Text = monthlyPayment.ToString("C") End Sub 6. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click 'Unit price Dim price, pricePerOunce As Decimal Dim pounds, ounces, weightInOunces As Integer price = CDec(txtPrice.Text) pounds = CInt(txtPounds.Text) ounces = CInt(txtOunces.Text) weightInOunces = 16 * pounds + ounces pricePerOunce = price / weightInOunces txtUnitPrice.Text = pricePerOunce.ToString("C") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 39 of 443) 7. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click 'Bond yield to maturity Dim faceValue, couponRate, interest, marketPrice, yrsUntilMaturity Dim a, b, ytm As Decimal faceValue = CDec(txtFaceValue.Text) couponRate = CDec(txtInterestRate.Text) interest = faceValue * couponRate marketPrice = CDec(txtMarketPrice.Text) yrsUntilMaturity = CDec(txtYrsUntilMaturity.Text) a = (faceValue - marketPrice) / yrsUntilMaturity b = (faceValue + marketPrice) / 2 ytm = (interest + a) / b txtYTM.Text = ytm.ToString("P") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 40 of 443) CHAPTER 4 EXERCISES 4.1 1. hi 2. C# 4. B 3. The letter before G is F 5. "We're all in this alone." - Lily Tomlin 6. D is the 4th letter of the alphabet. 7. True 8. False 9. True 10. False 11. True 12. False 13. True 15. False 16. False 17. False 18. True 19. True 20. True 21. True 22. True 23. False 24. True 25. False 26. True 27. False 28. True 30. True 31. Equivalent 32. Not equivalent 35. Equivalent 36. Not equivalent 39. a <= b 40. (a <> b) And (a <> d) 41. (a >= b) Or (c = d) 33. Not equivalent 37. Not equivalent 14. True 29. True 34. Equivalent 38. Not equivalent 42. (a = b) Or (a > b) 43. (a = "") Or (a >= b) Or (a.Length >= 5) 44. a > b [In Exercises 45 through 48, execute a statement of the form txtOutput.Text = CStr(Boolean expression).] 45. True 46. True 47. True 48. False 49. False 50. True 51. False 52. True 53. True 54. True 55. True 56. False 57. False 58. True 59. True 60. False 61. Private Sub btnFind_Click(...) Handles btnFind.Click 'Find the position of a letter in the alphabet. Dim letter As String, position As Integer letter = txtLetter.Text.ToUpper position = Asc(letter) - 64 txtPosition.Text = CStr(position) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 41 of 443) EXERCISES 4.2 1. Less than ten. 2. Student 3. Your change contains 3 dollars. 4. Cost of cloth: $15.50 5. To be, or not to be. 6. A is a vowel. 7. Hi 8. positive 9. You are old enough to vote in 7 days. 10. You are younger than Nick. 11. Syntax error. Third line should be If ((1 < num) And (num < 3)) Then 12. Syntax error. The variable num is missing from the second part of the condition. Should be If ((num > 5) And (num < 9)) Then 13. Syntax error. Fourth line should be If ((major = "Business") Or (major = "Computer Science")) Then 14. Logic Error. If the user enters "True", the switch changes to "off" and then back to "on". 15. a = 5 16. If j = 7 Then b = 1 Else b = 2 End If 17. message = "Is Alaska bigger than Texas and California combined?" answer = InputBox(message) If (answer.Substring(0, 1).ToUpper = "Y") Then txtOutput.Text = "Correct" Else txtOutput.Text = "Wrong" End If 18. message = "How tall (in feet) is the Statue of Liberty?" feet = CDbl(InputBox(message)) If (feet > 141) And (feet < 161) Then lstOutput.Items.Add("Close") Else lstOutput.Items.Add("Nope") End If lstOutput.Items.Add("The statue is 151 feet from base to torch.") 19. If IsNumeric(txtBox.Text) AndAlso (CDbl(txtBox.Text) < 0) Then MessageBox.Show("negative") End If 20. If (str1 <> "") AndAlso (m = (str2.Length / str1.Length)) Then txtBox.Text = str1 & str2 End If © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 42 of 443) 21. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim cost, tip As Decimal cost = CDec(txtAmount.Text) tip = cost * 0.18D If tip < 1 Then tip = 1 End If txtOutput.Text = tip.ToString("C") End Sub 22. Private Sub btnCompute_Click(...) Handles btnCompute.Click 'Determine cost of bagels. Dim num As Integer, cost As Decimal num = CInt(txtNumber.Text) If num < 6 Then cost = 0.75D * num Else cost = 0.6D * num End If txtCost.Text = cost.ToString("C") End Sub 23. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim num, cost As Decimal num = CDec(txtNumber.Text) If num < 100 Then cost = 0.25D * num '25 cents each Else cost = 0.2D * num '20 cents each End If txtOutput.Text = cost.ToString("C") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 43 of 443) 24. Private Sub btnCompute_Click(...) Handles btnCompute.Click 'Determine cost of copies. Dim num As Integer, cost As Decimal num = CInt(txtNumber.Text) If num < 100 Then cost = 0.05D * num Else cost = 5 + 0.03D * (num - 100) End If txtCost.Text = cost.ToString("C") End Sub 25. Private Sub btnAskQuestion_Click(...) Handles btnAskQuestion.Click Dim name As String name = (txtAnswer.Text).ToUpper If name = "WILLARD SCOTT" Then txtOutput.Text = "Correct." Else txtOutput.Text = "Nice try." End If End Sub 26. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim wage, hours, grossPay As Decimal wage = CDec(txtHourlyWage.Text) 'Hourly pay hours = CDec(txtHoursWorked.Text) 'Hours worked If hours <= 40 Then grossPay = wage * hours Else grossPay = (wage * 40) + (1.5D * wage * (hours - 40)) End If txtGrossPay.Text = grossPay.ToString("C") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 44 of 443) 27. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim s1, s2, s3 As Double '3 scores Dim avg As Double 'average of the two highest scores s1 = CDbl(txtScore1.Text) s2 = CDbl(txtScore2.Text) s3 = CDbl(txtScore3.Text) If (s1 <= s2) And (s1 <= s3) Then 's1 is smallest number avg = (s2 + s3) / 2 ElseIf (s2 <= s1) And (s2 <= s3) Then 's2 is smallest number avg = (s1 + s3) / 2 Else 's3 is smallest number avg = (s1 + s2) / 2 End If txtAverage.Text = CStr(avg) End Sub 28. Private Sub btnCompute_Click(...) Handles btnTranslate.Click 'convert to Pig Latin Dim word, firstLetter As String Dim positionOfFirstVowel As Integer word = txtWord.Text.ToLower firstLetter = word.Substring(0, 1) If "aeiou".IndexOf(firstLetter) <> -1 Then word &= "way" Else positionOfFirstVowel = word.Length - 1 If (word.IndexOf("a") <> -1) And (word.IndexOf("a") < positionOfFirstVowel) Then positionOfFirstVowel = word.IndexOf("a") End If If (word.IndexOf("e") <> -1) And (word.IndexOf("e") < positionOfFirstVowel) Then positionOfFirstVowel = word.IndexOf("e") End If If (word.IndexOf("i") <> -1) And (word.IndexOf("i") < positionOfFirstVowel) Then positionOfFirstVowel = word.IndexOf("i") End If If (word.IndexOf("o") <> -1) And (word.IndexOf("o") < positionOfFirstVowel) Then positionOfFirstVowel = word.IndexOf("o") End If If (word.IndexOf("u") <> -1) And (word.IndexOf("u") < positionOfFirstVowel) Then positionOfFirstVowel = word.IndexOf("u") End If word = word.Substring(positionOfFirstVowel) & word.Substring(0, positionOfFirstVowel) & "ay" End If txtOutput.Text = "The word in pig latin is " & word & "." End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 45 of 443) 29. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim weight, cost, amount, change As Decimal weight = CDec(txtWeight.Text) amount = CDec(txtAmount.Text) cost = weight * 2.5D If (amount >= cost) Then change = amount - cost txtOutput.Text = "Your change is " & change.ToString("C") & "." Else txtOutput.Text = "I need " & (cost - amount).ToString("C") & " more." End If End Sub 30. Private Sub btnCompute_Click(...) Handles btnCompute.Click 'Savings account withdrawal Dim balance, amountOfWithdrawal As Decimal balance = CDec(txtCurrentBalance.Text) amountOfWithdrawal = CDec(txtWithdrawal.Text) If (balance >= amountOfWithdrawal) Then balance = balance - amountOfWithdrawal txtOutput.Text = "New balance is " & balance.ToString("C") & "." If balance < 150 Then MessageBox.Show("Balance below $150", "Warning") End If Else txtOutput.Text = "Withdrawal denied." End If End Sub 31. Private Sub btnQuit_Click(...) Handles btnQuit.Click 'Quit? Dim answer As String answer = InputBox("Do you really want to quit? (Y/N)") answer = answer.Substring(0, 1).ToUpper If (answer = "Y") Then Me.Close() End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 46 of 443) 32. Private Sub btnCompute_Click(...) Handles lblDetermine.Click 'Test if year is a leap year 'Note: The number n is divisible by 4 if n Mod 4 = 0. Dim yr As Integer yr = CInt(txtYear.Text) If (yr Mod 4 = 0) And ((yr Mod 100 <> 0) Or (yr Mod 400 = 0)) Then txtLeapYear.Text = "YES" Else txtLeapYear.Text = "NO" End If End Sub 33. Dim numLines As Integer = 0 'In Declarations section of Code Editor 'numLines tells the number of lines that have been displayed. Private Sub btnBogart_Click(...) Handles btnBogart.Click If numLines = 0 Then lstOutput.Items.Add("I came to Casablanca for the waters.") numLines += 1 ElseIf numLines = 2 Then lstOutput.Items.Add("I was misinformed.") numLines += 1 End If End Sub Private Sub btnRaines_Click(...) Handles btnRaines.Click If numLines = 1 Then lstOutput.Items.Add("But we're in the middle of the desert.") numLines += 1 End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 47 of 443) 34. Dim hue As String = "Black" Private Sub btnChangeColor_Click(...) Handles btnChangeColor.Click If hue = "Black" Then txtBox.ForeColor = Color.Red hue = "Red" btnChangeColor.Text = "Change Color of Text to Black" Else txtBox.ForeColor = Color.Black hue = "Black" btnChangeColor.Text = "Change Color of Text to Red" End If End Sub 35. Private Sub btnConvertToRegular_Click(...) Handles btnConvertToRegular.Click Dim partOfDay As String Dim time As String = mtbMilitary.Text Dim hours As Integer = CInt(time.Substring(0, 2)) Dim minutes As String = time.Substring(2, 2) If hours >= 12 Then partOfDay = "pm" Else partOfDay = "am" End If If time = "0000" Then txtRegular.Text = "midnight" ElseIf time = "1200" Then txtRegular.Text = "noon" ElseIf hours = 0 Or hours = 12 Then txtRegular.Text = "12:" & minutes & " " & partOfDay Else txtRegular.Text = (hours Mod 12) & ":" & minutes & " " & partOfDay End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 48 of 443) 36. Dim h1, h2 As Double '2 highest test scores, in order 'h1 has highest value of the two Private Sub btnRead_Click(...) Handles btnRead.Click Dim newScore As Double 'Read in a test score newScore = CDbl(txtScore.Text) If newScore > h1 Then h2 = h1 h1 = newScore ElseIf newScore > h2 Then h2 = newScore End If txtScore.Text = "" txtScore.Focus() End Sub Private Sub btndisplay_Click(...) Handles btndisplay.Click 'Show the two highest test scores so far txtHighest.Text = h1 & " " & h2 txtScore.Focus() End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 49 of 443) 37. Dim numGuesses As Integer = 0 Private Sub btnEvaluate_Click(...) Handles btnEvaluate.Click 'Assume that the Text property of txtNumberOfGuesses 'was set to 0 in the Form Designer numGuesses += 1 txtNumberOfGuesses.Text = CStr(numGuesses) Dim msg As String If txtAnswer.Text.ToUpper.IndexOf("COOLIDGE") <> -1 Then MessageBox.Show("Calvin Coolidge was born on July 4, 1872.", "Correct") Me.Close() ElseIf CInt(numGuesses) = 10 Then msg = "Calvin Coolidge was born on July 4, 1872." MessageBox.Show(msg, "You've Run Out of Guesses") Me.Close() Else If CInt(numGuesses) = 3 Then msg = "He once said, 'If you don't say anything," & " you won't be called upon to repeat it.'" ElseIf CInt(numGuesses) = 7 Then msg = "His nickname was 'Silent Cal.'" Else msg = "Sorry!" End If MessageBox.Show(msg, "Incorrect") End If txtAnswer.Clear() txtAnswer.Focus() End Sub 38. Private Sub btnCalculateTax_Click(...) Handles btnCalculateTax.Click 'Calculate state income tax Dim income, tax As Decimal income = CDec(txtIncome.Text) If income <= 20000 Then tax = 0.02D * income Else If income <= 50000 Then tax = 400 + 0.025D * (income - 20000) Else tax = 1150 + 0.035D * (income - 50000) End If End If txtOutput.Text = "Tax is " & tax.ToString("C") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 50 of 443) 39. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim dob As Date = CDate(txtDOB.Text) Dim numDays As Double Dim birthdayToUse As Date birthdayToUse = CDate(dob.Month & "/" & dob.Day & "/" & Today.Year) If birthdayToUse < Today Then birthdayToUse = birthdayToUse.AddYears(1) End If numDays = DateDiff(DateInterval.Day, Today, birthdayToUse) If numDays = 0 Then MessageBox.Show("HAPPY BIRTHDAY") End If txtNumDays.Text = CStr(numDays) txtToday.Text = CStr(Today) End Sub 40. Private Sub Determine_Click(...) Handles btnDetermine.Click 'DateDiff(DateInterval.Year, d1, d2) uses only the year 'parts of the two dates in its computation. 'lblAnswer.Text = "Twenty-five?" 'lblDays.Text = "Days to wait:" lblDays.Visible = False txtDays.Visible = False Dim dt As Date = CDate(mtbDate.Text) Dim turn25Date = dt.AddYears(25) Dim approximateAge As Double = DateDiff(DateInterval.Year, dt, Today) If Today >= turn25Date Then txtAnswer.Text = "YES" Else txtAnswer.Text = "NO" Dim numDays As Double = DateDiff(DateInterval.Day, Today, turn25Date) lblDays.Visible = True txtDays.Visible = True txtDays.Text = CStr(numDays) End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 51 of 443) 41. Private Sub Determine_Click(...) Handles btnDetermine.Click 'DateDiff(DateInterval.Year, d1, d2) uses only the year 'parts of the two dates in its computation. Dim dt, dt2 As Date Dim approximateAge As Double dt = CDate(mtbDate.Text) approximateAge = DateDiff(DateInterval.Year, dt, Today) dt2 = dt.AddYears(CInt(approximateAge)) If Today < dt2 Then txtAge.Text = CStr(approximateAge - 1) Else txtAge.Text = CStr(approximateAge) End If End Sub 42. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click If lblLanguage.Visible Then lblLanguage.Visible = False btnDisplay.Text = "Show Name of Language" Else lblLanguage.Visible = True btnDisplay.Text = "Hide Name of Language" End If End Sub 43. Private Sub btnCompute_Click(...) Handles lblDetermine.Click Dim day As String Dim day1, day2 As Date Dim numDays As Double day = "1/1/" & txtYear.Text day1 = CDate(day) day2 = day1.AddYears(1) numDays = DateDiff(DateInterval.Day, day1, day2) If numDays = 366 Then txtLeapYear.Text = "YES" Else txtLeapYear.Text = "NO" End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 52 of 443) 44. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim ipp1, ipp2 As Decimal Dim apy1, apy2 As Decimal ipp1 = CDec(txtRate1.Text) / (100 * CDec(txtPeriods1.Text)) ipp2 = CDec(txtRate2.Text) / (100 * CDec(txtPeriods2.Text)) apy1 = CDec((1 + ipp1) ^ CInt(txtPeriods1.Text) – 1) apy2 = CDec((1 + ipp2) ^ CInt(txtPeriods2.Text) – 1) txtAPY1.Text = apy1.ToString("P3") txtAPY2.Text = apy2.ToString("P3") If apy1 = apy2 Then txtBest.Text = "Neither" ElseIf apy1 < apy2 Then txtBest.Text = "Bank 2" Else txtBest.Text = "Bank 1" End If End Sub 45. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim gpa As Double = CDbl(txtGPA.Text) Dim honors As String = "" If gpa >= 3.9 Then honors = " summa cum laude." End If If (3.6 <= gpa) And (gpa < 3.9) Then honors = " magna cum laude." End If If (3.3 <= gpa) And (gpa < 3.6) Then honors = " cum laude." End If If (2 <= gpa) And (gpa < 3.3) Then honors = "." End If txtOutput.Text = "You graduated" & honors End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 53 of 443) 46. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim gpa As Double = CDbl(txtGPA.Text) txtOutput.Text = "" If (2 <= gpa) And (gpa <= 4) Then Dim honors As String = "" If gpa >= 3.9 Then honors = " summa cum laude." ElseIf gpa >= 3.6 Then honors = " magna cum laude." ElseIf gpa >= 3.3 Then honors = " cum laude." ElseIf gpa >= 2 Then honors = "." End If txtOutput.Text = "You graduated" & honors Else MessageBox.Show("GPA must be between 2 and 4.", "Try Again.") End If End Sub 47. Private Sub btnFind_Click(...) Handles btnFind.Click Dim largestNum As Double = CDbl(txtFirstNum.Text) If CDbl(txtSecondNum.Text) > largestNum Then largestNum = CDbl(txtSecondNum.Text) End If If CDbl(txtThirdNum.Text) > largestNum Then largestNum = CDbl(txtThirdNum.Text) End If txtLargestNum.Text = CStr(largestNum) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 54 of 443) 48. Private Sub btnAdd_Click(...) Handles btnAdd.Click Dim num1 As Double = CDbl(txtFirstNum.Text) Dim num2 As Double = CDbl(txtSecondNum.Text) txtOutput.Text = num1 & " + " & num2 & " = " & num1 + num2 End Sub Private Sub btnSubtract_Click(...) Handles btnSubtract.Click Dim num1 As Double = CDbl(txtFirstNum.Text) Dim num2 As Double = CDbl(txtSecondNum.Text) txtOutput.Text = num1 & " - " & num2 & " = " & num1 - num2 End Sub Private Sub btnMultiply_Click(...) Handles btnMultiply.Click Dim num1 As Double = CDbl(txtFirstNum.Text) Dim num2 As Double = CDbl(txtSecondNum.Text) txtOutput.Text = num1 & " x " & num2 & " = " & (num1 * num2) End Sub Private Sub btnDivide_Click(...) Handles btnDivide.Click Dim num1 As Double = CDbl(txtFirstNum.Text) Dim num2 As Double = CDbl(txtSecondNum.Text) txtOutput.Text = num1 & " / " & num2 & " = " & (num1 / num2) End Sub Private Sub input_TextChanged(...) Handles txtFirstNum.TextChanged, txtSecondNum.TextChanged txtOutput.Clear() If txtSecondNum.Text = "0" Then btnDivide.Enabled = False End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 55 of 443) 49. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click 'Buy two, get one free sale Dim cost1, cost2, cost3, minimumCost As Decimal cost1 = CDec(txtCostOfItem1.Text) cost2 = CDec(txtCostOfItem2.Text) cost3 = CDec(txtCostOfItem3.Text) minimumCost = cost1 If cost2 < minimumCost Then minimumCost = cost2 End If If cost3 < minimumCost Then minimumCost = cost3 End If txtTotalCost.Text = (cost1 + cost2 + cost3 – minimumCost).ToString("C") End Sub 50. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click 'Second suit half-off sale Dim cost1, cost2, totalCost As Decimal cost1 = CDec(txtCostOfFirstSuit.Text) cost2 = CDec(txtCostOfSecondSuit.Text) If cost1 < cost2 Then totalCost = cost2 + 0.5D * cost1 Else totalCost = cost1 + 0.5D * cost2 End If txtTotalCost.Text = totalCost.ToString("C") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 56 of 443) 51. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click 'Sort three numbers. Dim max, min As Double max = CDbl(txtNum1.Text) If CDbl(txtNum2.Text) > max Then max = CDbl(txtNum2.Text) End If If CDbl(txtNum3.Text) > max Then max = CDbl(txtNum3.Text) End If txtMax.Text = CStr(max) min = CDbl(txtNum1.Text) If CDbl(txtNum2.Text) < min Then min = CDbl(txtNum2.Text) End If If CDbl(txtNum3.Text) < min Then min = CDbl(txtNum3.Text) End If txtMin.Text = CStr(min) If (CDbl(txtNum1.Text) < max) AndAlso (CDbl(txtNum1.Text) > min) Then txtMiddle.Text = txtNum1.Text End If If (CDbl(txtNum2.Text) < max) AndAlso (CDbl(txtNum2.Text) > min) Then txtMiddle.Text = txtNum2.Text End If If (CDbl(txtNum3.Text) < max) AndAlso (CDbl(txtNum3.Text) > min) Then txtMiddle.Text = txtNum3.Text End If End Sub EXERCISES 4.3 1. The price is $3.75 The price is $3.75 2. case 2 case 1 case 3 3. Mesozoic Era Paleozoic Era ? 4. Incorrect. At age 43, he was the youngest person elected president. Correct. He became president at age 42 when President McKinley was assassinated. © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 57 of 443) 5. The equation has no real solutions. The equation has two solutions. The equation has exactly one solution. 6. Hi Hi 7. Should have a Case clause before the 4th line. 8. Both Case clauses are invalid. The first one should be Case 3 To 10. The second one should have a comma instead of a semicolon. 9. Case nom = "Bob" should be Case "Bob" 10. In Case clause, h should be "h". 11. Logic error: >= "Peach" should be >= "PEACH". Syntax error: "ORANGE TO PEACH" should be "ORANGE" To "PEACH". 12. First Case clause should be Is < 10000 Second Case clause should be Case 10000 To 30000 13. Valid 14. Valid 15. Invalid 16. Invalid 17. Valid 19. Select Case a Case 1 txtOutput.Text = "one" Case Is > 5 txtOutput.Text = "two" End Select 20. Select Case a Case 1 lstOutput.Items.Add("lambs") lstOutput.Items.Add("eat") Case Is < 4 lstOutput.Items.Add("eat") Case 5, Is > 7 lstOutput.Items.Add("ivy") End Select 21. Select Case a Case 2 txtOutput.Text = "maybe" Case Is > 5 txtOutput.Text = "no" End Select 22. Select Case a Case 1, 3 a = 2 Case 2 a = 3 End Select © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. 18. Valid Instructor Solutions Manual (Page 58 of 443) 23. Private Sub btnDescribe_Click(...) Handles btnDescribe.Click Dim percent As Integer percent = CInt(txtPercent.Text) Select Case percent Case 0 To 30 txtOutput.Text = "Clear" Case 31 To 70 txtOutput.Text = "Partly cloudy" Case 71 To 99 txtOutput.Text = "Cloudy" Case 100 txtOutput.Text = "Overcast" Case Else txtOutput.Text = "Percentage must be between 0 and 100." End Select End Sub 24. Private Sub btnFind_Click(...) Handles btnFind.Click Dim callNumber As Integer callNumber = CInt(txtCallNum.Text) Select Case callNumber Case 100 To 199 txtLocation.Text = "basement" Case 200 To 500, Is > 900 txtLocation.Text = "main floor" Case 700 To 750 txtLocation.Text = "archives" Case 501 To 900 txtLocation.Text = "upper floor" Case Else MessageBox.Show("The call number must be greater than 100.", "Try Again") txtCallNum.Clear() txtCallNum.Focus() End Select End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 59 of 443) 25. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim shapeNum As Integer Dim radius, length, height, width As Double 'Input choice of shape and its dimensions '1. Circle 2. Parallelogram 3. Kite shapeNum = CInt(mtbSelection.Text) 'Mask is 0 Select Case shapeNum Case 1 radius = CDbl(InputBox("Input the radius of the circle: ")) txtArea.Text = CStr(3.141593 * radius ^ 2) Case 2 length = CDbl(InputBox("Input the length of the parallelogram: ")) height = CDbl(InputBox("Input the height of the parallelogram: ")) txtArea.Text = CStr(length * height) Case 3 length = CDbl(InputBox("Input the length of the kite: ")) width = CDbl(InputBox("Input the width of the kite: ")) txtArea.Text = CStr((length * width) / 2) Case Else MessageBox.Show("Your choice is not valid.", "Try Again.") mtbSelection.Clear() End Select mtbSelection.Focus() End Sub 26. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim a, b, c, x, totalRev, totalCost As Decimal a = CDec(txtMarRev.Text) b = CDec(txtMarCost.Text) c = CDec(txtFixedCost.Text) x = CDec(txtNumUnits.Text) totalRev = a * x totalCost = (b * x) + c Select Case (totalRev - totalCost) Case Is > 0 txtStatus.Text = "PROFIT" Case Is < 0 txtStatus.Text = "LOSS" Case 0 txtStatus.Text = "BREAK EVEN" End Select End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 60 of 443) 27. Private Sub btnAssign_Click(...) Handles btnAssign.Click Dim score As Integer, letterGrade As String score = CInt(txtNumericalGrade.Text) Select Case score Case 90 To 100 letterGrade = "A" Case 80 To 89 letterGrade = "B" Case 70 To 79 letterGrade = "C" Case 60 To 69 letterGrade = "D" Case 0 To 59 letterGrade = "F" Case Else letterGrade = "Invalid" End Select txtOutput.Text = letterGrade End Sub 28. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim num As Integer, totalCost As Decimal, cancelled As Boolean If IsNumeric(txtNumber.Text) Then num = CInt(txtNumber.Text) Select Case num Case Is < 10 cancelled = True Case Is < 21 totalCost = 500 * num Case Is < 31 totalCost = 450 * num Case Else totalCost = 400 * num End Select If cancelled Then txtTotalCost.Text = "Tour Cancelled" Else txtTotalCost.Text = totalCost.ToString("C") End If Else MessageBox.Show("You must enter a number.") End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 61 of 443) 29. Private Sub btnDescribe_Click(...) Handles btnDetermine.Click Dim amountRecovered, payment As Decimal amountRecovered = CDec(txtAmount.Text)) Select Case amountRecovered Case Is <= 75000 payment = 0.1D * amountRecovered Case Is <= 100000 payment = 7500 + 0.05D * (amountRecovered - 75000) Case Is > 100000 payment = 8750 + 0.01D * (amountRecovered - 100000) If payment > 50000 Then payment = 50000 End If End Select txtOutput.Text = payment.ToString("C") End Sub 30. Private Sub btnTranslate_Click(...) Handles btnTranslate.Click Dim abbrev As String 'Translate doctors' abbreviations abbrev = txtAbbreviation.Text 'Translate abbreviation into English Select Case abbrev Case "ac" txtOutput.Text = Chr(34) & abbrev & Chr(34) & " before meals" Case "ad lib" txtOutput.Text = Chr(34) & abbrev & Chr(34) & " freely as needed" Case "bid" txtOutput.Text = Chr(34) & abbrev & Chr(34) & " twice daily" Case "gtt" txtOutput.Text = Chr(34) & abbrev & Chr(34) & " a drop" Case "hs" txtOutput.Text = Chr(34) & abbrev & Chr(34) & " at bedtime" Case "qid" txtOutput.Text = Chr(34) & abbrev & Chr(34) & " four times a day" Case Else txtOutput.Text = "Abbreviation not known." End Select End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 62 of 443) 31. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim tin As String = mtbTIN.Text Dim finalDigit As String = tin.Substring(3, 1) Dim suffix As String Select Case finalDigit Case "1" suffix = " st" Case "2" suffix = " nd" Case "3" suffix = " rd" Case Else suffix = " th" End Select txtYear.Text = "20" & tin.Substring(0, 2) txtWeek.Text = tin.Substring(2, 2) & suffix End Sub 32. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim income, tax As Decimal income = CDec(txtIncome.Text) Select Case income Case Is < 9225 tax = CDec(0.1 * income) Case Is < 37450 tax = CDec(922.5 + 0.15 * (income - 9225)) Case Is < 90750 tax = CDec(4867.5 + 0.25 * (income - 37450)) Case Is < 189300 tax = CDec(17442.5 + 0.28 * (income - 90750)) Case Is < 411500 tax = CDec(43482.5 + 0.33 * (income - 189300)) Case Is < 413200 tax = CDec(43482.5 + 0.35 * (income - 411500)) Case Else tax = CDec(112683.5 + 0.396 * (income - 413200)) End Select txtTax.Text = tax.ToString("C") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 63 of 443) 33. Private Sub btnEvaluate_Click(...) Handles btnEvaluate.Click Dim amount, cost, costPerOzWithIncrease, costPerOzWithDiscount As Decimal Dim betterOffer As String amount = 18 cost = 9 costPerOzWithIncrease = cost / (1.5D * amount) costPerOzWithDiscount = (0.65D * cost) / amount txt50percentMore.Text = costPerOzWithIncrease.ToString("C4") txt35percentDiscount.Text = costPerOzWithDiscount.ToString("C4") Select Case costPerOzWithIncrease - costPerOzWithDiscount Case Is > 0 betterOffer = "35% discount" Case Is < 0 betterOffer = "50% more" Case Else betterOffer = "same value" End Select txtBetterOffer.Text = betterOffer End Sub 34. Private Sub btnEvaluate_Click(...) Handles btnEvaluate.Click Dim cost, costWithDoubleDiscount, costWithSingleDiscount As Decimal Dim betterOffer As String cost = 100 costWithDoubleDiscount = cost * 0.8D * 0.75D costWithSingleDiscount = cost * 0.6D txt50percentMore.Text = costWithDoubleDiscount.ToString("C") txt35percentDiscount.Text = costWithSingleDiscount.ToString("C") Select Case costWithDoubleDiscount - costWithSingleDiscount Case Is > 0 betterOffer = "single discount" Case Is < 0 betterOffer = "double discount" Case Else betterOffer = "same value" End Select txtBetterOffer.Text = betterOffer End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 64 of 443) 35. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim pres, state, trivia, whichBush As String pres = txtLastName.Text Select Case pres.ToUpper Case "CARTER" state = "Georgia" trivia = "The only soft drink served in the Carter " & "White House was Coca-Cola." Case "REAGAN" state = "California" trivia = "His secret service code name was Rawhide." Case "BUSH" state = "Texas" whichBush = InputBox("Are his middle initials HW or W?") Select Case whichBush.ToUpper Case "HW" trivia = "He celebrated his 85th birthday by parachuting " & "out of an airplane." Case "W" trivia = "He once owned the Texas Rangers baseball team." End Select Case "CLINTON" state = "Arkansas" trivia = "In college he did a good imitation of Elvis Presley." Case "OBAMA" state = "Illinois" trivia = "He was the eighth left-handed president." Case Else state = "" trivia = "" End Select If state <> "" Then lstOutput.Items.Clear() lstOutput.Items.Add("President " & pres & "'s" & " home state was " & state & ".") lstOutput.Items.Add(trivia) End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 65 of 443) 36. Private Sub btnHumor_Click(...) Handles btnHumor.Click Dim num As Integer Dim sentence As String = "" num = CInt(mtbNumber.Text) If (num >= 1) And (num <= 3) Then Select Case num Case 1 sentence = "I can resist everything except temptation." Case 2 sentence = "I just heard from Bill Bailey. He's not coming home." Case 3 sentence = "I have enough money to last the rest of my life," & " unless I buy something." End Select txtOutput.Text = sentence End If mtbNumber.Clear() mtbNumber.Focus() End Sub Private Sub btnInsult_Click(...) Handles btnInsult.Click Dim num As Integer Dim sentence As String = "" num = CInt(mtbNumber.Text) If (num >= 1) And (num <= 3) Then Select Case num Case 1 sentence = "How much would you charge to haunt a house?" Case 2 sentence = "I bet you have no more friends than an alarm clock." Case 3 sentence = "When your IQ rises to 30, sell." End Select txtOutput.Text = sentence End If mtbNumber.Clear() mtbNumber.Focus() End Sub EXERCISES 4.4 1. The word "Income" becomes the caption embedded in the top of GroupBox1. 2. The CheckBox1 check box becomes (or remains) checked. 3. The CheckBox1 check box becomes (or remains) unchecked. 4. The word "Vanilla" becomes the caption following the check box with V as the access key for toggling the check box. © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 66 of 443) 5. The radio button becomes (or remains) unselected. 6. The selected item in the list box is placed into the text box. 7. The radio button’s caption becomes "Clear All" when the Alt key is pressed. 8. The radio button becomes (or remains) selected. 9. RadioButton1.Text = "Yes" 10. CheckBox1.Checked = False 11. CheckBox1.Checked = True 12. RadioButton2.Checked = False 13. RadioButton2 is on and RadioButton1 is off. 14. Neither RadioButton1 nor RadioButton2 are on. 15. Yes 17. Private Sub CheckedChanged(...) Handles _ radDeluxe.CheckedChanged, radSuper.CheckedChanged, chkUpgradedVideo.CheckedChanged, chkModem.CheckedChanged, chkMemory.CheckedChanged If radDeluxe.Checked Or radSuper.Checked Then Dim cost As Decimal = 0 'Add amounts to the cost based upon selections. If radDeluxe.Checked Then cost += 1000 Else 'Super model cost += 1500 End If If chkUpgradedVideo.Checked Then cost += 200 End If If chkModem.Checked Then cost += 30 End If If chkMemory.Checked Then cost += 120 End If txtTotalCost.Text = cost.ToString("C") Else MessageBox.Show("You must first select a model!") End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 67 of 443) 18. Private Sub lstTo_SelectedIndexChanged(...) Handles lstTo.SelectedIndexChanged txtFlight.Clear() If lstFrom.Text = lstTo.Text Then MessageBox.Show("The arrival city must differ from the departure city.") lstTo.Text = Nothing End If End Sub Private Sub lstFrom_SelectedIndexChanged(...) Handles _ lstFrom.SelectedIndexChanged txtFlight.Clear() If lstFrom.Text = lstTo.Text Then MessageBox.Show("The departure city must differ from the arrival city.") lstFrom.Text = Nothing End If End Sub Private Sub btnBook_Click(...) Handles btnBook.Click txtFlight.Clear() If lstFrom.Text <> "" And lstTo.Text <> "" Then txtFlight.Text = "You are flying from " & lstFrom.Text & " to " & lstTo.Text & "." ElseIf lstFrom.Text = "" Then If lstTo.Text <> "" Then MessageBox.Show("You must select a departure city.") Else MessageBox.Show("You must select a departure city and an arrival city.") End If Else MessageBox.Show("You must select an arrival city.") End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 68 of 443) 19. Private Sub btnVote_Click(...) Handles btnVote.Click If radCandidate1.Checked Then txtVote.Text = "You voted for Kennedy." ElseIf radCandidate2.Checked Then txtVote.Text = "You voted for Nixon." Else txtVote.Text = "You voted for neither." End If End Sub Private Sub btnClear_Click(...) Handles btnClear.Click radCandidate1.Checked = False radCandidate2.Checked = False End Sub 20. Const INAUGURATION_DAY As Date = #1/20/2017# Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim dateOfBirth As Date = CDate(mtbDOB.Text) Dim oldEnough As Boolean = False If dateOfBirth.AddYears(35) <= INAUGURATION_DAY Then oldEnough = True End If If radNbcYes.Checked And rad14YrsYes.Checked And oldEnough Then txtOutput.Text = "You are eligible to run for president in 2016." Else txtOutput.Text = "You are not eligible to run for president in 2016." End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 69 of 443) 21. Private Sub btnRecord_Click(...) Handles btnRecord.Click Dim majorSelected As Boolean Dim yearSelected As Boolean If lstMajors.Text = "" Then majorSelected = False Else majorSelected = True End If If (radFrosh.Checked Or radSoph.Checked Or radJunior.Checked Or radSenior.Checked) Then yearSelected = True Else yearSelected = False End If If majorSelected And yearSelected Then MessageBox.Show("Information Processed") ElseIf Not majorSelected Then If Not yearSelected Then MessageBox.Show("You must select a Major and a Year.") Else MessageBox.Show("You must select a Major.") End If Else MessageBox.Show("You must select a Year.") End If End Sub 22.(a) Private Sub btnRecord_Click(...) Handles btnRecord.Click If chkOptIn.Checked Then txtOutput.Text = "You will be enrolled in the retirement plan." Else txtOutput.Text = "You have opted out of the retirement plan." End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 70 of 443) 22.(b) Private Sub btnRecord_Click(...) Handles btnRecord.Click If radYes.Checked Or radNo.Checked Then If radYes.Checked Then txtOutput.Text = "You will be enrolled in the retirement plan." End If If radNo.Checked Then txtOutput.Text = "You have opted out of the retirement plan." End If Else MessageBox.Show("You must make a selection.") End If End Sub 23. Private Sub CheckedChanged(...) Handles _ chkSenior.CheckedChanged, chkBlind.CheckedChanged, chkSpouse.CheckedChanged, chkSpouseBlind.CheckedChanged Dim count As Integer = 0 If chkSenior.Checked Then count += 1 End If If chkBlind.Checked Then count += 1 End If If chkSpouse.Checked Then count += 1 End If If chkSpouseBlind.Checked Then count += 1 End If txtOutput.Text = CStr(count) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 71 of 443) 24. Private Sub btnApply_Click(...) Handles btnApply.Click If radFwhite.Checked Then lblVB.ForeColor = Color.White End If If radFyellow.Checked Then lblVB.ForeColor = Color.Yellow End If If radFred.Checked Then lblVB.ForeColor = Color.Red End If If radFblue.Checked Then lblVB.ForeColor = Color.Blue End If If radBwhite.Checked Then lblVB.BackColor = Color.White End If If radByellow.Checked Then lblVB.BackColor = Color.Yellow End If If radBred.Checked Then lblVB.BackColor = Color.Red End If If radBblue.Checked Then lblVB.BackColor = Color.Blue End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 72 of 443) 25. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim fee As Decimal = 0 If radAdult.Checked Or radSenior.Checked Then Dim numExtras As Integer = 0 If chkTennis.Checked Then numExtras += 1 End If If chkLocker.Checked Then numExtras += 1 End If If chkLaundry.Checked Then numExtras += 1 End If If radAdult.Checked Then fee = 100 + numExtras * 25 Else fee = 75 + numExtras * 25 End If txtFee.Text = fee.ToString("C") Else MessageBox.Show("You must select a membership category.") End If End Sub 26. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Const COST_16GB As Decimal = 5.99D Const COST_32GB As Decimal = 9.99D Dim quantity As Integer = CInt(txtQuantity.Text) Dim cost, totalCost As Decimal If rad16GB.Checked Then cost = COST_16GB Else cost = COST_32GB End If Select Case quantity Case Is < 25 totalCost = quantity * cost Case 25 To 49 totalCost = quantity * (0.9D * cost) Case 50 To 99 totalCost = quantity * (0.85D * cost) Case Else totalCost = quantity * (0.8D * cost) End Select txtCost.Text = totalCost.ToString("C") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 73 of 443) 27. Private Sub btnCompute_Click() Handles btnCompute.Click Dim ageOnPlanet, ageInEarthDays, ageInEarthYears As Double Dim dt As Date = CDate(mtbDayOfBirth.Text) Dim nom As String, noResponse As Boolean = False txtToday.Text = Today.ToString("D") ageInEarthDays = DateDiff(DateInterval.Day, dt, Today) ageInEarthYears = ageInEarthDays / 365.26 If radMercury.Checked Then ageOnPlanet = ageInEarthDays / 88 nom = " Mercurian " ElseIf radVenus.Checked Then ageOnPlanet = ageInEarthDays / 224.7 nom = " Venusian " ElseIf radEarth.Checked Then ageOnPlanet = ageInEarthYears nom = " Earth " ElseIf radMars.Checked Then ageOnPlanet = ageInEarthDays / 687 nom = " Martian " ElseIf radJupiter.Checked Then ageOnPlanet = ageInEarthYears / 11.86 nom = " Jovian " ElseIf radSaturn.Checked Then ageOnPlanet = ageInEarthYears / 29.46 nom = " Saturian " ElseIf radUranus.Checked Then ageOnPlanet = ageInEarthYears / 84.07 nom = " Uranian " ElseIf radNeptune.Checked Then ageOnPlanet = ageInEarthYears / 164.8 nom = " Neptunian " Else noResponse = True End If If noResponse Then MessageBox.Show("You must select a planet.") Else txtAgeInDays.Text = ageOnPlanet.ToString("N1") & nom & "years" End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 74 of 443) 28. Private Sub btnShow_Click(...) Handles btnShow.Click Dim state, category As String If radCalifornia.Checked Then state = "CALIFORNIA" End If If radIndiana.Checked Then state = "INDIANA" End If If radMississippi.Checked Then state = "MISSISSIPPI" End If If radNewYork.Checked Then state = "NEW YORK" End If If radFlower.Checked Then category = "FLOWER" End If If radNickname.Checked Then category = "NICKNAME" End If If radMotto.Checked Then category = "MOTTO" End If Select Case state Case "CALIFORNIA" Select Case category Case "FLOWER" txtOutput.Text = "Golden poppy" Case "NICKNAME" txtOutput.Text = "Golden State" Case "MOTTO" txtOutput.Text = "Eureka" Case Else txtOutput.Text = "No data for category" End Select Case "INDIANA" Select Case category Case "FLOWER" txtOutput.Text = "Peony" Case "NICKNAME" txtOutput.Text = "Hoosier State" Case "MOTTO" txtOutput.Text = "Crossroads of America" Case Else txtOutput.Text = "No data for category" End Select Case "MISSISSIPPI" Select Case category Case "FLOWER" txtOutput.Text = "Magnolia" Case "NICKNAME" txtOutput.Text = "Magnolia State" Case "MOTTO" txtOutput.Text = "By valor and arms" Case Else txtOutput.Text = "No data for category" End Select Case "NEW YORK" Select Case category Case "FLOWER" © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 75 of 443) txtOutput.Text = "Rose" Case "NICKNAME" txtOutput.Text = "Empire State" Case "MOTTO" txtOutput.Text = "Ever upward" Case Else txtOutput.Text = "No data for category" End Select Case Else txtOutput.Text = "No data for state" End Select End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 76 of 443) 29. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click 'Compound interest Dim intRate As Decimal 'interest per period Dim n As Integer 'number of interest periods If (lstRates.SelectedIndex <> -1) AndAlso (lstCompounding.SelectedIndex <> -1) Then Select Case lstRates.Text Case "2%" intRate = 0.02D Case "2.5%" intRate = 0.025D Case "3%" intRate = 0.03D Case "3.5%" intRate = 0.035D Case "4%" intRate = 0.04D End Select Select Case lstCompounding.Text Case "annually" n = 1 Case "semi-annually" n = 2 Case "quarterly" n = 4 Case "monthly" n = 12 Case "weekly" n = 52 End Select txtAmount.Text = (10000 * (1 + intRate / n) ^ (5 * n)).ToString("C") Else MessageBox.Show("You must select an item from each list box.") End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 77 of 443) 30. 'Display "Hello" in different colors and languages Private Sub radRed_CheckedChanged(...) Handles radRed.CheckedChanged lblHello.ForeColor = Color.Red End Sub Private Sub radBlue_CheckedChanged(...) Handles radBlue.CheckedChanged lblHello.ForeColor = Color.Blue End Sub Private Sub radGreen_CheckedChanged(...) Handles radGreen.CheckedChanged lblHello.ForeColor = Color.Green End Sub Private Sub radEnglish_CheckedChanged(...) Handles radEnglish.CheckedChanged lblHello.Text = "Hello" End Sub Private Sub radFrench_CheckedChanged(...) Handles radFrench.CheckedChanged lblHello.Text = "Bonjour" End Sub Private Sub radItalian_CheckedChanged(...) Handles radItalian.CheckedChanged lblHello.Text = "Chao" End Sub 31. Private Sub lstProperties_SelectedIndexChanged(...) Handles _ lstProperties.SelectedIndexChanged 'Railroad properties in Monopoly If lstProperties.Text = "Short Line" Then MessageBox.Show("Short Line is a bus company.", "Correct") Else MessageBox.Show("It is an actual railroad.", "Incorrect") End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 78 of 443) 32. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click If (lstPerson.SelectedIndex <> -1) AndAlso (lstWorkplace.SelectedIndex <> -1) Then Select Case lstPerson.Text Case "Clark Kent" If CStr(lstWorkplace.SelectedItem) = "Daily Planet" Then txtAnswer.Text = "Correct" Else txtAnswer.Text = "Incorrect" End If Case "Rick Blaine" If CStr(lstWorkplace.SelectedItem) = "Rick's American Cafe" Then txtAnswer.Text = "Correct" Else txtAnswer.Text = "Incorrect" End If Case "Willie Wonka" If CStr(lstWorkplace.SelectedItem) = "Chocolate Factory" Then txtAnswer.Text = "Correct" Else txtAnswer.Text = "Incorrect" End If Case "Bruce Wayne" If CStr(lstWorkplace.SelectedItem) = "Wayne Enterprises" Then txtAnswer.Text = "Correct" Else txtAnswer.Text = "Incorrect" End If Case "Peter Parker" If CStr(lstWorkplace.SelectedItem) = "Daily Bugle" Then txtAnswer.Text = "Correct" Else txtAnswer.Text = "Incorrect" End If End Select Else MessageBox.Show("You must select an item from each list.", "Error") End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 79 of 443) CHAPTER 4 PROGRAMMING PROJECTS 1. Private Sub btnDisplayRates_Click(...) Handles btnDisplayRates.Click 'Display rental rates for Eddie's Equipment Rental lstRates.Items.Clear() lstRates.Items.Add("Price of Equipment Half-day Full-day") lstRates.Items.Add("1. Rug cleaner $16.00 $24.00") lstRates.Items.Add("2. Lawn mower $12.00 $18.00") lstRates.Items.Add("3. Paint sprayer $20.00 $30.00") End Sub Private Sub btnDispayBill_Click(...) Handles btnDispayBill.Click Dim num As Integer Dim duration = "", item = "" Dim cost As Decimal 'Display a bill for Eddie's Equipment Rental lstBill.Items.Clear() num = CInt(mtbItemNum.Text) duration = mtbDuration.Text 'Compute cost depending on item and duration Select Case num Case 1 item = "Rug cleaner" cost = 16 Case 2 item = "Lawn mower" cost = 12 Case 3 item = "Paint sprayer" cost = 20 Case Else item = "" MessageBox.Show("Not a valid item.") End Select Select Case duration Case "H", "h" duration = "(Half day rental)" Case "F", "f" duration = "(Full day rental)" cost = cost * 1.5D Case Else duration = "" MessageBox.Show("Not a valid duration.") End Select If (item <> "") And (duration <> "") Then 'Display the bill lstBill.Items.Clear() lstBill.Items.Add("Receipt from Eddie's Equipment Rental") lstBill.Items.Add("") lstBill.Items.Add(item & ": " & cost.ToString("C") & " " & duration) lstBill.Items.Add("Deposit: " & (30).ToString("C") lstBill.Items.Add("") lstBill.Items.Add("Total: " & (cost + 30)C End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 80 of 443) 2. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim food, level As String Dim calories, fat, pct As Double 'Determine if food meets AHA requirement for fat '(less than 30% of calories from fat). lstOutput.Items.Clear() food = txtFood.Text calories = CDbl(txtCalories.Text) fat = CDbl(txtFat.Text) pct = fat * (9 / calories) lstOutput.Items.Add(food & " contains " & pct.ToString("P") & " calories from fat") If pct > 0.3 Then level = "exceeds" Else level = "meets" End If lstOutput.Items.Add(level & " AHA recommendation") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 81 of 443) 3. Private Sub btnAnalyze_Click(...) Handles btnAnalyze.Click Dim p, a As Decimal, n As Integer Dim r, payment, totalInterest As Decimal 'Analyze a Mortgage p = CDbl(txtAmount.Text) 'principal a = CDbl(txtIntRate.Text) 'annual interest rate (e.g. 6) n = CInt(txtduration.Text) 'duration of loan If p <= 0 Then MessageBox.Show("Loan amount must be greater than zero") txtAmount.Focus() ElseIf a <= 0 Then MessageBox.Show("Annual interest rate must be greater than zero") txtIntRate.Focus() ElseIf n <= 0 Then MessageBox.Show("Duration of loan must be greater than zero") Else If a < 1 Then 'Assume that the user has entered interest rate 'as a decimal value rather than a percent. 'Redisplay interest as a percentage txtIntRate.Text = Str(100 * a) Else 'Convert percentage to decimal value a = a / 100 End If r = a / 12 'monthly interest rate payment = CDec(p * r / (1 - (1 + r) ^ (-n))) totalInterest = n * payment - p txtPayment.Text = payment.ToString("C") txtTotalInt.Text = totalInterest.ToString("C") End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 82 of 443) 4. Private Sub btnFind_Click(...) Handles btnFind.Click 'Determine roots of a quadratic equation Dim a, b, c As Double 'Input coefficients to quadratic equation. txtSolutions.Clear() a = CDbl(txtA.Text) b = CDbl(txtB.Text) c = CDbl(txtC.Text) If a = 0 Then MessageBox.Show("Give a non-zero value for 'a'.", "Error") txtA.Clear() Else Dim determinant As Double determinant = b ^ 2 - 4 * a * c Select Case determinant Case Is < 0 txtSolutions.Text = "No real solutions." Case Is = 0 txtSolutions.Text = CStr(-b / (2 * a)) Case Else txtSolutions.Text = (-b + Math.Sqrt(determinant)) / (2 * a) & " and " & (-b - Math.Sqrt(determinant)) / (2 * a) End Select End If End Sub 5. Private Sub chkBurgers_CheckedChanged(...) Handles chkBurgers.CheckedChanged If chkBurgers.Checked = True Then grpBurgers.Visible = True Else grpBurgers.Visible = False End If End Sub Private Sub chkFries_CheckedChanged(...) Handles chkFries.CheckedChanged If chkFries.Checked = True Then grpFries.Visible = True Else grpFries.Visible = False End If End Sub Private Sub chkDrinks_CheckedChanged(...) Handles chkDrinks.CheckedChanged If chkDrinks.Checked = True Then grpDrinks.Visible = True Else grpDrinks.Visible = False End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 83 of 443) Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim totalCost As Decimal If chkBurgers.Checked Then 'Add cost of burger If radRegular.Checked Then totalCost += 4.19D End If If radCheese.Checked Then totalCost += 4.79D End If If radBacon.Checked Then totalCost += 4.79D End If If radBoth.Checked Then totalCost += 5.39D End If End If If chkFries.Checked Then 'Add cost of fries If radSmall.Checked Then totalCost += 2.39D End If If radMedium.Checked Then totalCost += 3.09D End If If radLarge.Checked Then totalCost += 4.99D End If End If If chkDrinks.Checked Then 'Add cost of drink If radSoda.Checked Then totalCost += 1.69D End If If radWater.Checked Then totalCost += 1.49D End If End If txtCost.Text = totalCost.ToString("C") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 84 of 443) 6. Private Sub txtGPA_Leave(...) Handles txtGPA.Leave txtGPAPoints.Text = "[" & Str(20 * CDbl(txtGPA.Text)) & "]" End Sub Private Sub btnCalculate_Click(...s) Handles btnCalculate.Click 'Calculate an applicants score based on the criteria shown in the form 'Display the score and whether student is admitted Dim sumOfTopHalf, sumOfBottomHalf As Double Dim gpaPoints, satPoints, hsQualityPoints, curriculumPoints As Double gpaPoints = 20 * CDbl(txtGPA.Text) 'Calculate satPoints If radSAT930.Checked Then satPoints = 6 ElseIf radSAT1010.Checked Then satPoints = 10 ElseIf radSAT1200.Checked Then satPoints = 11 ElseIf radSAT1360.Checked Then satPoints = 12 Else satPoints = 0 End If 'Calculate hsQualityPoints If radHS1.Checked Then hsQualityPoints = 2 ElseIf radHS2.Checked Then hsQualityPoints = 4 ElseIf radHS3.Checked Then hsQualityPoints = 6 ElseIf radHS4.Checked Then hsQualityPoints = 8 ElseIf radHS5.Checked Then hsQualityPoints = 10 Else hsQualityPoints = 0 End If 'Calculate curriculumPoints If radCurNeg2.Checked Then curriculumPoints = -4 ElseIf radCurNeg1.Checked Then curriculumPoints = -2 ElseIf radCur1.Checked Then curriculumPoints = 2 ElseIf radCur2.Checked Then curriculumPoints = 4 ElseIf radCur3.Checked Then curriculumPoints = 6 ElseIf radCur4.Checked Then curriculumPoints = 8 Else curriculumPoints = 0 End If sumOfTopHalf = gpaPoints + satPoints + hsQualityPoints + curriculumPoints © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 85 of 443) 'Now for bottom half Dim geographyPoints, alumniPoints, essayPoints, leadershipPoints, miscPoints As Double 'Calculate geographyPoints Dim geoTotal As Integer geoTotal = 0 If chkGeoStateRes.Checked Then geoTotal = geoTotal + 10 End If If chkGeoUnderCounty.Checked Then geoTotal = geoTotal + 6 End If If chkGeoUnderState.Checked Then geoTotal = geoTotal + 2 End If geographyPoints = geoTotal 'Calculate alumniPoints If chkAlumLegacy.Checked Then alumniPoints = 4 End If If chkAlumOther.Checked Then alumniPoints += 1 End If 'Calculate essayPoints If radEssayVG.Checked Then essayPoints = 1 ElseIf radEssayE.Checked Then essayPoints = 2 ElseIf radEssayO.Checked Then essayPoints = 3 Else essayPoints = 0 End If 'Calculate leadershipPoints leadershipPoints = 0 If chkLeaderState.Checked Then leadershipPoints += 1 End If If chkLeaderRegional.Checked Then leadershipPoints += 2 End If If chkLeaderNational.Checked Then leadershipPoints += 5 End If 'Calculate miscPoints If radMiscSocDisadv.Checked Or radMiscAthlete.Checked Or radMiscDiscretion.Checked Then miscPoints = 20 ElseIf radMiscMaleNurse.Checked Then miscPoints = 5 Else miscPoints = 0 End If © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 86 of 443) 'Calculate the number of points for the bottom half; number at most 40 Dim bottomTotal As Double = geographyPoints + alumniPoints + essayPoints + leadershipPoints + miscPoints If bottomTotal < 40 Then sumOfBottomHalf = bottomTotal Else sumOfBottomHalf = 40 End If Dim score As Double = sumOfTopHalf + sumOfBottomHalf lstResults.Items.Clear() lstResults.Items.Add("Total Score: " & score) lstResults.Items.Add("") If (score >= 100) Then lstResults.Items.Add("Admitted") Else lstResults.Items.Add("Rejected") End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 87 of 443) CHAPTER 5 EXERCISES 5.1 1. 59 2. You can park about 500 cars. 3. The population will double in 24 years. 5. 27 is an odd number. 8. 15 5 6. Dec 9. age before beauty 4. 3 7. Your state income tax is $150.00. 10. A average 11. The function header should end with "As String", not "As Integer". 12. "len =" should not appear in the Return statement. The last line inside the Function procedure should be Return 2 * w.Length. 13. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click radius = CDbl(txtRadius.Text) height = CDbl(txtHeight.Text) txtAmount.Text = TinArea(radius, height) & " square centimeters" End Sub Function TinArea(radius As Double, ht As Double) As Double 'Calculate surface area of a cylindrical can. Return 6.283 * (radius ^ 2 + radius * ht) End Function 14. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim weight As Double = CDbl(txtWeight.Text) Dim height As Double = CDbl(txtHeight.Text) txtBMI.Text = CStr(BMI(weight, height)) End Sub Function BMI(w As Double, h As Double) As Double Return Math.Round((703 * w) / (h ^ 2)) End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 88 of 443) 15. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim speed As Double = CDbl(txtSpeed.Text) If Category(speed) = "" Then txtOutcome.Text = "Not a hurricane." Else txtOutcome.Text = "Category " & Category(speed) & " hurricane." End If End Sub Function Category(speed As Double) As String If speed < 74 Then Return "" ElseIf speed <= 95 Then Return "One" ElseIf speed <= 110 Then Return "Two" ElseIf speed <= 130 Then Return "Three" ElseIf speed <= 155 Then Return "Four" Else Return "Five" End If End Function 16. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click 'Calculate exercise heart rate Dim age As Integer, restRate As Double age = CInt(txtAge.Text) restRate = CDbl(txtRestHR.Text) txtTHR.Text = CStr(THR(age, restRate)) End Sub Function THR(age As Integer, restRate As Double) As Double Return (((220 - age) - restRate) * 0.6) + restRate End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 89 of 443) 17. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim popcorn, butter, bucket, price As Decimal 'amount in dollars popcorn = CDec(txtPopcorn.Text) bucket = CDec(txtBucket.Text) butter = CDec(txtButter.Text) price = CDec(txtPrice.Text) txtProfit.Text = (Profit(popcorn, butter, bucket, price)).ToString("C") End Sub Function Profit(popcorn As Decimal, butter As Decimal , bucket As Decimal, price As Decimal) As Decimal 'Calculate the profit on a bucket of popcorn Return price - (popcorn + butter + bucket) End Function 18. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim midterm, final As Double midterm = CDbl(txtMidTerm.Text) final = CDbl(txtFinal.Text) txtSemesterGrade.Text = SemesterGrade(midterm, final) End Sub Function SemesterGrade(midTerm As Double, final As Double) As String Dim score As Double = (midTerm + 2 * final) / 3 score = Ceil(score) Select Case score Case Is >= 90 Return "A" Case Is >= 80 Return "B" Case Is >= 70 Return "C" Case Is >= 60 Return "D" Case Else Return "F" End Select End Function Function Ceil(num As Double) As Double Return -Int(-num) End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 90 of 443) 19. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim weight As Double weight = CDbl(txtWeight.Text) txtOutput.Text = (Cost(weight)).ToString("C") End Sub Function Ceil(x As Double) As Double Return -Int(-x) End Function Function Cost(weight As Double) As Double Return 0.05 + 0.1 * Ceil(weight - 1) End Function 20. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim x, y, z As Double x = CDbl(txtNum1.Text) y = CDbl(txtNum2.Text) z = CDbl(txtNum3.Text) txtAverage.Text = CStr(Average(x, y, z)) End Sub Function Average(x As Double, y As Double, z As Double) As Double Return ((x + y + z) / 3) End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 91 of 443) 21. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim x, y, z As Double x = CDbl(txtNum1.Text) y = CDbl(txtNum2.Text) z = CDbl(txtNum3.Text) txtMaximum.Text = CStr(Maximum(x, y, z)) End Sub Function Maximum(x As Double, y As Double, z As Double) As Double Dim max As Double max = x If y > max Then max = y End If If z > max Then max = z End If Return max End Function 22. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim x, y, z As Double x = CDbl(txtNum1.Text) y = CDbl(txtNum2.Text) z = CDbl(txtNum3.Text) txtMinimum.Text = CStr(Minimum(x, y, z)) End Sub Function Minimum(x As Double, y As Double, z As Double) As Double Dim min As Double min = x If y < min Then min = y End If If z < min Then min = z End If Return min End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 92 of 443) 23. Private Sub btnAddressNGreet_Click(...) Handles btnAddressNGreet.Click Dim name As String name = txtName.Text lstOutput.Items.Add("The Honorable " & name) lstOutput.Items.Add("United States Senate") lstOutput.Items.Add("Washington, DC 20001") lstOutput.Items.Add("") lstOutput.Items.Add("Dear Senator " & LastName(name) & ",") End Sub Function LastName(name As String) As String Dim spacePos As Integer spacePos = name.IndexOf(" ") Return name.Substring(spacePos + 1) End Function 24. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click 'Display monthly savings account balances. Dim balance, amt As Decimal lstBalance.Items.Clear() amt = CDec(txtAmount.Text) balance = amt lstBalance.Items.Add("Month 1: " & balance.ToString("C")) balance = NewBalance(balance, amt) lstBalance.Items.Add("Month 2: " & balance.ToString("C")) balance = NewBalance(balance, amt) lstBalance.Items.Add("Month 3: " & balance.ToString("C")) balance = NewBalance(balance, amt) lstBalance.Items.Add("Month 4: " & balance.ToString("C")) End Sub Function NewBalance(oldBal As Decimal, amt As Decimal) As Decimal 'Compute the monthly balance in a 6% interest acct. w/ amt added ea. mo. Return (1.005D * oldBal) + amt End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 93 of 443) 25. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click If IsLeapYear(CInt(mtbYear.Text)) Then 'mask is 0000 txtOutput.Text = mtbYear.Text & " is a leap year." Else txtOutput.Text = mtbYear.Text & " is not a leap year." End If End Sub Function IsLeapYear(yr As Integer) As Boolean Dim date1 As Date = CDate("#1/1/" & yr & "#") Dim date2 As Date = CDate("#1/1/" & (yr + 1) & "#") If DateDiff(DateInterval.Day, date1, date2) = 366 Then Return True Else Return False End If End Function 26. Private Sub btnDisplay_Click(...) Handles btnDetermine.Click Dim d As Date = CDate(mtbDate.Text) txtOutput.Text = DayOfWeek(d) End Sub Function DayOfWeek(d As Date) As String Dim str As String = FormatDateTime(d, DateFormat.LongDate) Dim n As Integer = str.IndexOf(","c) Return str.Substring(0, n) End Function 27. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click 'College tuition Dim resident As Boolean = False, undergraduate As Boolean = False Dim numCredits As Integer If IsNumeric(txtNumCredits.Text) Then numCredits = CInt(txtNumCredits.Text) If radYes.Checked Then resident = True End If If radUndergraduate.Checked Then undergraduate = True End If txtTuition.Text = (CalculateTuition(numCredits, resident, undergraduate)).ToString("C") Else MessageBox.Show("You must enter the number of credits.", "Missing Input") End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 94 of 443) Function CalculateCostPerCredit(resident As Boolean, undergraduate As Boolean) As Decimal If resident Then If undergraduate Then Return 90 Else Return 110 End If Else If undergraduate Then Return 150 Else Return 180 End If End If End Function Function CalculateTuition(numCredits As Integer, resident As Boolean, undergraduate As Boolean) As Decimal Return numCredits * CalculateCostPerCredit(resident, undergraduate) End Function 28. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click 'Determine cost to rent a cabin Dim resident As Boolean, numDays As Integer If radYes.Checked Then resident = True ElseIf radNo.Checked = True Then resident = False Else MessageBox.Show("You must select one of the radio buttons.") End If numDays = CInt(txtNumDays.Text) txtCost.Text = (CalculateCost(resident, numDays)).ToString("C") End Sub Function CalculateCost(resident As Boolean, numDays As Integer) As Decimal Dim cost As Decimal If resident Then If numDays <= 6 Then cost = 65 * numDays Else cost = (65 * 6) + (50 * (numDays - 6)) End If End If If Not resident Then cost = 75 * numDays End If Return cost End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 95 of 443) 29. Function Embed(strVar1 As String, strVar2 As String, n As Integer) As String If (n < 0) OrElse (n > strVar1.Length) Then MessageBox.Show("Task cannot be completed.") Exit Function End If Dim strVar3 As String = strVar1.Substring(0, n) Dim strVar4 As String = strVar1.Substring(n) Return strVar3 & strVar2 & strVar4 End Function 30. Function Eliminate(strVar As String, n As Integer, m As Integer) As String If (n < 0) OrElse (m < 0) OrElse ((m + n) > strVar.Length) Then MessageBox.Show("Task cannot be completed.") Exit Function End If Dim strVar1 As String = strVar.Substring(0, n) Dim strVar2 As String = strVar.Substring(m + n) Return strVar1 & strVar2 End Function EXERCISES 5.2 1. 88 keys on a piano 2. Call me Ishmael. 3. You look dashing in blue. 4. 144 items in a gross 5. 1440 minutes in a day 6. The number of U.S. Senators is 100 7. Why do clocks run clockwise? Because they were invented in the northern hemisphere where sundials go clockwise. 8. The answer is 9W. What is the question? Do you spell your name with a V, Mr. Wagner? 9. It was the best of times. It was the worst of times. 11. divorced beheaded died divorced beheaded survived 13. 24 blackbirds baked in a pie. 10. 168 hours in a week 76 trombones in the big parade 12. President Bush is a graduate of Yale. President Obama is a graduate of Columbia. 14. Keep cool, but don't freeze. Source: A jar of mayonnaise. 15. The first 6 letters are Visual. 16. Answers will vary. 17. Cost: $250.00 Shipping cost: $15.00 Total cost: $265.00 18. Visual Basic 19. You passed with ©a2017 grade of 92. 20. twentieth century Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 96 of 443) 21. There is a parameter in the Sub procedure, but no argument in the statement calling the Sub procedure. 22. The arguments of the Sub procedure call are out of order. The Double variable number should be first, since the Double parameter in the Sub procedure header is first. 23. Since Handles is a keyword, it cannot be used as the name of a Sub procedure. 24. The Sub procedure Tea() declaration has no parameter to match the argument num in the calling statement. 25. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim num As Integer = 7 Lucky(num) End Sub Sub Lucky(num As Integer) txtOutput.Text = num & " is a lucky number." End Sub 26. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click 'Greet a friend Dim name As String = "Jack" Greet(name) End Sub Sub Greet(name As String) 'Display greeting txtOutput.Text = "Hi, " & name End Sub 27. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Tallest("redwood", 362) Tallest("pine", 223) End Sub Sub Tallest(tree As String, ht As Double) lstBox.Items.Add("The tallest " & tree & " tree in the U.S. is " & ht & " feet.") End Sub 28. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click 'Display information about cities. lstOutput.Items.Clear DisplayData("San Jose", 81349) DisplayData("Hartford", 28931) End Sub Sub DisplayData(city As String, householdIncome As Decimal) 'Display city information lstOutput.Items.Add("In 2012, the average salary for " & city & " was " & householdIncome.ToString("C0") & ".") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 97 of 443) 29. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click DisplayHeader() Majors(0.146, "business") Majors(0.035, "computer science") End Sub Sub DisplayHeader() Dim phrase As String phrase = "Intended majors of freshmen in 2014:" lstOutput.Items.Add(phrase) End Sub Sub Majors(percentOfStudents As Double, field As String) 'Display the information about the major lstOutput.Items.Add(field & ": " & percentOfStudents.ToString("P")) End Sub 30. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim dt As Date = CDate(mtbDOB.Text) lstOutput.Items.Clear() AgeInYears(dt) AgeInDays(dt) End Sub Sub AgeInYears(dt As Date) 'DateDiff(DateInterval.Year, d1, d2) uses only the year 'parts of the two dates in its computation. Dim numYears As Integer = CInt(DateDiff(DateInterval.Year, dt1, dt2)) If dt1.AddYears(numYears) > dt2 Then numYears = numYears - 1 End If lstOutput.Items.Add("You are " & numYears & " years old.") End Sub Sub AgeInDays(dt As Date) Dim numDays As Double = DateDiff(DateInterval.Day, dt, Today) lstOutput.Items.Add("You are " & numDays.ToString("N0") & " days old.") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 98 of 443) 31. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click 'Favorite number Dim num As Double lstOutput.Items.Clear() num = CDbl(txtBox.Text) Sum(num) Product(num) End Sub Sub Sum(num As Double) Dim phrase As String phrase = "Sum of favorite number with itself: " lstOutput.Items.Add(phrase & (num + num)) End Sub Sub Product(num As Double) Dim phrase As String phrase = "Product of favorite number with itself: " lstOutput.Items.Add(phrase & (num * num)) End Sub 32. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click 'Enrollments in course lstOutput.Items.Clear() lstOutput.Items.Add("In a recent year,") ShowEnrolled(823, "Spanish") ShowEnrolled(206, "French") End Sub Sub ShowEnrolled(students As Double, course As String) 'Display enrollment and course lstOutput.Items.Add(students & " thousand students took a " & course & " course.") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 99 of 443) 33. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click ShowVerse("lamb", "baa") ShowVerse("duck", "quack") ShowVerse("firefly", "blink") End Sub Sub ShowVerse(animal As String, sound As String) 'Display a verse from Old McDonald Had a Farm lstOutput.Items.Add("Old McDonald had a farm. Eyi eyi oh.") lstOutput.Items.Add("And on his farm he had a " & animal & ". Eyi eyi oh.") lstOutput.Items.Add("With a " & sound & " " & sound & " here, and a " & sound & " " & sound & " there.") lstOutput.Items.Add("Here a " & sound & ", there a " & sound & ", everywhere a " & sound & " " & sound & ".") lstOutput.Items.Add("Old McDonald had a farm. Eyi eyi oh.") lstOutput.Items.Add("") End Sub 34. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim occupation As String, amount As Decimal, percent As Decimal occupation = txtOccupation.Text amount = CDec(txtAmount.Text) percent = CDec(txtPercent.Text) DisplayOutput(occupation, amount, percent) End Sub Sub DisplayOutput(occupation As String, amount As Decimal, percent As Decimal) Dim tip As Decimal tip = amount * 0.01D * percent txtOutput.Text = "Tip the " & occupation & " " & tip.ToString("C") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 100 of 443) 35. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim grade1 As Double = CDbl(txtGrade1.Text) Dim grade2 As Double = CDbl(txtGrade2.Text) Dim grade3 As Double = CDbl(txtGrade3.Text) DisplayHighestTwo(grade1, grade2, grade3) End Sub Sub DisplayHighestTwo(grade1 As Double, grade2 As Double, grade3 As Double) Dim first, second As Double first = Max(grade1, grade2) If first = grade1 Then second = Max(grade2, grade3) Else second = Max(grade1, grade3) End If txtOutput.Text = "The highest two grades are " & first & " and " & second & "." End Sub Function Max(num1 As Double, num2 As Double) As Double If num1 <= num2 Then Return num2 Else Return num1 End If End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 101 of 443) 36. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim fullName = txtName.Text Dim grade1 = CDbl(txtGrade1.Text) Dim grade2 = CDbl(txtGrade2.Text) Dim grade3 = CDbl(txtGrade3.Text) DisplayGrade(fullName, grade1, grade2, grade3) End Sub Sub DisplayGrade(fullName As String, num1 As Double, num2 As Double, num3 As Double) txtOutput.Text = fullName & ": " & SemesterGrade(num1, num2, num3) End Sub Function SemesterGrade(num1 As Double, num2 As Double, num3 As Double) As String Dim average As Double If (num1 <= num2) And (num1 <= num3) Then average = Math.Round((num2 + num3) / 2) ElseIf (num2 <= num1) And (num2 <= num3) Then average = Math.Round((num1 + num3) / 2) Else average = Math.Round((num1 + num2) / 2) End If If average >= 90 Then Return "A" ElseIf average >= 80 Then Return "B" ElseIf average >= 70 Then Return "C" ElseIf average >= 60 Then Return "D" Else Return "F" End If End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 102 of 443) 37. Private Sub btnAlphabetize_Click(...) Handles btnAlphabetize.Click Dim word1 = txtWord1.Text Dim word2 = txtWord2.Text DisplayWords(word1, word2) End Sub Sub DisplayWords(word1 As String, word2 As String) Dim first, second As String If word1 <= word2 Then first = word1 second = word2 Else first = word2 second = word1 End If lstOutput.Items.Add(first) lstOutput.Items.Add(second) End Sub 38. Private Sub btnDisplay_Click() Handles btnDisplay.Click HappyBirthday(txtName.Text) End Sub Sub HappyBirthday(name As String) lstSong.Items.Add("Happy birthday to you!") lstSong.Items.Add("Happy birthday to you!") lstSong.Items.Add("Happy birthday, dear " & name & ".") lstSong.Items.Add("Happy birthday to you!") End Sub 39. Sub ShowCentury(anyDate As Date) If anyDate >= Today Then MessageBox.Show("You did not enter a past date.") Exit Sub End If Select Case anyDate Case Is >= #1/1/2000# txtOutput.Text = "twenty-first century" Case Is >= #1/1/1900# txtOutput.Text = "twentieth century" Case Else txtOutput.Text = "prior to the twentieth century" End Select End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 103 of 443) 40. Sub ShowParity(numString As String) If Not IsNumeric(numString) Then MessageBox.Show("You did not enter a number.") Exit Sub End If txtOutput.Text = numString Select Case (CInt(numString) Mod 2) Case 0 txtOutput.Text &= " rounds to an even number." Case 1, -1 txtOutput.Text &= " rounds to an odd number." End Select End Sub EXERCISES 5.3 1. Gabriel was born in the year 1980. 2. The population of the United States is about 315,000,000. 3. The state flower of Alaska is the Forget Me Not. 4. The Artist won the award in 2012. 5. The first 3 letters of EDUCATION are EDU. 6. Original price: $126 Cost: $106 7. sum = 4 difference = 2 8. sales tax: $12.00 profit: $90.00 © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 104 of 443) 9. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim firstName As String = "" Dim lastName As String = "" Dim salary, newSalary As Decimal InputData(firstName, lastName, salary) newSalary = RaisedSalary(salary) DisplayOutput(firstName, lastName, newSalary) End Sub Sub InputData(ByRef firstName As String, ByRef lastName As String, ByRef salary As Decimal) firstName = txtFirstName.Text lastName = txtLastName.Text salary = CDec(txtCurrentSalary.Text) End Sub Function RaisedSalary(salary As Decimal) As Decimal If salary <= 40000 Then Return 1.05D * salary Else Return salary + 2000 + 0.02D * (salary - 40000) End If End Function Sub DisplayOutput(firstName As String, lastName As String, newSalary As Decimal) txtOutput.Text = "New salary for " & firstName & " " & lastName & " is " & newSalary.ToString("C") & "." End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 105 of 443) 10. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim oldBalance, charges, credits, newBalance, minPayment As Decimal InputData(oldBalance, charges, credits) CalculateNewValues(oldBalance, charges, credits, newBalance, minPayment) DisplayData(newBalance, minPayment) End Sub Sub InputData(ByRef oldBalance As Decimal, ByRef charges As Decimal, ByRef credits As Decimal) oldBalance = CDec(txtOldBal.Text) charges = CDec(txtCharges.Text) credits = CDec(txtCredits.Text) End Sub Sub CalculateNewValues(oldBalance As Decimal, charges As Decimal, credits As Decimal, ByRef newBalance As Decimal, ByRef minPayment As Decimal) newBalance = CDec(1.015 * oldBalance + charges - credits) If newBalance <= 20 Then minPayment = newBalance Else minPayment = CDec(20 + 0.1 * (newBalance - 20)) End If End Sub Sub DisplayData(newBalance As Decimal, minPayment As Decimal) txtNewBal.Text = newBalance.ToString("C") txtMinPayment.Text = minPayment.ToString("C") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 106 of 443) 11. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim annualRateOfInterest, monthlyPayment, begBalance As Decimal Dim intForMonth, redOfPrincipal, endBalance As Decimal InputData(annualRateOfInterest, monthlyPayment, begBalance) Calculate(annualRateOfInterest, monthlyPayment, begBalance, intForMonth, redOfPrincipal, endBalance) DisplayData(intForMonth, redOfPrincipal, endBalance) End Sub Sub InputData(ByRef annualRateOfInterest As Decimal, ByRef monthlyPayment As Decimal, ByRef begBalance As Decimal) annualRateOfInterest = CDec(txtAnnualRateOfInterest.Text) monthlyPayment = CDec(txtMonthlyPayment.Text) begBalance = CDec(txtBegBalance.Text) End Sub Sub Calculate(annualRateOfInterest As Decimal, monthlyPayment As Decimal, begBalance As Decimal, ByRef intForMonth As Decimal, ByRef redOfPrincipal As Decimal, ByRef endBalance As Decimal) Dim monthlyRateOfInterest As Decimal = annualRateOfInterest / 12 intForMonth = (monthlyRateOfInterest / 100) * begBalance redOfPrincipal = monthlyPayment - intForMonth endBalance = begBalance - redOfPrincipal End Sub Sub DisplayData(intForMonth As Decimal, redOfPrincipal As Decimal, endBalance As Decimal) txtIntForMonth.Text = intForMonth.ToString("C") txtRedOfPrincipal.Text = redOfPrincipal.ToString("C") txtEndBalance.Text = endBalance.ToString("C") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 107 of 443) 12. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim hours, payPerHour, overtimeHours, pay As Decimal InputData(hours, payPerHour) CalculateValues(hours, payPerHour, overtimeHours, pay) DisplayData(overtimeHours, pay) End Sub Sub InputData(ByRef hours As Decimal, ByRef payPerHour As Decimal) hours = CDec(txtHours.Text) payPerHour = CDec(txtPayPerHour.Text) End Sub Sub CalculateValues(hours As Decimal, payPerHour As Decimal, ByRef overtimeHours As Decimal, ByRef pay As Decimal) If hours <= 40 Then overtimeHours = 0 pay = hours * payPerHour Else overtimeHours = hours - 40 pay = (40 * payPerHour) + (1.5D * payPerHour * overtimeHours) End If End Sub Sub DisplayData(overtimeHours As Decimal, pay As Decimal) txtOvertimeHrs.Text = CStr(overtimeHours) txtPay.Text = pay.ToString("C") End Sub 13. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click 'Sort three numbers Dim first As Double = CDbl(txtNum1.Text) Dim second As Double = CDbl(txtNum2.Text) Dim third As Double = CDbl(txtNum3.Text) Sort(first, second, third) txtMax.Text = CStr(first) txtMiddle.Text = CStr(second) txtMin.Text = CStr(third) End Sub Sub Sort(ByRef first As Double, ByRef second As Double, ByRef third As Double) Dim max As Double 'Find greatest value max = first © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 108 of 443) If second > max Then max = second End If If third > max Then max = third End If 'Store maximum value in variable first If second = max Then Swap(first, second) ElseIf third = max Then Swap(first, third) End If 'Order remaining two values If third > second Then Swap(second, third) End If End Sub Sub Swap(ByRef x As Double, ByRef y As Double) Dim temp As Double temp = x x = y y = temp End Sub 14. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim firstNumber, secondNumber As Integer firstNumber = 4 secondNumber = Treble(firstNumber) txtResult.Text = CStr(secondNumber) End Sub Function Treble(firstNumber As Integer) As Integer Return 3 * firstNumber End Function 15. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim price, salesTaxRate, cost As Decimal price = 29.95D salesTaxRate = 0.05D cost = FindCost(price, salesTaxRate) txtResult.Text = cost.ToString("C") End Sub Function FindCost(price As Decimal, salesTaxRate As Decimal) As Decimal Return price * (1 + salesTaxRate) End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 109 of 443) CHAPTER 5 PROGRAMMING PROJECTS 1. Dim total As Double Dim numCredits As Integer Private Sub btnRecord_Click(...) Handles btnRecord.Click total += QualityPoints() numCredits += CInt(mtbCredits.Text) mtbGrade.Clear() mtbCredits.Clear() mtbGrade.Focus() End Sub Private Sub btnCalculate_Click(...) Handles btnCalculate.Click txtGPA.Text = (total / numCredits).ToString("N1") End Sub Function QualityPoints() As Integer Dim numericGrade As Integer Dim credits As Integer = CInt(mtbCredits.Text) Dim qualPoints As Integer Select Case mtbGrade.Text Case "A" numericGrade = 4 Case "B" numericGrade = 3 Case "C" numericGrade = 2 Case "D" numericGrade = 1 Case Else numericGrade = 0 End Select qualPoints = numericGrade * credits Return qualPoints End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 110 of 443) 2. Const PIZZA_PRICE As Decimal = 1.75D Const FRIES_PRICE As Decimal = 2 Const DRINKS_PRICE As Decimal = 1.25D Private Sub btnCompute_Click(...) Handles btnCompute.Click 'Compute a customer's bill Dim pizzaSlices As Double, fries As Double, softDrinks As Double lstOutput.Items.Clear() InputData(pizzaSlices, fries, softDrinks) DisplayBill(pizzaSlices, fries, softDrinks) End Sub Sub DisplayBill(pizzaSlices As Double, fries As Double, softDrinks As Double) 'Display an itemized bill Dim total As Double total = TotalCost(pizzaSlices, fries, softDrinks) lstOutput.Items.Add("ITEM" & " " & "QUANTITY" & " " & "PRICE") lstOutput.Items.Add("pizza slices" & " " & pizzaSlices & " " & (PIZZA_PRICE * pizzaSlices).ToString("C")) lstOutput.Items.Add("fries" & " " & fries & " " & (FRIES_PRICE * fries).ToString("C")) lstOutput.Items.Add("soft drinks" & " " & softDrinks & " " & (DRINKS_PRICE * softDrinks).ToString("C")) lstOutput.Items.Add("TOTAL" & " " & total.ToString("C")) End Sub Sub InputData(ByRef pizzaSlices As Double, ByRef fries As Double, ByRef softDrinks As Double) 'Input items pizzaSlices = CDbl(txtPizza.Text) fries = CDbl(txtFries.Text) softDrinks = CDbl(txtDrinks.Text) End Sub Function TotalCost(pizzaSlices As Double, fries As Double, softDrinks As Double) As Double Return (PIZZA_PRICE * pizzaSlices) + (FRIES_PRICE * fries) + (DRINKS_PRICE * softDrinks) End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 111 of 443) 3. Const COST_PER_CHAIR As Decimal = 350 Const COST_PER_SOFA As Decimal = 925 Const SALES_TAX_RATE As Decimal = 0.05D Private Sub bntProcess_Click(...) Handles bntProcess.Click Dim cost As Double Dim totalCost As Double 'cost + sales tax cost = COST_PER_CHAIR * CDbl(txtChairs.Text) + COST_PER_SOFA * CDbl(txtSofas.Text) totalCost = cost + SALES_TAX_RATE * cost lstInvoice.Items.Clear() lstInvoice.Items.Add("Invoice Number: " & InvoiceNumber()) lstInvoice.Items.Add("") lstInvoice.Items.Add("Name: " & NameInProperOrder()) lstInvoice.Items.Add("Address: " & txtAddress.Text) lstInvoice.Items.Add("City: " & txtCityState.Text) lstInvoice.Items.Add("") lstInvoice.Items.Add("Number of Chairs: " & txtChairs.Text) lstInvoice.Items.Add("Number of Sofas: " & txtSofas.Text) lstInvoice.Items.Add("") lstInvoice.Items.Add(" Cost:" & " " & cost.ToString("C"))) lstInvoice.Items.Add("Sales Tax:" & " " & (SALES_TAX_RATE * cost).ToString("C")) lstInvoice.Items.Add(" ------------") lstInvoice.Items.Add("Total Cost:" & " " & totalCost.ToString("C")) End Sub Private Sub btnClear_Click(...) Handles btnClear.Click txtName.Text = "" txtAddress.Text = "" txtCityState.Text = "" txtChairs.Text = "" txtSofas.Text = "" txtName.Focus() lstInvoice.Items.Clear() End Sub Private Sub btnQuit_Click(...) Handles btnQuit.Click Me.Close() End Sub Private Function InvoiceNumber() As String Dim endOfZip, str As String endOfZip = txtCityState.Text.Substring(txtCityState.Text.Length - 4) str = txtName.Text.Substring(0, 2).ToUpper & endOfZip Return str End Function Private Function NameInProperOrder() As String Dim name, firstName, lastName As String Dim comma As Integer name = txtName.Text comma = name.IndexOf(",") lastName = name.Substring(0, comma) firstName = name.Substring(comma + 2) Return firstName & " " & lastName End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 112 of 443) 4. Dim numCorrect As Integer Private Sub btnTakeQuiz_Click(...) Handles btnTakeQuiz.Click 'Test user's appraisals of common sayings numCorrect = 0 'Number of correct answers GiveTest(1) GiveTest(2) GiveTest(3) GiveTest(4) GiveTest(5) GiveTest(6) GiveTest(7) ShowMessage() End Sub Sub GiveTest(numProverb As Integer) 'Administer test and count correct replies Dim saying As String = "" Dim answer As String = "" Dim reply, question As String GetProverb(numProverb, saying, answer) question = "(" & numProverb & ") " & saying & " (T/F)" reply = InputBox(question) If reply.ToUpper = answer Then MessageBox.Show("You're right.", "Question " & numProverb) numCorrect += 1 Else MessageBox.Show("I'm sorry. You're wrong.", "Question " & numProverb) End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 113 of 443) Sub GetProverb(which As Integer, ByRef proverb As String, ByRef truthVal As String) Select Case which Case 1 proverb = "The squeaky wheel gets the grease." truthVal = "T" Case 2 proverb = "Giving is better than receiving." truthVal = "T" Case 3 proverb = "Opposites attract." truthVal = "F" Case 4 proverb = "Spare the rod and spoil the child." truthVal = "F" Case 5 proverb = "Actions speak louder than words." truthVal = "T" Case 6 proverb = "Flattery will get you nowhere." truthVal = "F" Case 7 proverb = "Marry in haste, repent at leisure." truthVal = "T" End Select End Sub Sub ShowMessage() 'Comment on user's performance Select Case numCorrect Case 7 MessageBox.Show("Perfect. " & numCorrect & " correct") Case 5, 6 MessageBox.Show("Excellent. " & numCorrect & " correct") Case Else MessageBox.Show("You might consider taking Psychology 101. numCorrect & " correct") End Select End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. " & Instructor Solutions Manual (Page 114 of 443) 5. Dim sticksRemaining As Integer Dim sticks As String Private Sub btnRules_Click(...) Handles btnRules.Click Dim message As String message = "You begin by deciding how many matchsticks (between 5 and 50) " & "to place on the pile. Then I will decide who goes first. At each turn, " & "a contestant must take 1, 2, or 3 matchsticks from the pile. " & "The one who takes the last matchstick loses." MessageBox.Show(message, "Rules of the Game") End Sub Private Sub btnBegin_Click(...) Handles btnBegin.Click Dim message As String sticks = "||||||||||||||||||||||||||||||||||||||||||||||||||" message = "How many matchsticks would you like to begin with? " & "Pick a number from 5 to 50." sticksRemaining = CInt(InputBox(message, "Begin the Game")) txtStatus.Text = sticks.Substring(0, sticksRemaining) If sticksRemaining Mod 4 = 1 Then MessageBox.Show("I have decided that you should go first.", "Whose Turn") Else MessageBox.Show("I have decided to go first.", "Whose Turn") ComputerTurn() End If End Sub Private Sub btnPickUpOne_Click(...) Handles btnPickUpOne.Click YourTurn(1) End Sub Private Sub btnPickUpTwo_Click(...) Handles btnPickUpTwo.Click YourTurn(2) End Sub Private Sub btnPickUpThree_Click(...) Handles btnPickUpThree.Click YourTurn(3) End Sub (continued on next page) © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 115 of 443) Private Sub ComputerTurn() Dim myPick As Integer Dim sticksRemMod4 As Integer sticksRemMod4 = sticksRemaining Mod 4 Select Case sticksRemMod4 Case 0 myPick = 3 Case 2 myPick = 1 Case 3 myPick = 2 End Select sticksRemaining = sticksRemaining - myPick If sticksRemaining = 1 Then MessageBox.Show("I select " & myPick & " matchsticks. " & "I win.", "Hooray") Else MessageBox.Show("I select " & myPick & " matchsticks. ") End If txtStatus.Text = sticks.Substring(0, sticksRemaining) End Sub Private Sub YourTurn(numberPicked As Integer) If sticksRemaining <> 1 Then sticksRemaining = sticksRemaining - numberPicked txtStatus.Text = sticks.Substring(0, sticksRemaining) If sticksRemaining = 1 Then MessageBox.Show("You win.", "Congratulations") Else ComputerTurn() End If Else Me.Close() End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 116 of 443) 6. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click If radAmount.Checked And GiveOk(txtRate.Text, txtDuration.Text, txtPayment.Text) Then txtAmount.Text = (PV(CDbl(txtRate.Text) / 1200, CDbl(txtDuration.Text), -CDbl(txtPayment.Text))).ToString("C") ElseIf radRate.Checked And GiveOk(txtAmount.Text, txtDuration.Text, txtPayment.Text) Then txtRate.Text = (1200 * Rate(CDbl(txtDuration.Text), CDbl(txtPayment.Text), -CDbl(txtAmount.Text))).ToString("P") ElseIf radDuration.Checked And GiveOk(txtRate.Text, txtAmount.Text, txtPayment.Text) Then txtDuration.Text = (NPer(CDbl(txtRate.Text) / 1200, CDbl(txtPayment.Text), -CDbl(txtAmount.Text))).ToString("N0") ElseIf radPayment.Checked And GiveOk(txtRate.Text, txtDuration.Text, txtAmount.Text) Then txtPayment.Text = (Pmt(CDbl(txtRate.Text) / 1200, CDbl(txtDuration.Text), -CDbl(txtAmount.Text))).ToString("C") Else Dim prompt as String = "No item is checked, " & "a required value is missing or is not numeric." MessageBox.Show(prompt, "Error") End If End Sub Function GiveOk(value1 As String, value2 As String, value3 As String) As Boolean If value1 <> "" And value2 <> "" And value3 <> "" Then If IsNumeric(value1) And IsNumeric(value2) And IsNumeric(value3) Then Return True End If End If End Function 7. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click If radPresentValue.Checked And GiveOk(txtRate.Text, txtNumberOfPayments.Text, txtPeriodicPayment.Text, txtFutureValue.Text) Then txtPresentValue.Text = (PV(CDbl(txtRate.Text), CInt(txtNumberOfPayments.Text), CDec(txtPeriodicPayment.Text), -CDec(txtFutureValue.Text))).ToString("C") ElseIf radRate.Checked And GiveOk(txtPresentValue.Text, txtNumberOfPayments.Text, txtPeriodicPayment.Text, txtFutureValue.Text) Then txtRate.Text = (Rate(CInt(txtNumberOfPayments.Text), -CDec(txtPeriodicPayment.Text), -CDec(txtPresentValue.Text), CDec(txtFutureValue.Text))).ToString("P") ElseIf radNumberOfPayments.Checked And GiveOk(txtRate.Text, txtPresentValue.Text, txtPeriodicPayment.Text, txtFutureValue.Text) Then © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 117 of 443) txtNumberOfPayments.Text = (NPer(CDbl(txtRate.Text), -CDec(txtPeriodicPayment.Text), -CDec(txtPresentValue.Text), CDec(txtFutureValue.Text))).ToString("N0") ElseIf radPeriodicPayment.Checked And GiveOk(txtRate.Text, txtNumberOfPayments.Text, txtPresentValue.Text, txtFutureValue.Text) Then txtPeriodicPayment.Text = (-Pmt(CDbl(txtRate.Text), CInt(txtNumberOfPayments.Text), -CDec(txtPresentValue.Text), CDec(txtFutureValue.Text))).ToString("C") ElseIf radfutureValue.Checked And GiveOk(txtPresentValue.Text, txtRate.Text, txtNumberOfPayments.Text, txtPeriodicPayment.Text) Then txtFutureValue.Text = (FV(CDbl(txtRate.Text), CInt(txtNumberOfPayments.Text), -CDec(txtPeriodicPayment.Text), -CDec(txtPresentValue.Text))).ToString("C") Else Dim prompt as String = "No item is checked, " & "a required value is missing or is not numeric." MessageBox.Show(prompt, "Error") End If End Sub Function GiveOk(value1 As String, value2 As String, value3 As String, value4 As String) As Boolean If value1 <> "" And value2 <> "" And value3 <> "" And value4 <> "" Then If IsNumeric(value1) And IsNumeric(value2) And IsNumeric(value3) And IsNumeric(value4) Then Return True End If End If End Function Private Sub btnClear_Click(...) Handles btnClear.Click txtPresentValue.Text = "" txtRate.Text = "" txtNumberOfPayments.Text = "" txtPeriodicPayment.Text = "" txtFutureValue.Text = "" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 118 of 443) 8. Private Sub btnPerform_Click(...) Handles btnPerform.Click Dim m, n, difference, reversedDifference, sum As Integer Dim numString As String = txtNumber.Text If IsValid(numString) Then m = CInt(txtNumber.Text) n = CInt(ReverseString(numString)) difference = m - n reversedDifference = CInt(ReverseString(CStr(difference))) sum = difference + reversedDifference txtResult.Text = CStr(sum) Else MessageBox.Show("Not a proper number.") End If End Sub Function IsValid(number As String) As Boolean Return (number.Length = 3) And (number.Substring(0, 1) > number.Substring(1, 1)) And (number.Substring(1, 1) > number.Substring(2, 1)) End Function Function ReverseString(numString As String) As String Return numString.Substring(2, 1) & numString.Substring(1, 1) & numString.Substring(0, 1) End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 119 of 443) CHAPTER 6 EXERCISES 6.1 1. 18 2. 24 3. 10 4. 10 5. Maximum number: 7 6. Later than 1950. Earlier than 1970. They appeared on the Ed Sullivan show in February 1964. You answered the question correctly in 3 tries. 7. Infinite loop. (To end the program, click on the Stop Debugging button on the Toolbar.) 8. Loop never terminates. The line n = 1 should appear before the Do loop. 9. Do and Loop are interchanged 10. The keyword Loop is missing. 11. While num >= 7 12. While name <> "Bob" 13. Until response <> "Y" 14. Until total <> 10 15. Until name = "" 16. While balance < 100 17. Until (a <= 1) Or (a >= 3) 18. While (ans <> "") And (n <> 0) 19. While n = 0 20. Until (ans <> "Y") Or (n >= 7) 21. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click 'Request and display three names. Dim name As String, num As Integer = 0 Do While num < 3 name = InputBox("Enter a name:") lstOutput.Items.Add(name) num +=1 Loop End Sub 22. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click 'Display number of times question is asked. Dim loopNum As Integer, answer As String = "Y" Do While answer = "Y" loopNum += 1 txtOutput.Text = CStr(loopNum) answer = (InputBox ("Do you want to continue (Y/N)?")).ToUpper Loop End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 120 of 443) 23. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim celsius As Double = 10 lstOutput.Items.Add("Celsius Fahrenheit") Do While celsius <= 40 lstOutput.Items.Add(" " & celsius & " " & Fahrenheit(celsius)) celsius += 5 Loop End Sub Function Fahrenheit(celsius As Double) As Double 'Convert Celsius to Fahrenheit Return (9 / 5) * celsius + 32 End Function 24. Private Sub btnBounceBall_Click(...) Handles btnBounceBall.Click 'Drop a ball, and find number of bounces and total distance traveled Dim height, bounceFactor, distance As Double Dim bounces As Integer InputData(height, bounceFactor) BounceBall(height, bounceFactor, bounces, distance) ShowData(bounces, distance) End Sub Sub InputData(ByRef height As Double, ByRef bounceFactor As Double) bounceFactor = CDbl(txtCoefficient.Text) height = CDbl(txtHeight.Text) height = 100 * height 'Convert to centimeters End Sub Sub BounceBall(hght As Double, bFactor As Double, ByRef bounces As Integer, ByRef dist As Double) bounces = 1 'first bounce dist = hght Do While hght * bFactor >= 10 bounces += 1 hght = bFactor * hght dist += 2 * hght 'Up then down again Loop End Sub Sub ShowData(bounces As Integer, distance As Double) txtBounces.Text = CStr(bounces) txtDistance.Text = (distance / 100).ToString("N") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 121 of 443) 25. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim num, max, min As Double Dim count As Double = 0 Dim prompt As String = "Enter a nonnegative number. " & "Enter -1 to terminate entering numbers." num = CDbl(InputBox(prompt)) max = num min = num Do While num >= 0 count += 1 num = CDbl(InputBox(prompt)) If (num <> -1) Then If num < min Then min = num End If If num > max Then max = num End If End If Loop If count > 0 Then txtRange.Text = CStr(max - min) Else MessageBox.Show("No numbers were entered.") End If End Sub 26. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim num, min As Double Dim count As Double = 0 Dim prompt As String = "Enter a nonnegative number. " & "Enter -1 to terminate entering numbers." num = CDbl(InputBox(prompt)) min = num Do While num >= 0 count += 1 num = CDbl(InputBox(prompt)) If (num <> -1) And (num < min) Then min = num End If Loop If count > 0 Then MessageBox.Show("Smallest number: " & min) Else MessageBox.Show("No numbers were entered.") End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 122 of 443) 27. Private Sub btnFind_Click(...) Handles btnFind.Click Dim m, n, t As Integer InputIntegers(m, n) Do While n <> 0 t = n n = m Mod n 'Remainder after m is divided by n m = t Loop txtOutput.Text = CStr(m) End Sub Sub InputIntegers(ByRef m As Integer, ByRef n As Integer) m = CInt(txtM.Text) n = CInt(txtN.Text) End Sub 28. Private Sub btnFind_Click(...) Handles btnFind.Click 'Prime factorization Dim n, f As Double lstFactors.Items.Clear() n = CInt(txtNumber.Text) lstFactors.Items.Add("The prime factors of " & n & ".") f = 2 Do While n > 1 If Int(n / f) = n / f Then 'true if f divides n lstFactors.Items.Add(f) n = n / f Else f += 1 End If Loop End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 123 of 443) 29. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim dt As Date dt = CDate(txtMonth.Text & "/1/" & txtYear.Text) Do Until dt.ToString("D").StartsWith("Tuesday") dt = dt.AddDays(1) Loop txtDate.Text = dt.ToString("D") End Sub 30. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim amount, annualRate As Decimal amount = CDec(txtAmount.Text) annualRate = CDec(txtRate.Text) If (amount > 0) And (annualRate > 0) Then txtDouble.Text = CStr(DoubleYears(amount, annualRate)) End If End Sub Function DoubleYears(a As Decimal, r As Decimal) As Integer Dim bal As Decimal = a Dim years As Integer = 0 Do While bal < 2 * a bal = (1 + r) * bal years += 1 Loop Return years End Function 31. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim age As Integer = 1 Do While 1980 + age <> age ^ 2 age += 1 Loop txtOutput.Text = age & " years old" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 124 of 443) 32. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click 'Determine the year that the world population will exceed '10 billion, assuming a 1.1.4% rate of increase. Dim yr As Integer, pop As Double yr = 2011 'Start at 2011. pop = 7 'Population of 7 billion Do While pop <= 10 pop = (1.011) * pop yr += 1 Loop txtOutput.Text = "The world population will reach 10 billion in " & yr & "." End Sub 33. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim amount As Double = 100 Dim yrs As Integer = 0 Do Until amount < 1 amount = 0.5 * amount yrs += 28 Loop txtOutput.Text = yrs & " years" End Sub 34. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Const CURRENT_CPI As Decimal = 238.65D Dim cpi As Decimal = CURRENT_CPI Dim yrs As Integer Do Until cpi >= 2 * CURRENT_CPI cpi = 1.025D * cpi yrs += 1 Loop txtOutput.Text = yrs & " years" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 125 of 443) 35. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Const INTEREST_PER_MONTH As Decimal = 0.005D Const MONTHLY_PAYMENT As Decimal = 290 Dim loanAmount As Decimal = 15000 Dim months As Integer = 0 Dim balance As Decimal = loanAmount Do Until balance < loanAmount / 2 balance = (1 + INTEREST_PER_MONTH) * balance - MONTHLY_PAYMENT months += 1 Loop txtOutput.Text = months & " months" End Sub 36. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim months As Integer = 0 Dim balance As Decimal = 0 Do Until balance > 3000 balance = 1.0025D * balance + 100 months += 1 Loop txtOutput.Text = months & " months" End Sub 37. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim months As Integer = 0 Dim balance As Decimal = 10000 Do Until balance < 600 balance = (1.003D * balance) - 600 months += 1 Loop txtOutput.Text = months & " months; " & balance.ToString("C") End Sub 38. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim months As Integer = 0 Dim balance As Decimal = CDec(txtInitialDeposit.Text) Do Until balance < 600 balance = 1.003D * balance - 600 months += 1 Loop txtOutput.Text = months & " months" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 126 of 443) 39. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click 'Determine the number of times a letter appears in a sentence. Dim letter As String = txtLetter.Text.ToUpper Dim sentence As String = txtSentence.Text.ToUpper Dim positionOfLetter As Integer Dim count As Integer = -1 Do count += 1 positionOfLetter = sentence.IndexOf(letter, positionOfLetter + 1) Loop Until positionOfLetter = -1 txtNumberOfOccurrences.Text = CStr(count) End Sub 40. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click 'Describe the cooling of a hot liquid. Dim temperature As Double = 212, count As Integer = 0 lstTemperatures.Items.Add(count & " " & temperature) Do Until temperature < 150 count += 1 temperature -= (temperature - 70) * 0.079 lstTemperatures.Items.Add(count & " " & temperature.ToString("N")) Loop End Sub 41. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click 'Determine when the population of India will exceed that of China Dim chinaPop, indiaPop As Double, yr As Integer chinaPop = 1.37 '2016 indiaPop = 1.31 '2016 yr = 2016 Do Until indiaPop > chinaPop yr += 1 chinaPop *= 1.0066 indiaPop *= 1.013 Loop txtYear.Text = CStr(yr) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 127 of 443) 42. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click 'Calculate the size of group required for the likelihood 'that some shares your birthday is > 50%. Dim num As Integer = 1 Do Until (364 / 365) ^ num < 0.5 num += 1 Loop txtResult.Text = num & " people" End Sub 43. Function Sustitute(strVar As String,strVar1 As String, strVar2 As String) As String Dim n As Integer Do Until strVar.IndexOf(strVar1) = -1 n = strVar.IndexOf(strVar1) ListBox1.Items.Add(n) strVar = strVar.Remove(n, strVar1.Length) strVar = strVar.Insert(n, strVar2) ListBox1.Items.Add(strVar) Loop Return strVar End Function EXERCISES 6.2 1. Pass #1 Pass #2 Pass #3 Pass #4 5. 5 6 7 2. 6 8 10 12 6. -9 -6 -3 3. 2 4 6 8 Who do we appreciate? 7. •••••••••• 8. 6 4. 10 9 8 7 6 5 4 3 2 1 Blastoff 9. 4 10. 4 11. The loop is never executed since 25 is greater than 1 and the step is negative. 12. Next statement is missing. 13. The For ... Next loop will not execute since 20 is greater than 0. You must add Step -1 to the end of the For statement. 14. Since step size is 0.5, the variable j must assume noninteger values such as 1.5. However, j is of type Integer. The word Integer should be replaced with Double. © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 128 of 443) 15. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click For num As Integer = 1 To 9 Step 2 lstBox.Items.Add(num) Next End Sub 16. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click For num As Integer = 1 To 4 lstBox.Items.Add("hello") Next End Sub 17. Private Sub btnAnalyze_Click(...) Handles btnAnalyze.Click Const DECAY_RATE As Double = 0.12 Dim grams As Double grams = 10 For yearNum As Integer = 1 To 5 grams = (1 - DECAY_RATE) * grams Next lstOutput.Items.Add("Beginning with 10 grams of cobalt 60,") lstOutput.Items.Add(grams.ToString("N") & " grams remain after 5 years.") End Sub 18. Private Sub btnFind_Click(...) Handles btnFind.Click Dim sum As Double = 0 For i As Integer = 1 To 100 sum += i Next txtSum.Text = CStr(sum) End Sub 19. Private Sub btnFind_Click(...) Handles btnFind.Click Dim sum As Double = 0, num as Double = 0 For i As Integer = 1 To 5 num = CDbl(InputBox("Enter #" & i)) sum += num Next txtAverage.Text = (sum / 5).ToString("N") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 129 of 443) 20. Private Sub btnFind_Click(...) Handles btnFind.Click Dim num, max As Double num = CDbl(InputBox("Enter #1")) max = num For i As Integer = 2 To 5 num = CDbl(InputBox("Enter #" & i)) If num > max Then max = num End If Next txtOutput.Text = CStr(max) End Sub 21. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim sum As Double = 0 For denominator As Double = 1 To 100 sum += 1 / denominator Next txtOutput.Text = sum.ToString("N5") End Sub 22. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim n As Integer = CInt(txtDots.Text) Dim row As String = "" For i As Integer = 1 To n row &= Chr(149) Next txtOutput.Text = row End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 130 of 443) 23. Private Sub btnAnalyze_Click(...) Handles btnAnalyze.Click Dim word As String = txtWord.Text Dim firstLetter, secondLetter As String Dim flag As Boolean = True For i As Integer = 0 To word.Length - 2 firstLetter = word.Substring(i, 1) secondLetter = word.Substring(i + 1, 1) If firstLetter > secondLetter Then txtOutput.Text = "No" Exit For End If If i = word.Length - 2 Then txtOutput.Text = "Yes" End If Next End Sub 24. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim value As Decimal = 20000 For i As Integer = 1 To 5 value = 0.85D * value lstOutput.Items.Add(i & ": " & value.ToString("C")) Next End Sub 25. Private Sub btnCompute_Click(...) Handles btnCompute.Click Const PERCENT_RAISE As Decimal = 0.05D Dim name As String, age As Integer, salary As Decimal Dim earnings As Decimal = 0 name = txtName.Text age = CInt(txtAge.Text) salary = CDec(txtSalary.Text) For i As Integer = age To 65 earnings += salary salary = salary + (PERCENT_RAISE * salary) Next txtOutput.Text = name & " will earn about " & earnings.ToString("C0") & "." End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 131 of 443) 26. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim amount As Decimal = 1000 Dim simple, compound As Decimal lstOutput.Items.Clear() lstOutput.Items.Add(" " & "SIMPLE" & " " & "COMPOUND") lstOutput.Items.Add("YEAR " & "INTEREST" & " " & "INTEREST") simple = amount compound = amount For i As Integer = 1 To 9 simple += 0.05D * amount compound = 1.05D * compound lstOutput.Items.Add(i & " " & simple.ToString("C") & " " & compound.ToString("C")) Next End Sub 27. Private Sub btnComputeIdealWeights_Click(...) Handles _ btnComputeIdealWeights.Click Dim lower, upper As Integer lstWeightTable.Items.Clear() InputBounds(lower, upper) ShowWeights(lower, upper) End Sub Function IdealMan(height As Integer) As Double 'Compute the ideal weight of a man given his height Return 4 * height - 128 End Function Function IdealWoman(height As Integer) As Double 'Compute the ideal weight of a woman given her height Return 3.5 * height - 108 End Function Sub InputBounds(ByRef lower As Integer, ByRef upper As Integer) lower = CInt(InputBox("Enter lower bound on height in inches:")) upper = CInt(InputBox("Enter upper bound on height in inches:")) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 132 of 443) Sub ShowWeights(lower As Integer, upper As Integer) lstWeightTable.Items.Clear() lstWeightTable.Items.Add(" " & "WEIGHT " & " " & "WEIGHT") lstWeightTable.Items.Add("HEIGHT" & " " & "WOMEN " & " " & "MEN") For height As Integer = lower To upper lstWeightTable.Items.Add(height & " " & (IdealWoman(height)).ToString("N1") & " " & (IdealMan(height)).ToString("N1")) Next End Sub 28. Private Sub btnAnalyze_Click(...) Handles btnAnalyze.Click 'Determine number of sibilants in sentence txtOutput.Text = "There are " & Sibilants(txtSentence.Text) & " sibilants in the sentence." End Sub Function Sibilants(sentence As String) As Integer 'Count the number of sibilants (i.e., the letters S and Z) Dim numSibs As Integer Dim letter As String numSibs = 0 For i As Integer = 0 To sentence.Length - 1 letter = sentence.Substring(i, 1).ToUpper If (letter = "S") Or (letter = "Z") Then numSibs += 1 End If Next Return numSibs End Function 29. Private Sub btnAnalyzeOptions_Click(...) Handles btnAnalyzeOptions.Click 'Compare salaries Dim opt1, opt2 As Decimal opt1 = Option1() opt2 = Option2() lstOutput.Items.Add("Option 1 = " & opt1.ToString("C")) lstOutput.Items.Add("Option 2 = " & opt2.ToString("C")) If opt1 > opt2 Then lstOutput.Items.Add("Option 1 pays better.") ElseIf opt1 = opt2 lstOutput.Items.Add("Options pay the same. Else lstOutput.Items.Add("Option 2 pays better.") End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 133 of 443) Function Option1() As Decimal 'Compute the total salary for 10 days, 'with a flat salary of $100/day Dim sum As Integer = 0 For i As Integer = 1 To 10 sum += 100 Next Return sum End Function Function Option2() As Decimal 'Compute the total salary for 10 days, 'starting at $1 and doubling each day Dim sum As Integer = 0, daySalary As Integer = 1 For i As Integer = 1 To 10 sum += daySalary daySalary = 2 * daySalary Next Return sum End Function 30. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim balance As Decimal = 15000 Dim yr As Integer = 238 For i As Integer = 1 To 60 balance = (1.005D * balance) - 290 If i Mod 12 = 0 Then If balance < 0 Then balance = 0 End If lstOutput.Items.Add(yr & " " & balance.ToString("C")) yr += 1 End If Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 134 of 443) 31. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim balance As Decimal = 0 Dim yr As Integer = 2016 For i As Integer = 1 To 108 balance = (1.0025D * balance) + 100 If i Mod 12 = 0 Then lstOutput.Items.Add(yr & " " & balance.ToString("C")) yr += 1 End If Next End Sub 32. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim word As String = txtWord.Text If IsQwerty(word) Then txtOutput.Text = "Yes" Else txtOutput.Text = "No" End If End Sub Function IsQwerty(word As String) As Boolean Dim n As Integer = word.Length - 1 word = word.ToUpper For i As Integer = 0 To n If Not (word.Substring(i, 1) = "Q" Or word.Substring(i, 1) = "W" Or word.Substring(i, 1) = "E" Or word.Substring(i, 1) = "R" Or word.Substring(i, 1) = "T" Or word.Substring(i, 1) = "Y" Or word.Substring(i, 1) = "U" Or word.Substring(i, 1) = "I" Or word.Substring(i, 1) = "O" Or word.Substring(i, 1) = "P") Then Return False End If Next Return True End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 135 of 443) 33. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click txtNfactorial.Text = CStr(Factorial(CInt(txtN.Text)).ToString("N0")) End Sub Function Factorial(n As Integer) As Double Dim product As Double = 1 For i As Integer = 2 To n product = product * i Next Return product End Function 34. Private Sub btnGrades_Click(...) Handles btnGrades.Click Dim grade As Integer Dim sum As Integer = 0 Dim lowestGrade As Integer = 100 Dim average As Double For i As Integer = 1 To 5 grade = CInt(InputBox("Enter grade:", "Grade #" & i)) sum += grade If grade < lowestGrade Then lowestGrade = grade End If Next average = (sum - lowestGrade) / 4 txtAverage.Text = average.ToString("N") End Sub 35. Private Sub btnRemove_Click(...) Handles btnRemove.Click Dim phoneNum As String Dim phoneNum2 As String = "" phoneNum = txtPhone.Text For i As Integer = 0 To phoneNum.Length - 1 Dim character As String character = phoneNum.Substring(i, 1) If character <> "-" Then phoneNum2 &= character End If Next txtStrippedPhone.Text = phoneNum2 End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 136 of 443) 36. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim numberOfFridays As Integer Dim dt As Date For i As Integer = 1 To 12 dt = CDate(i & "/" & "13/" & mtbYear.Text) If IsFriday(dt) Then numberOfFridays += 1 End If Next txtNumberOfFridays.Text = CStr(numberOfFridays) End Sub Function IsFriday(x As Date) As Boolean Dim dt As String = x.ToString("D") If dt.StartsWith("Friday") Then Return True Else Return False End If End Function 37. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim numberOfFridays As Integer Dim dt As Date For i As Integer = 2000 To 2999 For j As Integer = 1 To 12 dt = CDate(j & "/" & "13/" & i) If IsFriday(dt) Then numberOfFridays += 1 End If Next Next txtNumberOfFridays.Text = CStr(numberOfFridays) End Sub Function IsFriday(x As Date) As Boolean Dim dt As String = x.ToString("D") If dt.StartsWith("Friday") Then Return True Else Return False End If End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 137 of 443) 38. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim msg As String = "Enter sales for year:" Dim sales As Decimal Dim sum As Decimal Dim numYears As Integer = CInt(txtEndYr.Text) - CInt(txtBegYr.Text) + 1 lstOutput.Items.Add("Sales in Millions") For yr As Integer = CInt(txtBegYr.Text) To CInt(txtEndYr.Text) sales = CDec(InputBox(msg & yr & ".")) sum += sales lstOutput.Items.Add(yr & " " & ProduceBar(CInt(sales)) & " " & sales) Next txtAverage.Text = (sum / numYears).ToString("C") & " million" End Sub Function ProduceBar(num As Integer) As String Dim bar As String = "" For i As Integer = 1 To num bar &= Chr(149) Next Return bar End Function 39. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim price, quantity As Decimal lstOutput.Items.Clear() quantity = 80 'current crop of soybeans in millions of bushels lstOutput.Items.Add("YEAR" & " " & "QUANTITY" & " " & "PRICE") For yr As Integer = 2015 To 2024 price = 20 – (0.1D * quantity) lstOutput.Items.Add(yr & " " & quantity.ToString("N") & " " & price.ToString("C")) quantity = 5 * price - 10 Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 138 of 443) 40. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click 'Determine if a word is a quasi-palindrome. Dim originalWord, newWord, reversedNewWord As String originalWord = txtWord.Text newWord = originalWord.Substring(1) & originalWord.Substring(0, 1) reversedNewWord = "" For i As Integer = newWord.Length - 1 To 0 Step -1 reversedNewWord = reversedNewWord & newWord.Substring(i, 1) Next If reversedNewWord = originalWord Then txtAnswer.Text = "YES" Else txtAnswer.Text = "NO" End If End Sub 41. Private Sub btnCompute_Click(...) Handles btnCompute.Click 'Compare two salary options. Dim amount1 As Decimal = 0, amount2 As Decimal = 0 Dim salaryPerPeriod1 As Decimal = 20000 Dim salaryPerPeriod2 As Decimal = 10000 'Option 1: each period is one year For i As Integer = 1 To 10 amount1 += salaryPerPeriod1 salaryPerPeriod1 += 1000 Next txtOption1.Text = amount1.ToString("C0") 'Option 2: each period is six months For i As Integer = 1 To 20 amount2 += salaryPerPeriod2 salaryPerPeriod2 += 250 Next txtOption2.Text = amount2.ToString("C0") End Sub 42. Private Sub btnFind_Click(...) Handles btnFind.Click 'Find a number with a special property. Dim n As Integer For m As Integer = 1000 To 9999 n = 4 * m If Len(CStr(n)) = 4 Then If Reverses(m, n) Then txtNumber.Text = CStr(m) txtTimesFour.Text = CStr(n) End If End If Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 139 of 443) Function Reverses(m As Integer, n As Integer) As Boolean Dim mString As String = CStr(m), nString As String = CStr(n) For i As Integer = 0 To 3 If mString.Substring(i, 1) <> nString.Substring(3 - i, 1) Then Return False End If Next Return True End Function 43. Private Sub btnCount_Click(...) Handles btnCount.Click 'Count the number of odometer readings containing the digit 1. Dim total As Integer = 0 For i As Integer = 0 To 999999 If CStr(i).IndexOf("1") <> -1 Then total += 1 End If Next txtAnswer.Text = total.ToString("N0") 'Note: The answer is 10^6 - 9^6, the total number of odometer readings 'minus the number of odometer readings that do not contain the digit 1. End Sub 44. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click 'Calculate the sum of the digits in the first million positive integers. Dim sum As Integer, strNum As String For i As Integer = 1 To 1000000 strNum = CStr(i) For j As Integer = 0 To strNum.Length - 1 sum += CInt(strNum.Substring(j, 1)) Next Next txtAnswer.Text = sum.ToString("N0") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 140 of 443) 45. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click 'Calculate the likelihood of two people in a group having the same birthday. Dim n As Integer = 365 Dim product, prob As Double lstProbabilities.Items.Add("Number of People Probability") For r As Integer = 20 To 30 product = 1 For i As Integer = 0 To (r – 1) product *= (n - i) / n Next prob = 1 - product lstProbabilities.Items.Add(" " & r & " " & prob.ToString("N3")) Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 141 of 443) 46. Private Sub btnAnalyze_Click(...) Handles btnAnalyze.Click Dim sentence As String = txtSentence.Text txtWords.Text = CStr(CountNumberOfWords(sentence)) txtLetters.Text = CStr(CountNumberOfLetters(sentence)) End Sub Function CountNumberOfWords(sentence As String) As Integer Dim counter As Integer = 0 For i As Integer = 0 To sentence.Length - 1 If sentence.Substring(i, 1) = " " Then counter += 1 End If Next Return (counter + 1) End Function Function CountNumberOfLetters(sentence As String) As Integer Dim counter As Integer = 0 Dim letter As String For i As Integer = 0 To sentence.Length - 1 letter = sentence.Substring(i, 1).ToUpper If (letter >= "A" And letter <= "Z") Then counter += 1 End If Next Return (counter) End Function EXERCISES 6.3 1. Mozart 5. 3 11. 300 2. chopin 6. 2 7. 80 3. Tchaikovsky 8. 70 9. 70 4. Mozart 10. 1 12. 60 © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 142 of 443) 13. Private Sub btnCount_Click(...) Handles btnCount.Click Dim numWon As Integer = 0 For i As Integer = 0 To lstBox.Items.Count - 1 If CStr(lstBox.Items(i)) = "USC" Then numWon += 1 End If Next txtOutput.Text = CStr(numWon) End Sub 14. Private Sub lstBox_SelectedIndexChanged(...) Handles _ lstBox.SelectedIndexChanged Dim college As String = lstBox.Text Dim numWon As Integer = 0 For i As Integer = 0 To lstBox.Items.Count - 1 If CStr(lstBox.Items(i)) = college Then numWon += 1 End If Next txtOutput.Text = CStr(numWon) End Sub 15. Private Sub btnCount_Click(...) Handles btnDetermine.Click Dim college As String = txtCollege.Text txtOutput.Clear() For i As Integer = 0 To lstBox.Items.Count - 1 If CStr(lstBox.Items(i)) = college Then txtOutput.Text = "YES" Exit For End If Next If txtOutput.Text = "" Then txtOutput.Text = "NO" End If End Sub or © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 143 of 443) Private Sub btnCount_Click(...) Handles btnDetermine.Click Dim college As String = txtCollege.Text Dim i As Integer = 0 Dim found As Boolean = False Do Until (found = True) Or (i = lstBox.Items.Count) If CStr(lstBox.Items(i)) = college Then found = True End If i += 1 Loop If found Then txtOutput.Text = "YES" Else txtOutput.Text = "NO" End If End Sub 16. Private Sub btnCount_Click(...) Handles btnDetermine.Click Dim college As String = txtCollege.Text Dim i As Integer = 0 Dim found As Boolean = False Do Until (college <= CStr(lstBox.Items(i))) Or (i = lstBox.Items.Count - 1) i += 1 Loop If CStr(lstBox.Items(i)) = college Then found = True End If If found Then txtOutput.Text = "YES" Else txtOutput.Text = "NO" End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 144 of 443) 17. Private Sub btnReverse_Click(...) Handles btnReverse.Click Dim highestIndex As Integer = lstBox.Items.Count - 1 For i As Integer = highestIndex To 0 Step -1 lstBox2.Items.Add(lstBox.Items(i)) Next End Sub 18. Private Sub btnRemove_Click(...) Handles btnRemove.Click Dim highestIndex As Integer = lstBox.Items.Count - 1 Dim college As String lstBox2.Sorted = True For i As Integer = 0 To highestIndex college = CStr(lstBox.Items(i)) If lstBox2.Items.IndexOf(college) = -1 Then lstBox2.Items.Add(college) End If Next End Sub 19. Private Sub btnAlphabetize_Click(...) Handles btnAlphabetize.Click lstBox2.Sorted = True Dim highestIndex As Integer = lstBox.Items.Count - 1 For i As Integer = 0 To highestIndex lstBox2.Items.Add(lstBox.Items(i)) Next End Sub 20. Private Sub btnAlphabetize_Click(...) Handles btnAlphabetize.Click lstBox.Sorted = True Dim highestIndex As Integer = lstBox.Items.Count - 1 For i As Integer = highestIndex To 0 Step -1 lstBox2.Items.Add(lstBox.Items(i)) Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 145 of 443) 21. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim highestIndex As Integer = lstBox.Items.Count - 1 Dim state As String For i As Integer = 0 To highestIndex state = CStr(lstBox.Items(i)) If state.Length = 7 Then lstBox2.Items.Add(state) End If Next End Sub 22. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim numberOfStates As Integer = lstBox.Items.Count Dim i As Integer Dim foundFlag As Boolean = False Dim state As String Do Until (i = numberOfStates) Or (foundFlag = True) state = CStr(lstBox.Items(i)) If state.Length = 7 Then txtOutput.Text = state foundFlag = True End If i += 1 Loop End Sub 23. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim highestIndex As Integer = lstBox.Items.Count - 1 Dim state As String For i As Integer = 0 To highestIndex state = CStr(lstBox.Items(i)) If state.StartsWith("New") Then txtOutput.Text = state Exit For End If Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 146 of 443) 24. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim highestIndex As Integer = lstBox.Items.Count - 1 Dim state As String For i As Integer = 0 To highestIndex state = CStr(lstBox.Items(i)) If state.StartsWith("New") Then lstBox2.Items.Add(state) End If Next End Sub 25. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim highestIndex As Integer = lstBox.Items.Count - 1 Dim maxLength As Integer = 0 Dim state As String For i As Integer = 0 To highestIndex state = CStr(lstBox.Items(i)) If state.Length > maxLength Then maxLength = state.Length End If Next For i As Integer = 0 To highestIndex state = CStr(lstBox.Items(i)) If state.Length = maxLength Then lstBox2.Items.Add(state) End If Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 147 of 443) 26. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim highestIndex As Integer = lstBox.Items.Count - 1 Dim minLength As Integer = 100 Dim state As String For i As Integer = 0 To highestIndex state = CStr(lstBox.Items(i)) If state.Length < minLength Then minLength = state.Length End If Next For i As Integer = 0 To highestIndex state = CStr(lstBox.Items(i)) If state.Length = minLength Then lstBox2.Items.Add(state) End If Next End Sub 27. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim highestIndex As Integer = lstBox.Items.Count - 1 Dim state As String For i As Integer = 0 To highestIndex state = CStr(lstBox.Items(i)) If NumberOfVowels(state) = 4 Then lstBox2.Items.Add(state) End If Next End Sub Function NumberOfVowels(word As String) As Integer Dim numVowels As Integer = 0 word = word.ToUpper Dim letter As String Dim numLetters As Integer = word.Length For i As Integer = 0 To (numLetters - 1) letter = word.Substring(i, 1) If (letter = "A") Or (letter = "E") Or (letter = "I") Or (letter = "O") Or (letter = "U") Then numVowels += 1 End If Next Return numVowels End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 148 of 443) 28. Private Sub lstBox_SelectedIndexChanged(...) Handles _ lstBox.SelectedIndexChanged Dim state As String = lstBox.Text txtOutput.Text = NumberOfVowels(state) & " letters are vowels" End Sub Function NumberOfVowels(word As String) As Integer Dim numVowels As Integer = 0 word = word.ToUpper Dim letter As String Dim numLetters As Integer = word.Length For i As Integer = 0 To (numLetters - 1) letter = word.Substring(i, 1) If (letter = "A") Or (letter = "E") Or (letter = "I") Or (letter = "O") Or (letter = "U") Then numVowels += 1 End If Next Return numVowels End Function 29. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim highestIndex As Integer = lstBox.Items.Count - 1 Dim state As String Dim maxNumOfVowels = 0 For i As Integer = 0 To highestIndex state = CStr(lstBox.Items(i)) If NumberOfVowels(state) > maxNumOfVowels Then maxNumOfVowels = NumberOfVowels(state) End If Next txtOutput.Text = CStr(maxNumOfVowels) End Sub Function NumberOfVowels(word As String) As Integer Dim numVowels As Integer = 0 word = word.ToUpper Dim letter As String Dim numLetters As Integer = word.Length For i As Integer = 0 To (numLetters - 1) letter = word.Substring(i, 1) If (letter = "A") Or (letter = "E") Or (letter = "I") Or (letter = "O") Or (letter = "U") Then numVowels += 1 End If Next Return numVowels End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 149 of 443) 30. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim highestIndex As Integer = lstBox.Items.Count - 1 Dim state As String Dim numStates As Integer = 0 For i As Integer = 0 To highestIndex state = CStr(lstBox.Items(i)) If state.IndexOf(" ") <> -1 Then numStates += 1 End If Next txtOutput.Text = CStr(numStates) End Sub 31. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click txtOutput.Text = CStr(lstBox.Items(0)) End Sub 32. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim numStates As Integer = lstBox.Items.Count txtOutput.Text = CStr(lstBox.Items(numStates - 1)) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 150 of 443) 33. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click txtOutput.Text = CStr(lstBox.Items(4)) End Sub 34. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click For i As Integer = 0 To 12 lstBox2.Items.Add(lstBox.Items(i)) Next End Sub 35. Private Sub btnRecord_Click(...) Handles btnRecord.Click lstGrades.Items.Add(txtGrade.Text) txtGrade.Clear() txtGrade.Focus() End Sub Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim sum As Double = 0 Dim minGrade As Double = 100 If lstGrades.Items.Count > 0 Then For i As Integer = 0 To lstGrades.Items.Count - 1 sum += CDbl(lstGrades.Items(i)) If CDbl(lstGrades.Items(i)) < minGrade Then minGrade = CDbl(lstGrades.Items(i)) End If Next Else MessageBox.Show("You must first enter some grades.") End If txtAverage.Text = (sum / lstGrades.Items.Count).ToString("N2") txtLowest.Text = CStr(minGrade) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 151 of 443) 36. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim sum As Double = 0 Dim sum2 As Double = 0 Dim maxGrade As Double = 0 Dim aveGrade As Double Dim numGrades As Integer = lstGrades.Items.Count If lstGrades.Items.Count > 0 Then 'condition is True when ' the list box is nonempty For i As Integer = 0 To numGrades - 1 sum += CDbl(lstGrades.Items(i)) If CDbl(lstGrades.Items(i)) > maxGrade Then maxGrade = CDbl(lstGrades.Items(i)) End If Next Else MessageBox.Show("You must first enter some grades.") End If aveGrade = sum / numGrades For i As Integer = 0 To (numGrades - 1) sum2 += (CDbl(lstGrades.Items(i)) - aveGrade) ^ 2 Next txtAverage.Text = aveGrade.ToString("N") txtHighest.Text = CStr(maxGrade) txtStandardDev.Text = (Math.Sqrt(sum2 / numGrades)).ToString("N") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 152 of 443) 37. Private Sub btnRecord_Click(...) Handles btnRecord.Click lstGrades.Items.Add(txtGrade.Text) txtGrade.Clear() txtGrade.Focus() End Sub Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim sum As Double = 0 Dim maxGrade As Double = 0 Dim minGrade As Double = 100 If lstGrades.Items.Count > 0 Then For i As Integer = 0 To lstGrades.Items.Count - 1 sum += CDbl(lstGrades.Items(i)) If CDbl(lstGrades.Items(i)) > maxGrade Then maxGrade = CDbl(lstGrades.Items(i)) End If If CDbl(lstGrades.Items(i)) < minGrade Then minGrade = CDbl(lstGrades.Items(i)) End If Next Else MessageBox.Show("You must first enter some grades.") End If txtAverage.Text = (sum / lstGrades.Items.Count).ToString("N") txtRange.Text = CStr(maxGrade - minGrade) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 153 of 443) 38. Private Sub btnRecord_Click(...) Handles btnRecord.Click lstGrades.Items.Add(txtGrade.Text) txtGrade.Clear() txtGrade.Focus() End Sub Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim sum As Double = 0 Dim averageGrade As Double = 0 Dim numAboveAverage As Integer = 0 If lstGrades.Items.Count > 0 Then 'condition is True when 'the list box is nonempty For i As Integer = 0 To lstGrades.Items.Count - 1 sum += CDbl(lstGrades.Items(i)) Next Else MessageBox.Show("You must first enter some grades.") End If averageGrade = sum / lstGrades.Items.Count For i As Integer = 0 To lstGrades.Items.Count - 1 If CDbl(lstGrades.Items(i)) > averageGrade Then numAboveAverage += 1 End If Next txtAverage.Text = averageGrade.ToString("N") txtAboveAverage.Text = CStr(numAboveAverage) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 154 of 443) 39. Private Sub btnSearch_Click(...) Handles btnSearch.Click Dim letters As String = mtbFirstTwoLetters.Text.ToUpper Dim i As Integer = 49 'index of the state currently considered Do Until (CStr(lstStates.Items(i)).ToUpper <= letters) Or (i = 0) i = i - 1 Loop If CStr(lstStates.Items(i + 1)).ToUpper.StartsWith(letters) Then txtOutput.Text = CStr(lstStates.Items(i + 1)) & " begins with " & mtbFirstTwoLetters.Text & "." ElseIf CStr(lstStates.Items(0)).ToUpper.StartsWith(letters) Then txtOutput.Text = CStr(lstStates.Items(0)) & " begins with " & mtbFirstTwoLetters.Text & "." Else txtOutput.Text = "No state begins with " & mtbFirstTwoLetters.Text & "." End If End Sub 40. Private Sub txtNation_TextChanged(...) Handles txtNation.TextChanged 'Locate a nation in a list of nations. Dim letters As String = "", nation As String = "" Dim found As Boolean, i As Integer = 0 letters = txtNation.Text.ToUpper Do Until found Or i = lstNations.Items.Count If CStr(lstNations.Items(i)).ToUpper.StartsWith(letters) Then found = True lstNations.SelectedIndex = i End If i += 1 Loop If Not found Then MessageBox.Show("No nation begins with those letters.") End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 155 of 443) CHAPTER 6 PROGRAMMING PROJECTS 1. Const CAFFEINE_PER_CUP As Double = 130 Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim amount As Double = CAFFEINE_PER_CUP Dim hrs As Integer Do Until amount <= CAFFEINE_PER_CUP / 2 amount = 0.87 * amount hrs += 1 Loop txt65.Text = hrs & " hours" amount = CAFFEINE_PER_CUP For i As Integer = 1 To 24 amount = 0.87 * amount Next txtOne24.Text = amount.ToString("N") & " mg." amount = CAFFEINE_PER_CUP For i As Integer = 1 To 24 amount = 0.87 * amount + CAFFEINE_PER_CUP Next txtMany24.Text = amount.ToString("N") & " mg." End Sub 2. Private Sub btnEvaluate_Click(...) Handles btnEvaluate.Click 'Evaluate Rule of 72 Dim years As Integer Dim amt As Decimal lstOutput.Items.Clear() For intRate As Integer = 1 To 20 amt = 100 years = 0 Do While amt < 200 years += 1 amt *= CDec(1 + (intRate / 100)) Loop lstOutput.Items.Add("Interest rate: " & (intRate / 100).ToString("P0")) lstOutput.Items.Add("Rule of 72 doubling time: " & Math.Round(72 / intRate)) lstOutput.Items.Add("Actual doubling time: " & years) lstOutput.Items.Add("") Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 156 of 443) 3. Private Sub btnMaxHeight_Click(...) Handles btnMaxHeight.Click Dim h0, v0 As Double lstOutput.Items.Clear() InputData(h0, v0) lstOutput.Items.Add("The maximum height is ") lstOutput.Items.Add(HeightOfBall(h0, v0, v0 / 32) & " feet") End Sub Private Sub btnApproxTime_Click(...) Handles btnApproxTime.Click Dim h0, v0 As Double lstOutput.Items.Clear() InputData(h0, v0) lstOutput.Items.Add("The ball will hit the ground after") lstOutput.Items.Add("approximately " & TimeToHit(h0, v0) & " seconds.") End Sub Private Sub btnTable_Click(...) Handles btnTable.Click Dim h0, v0 As Double lstOutput.Items.Clear() InputData(h0, v0) ShowHeights(h0, v0) End Sub Private Sub btnQuit_Click(...) Handles btnQuit.Click Me.Close() End Sub Function HeightOfBall(h0 As Double, v0 As Double, t As Double) As Double 'Return height at time t Return h0 + v0 * t - 16 * t * t End Function Sub InputData(ByRef h0 As Double, ByRef v0 As Double) 'Input the initial height and velocity h0 = CDbl(txtInitialHeight.Text) v0 = CDbl(txtInitialVelocity.Text) End Sub Sub ShowHeights(h0 As Double, v0 As Double) 'Create table of heights Dim t, height As Double lstOutput.Items.Add(" " & "TIME" & " " & "HEIGHT") t = 0 height = HeightOfBall(h0, v0, t) Do lstOutput.Items.Add(" " & t.ToString("N") & " " & height.ToString("N1")) t += 0.25 height = HeightOfBall(h0, v0, t) Loop Until (t > 5) Or (height < 0) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 157 of 443) Function TimeToHit(h0 As Double, v0 As Double) As Double 'Determine seconds until ball hits ground Dim t As Double = 0.01 Do While HeightOfBall(h0, v0, t) > 0 t += 0.1 Loop Return t End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 158 of 443) 4. Private Sub btnStrLine_Click(...) Handles btnStrLine.Click Dim item As String = "" Dim purchYear As Integer Dim cost As Decimal, numYears As Integer InputData(item, purchYear, cost, numYears) ShowDepSchedule(item, purchYear, cost, numYears, 1) End Sub Private Sub btnDoubleDecl_Click(...) Handles btnDoubleDecl.Click Dim item As String = "" Dim purchYear As Integer Dim cost As Decimal, numYears As Integer InputData(item, purchYear, cost, numYears) ShowDepSchedule(item, purchYear, cost, numYears, 2) End Sub Sub InputData(ByRef item As String, ByRef purchYear As Integer, ByRef cost As Decimal, ByRef numYears As Integer) item = txtDesc.Text purchYear = CInt(txtYear.Text) cost = CDec(txtCost.Text) numYears = CInt(txtNumYears.Text) End Sub Sub ShowHeading(item As String, purchYear As Integer, cost As Decimal, numYears As Integer, depType As Integer) Dim method As String lstOutput.Items.Add("Description: " & item) lstOutput.Items.Add("Year of purchase: " & purchYear) lstOutput.Items.Add("Cost: " & cost.ToString("C")) lstOutput.Items.Add("Estimated life: " & numYears) If depType = 1 Then method = "straight-line" Else method = "double-declining balance" End If lstOutput.Items.Add("Method of depreciation: " & method) lstOutput.Items.Add("") End Sub Sub ShowDepSchedule(item As String, purchYear As Integer, cost As Decimal, numYears As Integer, depType As Integer) Dim depreciation, straightLineDep, totalDeprec,value As Decimal 'Display a depreciation schedule 'If using the "straight-line" method of depreciation, ' the depreciation will be constant (1/nth of original cost) 'If using the "double-declining" method of depreciation, the item will 'depreciate each year by 2/nths of its value at the beginning of the year lstOutput.Items.Clear() ShowHeading(item, purchYear, cost, numYears, depType) 'Initialize value = cost 'value will hold the current value of the item 'For the straight-line method, the depreciation will ' be constant, so we set it here outside the loop If depType = 1 Then straightLineDep = CDec((1 / numYears) * value) End If totalDeprec = 0 For yr As Integer = 1 To numYears 'Loop through n years 'Calculate the amount the item will depreciate this year If yr <> numYears Then If depType = 1 Then © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 159 of 443) 'Straight-line -- constant depreciation; 'calculated before entering loop depreciation = straightLineDep Else 'Double declining (2/nths of value at beginning of year) depreciation = CDec((2 / numYears) * value) End If Else 'In last year, depreciation is the remaining value depreciation = value End If totalDeprec += depreciation 'Show the status before and after taking depreciation lstOutput.Items.Add("Value at beginning of " & purchYear + yr - 1 & ": " & value.ToString("C")) lstOutput.Items.Add("Amount of depreciation during " & purchYear + yr - 1 & ": " & depreciation.ToString("C")) lstOutput.Items.Add("Total depreciation at end of " & purchYear + yr - 1 & ": " & totalDeprec.ToString("C")) lstOutput.Items.Add("") 'Apply the depreciation and move to next year value = value - depreciation Next yr End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 160 of 443) 5. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim word As String = txtWord.Text.ToUpper If IsTripleConsecutive(word) Then txtOutput.Text = "YES" Else txtOutput.Text = "NO" End If End Sub Function IsTripleConsecutive(word As String) As Boolean Dim n As Integer = word.Length For i As Integer = 0 To n - 3 Dim threeLetters As String = word.Substring(i, 3) If Asc(threeLetters.Substring(0, 1)) + 1 = Asc(threeLetters.Substring(1, 1)) And Asc(threeLetters.Substring(1, 1)) + 1 = Asc(threeLetters.Substring(2, 1)) Then Return True End If Next Return False End Function 6. Private Sub btnRemoveParens_Click(...) Handles btnRemoveParens.Click 'Remove parentheses and their contents from a sentence Dim sentence, letter, newSentence As String Dim parensFlag As Boolean, position As Integer sentence = txtSentence.Text newSentence = "" parensFlag = False position = 0 Do Until position > sentence.Length - 1 letter = sentence.Substring(position, 1) Select Case letter Case "(" parensFlag = True Case ")" parensFlag = False position = position + 1 Case Else If parensFlag = False Then newSentence &= letter End If End Select position += 1 Loop txtOutput.Text = newSentence End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 161 of 443) 7. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim phrase As String phrase = txtPhrase.Text If IsPalindrome(phrase) Then txtResult.Text = "YES" Else txtResult.Text = "NO" End If End Sub Function IsPalindrome(phrase As String) As Boolean Dim strippedPhrase As String = "", letter As String = "" Dim revStrippedPhrase As String = "" phrase = phrase.ToUpper For i As Integer = 0 To phrase.Length - 1 letter = phrase.Substring(i, 1) If ((letter <> " ") And (letter <> "?")) And ((letter <> Chr(34)) And (letter <> "'") And (letter <> ",") And (letter <> "!") And (letter <> ";") And (letter <> ":") And (letter <> ".")) Then strippedPhrase &= letter End If Next For i As Integer = strippedPhrase.Length - 1 To 0 Step -1 letter = strippedPhrase.Substring(i, 1) revStrippedPhrase &= letter Next If revStrippedPhrase = strippedPhrase Then Return True Else Return False End If End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 162 of 443) 8. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim balance, earlBalanceAfter15Years, earlBalanceUponRetirement, larryBalanceUponRetirement As Decimal txtDepositedEarl.Text = (15 * 5000).ToString("C") txtDepositedLarry.Text = (33 * 5000).ToString("C") 'Earl's IRA Amount balance = 0 For i As Integer = 1 To 15 balance = (1.04D * balance) + 5000 Next earlBalanceAfter15Years = balance earlBalanceUponRetirement = CDec(earlBalanceAfter15Years * ((1.04) ^ 33)) txtEarlAtRetirement.Text = earlBalanceUponRetirement.ToString("C") 'Larry's IRA Amount balance = 0 For i As Integer = 1 To 33 balance = 1.04D * balance + 5000 Next larryBalanceUponRetirement = balance txtLarryAtRetirement.Text = larryBalanceUponRetirement.ToString("C") End Sub 9. Private Sub btnValidate_Click(...) Handles btnValidate.Click 'Validate a credit card number. Dim number As String Dim sum, digit As Integer number = txtNumber.Text For i As Integer = 0 To number.Length - 1 digit = CInt(number.Substring(i, 1)) If i Mod 2 = 0 Then If digit < 5 Then sum += 2 * digit Else sum += 2 * digit - 9 End If Else sum += digit End If Next If sum Mod 10 = 0 Then txtResult.Text = "YES" Else txtResult.Text = "NO" End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 163 of 443) 10. Private Sub btnEncode_Click(...) Handles btnEncode.Click 'Encode a word using a modified Soundex system. Dim originalWord, alteredWord, codedWord, letter As String, pos, pos2 As Integer originalWord = txtWord.Text alteredWord = originalWord.Substring(0, 1).ToUpper For i As Integer = 1 To originalWord.Length - 1 Select Case originalWord.Substring(i, 1) Case "a", "e", "i", "o", "u", "y" alteredWord &= "9" Case "b", "f", "p", "v" alteredWord &= "1" Case "c", "g", "j", "k", "q", "s", "x", "z" alteredWord &= "2" Case "d", "t" alteredWord &= "3" Case "l" alteredWord &= "4" Case "m", "n" alteredWord &= "5" Case "r" alteredWord &= "6" End Select Next 'remove duplicates pos = 1 pos2 = alteredWord.Length codedWord = alteredWord.Substring(0, 1).ToUpper For i = 1 To alteredWord.Length - 2 If alteredWord.Substring(pos, 1) = alteredWord.Substring(pos + 1, 1) Then alteredWord = alteredWord.Substring(0, pos + 1) & alteredWord.Substring(pos + 2) Else pos += 1 End If Next 'strip 9s pos = alteredWord.Length - 1 For i As Integer = 1 To pos letter = alteredWord.Substring(i, 1) If letter <> "9" Then codedWord &= letter End If Next Select Case codedWord.Length Case 1 codedWord &= "000" Case 2 codedWord &= "00" Case 3 codedWord &= "0" Case Is > 4 codedWord = codedWord.Substring(0, 4) End Select txtCodedWord.Text = codedWord End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 164 of 443) 11. Private Sub btnSearch_Click(...) Handles btnSearch.Click Dim letters As String = mtbFirstTwoLetters.Text.ToUpper Dim flag As Boolean = False Dim state As String Dim first, middle, last As Integer first = 0 last = lstStates.Items.Count - 1 Do While (Not flag) And (first <= last) middle = CInt((first + last) / 2) Select Case CStr(lstStates.Items(middle)).Substring(0, 2).ToUpper Case letters state = CStr(lstStates.Items(middle)) flag = True Case Is > letters last = middle - 1 Case Is < letters first = middle + 1 End Select Loop If flag Then txtOutput.Text = state & " begins with " & mtbFirstTwoLetters.Text & "." Else txtOutput.Text = "No state begins with " & mtbFirstTwoLetters.Text & "." End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 165 of 443) CHAPTER 7 EXERCISES 7.1 1. 101 2. 99 3. Have a dessert spoon. 4. Leaf 1: sunshine Leaf 2: rain Leaf 3: the roses that bloom in the lane Leaf 4: somebody I adore 5. Yes 6. Age of United States: 240 8. Ken 9. You have a trio. (age will vary; was 240 in 2016) 10. A rook is worth more than a bishop 11. Your average is 80 12. Al Gore Gore Vidal Vidal Sassoon 13. The Artist won in 2012 14. 33 15. one,two,three 16. 1,2,3 17. 2 even numbers 18. at least one five-letter word 19. Pearl Harbor: 1941 20. Bicentennial Year: 1976 21. contains a 19th-century date 22. 2 20th-century dates 23. 6 words begin with a vowel 24. 92 100 97 25. 4 6 2 27. (a) Superior (last name in alphabetical order) (b) Erie (first name in alphabetical order) (c) Huron (first name in the array) (d) Superior (last name in the array) (e) 5 (number of names in the array) (f) Ontario (second name in the array) (g) 3 (first array subscript whose element is Erie) 28. (a) 32000 (b) 8000 (c) 23000 (d) 32000 (e) 5 (f) 95000 (g) 19000 (h) 22000 (i) 1 7. 12 (greatest surface area of one of the Great Lakes) (smallest surface area of one of the Great Lakes) (first surface area in the array) (last surface area in the array) (number of surface areas in the array) (sum of the surface areas of the five Great Lakes) (average surface area of the five Great Lakes) (third surface area in the array) (first array subscript whose element is 8000) © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. 26. SEVEN Instructor Solutions Manual (Page 166 of 443) 29. (a) 6.7 (greatest population of a New England state) (b) 0.6 (least population of a New England state) (c) 3.6 (first population in the array) (d) 1.3 (last population in the array) (e) 6 (number of numbers in the array) (f) 1.1 (fourth population in the array) (g) 3 (first array subscript whose element is 1.1) 30. (a) Vermont (last name in alphabetical order) (b) Connecticut (first name in alphabetical order) (c) Connecticut (first New England state to join the union) (d) Maine (last New England state to join the union) (e) 6 (number of New England states) (f) Connecticut (first New England state to join the union) (g) 5 (Maine was the sixth NE state to join the union) 31. (a) lstOutput.Items.Add(states.First) or lstOutput.Items.Add(states(0)) (b) For i As Integer = 0 To 12 lstOutput.Items.Add(states(i)) Next (c) lstOutput.Items.Add(states.Last) or lstOutput.Items.Add(states(49)) (d) lstOutput.Items.Add(CStr(Array.IndexOf(states, "Ohio") + 1)) (e) lstOutput.Items.Add(states(1)) (f) lstOutput.Items.Add(states(19)) (g) For i As Integer = (states.Count - 9) To (states.Count) lstOutput.Items.Add(states(i - 1)) Next 32. (a) txtOutput.Text = pres.First 'or txtOutput.Text = pres(0) (b) For i As Integer = 0 To 5 lstoutput.Items.Add(pres(i)) Next (c) txtOutput.Text = pres.Last 'or txtOutput.Text = pres(43) (d) txtOutput.Text = CStr(Array.IndexOf(pres, "James Monroe") + 1) (e) txtOutput.Text = pres(1) (f) txtOutput.Text = pres(9) (g) For i As Integer = (pres.Count - 4) To pres.Count lstoutput.Items.Add(pres(i - 1)) Next 33. Function Task(nums() As Integer) As Integer Dim sum As Integer = 0 For Each num As Integer In nums sum += num Next Return sum End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 167 of 443) 34. Function Task(nums() As Integer) As Double Dim sum As Integer = 0 For Each As Integer In nums sum += num Next Return sum / nums.Count End Function 35. Function Task(nums() As Integer) As Integer Dim maxEven As Integer = 0 For Each num As Integer In nums If (num Mod 2 = 0) And (num > maxEven) Then maxEven = num End If Next Return maxEven End Function 36. Function Task(nums() As Integer) As Integer Dim min As Integer = nums(0) For Each num As Integer In nums If num < min Then min = num End If Next Return min End Function 37. Function Task(nums() As Integer) As Integer Dim twoDigits As Integer = 0 For Each num As Integer In nums If (num > 9) And (num < 100) Then twoDigits += 1 End If Next Return twoDigits End Function 38. Function Task(nums() As Integer) As Integer Dim numEvens As Integer = 0 For Each num As Integer In nums If (num Mod 2 = 0) Then numEvens += 1 End If Next Return numEvens End Function 39. nums(3) should be changed to nums() 40. Will produce an IndexOutOfRange exception since nums.Count is greater than the upper bound of nums 41. Logic error. The values of the array elements cannot be altered inside a For Each loop. The output will be 6. 42. Integer should be changed to String. 43. lstBox.Items.Add(line.Split(" "c).Count) 44. lstBox.Items.Add(IO.File.ReadAllLines("Names.txt").Count) © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 168 of 443) 45. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim numStr() As String = IO.File.ReadAllLines("Numbers.txt") Dim nums(numStr.Count - 1) As Integer For i As Integer = 1 To (nums.Count – 1) nums(i) = CInt(numStr(i)) Next lstOutput.Items.Add("Number of integers in the file: " & nums.Count) lstOutput.Items.Add("Sum of integers in the file: " & nums.Sum) End Sub 46. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim states() As String = IO.File.ReadAllLines("SomeStates.txt") Dim orderedFlag As Boolean = True For i As Integer = 0 To states.Count - 2 If states(i + 1) < states(i) Then orderedFlag = False End If Next If orderedFlag Then txtOutput.Text = "YES" Else txtOutput.Text = "NO" End If End Sub 47. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim names() As String = IO.File.ReadAllLines("Names2.txt") Dim dups(names.Count - 1) As String Dim n As Integer = 0 'index for dups For i As Integer = 0 To names.Count - 2 If (names(i + 1) = names(i)) And (Array.IndexOf(dups, names(i)) = -1) Then dups(n) = names(i) n += 1 End If Next If n = 0 Then lstOutput.Items.Add("No duplicates.") Else For i As Integer = 0 To n - 1 lstOutput.Items.Add(dups(i)) Next End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 169 of 443) 48. Private Sub btnEvaluate_Click(...) Handles btnEvaluate.Click Dim strGrades() As String = IO.File.ReadAllLines("Final.txt") Dim grades(strGrades.Count - 1) As Double Dim ave As Double Dim counter As Integer For i As Integer = 0 To grades.Count - 1 grades(i) = CDbl(strGrades(i)) Next ave = grades.Average txtAverage.Text = ave.ToString("N") For i As Integer = 0 To grades.Count - 1 If grades(i) > ave Then counter += 1 End If Next txtAboveAve.Text = (counter / grades.Count).ToString("P") End Sub 49. Function Sum(nums() As Integer) As Integer Dim total As Integer = 0 For i As Integer = 1 To nums.Count - 1 Step 2 total += nums(i) Next Return total End Function 50. Function AreSame(a() As Integer, b() As Integer) As Boolean If a.Count <> b.Count Then Return False Else For i As Integer = 0 To a.Count - 1 If a(i) <> b(i) Then Return False End If Next End If Return True End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 170 of 443) 51. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim lines() As String = IO.File.ReadAllLines("Sonnet.txt") Dim n = lines.Count - 1 Dim numWords(n) As Integer For i As Integer = 0 To n numWords(i) = lines(i).Split(" "c).Count Next lstOutput.Items.Add("Average number of words per line: " & (numWords.Average).ToString("N2")) lstOutput.Items.Add("Total number of words: " & numWords.Sum) End Sub 52. Private Sub btnDisplay_Click( ...) Handles btnDisplay.Click Dim states() As String = IO.File.ReadAllLines("States.txt") Dim newStates(50) As String Dim n As Integer = 0 For Each state As String In states If state.StartsWith("New") Then newStates(n) = state n += 1 End If Next If n > 0 Then ReDim Preserve newStates(n - 1) End If For Each state As String In newStates lstOutput.Items.Add(state) Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 171 of 443) 53. Private Sub btnProcessEggs_Click(...) Handles btnProcessEggs.Click Dim heaviest, lightest, ounces As Double Dim jumbo, xLarge, large, med, small As Integer heaviest = 0 'can be any number lower than lightest egg lightest = 100 'can be any number greater than heaviest egg Dim strEggs() As String = IO.File.ReadAllLines("Eggs.txt") Dim eggs(strEggs.Count - 1) As Double For i As Integer = 0 To (eggs.Count – 1) eggs(i) = CDbl(strEggs(i)) Next For i As Integer = 0 To (eggs.Count – 1) ounces = eggs(i) If ounces > heaviest Then heaviest = ounces End if If ounces < lightest Then lightest = ounces End If Select Case ounces Case Is < 1.5 'too small & cannot be sold Case Is < 1.75 small += 1 Case Is < 2 med += 1 Case Is < 2.25 large += 1 Case Is < 2.5 xLarge += 1 Case Else jumbo += 1 End Select Next lstOutput.Items.Clear() lstOutput.Items.Add(jumbo & " Jumbo eggs") lstOutput.Items.Add(xLarge & " Extra Large eggs") lstOutput.Items.Add(large & " Large eggs") lstOutput.Items.Add(med & " Medium eggs") lstOutput.Items.Add(small & " Small eggs") If lightest <> 100 Then lstOutput.Items.Add("Lightest egg: " & lightest & " ounces") lstOutput.Items.Add("Heaviest egg: " & heaviest & " ounces") Else lstOutput.Items.Add("File is empty") End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 172 of 443) 54. Private Sub btnCalculate_Click( ...) Handles btnCalculate.Click Dim numbers() As String = IO.File.ReadAllLines("Data.txt") Dim nums(numbers.Count - 1) As Double For i As Integer = 0 To nums.Count - 1 nums(i) = CDbl(numbers(i)) Next Dim max As Double = nums(0) Dim min As Double = nums(0) For Each num As Double In nums If num > max Then max = num End If If num < min Then min = num End If txtRange.Text = CStr(max - min) Dim m As Double = nums.Average 'mean txtMean.Text = m.ToString("N3") Dim devs(nums.Count - 1) As Double For i As Integer = 0 To nums.Count - 1 devs(i) = (nums(i) - m) ^ 2 Next txtStDev.Text = (Math.Sqrt(devs.Average)).ToString("N3") Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 173 of 443) 55. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim strDigits() As String = IO.File.ReadAllLines("Digits.txt") Dim freq(9) As Integer For i As Integer = 0 To strDigits.Count - 1 freq(CInt(strDigits(i))) += 1 Next lstOutput.Items.Add(" Digit Frequency") For i As Integer = 0 To 9 lstOutput.Items.Add(" " & i & " " & freq(i)) Next End Sub 56. Dim pres() As String = IO.File.ReadAllLines("USPres.txt") 'Holds pres. names Private Sub btnDisplayPres_Click( ...) Handles btnDisplayPres.Click 'Display the presidents between two numbers, inclusive lstPres.Items.Clear() 'Loop from the lower number to the higher number For i As Integer = CInt(txtLowerNum.Text) To CInt(txtUpperNum.Text) lstPres.Items.Add(i & ". " & pres(i - 1)) Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 174 of 443) 57. Dim colors() As String = IO.File.ReadAllLines("Colors.txt") Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim letter As String = mtbLetter.Text.ToUpper 'mask is L lstColors.Items.Clear() For Each hue As String In colors If hue.StartsWith(letter) Then lstColors.Items.Add(hue) End If Next End Sub 58. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim colors() As String = IO.File.ReadAllLines("Colors.txt") Dim n As Integer = colors.Count - 1 For i As Integer = n To 0 Step -1 lstOutput.Items.Add(colors(i)) Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 175 of 443) 59. Dim colors() As String = IO.File.ReadAllLines("Colors.txt") Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim letter As String = mtbLetter.Text.ToUpper 'mask L lstColors.Items.Clear() For Each hue As String In SmallerArray(letter) lstColors.Items.Add(hue) Next End Sub Function SmallerArray(letter As String) As String() Dim smArray(colors.Count - 1) As String Dim counter As Integer = 0 For Each hue As String In colors If hue.StartsWith(letter) Then smArray(counter) = hue counter += 1 End If Next ReDim Preserve smArray(counter - 1) Return smArray End Function 60. Dim colors() As String = IO.File.ReadAllLines("Colors.txt") Private Sub frmColors_Load( ...) Handles MyBase.Load For i As Integer = 0 To colors.Count - 1 colors(i) = colors(i).ToUpper Next End Sub Private Sub btnDetermine_Click( ...) Handles btnDetermine.Click Dim color As String = txtColor.Text.ToUpper If IsCrayola(color) Then txtOutcome.Text = "YES" Else txtOutcome.Text = "NO" End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 176 of 443) Function IsCrayola(color As String) As Boolean If Array.IndexOf(colors, color) = -1 Then Return False Else Return True End If End Function 61. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim ages(43), numPres As Integer Dim temp() As String = IO.File.ReadAllLines("AgesAtInaugural.txt") For i As Integer = 0 To 43 ages(i) = CInt(temp(i)) If ages(i) < 50 Then numPres += 1 End If Next txtNumber.Text = CStr(numPres) End Sub 62. Private Sub btnScores_Click( ...) Handles btnScores.Click 'Read data from a file and display their frequencies Dim scores() As String = IO.File.ReadAllLines("Scores.txt") Dim frequencies(4) As Integer 'Stores the results For i As Integer = 0 To scores.Count - 1 'Increment the frequency element that belongs to the number 'Divide by 10, and get the integer part. frequencies(CInt(Int(CInt(scores(i)) / 10))) += 1 Next lstOutput.Items.Add("Interval" & " " & "Frequency") lstOutput.Items.Add("0 to 9" & " " & frequencies(0)) For i As Integer = 1 To 4 lstOutput.Items.Add((i * 10) & " to " & ((i + 1) * 10) - 1 & " " & frequencies(i)) Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 177 of 443) 63. Dim grades(99) As Integer Dim numGrades As Integer 'stores grades 'number of grades stored Private Sub btnRecord_Click(...) Handles btnRecord.Click 'Add a score to the array 'If no more room, then display error message. If numGrades >= 100 Then MessageBox.Show("100 scores have been entered.", "No more room.") Else grades(numGrades) = CInt(txtScore.Text) numGrades += 1 lstOutput.Items.Clear() txtScore.Clear() txtScore.Focus() End If End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click 'Display average of grades and the number of above average grades Dim temp() As Integer = grades ReDim Preserve temp(numGrades - 1) lstOutput.Items.Clear() lstOutput.Items.Add("The average grade is " & (temp.Average).ToString("N2") & ".") lstOutput.Items.Add(NumAboveAverage(temp) & " students scored above the average.") End Sub Function NumAboveAverage(temp() As Integer) As Integer 'Count the number of scores above the average grade Dim avg As Double = temp.Average Dim num As Integer = 0 For Each grade In temp If grade > avg Then num += 1 End If Next Return num End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 178 of 443) 64. Private Sub btnAnalyze_Click(...) Handles btnAnalyze.Click 'Determine whether the sentence is a word palindrome Dim sentence = txtSentence.Text.ToUpper sentence = sentence.Replace(".", "") 'Delete any periods sentence = sentence.Replace(",", "") 'Delete any commas sentence = sentence.Replace(";", "") 'Delete any semicolons sentence = sentence.Replace(":", "") 'Delete any colons Dim words() As String = sentence.Split(" "c) If WordPalindrome(words) Then txtResult.Text = "Word palindrome" Else txtResult.Text = "Not a word palindrome." End If End Sub Function WordPalindrome(words() As String) As Boolean 'Analyze an array of words to see if it came from a word palindrome Dim numWords As Integer = words.Count Dim ub As Integer = words.Count - 1 For i As Integer = 0 To ((numWords \ 2) - 1) If words(i).ToUpper <> words(ub - i).ToUpper Then Return False End If Next Return True End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 179 of 443) 65. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click If IsChainLink(txtSentence.Text) Then txtOutput.Text = "This sentence is a chain-link sentence." Else txtOutput.Text = "This sentence is not a chain-link sentence." End If End Sub Function IsChainLink(sentence As String) As Boolean sentence = sentence.Replace(",", "") 'Delete any commas. sentence = sentence.Replace(":", "") 'Delete any colons. sentence = sentence.Replace(";", "") 'Delete any semicolons. Dim words() As String = sentence.Split(" "c), ending As String = "" For i As Integer = 0 To words.Count - 2 If (words(i).Length < 2) Or (words(i + 1).Length < 2) Then Return False 'If any word has is less than two letters. End If ending = words(i).Substring(words(i).Length - 2).ToUpper If ending <> words(i + 1).Substring(0, 2).ToUpper Then Return False 'If ending does not match beginning of next word. End If Next Return True 'If all words are ok, then it is a chain-link sentence. End Function 66. Dim days(6) As String Dim dt As Date = #1/1/2017# 'Sunday For i As Integer = 0 To 6 days(i) = dt.ToString("D").Substring(0, 3) dt = dt.AddDays(1) Next 67. Dim mnths(11) As String Dim dt As Date = #1/1/2017# For i As Integer = 0 To 11 Dim n As Integer n = dt.ToString("D").IndexOf(",") mnths(i) = dt.ToString("D").Substring(n + 2, 3) dt = dt.AddMonths(1) Next EXERCISES 7.2 1. 5 7 7. 103 2. Houston have 8. RACECAR KAYAK 3. going offer can't 9. 8 4. 1492 1776 5. 6 10. Upscale © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. 6. 9 Instructor Solutions Manual (Page 180 of 443) 11. 3 students have a grade of 100 13. 15 12 12. UNSAVORY 14. events Course 15. The average after dropping the lowest grade is 80 16. 274 278 279 Ramera Funk McNulty 17. 37 is a prime number 18. New York is not in New England. 19. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim nums() As Integer = {3, 5, 8, 10, 21} Dim query = From num In nums Where num Mod 2 = 0 Select num txtOutput.Text = query.count & " even numbers" End Sub 20. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim words() As String = {"When", "in", "the", "course", "of", "human", "events"} Dim query = From word In words Where word.Length = 5 Select word If query.Count > 0 Then txtOutput.Text = "at least one five-letter word" Else txtOutput.Text = "no five-letter words" End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 181 of 443) 21. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim dates() As String = IO.File.ReadAllLines("Dates.txt") Dim query = From yr In dates Where (CInt(yr) >= 1800) And (CInt(yr) <= 1899) Select yr If query.Count > 0 Then txtOutput.Text = "contains a 19th century date" Else txtOutput.Text = "does not contains a 19th century date" End If End Sub 22. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim dates() As String = IO.File.ReadAllLines("Dates.txt") Dim query = From yr In dates Where (CInt(yr) >= 1900) Select yr txtOutput.Text = query.Count & " twentieth century dates" End Sub 23. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim nums() As Integer = {2, 6, 4} Dim query = From num In nums Order By Array.IndexOf(nums, num) Descending For Each num As Integer In query lstOutput.Items.Add(num) Next End Sub 24. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim speech() As String = {"Four", "score", "and", "seven", "years", "ago"} Dim query = From word In speech Select word.ToUpper speech = query.ToArray txtOutput.Text = speech(3) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 182 of 443) 25. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim teams() As String = IO.File.ReadAllLines("SBWinners.txt") Dim query = From team In teams Order By team Ascending Distinct For Each team As String In query lstOutput.Items.Add(team) Next End Sub 26. Dim teams() As String = IO.File.ReadAllLines("SBWinners.txt") Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query = From team In teams Order By NumberOfWins(team) Descending, team Ascending Select NumberOfWins(team) & " " & team Distinct For Each result As String In query lstOutput.Items.Add(result) Next End Sub Function NumberOfWins(club As String) As Integer Dim query = From team In teams Where team = club Select team Return query.Count End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 183 of 443) 27. Dim teamNames() As String = IO.File.ReadAllLines("SBWinners.txt") Private Sub btnDetermine_Click(...) Handles btnDetermine.Click 'Display the number of Super Bowls won by the team in the text box Dim query = From team In teamNames Where team.ToUpper = txtName.Text.ToUpper Select team txtNumWon.Text = CStr(query.Count) End Sub 28. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim teams() As String = IO.File.ReadAllLines("SBWinners.txt") Dim query = From team In teams Where team.StartsWith("B") Order By team Ascending Distinct For Each team As String In query lstOutput.Items.Add(team) Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 184 of 443) 29. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim word1 As String = txtFirstWord.Text Dim word2 As String = txtSecondWord.Text If AreAnagrams(word1, word2) Then txtOutput.Text = "ARE ANAGRAMS" Else txtOutput.Text = "NOT ANAGRAMS" End If End Sub Function AreAnagrams(word1 As String, word2 As String) As Boolean If word1.Length <> word2.Length Then Return False Else Dim n = word1.Length - 1 Dim w1(n), w2(n) As String For i As Integer = 0 To n w1(i) = word1.Substring(i, 1) w2(i) = word2.Substring(i, 1) Next Dim query1 = From letter In w1 Order By letter Select letter.ToUpper Dim query2 = From letter In w2 Order By letter Select letter.ToUpper For i As Integer = 0 To n If query1.ToArray(i) <> query2.ToArray(i) Then Return False End If Next Return True End If End Function 30. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query1 = From grade In IO.File.ReadAllLines("Final.txt") Select CInt(grade) Dim avg As Double = query1.Average Dim query2 = From grade In IO.File.ReadAllLines("Final.txt") Where CInt(grade) > avg Select grade txtAverage.Text = avg.ToString("N") txtAboveAve.Text = (query2.Count / query1.Count).ToString("P") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 185 of 443) 31. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim grades(4) As Integer For i As Integer = 0 To 4 grades(i) = CInt(InputBox("Enter grade #" & (i + 1), "Grades")) Next Dim query = From grade In grades Order By grade Descending Select grade grades = query.ToArray ReDim Preserve grades(2) 'lop off lowest two grades txtOutput.Text = CStr(grades.Average) End Sub 32. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim n As Integer = CInt(InputBox("Enter a positive integer.")) Dim nums(n - 1) As Double For i As Integer = 0 To (n – 1) nums(i) = CDbl(InputBox("Enter a measurement.")) Next txtMedian.Text = CStr(Median(nums)) End Sub Function Median(grades() As Double) As Double 'Use LINQ to sort the grades Dim query = From grade In grades Order By grade Ascending Select grade grades = query.ToArray 'grades have been sorted Dim n As Integer If (grades.Count Mod 2 <> 0) Then 'case where grades.Count is odd n = CInt((grades.Count - 1) / 2) Return grades(n) Else 'case where grades.count is even n = CInt((grades.Count / 2) - 1) Return (grades(n) + grades(n + 1)) / 2 End If End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 186 of 443) 33. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim states() As String = IO.File.ReadAllLines("States.txt") ReDim Preserve states(12) Dim query = From state In states Order By state Select state For Each state As String In query lstOutput.Items.Add(state) Next End Sub 34. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query = From pres In IO.File.ReadAllLines("USPres.txt") Let lastName = pres.Split(" "c).Last Order By lastName Select pres For Each pres As String In query lstOutput.Items.Add(pres) Next Distinct End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 187 of 443) 35. Dim nations() As String = IO.File.ReadAllLines("Nations.txt") Private Sub frmNations_Load(...) Handles MyBase.Load lstNations.DataSource = nations lstNations.SelectedItem = Nothing End Sub Private Sub txtNations_TextChanged(...) Handles txtNation.TextChanged Dim query = From nation In nations Where nation.StartsWith(txtNation.Text) Select nation lstNations.DataSource = query.ToList lstNations.SelectedItem = Nothing End Sub Private Sub lstNations_Click(...) Handles lstNations.Click txtNation.Text = lstNations.Text End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 188 of 443) 36. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query = From word In IO.File.ReadAllLines("Words.txt") Let vowels = NumberOfVowels(word.ToUpper) Order By vowels Descending, word.Length Descending,word Ascending Select vowels & " " & word For Each item As String In query lstOutput.Items.Add(item) Next End Sub Function NumberOfVowels(word As String) As Integer Dim num As Integer = 0 If word.IndexOf("A") <> -1 Then num += 1 End If If word.IndexOf("E") <> -1 Then num += 1 End If If word.IndexOf("I") <> -1 Then num += 1 End If If word.IndexOf("O") <> -1 Then num += 1 End If If word.IndexOf("U") <> -1 Then num += 1 End If Return num End Function Private Sub lstNations_Click(...) Handles lstNations.Click txtNation.Text = lstNations.Text End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 189 of 443) 37. Private Sub btnSort_Click(...) Handles btnSort.Click 'ListBox1.Sorted = True Dim n As Integer = lstOriginalList.Items.Count - 1 Dim numbers(n) As Integer For i As Integer = 0 To n numbers(i) = CInt(lstOriginalList.Items(i)) Next Array.Sort(numbers) For i = 0 To n lstSortedList.Items.Add(numbers(i)) Next End Sub 38. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim lines() As String = IO.File.ReadAllLines("Sonnet.txt") Dim n = lines.Count - 1 Dim words() As String Dim numWords As Integer For i As Integer = 0 To n words = lines(i).Split(" "c) For j = 0 To words.Count - 1 words(j) = words(j).ToLower words(j) = StripEndPunctuation(words(j)) lstOutput.Items.Add(words(j)) Next Next numWords = lstOutput.Items.Count Dim wordsArray(numWords - 1) As String For i As Integer = 0 To numWords - 1 wordsArray(i) = CStr(lstOutput.Items(i)) Next Dim wordQuery = From word In wordsArray Distinct txtAnswer.Text = CStr(wordQuery.Count) End Sub Function StripEndPunctuation(word As String) As String Dim character As String character = word.Substring(Len(word) - 1) If Asc(character) >= 97 And Asc(character) <= 122 Then Return word Else Return word.Substring(0, Len(word) - 1) End If End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 190 of 443) 39. Private Sub btnFind_Click(...) Handles btnDisplay.Click Dim states() As String = IO.File.ReadAllLines("StatesBFNC.txt") Dim data(3), line, flowers(49) As String For i As Integer = 0 To (states.Count - 1) line = states(i) data = line.Split(","c) flowers(i) = data(2) Next Dim query = From flr In flowers Order By flr.Length Ascending Select flr Distinct lstFlowers.DataSource = query.ToArray lstFlowers.SelectedIndex = -1 txtNumber.Text = CStr(lstFlowers.Items.Count) End Sub 40. Private Sub btnFind_Click(...) Handles btnFind.Click Dim states() As String = IO.File.ReadAllLines("StatesBFNC.txt") Dim query = From st In states Let data = st.Split(","c) Where data(4).Substring(0, 1) = data(0).Substring(0, 1) Order By st Ascending Select data(4) & ", " & data(0) lstResults.DataSource = query.ToList lstResults.SelectedItem = Nothing End Sub EXERCISES 7.3 1. The area of a football field is 19200 square yards. 2. USC is 133 years old. (answers will vary; age in 2013 was 133) 3. Duke was founded in NC in 1838. 4. Stanford was founded in CA in 1885. 5. heights are same 170 6. Wage for John Q. Public: $1,100.00 7. Joe: 88 Moe: 90 Roe: 95 8. Not eligible to participate in the health plan. © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 191 of 443) 9. Mr. President lives in Washington, DC 10. Hannah Jones earned $800.00 11. In the event procedure, peace should be prize.peace and yr should be prize.yr. 12. The statement lstOutput.Items.Add(minimum) should be replaced with either lstOutput.Items.Add(minimum.a) or lstOutput.Items.Add(minimum.b), or both. 13. The condition (game1 > game2) is not valid. Structures can only be compared one field at a time. 14. person1.name = "Michael" person1.stats.height = 71 person1.stats.weight = 190 person2.name = "Jacob" person2.stats.height = 70 person2.stats.weight = 175 If (person1.stats.height > person2.stats.height) And (person1.stats.weight > person2.stats.weight) Then txtOutput.Text = person1.name & " is bigger than " & person2.name End If 15. The cities in Texas, along with their populations. The cities are ordered by the sizes of their populations beginning with the most populous city. 16. The cities in Texas, along with their population growth from 2000 2010. The cities are ordered by the magnitude of their growths beginning with the city experiencing the greatest growth. Then the greatest population growth of these cites is displayed. 17. The population growth of Phoenix from 2000 to 2010. 18. The sum of the populations of the ten largest cities. © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 192 of 443) 19. Structure State Dim name As String Dim abbreviation As String Dim area As Double Dim pop As Double End Structure Dim states() As State Private Sub frmStates_Load(...) Handles MyBase.Load Dim stateRecords() As String = IO.File.ReadAllLines("USStates.txt") Dim n As Integer = stateRecords.Count - 1 ReDim states(n) Dim line As String Dim data() As String For i As Integer = 0 To n line = stateRecords(i) data = line.Split(","c) states(i).name = data(0) states(i).abbreviation = data(1) states(i).area = CDbl(data(2)) states(i).pop = CDbl(data(3)) Next End Sub Private Sub btnFind_Click(...) Handles btnFind.Click Dim stateAbbr As String = mtbAbbrev.Text.ToUpper Dim query = From state In states Where state.abbreviation = stateAbbr Select state.name, state.area txtOutput.Text = "The area of " & query.First.name & " is " & (query.First.area).ToString("N0") & " sq. miles." End Sub 20. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query = From line In IO.File.ReadAllLines("USStates.txt") Let name = line.Split(","c)(0).ToUpper Let abbrev = line.Split(","c)(1) Where Not name.StartsWith(abbrev) Order By name Ascending Select abbrev, name dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("abbrev").HeaderText = "State Abbreviation" dgvOutput.Columns("name").HeaderText = "State" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 193 of 443) 21. Structure State Dim name As String Dim abbreviation As String Dim area As Double Dim pop As Double End Structure Dim states() As State Private Sub frmStates_Load(...) Handles MyBase.Load Dim stateRecords() As String = IO.File.ReadAllLines("USStates.txt") Dim n As Integer = stateRecords.Count - 1 ReDim states(n) Dim line As String Dim data() As String For i As Integer = 0 To n line = stateRecords(i) data = line.Split(","c) states(i).name = data(0) states(i).abbreviation = data(1) states(i).area = CDbl(data(2)) states(i).pop = CDbl(data(3)) Next End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query = From state In states Let density = state.pop / state.area Let formattedDensity = density.ToString("N2") Order By density Descending Select state.name, formattedDensity dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("name").HeaderText = "State" dgvOutput.Columns("formattedDensity").HeaderText = "People per Square Mile" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 194 of 443) 22. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim states() As String = IO.File.ReadAllLines("USStates.txt") Dim query1 = From line In states Let area = CInt(line.Split(","c)(2)) Select area Dim totalArea = query1.Sum Dim query2 = From line In states Let name = line.Split(","c)(0) Let area = CInt(line.Split(","c)(2)) Let percentArea = (area / totalArea).ToString("P") Order By area Descending Select name, percentArea dgvOutput.DataSource = query2.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("name").HeaderText = "State" dgvOutput.Columns("percentArea").HeaderText = "Percentage of Total Area" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 195 of 443) 23. Structure Player Dim name As String Dim team As String Dim atBats As Integer Dim hits As Integer End Structure Dim players() As Player Private Sub frmBaseball_Load(...) Handles MyBase.Load Dim playerStats() As String = IO.File.ReadAllLines("Baseball.txt") Dim n As Integer = playerStats.Count - 1 ReDim players(n) Dim line As String Dim data() As String For i As Integer = 0 To n line = playerStats(i) data = line.Split(","c) players(i).name = data(0) players(i).team = data(1) players(i).atBats = CInt(data(2)) players(i).hits = CInt(data(3)) Next Dim query = From person In players Order By person.team Ascending Select person.team Distinct lstTeams.DataSource = query.ToList End Sub Private Sub lstTeams_SelectedIndexChanged(...) Handles _ lstTeams.SelectedIndexChanged Dim selectedTeam = lstTeams.Text Dim query = From person In players Where person.team = selectedTeam Order By person.hits Descending Select person.name, person.hits dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("name").HeaderText = "Player" dgvOutput.Columns("hits").HeaderText = "Hits" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 196 of 443) 24. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query = From line In IO.File.ReadAllLines("Baseball.txt") Let team = line.Split(","c)(1) Order By team Ascending Select team Distinct lstOutput.DataSource = query.ToList lstOutput.SelectedItem = Nothing End Sub 25. Structure Player Dim name As String Dim team As String Dim atBats As Integer Dim hits As Integer End Structure Dim players() As Player Private Sub frmBaseball_Load(...) Handles MyBase.Load Dim playerStats() As String = IO.File.ReadAllLines("Baseball.txt") Dim n As Integer = playerStats.Count - 1 ReDim players(n) Dim line As String Dim data() As String For i As Integer = 0 To n line = playerStats(i) data = line.Split(","c) players(i).name = data(0) players(i).team = data(1) players(i).atBats = CInt(data(2)) players(i).hits = CInt(data(3)) Next End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query = From person In players Let ave = person.hits / person.atBats Select ave Dim best As Double = query.Max txtBestAverage.Text = best.ToString("N3") Dim query2 = From person In players Where person.hits / person.atBats = best Select person.name, person.team dgvOutput.DataSource = query2.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("name").HeaderText = "Player" dgvOutput.Columns("team").HeaderText = "Team" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 197 of 443) 26. Dim baseball() As String = IO.File.ReadAllLines("Baseball.txt") Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query = From line In baseball Let fullName = line.Split(","c)(0) Let team = line.Split(","c)(1) Let atBats = CInt(line.Split(","c)(2)) Let hits = CInt(line.Split(","c)(3)) Let firstName = fullName.Split(" "c).First Let lastName = fullName.Split(" "c).Last Let ave = (hits / atBats).ToString("N3").Substring(1, 4) Where team.ToUpper = txtTeam.Text.ToUpper Order By lastName, firstName Select fullName, ave dgvPlayers.DataSource = query.ToList dgvPlayers.CurrentCell = Nothing dgvPlayers.Columns("fullName").HeaderText = "PLAYER" dgvPlayers.Columns("ave").HeaderText = "BATTING AVERAGE" End Sub 27. Structure Pioneer Dim name As String Dim accomplishment As String End Structure Dim pioneers() As Pioneer Private Sub frmPioneers_Load() Handles MyBase.Load 'Place the data for each college into the array schools. Dim people() = IO.File.ReadAllLines("Pioneers.txt") Dim n As Integer = people.Count - 1 ReDim pioneers(n) Dim line As String 'holds data for a single college Dim data() As String For i As Integer = 0 To n line = people(i) data = line.Split(","c) pioneers(i).name = data(0) pioneers(i).accomplishment = data(1) lstPioneers.Items.Add(pioneers(i).name) Next End Sub Private Sub lstPioneers_SelectedIndexChanged(...) Handles _ lstPioneers.SelectedIndexChanged txtAccomplishment.Text = pioneers(lstPioneers.SelectedIndex).accomplishment End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 198 of 443) 28. Dim justices() As String = IO.File.ReadAllLines("Justices.txt") Private Sub frmJustices_Load(...) Handles MyBase.Load Dim query = From pres In IO.File.ReadAllLines("USPres.txt") Select pres For Each president In query lstPres.Items.Add(president) Next End Sub Private Sub lstPres_SelectedIndexChanged(...) Handles _ lstPres.SelectedIndexChanged Dim query = From line In justices Let firstName = line.Split(","c)(0) Let lastName = line.Split(","c)(1) Let pres = line.Split(","c)(2) Let yrAppointed = CInt(line.Split(","c)(4)) Let yrLeft = CInt(line.Split(","c)(5)) Let yrs = YearsServed(yrAppointed, yrLeft) Where pres = lstPres.Text Order By yrs Descending Select firstName & " " & lastName lstOutput.DataSource = query.ToList lstOutput.SelectedItem = Nothing End Sub Function YearsServed(enter As Integer,leave As Integer) As Integer If leave = 0 Then Return (Now.Year - enter) Else Return (leave - enter) End If End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 199 of 443) 29. Structure Justice Dim firstName As String Dim lastName As String Dim apptPres As String Dim state As String 'state abbreviation Dim yrAppointed As Integer Dim yrLeft As Integer End Structure Dim justices() As Justice Private Sub frmJustices_Load(...) Handles MyBase.Load Dim justiceRecords() As String = IO.File.ReadAllLines("Justices.txt") Dim n As Integer = justiceRecords.Count - 1 ReDim justices(n) Dim line As String Dim data() As String For i As Integer = 0 To n line = justiceRecords(i) data = line.Split(","c) justices(i).firstName = data(0) justices(i).lastName = data(1) justices(i).apptPres = data(2) justices(i).state = data(3) justices(i).yrAppointed = CInt(data(4)) justices(i).yrLeft = CInt(data(5)) Next End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query = From person In justices Where person.yrLeft = 0 Order By person.yrAppointed Select person.firstName & " " & person.lastName lstOutput.DataSource = query.ToList lstOutput.SelectedItem = Nothing End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 200 of 443) 30. Private Sub btnDisolay_Click(...) Handles btnDisolay.Click Dim query = From line In IO.File.ReadAllLines("Justices.txt") Let data = line.Split(","c) Let firstName = data(0) Let lastName = data(1) Let pres = data(2) Let yrAppointed = CInt(data(4)) Let yrLeft = CInt(data(5)) Let fullName = firstName & " " & lastName Where (yrLeft >= 1980) And (yrAppointed < 1980) Order By yrAppointed Select fullName, pres dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("fullName").HeaderText = "Justice" dgvOutput.Columns("pres").HeaderText = "Appointing President" End Sub 31. Structure Justice Dim firstName As String Dim lastName As String Dim apptPres As String Dim state As String 'state abbreviation Dim yrAppointed As Integer Dim yrLeft As Integer End Structure Dim justices() As Justice © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 201 of 443) Private Sub frmJustices_Load(...) Handles MyBase.Load Dim justiceRecords() As String = IO.File.ReadAllLines("Justices.txt") Dim n As Integer = justiceRecords.Count - 1 ReDim justices(n) Dim line As String Dim data() As String For i As Integer = 0 To n line = justiceRecords(i) data = line.Split(","c) justices(i).firstName = data(0) justices(i).lastName = data(1) justices(i).apptPres = data(2) justices(i).state = data(3) justices(i).yrAppointed = CInt(data(4)) justices(i).yrLeft = CInt(data(5)) Next End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query = From person In justices Where person.state = mtbState.Text Let fullName = person.firstName & " " & person.lastName Let yrs = YearsServed(person.yrAppointed, person.yrLeft) Let presLastName = person.apptPres.Split(" "c).Last Order By person.yrAppointed Select fullName, presLastName, yrs If query.Count = 0 Then MessageBox.Show("No justices appointed from that state.", "NONE") mtbState.Focus() Else dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("fullName").HeaderText = "Justice" dgvOutput.Columns("presLastName").HeaderText = "Appointing President" dgvOutput.Columns("yrs").HeaderText = "Years Served" End If End Sub Function YearsServed(enter As Integer, leave As Integer) As Integer If leave = 0 Then Return (Now.Year - enter) Else Return (leave - enter) End If End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 202 of 443) 32. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim people() As String = IO.File.ReadAllLines("SportsStars.txt") Dim query = From person In people Let data = person.Split(","c) Let name = data(0) Let d = CDate(data(3)) Where d.ToString("D").StartsWith("Sunday") Select name lstOutput.DataSource = query.ToList lstOutput.SelectedItem = Nothing End Sub 33. Structure FamousPerson Dim name As String Dim sport As String Dim nickname As String Dim dateOfBirth As Date End Structure Dim famousPersons() As FamousPerson Private Sub frmFamous_Load(...) Handles MyBase.Load Dim people() As String = IO.File.ReadAllLines("SportsStars.txt") Dim n As Integer = people.Count - 1 ReDim famousPersons(n) Dim line As String Dim data(3) As String For i As Integer = 0 To n line = people(i) data = line.Split(","c) famousPersons(i).name = data(0) famousPersons(i).dateOfBirth = CDate(data(3)) Next End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query = From person In famousPersons Where (person.dateOfBirth >= #1/1/1940#) And (person.dateOfBirth < #1/1/1950#) Select person.name lstOutput.DataSource = query.ToList lstOutput.SelectedItem = Nothing End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 203 of 443) 34. Structure Person Dim name As String Dim sport As String Dim nickname As String Dim dateOfBirth As Date End Structure Dim people() As Person Private Sub frmFamous_Load(...) Handles MyBase.Load 'Place the data for each person into the array people. Dim group() As String = IO.File.ReadAllLines("SportsStars.txt") Dim n As Integer = group.Count - 1 ReDim people(n) Dim data() As String For i As Integer = 0 To n data = group(i).Split(","c) people(i).name = data(0) people(i).sport = data(1) people(i).nickname = data(2) people(i).dateOfBirth = CDate(data(3)) Next End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query = From individual In people Order By individual.dateOfBirth Ascending Select individual.name, individual.sport, individual.nickname, individual.dateOfBirth dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("name").HeaderText = "Name" dgvOutput.Columns("sport").HeaderText = "Sport" dgvOutput.Columns("nickname").HeaderText = "Nickname" dgvOutput.Columns("dateOfBirth").HeaderText = "Birth Date" dgvOutput.CurrentCell = Nothing End Sub 35. Structure Person Dim name As String Dim sport As String Dim nickname As String Dim dateOfBirth As Date End Structure Dim people() As Person © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 204 of 443) Private Sub frmFamous_Load(...) Handles MyBase.Load 'Place the data for each person into the array people. Dim group() As String = IO.File.ReadAllLines("SportsStars.txt") Dim n As Integer = group.Count - 1 ReDim people(n) Dim data() As String For i As Integer = 0 To n data = group(i).Split(","c) people(i).name = data(0) people(i).nickname = data(2) people(i).dateOfBirth = CDate(data(3)) Next End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query = From individual In people Let dayOfBirth = DayOfWeek(individual.dateOfBirth) Where individual.dateOfBirth.AddYears(50) <= Today And individual.dateOfBirth.AddYears(60) > Today Select individual.name, individual.nickname, dayOfBirth dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("name").HeaderText = "Name" dgvOutput.Columns("nickname").HeaderText = "Nickname" dgvOutput.Columns("dayOfBirth").HeaderText = "Day of Birth" End Sub Function DayOfWeek(dt As Date) As String Dim d1 As String = dt.ToString("D") Dim d2() As String = d1.Split(","c) Return d2.First End Function 36. Structure Person Dim name As String Dim sport As String Dim nickname As String Dim dateOfBirth As Date End Structure Dim people() As Person Private Sub frmFamous_Load(...) Handles MyBase.Load 'Place the data for each person into the array people. Dim group() As String = IO.File.ReadAllLines("SportsStars.txt") Dim n As Integer = group.Count - 1 ReDim people(n) © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 205 of 443) Dim data() As String For i As Integer = 0 To n data = group(i).Split(","c) people(i).name = data(0) people(i).sport = data(1) people(i).nickname = data(2) people(i).dateOfBirth = CDate(data(3)) Next End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click lstStars.Items.Clear() If radBasketball.Checked Then For Each athlete In people If athlete.sport = "basketball" Then lstStars.Items.Add(athlete.name & " (" & athlete.nickname & ")") End If Next End If If radBaseball.Checked Then For Each athlete In people If athlete.sport = "baseball" Then lstStars.Items.Add(athlete.name & " (" & athlete.nickname & ")") End If Next End If If radFootball.Checked Then For Each athlete In people If athlete.sport = "football" Then lstStars.Items.Add(athlete.name & " (" & athlete.nickname & ")") End If Next End If If radGolf.Checked Then For Each athlete In people If athlete.sport = "golf" Then lstStars.Items.Add(athlete.name & " (" & athlete.nickname & ")") End If Next End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 206 of 443) 37. Structure Person Dim name As String Dim sport As String Dim nickname As String Dim dateOfBirth As Date End Structure Dim people() As Person Private Sub frmStars_Load(...) Handles MyBase.Load 'Place the data for each person into the array people. Dim group() As String = IO.File.ReadAllLines("SportsStars.txt") Dim n As Integer = group.Count - 1 ReDim people(n) Dim data() As String For i As Integer = 0 To n data = group(i).Split(","c) people(i).name = data(0) people(i).sport = data(1) people(i).nickname = data(2) people(i).dateOfBirth = CDate(data(3)) lstStars.Items.Add(people(i).name) Next End Sub Private Sub lstStars_SelectedIndexChanged(...) Handles _ lstStars.SelectedIndexChanged Dim n As Integer n = lstStars.SelectedIndex txtSport.Text = CStr(people(n).sport) txtNickname.Text = CStr(people(n).nickname) txtBirthDate.Text = (people(n).dateOfBirth).ToString("D") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 207 of 443) 38. Structure PresCollege Dim name As String Dim collegeAttended As String End Structure Dim presidents() As PresCollege Private Sub frmPrescolleges_Load(...) Handles MyBase.Load 'Place the data for each president into the array preColl. Dim presColl() As String = IO.File.ReadAllLines("PresColleges.txt") Dim n As Integer = presColl.Count - 1 ReDim presidents(n) Dim line As String 'holds data for a single president Dim data(1) As String For i As Integer = 0 To n line = presColl(i) data = line.Split(","c) presidents(i).name = data(0) presidents(i).collegeAttended = data(1) Next Dim query = From pres In presidents Select pres.collegeAttended Order By collegeAttended Distinct For Each college As String In query lstColleges.Items.Add(college) Next End Sub Private Sub lstColleges_SelectedIndexChanged(...) Handles _ lstColleges.SelectedIndexChanged lstPresidents.Items.Clear() Dim query = From PnC In presidents Where PnC.collegeAttended = CStr(lstColleges.SelectedItem) Select PnC.name For Each pres As String In query lstPresidents.Items.Add(pres) Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 208 of 443) 39. Structure Pictures Dim name As String Dim genre As String End Structure Dim films() As Pictures Private Sub frmOscars_Load(...) Handles MyBase.Load 'Place the data for each picture into the array films. Dim flicks() As String = IO.File.ReadAllLines("Oscars.txt") Dim n As Integer = flicks.Count - 1 ReDim films(n) Dim line As String 'holds data for a single film Dim data(1) As String For i As Integer = 0 To n line = flicks(i) data = line.Split(","c) films(i).name = data(0) films(i).genre = data(1) Next Dim query = From pic In films Select pic.genre Distinct For Each film As String In query lstGenre.Items.Add(film) Next End Sub Private Sub lstGenre_SelectedIndexChanged(...) Handles _ lstGenre.SelectedIndexChanged lstFilms.Items.Clear() Dim query = From pic In films Where pic.genre = CStr(lstGenre.SelectedItem) Select pic.name For Each film As String In query lstFilms.Items.Add(film) Next End Sub 40. Structure Pictures Dim name As String Dim genre As String End Structure © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 209 of 443) Dim films() As Pictures Private Sub frmOscars_Load(...) Handles MyBase.Load 'Place the data for each ppicture into the array films. Dim flicks() As String = IO.File.ReadAllLines("Oscars.txt") Dim n As Integer = flicks.Count - 1 ReDim films(n) Dim line As String 'holds data for a single film Dim data(1) As String For i As Integer = 0 To n line = flicks(i) data = line.Split(","c) films(i).name = data(0) films(i).genre = data(1) Next End Sub Private Sub btnFind_Click(...) Handles btnFind.Click Dim n As Integer = CInt(txtNumber.Text) If n >= 1928 And n <= 2014 Then txtName.Text = films(n - 1928).name txtGenre.Text = films(n - 1928).genre Else MessageBox.Show("Year must be between 1928 and 2014.", "Incorrect Number") End If End Sub 41. Structure Stock Dim company As String Dim symbol As String Dim exchange As String Dim industry As String Dim price2013 As Decimal 'price at end of 2013 Dim price2014 As Decimal 'price at end of 2014 Dim earningsPerShare As Decimal Dim dividend As Decimal End Structure Dim stocks(29) As Stock Private Sub frmDOW_Load(...) Handles MyBase.Load Dim line As String Dim data(7) As String Dim securities() As String = IO.File.ReadAllLines("DOW2014.txt") For i As Integer = 0 To 29 line = securities(i) data = line.Split(","c) stocks(i).company = data(0) stocks(i).symbol = data(1) stocks(i).exchange = data(2) stocks(i).industry = data(3) stocks(i).price2013 = CDec(data(4)) stocks(i).price2014 = CDec(data(5)) stocks(i).earningsPerShare = CDec(data(6)) stocks(i).dividend = CDec(data(7)) lstStocks.Items.Add(stocks(i).symbol) Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 210 of 443) Private Sub lstStocks_SelectedIndexChanged(...) Handles _ lstStocks.SelectedIndexChanged Dim n As Integer n = lstStocks.SelectedIndex txtCompany.Text = stocks(n).company txtIndustry.Text = stocks(n).industry txtExchange.Text = stocks(n).exchange txtGrowth.Text = ((stocks(n).price2014 - stocks(n).price2013) / stocks(n).price2013).ToString("P") txtPEratio.Text = (stocks(n).price2014 / stocks(n).earningsPerShare).ToString("N") End Sub 42. Structure Stock Dim company As String Dim symbol As String Dim exchange As String Dim industry As String Dim price2013 As Decimal 'price at end of 2013 Dim price2014 As Decimal 'price at end of 2014 Dim earningsPerShare As Decimal Dim dividend As Decimal End Structure Dim stocks(29) As Stock Private Sub frmDOW_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim line As String Dim data(7) As String Dim securities() As String = IO.File.ReadAllLines("DOW2014.txt") For i As Integer = 0 To 29 line = securities(i) data = line.Split(","c) stocks(i).company = data(0) stocks(i).symbol = data(1) stocks(i).exchange = data(2) stocks(i).industry = data(3) stocks(i).price2013 = CDec(data(4)) stocks(i).price2014 = CDec(data(5)) stocks(i).earningsPerShare = CDec(data(6)) stocks(i).dividend = CDec(data(7)) Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 211 of 443) Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim bestPerformance, worstPerformance, growth As Decimal growth = (stocks(0).price2014 - stocks(0).price2013) / stocks(0).price2013 bestPerformance = growth worstPerformance = growth For i As Integer = 1 To 29 growth = (stocks(i).price2014 - stocks(i).price2013) / stocks(i).price2013 If growth > bestPerformance Then bestPerformance = growth End If If growth < worstPerformance Then worstPerformance = growth End If Next txtBestGain.Text = bestPerformance.ToString("P") txtWorstGain.Text = worstPerformance.ToString("P") For i As Integer = 0 To 29 growth = (stocks(i).price2014 - stocks(i).price2013) / stocks(i).price2013 If growth = bestPerformance Then lstBest.Items.Add(stocks(i).company) ElseIf growth = worstPerformance Then lstWorst.Items.Add(stocks(i).company) End If Next End Sub 43. Structure Stock Dim company As String Dim symbol As String Dim exchange As String Dim industry As String Dim price2013 As Decimal 'price at end of 2013 Dim price2014 As Decimal 'price at end of 2014 Dim earningsPerShare As Decimal Dim dividend As Decimal End Structure Dim stocks(29) As Stock Private Sub frmDOW_Load(...) Handles MyBase.Load Dim line As String Dim data(7) As String Dim securities() As String = IO.File.ReadAllLines("DOW2014.txt") For i As Integer = 0 To 29 line = securities(i) data = line.Split(","c) stocks(i).company = data(0) stocks(i).symbol = data(1) stocks(i).exchange = data(2) stocks(i).industry = data(3) stocks(i).price2013 = CDec(data(4)) stocks(i).price2014 = CDec(data(5)) stocks(i).earningsPerShare = CDec(data(6)) stocks(i).dividend = CDec(data(7)) Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 212 of 443) Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim query = From equity In stocks Let ratio = equity.dividend / equity.price2014 Order By ratio Descending Let ratioPercent = ratio.ToString("P") Select equity.company, equity.symbol, ratioPercent Dim queryAsArray() = query.ToArray ReDim Preserve queryAsArray(9) dgvStocks.DataSource = queryAsArray dgvStocks.Columns("company").HeaderText = "Company" dgvStocks.Columns("symbol").HeaderText = "Symbol" dgvStocks.Columns("ratioPercent").HeaderText = "Yield as of 12/31/2014" dgvStocks.CurrentCell = Nothing End Sub 44. Structure Stock Dim company As String Dim symbol As String Dim exchange As String Dim industry As String Dim price2013 As Decimal 'price at end of 2013 Dim price2014 As Decimal 'price at end of 2014 Dim earningsPerShare As Decimal Dim dividend As Decimal End Structure Dim stocks(29) As Stock Private Sub frmDOW_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim line As String Dim data(7) As String Dim securities() As String = IO.File.ReadAllLines("DOW2014.txt") For i As Integer = 0 To 29 line = securities(i) data = line.Split(","c) stocks(i).company = data(0) stocks(i).symbol = data(1) stocks(i).exchange = data(2) stocks(i).industry = data(3) stocks(i).price2013 = CDec(data(4)) stocks(i).price2014 = CDec(data(5)) stocks(i).earningsPerShare = CDec(data(6)) stocks(i).dividend = CDec(data(7)) Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 213 of 443) Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim query = From equity In stocks Order By equity.price2014 Ascending Select equity.company, equity.symbol, equity.price2014 Dim queryAsArray() = query.ToArray ReDim Preserve queryAsArray(4) dgvStocks.DataSource = queryAsArray dgvStocks.Columns("company").HeaderText = "Company" dgvStocks.Columns("symbol").HeaderText = "Symbol" dgvStocks.Columns("price2014").HeaderText = "Price as of 12/31/2014" dgvStocks.CurrentCell = Nothing End Sub 45. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click lstOutput.Items.Clear() For i As Integer = 0 To club.Count - 1 lstOutput.Items.Add(club(i).name) Next End Sub 46. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click lstOutput.Items.Clear() For i As Integer = 0 To (club.Count – 1) If club(i).courses.Count = 3 Then lstOutput.Items.Add(club(i).name) End If Next End Sub 47. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click 'Displays the students who are enrolled in CMSC 100 Dim subject = "CMSC 100" 'Loop over all students in the club For i As Integer = 0 To (club.Count – 1) 'Loop over all courses for that student For j As Integer = 0 To (club(i).courses.Count – 1) 'If a course matches, display the student's name. If club(i).courses(j) = subject Then lstOutput.Items.Add(club(i).name) End If Next Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 214 of 443) 48. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click 'Displays the students who are not enrolled in CMSC 100 Dim subject = "CMSC 100" Dim ub = club.Count - 1 Dim checkList(ub) As Boolean For i As Integer = 0 To ub For j As Integer = 0 To (club(i).courses.Count – 1) If club(i).courses(j) = subject Then checkList(i) = True End If Next Next For i As Integer = 0 To ub If Not checkList(i) Then lstOutput.Items.Add(club(i).name) End If Next End Sub EXERCISES 7.4 1. 1 2. 6 3. 3 4. 2 5. 55 6. 20 7. 14 8. 55 9. 2 10. 10 11. 55 12. 0 1 2 3 4 5 13. Dim twice(2, 3) As Double For r As Integer = 0 To 2 For c As Integer = 0 To 3 twice(r, c) = 2 * nums(r, c) Next Next 14. Dim total As Double = 0 Dim counter As Integer = 0 For Each num In nums total += num counter += 1 Next lstOutput.Items.Add(total / counter) 15. 'use a For Each loop Dim total As Double = 0 For Each num As Double In nums If num Mod 2 = 0 Then total += num End If Next lstOutput.Items.Add(total) 'use LINQ Dim query = From num In nums.Cast(Of Double)() Where (num Mod 2 = 0) Select num lstOutput.Items.Add(query.Sum) © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 215 of 443) 16. 'use a For Each loop Dim total As Double = 0 Dim counter As Integer = 0 For Each num As Double In nums If num Mod 2 <> 0 Then total += num counter += 1 End If Next lstOutput.Items.Add(total / counter) 'use LINQ Dim query = From num In nums.Cast(Of Double)() Where (num Mod 2 <> 0) Select num lstOutput.Items.Add(query.Average) 17. 12 18. James Madison 19. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim inventory(,) As Integer = {{25, 64, 23}, {30, 82, 19}} Dim sales(,) As Integer = {{7, 45, 11}, {4, 24, 8}} Dim total(2) As Integer 'Adjust the inventory values to reflect today's sales For store As Integer = 1 To 2 For item As Integer = 1 To 3 inventory(store - 1, item - 1) = inventory(store - 1, item - 1) - sales(store - 1, item - 1) 'Accumulate the total inventory per store total(store) += inventory(store - 1, item - 1) Next Next lstOutput.Items.Add(" 1 2 3 TOTAL") For store As Integer = 1 To 2 lstOutput.Items.Add(store & " " & inventory(store - 1, 0) & " " & inventory(store - 1, 1) & " " & inventory(store - 1, 2) & " " & total(store)) Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 216 of 443) 20. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click 'Determine average of percentages in Twitter column Dim percentUse(3, 4) As Double ReadData(percentUse) ShowAveragePercentage(percentUse) End Sub Sub ReadData(ByRef percentUse(,) As Double) 'Read percentages for each age group Dim table() As String = IO.File.ReadAllLines("Internet.txt") Dim data() As String For age As Integer = 0 To 3 data = table(age).Split(","c) For use As Integer = 0 To 4 percentUse(age, use) = CDbl(data(use)) Next Next End Sub Sub ShowAveragePercentage(percentUse(,) As Double) 'Determine average of percentages in Twitter column '(i.e., column corresponding to 1) Dim sum As Double = 0 For age As Integer = 0 To 3 sum += percentUse(age, 1) Next txtAverage.Text = (sum / 400).ToString("P1") End Sub 21. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim ranking(2, 4) As String Dim disciplines(2) As String Dim table() As String = IO.File.ReadAllLines("Ranking.txt") Dim data() As String For field As Integer = 0 To 2 data = table(field).Split(","c) disciplines(field) = data(0) For rank As Integer = 0 To 4 ranking(field, rank) = data(rank + 1) Next Next Dim result As String = "" For category As Integer = 0 To 2 For rank As Integer = 0 To 4 If txtName.Text.ToUpper = ranking(category, rank).ToUpper Then 'Append category name to result result &= disciplines(category) & " " End If Next Next If result = "" Then txtOutput.Text = "None." Else txtOutput.Text = result End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 217 of 443) 22. Private Sub btnDisplay_Click() Handles btnDisplay.Click 'Calculate total increase in the the number of 'units for the five leading restaurant chains. Dim units(4, 1) As Integer ReadData(units) ShowChange(units) End Sub Sub ReadData(units(,) As Integer) 'Read units for each restaurant. Dim table() As String = IO.File.ReadAllLines("Restaurants.txt") Dim data() As String For company As Integer = 0 To 4 data = table(company).Split(","c) For yr As Integer = 0 To 1 units(company, yr) = CInt(data(yr + 1)) Next Next End Sub Sub ShowChange(units(,) As Integer) 'Compute and show change in units Dim total As Integer = 0 For company As Integer = 0 To 4 total += units(company, 1) - units(company, 0) Next txtChange.Text = total.ToString("N0") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 218 of 443) 23. Private Sub btnDisplay_Click() Handles btnDisplay.Click Dim scores(3, 3) As Integer Dim golfers(3) As String Dim table() As String = IO.File.ReadAllLines("Golf.txt") Dim data() As String Dim golferTotal(3) As Integer, roundTotal(3) As Integer For i As Integer = 0 To 3 data = table(i).Split(","c) golfers(i) = data(0) For j As Integer = 0 To 3 scores(i, j) = CInt(data(j + 1)) Next Next For golfer As Integer = 0 To 3 For round As Integer = 0 To 3 golferTotal(golfer) += scores(golfer, round) roundTotal(round) += scores(golfer, round) Next Next 'Display golfer's totals lstOutput.Items.Add("GOLFER TOTALS") For golfer As Integer = 0 To 3 lstOutput.Items.Add(golfers(golfer) & ": " & golferTotal(golfer)) Next lstOutput.Items.Add("") 'Display average per round lstOutput.Items.Add("ROUND AVERAGE") For round As Integer = 0 To 3 lstOutput.Items.Add(round + 1 & ": " & (roundTotal(round) / 4).ToString("N")) Next End Sub 24. Dim scores(14, 2) As Integer Dim count As Integer Dim names(14) As String Dim grades() As Integer 'Stores students' exam scores 'Current number of students stored 'Stores students' names © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 219 of 443) Private Sub btnAdd_Click(...) Handles btnAdd.Click If (count = 15) Then MessageBox.Show("Fifteen students already stored.", "Warning") Else count += 1 names(count - 1) = txtName.Text scores(count - 1, 0) = CInt(txtExam1.Text) scores(count - 1, 1) = CInt(txtExam2.Text) scores(count - 1, 2) = CInt(txtExam3.Text) txtName.Clear() txtExam1.Clear() txtExam2.Clear() txtExam3.Clear() txtName.Focus() End If End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim sum As Integer 'Display student's semester grades lstOutput.Items.Clear() lstOutput.Items.Add("Students' Semester Average") For i As Integer = 0 To count - 1 'Accumulate sum of scores for each student sum = 0 For exam As Integer = 0 To 2 sum += scores(i, exam) Next 'Display the student's name and semester average lstOutput.Items.Add(names(i) & ": " & (sum / 3).ToString("N")) Next 'Display median on the exams lstOutput.Items.Add("Exam Medians") For exam As Integer = 0 To 2 ReDim grades(count - 1) For i As Integer = 0 To count - 1 grades(i) = scores(i, exam) Next lstOutput.Items.Add(exam + 1 & ": " & Median(grades)) Next End Sub Function Median(grades() As Integer) As Double Dim query = From grade In grades Order By grade Ascending Select grade grades = query.ToArray 'grades have been sorted Dim n As Integer If (grades.Count Mod 2 <> 0) Then 'case where grades.Count is odd n = CInt((grades.Count - 1) / 2) Return grades(n) Else 'case where grades.count is even n = CInt((grades.Count / 2) - 1) Return (grades(n) + grades(n + 1)) / 2 End If End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 220 of 443) 25. Structure Month Dim name As String Dim avePrecip As Double End Structure Structure Year Dim name As Integer Dim totalPrecip As Double End Structure Dim months(11) As Month Dim monthNames() As String = IO.File.ReadAllLines("MONTHS.TXT") Dim precipData(4, 12) As Double Dim years(4) As Year Private Sub frmRain_Load(...) Handles MyBase.Load Dim rowOfNums() As String = IO.File.ReadAllLines("RAIN.TXT") For i As Integer = 0 To precipData.GetUpperBound(0) Dim line() As String = rowOfNums(i).Split(","c) For j As Integer = 0 To precipData.GetUpperBound(1) precipData(i, j) = CDbl(line(j)) Next Next End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click For j As Integer = 0 To 11 months(j).name = monthNames(j) Dim sum As Double = 0 For i As Integer = 0 To 4 sum += precipData(i, j) Next months(j).avePrecip = sum / 5 Next Dim query = From mnth In months Let ave = (mnth.avePrecip).ToString("N") Select mnth.name, ave dgvOutputMonths.DataSource = query.ToList dgvOutputMonths.CurrentCell = Nothing dgvOutputMonths.Columns("name").HeaderText = "Month" dgvOutputMonths.Columns("ave").HeaderText = "Average Precipitation" For i As Integer = 0 To 4 years(i).name = CInt(precipData(i, 12)) Dim sum As Double = 0 For j As Integer = 0 To 11 sum += precipData(i, j) Next years(i).totalPrecip = sum Next Dim query2 = From yr In years Let totPrec = (yr.totalPrecip).ToString("N") Select yr.name, totPrec dgvOutputYrs.DataSource = query2.ToList dgvOutputYrs.CurrentCell = Nothing dgvOutputYrs.Columns("name").HeaderText = "Year" dgvOutputYrs.Columns("totPrec").HeaderText = "Total Precipitation for the Year" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 221 of 443) 26. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click 'Load data into an array, cumulate totals, and display a report Dim totalSales As Double Dim sales(,) As Integer = {{25, 64, 23, 45, 14},{12, 82, 19, 34, 63}, {54, 22, 17, 43, 35}} Dim price() As Decimal = {12, 17.95D, 95, 86.5D, 78} Dim totals(2) As Decimal For store As Integer = 0 To 2 For item As Integer = 0 To 4 totals(store) += sales(store, item) * price(item) Next Next lstOutput.Items.Add("Sales per store") For store As Integer = 0 To 2 lstOutput.Items.Add(store + 1 & ": " & (totals(store)).ToString("C")) totalSales += totals(store) Next lstOutput.Items.Add("Total sales: " & totalSales.ToString("C")) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 222 of 443) 27. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click 'Display the course and campus enrollments 'enrollment array named er Dim er(,) As Integer = {{5, 15, 22, 21, 12, 25, 16, 11, 17, 23}, {11, 23, 51, 25, 32, 35, 32, 52, 25, 21}, {2, 12, 32, 32, 25, 26, 29, 12, 15, 11}} 'Define the arrays to accumulate the information Dim campusTotal(2), courseTotal(9) As Integer For campus As Integer = 0 To 2 For course As Integer = 0 To 9 campusTotal(campus) += er(campus, course) courseTotal(course) += er(campus, course) Next Next 'Display the campus enrollment lstOutput.Items.Add("CAMPUS ENROLLMENT") For campus As Integer = 0 To 2 lstOutput.Items.Add((campus + 1) & ": " & campusTotal(campus)) Next 'Display the course enrollment lstOutput.Items.Add("COURSE ENROLLMENT") For course As Integer = 0 To 9 lstOutput.Items.Add((course + 1) & ": " & courseTotal(course)) Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 223 of 443) 28. Private Sub btnCompute_Click(...) Handles btnCompute.Click 'Compute total amount spent on salaries Dim salary(6, 3) As Decimal 'first 7 categories of federal pay scale Dim employees(6, 3) As Integer 'number of employees of each classification ReadData(salary, employees) ShowTotalPay(salary, employees) End Sub Sub ReadData(ByRef salary(,) As Decimal, ByRef employees(,) As Integer) 'Get salaries and number of employees. Dim filePaySched As String = "GS-PAY.TXT" Dim fileEmployees As String = "GS-EMPLOYEES.TXT" Dim table() As String = IO.File.ReadAllLines(filePaySched) Dim data() As String For category As Integer = 0 To 6 data = table(category).Split(","c) For stp As Integer = 0 To 3 salary(category, stp) = CDec(data(stp)) Next Next table = IO.File.ReadAllLines(fileEmployees) For category As Integer = 0 To 6 data = table(category).Split(","c) For stp As Integer = 0 To 3 employees(category, stp) = CInt(data(stp)) Next Next End Sub Sub ShowTotalPay(salary(,) As Decimal, employees(,) As Integer) 'Compute total pay to all employees. Dim total As Decimal = 0 For category As Integer = 0 To 6 For stp As Integer = 0 To 3 total += salary(category, stp) * employees(category, stp) Next Next txtTotalOfSalaries.Text = total.ToString("C0") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 224 of 443) 29. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim n As Integer = CInt(InputBox("How many elements are in each row" & " and column of the array?")) Dim a(n - 1, n - 1) As Integer For i As Integer = 0 To n - 1 For j As Integer = 0 To n - 1 a(i, j) = CInt(InputBox("What is the entry in Row " & i + 1 & ", Column " & j + 1)) Next Next If TestMagic(n, a) Then txtAnswer.Text = "Yes" Else txtAnswer.Text = "No" End If End Sub Function TestMagic(n As Integer, a(,) As Integer) As Boolean Dim sum, total As Integer 'sum of numbers in first row 'Find sum of elements in first row\sum = 0 For j As Integer = 0 To n - 1 sum += a(0, j) Next 'Test row totals For i As Integer = 1 To n - 1 total = 0 For j As Integer = 0 To n - 1 total += a(i, j) Next If total <> sum Then Return False End If Next 'Test column totals For j As Integer = 0 To n - 1 total = 0 For i As Integer = 0 To n - 1 total += a(i, j) Next If total <> sum Then Return False End If Next 'Test first diagonal total = 0 For i As Integer = 0 To n - 1 total += a(i, i) Next If total <> sum Then Return False End If © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 225 of 443) 'Test second diagonal total = 0 For i As Integer = 0 To n - 1 total += a(i, n - i - 1) Next If total <> sum Then Return False End If Return True End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 226 of 443) CHAPTER 7 PROGRAMMING PROJECTS 1. 'Unit Conversion Dim unitName(8) As String Dim inFeet(8) As Double Dim numUnits As Double = 8 Dim units() As String = IO.File.ReadAllLines("Units.txt") Private Sub frmConvert_Load(...) Handles MyBase.Load 'Load conversion into array For i As Integer = 0 To 8 unitName(i) = units(i).Split(","c)(0) inFeet(i) = CDbl(units(i).Split(","c)(1)) lstUnits.Items.Add((i + 1) & ". " & unitName(i)) Next End Sub Private Sub btnConvert_Click(...) Handles btnConvert.Click 'Program to convert units of measure Dim length As Double, fromUnit As Integer, toUnit As Integer InputData(fromUnit, toUnit, length) If (fromUnit >= 1) And (fromUnit <= numUnits) And (toUnit >= 1) And (toUnit <= numUnits) Then ConvertUnits(inFeet, fromUnit, toUnit, length) Else MessageBox.Show("Only pick a unit from 1 to 9.") End If End Sub Sub InputData(ByRef fromUnit As Integer, ByRef toUnit As Integer, ByRef length As Double) 'Input source, destination, and length length = CDbl(mtxtLength.Text) fromUnit = CInt(mtxtFrom.Text) toUnit = CInt(mtxtTo.Text) End Sub Sub ConvertUnits(inFeet() As Double, fromUnit As Integer, toUnit As Integer, length As Double) 'Perform conversion and display result Dim result As Double = inFeet(fromUnit - 1) / inFeet(toUnit - 1) * length txtOutput.Text = result.ToString("N") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 227 of 443) 2. Private Sub btnCheckValidity_Click() Handles btnCheckValidity.Click If checkFormat(txtISBN.Text) Then If isValidISBN(txtISBN.Text) Then txtResult.Text = "YES" Else txtResult.Text = "NO" End If Else 'Improperly formatted ISBN string MessageBox.Show("ISBN is not properly formatted.") End If End Sub Function checkFormat(isbn As String) As Boolean 'Checks the format of the input string 'to make sure that the last character is an X or a digit, 'and the remaining characters are digits or hyphens Dim digitCount As Integer Dim hasInvalidCharacter As Boolean Dim i As Integer = 1 digitCount = 0 Do While i < isbn.Length And hasInvalidCharacter = False If isDigit(isbn.Substring(i - 1, 1)) Then digitCount = digitCount + 1 ElseIf isbn.Substring(i - 1, 1) <> "-" Then hasInvalidCharacter = True End If i = i + 1 Loop 'Check last digit individually to allow for an X If Not (isDigit(isbn.Substring(i - 1, 1)) Or (isbn.Substring(i - 1, 1) = "X")) Then hasInvalidCharacter = True Else digitCount = digitCount + 1 End If If hasInvalidCharacter Or (digitCount <> 10) Then Return False Else Return True End If End Function Function isDigit(digit As String) As Boolean If (digit.Length = 1) And (digit >= "0") And (digit <= "9") Then Return True Else Return False End If End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 228 of 443) Function isValidISBN(isbn As String) As Boolean Dim isbnDigits(9) As Integer Dim i, j As Integer 'array index/loop variable Dim strPos As Integer 'position in string Dim checksum As Integer 'Checks a properly formatted ISBN string to see if the number is valid 'according to checksum formula i = 1 strPos = 1 Do While i <= 9 If (isbn.Substring(strPos - 1, 1) <> "-") Then isbnDigits(i - 1) = CInt(isbn.Substring(strPos - 1, 1)) i = i + 1 End If strPos = strPos + 1 Loop If isbn.Substring(isbn.Length - 1, 1) = "X" Then isbnDigits(9) = 10 Else isbnDigits(9) = CInt(isbn.Substring(isbn.Length - 1, 1)) End If checksum = 0 For j = 0 To 9 checksum = checksum + (10 - j) * isbnDigits(j) Next If checksum Mod 11 = 0 Then Return True Else Return False End If End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 229 of 443) 3. Dim scores() As Double Private Sub frmGrades_Load(...) Handles MyBase.Load 'Read exam scores into the scores array Dim temp() As String = IO.File.ReadAllLines("Scores.txt") Dim query1 = From str In temp Select CDbl(str) scores = query1.ToArray End Sub Private Sub btnAnalyze_Click(...) Handles btnAnalyze.Click Dim m = scores.Average Dim query2 = From num In scores Select (num - m) ^ 2 Dim sd = Math.Sqrt(query2.Sum / scores.Count) txtNum.Text = CStr(scores.Count) txtMean.Text = m.ToString("N") txtStDev.Text = sd.ToString("N") Dim query3 = From num In scores Let grade = GetGrade(num, m, sd) Select num, grade dgvOutput.DataSource = query3.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("num").HeaderText = "Score" dgvOutput.Columns("grade").HeaderText = "Grade" End Sub Function GetGrade(score As Double, m As Double, sd As Double) As String Select Case score Case Is >= m + 1.5 * sd Return "A" Case Is >= m + 0.5 * sd Return "B" Case Is >= m - 0.5 * sd Return "C" Case Is >= m - 1.5 * sd Return "D" Case Else Return "F" End Select End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 230 of 443) 4. Dim degrees() As String = IO.File.ReadAllLines("Degrees.txt") Private Sub btnDegrees_Click(...) Handles btnDegrees.Click 'Show table of degrees conferred in 1981 and 2013 Dim query = From line In degrees _ Let field = line.Split(","c)(0) Let deg1981 = (CInt(line.Split(","c)(1))).ToString("N0") Let deg2013 = (CInt(line.Split(","c)(2))).ToString("N0") Order By field Ascending Select field, deg1981, deg2013 dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("field").HeaderText = "Field of Study" dgvOutput.Columns("deg1981").HeaderText = "1981" dgvOutput.Columns("deg2013").HeaderText = "2013" End Sub Private Sub btnChanges_Click(...) Handles btnChanges.Click 'Show table of percentage changes in degrees from 1981 to 2013 Dim query = From line In degrees Let field = line.Split(","c)(0) Let deg1981 = CInt(line.Split(","c)(1)) Let deg2013 = CInt(line.Split(","c)(2)) Let perGrowth = (deg2013 - deg1981) / deg1981 Order By perGrowth Descending Let formattedPerGrowth = perGrowth.ToString("P1") Select field, formattedPerGrowth dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("field").HeaderText = "Field of Study" dgvOutput.Columns("formattedPerGrowth").HeaderText = "Change (1981-2013)" End Sub Private Sub btnHistogram_Click(...) Handles btnHistogram.Click 'Histogram of degrees in 2013 Dim query = From line In degrees Let field = line.Split(","c)(0) Let deg1981 = CInt(line.Split(","c)(1)) Let deg2013 = CInt(line.Split(","c)(2)) Order By deg2013 Ascending _ Let bar = Stars(deg2013 / 10000) Let formattedDeg2013 = deg2013.ToString("N0") Select field, bar, formattedDeg2013 dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("field").HeaderText = "Field of Study" dgvOutput.Columns("bar").HeaderText = "" dgvOutput.Columns("formattedDeg2013").HeaderText = "Degrees in 2013" End Sub Private Sub btnQuit_Click(...) Handles btnQuit.Click Me.Close() End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 231 of 443) Function Stars(numStars As Double) As String 'Display a row of stars Dim row As String = "" For i As Integer = 1 To CInt(numStars) row &= Chr(149) Next Return row End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 232 of 443) 5. 'Textese translator Dim dictionary() As String = IO.File.ReadAllLines("Textese.txt") Private Sub btnTranslate_Click(...) Handles btnTranslate.Click 'Translate English sentence to French and German. Dim sentenceArray() As String = txtSentence.Text.Split(" "c) txtTextese.Text = "" For Each word In sentenceArray txtTextese.Text &= findTranslation(word) + " " Next End Sub Function findTranslation(word As String) As String Dim position As Integer, foundflag As Boolean For Each pair As String In dictionary If pair.StartsWith(word.ToLower & ",") Then position = pair.IndexOf(",") foundflag = True Return pair.Substring(position + 1) End If Next If Not foundflag Then Return word End If End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 233 of 443) 6. Structure Team Dim name As String Dim wins As Integer End Structure Dim teams(5) As Team 'Holds the league data Dim winners(5, 5) As Boolean 'True if the first team won Private Sub frmSoccer_Load(...) Handles MyBase.Load teams(0).name = "Jazz" teams(1).name = "Jets" teams(2).name = "Owls" teams(3).name = "Rams" teams(4).name = "Cubs" teams(5).name = "Zips" winners(0, 1) = True 'True means team (#0) won winners(0, 2) = True winners(0, 3) = False 'False means second team (#3) won winners(0, 4) = False winners(0, 5) = True winners(1, 2) = True winners(1, 3) = True winners(1, 4) = False winners(1, 5) = False winners(2, 3) = False winners(2, 4) = True winners(2, 5) = True winners(3, 4) = True winners(3, 5) = True winners(4, 5) = True For i As Integer = 0 To 4 For j As Integer = (i + 1) To 5 If winners(i, j) Then teams(i).wins += 1 'First team won Else teams(j).wins += 1 'Second team won End If Next Next End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query = From team In teams Let name = team.name Let wins = team.wins Order By team.wins Descending Select name, wins dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("name").HeaderText = "Team" dgvOutput.Columns("wins").HeaderText = "Wins" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 234 of 443) 7. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim hand(3, 12), suits(3), denoms(12) As Integer InputCard(hand, suits, denoms, txtDenomination1.Text, mtxtSuit1.Text) InputCard(hand, suits, denoms, txtDenomination2.Text, mtxtSuit2.Text) InputCard(hand, suits, denoms, txtDenomination3.Text, mtxtSuit3.Text) InputCard(hand, suits, denoms, txtDenomination4.Text, mtxtSuit4.Text) InputCard(hand, suits, denoms, txtDenomination5.Text, mtxtSuit5.Text) 'Determine and display score txtOutput.Text = "The hand is " & GetScore(hand, suits, denoms) & "." End Sub Sub InputCard(ByRef hand(,) As Integer, ByRef suits() As Integer, ByRef denoms() As Integer, denomStr As String,suitStr As String) 'Store the card into the array Dim denom As Integer = CInt(denomStr) - 1 Dim suit As Integer Select Case suitStr.ToUpper 'Determine suit Case "C" 'Clubs suit = 0 Case "D" 'Diamonds suit = 1 Case "H" suit = 2 'Hearts Case Else suit = 3 'All other input means Spades End Select hand(suit, denom) = 1 'Set indicies for card to 1 suits(suit) += 1 'Increment counter for suit denoms(denom) += 1 'Increment counter for denomination End Sub Function GetScore(hand(,) As Integer, suits() As Integer, denoms() As Integer) As String 'Determine score of the hand, starting with highest type If IsFlush(suits) And IsStraight(hand) Then If IsAnySuit(hand, 0) And IsAnySuit(hand, 12) Then Return "a royal straight flush" Else Return "a straight flush" End If End If If IsFlush(suits) Then Return "a flush" End If If IsFullHouse(denoms) Then Return "a full house" End If If IsFourOfAKind(denoms) Then Return "four of a kind" End If If IsStraight(hand) Then Return "a straight" End If If IsThreeOfAKind(denoms) Then Return "three of a kind" End If If IsTwoPair(denoms) Then Return "two pairs" End If If IsOnePair(denoms) Then Return "one pair" End If Return "nothing" 'No result End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 235 of 443) Function IsFlush(suits() As Integer) As Boolean 'Test for a flush in each suit For suit As Integer = 0 To 3 If suits(suit) = 5 Then Return True End If Next Return False End Function Function IsStraight(hand(,) As Integer) As Boolean 'Test for a straight Dim denom As Integer = 13 Do 'Find highest denomination denom = denom - 1 Loop Until IsAnySuit(hand, denom) 'If highest denomination is less than a 4 then there is no straight If denom < 4 Then Return False End If For length As Integer = 1 To 3 'Test three earlier denominations If Not IsAnySuit(hand, denom - length) Then Return False End If Next If denom = 12 Then 'If highest is a king, check for nine or ace If IsAnySuit(hand, 8) Or IsAnySuit(hand, 0) Then Return True Else Return False End If Else 'If highest is not a king, test for the fifth card Return IsAnySuit(hand, denom - 4) End If End Function Function IsAnySuit(hand(,) As Integer, denom As Integer) As Boolean 'Test for a 1 for any suit of the given denomination For suit As Integer = 0 To 3 If hand(suit, denom) = 1 Then Return True End If Next Return False End Function Function IsFullHouse(denoms() As Integer) As Boolean 'Test for a full house in any suit For denom As Integer = 0 To 12 'If any denomination is 1, 4 or 5, then no If (denoms(denom) = 1) Or (denoms(denom) > 3) Then Return False End If Next Return True 'That is, all denominations are either 0, 2 or 3. End Function Function IsFourOfAKind(denoms() As Integer) As Boolean 'True if any suit has a four-of-a-kind For denom As Integer = 0 To 12 If denoms(denom) = 4 Then 'If four cards with this denomination Return True End If Next Return False End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 236 of 443) Function IsThreeOfAKind(denoms() As Integer) As Boolean 'Test for three of a kind in any suit For denom As Integer = 0 To 12 If denoms(denom) = 3 Then 'If three cards with this denomination Return True End If Next Return False End Function Function IsTwoPair(denoms() As Integer) As Boolean 'Test for two pairs Dim count As Integer = 0 For denom As Integer = 0 To 12 If denoms(denom) = 2 Then 'If two cards with this denomination count += 1 End If Next If count = 2 Then Return True Else Return False End If End Function Function IsOnePair(denoms() As Integer) As Boolean 'Test for one pair in any suit For denom As Integer = 0 To 12 'If any denomination is 2, then yes If denoms(denom) = 2 Then Return True End If Next Return False End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 237 of 443) 8. Dim seats(9, 3) As String Dim waiting(99) As String Dim wait As Integer = 0 'Holds passenger's name in each seat 'Max 100 persons on waiting list 'Number of persons on waiting list Private Sub frmAirplane_Load(...) Handles MyBase.Load 'Displays the seating chart DisplaySeats() End Sub Sub DisplaySeats() 'Display the seating chart Dim rowStr As String lstOutput.Items.Clear() For row As Integer = 0 To 9 rowStr = "" For seat As Integer = 0 To 3 If seats(row, seat) <> "" Then rowStr &= " X" Else rowStr &= " ." End If If seat = 1 Then 'Display spaces for aisle rowStr &= " " End If Next lstOutput.Items.Add(rowStr) Next End Sub Sub DisplayWaiting() 'Display the waiting list lstWaiting.Items.Clear() For i As Integer = 0 To wait - 1 lstWaiting.Items.Add(waiting(i)) Next End Sub Private Sub btnAdd_Click(...) Handles btnAdd.Click 'Add a passenger to the flight, either chart or waiting list Dim seat As Integer 'Count number of empty seats Dim count As Integer = 0 For rw As Integer = 0 To 9 For st As Integer = 0 To 3 If seats(rw, st) = "" Then count += 1 End If Next Next If count = 0 Then 'If no empty seats then add name to waiting list. wait += 1 waiting(wait - 1) = txtName.Text DisplayWaiting() Else 'Otherwise get the seat and add name to array Select Case txtSeat.Text.Substring(txtSeat.Text.Length - 1).ToUpper Case "A" seat = 0 Case "B" seat = 1 Case "C" seat = 2 Case Else seat = 3 End Select © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 238 of 443) Dim row As Integer = CInt(txtSeat.Text.Substring(0,txtSeat.Text.Length - 1)) - 1 If seats(row, seat) <> "" Then 'If seat is taken MessageBox.Show("The seat is taken.", "Taken") Else seats(row, seat) = txtName.Text 'Add the name to the array txtName.Clear() 'Reset input txtSeat.Clear() txtName.Focus() DisplaySeats() 'Display seating chart End If End If End Sub Private Sub btnDelete_Click(...) Handles btnDelete.Click For rw As Integer = 0 To 9 For st As Integer = 0 To 3 If seats(rw, st) = txtName.Text Then If wait > 0 Then seats(rw, st) = waiting(0) 'Add first person from list wait = wait - 1 'Decrement counter and shift waiting list For i As Integer = 0 To wait - 1 waiting(i) = waiting(i + 1) Next DisplayWaiting() 'Display the new waiting list Else seats(rw, st) = "" 'Clear the seat DisplaySeats() 'Display the seating chart End If txtName.Clear() End If Next Next If txtName.Text <> "" Then 'If name not found then display message MessageBox.Show("Name not found in reservation.") End If End Sub Private Sub btnQuit_Click(...) Handles btnQuit.Click End End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 239 of 443) 9. Dim current(1, 1) As Boolean Dim generation As Integer = 1 Private Sub frmLife_Load(...) Handles MyBase.Load NewGame() End Sub Private Sub btnNew_Click(...) Handles btnNew.Click 'When the New button is pressed, start a new game NewGame() End Sub Sub NewGame() Dim input As String 'Get the size of the new game Dim size As Integer = CInt(InputBox("Enter the size of the grid", "Size of grid")) 'Redimension the current generation to the size ReDim current(size, size) 'Set the default row to all dashes 'Get the initial generation For row As Integer = 1 To size input = InputBox("Enter the row #" & row & " of " & size & " with 1s and dashes:", "Enter row #" & row) 'Parse the input into the array For column As Integer = 1 To size current(row, column) = (input.Substring(column - 1, 1) = "1") Next Next generation = 1 Display() End Sub Sub Display() 'Display the current generation in the list box Dim output As String Dim size As Integer = current.GetUpperBound(0) 'Build each row of output lstGeneration.Items.Clear() Dim count As Integer = 0 For row As Integer = 1 To size 'Bulid the output string from each column output = "" For column As Integer = 1 To size If current(row, column) Then output = output & "1" count += 1 Else output = output & "-" End If Next 'Display the output string lstGeneration.Items.Add(output) Next 'Display the number of individuals txtIndividuals.Text = CStr(count) 'Update the generation button for the next one btnGeneration.Text = "Generation #" & generation End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 240 of 443) Private Sub btnGeneration_Click(...) Handles btnGeneration.Click Dim size As Integer = current.GetUpperBound(0) 'Create a new array for the future generation Dim future(size, size) As Boolean 'Populate the future using the current For row As Integer = 1 To size For column As Integer = 1 To size future(row, column) = Survives(row, column) Next Next 'Update the current generation with the future current = future generation += 1 'Display the current generation Display() End Sub Function Survives(row As Integer, column As Integer) As Boolean 'Determine whether the individual at row, column survives Dim size As Integer = current.GetUpperBound(0) Dim count As Integer = 0 'Loop over all neighbors of the individual from the row above to the row below For r As Integer = row - 1 To row + 1 'Loop from the column before to the column after For c As Integer = (column – 1) To (column + 1) 'If the neighbor exists and is not the individual If ((r <> row) Or (c <> column)) And (r >= 1) And (r <= size) And (c >= 1) And (c <= size) Then 'If the neighbor is alive then count it If current(r, c) Then count += 1 End If End If Next Next If current(row, column) Then 'Return the result 'If individual exists then neighbors must be 2 or 3 to survive Return (count = 2) Or (count = 3) Else Return (count = 3) End If End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 241 of 443) 10. 'User-operated directory assistance Dim workers() As String = IO.File.ReadAllLines("Employees.txt") Private Sub btnInstructions_Click(...) Handles btnInstructions.Click MessageBox.Show("Enter the first three letters of the person's last " & "name followed by the first letter of " & "the person's first name. ", "Instructions") End Sub Private Sub btnAnother_Click(...) Handles btnAnother.Click lstDisplay.Items.Clear() txtCode.Text = "" End Sub Private Function GetCode(last As String, first As String) As String Dim word, code As String word = (last.Substring(0, 3) & first.Substring(0, 1)).ToUpper code = "" For i As Integer = 0 To 3 code &= Translate(word.Substring(i, 1)) Next i Return code End Function Private Function Translate(letter As String) As Integer Select Case letter Case "A", "B", "C" Return 2 Case "D", "E", "F" Return 3 Case "G", "H", "I" Return 4 Case "J", "K", "L" Return 5 Case "M", "N", "O" Return 6 Case "P", "Q", "R", "S" Return 7 Case "T", "U", "V" Return 8 Case "W", "X", "Y", "Z" Return 9 End Select End Function Private Sub Button2_Click(...) Handles Button2.Click If txtCode.Text.Length < 4 Then txtCode.Text &= "2" If txtCode.Text.Length = 4 Then DisplayNames() End If End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 242 of 443) Private Sub Button3_Click(...) Handles Button3.Click If txtCode.Text.Length < 4 Then txtCode.Text &= "3" If txtCode.Text.Length = 4 Then DisplayNames() End If End If End Sub Private Sub Button4_Click(...) Handles Button4.Click If txtCode.Text.Length < 4 Then txtCode.Text &= "4" If txtCode.Text.Length = 4 Then DisplayNames() End If End If End Sub Private Sub Button5_Click(...) Handles Button5.Click If txtCode.Text.Length < 4 Then txtCode.Text &= "5" If txtCode.Text.Length = 4 Then DisplayNames() End If End If End Sub Private Sub Button6_Click(...) Handles Button6.Click If txtCode.Text.Length < 4 Then txtCode.Text &= "6" If txtCode.Text.Length = 4 Then DisplayNames() End If End If End Sub Private Sub Button7_Click(...) Handles Button7.Click If txtCode.Text.Length < 4 Then txtCode.Text &= "7" If txtCode.Text.Length = 4 Then DisplayNames() End If End If End Sub Private Sub Button8_Click(...) Handles Button8.Click If txtCode.Text.Length < 4 Then txtCode.Text &= "8" If txtCode.Text.Length = 4 Then DisplayNames() End If End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 243 of 443) Private Sub Button9_Click(...) Handles Button9.Click If txtCode.Text.Length < 4 Then txtCode.Text &= "9" If txtCode.Text.Length = 4 Then DisplayNames() End If End If End Sub Private Sub DisplayNames() Dim query = From line In workers Let lastName = line.Split(","c)(0) Let firstName = line.Split(","c)(1) Let ext = line.Split(","c)(2) Let code = GetCode(lastName, firstName) Where code = txtCode.Text Select firstName, lastName, ext If query.Count = 0 Then lstDisplay.Items.Add("Could not find a matching name.") lstDisplay.Items.Add("Please try again.") Else For Each worker In query lstDisplay.Items.Add(worker.firstName & " " & worker.lastName & " x" & worker.ext) Next End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 244 of 443) 11. Structure Auto Dim model As String Dim count As Integer Dim gallons As Double End Structure 'Name of the model 'Number of cars tested 'Total number of gallons used Dim cars(4) As Auto 'Holds data Dim vehicles() As String = IO.File.ReadAllLines("Mileage.txt") Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim query1 = From line In vehicles Let make = line.Split(","c)(0) Select make Dim temp() = query1.ToArray For i As Integer = 0 To 4 cars(i).model = temp(i) cars(i).count = NumCars(temp(i)) cars(i).gallons = NumGals(temp(i)) Next Dim query2 = From car In cars Let mpg = 100 * car.count / car.gallons Order By mpg Descending Let formattedMPG = mpg.ToString("N") Select car.model, formattedMPG dgvOutput.DataSource = query2.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("model").HeaderText = "Model" dgvOutput.Columns("formattedMPG").HeaderText = "MPG" End Sub Function NumCars(make As String) As Integer Dim query = From line In vehicles Let brand = line.Split(","c)(0) Where brand = make Select brand Return query.Count End Function Function NumGals(make As String) As Double Dim query = From line In vehicles Let brand = line.Split(","c)(0) Let gallons = CDbl(line.Split(","c)(1)) Where brand = make Select gallons Return query.Sum End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 245 of 443) 12. Private Sub btnVerbalize_Click(...) Handles btnVerbalize.Click 'Verbalize a number. Dim descriptors() As String = {"", " thousand", " million", " billion", " trillion", " quadrillion", " quintillion", " sextillion", " septillion"} Dim number As String = txtNumber.Text Dim numOfCommas As Integer Dim loc As Integer 'location of comma in current number Dim front As String 'number preceding first comma in current number lstNumber.Items.Clear() numOfCommas = NumberOfCommas(number) If numOfCommas = 0 Then lstNumber.Items.Add(number) Else ReDim Preserve descriptors(numOfCommas) For i As Integer = numOfCommas To 1 Step -1 loc = number.IndexOf(",") If loc <> -1 Then front = number.Substring(0, loc) If Len(front) = 3 Then front = StripOutLeadingZeros(front) End If lstNumber.Items.Add(front & descriptors(i)) number = number.Substring(loc + 1) End If Next If NumberOfCommas(number) = 0 Then lstNumber.Items.Add(number) Else front = number.Substring(0, loc) front = StripOutLeadingZeros(front) End If End If End Sub Function NumberOfCommas(number As String) As Integer Dim locationOfComma As Integer Dim count As Integer = -1 Do count += 1 locationOfComma = number.IndexOf(",", locationOfComma + 1) Loop Until locationOfComma = -1 Return count End Function Function StripOutLeadingZeros(front As String) As String If front = "000" Then front = " 0" ElseIf front.Substring(0, 2)="00" Then front = " " & front.Substring(2) ElseIf front.Substring(0, 1) = "0" Then front = " " & front.Substring(1) End If Return front End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 246 of 443) CHAPTER 8 EXERCISES 8.1 1. Samuel Alito,NJ Henry Baldwin,PA 2. SAMUEL ALITO was appointed in 2006. HENRY BALDWIN was appointed in 1830. 3. Alito was appointed by Bush Baldwin was appointed by Jackson 4. (In 2016 output will be as follows.) Alito appointed 10 years ago Baldwin appointed 186 years ago 5. Alito,Samuel,2006 Baldwin,Henry,1830 6. Bush,Alito,NJ Jackson,Baldwin,PA 7. The new file contains the full names of the justices whose last name begins with the letter B and the years they were appointed to the court. The justices are ordered by the year they were appointed. 8. The new file contains the states and the full names of the justices appointed during the 1990s. The justices are ordered by their states. 9. The new file is the same as the original file except that the last three fields have been deleted from each record. 10. The new file contains the full names of the current justices and the years they were appointed. The records are ordered by the year appointed. (Note: The file represents the makeup of the court in January 2016.) 11. The new file contains the names of the people who subscribe to either the New York Times or the Wall Street Journal, or both. 12. The new file contains the names of the people who subscribe to both the New York Times and the Wall Street Journal. 13. The new file contains the names of the people who subscribe to the New York Times but not the Wall Street Journal. 14. The new file contains the names of the people who subscribe to either the New York Times or the Wall Street Journal, but not both. © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 247 of 443) 15. Private Sub btnBoth_Click(...) Handles btnBoth.Click 'Create a file of presidents who were also vice presidents Dim vicePres() As String = IO.File.ReadAllLines("VPres.txt") Dim presidents() As String = IO.File.ReadAllLines("USPres.txt") Dim both() As String = presidents.Intersect(vicePres).ToArray IO.File.WriteAllLines("Both.txt", both) MessageBox.Show(both.Count & " presidents", "File Created") End Sub 16. Private Sub btnOr_Click(...) Handles btnOr.Click 'Create a combined list of presidents and vice presidents Dim vicePres() As String = IO.File.ReadAllLines("VPres.txt") Dim presidents() As String = IO.File.ReadAllLines("USPres.txt") Dim eitherOr() As String = presidents.Union(vicePres).ToArray IO.File.WriteAllLines("Or.txt", eitherOr) MessageBox.Show(eitherOr.Count & " people", "File Created") End Sub 17. Private Sub btnXor_Click(...) Handles btnXor.Click 'Create a file of people who were pres or VP but not both Dim vicePres() As String = IO.File.ReadAllLines("VPres.txt") Dim presidents() As String = IO.File.ReadAllLines("USPres.txt") Dim eitherOr() As String = presidents.Union(vicePres).ToArray Dim both() As String = presidents.Intersect(vicePres).ToArray Dim exclusiveOr() As String = eitherOr.Except(both).ToArray IO.File.WriteAllLines("Xor.txt", exclusiveOr) MessageBox.Show(exclusiveOr.Count & " presidents or vice presidents, but not both", "File Created") End Sub 18. Private Sub btnNotVP_Click(...) Handles btnNotVP.Click 'Create a file of presidents who were not vice-presidents Dim vicePres() As String = IO.File.ReadAllLines("VPres.txt") Dim presidents() As String = IO.File.ReadAllLines("USPres.txt") Dim presOnly() As String = presidents.Except(vicePres).ToArray IO.File.WriteAllLines("NotVP.txt", presOnly) MessageBox.Show(presOnly.Count & " presidents were not vice presidents", "File Created") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 248 of 443) 19. Dim countries() As String = IO.File.ReadAllLines("UN.txt") 'lstContinents was filled at design time Private Sub lstContinents_SelectedIndexChanged(...) Handles _ lstContinents.SelectedIndexChanged Dim selectedContinent As String = lstContinents.Text If (selectedContinent = "Antarctica") Then lstCountries.DataSource = Nothing MessageBox.Show("There are no countries in Antarctica.") Else Dim query = From nation In countries Let data = nation.Split(","c) Let name = data(0) Let continent = data(1) Where continent = selectedContinent Select name lstCountries.DataSource = query.ToList lstCountries.SelectedItem = Nothing End If End Sub 20. Dim colleges() As String = IO.File.ReadAllLines("Colleges.txt") Private Sub btnDisplay_Click(...) Handles btnDisplay.Click 'Display the colleges in Colleges.txt located in the given state Dim chosenState As String = mtbState.Text.ToUpper Dim query = From col In colleges Let data = col.Split(","c) Let name = data(0) Let state = data(1) Let yearFounded = data(2) Where state = chosenState Order By name Ascending Select name, yearFounded lstColleges.Items.Clear() For Each institution In query lstColleges.Items.Add(institution.name & " " & institution.yearFounded) Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 249 of 443) 21. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim cities() As String = IO.File.ReadAllLines("Cities.txt") Dim query = From city In cities Let data = city.Split(","c) Let pop2010 = CDbl(data(3)) Order By pop2010 Descending Select pop2010 Dim pops() As Double = query.ToArray ReDim Preserve pops(9) txtOutput.Text = (100000 * pops.Sum).ToString("N0") End Sub 22. Dim states() As String = IO.File.ReadAllLines("USStates.txt") Private Sub btnFind_Click(...) Handles btnFind.Click Dim query = From line In states Let data = line.Split(","c) Let name = data(0) Let abbrev = data(1) Let area = data(2) Where abbrev = mtbAbbrev.Text.ToUpper Select name, area txtOutput.Text = "The area of " & query.First.name & " is " & (CDbl(query.First.area)).ToString("N0") & " square miles." End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 250 of 443) 23. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim states() As String = IO.File.ReadAllLines("USStates.txt") Dim query = From line In states Let name = line.Split(","c)(0).ToUpper Let abbrev = line.Split(","c)(1) Where Not name.StartsWith(abbrev) Order By name Ascending Select abbrev, name dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("abbrev").HeaderText = "State Abbreviation" dgvOutput.Columns("name").HeaderText = "State" End Sub 24. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim usStates() As String = IO.File.ReadAllLines("USStates.txt") Dim query = From line In usStates Let name = line.Split(","c)(0) Let abbrev = line.Split(","c)(1) Let area = CInt(line.Split(","c)(2)) Let pop = CInt(line.Split(","c)(3)) Let density = pop / area Let formattedDensity = density.ToString("N") Order By density Descending Select name, formattedDensity dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("name").HeaderText = "State" dgvOutput.Columns("formattedDensity").HeaderText = "People per Square Mile" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 251 of 443) 25. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim states() As String = IO.File.ReadAllLines("USStates.txt") Dim query1 = From line In states Let area = CInt(line.Split(","c)(2)) Select area Dim totalArea = query1.Sum Dim query2 = From line In states Let name = line.Split(","c)(0) Let area = CInt(line.Split(","c)(2)) Let percentArea = (area / totalArea).ToString("P") Order By area Descending Select name, percentArea dgvOutput.DataSource = query2.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("name").HeaderText = "State" dgvOutput.Columns("percentArea").HeaderText = "Percentage of Total Area" End Sub 26. Dim baseball() As String = IO.File.ReadAllLines("Baseball.txt") Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query = From line In baseball Let fullName = line.Split(","c)(0) Let team = line.Split(","c)(1) Let atBats = CInt(line.Split(","c)(2)) Let hits = CInt(line.Split(","c)(3)) Let firstName = fullName.Split(" "c).First Let lastName = fullName.Split(" "c).Last Let ave = (hits / atBats).ToString("N3") Where team.ToUpper = txtTeam.Text.ToUpper Order By lastName, firstName Select fullName, ave dgvPlayers.DataSource = query.ToList dgvPlayers.CurrentCell = Nothing dgvPlayers.Columns("fullName").HeaderText = "Player" dgvPlayers.Columns("ave").HeaderText = "Batting Average" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 252 of 443) 27. Private Sub btnUpdate_Click(...) Handles btnUpdate.Click Dim colors() As String = IO.File.ReadAllLines("Pre1990Colors.txt") Dim retired() As String = IO.File.ReadAllLines("RetiredColors.txt") Dim added() As String = IO.File.ReadAllLines("AddedColors.txt") Dim tempArray() As String = colors.Except(retired).ToArray Dim query = From color In tempArray.Concat(added) Order By color Select color IO.File.WriteAllLines("NewColors.txt", query) End Sub 28. Private Sub btnCreate_Click(...) Handles btnCreate.Click Dim justices() As String = IO.File.ReadAllLines("Justices.txt") Dim query = From justice In justices Let data = justice.Split(","c) Let fullName = data(0) & " " & data(1) Let state = data(3) Select fullName & "," & state IO.File.WriteAllLines("Justices_States.txt", query) End Sub 29. Private Sub btnCreate_Click(...) Handles btnCreate.Click Dim justices() As String = IO.File.ReadAllLines("Justices.txt") Dim query = From justice In justices Let data = justice.Split(","c) Let firstName = data(0) Let secondName = data(1) Let pres = data(2) Let yrAppt = data(4) Let yrLeft = data(5) Select firstName & "," & secondName & "," & pres & "," & yrAppt & "," & yrLeft IO.File.WriteAllLines("JusticesNoState.txt", query) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 253 of 443) 30. Private Sub btnCreate_Click(...) Handles btnDisplay.Click Dim justices() As String = IO.File.ReadAllLines("Justices.txt") Dim query = From justice In justices Let data = justice.Split(","c) Let firstName = data(0) Let secondName = data(1) Let pres = data(2) Let state = data(3) Let yrAppt = data(4) Let yrLeft = data(5) Select firstName, secondName, pres, state, yrAppt, yrLeft dgvJustices.DataSource = query.ToList dgvJustices.CurrentCell = Nothing End Sub 31. Private Sub btnCreate_Click(...) Handles btnDisplay.Click 'query1: all states; query2: states with justices Dim states() As String = IO.File.ReadAllLines("USStates.txt") Dim justices() As String = IO.File.ReadAllLines("Justices.txt") Dim query1 = From state In states Let abbrev = state.Split(","c)(1) Select abbrev Dim query2 = From justice In justices Let state = justice.Split(","c)(3) Select state IO.File.WriteAllLines("NoJustices.txt", query1.Except(query2)) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 254 of 443) 32. Private Sub btnCreate_Click(...) Handles btnCreate.Click 'query1: all years; query2: years in which justices were appointed Dim justices() As String = IO.File.ReadAllLines("Justices.txt") Dim years(226) As Integer For i As Integer = 0 To 226 years(i) = i + 1789 Next Dim query1 = From yr In years Select CStr(yr) Dim query2 = From justice In justices Let yearAppointed = justice.Split(","c)(4) Select yearAppointed IO.File.WriteAllLines("NoAppointments.txt", query1.Except(query2)) End Sub 33. Dim justices() As String = IO.File.ReadAllLines("Justices.txt") Private Sub Create_Click(...) Handles Create.Click Dim query = From line In justices Let state = line.Split(","c)(3) Order By state Ascending Select state & "," & NumberOfJustices(state) Distinct IO.File.WriteAllLines("NewFile.txt", query) End Sub Function NumberOfJustices(state As String) As Integer Dim query = From line In justices Let place = line.Split(","c)(3) Where place = state Select place Return query.Count End Function 34. Dim justices() As String = IO.File.ReadAllLines("Justices.txt") Private Sub btnCreate_Click(...) Handles btnCreate.Click Dim query = From line In justices Let pres = line.Split(","c)(2) Order By pres Ascending Select pres & "," & NumberOfJustices(pres) Distinct IO.File.WriteAllLines("NewFile.txt", query) End Sub Function NumberOfJustices(pres As String) As Integer Dim query = From line In justices Let chief = line.Split(","c)(2) Where chief = pres Select chief Return query.Count End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 255 of 443) 35. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query = From state In IO.File.ReadAllLines("USStates.txt") Let data = state.Split(","c) Let name = data(0) Let abbrev = data(1) Let area = (CDbl(data(2))).ToString("N0") Let pop = (CDbl(data(2))).ToString("N0") Order By name Select name, abbrev, area, pop dgvStates.DataSource = query.ToList dgvStates.CurrentCell = Nothing End Sub 36. Dim dates() As String = IO.File.ReadAllLines("Calendar2017.txt") Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim query = From line In dates Let shortDate = line.split(","c)(0) Let weekDay = line.split(","c)(1) Where shortDate = txtDate.Text Select weekDay If query.Count = 1 Then txtDay.Text = query.First Else Dim str As String = " is not a valid date in 2017" MessageBox.Show(txtDate.Text & str) txtDate.Clear() txtDate.Focus() End If End Sub EXERCISES 8.2 1. Hello 2. Aloha 3. Bon Jour 4. Buenos Dias 5. You must enter a ©number. 6. Error occurred. 7. Error occurred. 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 256 of 443) 8. Error occurred 9. File Ages.txt contains an invalid age. 10. File Ages.txt not found 11. The file Welcome.txt is created and has the following lines: Hello Bon Jour 12. The Mystery function returns the value True if Laura is in the file, and returns False otherwise. 13. The filespec Greetings.txt should be delimited with quotation marks. 14. A StreamWriter cannot read from a file. 15. There should be no quotations around the variable name as the argument to the CreateText method. 16. The string literal "Greetings.txt" should be replaced with the variable sw to close the reader in the third line. Also, replace StreamReader with StreamWriter. 17. The variable age is declared within the Try-Catch-Finally block. Therefore it has block-level scope and is not available below the line End Try. 18. In line 4, CreateFile should be replaced with CreateText. In line 5, the words "exp As" should be inserted after the word "Catch". Also, the sw.Close() statement will generate an exception if the file was not found. 19. Private Sub btnCreate_Click(...) Handles btnCreate.Click 'Create a text file and populate it Dim sw As IO.StreamWriter = IO.File.CreateText("Cowboy.txt") sw.WriteLine("Colt Peacemaker,12.20") sw.WriteLine("Holster,2.00") sw.WriteLine("Levi Strauss jeans,1.35") sw.WriteLine("Saddle,40.00") sw.WriteLine("Stetson,10.00") sw.Close() 'Always close the writer when finished. MessageBox.Show("The file has been created.", "Done") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 257 of 443) 20. Private Sub btnCreate_Click(...) Handles btnCreate.Click 'Markdown the price of a saddle by 20% and 'store new list into Cowboy2.txt 'Open Cowboy for reading and Cowboy2 for creating Dim sr As IO.StreamReader = IO.File.OpenText("Cowboy.txt") Dim sw As IO.StreamWriter = IO.File.CreateText("Cowboy2.txt") Dim line As String = "" Dim data() As String Dim item As String Dim price As Decimal Do While Not sr.EndOfStream 'Loop until the end of file. line = sr.ReadLine 'Read the current item and price. data = line.Split(","c) item = data(0) price = CDec(data(1)) If (item.ToUpper = "SADDLE") Then 'Adjust the price of the Saddle item. price *= 0.8D price = Math.Round(price, 2) End If 'Write the item and price sw.WriteLine(item & "," & price.ToString("N")) Loop sr.Close() 'Always close the reader and writer when finished. sw.Close() MessageBox.Show("New file created.", "Done") End Sub 21. Private Sub btnAdd_Click(...) Handles btnAdd.Click 'Append item to a text file Dim sw As IO.StreamWriter = IO.File.AppendText("Cowboy.txt") sw.WriteLine("Winchester Rifle,20.50") sw.Close() MessageBox.Show("The item has been added to the file.", "Done") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 258 of 443) 22. Private Sub frmSalesReceipt_Load(...) Handles MyBase.Load 'Create a file containing the order Dim sw As IO.StreamWriter = IO.File.CreateText("Order.txt") sw.WriteLine(3) sw.WriteLine(2) sw.WriteLine(10) sw.WriteLine(1) sw.WriteLine(4) sw.Close() 'Always close writer when finished End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click 'Read the order and items and display a receipt 'Open order and item files Dim srOrder As IO.StreamReader = IO.File.OpenText("Order.txt") Dim srItem As IO.StreamReader = IO.File.OpenText("Cowboy.txt") Dim price, total As Decimal total = 0 Dim quantity As Integer Dim line As String Dim data() As String lstOutput.Items.Clear() Do While Not srItem.EndOfStream 'Loop over all records in Order quantity = CInt(srOrder.ReadLine) line = srItem.ReadLine data = line.Split(","c) price = CDec(data(1)) lstOutput.Items.Add(quantity & " " & data(0) & ": " & (quantity * price).ToString("C")) total += quantity * price Loop srOrder.Close() 'Always close readers when finished srItem.Close() lstOutput.Items.Add("TOTAL: " & total.ToString("C")) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 259 of 443) 23. Private Sub btnAdd_Click(...) Handles btnAdd.Click Dim item As String Dim price As Decimal Dim sr As IO.StreamReader = IO.File.OpenText("Cowboy.txt") Dim sw As IO.StreamWriter = IO.File.CreateText("Cowboy2.txt") Dim flag As Boolean = False Dim line As String = "" Dim data() As String Do While (line < txtItem.Text) And (Not sr.EndOfStream) line = sr.ReadLine data = line.Split(","c) item = data(0) price = CDec(data(1)) If item > txtItem.Text Then sw.WriteLine(txtItem.Text & "," & txtPrice.Text) 'Set flag to True so we don't add it again at the end. flag = True End If sw.WriteLine(line) Loop Do Until sr.EndOfStream line = sr.ReadLine sw.WriteLine(line) Loop If Not flag Then sw.WriteLine(txtItem.Text & "," & txtPrice.Text) End If sr.Close() sw.Close() MessageBox.Show("Item added to Cowboy2.txt") txtItem.Clear() txtPrice.Clear() End Sub 24. Dim sw As IO.StreamWriter = IO.File.AppendText("Cowboy.txt") Private Sub btnAdd_Click(...) Handles btnAdd.Click 'Add item to list If (txtItem.Text <> "") And (txtPrice.Text <> "") Then sw.WriteLine(txtItem.Text & "," & txtPrice.Text) 'Reset input text boxes. txtItem.Clear() txtPrice.Clear() Else MessageBox.Show("Must enter item name and price.") End If txtItem.Focus() 'Reset focus End Sub Private Sub btnDone_Click(...) Handles btnDone.Click sw.Close() Me.Close() 'Terminate the program. End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 260 of 443) 25. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim sr As IO.StreamReader = IO.File.OpenText("Cowboy.txt") Dim lines(4) As String For i As Integer = 0 To 4 lines(i) = sr.ReadLine Next Dim query = From line In lines Let data = line.Split(","c) Let item = data(0) Let cost = (CDbl(data(1))).ToString("C") Select item, cost dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing End Sub 26. Private Sub frmCreateFiles_Load(...) Handles MyBase.Load Dim sw As IO.StreamWriter = IO.File.CreateText("Greetings.txt") sw.WriteLine("Hello") sw.Close() End Sub Private Sub btnDelete_Click(...) Handles btnDelete.Click Dim sw As IO.StreamWriter = IO.File.AppendText("Greetings.txt") sw.WriteLine("Hi") Try IO.File.Delete("Greetings.txt") Catch ex As Exception sw.Close() IO.File.Delete("Greetings.txt") End Try End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 261 of 443) 27. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim sr As IO.StreamReader = IO.File.OpenText("Numbers.txt") Dim counter As Integer = 0 Dim num As Integer Do Until sr.EndOfStream num = CInt(sr.ReadLine) counter += 1 Loop txtOutput.Text = CStr(counter) sr.Close() End Sub 28. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim sr As IO.StreamReader = IO.File.OpenText("Numbers.txt") Dim num As Integer Dim max As Integer = CInt(sr.ReadLine) Do Until sr.EndOfStream num = CInt(sr.ReadLine) If (num > max) Then max = num End If Loop txtOutput.Text = CStr(max) sr.Close() End Sub 29. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim sr As IO.StreamReader = IO.File.OpenText("Numbers.txt") Dim num As Integer Dim min As Integer = CInt(sr.ReadLine) Do Until sr.EndOfStream num = CInt(sr.ReadLine) If (num < min) Then min = num End If Loop txtOutput.Text = CStr(min) sr.Close() End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 262 of 443) 30. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim sr As IO.StreamReader = IO.File.OpenText("Numbers.txt") Dim total As Integer = 0 Dim num As Double Do Until sr.EndOfStream num = CInt(sr.ReadLine) total += num Loop txtOutput.Text = CStr(total) sr.Close() End Sub 31. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim sr As IO.StreamReader = IO.File.OpenText("Numbers.txt") Dim counter As Integer = 0 Dim total As Integer = 0 Dim num As Integer Do Until sr.EndOfStream num = CInt(sr.ReadLine) counter += 1 total += num Loop txtOutput.Text = (total / counter).ToString("N") sr.Close() End Sub 32. Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim sr As IO.StreamReader = IO.File.OpenText("Numbers.txt") Dim num As Integer Do Until sr.EndOfStream num = CInt(sr.ReadLine) Loop txtOutput.Text = CStr(num) sr.Close() End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 263 of 443) 33. Private Sub frmStates_Load(...) Handles MyBase.Load Dim sr As IO.StreamReader = IO.File.OpenText("StatesBFNC.txt") Dim line As String, n As Integer Do line = sr.ReadLine n = line.IndexOf(",") lstStates.Items.Add(line.Substring(0, n)) Loop Until sr.EndOfStream sr.Close() End Sub Private Sub lstStates_SelectedIndexChanged(...) Handles _ lstStates.SelectedIndexChanged Dim sr As IO.StreamReader = IO.File.OpenText("StatesBFNC.txt") Dim state, line As String state = CStr(lstStates.SelectedItem) line = sr.ReadLine Do Until line.StartsWith(state) Or sr.EndOfStream line = sr.ReadLine Loop Dim data(4) As String data = line.Split(","c) txtBird.Text = data(1) txtFlower.Text = data(2) txtNickname.Text = data(3) txtCapital.Text = data(4) sr.Close() End Sub 34. Private Sub btnFind_Click(...) Handles btnFind.Click Dim sr As IO.StreamReader = IO.File.OpenText("StatesBFNC.txt") Dim flower, flowerUC, line As String Dim data(4) As String line = sr.ReadLine Do data = line.Split(","c) flower = data(2) flowerUC = flower.ToUpper If flowerUC.IndexOf("ROSE") <> -1 Then lstRoses.Items.Add(flower) End If line = sr.ReadLine Loop Until sr.EndOfStream sr.Close() End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 264 of 443) 35. Private Sub btnFind_Click(...) Handles btnDisplay.Click Dim sr As IO.StreamReader = IO.File.OpenText("StatesBFN.txt") Dim bird, line As String Dim data(3) As String Do line = sr.ReadLine data = line.Split(","c) bird = data(1) If lstBirds.Items.IndexOf(bird) = -1 Then lstBirds.Items.Add(bird) End If Loop Until sr.EndOfStream sr.Close() txtNumber.Text = CStr(lstBirds.Items.Count) End Sub 36. Private Sub btnFind_Click(...) Handles btnFind.Click Dim sr As IO.StreamReader = IO.File.OpenText("StatesBFNC.txt") Dim bird, line As String Dim data(4) As String line = sr.ReadLine Do data = line.Split(","c) bird = data(1) If bird.IndexOf("Cardinal") <> -1 Then lstCardinal.Items.Add(data(0)) End If line = sr.ReadLine Loop Until sr.EndOfStream sr.Close() End Sub 37. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim srVar As IO.StreamReader = IO.File.OpenText("Gettysburg.txt") Dim contents As String = srVar.ReadLine srVar.Close() MessageBox.Show(contents, "Gettysburg Address") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 265 of 443) 38. Private Sub btnAnalyze_Click(...) Handles btnAnalyze.Click Dim letter As String Dim max As Integer Dim srVar As IO.StreamReader = IO.File.OpenText("Gettysburg.txt") Dim contents As String = srVar.ReadLine srVar.Close() Dim words() As String = contents.Split(" "c) txtNumWords.Text = CStr(words.Count) contents = contents.ToUpper 'Create an array where each element corresponds to a letter Dim alphabet(25) As Integer For i As Integer = 0 To contents.Length - 1 letter = contents.Substring(i, 1) If Asc(letter) >= 65 Then alphabet(Asc(letter) - 65) += 1 End If Next 'Find letter(s) that appear most frequently max = alphabet(0) For i As Integer = 1 To 25 If alphabet(i) > max Then max = alphabet(i) letter = Chr(i + 65) End If Next For i As Integer = 0 To 25 If alphabet(i) = max Then txtMost.Text &= " " & Chr(i + 65) End If Next txtMost.Text &= " " & CStr(max) 'Find letters that appear just once For i As Integer = 0 To 25 If alphabet(i) = 1 Then txtOnce.Text &= " " & Chr(i + 65) End If Next 'Find letters that do not appear For i As Integer = 0 To 25 If alphabet(i) = 0 Then txtNever.Text &= " " & Chr(i + 65) End If Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 266 of 443) 39. Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim sr As IO.StreamReader = IO.File.OpenText("Temperatures.txt") Dim num, sum, high, low As Double num = CDbl(sr.ReadLine) sum += num high = num low = num Do Until sr.EndOfStream num = CDbl(sr.ReadLine) sum += num If num > high Then high = num End If If num < low Then low = num End If Loop txt24hrs.Text = (sum / 24).ToString("N2") txtHigh_Low.Text = ((high + low) / 2).ToString("N2") sr.Close() End Sub EXERCISES 8.3 1. No 2. No 3. No 4. Yes 5. No 6. No 7. No 8. No 9. No 10. No 11. <?xml version='1.0'?> <!-- This file contains the ages of the presidents when inaugurated.--> <Presidents> <president> <name>George Washington</name> <ageAtInauguation>57</ageAtInauguation> </president> <president> <name>John Adams</name> <ageAtInauguation>61</ageAtInauguation> </president> </Presidents> 12. <?xml version="1.0" ?> <!-- This file contains data on each Supreme Court justice. --> <Supreme_Court> <justice> <firstName>Samuel</firstName> <secondName>Alito</secondName> <appointingPres>George W. Bush</appointingPres> <state>NJ</state> <yrAppointed>2006</yrAppointed> <yrLeft>0</yrLeft> </justice> <justice> <firstName>Henry</firstName> <secondName>Baldwin</secondName> <appointingPres>Andrew Jackson</appointingPres> <state>PA</state> <yrAppointed>1830</yrAppointed> <yrLeft>1844</yrLeft> </justice> </Supreme_Court>© 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 267 of 443) 13. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim stateData As XElement = XElement.Load("USStates.xml") Dim query = From st In stateData.Descendants("state") Let pop = CInt(st.<population>.Value) Select pop txtOutput.Text = (query.Sum).ToString("N0") End Sub 14. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim stateData As XElement = XElement.Load("USStates. xml ") Dim query = From st In stateData.Descendants("state") Let area = CInt(st.<area>.Value) Select area txtOutput.Text = (query.Sum).ToString("N0") & " square miles" End Sub 15. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim stateData As XElement = XElement.Load("USStates.xml") Dim queryPop = From st In stateData.Descendants("state") Let pop = CInt(st.<population>.Value) Select pop Dim queryArea = From st In stateData.Descendants("state") Let area = CInt(st.<area>.Value) Select area txtOutput.Text = (queryPop.Sum / queryArea.Sum).ToString("N") & " people per square mile" End Sub 16. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim stateData As XElement = XElement.Load("USStates. xml ") Dim query1 = From st In stateData.Descendants("state") Let name = st.<name>.Value Let len = name.Length Order By len Descending Select len Dim maxLength As Integer = query1.First Dim query2 = From st In stateData.Descendants("state") Let name = st.<name>.Value Let len = name.Length Where len = maxLength Select name lstOutput.DataSource = query2.ToList lstOutput.SelectedItem = Nothing End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 268 of 443) 17. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim stateData As XElement = XElement.Load("USStates.xml") Dim query = From st In stateData.Descendants("state") Let name = st.<name>.Value Let area = CDbl(st.<area>.Value) Let formattedArea = area.ToString("N0") Where area > 100000 Order By area Descending Select name, formattedArea dgvStates.DataSource = query.ToList dgvStates.CurrentCell = Nothing dgvStates.Columns("name").HeaderText = "State" dgvStates.Columns("formattedArea").HeaderText = "Area" End Sub 18. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim stateData As XElement = XElement.Load("USStates.xml") Dim query = From st In stateData.Descendants("state") Let name = st.<name>.Value Let pop = CDbl(st.<population>.Value) Let formattedPop = pop.ToString("N0") Where pop < 1000000 Order By pop Ascending Select name, formattedPop dgvStates.DataSource = query.ToList dgvStates.CurrentCell = Nothing dgvStates.Columns("name").HeaderText = "State" dgvStates.Columns("formattedPop").HeaderText = "Population" End Sub 19. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim stateData As XElement = XElement.Load("USStates.xml") Dim query1 = From st In stateData.Descendants("state") Let name = st.<name>.Value Let numVowels = NumberOfVowels(name) Order By numVowels Descending Select numVowels Dim maxVowels As Integer = query1.First Dim query2 = From st In stateData.Descendants("state") Let name = st.<name>.Value Where NumberOfVowels(name) = maxVowels Select name lstOutput.DataSource = query2.ToList lstOutput.SelectedItem = Nothing End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 269 of 443) Function NumberOfVowels(word As String) As Integer word = word.ToUpper Dim num As Integer = 0 If (word.IndexOf("A") <> -1) Then num += 1 End If If (word.IndexOf("E") <> -1) Then num += 1 End If If (word.IndexOf("I") <> -1) Then num += 1 End If If (word.IndexOf("O") <> -1) Then num += 1 End If If (word.IndexOf("U") <> -1) Then num += 1 End If Return num End Function 20. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim stateData As XElement = XElement.Load("USStates.xml") Dim query = From st In stateData.Descendants("state") Let name = st.<name>.Value.ToUpper Let abbrev = st.<abbreviation>.Value Where Not name.StartsWith(abbrev) Order By abbrev Ascending Select name, abbrev dgvStates.DataSource = query.ToList dgvStates.CurrentCell = Nothing dgvStates.Columns("name").HeaderText = "State" dgvStates.Columns("abbrev").HeaderText = "Abbreviation" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 270 of 443) 21. Dim colleges As XElement = XElement.Load("Colleges.xml") Private Sub btnDisplay_Click(...) Handles btnDisplay.Click 'Display the colleges in Colleges.xml located in the given state Dim chosenState As String = mtbState.Text.ToUpper 'mask LL Dim query = From col In colleges.Descendants("college") Let name = col.<name>.Value Let state = col.<state>.Value Let yearFounded = col.<yearFounded>.Value Where state = chosenState Order By name Ascending Select name & " " & yearFounded lstColleges.DataSource = query.ToList lstColleges.SelectedItem = Nothing End Sub 22. Dim colleges As XElement = XElement.Load("Colleges.xml") Private Sub frmColleges_Load(...) Handles MyBase.Load Dim query = From col In colleges.Descendants("college") Let name = col.<name>.Value Order By name Ascending Select name lstColleges.DataSource = query.ToList End Sub Private Sub lstColleges_SelectedIndexChanged(...) Handles _ lstColleges.SelectedIndexChanged Dim chosenCollege As String = lstColleges.Text Dim query = From col In colleges.Descendants("college") Let name = col.<name>.Value Let state = col.<state>.Value Let yearFounded = col.<yearFounded>.Value Where name = chosenCollege Select state, yearFounded txtState.Text = query.First.state txtYear.Text = query.First.yearFounded End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 271 of 443) 23.Dim colleges As XElement = XElement.Load("Colleges.xml") Private Sub frmColleges_Load(...) Handles MyBase.Load 'Place the years for each college into the array schools Dim query = From col In colleges.Descendants("college") Let yearFounded = col.<yearFounded>.Value Order By yearFounded Ascending Select yearFounded Distinct lstYears.DataSource = query.ToList lstYears.SelectedItem = Nothing End Sub Private Sub lstYears_SelectedIndexChanged(...) Handles _ lstYears.SelectedIndexChanged Dim chosenYear As String = lstYears.Text Dim query = From col In colleges.Descendants("college") Let name = col.<name>.Value Let yearFounded = col.<yearFounded>.Value Where yearFounded = chosenYear Select name lstColleges.DataSource = query.ToList lstColleges.SelectedItem = Nothing End Sub 24. Dim colleges As XElement = XElement.Load("Colleges.xml") Private Sub frmColleges_Load(...) Handles MyBase.Load Dim query = From col In colleges.Descendants("college") Let name = col.<name>.Value Let state = col.<state>.Value Let yearFounded = col.<yearFounded>.Value Order By state, yearFounded Select name, state dgvColleges.DataSource = query.ToList dgvColleges.CurrentCell = Nothing dgvColleges.Columns("name").HeaderText = "College" dgvColleges.Columns("state").HeaderText = "State" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 272 of 443) 25(a). Private Sub btnSenate_Click(...) Handles btnSenate.Click Dim sr As IO.StreamReader = IO.File.OpenText("Senate113.txt") Dim sw As IO.StreamWriter = IO.File.CreateText("Senate113.xml") sw.WriteLine("<?xml version='1.0'?>") sw.WriteLine("<!-- This file contains data on the 113th Senate -->") sw.WriteLine("<Senate113>") Dim temp As String = "" Do Until sr.EndOfStream temp = sr.ReadLine sw.WriteLine(" <senator>") sw.WriteLine(" <name>" & temp.Split(","c)(0) & "</name>") sw.WriteLine(" <state>" & temp.Split(","c)(1) & "</state>") sw.WriteLine(" <party>" & temp.Split(","c)(2) & "</party>") sw.WriteLine(" </senator>") Loop sw.WriteLine("</Senate113>") sr.Close() sw.Close() MessageBox.Show("File Created") End Sub 25(b). Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim senateData As XElement = XElement.Load("Senate113.xml") Dim query = From st In senateData.Descendants("senator") Let name = st.<name>.Value Let state = st.<state>.Value Let party = st.<party>.Value Order By state, name Ascending Select name, state, party dgvSenators.DataSource = query.ToList dgvSenators.CurrentCell = Nothing dgvSenators.Columns("name").HeaderText = "Senator" dgvSenators.Columns("state").HeaderText = "State" dgvSenators.Columns("party").HeaderText = "Party Affiliation" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 273 of 443) 26(a). Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim sluggerData As XElement = XElement.Load("Top25HR.xml") Dim query = From st In sluggerData.Descendants("player") Let name = st.<name>.Value Let atBats = st.<atBats>.Value Let homeRuns = st.<homeRuns>.Value Order By homeRuns Descending Select name, atBats, homeRuns dgvSenators.DataSource = query.ToList dgvSenators.CurrentCell = Nothing dgvSenators.Columns("name").HeaderText = "Player" dgvSenators.Columns("atBats").HeaderText = "At Bats" dgvSenators.Columns("homeRuns").HeaderText = "Home Runs" End Sub 26(b). Private Sub btnCreate_Click(...) Handles btnCreate.Click Dim sluggerData As XElement = XElement.Load("Top25HR.xml") Dim query = From st In sluggerData.Descendants("player") Let name = st.<name>.Value Let atBats = st.<atBats>.Value Let homeRuns = st.<homeRuns>.Value Let line = name & "," & atBats & "," & homeRuns Select line IO.File.WriteAllLines("Top25HR.txt", query.ToArray) MessageBox.Show("File Created") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 274 of 443) CHAPTER 8 PROGRAMMING PROJECTS 1. Private Sub btnDisplay_Click(...) Handles btnCreate.Click Dim query = From line In IO.File.ReadAllLines("ALE.txt") Let data = line.Split(","c) Let team = data(0) Let wins = CInt(data(1)) Let losses = CInt(data(2)) Let pct = wins / (wins + losses) Let formattedPct = pct.ToString("N3") Order By pct Descending Select team & "," & wins & "," & losses & "," & formattedPct IO.File.WriteAllLines("OrderedALE.txt", query.ToArray) End Sub 2(a). Private Sub btnCreate_Click(...) Handles btnCreate.Click Dim query1 = From senator In IO.File.ReadAllLines("Senate112.txt") Select senator Dim query2 = From senator In IO.File.ReadAllLines("RetiredSen.txt") Select senator Dim query3 = From senator In IO.File.ReadAllLines("NewSen.txt") Select senator Dim query4 = From senator In query1.Except(query2) Select senator Dim query5 = From senator In query4.Concat(query3) Order By senator.Split(","c)(1) Select senator IO.File.WriteAllLines("Senate113.txt", query5) MessageBox.Show("File Created") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 275 of 443) 2(b). Private Sub btnCount_Click(...) Handles btnCount.Click Dim senators() As String = IO.File.ReadAllLines("Senate113.txt") Dim queryDem = From senator In senators Let data = senator.Split(","c) Let party = data(2) Where party = "D" Select party txtDemocrats.Text = CStr(queryDem.Count) Dim queryRep = From senator In senators Let data = senator.Split(","c) Let party = data(2) Where party = "R" Select party txtRepublicans.Text = CStr(queryRep.Count) Dim queryInd = From senator In senators Let data = senator.Split(","c) Let party = data(2) Where party = "I" Select party txtIndependents.Text = CStr(queryInd.Count) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 276 of 443) 2(c). Dim senators() As String = IO.File.ReadAllLines("Senate113.txt") Private Sub btnCount_Click(...) Handles btnCount.Click Dim query = From senator In senators Let data = senator.Split(","c) Let state = data(1) Select state Distinct Dim total As Integer = 0 For Each state In query If SameParty(state) Then total += 1 End If Next txtSameParty.Text = CStr(total) End Sub Function SameParty(state As String) As Boolean Dim query = From senator In senators Let data = senator.Split(","c) Where data(1) = state Let party = data(2) Select party If (query.First = query.Last) Then Return True Else Return False End If End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 277 of 443) 2(d)Dim senators() As String = IO.File.ReadAllLines("Senate113.txt") Private Sub frmSenate_Load(...) Handles MyBase.Load Dim query = From senator In senators Let data = senator.Split(","c) Let state = data(1) Select state Distinct lstStates.DataSource = query.ToList lstStates.SelectedItem = Nothing End Sub Private Sub lstStates_SelectedIndexChangedc Handles _ lstStates.SelectedIndexChanged Dim query = From senator In senators Let data = senator.Split(","c) Let name = data(0) Let state = data(1) Where state = lstStates.Text Select name lstSenators.DataSource = query.ToList lstSenators.SelectedItem = Nothing End Sub 3(a)Dim sr As IO.StreamReader = IO.File.OpenText("Names.txt") Dim sw As IO.StreamWriter = IO.File.CreateText("NewFile.txt") Private Sub btnInsert_Click(...) Handles btnInsert.Click Dim newName As String = txtName.Text, name As String Dim insertFlag As Boolean = False Do Until sr.EndOfStream name = sr.ReadLine Select Case newName Case Is < name sw.WriteLine(newName) insertFlag = True sw.WriteLine(name) Finish() Exit Do Case name Finish() Exit Do Case Is > name sw.WriteLine(name) End Select Loop If Not insertFlag Then sw.WriteLine(newName) End If sr.Close() sw.Close() End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 278 of 443) Sub Finish() Dim nom As String Do Until sr.EndOfStream nom = sr.ReadLine sw.WriteLine(nom) Loop sr.Close() sw.Close() End Sub 3(b). Private Sub btnInsert_Click(...) Handles btnInsert.Click Dim newName = txtName.Text Dim query1 = From name In IO.File.ReadAllLines("Names.txt") Select name Dim names() = query1.ToArray Dim n = names.Count - 1 ReDim Preserve names(n + 1) names(n + 1) = newName Dim query2 = From name In names Order By name Select name Distinct IO.File.WriteAllLines("NewFile.txt", query2.ToArray) End Sub 4. Dim fileName As String = "" 'Current phone directory Private Sub frmPhone_Load(...) Handles MyBase.Load DisplayDirectories() End Sub Private Sub btnCreate_Click(...) Handles btnCreate.Click Dim dirNames() As String = IO.File.ReadAllLines("Directories.txt") Dim sw As IO.StreamWriter = IO.File.AppendText("Directories.txt") Dim newDir As String = InputBox("Enter a file name.").ToUpper If (Array.IndexOf(dirNames, newDir) = -1) Then sw.WriteLine(newDir) Dim sw2 As IO.StreamWriter = IO.File.CreateText(newDir) sw2.Close() End If sw.Close() DisplayDirectories() End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 279 of 443) Private Sub btnOpen_Click(...) MessageBox.Show("Click on an existing phone directory.") End Sub Sub DisplayDirectories() lstDirs.Items.Clear() If IO.File.Exists("Directories.txt") Then Dim query = From phoneDir In IO.File.ReadAllLines("Directories.txt") Order By phoneDir Select phoneDir For Each phoneDir In query lstDirs.Items.Add(phoneDir) Next End If End Sub Private Sub lstDirs_SelectedIndexChanged(...) Handles _ lstDirs.SelectedIndexChanged fileName = lstDirs.Text txtCurrent.Text = lstDirs.Text End Sub Private Sub btnAdd_Click(...) Handles btnAdd.Click 'Add name to directory (do not keep the file open). If (txtName.Text.Trim.Length = 0) Or (txtPhoneNumber.Text.Trim.Length = 0) Then MessageBox.Show("You must enter a name and number.") Else Dim sw As IO.StreamWriter = IO.File.AppendText(fileName) sw.WriteLine(txtName.Text & "," & txtPhoneNumber.Text) sw.Close() txtName.Clear() txtPhoneNumber.Clear() txtName.Focus() End If End Sub Private Sub btnRemove_Click(...) Handles btnRemove.Click Dim query = From line In IO.File.ReadAllLines(fileName) Let name = line.Split(","c)(0) Let phoneNum = line.Split(","c)(1) Where name <> txtName.Text Select name & "," & phoneNum IO.File.WriteAllLines(fileName, query.ToArray) txtName.Clear() txtPhoneNumber.Clear() txtName.Focus() End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 280 of 443) Private Sub btnDisplay_Click(...) Handles btnDisplay.Click If ((fileName <> "") And IO.File.Exists(fileName)) Then Dim query = From line In IO.File.ReadAllLines(fileName) Let name = line.Split(","c)(0) Let phoneNum = line.Split(","c)(1) Order By name Select name, phoneNum dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("name").HeaderText = "Name" dgvOutput.Columns("phoneNum").HeaderText = "Phone Number" End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 281 of 443) 5. (Assume Imports System.IO placed at top of Code Editor) Private Sub frmUPC_Load(...) Handles MyBase.Load File.Delete("Items.txt") mtbUPC.Focus() End Sub Private Sub btnNewCustomer_Click(...) Handles btnNewCustomer.Click File.Delete("Items.txt") lstReceipt.Items.Clear() mtbUPC.Focus() End Sub Private Sub btnDisplayReceipt_Click(...) Handles btnDisplayReceipt.Click Dim UPC() As String = File.ReadAllLines("UPC.txt") Dim total As Decimal 'sum of all item prices Dim sr As StreamReader = File.OpenText("Items.txt") Dim code As String lstReceipt.Items.Clear() Do Until sr.EndOfStream code = sr.ReadLine Dim query = From line In UPC Let cd = line.Split(","c)(0) Let desc = line.Split(","c)(1) Let price = CDec(line.Split(","c)(2)) Where cd = code Select desc, price If (query.Count = 0) Then 'UPC is not in the database lstReceipt.Items.Add("UPC " & code & " not found" & " " & "-----") Else lstReceipt.Items.Add(query.First.desc & ": " & (query.First.price).ToString("C")) total += query.First.price End If Loop sr.Close() lstReceipt.Items.Add("TOTAL: " & total.ToString("C") End Sub Private Sub btnAddItem_Click(...) Handles btnAddItem.Click Dim sw As StreamWriter = File.AppendText("Items.txt") If isValidUPC(mtbUPC.Text) Then sw.WriteLine(mtbUPC.Text) lstReceipt.Items.Add(mtbUPC.Text & " -- OK") Else lstReceipt.Items.Add("UPC Error -- Please re-enter UPC") End If sw.Close() mtbUPC.Clear() mtbUPC.Focus() End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 282 of 443) Function isValidUPC(upc As String) As Boolean Dim upcLength As Integer = 12 Dim d(upcLength) As Integer 'Array of digits of UPC code as numbers Dim checksum As Integer 'Weighted sum of digits as given by formula 'Determines whether the given upc code is a valid UPC If (upc.Length <> 12) Then isValidUPC = False Else For i As Integer = 1 To upcLength d(i) = CInt(upc.Substring(i - 1, 1)) Next i checksum = 0 For i As Integer = 1 To (upcLength – 1) Step 2 checksum = checksum + (3 * d(i)) + d(i + 1) Next i If (checksum Mod 10) = 0 Then isValidUPC = True Else isValidUPC = False End If End If End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 283 of 443) 6. Dim playerData As XElement = XElement.Load("Baseball.xml") Private Sub frmBaseball_Load(...) Handles MyBase.Load Dim query = From pl In playerData.Descendants("player") Let team = pl.<team>.Value Order By team Select team Distinct For Each club In query lstTeams.Items.Add(club) Next End Sub Private Sub lstTeams_SelectedIndexChanged(...) Handles _ lstTeams.SelectedIndexChanged Dim query = From pl In playerData.Descendants("player") Let team = pl.<team>.Value Let atBats = CInt(pl.<atBats>.Value) Let hits = CInt(pl.<hits>.Value) Let battingAverage = hits / atBats Where team = lstTeams.Text Select battingAverage Dim teamAverage As Double = query.Average Dim query2 = From pl In playerData.Descendants("player") Let name = pl.<name>.Value Let team = pl.<team>.Value Let atBats = CInt(pl.<atBats>.Value) Let hits = CInt(pl.<hits>.Value) Let battingAverage = hits / atBats Let formattedBattingAve = battingAverage.ToString("N3") Where (team = lstTeams.Text) And (battingAverage > teamAverage) Order By battingAverage Descending Select name, formattedBattingAve dgvPlayers.DataSource = query2.ToList dgvPlayers.CurrentCell = Nothing dgvPlayers.Columns("name").HeaderText = "Player" dgvPlayers.Columns("formattedBattingAve").HeaderText = "Batting Average" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 284 of 443) CHAPTER 9 EXERCISES 9.1 1. Chopin is deleted from the list. 2. The first item, Bach, is removed from lstBox. 3. The currently selected item in lstBox, Mozart, is deleted. 4. The last item, Tchaikovsky, is removed from lstBox. 5. The item Haydn is inserted into lstBox between Chopin and Mozart. 6. The number 2 is displayed in the text box. 7. The names in the list box will appear in descending alphabetical order. 8. The names in the list box will appear in descending alphabetical order. 9. cboBox.Text = "Dante" 10. cboBox.Text = CStr(cboBox.Items(2)) 11. cboBox.Items.Remove("Shakespeare") 12. cboBox.Items.Remove("Goethe") 13. cboBox.Items.RemoveAt(cboBox.Items.Count - 1) 14. For i As Integer = 0 To (cboBox.Items.Count – 1) Step 2 lstOutput.Items.Add(cboBox.Items(i)) Next 15. Dim i As Integer = 0 Do While i < cboBox.Items.Count If (CStr(cboBox.Items(i)).Substring(0, 1) = "M") Then cboBox.Items.RemoveAt(i) Else i += 1 End If Loop 16. Dim found As Boolean = False For i As Integer = 0 To (cboBox.Items.Count – 1) If CStr(cboBox.Items(i)) = "Cervantes" Then found = True End If Next If found Then txtOutput.Text = "Cervantes is in the list." Else txtOutput.Text = "Cervantes not found." End If © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 285 of 443) 17. Private Sub btnSort_Click(...) Handles btnSort.Click 'Assume the String Collection Editor was filled with the numbers '4, 9, 2, 11, 5, 17, 3, 6 at design time Dim n As Integer = lstBox.Items.Count - 1 Dim nums(n) As Double For i As Integer = 0 To n nums(i) = CDbl(lstBox.Items(i)) Next Dim query = From num In nums Order By num Ascending Select num lstBox.DataSource = query.ToList lstBox.SelectedItem = Nothing End Sub 18. Private Sub btnRemove_Click(sender As System.Object, e As System.EventArgs) Handles btnRemove.Click Dim n As Integer = lstDOW.Items.Count - 1 Dim stocks(n) As String For i As Integer = 0 To n stocks(i) = CStr(lstDOW.Items(i)) Next Dim query = From stock In stocks Select stock Distinct lstDOW.DataSource = query.ToList lstDOW.SelectedItem = Nothing End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 286 of 443) 19. Private Sub frmList_Load(...) Handles MyBase.Load lblCount.Text = CStr(lstOutput.Items.Count) End Sub Private Sub btnAdd_Click(...) Handles btnAdd.Click Dim first(), last() As String Dim location As Integer = lstOutput.SelectedIndex Dim newItem As String = InputBox("Enter item to add to list:", "Add Item") If (location = -1) Then ReDim first(lstOutput.Items.Count - 1) For i As Integer = 0 To (lstOutput.Items.Count – 1) first(i) = CStr(lstOutput.Items(i)) Next lstOutput.Items.Clear() lstOutput.Items.Add(newItem) For i As Integer = 0 To (first.Count – 1) lstOutput.Items.Add(first(i)) Next Else ReDim first(location - 1) For i As Integer = 0 To (location - 1) first(i) = CStr(lstOutput.Items(i)) Next ReDim last(lstOutput.Items.Count - location - 1) For i As Integer = 0 To (lstOutput.Items.Count - location - 1) last(i) = CStr(lstOutput.Items(location + i)) Next lstOutput.Items.Clear() For i As Integer = 0 To (first.Count – 1) lstOutput.Items.Add(first(i)) Next lstOutput.Items.Add(newItem) For i As Integer = 0 To (last.Count – 1) lstOutput.Items.Add(last(i)) Next End If lblCount.Text = CStr(lstOutput.Items.Count) 'Update the counter. End Sub Private Sub btnDelete_Click(...) Handles btnDelete.Click Dim location As Integer = lstOutput.SelectedIndex 'Only delete if something is selected. If (location >= 0) Then lstOutput.Items.RemoveAt(location) lblCount.Text = CStr(lstOutput.Items.Count) 'Update the counter. End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 287 of 443) 20. Private Sub btnSort_Click(...) Handles btnSort.Click Dim n As Integer = lstBox.Items.Count - 1 Dim words(n) As String For i As Integer = 0 To n words(i) = CStr(lstBox.Items(i)) Next Dim query = From word In words Order By word Descending Select word lstBox.DataSource = query.ToList lstBox.SelectedItem = Nothing End Sub 21. Private Sub btnSort_Click(...) Handles btnSort.Click Dim names() As String = IO.File.ReadAllLines("PopularNames.txt") lstOutput.Sorted = True lstOutput.DataSource = names lstOutput.SelectedItem = Nothing For i As Integer = 0 To (lstOutput.Items.Count – 1) names(i) = CStr(lstOutput.Items(i)) Next IO.File.WriteAllLines("SortedNames.txt", names) MessageBox.Show("The ordered file has been created.", "Done") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 288 of 443) 22. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click 'Convert a length from one unit to the other. 'The inches array stores the number of inches in each unit. Dim inches() As Double = {1, 12, 3 * 12, 100 / 2.54, 12 * 5280} 'If input is not specified, display message. If ((lstFrom.SelectedIndex < 0) Or (lstTo.SelectedIndex < 0) Or (txtAmount.Text = "")) Then MessageBox.Show("Please select both units and " & "enter a length.", "INCOMPLETE") Else 'Convert the first units to inches, then convert to second units. Dim result As Double = CDbl(txtAmount.Text) * inches(lstFrom.SelectedIndex) / inches(lstTo.SelectedIndex) 'Display the decimal places in the result depending upon the size. If (result < 1) Then txtOutput.Text = result.ToString("N6") Else txtOutput.Text = result.ToString("N") End If End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 289 of 443) 23. Dim ages() As String = IO.File.ReadAllLines("AgesAtInaugural.txt") Private Sub frmPres_Load(...) Handles MyBase.Load Dim pres() As String = IO.File.ReadAllLines("USPres.txt") lstPres.DataSource = pres End Sub Private Sub lstPres_SelectedIndexChanged(...) Handles _ lstPres.SelectedIndexChanged txtAge.Text = ages(lstPres.SelectedIndex) End Sub 24. Private Sub btnReport_Click(...) Handles btnReport.Click 'Display the space chosen txtAnswer.Text = "You have landed on " & cboMonopoly.Text & "." End Sub 25. 'Note: This event procedure handles events from all three combo boxes Private Sub SelectedIndexChanged(...) Handles _ cboBrand.SelectedIndexChanged, cboMemory.SelectedIndexChanged, cboMonitor.SelectedIndexChanged 'Update output if all choices have been made. If ((cboBrand.SelectedIndex >= 0) And (cboMemory.SelectedIndex >= 0) And (cboMonitor.SelectedIndex >= 0)) Then txtOutput.Text = "You have a " & cboBrand.Text & " computer with " & cboMemory.Text & " of memory and a " & cboMonitor.Text & " monitor." End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 290 of 443) EXERCISES 9.2 1. The Tick event will be triggered every 5 seconds (5000 milliseconds). 2. The control Timer1 is disabled. 3. The tooltip will appear one second after the cursor is hovered over a control. 4. The tooltip will remain visible for 4 seconds after it appears. 5. A check mark appears in front of the mnuOrderAsc menu item. 6. The menu item mnuOrderAsc appears without a check mark to its left. 7. The Tick event will be triggered every intVar seconds. 8. A number from 1 through 100 is randomly selected and displayed in txtBox. 9. The name of one of the U.S. states is selected at random and displayed in txtBox. 10. A character that can be displayed with the computer keyboard is selected at random and displayed in txtBox. 11. Two states are selected at random and displayed in the list box. 12. A card is drawn at random from a standard deck of playing cards. 13. The contents of the Clipboard are deleted. 14. The contents of the Clipboard become the string "Hello". 15. The text currently selected in txtBox, if any, is copied into the Clipboard. 16. The string “Hello” replaces the selected text in the text box. If no text is selected, the string “Hello” is inserted into the text box at the cursor position. If the cursor is not in the t21.xtBox, the string “Hello” is concatenated to the end of the contents of txtBox. 17. The text “el” is copied into the Clipboard. 18. The contents of the text box becomes “Hlo” and “el” is placed into the Clipboard. 19. “Hxxlo” is displayed in txtBox. 20. The contents of the Clipboard become the string "Happy". 21. The contents of the Clipboard are assigned to the variable strVar. 22. Any picture placed into the picture box will be automatically enlarged or contracted to fit the picture box. 23. A picture of an airplane will be placed in the picture box. 24. The scroll box moves so that its left side is in the middle of the horizontal scroll bar. 25. Clicking on the arrow on either end of the scroll bar will move the button the same ("large") distance as clicking on the bar between the scroll box and an arrow. 26. Timer1.Interval = 500 Timer1.Enabled = True 27. Timer1.Enabled = False 28. Dim randomNum As New Random() txtBox.Text = names(randomNum.Next(0, 20)) © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 291 of 443) 29. Dim randomNum As New Random() txtBox.Text = CStr(randomNum.Next(1, 13)) 30. Dim randomNum As New Random() 'A and Z have ANSI values 65 and 90. txtBox.Text = Chr(randomNum.Next(65, 91)) 31. Dim sr As IO.StreamReader = IO.Files.ReadText("Towns.txt") Dim randomNum As New Random() Dim num As Integer = randomNum.Next(1, 26) Dim city As String For i As Integer = 1 To num city = sr.ReadLine Next txtBox.Text = city 32. Dim randomNum As New Random() txtBox.Text = CStr(randomNum(1, 7) + randomNum(1, 7)) 33. Dim n As Integer = rivers.Count If (n >= 2) Then Dim randomNum As New Random() Dim firstNumber, secondNumber As Integer firstNumber = randomNum.Next(0, n) Do secondNumber = randomNum.Next(0, n) Until secondNumber <> firstNumber lstBox.Items.Add(rivers(firstNumber)) lstBox.Items.Add(rivers(secondNumber)) Else MessageBox.Show("The array has fewer than two elements.") End If 34. txtBox.SelectedText = Clipboard.GetText 35. Clipboard.Clear 36. Clipboard.SetText("Rosebud") 37. txtBox.Copy() 38. txtBox.Cut() 39. Dim amount As Integer amount = CInt(Clipboard.GetText) 40. txtBox.Clear() txtBox.Paste() 41. mnuOrderDesc.Checked = False 42. mnuOrderDesc.Text = "Decreasing Order" 43. VScrollBar2.Value = VScrollBar2.Minimum 44. HScrollBar2.Value = CInt(HScrollBar2.Minimum + (HScrollBar2.Maximum - HScrollBar2.Minimum) / 3) 45. The menu item mnuOrderAsc is grayed out and cannot be selected. 46. The menu item mnuOrderAsc is not visible in the pull-down menu. © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 292 of 443) 47. Private Sub frmClock_Load(...) Handles MyBase.Load picBox.Image = Image.FromFile("Trees.bmp") UpdateClock() End Sub Private Sub tmrClock_Tick(...) Handles tmrClock.Tick UpdateClock() End Sub Private Sub UpdateClock() Dim timeStr As String = "" timeStr = timeStr & (Hour(Now)).ToString("N0") timeStr &= ":" & PadZero(Minute(Now)) timeStr &= ":" & PadZero(Second(Now)) lblTime.Text = timeStr End Sub Function PadZero(num As Integer) As String 'Pads a one-digit number with a zero Dim result As String result = num.ToString("N0") If num < 10 Then Return "0" & result Else Return result End If End Function 48. Dim randomNum As New Random() 'Random number generator Private Sub btnToss_Click(...) Handles btnToss.Click 'Toss a coin, and keep track of results. If randomNum.Next(0, 2) = 0 Then txtOutcome.Text = "Heads" txtHeads.Text = CStr(CInt(txtHeads.Text) + 1) Else txtOutcome.Text = "Tails" txtTails.Text = CStr(CInt(txtTails.Text) + 1) End If 'Display total tosses and percentage. txtTosses.Text = CStr(CInt(txtTosses.Text) + 1) txtPercentHeads.Text = (CDbl(txtHeads.Text) / CDbl(txtTosses.Text)).ToString("P") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 293 of 443) 49. Private Sub btnSelect_Click(...) Handles btnSelect.Click 'Assume there are at least three members in the club. Dim names() As String = IO.File.ReadAllLines("Members.txt") Dim n As Integer = names.Count Dim p As Integer Dim randomNum As New Random() p = randomNum.Next(0, n) txtPresident.Text = names(p) 'Swap President with the person in the last array element. names(p) = names(n - 1) names(n - 1) = txtPresident.Text 'Choose a random person from first n-1 for Treasurer. p = randomNum.Next(0, n - 1) txtTreasurer.Text = names(p) 'Swap Treasurer with the person in the next to last array element. names(p) = names(n - 2) names(n - 2) = txtTreasurer.Text 'Choose a random person from first n-2 for Secretary. p = randomNum.Next(0, n - 2) txtSecretary.Text = names(p) End Sub 50. Private Sub btnCreate_Click(...) Handles btnCreate.Click 'Place the alphabet into an array Dim alphabet(25) As String For i As Integer = 0 To 25 alphabet(i) = Chr(Asc("A") + i) Next 'inside-out algorithm Dim a(25) As String, k As Integer Dim randomNum As New Random() a(0) = alphabet(0) For i As Integer = 1 To 25 k = randomNum.Next(0, i + 1) a(i) = a(k) a(k) = alphabet(i) Next 'Display first six letters in the shuffled array txtOutput.Clear() For i As Integer = 0 To 5 txtOutput.Text &= a(i) Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 294 of 443) 51. Private Sub tmrMoon_Tick(...) Handles tmrMoon.Tick 'Update the phase and display the image. 'Timer Interval setting is 2000; Timer Enabled setting is True phase += 1 If phase = 9 Then phase = 1 End If picBox.Image = Image.FromFile("Moon" & phase & ".bmp") End Sub 52. Private Sub btnProduce_Click(...) Handles btnProduce.Click txtWhiteBalls.Clear() Dim randomNum As New Random Dim num, temp As Integer Dim whiteNumbers(59) As Integer For i As Integer = 1 To 59 whiteNumbers(i) = i Next For i As Integer = 1 To 5 num = randomNum.Next(i, 60) Swap(whiteNumbers(i), whiteNumbers(num)) txtWhiteBalls.Text &= whiteNumbers(i) & " " Next num = randomNum.Next(1, 36) txtRedBall.Text = CStr(num) End Sub Sub Swap(ByRef x As Integer, ByRef y As Integer) Dim temp As Integer temp = x x = y y = temp End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 295 of 443) 53. Private Sub btnCompute_Click(...) Handles btnCompute.Click Dim match As Boolean Dim num, i As Integer Dim people(22) As Integer Dim randomNum As New Random For k As Integer = 1 To 1000 match = False For j As Integer = 0 To 22 people(j) = randomNum.Next(1, 366) Next i = 0 Do Until i = 22 Or match For j As Integer = i + 1 To 22 If people(i) = people(j) Then match = True End If Next i += 1 Loop If match Then num += 1 End If Next txtNum.Text = CStr(num / 10) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 296 of 443) 54. Private Sub btnPlay_Click(...) Handles btnPlay.Click Dim deckOfCards(51) As String Dim suits() As String = {"Hearts", "Diamonds", "Clubs", "Spades"} Dim n, earnings As Integer Dim randomNum As New Random() Dim temp, card As String Dim numberOfDiamonds As Integer = 0 Dim numberOfWins As Integer = 0 Dim numberOfLosses As Integer = 0 For i As Integer = 0 To 3 'Populate numbers 2 through 10. For j As Integer = 2 To 10 deckOfCards(i * 13 + j) = j & " of " & suits(i) Next deckOfCards(i * 13 + 0) = "King of " & suits(i) deckOfCards(i * 13 + 1) = "Ace of " & suits(i) deckOfCards(i * 13 + 11) = "Jack of " & suits(i) deckOfCards(i * 13 + 12) = "Queen of " & suits(i) Next For d As Integer = 1 To 1000 numberOfDiamonds = 0 'Choose and display two cards at random. For i As Integer = 1 To 2 n = randomNum.Next(0, 53 - i) card = deckOfCards(n) If card.Substring(card.Length - 8) = "Diamonds" Then numberOfDiamonds += 1 End If 'Swap the chosen card with the one at the end. temp = deckOfCards(n) deckOfCards(n) = deckOfCards(52 - i) deckOfCards(52 - i) = temp Next If numberOfDiamonds = 0 Then earnings -= 1 Else earnings += 1 End If Next Select Case earnings Case 0 txtResult.Text = "You broke even." Case Is > 0 txtResult.Text = "You won " & earnings & " dollars." Case Is < 0 txtResult.Text = "You lost " & (-1 * earnings) & " dollars." End Select End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 297 of 443) 55. (no code) 56. Private Sub lstBox_DoubleClick(...) Handles lstBox.DoubleClick lstBox.Items.Remove(lstBox.Text) End Sub 57. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click 'Display the open file dialog box to get the file Dim fileSpec As String OpenFileDialog1.ShowDialog() fileSpec = OpenFileDialog1.FileName 'Display picture contained in the file. picBox.Image = Image.FromFile(fileSpec) End Sub 58. Private Sub mnuCopy_Click(...) Handles mnuCopy.Click 'Copy selected text into Clipboard. If txtBox.SelectedText <> "" Then Clipboard.SetText(txtBox.SelectedText) Else MessageBox.Show("You must first select some text to be copied.") End If End Sub Private Sub mnuPaste_Click(...) Handles mnuPaste.Click 'Paste Clipboard into text box. txtBox.SelectedText = Clipboard.GetText End Sub Private Sub mnuCut_Click(...) Handles mnuCut.Click 'Copy selected text into Clipboard, and delete selected text. If txtBox.SelectedText <> "" Then Clipboard.SetText(txtBox.SelectedText) txtBox.SelectedText = "" Else MessageBox.Show("You must first select some text to be cut.") End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 298 of 443) 59. Dim randomNum As New Random() Private Sub btnPlay_Click(...) Handles btnPlay.Click 'Roll a pair of dice until 7 appears 1000 times. Dim die1, die2 As Integer Dim numberOfSevens As Integer = 0 Dim numberOfRolls As Integer = 0 Do 'Roll the dice die1 = randomNum.Next(1, 7) die2 = randomNum.Next(1, 7) 'If lucky 7, increment the sevens counter. If (die1 + die2) = 7 Then numberOfSevens += 1 End If numberOfRolls += 1 'Increment the rolls counter. Loop Until (numberOfSevens = 1000) 'Display the result to two decimal places. txtOutput.Text = (numberOfRolls / numberOfSevens).ToString("N") End Sub 60. Public Sub vsbFahren_Scroll(...) Handles vsbFahren.Scroll 'When Fahrenheit value changes, update the Celsius value. 'vsbFahren.Minimum = 32, vsbFahren.Maximum = 225 'vsbFahren.SmallChange = 1, vsbFahren.LargeChange = 14 txtFahren.Text = CStr(vsbFahren.Value) Dim celsius As Integer = CInt((5 / 9) * (vsbFahren.Value - 32)) vsbCelsius.Value = celsius txtCelsius.Text = CStr(vsbCelsius.Value) End Sub Public Sub vsbCelsius_Scroll(...) Handles vsbCelsius.Scroll 'When Celsius value changes, update the Fahrenheit value 'vsbCelsius.Minimum = 0, vsbCelsius.Maximum = 125 'vsbCelsius.SmallChange = 1, vsbCelsius.LargeChange = 10 txtCelsius.Text = CStr(vsbCelsius.Value) Dim fahrenheit As Integer = CInt((9 / 5) * vsbCelsius.Value + 32) vsbFahren.Value = fahrenheit txtFahren.Text = CStr(vsbFahren.Value) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 299 of 443) 61. Private Sub tmrBall_Tick(...) Handles tmrBall.Tick 'Update the value of the scroll bar and label. 'Timer Interval setting is 1000 'vsbBall.Minimum = 0, vsbBall.Maximum = 10 count = count - 1 vsbBall.Value = 10 - count lblBall.Text = CStr(count) 'If at zero, display the message and end program. If count = 0 Then tmrBall.Enabled = False MessageBox.Show("HAPPY NEW YEAR", "NYE") Me.Close() End If End Sub 62. Private Sub btnRollDice_Click(...) Handles btnRollDice.Click Dim randomNum As New Random Dim num1, num2 As Integer Dim dicePicture1, dicePicture2 As String num1 = randomNum.Next(1, 7) num2 = randomNum.Next(1, 7) dicePicture1 = "die" & CStr(num1) & ".jpg" dicePicture2 = "die" & CStr(num2) & ".jpg" picDie1.Image = Image.FromFile(dicePicture1) picDie2.Image = Image.FromFile(dicePicture2) txtSum.Text = CStr(num1 + num2) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 300 of 443) 63. Private Sub Button1_Click(...) Handles Button1.Click Dim ranNum As New Random Dim outcome(31), face As String Dim numOfRuns As Integer = 0 Dim temp As Integer, result As String = "" Dim runOfFive As Boolean = False For i = 0 To 31 temp = ranNum.Next(0, 2) If temp = 0 Then outcome(i) = "H" Else outcome(i) = "T" End If result &= outcome(i) Next txtResult.Text = result For i = 0 To 27 face = outcome(i) If outcome(i + 1) = face And outcome(i + 2) = face And outcome(i + 3) = face And outcome(i + 4) = face Then runOfFive = True numOfRuns += 1 End If Next If runOfFive Then txtOutcome.Text = "Yes" Else txtOutcome.Text = "No" End If End Sub EXERCISES 9.3 1. $106.00 2. John, you are not yet 21 years old. 3. Your last name begins with K. 4. The average is 90. 5. 'Form1's code Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Form2.ShowDialog() txtQuotation.Text = Form2.quotation End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 301 of 443) 'Form2's code (Movies) Public quotation As String Private Sub btnProcessSelection_Click(...) Handles _ btnProcessSelection.Click If rad1.Checked Then quotation = "Plastics." End If If rad2.Checked Then quotation = "Rosebud." End If If rad3.Checked Then quotation = "That's all folks." End If Me.Close() End Sub 6. 'Form Name's code Public fullName As String Private Sub btnExtract_Click(...) Handles btnExtract.Click fullName = txtFull.Text Form2.ShowDialog() End Sub 'Form2's code (Parsed Name) Private Sub Form2_Load(...) Handles MyBase.Load Dim parsedName() As String = frmName.fullName.Split(" "c) txtFirst.Text = parsedName.First txtLast.Text = parsedName.Last End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 302 of 443) 7. 'Code for frmMillionaire Public numberOfYrs As Integer Public Const INTEREST_RATE As Decimal = 0.06D Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim balance As Decimal, numYears As Integer balance = CDec(txtAmount.Text) Do While balance < 1000000 balance += INTEREST_RATE * balance numYears += 1 Loop txtWhen.Text = "In " & numYears & " years you will have a million dollars." numberOfYrs = numYears frmBalance.ShowDialog() End Sub 'Code for frmBalance Structure Year Dim num As Integer Dim amount As Decimal End Structure Private Sub frmBalance_Activated(...) Handles Me.Load Dim a(frmMillionaire.numberOfYrs) As Year a(0).num = 0 a(0).amount = CDec(frmMillionaire.txtAmount.Text) For i As Integer = 1 To (a.Count – 1) a(i).num = i a(i).amount = (1 + frmMillionaire.INTEREST_RATE) * a(i - 1).amount Next Dim query = From yr In a Let Year = yr.num Let Amount = (yr.amount).ToString("C") Select Year, Amount dgvBalance.DataSource = query.ToList dgvBalance.CurrentCell = Nothing End Sub Private Sub frmBalance_FormClosing(...) Handles Me.FormClosing frmMillionaire.txtAmount.Clear() frmMillionaire.txtWhen.Clear() frmMillionaire.txtAmount.Focus() End Sub 8. Structure Month Dim number As Integer Dim principalPaid As Decimal Dim interestPaid As Decimal Dim endBalance As Decimal End Structure © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 303 of 443) Structure EffectOfRate Dim interestRate As Decimal Dim monthlyPayment As Decimal End Structure Private Sub btnPayment_Click(...) Handles btnPayment.Click Dim principal As Decimal 'Amount of loan Dim yearlyRate As Decimal 'Annual rate of interest Dim numMonths As Integer 'Number of months to repay loan InputData(principal, yearlyRate, numMonths) Dim monthlyRate As Decimal = yearlyRate / 12 Dim monthlyPayment As Decimal 'Calculate monthly payment monthlyPayment = Payment(principal, monthlyRate, numMonths) 'Display results MessageBox.Show("Monthly payment: " & monthlyPayment.ToString("C"), "Payment") End Sub Private Sub btnAmort_Click(...) Handles btnAmort.Click Dim principal As Decimal 'Amount of loan Dim yearlyRate As Decimal 'Annual rate of interest Dim numMonths As Integer 'Number of months to repay loan InputData(principal, yearlyRate, numMonths) Dim months(numMonths - 1) As Month Dim monthlyRate As Decimal = yearlyRate / 12 Dim monthlyPayment As Decimal = Payment(principal, monthlyRate, numMonths) months = FillMonthsArray(principal, monthlyRate, numMonths) Dim query = From mnth In months Let num = mnth.number Let interest = (mnth.interestPaid).ToString("C") Let prin = (mnth.principalPaid) .ToString("C") Let bal = (mnth.endBalance) .ToString("C") Select num, interest, prin, bal frmAmort.dgvResults.DataSource = query.ToList frmAmort.dgvResults.CurrentCell = Nothing frmAmort.dgvResults.Columns("num").HeaderText = "Month" frmAmort.dgvResults.Columns("interest").HeaderText = "Amount Paid for Interest" frmAmort.dgvResults.Columns("prin").HeaderText = "Amount Paid for Principal" frmAmort.dgvResults.Columns("bal").HeaderText = "Balance at End of Month" frmAmort.ShowDialog() End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 304 of 443) Private Sub btnShow_Click(...) Handles btnShow.Click Dim principal As Decimal 'Amount of loan Dim yearlyRate As Decimal 'Annual rate of interest Dim numMonths As Integer 'Number of months to repay loan InputData(principal, yearlyRate, numMonths) Dim months(numMonths - 1) As Month Dim monthlyRate As Decimal = yearlyRate / 12 Dim monthlyPayment As Decimal = Payment(principal, monthlyRate, numMonths) months = FillMonthsArray(principal, monthlyRate, numMonths) Dim beginningMonth As Integer = CInt(InputBox("Enter beginning month: ")) Dim query = From mnth In months Where (mnth.number >= beginningMonth) And (mnth.number < beginningMonth + 12) Select mnth.interestPaid MessageBox.Show("Interest Paid for year beginning with month " & beginningMonth & ": " & (query.Sum).ToString("C"), "Interest For Year") End Sub Private Sub btnRateTable_Click(...) Handles btnRateTable.Click Dim principal As Decimal 'Amount of loan Dim yearlyRate As Decimal 'Annual rate of interest Dim numMonths As Integer 'Number of months to repay loan InputData(principal, yearlyRate, numMonths) Dim rates(16) As EffectOfRate Dim monthlyRate As Decimal = yearlyRate / 12 'Dim monthlyPayment As Decimal = Payment(principal, monthlyRate, numMonths) 'Fill rates array For i As Integer = 0 To 16 CDec(rates(i).interestRate = (yearlyRate - 0.01) + i * 0.00125) rates(i).monthlyPayment = Payment(principal, rates(i).interestRate / 12, numMonths) Next Dim query = From rate In rates Let annualRate = (rate.interestRate).ToString("P3") Let monthlyPayment = (rate.monthlyPayment).ToString("C") Select annualRate, monthlyPayment frmIntRate.dgvResults.DataSource = query.ToList frmIntRate.dgvResults.CurrentCell = Nothing frmIntRate.dgvResults.Columns("annualRate").HeaderText = "Interest Rate" frmIntRate.dgvResults.Columns("monthlyPayment").HeaderText = "Monthly Payment" frmIntRate.ShowDialog() End Sub Private Sub btnQuit_Click(...) Handles btnQuit.Click End End Sub Sub InputData(ByRef principal As Decimal, ByRef yearlyRate As Decimal, ByRef numMonths As Integer) Dim percentageRate As Decimal, numYears As Integer principal = CDec(txtPrincipal.Text) percentageRate = CDec(txtYearlyRate.Text) yearlyRate = percentageRate / 100 'Convert interest rate to decimal form numYears = CInt(txtNumYears.Text) numMonths = numYears * 12 'Duration of loan in momths End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 305 of 443) Function Payment(principal As Decimal, monthlyRate As Decimal, numMonths As Decimal) As Decimal Dim estimate As Decimal 'Estimate of monthly payment estimate = CDec(principal * monthlyRate / (1 - (1 + monthlyRate) ^ (-numMonths))) ' Round the payment up if it there are fractions of a cent If estimate = Math.Round(estimate, 2) Then Return estimate Else Return Math.Round(estimate + 0.005D, 2) End If End Function Function FillMonthsArray(principal As Decimal, monthlyRate As Decimal, numMonths As Integer) As Month() Dim months(numMonths - 1) As Month Dim monthlyPayment As Decimal = Payment(principal, monthlyRate, numMonths) months(0).number = 1 months(0).interestPaid = monthlyRate * principal months(0).endBalance = (1 + monthlyRate) * principal - monthlyPayment months(0).principalPaid = monthlyPayment - months(0).interestPaid 'Assign values for interior months For i As Integer = 1 To (numMonths – 2) months(i).number = i + 1 months(i).interestPaid = monthlyRate * months(i - 1).endBalance months(i).endBalance = (1 + monthlyRate) * months(i - 1).endBalance monthlyPayment months(i).principalPaid = monthlyPayment - months(i).interestPaid Next months(numMonths - 1).number = numMonths months(numMonths - 1).interestPaid = monthlyRate * months(numMonths - 2).endBalance months(numMonths - 1).endBalance = 0 months(numMonths - 1).principalPaid = monthlyPayment months(numMonths - 1).interestPaid Return months End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 306 of 443) © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 307 of 443) 9. Form1's Code 'Class-level named constants and variables 'Data files that store information Const INIT_FILE As String = "Initial_Info.txt" Public Const TRANS_FILE As String = "Transactions.txt" 'Variables used for each entry Dim isCheck As Boolean Dim nameOnChk As String 'Name to appear on checks Dim lastCkNum As Integer 'Number of last check written Dim lastDpNum As Integer 'Number of last deposit slip processed Dim curBal As Decimal 'Current balance in account Private Sub frmAccount_Load(...) Handles MyBase.Load 'Sets the class variables from a new or existing text file InitializeData() 'Set name and balance labels lblName.Text = nameOnChk txtBalance.Text = curBal.ToString("C") 'Set the date field to the current date. txtDate.Text = CStr(Today) SetupCheck() ResetInput() End Sub Private Sub InitializeData() If IO.File.Exists(INIT_FILE) Then Dim data() As String 'holds the data read from the file Dim initFileContents() As String = IO.File.ReadAllLines(INIT_FILE) 'Split the single line of the INIT_FILE using the separator data = initFileContents.First.Split(","c) 'Load the name to appear on checks, current balance, number of 'last check written and number of last deposit slip processed nameOnChk = data(0) curBal = CDec(data(1)) lastCkNum = CInt(data(2)) lastDpNum = CInt(data(3)) 'Possibly update the values above by looking at last record of TRANS_FILE If IO.File.Exists(TRANS_FILE) Then Dim transFileContents() As String = IO.File.ReadAllLines(TRANS_FILE) data = transFileContents.Last.Split(","c) curBal = CDec(data(2)) lastCkNum = CInt(data(3)) lastDpNum = CInt(data(4)) End If © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 308 of 443) Else 'INIT_FILE does not exist, so get initial data from user Dim sw As IO.StreamWriter nameOnChk = InputBox("Name to appear on checks:") Try curBal = CDec(InputBox("Starting Balance:")) 'Get numbers of last check and deposit slip lastCkNum = CInt(InputBox("Number of first check:")) - 1 lastDpNum = CInt(InputBox("Number of first deposit slip:")) - 1 'The single record in the text file records the name to 'appear on checks plus the initial data for account Dim outputLine As String = nameOnChk & "," & curBal & "," & lastCkNum & "," & lastDpNum sw = IO.File.CreateText(INIT_FILE) sw.WriteLine(outputLine) Catch 'If a number cannot be converted then display message and quit MessageBox.Show("Invalid number. Program terminating.", "Error") Me.Close() Finally 'Close the writer no matter what happens above sw.Close() End Try End If End Sub Private Sub btnRecord_Click(...) Handles btnRecord.Click 'Store the input into the transactions file Dim amt As Decimal Dim transType As String 'Only store if all required fields are filled and valid If DataValid() Then amt = CDec(txtAmount.Text) 'Adjust balance by amount depending on check or deposit slip mode If isCheck Then curBal = curBal - amt lastCkNum = CInt(txtNum.Text) transType = "Check" Else curBal += amt lastDpNum = CInt(txtNum.Text) transType = "Deposit" End If txtBalance.Text = curBal.ToString("C") 'String array contains info to be stored Dim transOutput() As String = {transType, txtToFrom.Text, CStr(curBal), CStr(lastCkNum), CStr(lastDpNum), CStr(amt), txtMemo.Text, txtDate.Text} Dim sw As IO.StreamWriter = IO.File.AppendText(TRANS_FILE) 'Append the info to the text file, separated by the separator sw.WriteLine(Join(transOutput, ",")) sw.Close() 'Reset input text boxes to blank for next entry ResetInput() End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 309 of 443) Function DataValid() As Boolean 'Returns True if all data are valid, or displays a message if not Dim errorMessage As String = "" 'If one of the two essential pieces of information 'is missing, assign its name to errorMessage If txtToFrom.Text.Trim = "" Then If isCheck Then errorMessage = "Pay To" Else errorMessage = "Source" End If txtToFrom.Focus() ElseIf txtAmount.Text.Trim = "" Then errorMessage = "Amount" txtAmount.Focus() End If 'If no errors yet then check syntax of the two numerical fields If errorMessage = "" Then 'Check syntax of the amount field (Decimal) Try If CDec(txtAmount.Text) <= 0 Then errorMessage = "The amount must be greater than zero." txtAmount.Focus() End If Catch exc As InvalidCastException errorMessage = "The amount " & txtAmount.Text & " is invalid." txtAmount.Focus() End Try Else errorMessage = "The '" & errorMessage & "' field must be filled." End If 'Display error message if available If errorMessage = "" Then 'All required data fields have been filled; recording can proceed Return True Else 'Advise user of invalid data MessageBox.Show(errorMessage & " Please try again.") Return False End If End Function Private Sub btnMode_Click(...) Handles btnMode.Click 'Toggle mode between Check and Deposit Slip If isCheck Then SetupDeposit() Else SetupCheck() End If 'Set fields for next entry ResetInput() End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 310 of 443) Sub SetupCheck() 'Prepare form for the entry of a check isCheck = True Me.Text = "Check" 'Sets the title bar of the form lblToFrom.Text = "Pay To" btnRecord.Text = "&Record This Check" btnMode.Text = "&Switch to Deposits" Me.BackColor = Color.LightGray End Sub Sub SetupDeposit() 'Prepare form for the entry of a deposit isCheck = False Me.Text = "Deposit Slip" 'Sets the title bar of the form lblToFrom.Text = "Source" btnRecord.Text = "&Record This Deposit" btnMode.Text = "&Switch to Checks" Me.BackColor = Color.Yellow End Sub Sub ResetInput() 'Reset all text entry fields except date txtToFrom.Clear() txtAmount.Clear() txtMemo.Clear() If isCheck Then 'Make txtNum text box reflect next check number txtNum.Text = CStr(lastCkNum + 1) Else 'Make txtNum text box reflect next deposit slip number txtNum.Text = CStr(lastDpNum + 1) End If 'Set focus on to/from control for the next entry txtToFrom.Focus() End Sub Private Sub btnReport_Click(...) Handles btnReport.Click If IO.File.Exists(TRANS_FILE) Then Form2.ShowDialog() Else MessageBox.Show("There are no transactions to report.") End If End Sub Function FormNumber(type As String, checkNumber As String, depositNumber As String) As String If type = "Check" Then Return "Check #" & checkNumber Else Return "Deposit #" & depositNumber End If End Function © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 311 of 443) Private Sub btnQuit_Click(...) Handles btnQuit.Click Me.Close() 'Exit the program End Sub Form2's Code Private Sub Form2_Load(...) Handles MyBase.Load Dim transFileContents() = IO.File.ReadAllLines(frmAccount.TRANS_FILE) Dim query = From trans In transFileContents Let data = trans.Split(","c) Let transDate = CDate(data(7)) Let number = frmAccount.FormNumber(data(0), data(3), data(4)) Let toFrom = data(1) Let Memo = data(6) Let Amount = (CDec(data(5))).ToString("C") Let Balance = (CDec(data(2))).ToString("C") Select transDate, number, toFrom, Memo, Amount, Balance dgvTransactions.DataSource = query.ToList dgvTransactions.Columns("transDate").HeaderText = "Transaction Date" dgvTransactions.Columns("number").HeaderText = "Description" dgvTransactions.Columns("toFrom").HeaderText = "Recipient or Source" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 312 of 443) 10. 'Form1's code Structure Student Dim name As String Dim exam1 As Double Dim exam2 As Double Dim exam3 As Double End Structure Public numStudents As Integer = 0 Public students(50) As Student Public totalGrades As Double = 0 Private Sub Form1_Load(...) Handles MyBase.Load Form2.ShowDialog() End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click txtAverage.Text = (totalGrades / (3 * numStudents)).ToString("N1") ReDim Preserve students(numStudents - 1) Dim query = From student In students Let Name = student.name Let Average = ((student.exam1 + student.exam2 + student.exam3) / 3).ToString("N0") Select Name, Average dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing End Sub 'Form2's code Private Sub Form2_Load(...) Handles MyBase.Load Me.Text = "Student #1" End Sub Private Sub btnRecord_Click(...) Handles btnRecord.Click Dim sum As Double Form1.students(Form1.numStudents).name = txtName.Text Form1.students(Form1.numStudents).exam1 = CDbl(txtExam1.Text) Form1.students(Form1.numStudents).exam2 = CDbl(txtExam2.Text) Form1.students(Form1.numStudents).exam3 = CDbl(txtExam3.Text) sum = CDbl(txtExam1.Text) + CDbl(txtExam2.Text) + CDbl(txtExam3.Text) Form1.totalGrades += sum txtName.Clear() txtExam1.Clear() txtExam2.Clear() txtExam3.Clear() txtName.Focus() Form1.numStudents += 1 Me.Text = "Student #" & (Form1.numStudents + 1) End Sub Private Sub btnTerminate_Click(...) Handles btnTerminate.Click Me.Close() End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 313 of 443) 11. 'Form1's code (Customer) Private Sub btnGet_Click(...) Handles btnGet.Click If radBillCust.Checked Then Form2.ShowDialog() Else Form3.ShowDialog() End If End Sub 'Form2's code (Customer Info) Private Sub Form2_Load(...) Handles MyBase.Load txtName.Text = Form1.txtName.Text End Sub Private Sub btnRecord_Click(...) Handles btnRecord.Click Dim city, state, zip As String Form1.lstOutput.Items.Add("Mail bill to:") Form1.lstOutput.Items.Add(txtName.Text) Form1.lstOutput.Items.Add(txtAddress.Text) city = txtCity.Text state = cboState.Text zip = txtZip.Text Form1.lstOutput.Items.Add(city & ", " & state & " " & zip) Me.Close() End Sub 'Form3's code (Credit Card Info) Private Sub Form3_Load(...) Handles MyBase.Load Dim num As Integer = Today.Year For i As Integer = num To (num + 5) cboYear.Items.Add(i) Next End Sub Private Sub btnRecord_Click(...) Handles btnRecord.Click Form1.lstOutput.Items.Add("Bill " & cboCard.Text) Form1.lstOutput.Items.Add("Name on card: " & txtName.Text) Form1.lstOutput.Items.Add("Card number: " & txtCardNumber.Text) Form1.lstOutput.Items.Add("Expiration date: " & cboMonth.Text & "/" & cboYear.Text) Me.Close() End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 314 of 443) © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 315 of 443) 12. 'frmNumber's code Private Sub btnShow_Click(...) Handles btnShow.Click 'Display the second form, and get the number. frmButtons.ShowDialog() 'After the second form is closed, display the value of 'its variable number in the first form's text box. txtOutput.Text = frmButtons.number End Sub 'frmButton's code Public number As String = "" Private Sub btn1_Click(...) Handles btn1.Click dial(1) End Sub Private Sub btn2_Click(...) Handles btn2.Click dial(2) End Sub Private Sub btn3_Click(...) Handles btn3.Click dial(3) End Sub Private Sub btn4_Click(...) Handles btn4.Click dial(4) End Sub Private Sub btn5_Click(...) Handles btn5.Click dial(5) End Sub Private Sub btn6_Click(...) Handles btn6.Click dial(6) End Sub Private Sub btn7_Click(...) Handles btn7.Click dial(7) End Sub Private Sub btn8_Click(...) Handles btn8.Click dial(8) End Sub Private Sub btn9_Click(...) Handles btn9.Click dial(9) End Sub Private Sub btn0_Click(...) Handles btn0.Click dial(0) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 316 of 443) Sub dial(num As Integer) 'Add the number to the result, with a hyphen in its fourth position. If number.Length = 3 Then number &= "-" End If number &= CStr(num) txtOutput.Text = number End Sub Private Sub btnClear_Click(...) Handles btnClear.Click 'Clear the output. txtOutput.Clear() number = "" End Sub Private Sub btnEnter_Click(...) Handles btnEnter.Click 'Make frmButtons disappear. The number dialed will 'then appear in frmNumbers's text box. Me.Close() End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 317 of 443) EXERCISES 9.4 1. Private Sub btnDraw_Click(...) Handles btnDraw.Click Dim gr As Graphics = picBox.CreateGraphics Dim x As Double = picBox.Width / 2 Dim y As Double = picBox.Height / 2 Dim r As Double = x / 2 If r > y / 2 Then r = y / 2 End If gr.FillEllipse(Brushes.Black, CSng(x - r), CSng(y - r), CSng(2 * r), CSng(2 * r)) End Sub 2. Private Sub btnDraw_Click(...) Handles btnDraw.Click Dim gr As Graphics = picBox.CreateGraphics Dim x As Double = picBox.Width / 2 Dim y As Double = picBox.Height / 2 Dim r As Double = x / 2 If r > y / 2 Then r = y / 2 End If gr.FillEllipse(Brushes.Black, CSng(x), CSng(y - r), CSng(2 * r), CSng(2 * r)) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 318 of 443) 3. Private Sub btnDraw_Click(...) Handles btnDraw.Click Dim gr As Graphics = picBox.CreateGraphics Dim x As Double = picBox.Width / 2 Dim y As Double = picBox.Height / 2 Dim r As Double = 20 gr.FillEllipse(Brushes.Red, CSng(x - r), CSng(y - r), CSng(2 * r), CSng(2 * r)) r = 19 gr.FillEllipse(Brushes.White, CSng(x - r), CSng(y - r), CSng(2 * r), CSng(2 * r)) End Sub 4. Private Sub btnDraw_Click(...) Handles btnDraw.Click Dim gr As Graphics = picBox.CreateGraphics gr.DrawLine(Pens.Red, 5, 100, 100, 5) gr.DrawLine(Pens.Red, 100, 5, 195, 100) gr.DrawLine(Pens.Red, 5, 100, 195, 100) End Sub 5. Private Sub btnCreate_Click(...) Handles btnCreate.Click 'Create flag of Italy Dim gr As Graphics = picFlag.CreateGraphics Dim br() As Brush = {Brushes.Green, Brushes.White, Brushes.Red} 'picFlag.Width = 149; picFlag.Height = 99 For i As Integer = 0 To 2 gr.FillRectangle(br(i), 0 + i * 50, 0, 50, 99) Next gr.DrawLine(Pens.Black, 0, 0, 148, 0) 'top border gr.DrawLine(Pens.Black, 0, 0, 0, 98) 'left border gr.DrawLine(Pens.Black, 0, 98, 148, 98) 'bottom border gr.DrawLine(Pens.Black, 148, 0, 148, 98) 'right border End Sub Italy Switzerland © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 319 of 443) 6. Private Sub btnCreate_Click(...) Handles btnCreate.Click 'Create Swiss flag Dim gr As Graphics = picFlag.CreateGraphics 'picFlag.Width = 99, picFlag.Height = 99 gr.FillRectangle(Brushes.Red, 0, 0, 98, 98) gr.FillRectangle(Brushes.White, 40, 18, 18, 63) gr.FillRectangle(Brushes.White, 18, 40, 63, 18) End Sub 7. Private Sub btnCreate_Click(...) Handles btnCreate.Click 'Create flag of Niger Dim gr As Graphics = picFlag.CreateGraphics Dim br() As Brush = {Brushes.Orange, Brushes.White, Brushes.Green} Dim r As Integer = 12 'radius of circle 'picFlag.Width = 149; picFlag.Height = 99 For i As Integer = 0 To 2 gr.FillRectangle(br(i), 0, 0 + i * 33, 149, 33) Next gr.FillPie(Brushes.Orange, 75 - r, 49 - r, 2 * r, 2 * r, 0, 360) gr.DrawLine(Pens.Black, 0, 0, 148, 0) 'top border gr.DrawLine(Pens.Black, 0, 0, 0, 98) 'left border gr.DrawLine(Pens.Black, 0, 98, 148, 98) 'bottom border gr.DrawLine(Pens.Black, 148, 0, 148, 98) 'right border End Sub Niger Greenland 8. Private Sub btnCreate_Click(...) Handles btnCreate.Click 'Create flag of Greenland Dim gr As Graphics = picFlag.CreateGraphics Dim r As Integer = 40 'picFlag.Width = 149, picFlag.Height = 99 gr.FillRectangle(Brushes.White, 0, 0, 149, 49) gr.FillRectangle(Brushes.Red, 0, 49, 149, 49) gr.DrawLine(Pens.Black, 0, 0, 148, 0) 'top border gr.DrawLine(Pens.Black, 0, 0, 0, 98) 'left border gr.DrawLine(Pens.Black, 0, 98, 148, 98) 'bottom border gr.DrawLine(Pens.Black, 148, 0, 148, 98) 'right border gr.FillPie(Brushes.Red, 68 - r, 49 - r, 2 * r, 2 * r, 180, 180) gr.FillPie(Brushes.White, 68 - r, 49 - r, 2 * r, 2 * r, 0, 180) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 320 of 443) 9. Private Sub btnDraw_Click(...) Handles btnDraw.Click Dim numbers As String = "" Dim gr As Graphics = picBox.CreateGraphics picBox.Refresh() Dim n As Integer = CInt(txtNumber.Text) 'Font is Microsoft Sans Serif For i As Integer = 0 To n If i < 9 Then numbers &= i & " " Else numbers &= i & " " End If gr.DrawLine(Pens.Blue, 12 + (24 * i), 5, 12 + (24 * i), 15) Next gr.DrawLine(Pens.Blue, 0, 10, 24 * (n + 1), 10) gr.DrawString(numbers, Me.Font, Brushes.Blue, 8, 20) End Sub 10. Private Sub btnDraw_Click(...) Handles btnDraw.Click Dim gr As Graphics = picOutput.CreateGraphics picOutput.Refresh() For i As Integer = 1 To CInt(mtbNum.Text) gr.DrawLine(Pens.Red, 5, 25 * i, 100, 25 * i) gr.DrawString("LINE " & i, Me.Font, Brushes.Red, 110, 25 * i - 5) Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 321 of 443) 11. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim legend() As String = {"Soft Drinks", "Beer", "Bottled Water", "Other"} Dim quantity() As Decimal = {52.9D, 14.7D, 11.1D, 21.3D} Dim percent(quantity. Count - 1) As Decimal Dim sumOfQuantities As Decimal = 0 Dim sumOfSweepAngles As Decimal = 0 Dim br() As Brush = {Brushes.Blue, Brushes.Red, Brushes.Tan, Brushes.Green, Brushes.Orange, Brushes.Gray} Dim gr As Graphics = picOutput.CreateGraphics 'The picture box has width 312 and height 215 Dim r As Integer = 100 'Radius of circle Dim c As Integer = 105 'Center of circle is (c, c) Me.Text = "U.S. Recreational Beverage Consumption" 'Sum the numbers for the quantities For i As Integer = 0 To (quantity.Count – 1) sumOfQuantities += quantity(i) Next 'Convert tbe quantities to percents For i As Integer = 0 To (quantity. Count – 1) percent(i) = quantity(i) / sumOfQuantities Next 'Display the pie chart and the legends For i As Integer = 0 To (quantity. Count – 1) gr.FillPie(br(i), c - r, c - r, 2 * r, 2 * r, sumOfSweepAngles, percent(i) * 360) sumOfSweepAngles += percent(i) * 360 gr.FillRectangle(br(i), 220, 20 + 30 * i, 20, 20) gr.DrawString(legend(i), Me.Font, Brushes.Black, 250, 22 + 30 * i) Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 322 of 443) 12. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim quantity() As Decimal = {1, 1.15D, 2.65D, 3.35D, 5.15D, 7.25D} Dim gr As Graphics = picOutput.CreateGraphics Dim dates as String 'The picture box has width 210 and height 150 gr.DrawLine(Pens.Black, 40, 170, picOutput.Width - 20, 170) 'Draw x-axis gr.DrawLine(Pens.Black, 40, 170, 40, 5) 'Draw y-axis gr.DrawLine(Pens.Black, 35, 170 - (7.25 * 20), 45, 170 - (7.25 * 20)) 'ticks gr.DrawString("$7.25", Me.Font, Brushes.Black, 1, 20) Me.Text = "U.S. Minimum Wage" For i As Integer = 0 To (quantity.Count – 1) gr.FillRectangle(Brushes.Blue, 60 + i * 50, (170 - quantity(i) * 20), 20, quantity(i) * 20) Next 'US minimum wage became $7.25 on July 24, 2009. dates = "1959 1968 1978 1988 1998 2009" gr.DrawString(dates, Me.Font, Brushes.Black, 55, 175) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 323 of 443) 13. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim gr As Graphics = picOutput.CreateGraphics Dim smokers() As Decimal = {7.4D, 6.4D, 5.3D, 4.4D, 3.7D, 2.6D, 1.7D} gr.DrawLine(Pens.Black, 30, 70, picOutput.Width, 70) 'x-axis gr.DrawLine(Pens.Black, 30, 70, 30, 0) 'y-axis gr.DrawLine(Pens.Black, 27, 70 - 7.4 * 7, 33, 70 - 7.4 * 7) 'tick mark gr.DrawString("7.4", Me.Font, Brushes.Black, 0, 70 - 7.4 * 7 - 6) gr.DrawString("2002 2004 2006 2008 2010 2012 2014", Me.Font, Brushes.Black, 35, 78) gr.DrawString("Percentage of College Freshmen Who Smoke", Me.Font, Brushes.Blue, 30, 95) gr.DrawString("Source: Higher Education Research Institute", Me.Font, Brushes.Blue, 30, 110) For i As Integer = 0 To smokers.Count - 2 gr.DrawLine(Pens.Blue, 50 + i * 35, 70 - smokers(i) * 7, 50 + (i + 1) * 35, 70 - smokers(i + 1) * 7) Next For i As Integer = 0 To smokers.Count - 1 gr.DrawLine(Pens.Black, 50 + i * 35, 75, 50 + i * 35, 65) gr.FillEllipse(Brushes.Blue, 50 + i * 35 - 3, 70 - smokers(i) * 7 - 3, 6, 6) Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 324 of 443) 14. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim males() As Decimal = {1375, 2047, 2233, 2559, 3265} Dim females() As Decimal = {945, 2479, 3007, 3340, 4415} Dim gr As Graphics = picBox.CreateGraphics gr.DrawLine(Pens.Blue, 30, 100, picBox.Width, 100) 'x-axis gr.DrawLine(Pens.Black, 30, 100, 30, 0) 'y-axis gr.DrawLine(Pens.Black, 27, 120 - females(4) / 40, 33, 120 - females(4) / 40) 'tick mark gr.DrawString(CStr(females(4)), Me.Font, Brushes.Blue, 0, 120 - females(4) / 40 - 6) gr.DrawString("1970 1980 1990 2000 2010", Me.Font, Brushes.Blue, 35, 102) gr.DrawString("Two-Year College Enrollments", Me.Font, Brushes.Blue, 30, 120) gr.DrawString("(in thousands)", Me.Font, Brushes.Blue, 30, 135) For i As Integer = 0 To males.Count - 2 gr.DrawLine(Pens.Red, 50 + i * 35, 120 - females(i) / 40, 50 + (i + 1) * 35, 120 - females(i + 1) / 40) gr.DrawLine(Pens.Green, 50 + i * 35, 120 - males(i) / 40, 50 + (i + 1) * 35, 120 - males(i + 1) / 40) Next For i As Integer = 0 To males.Count - 1 gr.FillEllipse(Brushes.Red, 50 + i * 35 - 3, 120 - females(i) / 40 - 3, 6, 6) gr.FillEllipse(Brushes.Green, 50 + i * 35 - 3, 120 - males(i) / 40 - 3, 6, 6) Next gr.DrawString("males", Me.Font, Brushes.Green, 32, 65) gr.DrawString("females", Me.Font, Brushes.Red, 140, 7) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 325 of 443) 15. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim quantity() As Decimal = {6.9D, 4.6D, 4.4D, 3.5D, 3.1D} Dim gr As Graphics = picOutput.CreateGraphics Dim legend As String 'The picture box has width 310 and height 170 gr.DrawLine(Pens.Black, 10, 110, picOutput.Width - 10, 110) 'Draw x-axis Me.Text = "Most Popular Majors" For i As Integer = 0 To quantity.Count - 1 gr.FillRectangle(Brushes.Tan, 20 + i * 60, (110 - quantity(i) * 15), 30, quantity(i) * 15) gr.DrawString(((quantity(i)).ToString("N1") & "%"), Me.Font, Brushes.DarkBlue, 21 + i * 60, 95) Next legend = "Biology Psychology Nursing Computer Bus. Admin." gr.DrawString(legend, Me.Font, Brushes.Blue, 15, 112) legend = "(general) Science" & " (general)" gr.DrawString(legend, Me.Font, Brushes.Blue, 12, 124) 'gr.DrawString("Prevet", Me.Font, Brushes.Blue, 195, 128) gr.DrawString("Most Popular Majors for College Freshmen in Fall 2014", Me.Font, Brushes.Blue, 5, 145) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 326 of 443) 16. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim wellOff() As Decimal = {59, 74, 73, 77} Dim meaningfulPhil() As Decimal = {60, 43, 44, 51} Dim legend() As String = {"Be very well off financially", "Develop a meaningful philosophy of life"} Dim gr As Graphics = picOutput.CreateGraphics 'The picture box has width 210 and height 150 gr.DrawLine(Pens.Black, 35, 80, picOutput.Width, 80) 'Draw x-axis gr.DrawLine(Pens.Black, 35, 80, 35, 0) 'Draw y-axis gr.DrawLine(Pens.Black, 30, 80 - 74, 40, 80 - 74) 'Draw tick mark gr.DrawString("74", Me.Font, Brushes.Black, 12, 0) For i As Integer = 0 To 3 gr.FillRectangle(Brushes.Blue, 55 + i * 60, (80 - wellOff(i)), 15, wellOff(i)) Next For i As Integer = 0 To 3 gr.FillRectangle(Brushes.Red, 70 + i * 60, (80 - meaningfulPhil(i)), 15, meaningfulPhil(i)) Next gr.DrawString("1978 1988 1998 2008", Me.Font, Brushes.Black, 55, 82) gr.DrawString("Freshman Life Goals", Me.Font, Brushes.Black, 55, 95) gr.DrawString("(% of students committed to goal)", Me.Font, Brushes.Black, 55, 110) gr.FillRectangle(Brushes.Blue, 35, 135, 15, 15) gr.DrawString(legend(0), Me.Font, Brushes.Black, 53, 135) gr.FillRectangle(Brushes.Red, 35, 155, 15, 15) gr.DrawString(legend(1), Me.Font, Brushes.Black, 53, 155) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 327 of 443) 17. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim legend() As String = {"Bengali", "English", "German", "Hindi", "Japanese", "Mandarin", "Portuguese", "Russian", "Spanish", "Wu"} Dim quantity() As Decimal = {183, 335, 78, 260, 122, 848, 203, 167, 414, 72} Dim gr As Graphics = picOutput.CreateGraphics Dim caption As String 'The picture box has width 365 and height 185 gr.DrawLine(Pens.Black, 40, 100, picOutput.Width, 100) 'x-axis gr.DrawLine(Pens.Black, 40, 100, 40, 0) 'y-axis gr.DrawLine(Pens.Black, 35, 100 - 84.8, 45, 100 - 84.8) 'Tick mark gr.DrawString("848", Me.Font, Brushes.Black, 8, 100 - 88.2 - 6) Me.Text = "Principal Languages" For i As Integer = 0 To quantity.Count - 1 gr.FillRectangle(Brushes.Blue, 60 + i * 30, (100 - quantity(i) / 10), 15, quantity(i) / 10) Next For i As Integer = 0 To quantity.Count - 1 Step 2 gr.DrawLine(Pens.Black, 60 + i * 30 + 7, 100, 60 + i * 30 + 7, 110) gr.DrawString(legend(i), Me.Font, Brushes.Black, 60 + i * 30 - 21, 110) Next For i As Integer = 1 To quantity.Count - 1 Step 2 gr.DrawLine(Pens.Black, 60 + i * 30 + 7, 100, 60 + i * 30 + 7, 130) gr.DrawString(legend(i), Me.Font, Brushes.Black, 60 + i * 30 - 10, 130) Next gr.DrawString("Principal Languages of the World", Me.Font, Brushes.Blue, 90, 150) caption = "(in millions of " & Chr(34) & "first language" & Chr(34) & " speakers)" gr.DrawString(caption, Me.Font, Brushes.Blue, 90, 165) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 328 of 443) 18. Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim legend() As String = {"Housing", "Transportation", "Food", "Other"} Dim quantity() As Decimal = {CDec(mtbHousing.Text), CDec(mtbTransportation.Text), CDec(mtbFood.Text),CSng(mtbOther.Text)} Dim percent(quantity.Count - 1) As Decimal Dim sumOfQuantities As Decimal = 0 Dim sumOfSweepAngles As Decimal = 0 Dim br() As Brush = {Brushes.Blue, Brushes.Red, Brushes.Green, Brushes.Orange} Dim gr As Graphics = picOutput.CreateGraphics 'The picture box has width 312 and height 215 Dim r As Integer = 100 'Radius of circle Dim c As Integer = 105 'Center of circle is (c, c) 'Sum the numbers for the quantities For i As Integer = 0 To (quantity.Count – 1) sumOfQuantities += quantity(i) Next 'Convert tbe quantities to percents For i As Integer = 0 To (quantity.Count – 1) percent(i) = quantity(i) / sumOfQuantities Next 'Display the pie chart and the legends For i As Integer = 0 To (quantity.Count – 1) gr.FillPie(br(i), c - r, c - r, 2 * r, 2 * r, sumOfSweepAngles, percent(i) * 360) sumOfSweepAngles += percent(i) * 360 gr.FillRectangle(br(i), 220, 20 + 30 * i, 20, 20) gr.DrawString(legend(i), Me.Font, Brushes.Black, 250, 22 + 30 * i) Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 329 of 443) 19. Dim x As Integer = 1 Dim y As Integer = 40 Private Sub frmPlane_Load(...) Handles MyBase.Load Timer1.Enabled = True End Sub Private Sub Timer1_Tick(...) Handles Timer1.Tick If picBox.Left = Me.Width Then picBox.Left = -picBox.Width Else picBox.Left += 1 End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 330 of 443) 20. Const ONE_INCH As Integer = 100 Const LINE_HEIGHT As Integer = 20 'number of pixels in an inch 'one quarter of an inch Private Sub btnPrint_Click(...) Handles btnPrint.Click PrintDocument1.Print() End Sub Private Sub PrintDocument1_PrintPage(sender As System.Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles _ PrintDocument1.PrintPage Dim gr As Graphics = e.Graphics Dim x1 As Integer = ONE_INCH 'use one inch beyond left margin Dim x2 As Integer = CInt(1.5 * ONE_INCH) 'offset for second column Dim y As Integer = ONE_INCH 'use one inch top margin Dim font1 As New Font("Courier New", 10, FontStyle.Bold) Dim font2 As New Font("Courier New", 10, FontStyle.Regular) gr.DrawString("PLS", font1, Brushes.Black, x1, y) gr.DrawString("Please", font2, Brushes.Black, x2, y) y += LINE_HEIGHT gr.DrawString("TAFN", font1, Brushes.Black, x1, y) gr.DrawString("That's all for now", font2, Brushes.Black, x2, y) y += LINE_HEIGHT gr.DrawString("HHOK", font1, Brushes.Black, x1, y) gr.DrawString("Ha, ha - only kidding", font2, Brushes.Black, x2, y) y += LINE_HEIGHT gr.DrawString("FWIW", font1, Brushes.Black, x1, y) gr.DrawString("For what its worth", font2, Brushes.Black, x2, y) y += LINE_HEIGHT gr.DrawString("IMHO", font1, Brushes.Black, x1, y) gr.DrawString("In my humble opinion", font2, Brushes.Black, x2, y) End Sub Private Sub btnPreview_Click(...) Handles btnPreview.Click PrintPreviewDialog1.Document = PrintDocument1 PrintPreviewDialog1.ShowDialog() End Sub PLS TAFN HHOK FWIW IMHO Please That’s all for now Ha, ha - only kidding For what its worth In my humble opinion © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 331 of 443) 21. Const ONE_INCH As Integer = 100 Const LINE_HEIGHT As Integer = 20 'number of pixels in an inch 'one quarter of an inch Private Sub btnPrint_Click(...) Handles btnPrint.Click PrintDocument1.Print() End Sub Private Sub PrintDocument1_PrintPage(sender As System.Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles _ PrintDocument1.PrintPage Dim gr As Graphics = e.Graphics Dim x1 As Integer = ONE_INCH 'use one inch beyond left margin Dim x2 As Integer = CInt(1.5 * ONE_INCH) 'offset for second column Dim x3 As Integer = CInt(2.25 * ONE_INCH) 'offset for third column Dim y As Integer = ONE_INCH 'use one inch top margin Dim font1 As New Font("Courier New", 10, FontStyle.Underline) Dim font2 As New Font("Courier New", 10, FontStyle.Regular) gr.DrawString("% That uses", font2, Brushes.Black, x3, y) y += LINE_HEIGHT gr.DrawString("Rank", font1, Brushes.Black, x1, y) gr.DrawString("Country", font1, Brushes.Black, x2, y) gr.DrawString("the Internet", font1, Brushes.Black, x3, y) y += LINE_HEIGHT gr.DrawString("1", font2, Brushes.Black, x1, y) gr.DrawString("Norway", font2, Brushes.Black, x2, y) gr.DrawString((0.950).ToString("P1"), font2, Brushes.Black, x3, y) y += LINE_HEIGHT gr.DrawString("2", font2, Brushes.Black, x1, y) gr.DrawString("USA", font2, Brushes.Black, x2, y) gr.DrawString((0.842).ToString("P1"), font2, Brushes.Black, x3, y) y += LINE_HEIGHT gr.DrawString("3", font2, Brushes.Black, x1, y) gr.DrawString("China", font2, Brushes.Black, x2, y) gr.DrawString((0.458).ToString("P1"), font2, Brushes.Black, x3, y) End Sub Private Sub btnPreview_Click(...) Handles btnPreview.Click PrintPreviewDialog1.Document = PrintDocument1 PrintPreviewDialog1.ShowDialog() End Sub Rank 1 2 3 Country Norway USA China % That uses the Internet 95.0% 84.2% 45.8% 22. Private Sub btnPreview_Click(...) Handles btnPreview.Click PrintPreviewDialog1.Document = PrintDocument1 PrintPreviewDialog1.ShowDialog() End Sub Private Sub btnPrint_Click(...) Handles btnPrint.Click PrintDocument1.Print() End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 332 of 443) Private Sub PrintDocument1_PrintPage(sender As System.Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles _ PrintDocument1.PrintPage Dim legend() As String = {"Federal", "State", "Local"} Dim quantity() As Decimal = {33, 207, 180} Dim percent(quantity.Count - 1) As Decimal Dim sumOfQuantities As Decimal = 0 Dim sumOfSweepAngles As Decimal = 0 Dim br() As Brush = {Brushes.Blue, Brushes.Red, Brushes.Tan, Brushes.Green, Brushes.Orange, Brushes.Gray} Dim gr As Graphics = e.Graphics Dim r As Integer = 100 'Radius of circle Dim cx As Integer = 405 'Center of circle is (cx, cy) Dim cy As Integer = 305 gr.DrawString("Financing for Public Schools (K - 12)", Me.Font, Brushes.Black, 300, 175) For i As Integer = 0 To (quantity.Count – 1) sumOfQuantities += quantity(i) Next 'Convert tbe quantities to percents For i As Integer = 0 To (quantity.Count – 1) percent(i) = quantity(i) / sumOfQuantities Next 'Print the pie chart and the legends For i As Integer = 0 To (quantity.Count – 1) gr.FillPie(br(i), cx - r, cy - r, 2 * r, 2 * r, sumOfSweepAngles, percent(i) * 360) sumOfSweepAngles += percent(i) * 360 gr.FillRectangle(br(i), 520, 220 + 30 * i, 20, 20) gr.DrawString(legend(i), Me.Font, Brushes.Black, 550, 222 + 30 * i) Next End Sub 23. Private Sub btnPrint_Click(...) Handles btnPrint.Click PrintDocument1.Print() End Sub Private Sub PrintDocument1_PrintPage(sender As System.Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles _ PrintDocument1.PrintPage 'Print Italian flag Dim gr As Graphics = e.Graphics Dim br() As Brush = {Brushes.Green, Brushes.White, Brushes.Red} For i As Integer = 0 To 2 gr.FillRectangle(br(i), 300 + i * 50, 200, 50, 99) Next gr.DrawLine(Pens.Black, 300, 200, 448, 200) 'top border gr.DrawLine(Pens.Black, 300, 200, 300, 298) 'left border gr.DrawLine(Pens.Black, 300, 298, 448, 298) 'bottom border gr.DrawLine(Pens.Black, 448, 200, 448, 298) 'right border End Sub Private Sub btnPreview_Click(...) Handles btnPreview.Click PrintPreviewDialog1.Document = PrintDocument1 PrintPreviewDialog1.ShowDialog() End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 333 of 443) 24. Private Sub btnPrint_Click(...) Handles btnPrint.Click PrintDocument1.Print() End Sub Private Sub PrintDocument1_PrintPage(sender As System.Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles _ PrintDocument1.PrintPage Dim gr As Graphics = e.Graphics Dim br() As Brush = {Brushes.Orange, Brushes.White, Brushes.Green} Dim r As Integer = 12 'radius of circle 'picFlag.Width = 99, picFlag.Height = 149 For i As Integer = 0 To 2 gr.FillRectangle(br(i), 300, 200 + i * 33, 149, 33) Next gr.FillPie(Brushes.Orange, 375 - r, 249 - r, 2 * r, 2 * r, 0, 360) gr.DrawLine(Pens.Black, 300, 200, 448, 200) 'top border gr.DrawLine(Pens.Black, 300, 200, 300, 298) 'left border gr.DrawLine(Pens.Black, 300, 298, 348, 298) 'bottom border gr.DrawLine(Pens.Black, 448, 200, 448, 298) 'right border End Sub Private Sub btnPreview_Click(...) Handles btnPreview.Click PrintPreviewDialog1.Document = PrintDocument1 PrintPreviewDialog1.ShowDialog() End Sub CHAPTER 9 PROGRAMMING PROJECTS 1. Const FILE_NAME As String = "MemberPhones.txt" Dim membs() As String = IO.File.ReadAllLines(FILE_NAME) Private Sub frmMembers_Load(...) Handles MyBase.Load DisplayList() End Sub Sub DisplayList() lstMembers.Items.Clear() Dim query = From member In membs Let data = member.Split(","c) Select data(0) For Each person In query lstMembers.Items.Add(person) Next End Sub Private Sub lstMembers_SelectedIndexChanged(...) Handles _ lstMembers.SelectedIndexChanged 'Display the structure's data corresponding to the selected item. Dim i As Integer = lstMembers.SelectedIndex Dim data() = membs(i).Split(","c) If i >= 0 Then txtName.Text = data(0) mtbPhone.Text = data(1) Else txtName.Clear() mtbPhone.Clear() End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 334 of 443) Private Sub mnuUpdateModify_Click(...) Handles mnuUpdateModify.Click 'Store the modifications. Dim i As Integer = lstMembers.SelectedIndex If i >= 0 Then membs(i) = txtName.Text & "," & mtbPhone.Text End If 'Sort list of names Dim query = From member In membs Let data = member.Split(","c) Let names = data(0).Split(" "c) Order By names(1), names(0) Select member membs = query.ToArray DisplayList() End Sub Private Sub mnuUpdateAdd_Click(...) Handles mnuUpdateAdd.Click 'Add a new member. Dim n = membs.Count ReDim Preserve membs(n) membs(n) = txtName.Text & "," & mtbPhone.Text Dim query = From member In membs Let data = member.Split(","c) Let names = data(0).Split(" "c) Order By names(1), names(0) Select member membs = query.ToArray DisplayList() End Sub Private Sub mnuUpdateDelete_Click(...) Handles mnuUpdateDelete.Click 'Delete a member. Dim i As Integer = lstMembers.SelectedIndex If i >= 0 Then 'Only delete the entry if one is selected. Dim query = From member In membs Where member.Split(","c)(0) <> txtName.Text Select member membs = query.ToArray DisplayList() End If End Sub Private Sub mnuExit_Click(...) Handles mnuExit.Click 'Store the membership information into the file and end the program. IO.File.WriteAllLines(FILE_NAME, membs) Me.Close() 'Terminate the program End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 335 of 443) 2. Dim votes(0) As Integer 'Dimension a small array of length 1. Private Sub btnCandidate_Click(...) Handles btnCandidate.Click 'Nominate a candidate by adding him or her to the list. Dim name As String 'Clear the existing votes and results lstVotes.Visible = False lstVotes.Items.Clear() txtVotes.Clear() 'Get the name of the candidate name = InputBox("Enter the candidate's name:", "Nominate") 'If the name is not already in the list, then add it If lstCandidate.Items.IndexOf(name) = -1 Then lstCandidate.Items.Add(name) End If End Sub Private Sub btnStartVoting_Click(...) Handles btnStartVoting.Click btnCandidate.Enabled = False lblInstructions.Text = "Vote for a candidate by" & " double-clicking on his/her name. " & "End the voting by clicking on 'Tally Votes'." End Sub Private Sub lstCandidate_DoubleClick(...) Handles lstCandidate.DoubleClick 'Vote for a candidate by incrementing the candidate's count If votes.Count <= 1 Then 'Resize the votes array if not done so already ReDim votes(lstCandidate.Items.Count) End If votes(lstCandidate.SelectedIndex) += 1 txtVotes.Clear() 'Clear the results lstVotes.Visible = False MessageBox.Show("You voted for " & lstCandidate.Text & ".", "VOTE RECORDED") End Sub Private Sub btnTallyVotes_Click(...) Handles btnTallyVotes.Click 'Count the results and display the winner Dim winner As Integer Dim count As String lblInstructions.Text = "" lstVotes.Visible = True lstVotes.Items.Clear() winner = 0 'Index of the candidate with the most votes For i As Integer = 0 To (lstCandidate.Items.Count – 1) © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 336 of 443) Select Case votes(i) Case 0 count = "No votes" Case 1 count = "One vote" Case Else count = CStr(votes(i)) & " votes" End Select lstVotes.Items.Add(count) 'Display the votes for the candidate. If votes(i) > votes(winner) Then winner = i 'Remember who has the most votes. End If Next txtVotes.Clear() 'Display the candidate(s) with the most votes For i As Integer = 0 To (lstCandidate.Items.Count – 1) If votes(i) = votes(winner) Then If txtVotes.Text.Length = 0 Then 'The first winning candidate txtVotes.Text = CStr(lstCandidate.Items(i)) Else 'Multiple candidates with the winning vote count txtVotes.Text = txtVotes.Text & " and " & CStr(lstCandidate.Items(i)) End If End If Next 'Display the winning vote count txtVotes.Text = txtVotes.Text & " wins with " & votes(winner) & " votes." End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 337 of 443) 3. 'frmBooks' code Structure Book Dim title As String Dim author As String Dim category As String Dim stock As Integer Dim price As Decimal End Structure 'Title 'Author's name 'True = fiction, False = nonfiction 'Quantity in stock 'Wholesale price Public books() As Book Public numBooks As Integer 'number of books carried Public flagNewBook As Boolean = False Public n As Integer 'current index Private Sub frmBooks_Load(...) Handles MyBase.Load 'Load the data file into the array and display all books If IO.File.Exists("Books.txt") Then Dim tomes() As String = IO.File.ReadAllLines("Books.txt") numBooks = tomes.Count ReDim books(numBooks - 1) Dim data(4) As String For i As Integer = 0 To (numBooks – 1) data = tomes(i).Split(","c) books(i).title = data(0) books(i).author = data(1) books(i).category = data(2) books(i).stock = CInt(data(3)) books(i).price = CDec(data(4)) Next Dim query = From book In tomes Let line = book.Split(","c) Let title = line(0) Select title lstBooks.DataSource = query.ToList lstBooks.SelectedItem = Nothing End If End Sub Private Sub mnuDisplayAll_Click(...) Handles mnuDisplayAll.Click 'Display books mnuDisplayAll.Checked = True mnuDisplayFiction.Checked = False mnuDisplayNonfiction.Checked = False Display() End Sub Private Sub mnuDisplayFiction_Click(...) Handles mnuDisplayFiction.Click 'Display books mnuDisplayAll.Checked = False mnuDisplayFiction.Checked = True mnuDisplayNonfiction.Checked = False Display() End Sub Private Sub mnuDisplayNonfiction_Click(...) Handles mnuDisplayNonfiction.Click 'Display books mnuDisplayAll.Checked = False mnuDisplayFiction.Checked = False mnuDisplayNonfiction.Checked = True Display() End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 338 of 443) Sub Display() 'Display appropriate subset of books Dim query = From book In books Where (book.category = "F" And (Not mnuDisplayNonfiction.Checked)) Or (book.category = "N" And (Not mnuDisplayFiction.Checked)) Select book.title lstBooks.DataSource = query.ToList lstBooks.SelectedItem = Nothing End Sub Private Sub mnuBookAdd_Click(...) Handles mnuBookAdd.Click 'Add a new book to the array flagNewBook = True frmDetails.txtTitle.Clear() frmDetails.txtAuthor.Clear() frmDetails.txtStock.Clear() frmDetails.txtPrice.Clear() frmDetails.radFiction.Checked = True frmDetails.ShowDialog() End Sub Private Sub mnuBookDelete_Click(...) Handles mnuBookDelete.Click 'Delete the selected book from the array n = lstBooks.SelectedIndex If n >= 0 Then 'Only delete if book is selected numBooks = numBooks - 1 For j As Integer = n To (numBooks – 1) 'Shift the items above down by one books(j) = books(j + 1) Next ReDim Preserve books(numBooks - 1) Display() 'Redisplay the output End If End Sub Private Sub mnuBookUpdate_Click(...) Handles mnuBookUpdate.Click 'Update the stock or price of the selected book n = lstBooks.SelectedIndex If n >= 0 Then 'Only update if book is selected flagNewBook = False frmDetails.txtTitle.Text = books(n).title frmDetails.txtTitle.SelectionStart = 0 frmDetails.txtAuthor.Text = books(n).author frmDetails.txtStock.Text = CStr(books(n).stock) frmDetails.txtPrice.Text = (books(n).price).ToString("C") If books(n).category = "F" Then frmDetails.radFiction.Checked = True Else frmDetails.radNonFiction.Checked = True End If frmDetails.ShowDialog() End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 339 of 443) Private Sub mnuFileSave_Click(...) Handles mnuFileSave.Click 'Save the array into the text file Dim query = From book In books Let line = book.title & "," & book.author & "," & book.category & "," & book.stock & "," & book.price Select line IO.File.WriteAllLines("Books.txt", query) MessageBox.Show("File saved.") End Sub Private Sub mnuFileExit_Click(...) Handles mnuFileExit.Click 'End the program End End Sub Private Sub mnuValuesAll_Click(...) Handles mnuValuesAll.Click Dim query = From book In books Select book.price * book.stock MessageBox.Show("Value: " & (query.Sum).ToString("C"), "All") End Sub Private Sub mnuValuesFiction_Click(...) Handles mnuValuesFiction.Click Dim query = From book In books Where book.category = "F" Select book.price * book.stock MessageBox.Show("Value: " & (query.Sum).ToString("C"), "Fiction") End Sub Private Sub mnuValuesNonfiction_Click(...) Handles mnuValuesNonfiction.Click Dim query = From book In books Where book.category = "N" Select book.price * book.stock MessageBox.Show("Value: " & (query.Sum).ToString("C"), "Nonfiction") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 340 of 443) 'frmDetails' code Private Sub btnRecord_Click(...) Handles btnRecord.Click If (txtTitle.Text = "") Or (txtAuthor.Text = "") Or _ (txtStock.Text = "") Or (txtPrice.Text = "") Then MessageBox.Show("You must enter the title, author, stock and price.") Else If frmBooks.flagNewBook Then ReDim Preserve frmBooks.books(frmBooks.numBooks) frmBooks.books(frmBooks.numBooks).title = txtTitle.Text frmBooks.books(frmBooks.numBooks).author = txtAuthor.Text frmBooks.books(frmBooks.numBooks).stock = CInt(txtStock.Text) frmBooks.books(frmBooks.numBooks).price = CDec(txtPrice.Text) If radFiction.Checked Then frmBooks.books(frmBooks.numBooks).category = "F" Else frmBooks.books(frmBooks.numBooks).category = "N" End If frmBooks.numBooks += 1 Else frmBooks.books(frmBooks.n).title = txtTitle.Text frmBooks.books(frmBooks.n).author = txtAuthor.Text frmBooks.books(frmBooks.n).stock = CInt(txtStock.Text) frmBooks.books(frmBooks.n).price = CDec(txtPrice.Text) If radFiction.Checked Then frmBooks.books(frmBooks.n).category = "F" Else frmBooks.books(frmBooks.n).category = "N" End If End If End If Me.Close() End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 341 of 443) 4. 'frmChart's code Dim seats(15, 6) As String '15 rows of six seats per row ' Each may have value R, L, V or . (period) Dim frmAssign As New frmMeal() 'Form to use to assign a seat Private Sub frmChart_Load(...) Handles MyBase.Load 'Initialize the display and data array. 'Add heading to list box lstRows.Items.Add(" ABC DEF ") For i As Integer = 1 To 15 'Loop over each row. For j As Integer = 1 To 6 'Initialize each seat to empty. seats(i, j) = "." Next 'Initialize the display row. lstRows.Items.Add(" ... ... ") Next End Sub Private Sub lstRows_SelectedIndexChanged(...) Handles _ lstRows.SelectedIndexChanged 'Display the details of the selected row in the text boxes. Dim row As Integer = lstRows.SelectedIndex If row > 0 Then ShowRow(row) End If End Sub Private Sub ShowRow(row As Integer) 'Update the row's information in the text boxes. txtRow.Text = CStr(row) txtA.Text = seats(row, 1) txtB.Text = seats(row, 2) txtC.Text = seats(row, 3) txtD.Text = seats(row, 4) txtE.Text = seats(row, 5) txtF.Text = seats(row, 6) End Sub Private Sub txtA_Click(...) Handles txtA.Click Assign(1) End Sub Private Sub txtB_Click(...) Handles txtB.Click Assign(2) End Sub Private Sub txtC_Click(...) Handles txtC.Click Assign(3) End Sub Private Sub txtD_Click(...) Handles txtD.Click Assign(4) End Sub Private Sub txtE_Click(...) Handles txtE.Click Assign(5) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 342 of 443) Private Sub txtF_Click(...) Handles txtF.Click Assign(6) End Sub Sub Assign(seat As Integer) 'Assign the seat in the current row Dim row As Integer = lstRows.SelectedIndex 'Only assign the seat if the row selected is valid If row > 0 Then 'Display a secondary form to get value for a seat in a row. frmAssign.seat = seats(row, seat) 'Assign seat's data to the second form. frmAssign.Text = "Assign seat " & row & Chr(64 + seat) frmAssign.ShowDialog() 'Display form, and wait until it is closed. seats(row, seat) = frmAssign.seat 'Retrieve the new data from the form. ShowRow(row) 'Update the row's data in the text boxes and list box. lstRows.Items(row) = " " & seats(row, 1) & seats(row, 2) & seats(row, 3) & " " & seats(row, 4) & seats(row, 5) & seats(row, 6) & " " 'Clear the statistics window lstDisplay.Items.Clear() End If End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click 'Display statistics on meal totals, filled and vacant window seats Dim meals(3) As Integer Dim vacant As Integer = 0 Dim window As Integer = 0 For row As Integer = 1 To 15 'Compile the statistics. For seat As Integer = 1 To 6 Select Case seats(row, seat) Case "R" meals(1) += 1 Case "L" meals(2) += 1 Case "V" meals(3) += 1 Case Else 'If none of the above, then seat is unoccupied. vacant += 1 If (seat = 1) Or (seat = 6) Then window += 1 'If it is a window, count it. End If End Select Next Next lstDisplay.Items.Clear() 'Display the results lstDisplay.Items.Add("Seats filled: " & (15 * 6 - vacant)) lstDisplay.Items.Add("Windows avail: " & window) lstDisplay.Items.Add("Regular meals: " & meals(1)) lstDisplay.Items.Add("LowCal meals: " & meals(2)) lstDisplay.Items.Add("Vegie meals: " & meals(3)) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 343 of 443) 'frmMeal's code Public seat As String ' 'seat has values R, L, V or . (period) In frmChart it is referred to as frmAssign.seat. Private Sub frmMeal_Load(...) Handles MyBase.Load 'Update the checked status per the seat Select Case seat Case "R" radRegular.Checked = True Case "L" radLowCal.Checked = True Case "V" radVeg.Checked = True Case Else 'If none of the above, then seat is unoccupied radUnoccupied.Checked = True End Select End Sub Private Sub radUnoccupied_CheckedChanged(...) Handles _ radUnoccupied.CheckedChanged 'Set value to seat and close the form seat = "." Me.Close() End Sub Private Sub radRegular_CheckedChanged(...) Handles radRegular.CheckedChanged 'Set value to seat and close the form seat = "R" Me.Close() End Sub Private Sub radLowCal_CheckedChanged(...) Handles radLowCal.CheckedChanged 'Set value to seat and close the form seat = "L" Me.Close() End Sub Private Sub radVeg_CheckedChanged(...) Handles radVeg.CheckedChanged 'Set value to seat and close the form seat = "V" Me.Close() End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 344 of 443) © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 345 of 443) 5. Dim randomNum As New Random Private Sub frmWorldSeries_Load(...) Handles MyBase.Load ResetControls() End Sub Private Sub btnSimulate_Click(...) Handles btnSimulate.Click Dim games As Integer Dim winner As String = "" 'Simulate the playing of 10,000 world series. Update the values of the scroll 'bars and text boxes to reflect the current statistics ResetControls() For i As Integer = 1 To 10000 PlaySeries(winner, games) If winner = "Weaker team won" Then hsbUnderdog.Value = hsbUnderdog.Value + 1 Else hsbFavorite.Value = hsbFavorite.Value + 1 End If Select Case games Case 4 hsbFour.Value += 1 Case 5 hsbFive.Value += 1 Case 6 hsbSix.Value += 1 Case 7 hsbSeven.Value += 1 End Select 'Force a refresh every 10th time, so that the computer is not too 'overwhelmed with refreshes If i Mod 10 = 0 Then UpdateLabels(i) txtUnderdog.Refresh() txtFavorite.Refresh() txtFour.Refresh() txtFive.Refresh() txtSix.Refresh() txtSeven.Refresh() End If Next txtAverageDuration.Text = ((4 * CDbl(hsbFour.Value) + 5 * CSng(hsbFive.Value) + 6 * CSng(hsbSix.Value) + 7 * CSng(hsbSeven.Value)) / 10000).ToString("N") & " games" End Sub Private Sub PlaySeries(ByRef winner As String, ByRef games As Integer) Dim weakerTeamWins As Integer = 0 Dim strongerTeamWins As Integer = 0 Dim numGames As Integer = 0 Dim prob As Integer = CInt(txtProb.Text) Dim seriesOver As Boolean = False Do While seriesOver = False If randomNum.Next(0, 100) < prob Then weakerTeamWins += 1 Else strongerTeamWins += 1 End If If weakerTeamWins = 4 Then winner = "Weaker team won" seriesOver = True ElseIf strongerTeamWins = 4 Then winner = "Stronger team won" © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 346 of 443) seriesOver = True End If numGames += 1 Loop games = numGames End Sub Private Sub ResetControls() 'Resets the initial value of all scroll bars and statistic labels hsbFavorite.Value = 0 hsbUnderdog.Value = 0 hsbFour.Value = 0 hsbFive.Value = 0 hsbSix.Value = 0 hsbSeven.Value = 0 UpdateLabels(1) 'reuse procedure to set all percentages to zero txtAverageDuration.Clear() End Sub Private Sub UpdateLabels(ByRef numGames As Integer) txtUnderdog.Text = CStr(hsbUnderdog.Value) txtFavorite.Text = CStr(hsbFavorite.Value) txtFour.Text = CStr(hsbFour.Value) txtFive.Text = CStr(hsbFive.Value) txtSix.Text = CStr(hsbSix.Value) txtSeven.Text = CStr(hsbSeven.Value) txtUnderdogPercent.Text = (CInt(txtUnderdog.Text) / numGames).ToString("P") txtFavoritePercent.Text = (CInt(txtFavorite.Text) / numGames).ToString("P") txtFourPercent.Text = (hsbFour.Value / numGames).ToString("P") txtFivePercent.Text = (hsbFive.Value / numGames).ToString("P") txtSixPercent.Text = (hsbSix.Value / numGames).ToString("P") txtSevenPercent.Text = (hsbSeven.Value / numGames).ToString("P") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 347 of 443) 6. Const ONE_INCH As Integer = 75 'number of pixels in an inch Const LINE_HEIGHT As Integer = 15 'one-quarter of an inch Private Sub btnPrint_Click(sender As System.Object, e As System.EventArgs) Handles btnPrint.Click 'Print a Business Travel Expense attachment PrintDocument1.Print() End Sub Private Sub btnPreview_Click(sender As System.Object, e As System.EventArgs) Handles btnPreview.Click PrintPreviewDialog1.Document = PrintDocument1 PrintPreviewDialog1.ShowDialog() End Sub Private Sub PrintDocument1_PrintPage(sender As System.Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage Dim gr As Graphics = e.Graphics Dim str As String Dim x1 As Integer = ONE_INCH 'use one inch left margin Dim x2 As Integer = 5 * ONE_INCH Dim y As Integer = 2 * ONE_INCH 'use two inch top margin Dim font As New Font("Courier New", 10, FontStyle.Bold) str = "Business Travel Expenses" gr.DrawString(str, font, Brushes.Black, x1, y) font = New Font("Courier New", 10, FontStyle.Regular) y += 2 * LINE_HEIGHT 'double space str = "Trip to attend meeting of" gr.DrawString(str, font, Brushes.Black, x1, y) y += LINE_HEIGHT gr.DrawString(txtOrg.Text, font, Brushes.Black, x1, y) y += LINE_HEIGHT str = txtDates.Text & " in " & txtPlace.Text gr.DrawString(str, font, Brushes.Black, x1, y) y += 2 * LINE_HEIGHT str = "Meals and entertainment:" & " " & (CDec(txtMealsEnt.Text)).ToString("C") gr.DrawString(lblMealsEnt.Text, font, Brushes.Black, x1, y) gr.DrawString((CDec(txtMealsEnt.Text)).ToString("C"), font, Brushes.Black, x2, y) y += LINE_HEIGHT str = "Airplane fare:" & " " & (CDec(txtAirFare.Text)).ToString("C") gr.DrawString(lblAirfare.Text, font, Brushes.Black, x1, y) gr.DrawString((CDec(txtAirFare.Text)).ToString("C"), font, Brushes.Black, x2, y) y += LINE_HEIGHT str = "Lodging:" & " " & (CDec(txtLodging.Text)).ToString("C") gr.DrawString(lblLodging.Text, font, Brushes.Black, x1, y) gr.DrawString((CDec(txtLodging.Text)).ToString("C"), font, Brushes.Black, x2, y) y += LINE_HEIGHT str = "Taxi fares:" & " " & (CDec(txtTaxi.Text)).ToString("C") gr.DrawString(lblTaxi.Text, font, Brushes.Black, x1, y) gr.DrawString((CDec(txtTaxi.Text)).ToString("C"), font, Brushes.Black, x2, y) y += 2 * LINE_HEIGHT Dim other As Decimal = CDec(txtAirFare.Text) + CDec(txtLodging.Text) + CDec(txtTaxi.Text) str = "Total other than meals and entertainment: " & other.ToString("C") gr.DrawString(str, font, Brushes.Black, x1, y) y += LINE_HEIGHT Dim mealEntDeduction As Decimal = 0.5D * CDec(txtMealsEnt.Text) str = "50% of meals and entertainment: " & (CDec(mealEntDeduction)).ToString("C") © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 348 of 443) gr.DrawString(str, font, Brushes.Black, x1, y) y += 2 * LINE_HEIGHT str = "TOTAL DEDUCTIBLE EXPENSES: " & (CDec(other + mealEntDeduction)).ToString("C") gr.DrawString(str, font, Brushes.Black, x1, y) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 349 of 443) 7. Dim StandardDeckOfCards(51) As String Dim randomNum As New Random Private Sub Form1_Load(...) Handles MyBase.Load 'Populate deck of cards Dim suits() As String = {"Hearts", "Diamonds", "Clubs", "Spades"} For i As Integer = 0 To 3 'Populate numbers 2 through 10. For j As Integer = 2 To 10 StandardDeckOfCards(i * 13 + j) = j & " of " & suits(i) Next 'Populate the honors cards. StandardDeckOfCards(i * 13 + 0) = "King of " & suits(i) StandardDeckOfCards(i * 13 + 1) = "Ace of " & suits(i) StandardDeckOfCards(i * 13 + 11) = "Jack of " & suits(i) StandardDeckOfCards(i * 13 + 12) = "Queen of " & suits(i) Next End Sub Function ShuffleCards(deckOfCards As String()) As String() 'inside-out algorithm Dim a(51) As String, k As Integer a(0) = deckOfCards(0) For i As Integer = 1 To 51 k = randomNum.Next(0, i + 1) a(i) = a(k) a(k) = deckOfCards(i) Next Return a End Function Private Sub btnCarryOut_Click(...) Handles btnCarryOut.Click Dim total As Integer For j As Integer = 1 To 1000000 Dim deck1(51), deck2(51), shuffledDeck1(51), shuffledDeck2(51) As String Dim count As Integer = 0 For i As Integer = 0 To 51 deck1(i) = StandardDeckOfCards(i) deck2(i) = StandardDeckOfCards(i) Next shuffledDeck1 = ShuffleCards(deck1) shuffledDeck2 = ShuffleCards(deck2) For i As Integer = 0 To 51 If shuffledDeck1(i) = shuffledDeck2(i) Then count += 1 End If Next total += count Next txtNumberOfMatches.Text = CStr(total / 1000000) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 350 of 443) 8. Structure Country Dim name As String Dim alreadyShown As Boolean End Structure Dim flags() As String = IO.File.ReadAllLines("flagCountries.txt") 'flags() is used to count the number of flags and to populate the list box Dim countries(flags.Length) As Country 'primary array for program Dim n As Integer Dim count As Integer = 0 'number of flags shown Dim randomNum As New Random Private Sub frmFlags_Load(...) Handles MyBase.Load For i As Integer = 0 To (flags.Length – 1) countries(i).name = flags(i) countries(i).alreadyShown = False Next n = CInt(randomNum.Next(0, flags.Length)) picFlag.Image = Image.FromFile("flag" & flags(n) & ".jpg") countries(n).alreadyShown = True count += 1 lstCountries.DataSource = flags lstCountries.SelectedIndex = -1 End Sub Private Sub lstCountries_Click(...) Handles lstCountries.Click If lstCountries.SelectedIndex = n Then MessageBox.Show("Correct") Else MessageBox.Show("Not Correct") End If lstCountries.SelectedIndex = -1 End Sub Private Sub btnDisplayFlag_Click(...) Handles btnDisplayFlag.Click If count < flags.Length Then Dim found As Boolean = False Do Until found n = CInt(randomNum.Next(0, flags.Length)) If countries(n).alreadyShown = False Then found = True End If countries(n).alreadyShown = True Loop picFlag.Image = Image.FromFile("flag" & flags(n) & ".jpg") count += 1 Else MessageBox.Show("All flags shown.") End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 351 of 443) CHAPTER 10 EXERCISES 10.1 1. (e) 2. (c) 3. (d) 4. (f) 5. (b) 6. (a) 7. Private Sub frmCities_Load(...) Handles MyBase.Load Me.CitiesTableAdapter.Fill(Me.MegacitiesDataSet.Cities) End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query = From city In MegacitiesDataSet.Cities Let popGrowth = (city.pop2015 - city.pop2010) / city.pop2010 Let formattedPopGrowth = popGrowth.ToString("P") Order By popGrowth Descending Select city.name, city.country, formattedPopGrowth dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("name").HeaderText = "City" dgvOutput.Columns("country").HeaderText = "Country" dgvOutput.Columns("formattedPopGrowth").HeaderText = "Projected Population Growth" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 352 of 443) 8. Private Sub frmCities_Load(...) Handles MyBase.Load Me.CountriesTableAdapter.Fill(Me.MegacitiesDataSet.Countries) Me.CitiesTableAdapter.Fill(Me.MegacitiesDataSet.Cities) End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query = From city In MegacitiesDataSet.Cities Join country In MegacitiesDataSet.Countries On city.country Equals country.name Let cityPer = city.pop2010 / country.pop2010 Order By cityPer Descending Let formattedCityPer = cityPer.ToString("P") Select city.name, city.country, formattedCityPer dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("name").HeaderText = "City" dgvOutput.Columns("country").HeaderText = "Country" dgvOutput.Columns("formattedCityPer").HeaderText = "Percentage of Country's Population" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 353 of 443) 9. Private Sub frmCities_Load(...) Handles MyBase.Load Me.CitiesTableAdapter.Fill(Me.MegacitiesDataSet.Cities) End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query = From city In MegacitiesDataSet.Cities Where city.pop2015 > 20 Order By city.pop2015 Descending Select city.name lstOutput.DataSource = query.ToList lstOutput.SelectedItem = Nothing End Sub 10. Private Sub frmCities_Load(...) Handles MyBase.Load Me.CitiesTableAdapter.Fill(Me.MegacitiesDataSet.Cities) Dim query = From city In MegacitiesDataSet.Cities Order By city.country Select city.country Distinct lstCountries.DataSource = query.ToList End Sub Private Sub lstCountries_SelectedIndexChanged(...) Handles _ lstCountries.SelectedIndexChanged Dim query = From city In MegacitiesDataSet.Cities Where city.country = lstCountries.Text Order By city.pop2010 Descending Select city.name txtMostPopulousCity.Text = query.First End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 354 of 443) 11. Private Sub frmCities_Load(...) Handles MyBase.Load Me.CitiesTableAdapter.Fill(Me.MegacitiesDataSet.Cities) End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query1 = From city In MegacitiesDataSet.Cities Let perIncr = (city.pop2015 - city.pop2010) / city.pop2010 Order By perIncr Descending Select city.name Dim geatestCity As String = query1.First Dim query2 = From city In MegacitiesDataSet.Cities Where city.name = geatestCity Select city.name, city.country, city.pop2010, city.pop2015 dgvOutput.DataSource = query2.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("name").HeaderText = "City" dgvOutput.Columns("country").HeaderText = "Country" dgvOutput.Columns("pop2010").HeaderText = "Population in 2010" dgvOutput.Columns("pop2015").HeaderText = "Population in 2015" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 355 of 443) 12. Private Sub frmCities_Load(...) Handles MyBase.Load Me.CitiesTableAdapter.Fill(Me.MegacitiesDataSet.Cities) End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query = From city In MegacitiesDataSet.Cities Where (city.pop2010 >= 13) And (city.pop2010 <= 19) Order By city.country Select city.name, city.country, city.pop2010 dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("name").HeaderText = "City" dgvOutput.Columns("country").HeaderText = "Country" dgvOutput.Columns("pop2010").HeaderText = "Population in 2010" End Sub 13. Private Sub frmCities_Load(...) Handles MyBase.Load Me.CountriesTableAdapter.Fill(Me.MegacitiesDataSet.Countries) Me.CitiesTableAdapter.Fill(Me.MegacitiesDataSet.Cities) Dim query = From city In MegacitiesDataSet.Cities Select city.name lstCities.DataSource = query.ToList End Sub Private Sub lstCities_SelectedIndexChanged(...) Handles _ lstCities.SelectedIndexChanged Dim query = From city In MegacitiesDataSet.Cities Join country In MegacitiesDataSet.Countries On city.country Equals country.name Let cityPer = city.pop2010 / country.pop2010 Where city.name = lstCities.Text Select cityPer txtOutput.Text = (query.First).ToString("P") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 356 of 443) 14. Private Sub frmCities_Load(...) Handles MyBase.Load Me.CountriesTableAdapter.Fill(Me.MegacitiesDataSet.Countries) Me.CitiesTableAdapter.Fill(Me.MegacitiesDataSet.Cities) Dim query = From city In MegacitiesDataSet.Cities Select city.name lstCities.DataSource = query.ToList End Sub Private Sub lstCities_SelectedIndexChanged(...) Handles _ lstCities.SelectedIndexChanged Dim query = From city In MegacitiesDataSet.Cities Join country In MegacitiesDataSet.Countries On city.country Equals country.name Where city.name = lstCities.Text Select country.monetaryUnit txtOutput.Text = query.First End Sub 15. Private Sub frmCities_Load(...) Handles MyBase.Load Me.CitiesTableAdapter.Fill(Me.MegacitiesDataSet.Cities) End Sub Private Sub btnCreate_Click(...) Handles btnCreate.Click Dim query = From city In MegacitiesDataSet.Cities Select city.name & "," & city.country & "," & city.pop2010 & "," & city.pop2015 IO.File.WriteAllLines("Megacities.txt", query.ToArray) MessageBox.Show("File Created") End Sub 16. Private Sub frmCities_Load(...) Handles MyBase.Load Me.CitiesTableAdapter.Fill(Me.MegacitiesDataSet.Cities) End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 357 of 443) Private Sub btnCreate_Click(...) Handles btnCreate.Click Dim sw As IO.StreamWriter = IO.File.CreateText("Megacities.xml") sw.WriteLine("<?xml version='1.0'?>") sw.WriteLine("<!-- This file contains data on large cities -->") sw.WriteLine("<Megacities>") Dim query = From city In MegacitiesDataSet.Cities Select city.name, city.country, city.pop2010, city.pop2015 For Each city In query sw.WriteLine(" <city>") sw.WriteLine(" <name>" & city.name & "</name>") sw.WriteLine(" <country>" & city.country & "</country>") sw.WriteLine(" <pop2010>" & city.pop2010 & "</pop2010>") sw.WriteLine(" <pop2015>" & city.pop2015 & "</pop2015>") sw.WriteLine(" </city>") Next sw.WriteLine("</Megacities>") sw.Close() MessageBox.Show("File Created") End Sub 17. Private Sub frmNations_Load(...) Handles MyBase.Load Me.NationsTableAdapter.Fill(Me.UNDataSet.Nations) Dim query = From nation In UNDataSet.Nations Order By nation.continent Ascending Select nation.continent Distinct lstContinents.DataSource = query.ToList End Sub Private Sub lstContinents_SelectedIndexChanged(...) Handles _ lstContinents.SelectedIndexChanged Dim queryPop = From nation In UNDataSet.Nations Where nation.continent = lstContinents.Text Order By nation.population Descending Select nation.name lstCountriesPop.DataSource = queryPop.ToList lstCountriesPop.SelectedItem = Nothing Dim queryArea = From nation In UNDataSet.Nations Where nation.continent = lstContinents.Text Order By nation.area Descending Select nation.name lstCountriesArea.DataSource = queryArea.ToList lstCountriesArea.SelectedItem = Nothing End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 358 of 443) 18. Private Sub frmNations_Load(...) Handles MyBase.Load Me.NationsTableAdapter.Fill(Me.UNDataSet.Nations) Dim query = From nation In UNDataSet.Nations Order By nation.continent Ascending Select nation.continent Distinct lstContinents.DataSource = query.ToList End Sub Private Sub lstContinents_SelectedIndexChanged(...) Handles _ lstContinents.SelectedIndexChanged Dim query = From nation In UNDataSet.Nations Where nation.continent = lstContinents.Text Let popDensity = 100000 * nation.population / nation.area Order By popDensity Ascending Let formattedDen = popDensity.ToString("N") Select nation.name, formattedDen dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("name").HeaderText = "Country" dgvOutput.Columns("formattedDen").HeaderText = "Population Density" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 359 of 443) 19. Private Sub Form1_Load(...) Handles MyBase.Load Me.NationsTableAdapter.Fill(Me.UNDataSet.Nations) End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query = From country In UNDataSet.Nations Select country.area Dim max As Double = query.Max Dim min As Double = query.Min Dim queryOutput = From country In UNDataSet.Nations Where country.area = max Or country.area = min Order By country.area Descending Select country.name, country.continent, country.population, country.area dgvOutput.DataSource = queryOutput.ToList dgvOutput.CurrentCell = Nothing End Sub 20. Private Sub frmCurrency_Load(...) Handles MyBase.Load Me.RatesTableAdapter.Fill(Me.ExchrateDataSet.Rates) Dim query = From money In ExchrateDataSet.Rates Select money.country lstCountries.DataSource = query.ToList End Sub Private Sub lstCountries_SelectedIndexChanged(...) Handles _ lstCountries.SelectedIndexChanged Dim query = From money In ExchrateDataSet.Rates Where money.country = lstCountries.Text Select money.monetaryUnit, money.dollarRate txtCurrency.Text = query.First.monetaryUnit txtRate.Text = CStr(query.First.dollarRate) End Sub 21. Private Sub frmCurrencies_Load(...) Handles MyBase.Load Me.RatesTableAdapter.Fill(Me.ExchrateDataSet.Rates) Dim query = From money In ExchrateDataSet.Rates Order By money.dollarRate Ascending Select money.country lstCountries.DataSource = query.ToList End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 360 of 443) Private Sub lstCountries_SelectedIndexChanged(...) Handles _ lstCountries.SelectedIndexChanged Dim query = From money In ExchrateDataSet.Rates Where money.country = lstCountries.Text Select money.monetaryUnit, money.dollarRate txtCurrency.Text = query.First.monetaryUnit txtRate.Text = CStr(query.First.dollarRate) End Sub 22. Private Sub frmCurrencies_Load(...) Handles MyBase.Load Me.RatesTableAdapter.Fill(Me.ExchrateDataSet.Rates) Dim query = From money In ExchrateDataSet.Rates Select money.country lstFrom.DataSource = query.ToList lstTo.DataSource = query.ToList End Sub Private Sub btnConvert_Click(...) Handles btnConvert.Click Dim amount As Double = CDbl(txtAmount.Text) Dim fromCountry As String = lstFrom.Text Dim toCountry As String = lstTo.Text Dim queryFrom = From money In ExchrateDataSet.Rates Where money.country = fromCountry Select money.monetaryUnit, money.dollarRate Dim fromRate As Double = queryFrom.First.dollarRate Dim queryTo = From money In ExchrateDataSet.Rates Where money.country = toCountry Select money.monetaryUnit, money.dollarRate Dim toRate As Double = queryTo.First.dollarRate Dim convertedAmount = amount * toRate / fromRate txtOutput.Text = amount.ToString("N") & " " & queryFrom.First.monetaryUnit & "s from " & lstFrom.Text & " equals " & convertedAmount.ToString("N") & " " & queryTo.First.monetaryUnit & "s from " & lstTo.Text & "." End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 361 of 443) 23. Private Sub frmBaseball_Load(...) Handles MyBase.Load Me.TeamsTableAdapter.Fill(Me.BaseballDataSet.Teams) Dim query = From team In BaseballDataSet.Teams Order By team.name Select team.name lstTeams.DataSource = query.ToList End Sub Private Sub lstTeams_SelectedIndexChanged(...) Handles _ lstTeams.SelectedIndexChanged Dim query = From team In BaseballDataSet.Teams Where team.name = lstTeams.Text Select team.stadium txtStadium.Text = query.First End Sub 24. Private Sub frmBaseball_Load(...) Handles MyBase.Load Me.TeamsTableAdapter.Fill(Me.BaseballDataSet.Teams) End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query = From team In BaseballDataSet.Teams Let battingAve = team.hits / team.atBats Let formattedBattingAve = battingAve.ToString("N3") Order By battingAve Ascending Select team.name, team.stadium, formattedBattingAve dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("name").HeaderText = "Team" dgvOutput.Columns("stadium").HeaderText = "Stadium" dgvOutput.Columns("formattedBattingAve").HeaderText = "Batting Average" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 362 of 443) 25. Private Sub frmBaseball_Load(...) Handles MyBase.Load Me.PlayersTableAdapter.Fill(Me.BaseballDataSet.Players) End Sub Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim query1 = From player In BaseballDataSet.Players Order By player.hits Descending Select player.hits Dim mostHits As Double = query1.Max Dim query2 = From player In BaseballDataSet.Players Where player.hits = mostHits Select player.name lstOutput.DataSource = query2.ToList lstOutput.SelectedItem = Nothing End Sub 26. Private Sub frmBaseball_Load(...) Handles MyBase.Load Me.PlayersTableAdapter.Fill(Me.BaseballDataSet.Players) End Sub Private Sub btnDetermine_Click(...) Handles btnDetermine.Click Dim query1 = From player In BaseballDataSet.Players Let battingAve = player.hits / player.atBats Order By battingAve Descending Select battingAve Dim highestBattingAve As Double = query1.Max Dim query2 = From player In BaseballDataSet.Players Let battingAve = player.hits / player.atBats Where battingAve = highestBattingAve Select player.name lstOutput.DataSource = query2.ToList lstOutput.SelectedItem = Nothing End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 363 of 443) 27. Private Sub frmBaseball_Load(...) Handles MyBase.Load Me.TeamsTableAdapter.Fill(Me.BaseballDataSet.Teams) Me.PlayersTableAdapter.Fill(Me.BaseballDataSet.Players) Dim query = From team In BaseballDataSet.Teams Order By team.name Select team.name lstTeams.DataSource = query.ToList End Sub Private Sub lstTeams_SelectedIndexChanged(...) Handles _ lstTeams.SelectedIndexChanged Dim query = From player In BaseballDataSet.Players Where player.team = lstTeams.Text Let battingAve = player.hits / player.atBats Let formattedBattingAve = battingAve.ToString("N3") Order By battingAve Descending Select player.name, formattedBattingAve dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("name").HeaderText = "Name" dgvOutput.Columns("formattedBattingAve").HeaderText = "Batting Average" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 364 of 443) 28. Private Sub frmBaseball_Load(...) Handles MyBase.Load Me.PlayersTableAdapter.Fill(Me.BaseballDataSet.Players) Dim query = From player In BaseballDataSet.Players Let battingAve = player.hits / player.atBats Where battingAve > 0.3 Order By battingAve Ascending Let formattedBattingAve = battingAve.ToString("N3") Select formattedBattingAve Distinct lstPlayers.DataSource = query.ToList End Sub Private Sub lstPlayers_SelectedIndexChanged(...) Handles _ lstPlayers.SelectedIndexChanged Dim query = From player In BaseballDataSet.Players Let battingAve = player.hits / player.atBats Where battingAve.ToString("N3")= lstPlayers.Text Let lastName = player.name.Split(" "c)(1) Order By lastName Ascending Select player.name, player.team dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("name").HeaderText = "Player" dgvOutput.Columns("team").HeaderText = "Team" End Sub 29. Private Sub frmBaseball_Load(...) Handles MyBase.Load Me.TeamsTableAdapter.Fill(Me.BaseballDataSet.Teams) End Sub Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim query1 = From team In BaseballDataSet.Teams Where team.league = "American" Select team.hits Dim query2 = From team In BaseballDataSet.Teams Where team.league = "American" Select team.atBats txtBattingAve.Text = (query1.Sum / query2.Sum).ToString("N3") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 365 of 443) 30. Private Sub frmBaseball_Load(...) Handles MyBase.Load Me.TeamsTableAdapter.Fill(Me.BaseballDataSet.Teams) End Sub Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim query = From team In BaseballDataSet.Teams Where team.league = "National" Select team.hits txtHits.Text = (query.Sum).ToString("N0") End Sub 31. Private Sub frmBaseball_Load(...) Handles MyBase.Load Me.TeamsTableAdapter.Fill(Me.BaseballDataSet.Teams) Me.PlayersTableAdapter.Fill(Me.BaseballDataSet.Players) End Sub Private Sub btnCount_Click(...) Handles btnCount.Click Dim query = From player In BaseballDataSet.Players Join team In BaseballDataSet.Teams On player.team Equals team.name Where team.league = "National" Select player.name txtNational.Text = (query.Count).ToString("N0") End Sub 32. Private Sub frmBaseball_Load(...) Handles MyBase.Load Me.TeamsTableAdapter.Fill(Me.BaseballDataSet.Teams) Me.PlayersTableAdapter.Fill(Me.BaseballDataSet.Players) End Sub Private Sub btnCount_Click(...) Handles btnCount.Click Dim query = From player In BaseballDataSet.Players Join team In BaseballDataSet.Teams On player.team Equals team.name Where team.location = "New York" Select player.name txtNY.Text = (query.Count).ToString("N0") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 366 of 443) 33. Private Sub frmBaseball_Load(...) Handles MyBase.Load Me.TeamsTableAdapter.Fill(Me.BaseballDataSet.Teams) End Sub Private Sub radAmerican_CheckedChanged(...) Handles _ radAmerican.CheckedChanged DisplayPlayers("American") End Sub Private Sub radNational_CheckedChanged(...) Handles _ radNational.CheckedChanged DisplayPlayers("National") End Sub Sub DisplayPlayers(group As String) Dim query = From team In BaseballDataSet.Teams Let battingAve = team.hits / team.atBats Let formattedBattingAve = battingAve.ToString("N3") Where team.league = group Order By battingAve Descending Select team.name, formattedBattingAve dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("name").HeaderText = "Team" dgvOutput.Columns("formattedBattingAve").HeaderText = "Batting Average" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 367 of 443) 34. Private Sub frmBaseball_Load(...) Handles MyBase.Load Me.TeamsTableAdapter.Fill(Me.BaseballDataSet.Teams) Me.PlayersTableAdapter.Fill(Me.BaseballDataSet.Players) End Sub Private Sub radAmerican_CheckedChanged(...) Handles _ radAmerican.CheckedChanged DisplayPlayers("American") End Sub Private Sub radNational_CheckedChanged(...) Handles _ radNational.CheckedChanged DisplayPlayers("National") End Sub Sub DisplayPlayers(group As String) Dim query = From player In BaseballDataSet.Players Join team In BaseballDataSet.Teams On player.team Equals team.name Where team.league = group And player.hits > 150 Let battingAve = player.hits / player.atBats Let formattedBattingAve = battingAve.ToString("N3") Order By battingAve Descending Select player.name, formattedBattingAve, team.stadium dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("name").HeaderText = "Player" dgvOutput.Columns("formattedBattingAve").HeaderText = "Batting Average" dgvOutput.Columns("stadium").HeaderText = "Stadium" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 368 of 443) 35. Private Sub frmBaseball_Load(...) Handles MyBase.Load Me.TeamsTableAdapter.Fill(Me.BaseballDataSet.Teams) Me.PlayersTableAdapter.Fill(Me.BaseballDataSet.Players) Dim query = From team In BaseballDataSet.Teams Order By team.name Select team.name lstTeams.DataSource = query.ToList End Sub Private Sub lstTeams_SelectedIndexChanged(...) Handles _ lstTeams.SelectedIndexChanged Dim query = From player In BaseballDataSet.Players Join team In BaseballDataSet.Teams On player.team Equals team.name Let playerBattingAve = player.hits / player.atBats Let teamBattingAve = team.hits / team.atBats Where team.name = lstTeams.Text And playerBattingAve > teamBattingAve Order By playerBattingAve Descending Select player.name lstPlayers.DataSource = query.ToList lstPlayers.SelectedItem = Nothing End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 369 of 443) 36. Private Sub frmBaseball_Load(...) Handles MyBase.Load Me.TeamsTableAdapter.Fill(Me.BaseballDataSet.Teams) Me.PlayersTableAdapter.Fill(Me.BaseballDataSet.Players) End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim ave = CDbl(txtAve.Text) Dim group As String If ave >= 0 And ave <= 1 Then If radAmerican.Checked Then group = "American" Else group = "National" End If Dim query = From player In BaseballDataSet.Players Join team In BaseballDataSet.Teams On player.team Equals team.name Let playerBattingAve = player.hits / player.atBats Where team.league = group And playerBattingAve > ave Order By player.hits Descending Select player.name lstPlayers.DataSource = query.ToList lstPlayers.SelectedItem = Nothing Else MessageBox.Show("The batting average must be between 0 and 1.") txtAve.Clear() txtAve.Focus() End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 370 of 443) 37. Private Sub frmBaseball_Load(...) Handles MyBase.Load Me.TeamsTableAdapter.Fill(Me.BaseballDataSet.Teams) Me.PlayersTableAdapter.Fill(Me.BaseballDataSet.Players) End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query1 = From player In BaseballDataSet.Players Join team In BaseballDataSet.Teams On player.team Equals team.name Where team.league = "National" And player.atBats > 100 Let playerBattingAve = player.hits / player.atBats Select playerBattingAve Dim highestAve As Double = query1.Max Dim query2 = From player In BaseballDataSet.Players Join team In BaseballDataSet.Teams On player.team Equals team.name Let playerBattingAve = player.hits / player.atBats Where team.league = "National" And playerBattingAve = highestAve Select player.name lstPlayers.DataSource = query2.ToList lstPlayers.SelectedItem = Nothing End Sub 38. Private Sub frmBaseball_Load(...) Handles MyBase.Load Me.TeamsTableAdapter.Fill(Me.BaseballDataSet.Teams) Me.PlayersTableAdapter.Fill(Me.BaseballDataSet.Players) End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query1 = From player In BaseballDataSet.Players Join team In BaseballDataSet.Teams On player.team Equals team.name Where team.league = "American" Select player.hits Dim mostHits As Double = query1.Max Dim query2 = From player In BaseballDataSet.Players Join team In BaseballDataSet.Teams On player.team Equals team.name Where team.league = "American" And player.hits = mostHits Select player.name lstPlayers.DataSource = query2.ToList lstPlayers.SelectedItem = Nothing End Sub 39. film 40. film © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 371 of 443) 41. Private Sub frmMovies_Load(...) Handles MyBase.Load Me.LinesTableAdapter.Fill(Me.MoviesDataSet.Lines) Me.ActorsTableAdapter.Fill(Me.MoviesDataSet.Actors) Dim query = From line In MoviesDataSet.Lines Select line.film Distinct lstFilms.DataSource = query.ToList End Sub Private Sub lstFilms_SelectedIndexChanged(...) Handles _ lstFilms.SelectedIndexChanged Dim query = From line In MoviesDataSet.Lines Join flick In MoviesDataSet.Actors On line.film Equals flick.film Where line.film = lstFilms.Text Select flick.maleLead txtLead.Text = query.First End Sub 42. Private Sub frmMovies_Load(...) Handles MyBase.Load Me.LinesTableAdapter.Fill(Me.MoviesDataSet.Lines) Me.ActorsTableAdapter.Fill(Me.MoviesDataSet.Actors) End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query = From line In MoviesDataSet.Lines Join flick In MoviesDataSet.Actors On line.film Equals flick.film Select line.famousLine, flick.maleLead, flick.film dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing dgvOutput.Columns("famousLine").HeaderText = "Famous Line" dgvOutput.Columns("maleLead").HeaderText = "Actor" dgvOutput.Columns("film").HeaderText = "Film" End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 372 of 443) 43. Private Sub frmFilms_Load(...) Handles MyBase.Load Me.LinesTableAdapter.Fill(Me.MoviesDataSet.Lines) Me.ActorsTableAdapter.Fill(Me.MoviesDataSet.Actors) Dim query = From flick In MoviesDataSet.Actors Select flick.maleLead Distinct lstActors.DataSource = query.ToList End Sub Private Sub lstFilms_SelectedIndexChanged(...) Handles _ lstActors.SelectedIndexChanged Dim query = From line In MoviesDataSet.Lines Join flick In MoviesDataSet.Actors On line.film Equals flick.film Where flick.maleLead = lstActors.Text Select line.famousLine lstLines.DataSource = query.ToList lstLines.SelectedItem = Nothing End Sub x © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 373 of 443) 44. Private Sub frmMovies_Load(...) Handles MyBase.Load Me.ActorsTableAdapter.Fill(Me.MoviesDataSet.Actors) Me.LinesTableAdapter.Fill(Me.MoviesDataSet.Lines) Dim query = From flick In MoviesDataSet.Actors Order By flick.film Select flick.film Distinct lstMovies.DataSource = query.ToList End Sub Private Sub lstMovies_SelectedIndexChanged(...) Handles _ lstMovies.SelectedIndexChanged Dim query = From line In MoviesDataSet.Lines Join flick In MoviesDataSet.Actors On line.film Equals flick.film Where flick.film = lstMovies.Text Select line.famousLine lstLines.DataSource = query.ToList lstLines.SelectedItem = Nothing End Sub EXERCISES 10.2 6. Add a record to the Cities table whose country is not in the Countries table. 7. Add a record to the Cities table whose name field is empty or contains the same name as an already existing record. 8. Add a record to the Cities table with any or all of the country, pop2014 or pop2030 fields empty. 9. BindingSource1.Find("name", strVar) = -1 10. Private Sub btnUpdate_Click(...) Handles btnUpdate.Click Try BindingSource1.EndEdit() CitiesTableAdapter.Update(MEGACITIESDataSet.Cities) Catch exp As OleDb.OleDbException MessageBox.Show("Rule of Referential Integrity violated.") End Try End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 374 of 443) 11. Create a control named BindingSource2 that has the Countries table as its DataMember. Private Sub CountryTextBox_Leave(...) Handles _ CountryTextBox.Leave, BindingNavigator1.Click BindingSource2.Position = BindingSource2.Find("name", CountryTextBox.Text) If (CountryTextBox.Text <> "") And (BindingSource2.Position = 0) And (CountryTextBox.Text <> "Argentina") Then MessageBox.Show("Not a valid country.", "ERROR") CountryTextBox.Focus() End If End Sub 12. Private Sub NameTextBox_Leave(...) Handles _ NameTextBox.Leave, BindingNavigator1.Click If NameTextBox.Text = "" Then MessageBox.Show("You must include the name of a city.") NameTextBox.Focus() Else Dim index As Integer = BindingSource1.Find("name", NameTextBox.Text) If index <> 0 Then MessageBox.Show("There is already a record for " & NameTextBox.Text & ".") NameTextBox.Focus() End If End If End Sub 13. Private Sub frmMovies_Load(...) Handles MyBase.Load Me.LinesTableAdapter.Fill(Me.MoviesDataSet.Lines) End Sub Private Sub btnUpdate_Click(...) Handles btnUpdate.Click BindingSource1.EndEdit() LinesTableAdapter.Update(MoviesDataSet.Lines) End Sub 14. Private Sub frmMovies_Load(...) Handles MyBase.Load Me.ActorsTableAdapter.Fill(Me.MOVIESDataSet.Actors) End Sub Private Sub btnUpdate_Click(...) Handles btnUpdate.Click BindingSource1.EndEdit() ActorsTableAdapter.Update(MOVIESDataSet.Actors) End Sub 17. Apollo 13 does not appear in the key field of the Actors table. Thus the Rule of Referential Integrity would be violated. 18. Casablanca appears in the film field of the Lines table. Thus, the Rule of Referential Integrity would be violated. The program will crash when the Update button is clicked. © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 375 of 443) 19. Replace the table with two tables. The first table should contain the fields name, address, and city. The second table should contain the fields city, state, and stateCapital. 20. Replace the table with two tables. The first table should contain the fields name, state, and party. The second table should contain the fields state, statePop, and numColleges. 21. Write a program similar to the one in Example 1, but using the database Justices accdb. Then use the program to update the database. © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 376 of 443) CHAPTER 10 PROGRAMMING PROJECTS 1. Private Sub frmMicroland_Load(...) Handles MyBase.Load Me.OrdersTableAdapter.Fill(Me.MICROLANDDataSet.Orders) Me.InventoryTableAdapter.Fill(Me.MICROLANDDataSet.Inventory) Me.CustomersTableAdapter.Fill(Me.MICROLANDDataSet.Customers) End Sub Private Sub btnStock_Click(...) Handles btnStock.Click lstOutput.Items.Clear() lstOutput.Items.Add("Here are the items that are out of inventory " & "or must be reordered. ") lstOutput.Items.Add("The numbers shown give the minimum reorder" & "quantity required.") lstOutput.Items.Add("") Dim query1 = From item In MICROLANDDataSet.Orders Order By item.itemID Select item.itemID, item.quantity Dim query2 = From item In MICROLANDDataSet.Inventory Select item.itemID, item.quantity, item.description Dim ID, desc As String Dim quant As Integer For Each item In query2 ID = item.itemID quant = item.quantity desc = item.description Dim query3 = From ite In query1 Where ite.itemID = ID Select CInt(ite.quantity) If query3.Sum >= quant Then lstOutput.Items.Add(ID & " " & query3.Sum - quant & " " & desc) End If Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 377 of 443) 2. Private Sub frmGradeBook_Load(...) Handles MyBase.Load Me.GradesTableAdapter.Fill(Me.GRADEBOOKDataSet.Grades) Me.StudentsTableAdapter.Fill(Me.GRADEBOOKDataSet.Students) End Sub Private Sub btnDisplay_Click(...) Handles btnDisplay.Click Dim query = From person1 In GRADEBOOKDataSet.Students Join person2 In GRADEBOOKDataSet.Grades On person1.socSecNumber Equals person2.socSecNumber Let semGrade = ((person2.firstExam + person2.secondExam + 2 * person2.finalExam) / 4).ToString("N4") Let fullName = person1.firstName & " " & person1.lastName Select fullName, semGrade dgvSemesterGrades.DataSource = query.ToList dgvSemesterGrades.CurrentCell = Nothing End Sub Private Sub btnUpdate_Click(...) Handles btnUpdate.Click BindingSource2.EndEdit() GradesTableAdapter.Update(GRADEBOOKDataSet.Grades) MessageBox.Show("Grades table has been updated.") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 378 of 443) CHAPTER 11 EXERCISES 11.1 1. Any negative grade will be recorded as 0 and any grade greater than 100 will be recorded as 100. 2. Every grade will be curved by 10 points. 3. Remove the keyword WriteOnly from the Midterm property block and add the following Get property procedure to it: Get Return m_midterm End Get 4. Add the following procedure to the Student class block: Function Average() As Double Return (m_midterm + m_final) / 2 End Function 5. The properties Midterm and Final are write-only. 6. Sub New() Midterm = 10 Final = 10 End Sub 7. The property SocSecNum is initialized to the value 999-99-9999. 8. The line scholar = New Student should be inserted after the second line of the event procedure. 9. The keyword New is missing from the third line of the event procedure. 10. The member variable m_name was assigned a value from outside the class code. Even if the variable m_name were declared as Public, it would not be visible to the form’s code. 11. The statement nom = m_name is not valid. m_name would need to be Public and referred to by scholar.m_name. 12. The statement scholar.CalcSemGrade = "A" is not valid. The method CalcSemGrade, which was defined by a Function procedure, returns a value, but cannot be used to set a value. © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 379 of 443) 13. The statements pupil.Midterm = scholar.Midterm and the statement lstGrades.Items.Add(pupil.Midterm) are not valid. The Midterm property is writeonly; it can be set, but cannot return a value. 14. The first two lines must be combined into one line: Dim scholar As New Student() 15. Country: Canada Capital: Ottawa Pop: 31 million 16. Replace the second line of the btnMove_Click event procedure with round.Xcoord += 20 round.Ycoord += 20 17. Change 20 to –20 in the btnMove_Click event procedure, and create a frmCircle_Load event procedure with the following lines, round.Xcoord = picCircle.Width - 40 round.Ycoord = picCircle.Height - 40 18. Place the statement Dim randomNum As New Random() in the Declarations section of frmCircle's Code window, and replace the literal 20 with randomNum.Next(0, 41) in the btnMove_Click event procedure. © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 380 of 443) 19. Class Square Private m_length, m_perimeter, m_area As Double Public Property Length() As Double Get Return m_length End Get Set(value As Double) m_length = value m_perimeter = value * 4 m_area = value * value End Set End Property Public Property Perimeter() As Double Get Return m_perimeter End Get Set(value As Double) m_perimeter = value m_length = value / 4 m_area = value * value / 16 End Set End Property Public Property Area() As Double Get Return m_area End Get Set(value As Double) m_area = value m_length = Math.Sqrt(value) m_perimeter = Math.Sqrt(value) * 4 End Set End Property End Class 'Square © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 381 of 443) 20. Class Square Private m_length, m_perimeter, m_area As Double Public Property Length() As Double Get Return m_length End Get Set(value As Double) If value < 1 Then value = 1 ElseIf value > 10 Then value = 10 End If m_length = value m_perimeter = value * 4 m_area = value * value End Set End Property Public Property Perimeter() As Double Get Return m_perimeter End Get Set(value As Double) If value < 4 Then value = 4 ElseIf value > 40 Then value = 40 End If m_perimeter = value m_length = value / 4 m_area = value * value / 16 End Set End Property Public Property Area() As Double Get Return m_area End Get Set(value As Double) If value < 1 Then value = 1 ElseIf value > 100 Then value = 100 End If m_area = value m_length = Math.sqrt(value) m_perimeter = Math.sqrt(value) * 4 End Set End Property End Class © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 382 of 443) 21. Class PairOfDice Private m_die1, m_die2 As Integer Dim randomNum As New Random() Public ReadOnly Property Die1() As Integer Get Return m_die1 End Get End Property Public ReadOnly Property Die2() As Integer Get Return m_die2 End Get End Property Public ReadOnly Property SumOfFaces() As Integer Get Return m_die1 + m_die2 End Get End Property Sub Roll() m_die1 = randomNum.Next(1, 7) m_die2 = randomNum.Next(1, 7) End Sub End Class 'PairOfDice © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 383 of 443) 22. Public Class frmDice Private Sub btnRoll_Click(...) Handles btnRoll.Click 'Roll a pair of dice 1000 times. Dim dice As New PairOfDice() Dim count As Integer = 0 'Loop 1000 times. For i As Integer = 1 To 1000 dice.Roll() 'If the sum is 7, then count it. If dice.SumOfFaces = 7 Then count += 1 End If Next 'Display result. txtOutput.Text = "7 appeared " & count & " times." End Sub End Class 'frmDice Class PairOfDice Private m_die1, m_die2, m_sum As Integer Dim randomNum As New Random() 'Random number generator Public ReadOnly Property Die1() As Integer Get Return m_die1 End Get End Property Public ReadOnly Property Die2() As Integer Get Return m_die2 End Get End Property Public ReadOnly Property SumOfFaces() As Integer Get Return m_die1 + m_die2 End Get End Property Sub Roll() 'A die can have numbers between 1 and 6 inclusive m_die1 = randomNum.Next(1, 7) m_die2 = randomNum.Next(1, 7) End Sub End Class 'PairOfDice © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 384 of 443) 23. Class College Private m_name As String Private m_students, m_faculty As Double Public WriteOnly Property Name() As String Set(Value As String) m_name = Value End Set End Property Public WriteOnly Property NumStudents() As Double Set(Value As Double) m_students = Value End Set End Property Public WriteOnly Property NumFaculty() As Double Set(Value As Double) m_faculty = Value End Set End Property Function SFRatio() As Double Return m_students / m_faculty End Function End Class 'College 24. Public Class frmWages Dim salary As New Wages() Private Sub btnCalculatePay_Click(...) Handles btnCalculatePay.Click 'Calculate weekly wage from input values in text boxes. salary.Hours = CDbl(txtHours.Text) salary.Wage = CDec(txtWage.Text) txtPay.Text = (salary.PayForWeek).ToString("C") End Sub End Class 'frmWages Class Wages Private m_hours As Double Private m_wage As Decimal 'Number of hours worked during week 'Hourly wage Public WriteOnly Property Hours() As Double Set(value As Double) m_hours = value End Set End Property Public WriteOnly Property Wage() As Decimal Set(value As Decimal) m_wage = value End Set End Property © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 385 of 443) Function PayForWeek() As Decimal 'Calculate pay for the week. Return CDec(m_hours * m_wage) End Function End Class 'Wages 25. Public Class frmCashRegister Dim register As New CashRegister() Private Sub btnAdd_Click(...) Handles btnAdd.Click 'Add an amount to the balance. register.Add(CDec(txtAmount.Text)) txtBalance.Text = (register.Balance).ToString("C") txtAmount.Clear() txtAmount.Focus() End Sub Private Sub btnSubtract_Click(...) Handles btnSubtract.Click 'Subtract an amount from the balance. register.Subtract(CDec(txtAmount.Text)) txtBalance.Text = (register.Balance).ToString("C") txtAmount.Clear() txtAmount.Focus() End Sub End Class 'frmCashRegister Class CashRegister Private m_balance As Decimal Public ReadOnly Property Balance() As Decimal Get Return m_balance End Get End Property Sub Add(amount As Decimal) If (m_balance + amount) >= 0 Then 'Ensure balance stays nonnegative m_balance += amount End If End Sub Sub Subtract(amount As Decimal) If (m_balance - amount) >= 0 Then 'Ensure balance stays nonnegative m_balance = m_balance - amount End If End Sub End Class 'CashRegister © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 386 of 443) 26. Public Class frmAverage Dim stats As New Statistics() Private Sub btnRecord_Click(...) Handles btnRecord.Click 'Add a number to the statistics. stats.AddNumber(CInt(txtNumber.Text)) 'Clear and set the focus to the number text box. txtNumber.Clear() txtNumber.Focus() End Sub Private Sub btnAverage_Click(...) Handles btnAverage.Click 'Calculate and display the average txtAverage.Text = (stats.Average).ToString("N") End Sub End Class 'frmAverage Class Statistics Private m_numbers(49) As Integer Private m_count As Integer 'Count of numbers entered into array Sub AddNumber(number As Integer) 'Adds a number to the statistics m_count += 1 m_numbers(m_count) = number End Sub Public ReadOnly Property Count() As Integer 'Counter of numbers stored Get Return m_count End Get End Property Function Average() As Double 'Computes the average Dim sum As Integer = 0 For i As Integer = 1 To m_count sum += m_numbers(i) Next Return sum / m_count End Function End Class 'Statistics © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 387 of 443) 27. Public Class frmFICA Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim tax As New FICA() tax.PreviousEarnings = CDec(txtToDate.Text) tax.CurrentEarnings = CDec(txtCurrent.Text) txtTax.Text = (tax.CalculateFICA).ToString("C") End Sub End Class 'frmFICA Class FICA 'Member variables store property values. Private m_previousEarnings As Decimal 'Previous year-to-date earnings Private m_currentEarnings As Decimal Public WriteOnly Property PreviousEarnings() As Decimal Set(Value As Decimal) m_previousEarnings = Value End Set End Property Public WriteOnly Property CurrentEarnings() As Decimal Set(Value As Decimal) m_currentEarnings = Value End Set End Property Function CalculateFICA() As Decimal 'Calculate social security benefits tax and medicare tax 'for a single employee Const WAGE_BASE As Decimal = 118500D 'There is no social security ' benefits tax on income above this level. Const SOCIAL_SECURITY_RATE As Decimal = 0.062D Const MEDICARE_RATE As Decimal = 0.0145D 'Dim ytdEarnings, curEarnings, totalEarnings As Decimal Dim totalEarnings, socialSecurityBenTax, medicareTax As Decimal totalEarnings = m_previousEarnings + m_currentEarnings 'Calculate the Social Security Benefits tax. If totalEarnings <= WAGE_BASE Then socialSecurityBenTax = SOCIAL_SECURITY_RATE * m_currentEarnings ElseIf m_previousEarnings < WAGE_BASE Then socialSecurityBenTax = SOCIAL_SECURITY_RATE * (WAGE_BASE - m_previousEarnings) End If 'Calculate the FICA tax. medicareTax = MEDICARE_RATE * m_currentEarnings If totalEarnings >= 200000D Then medicareTax += 0.009D * (totalEarnings - 200000D) End If Return socialSecurityBenTax + medicareTax 'FICA tax End Function End Class 'FICA © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 388 of 443) 28. Public Class frmAdd Dim x As New Fraction() Dim y As New Fraction() Dim z As New Fraction() 'left fraction 'Middle fraction 'Right fraction Private Sub btnResult_Click(...) Handles btnResult.Click 'Add the x and y fractions to get the z fraction. 'Store the input into the x and y fractions. x.Num = CInt(txtNumX.Text) x.Den = CInt(txtDenX.Text) y.Num = CInt(txtNumY.Text) y.Den = CInt(txtDenY.Text) 'Add the two fractions. z.Num = (x.Num * y.Den) + (y.Num * x.Den) z.Den = x.Den * y.Den 'Reduce and display the result. z.Reduce() txtNumZ.Text = CStr(z.Num) txtDenZ.Text = CStr(z.Den) End Sub End Class 'frmAdd Class Fraction Private m_num As Double Private m_den As Double = 1 'Numerator 'Denominator set to default value Public Property Num() As Double Get Return m_num End Get Set(Value As Double) m_num = Value End Set End Property Public Property Den() As Double Get Return m_den End Get Set(Value As Double) m_den = Value End Set End Property © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 389 of 443) Sub Reduce() Dim t As Double Dim m As Double = m_num Dim n As Double = m_den 'Algorithm to calculate greatest common divisor of m and n. 'After the loop terminates, the value of m will be the GCD. Do While (n <> 0) t = n n = m Mod n m = t Loop 'Divide both numerator and denominator by greatest common divisor. If m <> 0 Then m_num = m_num / m m_den = m_den / m End If End Sub End Class 'Fraction © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 390 of 443) 29. Public Class frmMortgage Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim loan As New Mortgage loan.Principal = CDec(txtPrincipal.Text) loan.InterestRate = CDec(txtInterestRate.Text) loan.Years = CInt(txtYears.Text) txtMonthlyPayment.Text = (loan.calculateMonthlyPayment).ToString("C2") End Sub End Class 'frmMortgage Class Mortgage Private m_principal As Decimal Private m_interestRate As Decimal Private m_years As Integer Public WriteOnly Property Principal() As Decimal Set(value As Decimal) m_principal = value End Set End Property Public WriteOnly Property InterestRate() As Decimal Set(value As Decimal) m_interestRate = value End Set End Property Public WriteOnly Property Years() As Integer Set(value As Integer) m_years = value End Set End Property Function calculateMonthlyPayment() As Decimal Dim i As Decimal i = m_interestRate / 1200 Return ((i / (1 - ((1 + i) ^ (-12 * m_years)))) * m_principal) End Function End Class 'Mortgage © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 391 of 443) EXERCISES 11.2 1. Sub btnDisplay_Click(...) Handles btnDisplay.Click ReDim Preserve students(lastStudentAdded) Dim query = From pupil In students Let name = pupil.Name Let ssn = pupil.SocSecNum Let semGrade = pupil.CalcSemGrade Where semGrade = "A" Select pupil.Name, pupil.SocSecNum, pupil.CalcSemGrade dgvGrades.DataSource = query.ToList dgvGrades.CurrentCell = Nothing dgvGrades.Columns("Name").HeaderText = "Student Name" dgvGrades.Columns("SocSecNum").HeaderText = "SSN" dgvGrades.Columns("CalcSemGrade").HeaderText = "Grade" ReDim Preserve students(50) txtName.Focus() End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 392 of 443) 2. Class State 'Member variables hold property values. Private m_name, m_abbr, m_entered As String Private m_area, m_pop As Double Public ReadOnly Property Name() As String Get Return m_name End Get End Property Public ReadOnly Property Abbreviation() As String Get Return m_abbr End Get End Property Public ReadOnly Property Entered() As String Get Return m_entered End Get End Property Public ReadOnly Property Area() As Double Get Return m_area End Get End Property Public ReadOnly Property Population() As Double Get Return m_pop End Get End Property Public Sub New(n As String, a As String, _ e As String, ar As Double, p As Double) 'Store parameters into member variables. m_name = n m_abbr = a m_entered = e m_area = ar m_pop = p End Sub Function Density() As Double Return m_pop / m_area End Function End Class © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 393 of 443) 3. Public Class frmStates Dim states(49) As State 'Holds the state's data Private Sub frmStates_Load(...) Handles MyBase.Load 'Load the data file into the array Dim usstates() As String = IO.File.ReadAllLines("UnitedStates.txt") Dim data() As String For i As Integer = 0 To 49 data = usstates(i).Split(","c) states(i) = New State(data(0), data(1), CDate(data(2)), CDbl(data(3)), CDbl(data(4))) Next End Sub Private Sub btnLookup_Click(...) Handles btnLookup.Click 'Look up name in the array and return the state information. Dim nm As String Dim i As Integer = 0 'Get name of state from message box nm = InputBox("Name of state:", "Enter state's name").ToUpper 'Clear the output text boxes txtName.Clear() txtAbbr.Clear() txtDensity.Clear() txtEntered.Clear() Dim query = From state In states Where state.Name.ToUpper = nm.ToUpper Select state.Name, state.Abbreviation, state.Density, state.Entered txtName.Text = query.First.Name txtAbbr.Text = query.First.Abbreviation txtDensity.Text = (query.First.Density).ToString("N1") txtEntered.Text = (query.First.Entered).ToString("D") End Sub End Class 'frmStates Class State Private m_name, m_abbr As String Private m_entered As Date Private m_area As Double Public ReadOnly Property Name() As String Get Return m_name End Get End Property Public ReadOnly Property Abbreviation() As String Get Return m_abbr End Get End Property © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 394 of 443) Public ReadOnly Property Entered() As Date Get Return m_entered End Get End Property Public ReadOnly Property Area() As Double Get Return m_area End Get End Property Public Property Population() As Double Sub New(n As String, a As String, e As Date, ar As Double, p As Double) 'Store parameters into member variables m_name = n m_abbr = a m_entered = e m_area = ar _Population = p End Sub Function Density() As Double 'Density is calculated as population divided by area. Return _Population / m_area End Function End Class 'State 4. Public Class frmStates Dim states(49) As State 'Stores state data Private Sub frmStates_Load(...) Handles MyBase.Load 'Load the data file into the array Dim usstates() As String = IO.File.ReadAllLines("United_States.txt") Dim data() As String For i As Integer = 0 To 49 data = usstates(i).Split(","c) states(i) = New State(data(0), data(1), CDate(data(2)), CDbl(data(3)), CDbl(data(4))) Next End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 395 of 443) Private Sub btnDisplay_Click(...) Handles btnDisplay.Click 'Display the states and their densities ordered by density. Dim query = From state In states Order By state.Density Descending Let Density = (state.Density).ToString("N1") Select state.Name, Density dgvOutput.DataSource = query.ToList dgvOutput.CurrentCell = Nothing End Sub End Class 'frmStates Class State Private m_name, m_abbr As String Private m_entered As Date Private m_area As Double Public ReadOnly Property Name() As String Get Return m_name End Get End Property Public ReadOnly Property Abbreviation() As String Get Return m_abbr End Get End Property Public ReadOnly Property Entered() As Date Get Return m_entered End Get End Property Public ReadOnly Property Area() As Double Get Return m_area End Get End Property Public Property Population() As Double Sub New(n As String, a As String, e As Date, ar As Double, p As Double) 'Store parameters into member variables m_name = n m_abbr = a m_entered = e m_area = ar _Population = p End Sub Function Density() As Double 'Density is calculated as population divided by area. Return _Population / m_area End Function End Class 'State © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 396 of 443) 5. Public Class frmStates Dim WithEvents usa As New UnitedStates() Private Sub btnDisplay_Click(...) Handles btnDisplay.Click 'Load the data file into the array. Dim sr As IO.StreamReader = IO.File.OpenText("UnitedStates.txt") For i As Integer = 0 To 49 'Add each state to the USA object Dim data() As String = Split(sr.ReadLine, ","c) usa.Add(New State(data(0), data(1), CDate(data(2)), CDbl(data(3)), CDbl(data(4)))) Next sr.Close() End Sub Sub Populous(name As String, population As Double) Handles usa.Populous 'Display the populous states and their populations in the list box. lstOutput.Items.Add(name & ": " & population.ToString("N0")) End Sub End Class 'frmStates Class UnitedStates Dim states(49) As State 'Holds the state data Dim count As Integer 'Last stored state 'The event contains the state's name and population Public Event Populous(name As String, population As Double) Sub Add(state As State) 'Add the state to the array states(count) = state count += 1 'If the state's population is large then raise an event If state.Population > 10000000 Then RaiseEvent Populous(state.Name, state.Population) End If End Sub End Class 'UnitedStates Class State Private m_name, m_abbr As String Private m_entered As Date Private m_area As Double Public ReadOnly Property Name() As String Get Return m_name End Get End Property Public ReadOnly Property Abbreviation() As String Get Return m_abbr End Get End Property © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 397 of 443) Public ReadOnly Property Entered() As Date Get Return m_entered End Get End Property Public ReadOnly Property Area() As Double Get Return m_area End Get End Property Public Property Population() As Double Sub New(n As String, a As String, e As Date, ar As Double, p As Double) 'Store parameters into member variables m_name = n m_abbr = a m_entered = e m_area = ar _Population = p End Sub Function Density() As Double 'Density is calculated as population divided by area. Return _Population / m_area End Function End Class 'State © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 398 of 443) 6. Public Class frmDice Dim WithEvents dice As New PairOfDice() Private Sub btnRoll_Click(...) Handles btnRoll.Click dice.Roll() 'Roll the dice. 'Display the results. txtDie1.Text = CStr(dice.Die1) txtDie2.Text = CStr(dice.Die2) End Sub Sub dice_SnakeEyes() Handles dice.SnakeEyes txtDie1.Text = CStr(dice.Die1) txtDie2.Text = CStr(dice.Die2) MessageBox.Show("Snake Eyes!") End Sub End Class 'frmDice Class PairOfDice Private m_die1, m_die2 As Integer Dim randomNum As New Random() 'Random number generator Public Event SnakeEyes() Public ReadOnly Property Die1() As Integer Get Return m_die1 End Get End Property Public ReadOnly Property Die2() As Integer Get Return m_die2 End Get End Property Public ReadOnly Property SumOfFaces() As Integer Get Return m_die1 + m_die2 End Get End Property Sub Roll() m_die1 = randomNum.Next(1, 7) m_die2 = randomNum.Next(1, 7) 'If snake eyes, then raise the event. If (m_die1 = 1) And (m_die2 = 1) Then RaiseEvent SnakeEyes() End If End Sub End Class 'PairOfDice © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 399 of 443) 7. Public Class frmCashRegister Dim WithEvents register As New CashRegister() Private Sub btnAdd_Click(...) Handles btnAdd.Click 'Add an amount to the balance. register.Add(CDec(txtAmount.Text)) 'Display the new result. txtBalance.Text = (register.Balance).ToString("C") txtAmount.Clear() txtAmount.Focus() End Sub Private Sub btnSubtract_Click(...) Handles btnSubtract.Click 'Subtract an amount from the balance. register.Subtract(CDec(txtAmount.Text)) 'Display the new result. txtBalance.Text = (register.Balance).ToString("C") txtAmount.Clear() txtAmount.Focus() End Sub Private Sub AttemptToOverdraw(amt As Decimal) Handles _ register.AttemptToOverdraw MessageBox.Show("You would have been overdrawn by " & amt.ToString("C") & ".", "Withdrawal Denied") End Sub End Class 'frmCashRegister Class CashRegister Private m_balance As Decimal Public Event AttemptToOverdraw(amt As Decimal) Public ReadOnly Property Balance() As Decimal Get Return m_balance End Get End Property Sub Add(amount As Decimal) If (m_balance + amount) >= 0 Then 'Make sure balance does not go negative. m_balance += amount Else RaiseEvent AttemptToOverdraw(amount - m_balance) End If End Sub Sub Subtract(amount As Decimal) If (m_balance - amount) >= 0 Then 'Make sure balance does not go negative. m_balance = m_balance - amount Else RaiseEvent AttemptToOverdraw(amount - m_balance) End If End Sub End Class 'CashRegister © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 400 of 443) 8. Public Class frmSquare Dim WithEvents poly As Square Sub poly_IllegalNumber(name As String, num As Double) Handles _ poly.IllegalNumber MessageBox.Show("You cannot set the " & name & " to " & num) End Sub Private Sub btnGo_Click(...) Handles btnGo.Click poly = New Square() poly.Area = -25 txtLength.Text = CStr(poly.Length) txtPerimeter.Text = CStr(poly.Perimeter) End Sub End Class 'frmSquare Class Square Private m_length, m_perimeter, m_area As Double Event IllegalNumber(name As String, num As Double) Public Property Length() As Double Get Return m_length End Get Set(value As Double) If value < 0 Then RaiseEvent IllegalNumber("Length", value) Else m_length = value m_perimeter = value * 4 m_area = value * value End If End Set End Property Public Property Perimeter() As Double Get Return m_perimeter End Get Set(value As Double) If value < 0 Then RaiseEvent IllegalNumber("Perimeter", value) Else m_perimeter = value m_length = value / 4 m_area = value * value / 16 End If End Set End Property © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 401 of 443) Public Property Area() As Double Get Return m_area End Get Set(value As Double) If value < 0 Then RaiseEvent IllegalNumber("Area", value) Else m_area = value m_length = Math.sqrt(value) m_perimeter = Math.sqrt(value) * 4 End If End Set End Property End Class 9. Public Class frmAdd Dim WithEvents x As New Fraction() Dim WithEvents y As New Fraction() Dim WithEvents z As New Fraction() 'Left fraction 'Middle fraction 'Right fraction Private Sub btnResult_Click(...) Handles btnResult.Click 'Add the x and y fractions to get the z fraction. 'Store the input into the x and y fractions. x.Num = CInt(txtNumX.Text) x.Den = CInt(txtDenX.Text) y.Num = CInt(txtNumY.Text) y.Den = CInt(txtDenY.Text) 'Add the two fractions. z.Num = (x.Num * y.Den) + (y.Num * x.Den) z.Den = x.Den * y.Den 'Reduce and display the result. z.Reduce() txtNumZ.Text = CStr(z.Num) txtDenZ.Text = CStr(z.Den) End Sub Sub fraction_ZeroDenominator() Handles x.ZeroDenominator, y.ZeroDenominator 'If x or y has a zero denominator, display an error message. Dim message As String = "You cannot set a denominator to zero. " & "All such denominators will be replaced by 1." MessageBox.Show(message) If txtDenX.Text = "0" Then txtDenX.Text = CStr(1) x.Den = 1 End If If txtDenY.Text = "0" Then txtDenY.Text = CStr(1) y.Den = 1 End If End Sub End Class 'frmAdd © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 402 of 443) Class Fraction Private m_den As Double = 1 'Denominator set to default value Public Event ZeroDenominator() Public Property Num() As Double Public Property Den() As Double Get Return m_den End Get Set(Value As Double) 'Raise the event if zero If Value = 0 Then RaiseEvent ZeroDenominator() Else m_den = Value End If End Set End Property Sub Reduce() Dim t As Double Dim m As Double = Num Dim n As Double = m_den 'Algorithm to calculate greatest common divisor of m and n. 'After the loop terminates, the value of m will be the GCD. Do While (n <> 0) t = n n = m Mod n m = t Loop 'Divide both numerator and denominator by greatest common divisor. If m <> 0 Then Num = Num / m m_den = m_den / m End If End Sub End Class 'Fraction © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 403 of 443) 10. Public Class frmCalculator Dim calc As New Calculator() Sub ReadFractions() 'Read the text boxes into the fractions calc.x.Num = CInt(mtbNumX.Text) calc.x.Den = CInt(mtbDenX.Text) calc.y.Num = CInt(mtbNumY.Text) calc.y.Den = CInt(mtbDenY.Text) End Sub Sub DisplayResult() 'Display the values from the z fraction txtNumZ.Text = CStr(calc.z.Num) txtDenZ.Text = CStr(calc.z.Den) End Sub Private Sub btnPlus_Click(...) Handles btnPlus.Click 'Read the fractions, add them and display the result ReadFractions() calc.Add() DisplayResult() End Sub Private Sub bntMinus_Click(...) Handles bntMinus.Click 'Read the fractions, subtract them and display the result ReadFractions() calc.Subtract() DisplayResult() End Sub Private Sub btnMultiply_Click(...) Handles btnMultiply.Click 'Read the fractions, multiply them and display the result ReadFractions() calc.Multiply() DisplayResult() End Sub Private Sub bntDivide_Click(...) Handles bntDivide.Click 'Read the fractions, divide them and display the result ReadFractions() calc.Divide() DisplayResult() End Sub End Class 'frmCalculator Public Class Calculator Private m_x As New Fraction() Private m_y As New Fraction() Private m_z As New Fraction() 'Left fraction 'Middle fraction 'Right fraction Public ReadOnly Property x() As Fraction Get Return m_x End Get End Property © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 404 of 443) Public ReadOnly Property y() As Fraction Get Return m_y End Get End Property Public ReadOnly Property z() As Fraction Get Return m_z End Get End Property Sub Add() 'Add the numerators, using the common denominator multiple z.Num = (x.Num * y.Den) + (y.Num * x.Den) z.Den = x.Den * y.Den 'Reduce the result. z.Reduce() End Sub Sub Subtract() 'Subtract the numerators, using the common denominator multiple z.Num = (x.Num * y.Den) - (y.Num * x.Den) z.Den = x.Den * y.Den 'Reduce the result z.Reduce() End Sub Sub Multiply() 'Multiply the numerators and denominators z.Num = x.Num * y.Num z.Den = x.Den * y.Den 'Reduce the result z.Reduce() End Sub Sub Divide() 'Multiply the first fraction by the inverse of the second z.Num = x.Num * y.Den z.Den = x.Den * y.Num 'Reduce the result z.Reduce() End Sub End Class 'Calculator Public Class Fraction Private m_num As Double Private m_den As Double = 1 'Numerator 'Denominator set to default value Public Property Num() As Double Get Return m_num End Get Set(Value As Double) m_num = Value End Set End Property © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 405 of 443) Public Property Den() As Double Get Return m_den End Get Set(Value As Double) m_den = Value End Set End Property Sub Reduce() Dim t As Double Dim m As Double = Num Dim n As Double = Den 'Algorithm to calculate greatest common divisor of m and n. 'After the loop terminates, the value of m will be the GCD. Do While (n <> 0) t = n n = m Mod n m = t Loop 'Divide both numerator and denominator by greatest common divisor. If (m <> 0) Then m_num = m_num / m m_den = m_den / m End If End Sub End Class 'Fraction © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 406 of 443) 11. Public Class frmDice Dim game As New HighRoller() Private Sub btnPlay_Click(...) Handles btnPlay.Click 'Play the game. game.Play() 'Display the throws. Randomize() txt1Die1.Text = CStr(game.First.Die1) txt1Die2.Text = CStr(game.First.Die2) txt2Die1.Text = CStr(game.Second.Die1) txt2Die2.Text = CStr(game.Second.Die2) 'Display the results Select Case game.First.SumOfFaces Case game.Second.SumOfFaces txtOutput.Text = "Tie." Case Is > game.Second.SumOfFaces txtOutput.Text = "Player 1 wins." Case Else txtOutput.Text = "Player 2 wins." End Select End Sub End Class 'frmDice Class HighRoller Private m_first As PairOfDice Private m_second As PairOfDice 'First player 'Second player Public Sub New() m_first = New PairOfDice() 'The time is used to determine how the sequence of random numbers 'will be generated. The For...Next loop below guarantees that the 'two random number generators will act differently. Without the 'For...Next loop, often the two rolls will be identical. For i As Integer = 1 To 10000000 Next Second = New PairOfDice() End Sub Public ReadOnly Property First() As PairOfDice Get Return m_first End Get End Property Public Property Second() As PairOfDice Get Return m_second End Get Set(value As PairOfDice) m_second = value End Set End Property © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 407 of 443) Sub Play() 'Roll both pairs of dice. m_first.Roll() m_second.Roll() End Sub End Class 'HighRoller Class PairOfDice Private m_die1, m_die2 As Integer Dim randomNum As New Random() 'Random number generator Public ReadOnly Property Die1() As Integer Get Return m_die1 End Get End Property Public ReadOnly Property Die2() As Integer Get Return m_die2 End Get End Property Public ReadOnly Property SumOfFaces() As Integer Get Return m_die1 + m_die2 End Get End Property Sub Roll() 'Get random numbers between 1 through 6 inclusive. m_die1 = randomNum.Next(1, 7) m_die2 = randomNum.Next(1, 7) End Sub End Class 'PairOfDice © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 408 of 443) 12. Public Class frmCashRegister Dim WithEvents regular As New Choices() 'Regular menu Dim WithEvents kids As New Choices() 'Kids menu Dim WithEvents order As New Choices() 'Current order Private Sub frmCashRegister_Load(...) Handles MyBase.Load 'Initialize the regular and kids menus. Dim m As Food 'Populate regular choices m = New Food("pizza slice", 1.75D) regular.Add(m) m = New Food("burger", 2.55D) regular.Add(m) m = New Food("salad", 3.29D) regular.Add(m) m = New Food("large soda", 1.25D) regular.Add(m) m = New Food("medium soda", 0.9D) regular.Add(m) 'Populate kids choices m = New Food("hot dog", 1.5D) kids.Add(m) m = New Food("small soda", 0.6D) kids.Add(m) m = New Food("cookie", 0.96D) kids.Add(m) 'Display menus in list box For i As Integer = 0 To (regular.Count – 1) lstRegular.Items.Add(regular.Entry(i).Name & " (" & (regular.Entry(i).Price).ToString("C") & ")") Next For i As Integer = 0 To (kids.Count – 1) lstKids.Items.Add(kids.Entry(i).Name & " (" & (kids.Entry(i).Price).ToString("C") & ")") Next End Sub Private Sub btnRegular_Click(...) Handles btnRegular.Click 'Add an item from the regular menu to the order Dim choice As Integer 'Get the current choice; index starts at zero. choice = lstRegular.SelectedIndex If choice >= 0 Then 'Add an item from a menu to the order. Dim ent As Food 'Get the food item selected ent = regular.Entry(choice) 'Add it to the order, and display it. order.Add(ent) lstOrder.Items.Add(ent.Name & " (" & (ent.Price).ToString("C") & ")") End If End Sub Private Sub btnKids_Click(...) Handles btnKids.Click 'Add an item from the kids menu to the order. Dim choice As Integer 'Get the current choice; index starts at zero. choice = lstKids.SelectedIndex If choice >= 0 Then 'Add an item from a menu to the order. Dim ent As Food 'Get the food item selected ent = kids.Entry(choice) 'Add it to the order, and display it. order.Add(ent) lstOrder.Items.Add(ent.Name & " (" & (ent.Price).ToString("C") & ")") End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 409 of 443) Private Sub btnClear_Click(...) Handles btnClear.Click order.Clear() End Sub Private Sub btnQuit_Click(...) Handles btnQuit.Click End 'Terminate the program. End Sub Private Sub order_ChoiceChanged(price As Decimal) Handles _ order.ChoiceChanged 'When the order has changed, update the price. If price = 0 Then 'If the price is 0, then the order was cleared. 'Clear the display and total. lstOrder.Items.Clear() txtTotal.Clear() Else 'Display the new total for the order. txtTotal.Text = (order.Total).ToString("C") End If End Sub End Class 'frmCashRegister Class Choices Dim m_entries(10) As Food 'Initial limit is 11 entries Private m_lastEntryAdded As Integer 'Keeps track of # of entries Private m_total As Decimal 'Total price of the order Public Event ChoiceChanged(price As Decimal) Public ReadOnly Property Entry(i As Integer) As Food Get 'Return the item at the desired subscript. Return m_entries(i) End Get End Property Public ReadOnly Property Count() As Integer Get Return m_lastEntryAdded End Get End Property Public ReadOnly Property Total() As Decimal Get Return m_total End Get End Property Sub Add(Item As Food) 'Add the food item. 'Make room for the new item. If (m_entries.Count – 1) < m_lastEntryAdded Then ReDim Preserve m_entries(m_lastEntryAdded + 5) End If 'Store the item. m_entries(m_lastEntryAdded) = Item 'Add the items price to the menu's total m_total += Item.Price 'Raise the event with the new item as parameter. RaiseEvent ChoiceChanged(Item.Price) m_lastEntryAdded += 1 End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 410 of 443) Sub Clear() 'Reset the counter and total. m_lastEntryAdded = 0 m_total = 0 'Raise the event with 0 as parameter. RaiseEvent ChoiceChanged(0) End Sub End Class 'Choices Class Food 'Member variables hold property values Private m_name As String Private m_price As Decimal Public Sub New(name As String, price As Decimal) 'Set the member variables to the parameter values. m_name = name m_price = price End Sub Public ReadOnly Property Name() As String Get Return m_name End Get End Property Public ReadOnly Property Price() As Decimal Get Return m_price End Get End Property End Class 'Food 13. Public Class frmPayroll Dim emp As New Employee() Private Sub btnDisplay_Click(...) Handles btnDisplay.Click 'Read input and display paycheck receipt Dim wages, takeHome As Decimal 'Store input into properties emp.Name = txtName.Text emp.Hours = CDec(txtHours.Text) emp.Salary = CDec(txtSalary.Text) emp.YearToDate = CDec(txtYtd.Text) emp.Withhold = CInt(txtWithhold.Text) emp.Married = radMarried.Checked 'Calculate take-home pay. wages = emp.Hours * emp.Salary © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 411 of 443) takeHome = wages - emp.FICA - emp.Withholding 'Display paycheck receipt. lstOutput.Items.Clear() lstOutput.Items.Add("Name: " & emp.Name) lstOutput.Items.Add("Weekly wages: " & wages.ToString("C")) lstOutput.Items.Add("Year-to-Date wages: " & (emp.YearToDate + wages).ToString("C")) lstOutput.Items.Add("FICA tax deduction: " & (emp.FICA).ToString("C")) lstOutput.Items.Add("Withholding tax deduction: " & (emp.Withholding).ToString("C")) lstOutput.Items.Add("Take-home pay: " & takeHome.ToString("C")) End Sub End Class 'frmPayroll Class Employee 'Member variables hold property values Private m_hours As Decimal Private m_salary As Decimal Dim tax As New Tax() 'Represents the tax for this employee Public Property Name() As String Public Property Hours() As Decimal Get Return m_hours End Get Set(Value As Decimal) m_hours = Value 'Update the tax property also tax.Wages = CDec(m_hours * m_salary) End Set End Property Public Property Salary() As Decimal Get Return m_salary End Get Set(Value As Decimal) m_salary = Value 'Update the tax property also tax.Wages = CDec(m_hours * m_salary) End Set End Property Public Property YearToDate() As Decimal Get 'Return the tax property Return tax.YearToDate End Get Set(Value As Decimal) 'Update the tax property tax.YearToDate = Value End Set End Property © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 412 of 443) Public Property Withhold() As Integer Get 'Return the tax property Return tax.Withhold End Get Set(Value As Integer) 'Update the tax property tax.Withhold = Value End Set End Property Public Property Married() As Boolean Get 'Return the tax property Return tax.Married End Get Set(Value As Boolean) 'Update the tax property tax.Married = Value End Set End Property Function FICA() As Decimal 'Return the tax property Return tax.FICA End Function Function Withholding() As Decimal 'Return the tax property Return tax.Withholding End Function End Class 'Employee Class Tax Public Property Wages() As Decimal Public Property YearToDate() As Decimal Public Property Withhold() As Integer Public Property Married() As Boolean Function FICA() As Decimal 'Calculate 2015 social security benefits tax and medicare tax 'for a single employee Const WAGE_BASE As Decimal = 118500D 'There is no social 'security benefits tax on income above this level. Const SOCIAL_SECURITY_RATE As Decimal = 0.062D Const MEDICARE_RATE As Decimal = 0.0145D Dim totalEarnings As Decimal Dim socialSecurityBenTax, medicareTax As Decimal 'ytdEarnings = CDec(txtToDate.Text) 'curEarnings = CDec(txtCurrent.Text) totalEarnings = YearToDate + Wages 'Calculate the Social Security Benefits tax. If totalEarnings <= WAGE_BASE Then socialSecurityBenTax = SOCIAL_SECURITY_RATE * Wages ElseIf YearToDate < WAGE_BASE Then socialSecurityBenTax = SOCIAL_SECURITY_RATE * (WAGE_BASE - YearToDate) End If 'Calculate the FICA tax. medicareTax = MEDICARE_RATE * Wages © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 413 of 443) If (Not Married) And YearToDate >= 200000D Then medicareTax += 0.009D * (totalEarnings - 200000D) End If If Married And YearToDate > 250000 Then medicareTax += 0.009D * (totalEarnings - 250000D) End If Return socialSecurityBenTax + medicareTax End Function Function Withholding() As Decimal Dim adjPay As Decimal 'Subtract exemptions from wages adjPay = CDec(Wages - (73.08 * Withhold)) 'Branch depending upon status If Married Then Select Case adjPay Case 0 To 165 Return 0 Case 165 To 520 Return 0.1D * (adjPay - 165) Case 520 To 1606 Return 35.5D + 0.15D * (adjPay - 520) Case 1606 To 3073 Return 198.4D + 0.25D * (adjPay - 1606) Case 3073 To 4597 Return 565.15D + 0.28D * (adjPay - 3073) Case 4597 To 8079 Return 991.87D + 0.33D * (adjPay - 4597) Case 8079 To 9105 Return 2140.32D + 0.35D * (adjPay - 8079) Case Is > 9105 Return 2500.03D + 0.396D * (adjPay - 9105) End Select Else 'Withholding table for single earners Select Case adjPay Case 0 To 44 Return 0 Case 44 To 222 Return (0.1D * (adjPay - 44)) Case 222 To 764 Return 17.8D + 0.15D * (adjPay - 222) Case 764 To 1789 Return 99.1D + 0.25D * (adjPay - 764) Case 1789 To 3685 Return 355.35D + 0.28D * (adjPay - 1789) Case 3685 To 7958 Return 886.23D + 0.33D * (adjPay - 3685) Case 7958 To 7990 Return 2296.32D + 0.35D * (adjPay - 3685) Case Is > 7958 Return 2307.52D + 0.396D * (adjPay - 7958) End Select End If End Function End Class 'Tax © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 414 of 443) © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 415 of 443) 14. Public Class frmPurchases Dim purchases(49) As Purchase Dim numberOfPurchase As Integer = -1 Dim totalCost As Decimal = 0 Private Sub btnRecord_Click(...) Handles btnRecord.Click numberOfPurchase += 1 purchases(numberOfPurchase) = New Purchase purchases(numberOfPurchase).Description = txtArticle.Text purchases(numberOfPurchase).Quantity = CInt(txtQuantity.Text) purchases(numberOfPurchase).PricePerItem = CDec(txtPrice.Text) totalCost += purchases(numberOfPurchase).Quantity * purchases(numberOfPurchase).PricePerItem txtArticle.Clear() txtQuantity.Clear() txtPrice.Clear() End Sub Private Sub btnCreateReceipt_Click(...) Handles btnCreateReceipt.Click lstReceipt.Items.Clear() Dim cost As Decimal For i = 0 To numberOfPurchase cost = purchases(i).Quantity * purchases(i).PricePerItem If purchases(i).Quantity = 1 Then lstReceipt.Items.Add(1 & " " & purchases(i).Description & " " & cost.ToString("C2")) Else lstReceipt.Items.Add(purchases(i).Quantity & " " & purchases(i).Description & "s " & cost.ToString("C2")) End If Next lstReceipt.Items.Add("Total Cost: " & totalCost.ToString("C2")) End Sub End Class 'frmPurchases Class Purchase Public Property Description() As String Public Property Quantity() As Integer Public Property PricePerItem() As Decimal Function Cost() As Decimal Return Quantity * PricePerItem End Function End Class 'Purchase © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 416 of 443) EXERCISES 11.3 1. 4 2. 8 3. 64 4. 8 5. Can move Has jointed limbs and no backbone 6. Can move Has a backbone 7. The keyword Overrides should be Inherits. 8. The class Greetings should inherit the class Hello, not the function Hi(). 9. The Hi function should be declared with the Overridable keyword in class Hello and with the keyword Overrides keyword in class Aussie. 10. The Hi function should be declared with the Overridable keyword in class Hello. 11. The Hi function should be declared with the Overrides keyword in class Cowboy. 12. The MustOverride keyword should be replaced with Overridable. 13. The Hello class should be declared with the MustInherit keyword, and the function Hi should be declared with the MustOverride keyword. 14. The Hello class should be declared with the MustInherit keyword. 15. The Hello class should be declared with the MustInherit keyword, not MustOverride. 16. The function Hi in the NorthEasterner class may not take a parameter. 17. Public Class frmCalculator 'Create the machines Dim adder As New AddingMachine() Dim calc As New Calculator() Dim sci As New ScientificCalculator() Private Sub radAddingMachine_CheckedChanged(...) Handles _ radAddingMachine.CheckedChanged 'Hide the multiply, divide and exponentiation 'functionality if checked If radAddingMachine.Checked Then btnMultiply.Visible = False btnDivide.Visible = False btnExponentiation.Visible = False End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 417 of 443) Private Sub radCalculator_CheckedChanged(...) Handles _ radCalculator.CheckedChanged 'Show the multiply and divide functionality, 'hide the exponentiation if checked If radCalculator.Checked Then btnMultiply.Visible = True btnDivide.Visible = True btnExponentiation.Visible = False End If End Sub Private Sub radScientific_CheckedChanged(...) Handles _ radScientific.CheckedChanged 'Show the multiply, divide and exponentiation 'functionality if checked If radScientific.Checked Then btnMultiply.Visible = True btnDivide.Visible = True btnExponentiation.Visible = True End If End Sub Private Sub btnAdd_Click(...) Handles btnAdd.Click If radAddingMachine.Checked Then 'If adding machine selected, use it to get the result adder.num1 = CDbl(txtNumber1.Text) adder.num2 = CDbl(txtNumber2.Text) txtResult.Text = CStr(adder.Add()) ElseIf radCalculator.Checked Then 'If calculator selected, use it to get the result calc.num1 = CDbl(txtNumber1.Text) calc.num2 = CDbl(txtNumber2.Text) txtResult.Text = CStr(calc.Add()) Else 'If scientific calculator selected, use it to get the result sci.num1 = CDbl(txtNumber1.Text) sci.num2 = CDbl(txtNumber2.Text) txtResult.Text = CStr(sci.Add()) End If End Sub Private Sub btnSubtract_Click(...) Handles btnSubtract.Click If radAddingMachine.Checked Then 'If adding machine selected, use it to get the result adder.num1 = CDbl(txtNumber1.Text) adder.num2 = CDbl(txtNumber2.Text) txtResult.Text = CStr(adder.Subtract()) ElseIf radCalculator.Checked Then 'If calculator selected, use it to get the result calc.num1 = CDbl(txtNumber1.Text) calc.num2 = CDbl(txtNumber2.Text) txtResult.Text = CStr(calc.Subtract()) Else 'If scientific calculator selected, use it to get the result sci.num1 = CDbl(txtNumber1.Text) sci.num2 = CDbl(txtNumber2.Text) txtResult.Text = CStr(sci.Subtract()) End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 418 of 443) Private Sub btnMultiply_Click(...) Handles btnMultiply.Click If radCalculator.Checked Then 'If calculator selected, use it to get the result. calc.num1 = CDbl(txtNumber1.Text) calc.num2 = CDbl(txtNumber2.Text) txtResult.Text = CStr(calc.Multiply()) Else 'If scientific calculator selected, use it to get the result. sci.num1 = CDbl(txtNumber1.Text) sci.num2 = CDbl(txtNumber2.Text) txtResult.Text = CStr(sci.Multiply()) End If End Sub Private Sub btnDivide_Click(...) Handles btnDivide.Click If radCalculator.Checked Then 'If calculator selected, use it to get the result. calc.num1 = CDbl(txtNumber1.Text) calc.num2 = CDbl(txtNumber2.Text) txtResult.Text = CStr(calc.Divide()) Else 'If scientific calculator selected, use it to get the result sci.num1 = CDbl(txtNumber1.Text) sci.num2 = CDbl(txtNumber2.Text) txtResult.Text = CStr(sci.Divide()) End If End Sub Private Sub btnExponentiation_Click(...) Handles _ btnExponentiation.Click sci.num1 = CDbl(txtNumber1.Text) sci.num2 = CDbl(txtNumber2.Text) txtResult.Text = CStr(sci.Exponentiation()) End Sub End Class 'frmCalculator Class AddingMachine Property num1() As Double Property num2() As Double Function Add() As Double Return num1 + num2 End Function Function Subtract() As Double Return num1 - num2 End Function End Class 'AddingMachine © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 419 of 443) Class Calculator Inherits AddingMachine 'Calculator inherits properties num1 and num2 'and functions add() and subtract(). Function Multiply() As Double Return num1 * num2 End Function Function Divide() As Double Return num1 / num2 End Function End Class 'Calculator Class ScientificCalculator Inherits Calculator 'ScientificCalculator inherits properties num1 and num2 'and methods Add(), Subtract(), Multiply, and Divide. Function Exponentiation() As Double 'Raise the first number by the second Return num1 ^ num2 End Function End Class 'ScientificCalculator 18. Public Class frmGrades Dim students(49) As Student 'Stores the class Dim lastStudentAdded As Integer = -1 'Last student added to Students Private Sub btnEnter_Click(...) Handles btnEnter.Click Dim pupil As Student 'Create the appropriate object depending upon the radio button If rdoPassFail.Checked Then pupil = New PFStudent() Else pupil = New LGStudent() End If 'Store the values in the text boxes into the object pupil.Name = txtName.Text pupil.SocSecNum = mtbSSN.Text pupil.Midterm = CDbl(txtMidterm.Text) pupil.Final = CDbl(txtFinal.Text) 'Add the student to the array lastStudentAdded += 1 students(lastStudentAdded) = pupil 'Clear text boxes and list box txtName.Clear() mtbSSN.Clear() txtMidterm.Clear() txtFinal.Clear() MessageBox.Show("Student #" & lastStudentAdded + 1 & " recorded.") End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 420 of 443) Private Sub btnDisplay_Click(...) Handles btnDisplay.Click ReDim Preserve students(lastStudentAdded) Dim query = From pupil In students Select pupil.Name, pupil.SocSecNum, pupil.CalcSemGrade dgvGrades.DataSource = query.ToList dgvGrades.CurrentCell = Nothing dgvGrades.Columns("Name").HeaderText = "Student Name" dgvGrades.Columns("SocSecNum").HeaderText = "SSN" dgvGrades.Columns("CalcSemGrade").HeaderText = "Grade" ReDim Preserve students(50) txtName.Focus() End Sub Private Sub btnQuit_Click(...) Handles btnQuit.Click Me.Close() End Sub End Class 'frmGrades MustInherit Class Student Public Property Name() As String Public Property SocSecNum() As String Public Property Midterm() As Double Public Property Final() As Double 'Child classes must override this function MustOverride Function CalcSemGrade() As String End Class 'Student Class LGStudent Inherits Student Overrides Function CalcSemGrade() As String Dim grade As Double grade = (Midterm + Final) / 2 grade = Math.Round(grade) 'Round the grade Select Case grade Case Is >= 90 Return "A" Case Is >= 80 Return "B" Case Is >= 70 Return "C" Case Is >= 60 Return "D" Case Else Return "F" End Select End Function End Class 'LGStudent © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 421 of 443) Class PFStudent Inherits Student Overrides Function CalcSemGrade() As String Dim grade As Double 'The grade is based upon average of the midterm and final exams grade = (Midterm + Final) / 2 grade = Math.Round(grade) 'Round the grade If grade >= 60 Then Return "Pass" Else Return "Fail" End If End Function End Class 'PFStudent 19. Public Class frmRegister Dim tollBooth As New FastTrackRegister() Private Sub btnProcess_Click(...) Handles btnProcess.Click If radCar.Checked Then tollBooth.ProcessCar() Else tollBooth.ProcessTruck() End If txtRevenue.Text = (tollBooth.Balance).ToString("C") txtNumVehicles.Text = CStr(tollBooth.Count) End Sub End Class 'frmRegister Class CashRegister Private m_balance As Decimal Sub Deposit(amount As Decimal) m_balance += amount End Sub Sub WithDrawal(amount As Decimal) m_balance = m_balance - amount End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 422 of 443) Public ReadOnly Property Balance() As Decimal Get Return m_balance End Get End Property End Class 'CashRegister Class FastTrackRegister Inherits CashRegister Private m_count As Integer Public ReadOnly Property Count() As Integer Get Return m_count End Get End Property Sub ProcessCar() m_count += 1 'Process a car: $1.00 Deposit(1) End Sub Sub ProcessTruck() m_count += 1 'Process a truck: $2.00 Deposit(2) End Sub End Class 'FastTrackRegister © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 423 of 443) 20. Public Class frmGrades Dim WithEvents data As New CompleteStats() Private Sub btnRecord_Click(...) Handles btnRecord.Click 'Add the grade to the statistics data.AddNumber(CInt(txtGrade.Text)) 'Update the count txtCount.Text = CStr(data.Count) 'Clear the input for the next grade txtGrade.Clear() txtGrade.Focus() End Sub Private Sub btnAverage_Click(...) Handles btnAverage.Click 'Display the average grade txtAverage.Text = (data.Average).ToString("N") End Sub Sub Spread(spread As Integer) Handles data.NewSpread 'Display the new spread txtSpread.Text = CStr(spread) End Sub End Class 'frmGrades Class Statistics Private m_numbers(50) As Integer Private m_count As Integer 'Count of numbers entered into array Overridable Sub AddNumber(number As Integer) 'Adds a number to the array m_count += 1 m_numbers(m_count) = number End Sub Public ReadOnly Property Count() As Integer Get Return m_count End Get End Property Function Average() As Double 'Computes the average Dim sum As Integer = 0 For i As Integer = 1 To m_count sum += m_numbers(i) Next Return sum / m_count End Function End Class 'Statistics © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 424 of 443) Class CompleteStats Inherits Statistics Private m_min As Integer = 100 'Current minimum Private m_max As Integer = 0 'Current maximum Public Event NewSpread(spread As Integer) 'Raised for a new spread Overrides Sub AddNumber(number As Integer) MyBase.AddNumber(number) If number < m_min Then 'If new number is less than current minimum then raise the event m_min = number RaiseEvent NewSpread(Spread()) End If If number > m_max Then 'If new number is more than current maximum then raise the event m_max = number RaiseEvent NewSpread(Spread()) End If End Sub Function Spread() As Integer 'Returns the difference between maximum and minimum Return m_max - m_min End Function End Class 'CompleteStats © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 425 of 443) 21. Public Class frmBookstore Dim books(10) As Book Dim count As Integer 'Stores books 'Last stored book Private Sub btnOrder_Click(...) Handles btnOrder.Click 'Create appropriate book object Dim book As Book If radTextbook.Checked Then book = New Textbook() Else book = New Tradebook() End If 'Store the values into the book object book.Name = txtName.Text book.Cost = CDec(txtCost.Text) book.Quantity = CInt(txtQuantity.Text) 'Increment counter and store book into array books(count) = book count += 1 'Reset input fields and focus on the quantity txtName.Clear() txtCost.Clear() txtQuantity.Text = "" txtQuantity.Focus() End Sub Private Sub btnInventory_Click(...) Handles btnInventory.Click 'Display inventory of books Dim num As Integer = 0 Dim textb As Integer = 0 Dim cost As Decimal = 0 Dim value As Decimal = 0 'Aggregate totals For i As Integer = 0 To (count – 1) cost += books(i).Quantity * books(i).Cost value += books(i).Quantity * books(i).Price num += books(i).Quantity 'Count textbooks If TypeOf books(i) Is Textbook Then textb += books(i).Quantity End If Next 'Display totals lstInventory.Items.Clear() lstInventory.Items.Add("Total cost: " & cost.ToString("C")) lstInventory.Items.Add("Total value: " & value.ToString("C")) lstInventory.Items.Add("Number of books: " & num) lstInventory.Items.Add("Number of textbooks: " & textb) End Sub End Class 'frmBookstore MustInherit Class Book Public Property Name() As String Public Property Cost() As Decimal Public Property Quantity() As Integer 'Children must override this property MustOverride ReadOnly Property Price() As Decimal End Class 'Book © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 426 of 443) Class Tradebook Inherits Book Overrides ReadOnly Property Price() As Decimal Get Return 1.4D * Cost '40% markup End Get End Property End Class 'Tradebook Class Textbook Inherits Book Overrides ReadOnly Property Price() As Decimal Get Return 1.2D * Cost '20% markup End Get End Property End Class 'Textbook 22. Public Class frmPayroll 'Holds the employee data and number of hours worked Structure Payroll Dim Employee As Employee 'Employee object Dim Hours As Double 'Hours worked during the week End Structure Dim pay(10) As Payroll Dim count As Integer 'Holds payroll records 'Last recorded employee Private Sub btnRecord_Click(...) Handles btnRecord.Click 'Record an employee into the payroll Dim employee As Employee 'Determine employee type If radSalaried.Checked Then employee = New Salaried() Else employee = New Hourly() End If 'Store the data into the object © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 427 of 443) employee.Name = txtName.Text employee.Rate = CDec(txtRate.Text) 'Store the employee and hours into the structure array pay(count).Employee = employee pay(count).Hours = CDbl(txtHours.Text) count += 1 'Clear the input and set focus to name for the next employee txtName.Clear() txtRate.Clear() txtHours.Clear() txtName.Focus() End Sub Private Sub btnPayroll_Click(...) Handles btnPayroll.Click 'Display the statistics Dim hrs As Double 'Aggregate totals Dim sal As Integer = 0 Dim payroll As Decimal = 0 For i As Integer = 0 To (count – 1) If TypeOf pay(i).Employee Is Salaried Then sal += 1 End If payroll += pay(i).Employee.GrossPay(pay(i).Hours) hrs += pay(i).Hours Next lstPayroll.Items.Clear() lstPayroll.Items.Add("Number of employees: " & CStr(count)) lstPayroll.Items.Add("Salaried employees: " & CStr(sal)) lstPayroll.Items.Add("Total payroll: " & payroll.ToString("C")) lstPayroll.Items.Add("Average hours worked: " & (hrs / count).ToString("N1")) End Sub End Class 'frmPayroll Public MustInherit Class Employee Public Property Name() As String Public Property Rate() As Decimal 'Children must override this function to return gross pay MustOverride Function GrossPay(hours As Double) As Decimal End Class 'Employee Class Salaried Inherits Employee Overrides Function GrossPay(hours As Double) As Decimal 'Disregard hours worked; pay is simply the weekly salary Return Rate End Function End Class 'Salaried Class Hourly Inherits Employee Overrides Function GrossPay(hours As Double) As Decimal 'Multiply hours worked by rate Return CDec(hours * Rate) End Function End Class 'Hourly © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 428 of 443) © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 429 of 443) 23. Public Class frmInterestOnlyMortgage Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim loan As New InterestOnlyMortgage loan.Principal = CDec(txtPrincipal.Text) loan.InterestRate = CDec(txtInterestRate.Text) loan.Years = CInt(txtYears.Text) - CInt(txtInterestOnlyYears.Text) loan.InterestOnlyYears = CInt(txtInterestOnlyYears.Text) txtMonthlyPayment1.Text = (loan.calculateInitialMonthlyPayment).ToString("C2") txtMonthlyPayment2.Text = (loan.calculateMonthlyPayment).ToString("C2") End Sub End Class 'frmInterestOnlyMortgage Class Mortgage Private m_years As Integer Public Property Principal() As Decimal Public Property InterestRate() As Decimal Public WriteOnly Property Years() As Integer Set(value As Integer) m_years = value End Set End Property Function calculateMonthlyPayment() As Decimal Dim i As Decimal i = _InterestRate / 1200 Return ((i / (1 - ((1 + i) ^ (-12 * m_years)))) * _Principal) End Function End Class 'Mortgage Class InterestOnlyMortgage Inherits Mortgage Private m_numberOfInterestOnlyYears As Integer Public WriteOnly Property InterestOnlyYears() As Integer Set(value As Integer) m_numberOfInterestOnlyYears = value End Set End Property Function calculateInitialMonthlyPayment() As Decimal Return CDec(Principal * InterestRate / 1200) End Function End Class 'InterestOnlyMortgage © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 430 of 443) 24. Public Class frmMortgageWithPoints Private Sub btnCalculate_Click(...) Handles btnCalculate.Click Dim loan As New MortgageWithPoints loan.Principal = CDec(txtPrincipal.Text) loan.InterestRate = CDec(txtInterestRate.Text) loan.Years = CInt(txtYears.Text) loan.NumberOfPoints = CInt(txtPoints.Text) txtCostOfPoints.Text = (loan.calculateCostOfPoints).ToString("C2") txtMonthlyPayment.Text = (loan.calculateMonthlyPayment).ToString("C2") End Sub End Class 'frmMortgageWithPoints Class Mortgage Private m_years As Integer Public Property Principal() As Decimal Public Property InterestRate() As Decimal Public WriteOnly Property Years() As Integer Set(value As Integer) m_years = value End Set Function calculateMonthlyPayment() As Decimal Dim i As Decimal i = _InterestRate / 1200 Return ((i / (1 - ((1 + i) ^ (-12 * m_years)))) * _Principal) End Function End Class 'Mortgage Class MortgageWithPoints Inherits Mortgage Private m_numberOfPoints As Integer Public WriteOnly Property NumberOfPoints() As Integer Set(value As Integer) m_numberOfPoints = value End Set End Property Function calculateCostOfPoints() As Decimal Return CDec(Principal * m_numberOfPoints / 100) End Function End Class 'MortgageWithPoints © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 431 of 443) CHAPTER 11 PROGRAMMING PROJECTS 1. Public Class frmBank 'Create checking and savings accounts. Dim WithEvents checking As New Account("Checking") Dim WithEvents savings As New Account("Savings") Dim check As Boolean 'True if current mode is Checking Dim committed As Boolean 'True if transaction was committed Dim curDate As Date 'Current date Structure Trans Dim dt As Date Dim nom As String Dim newBal As Decimal Dim amt As Decimal Dim cred As Boolean End Structure Dim sav() As Trans Dim chk() As Trans Private Sub frmBank_Load(...) Handles MyBase.Load 'Setup user interface for Checking. 'Load the transactions from the data files. checking.Load() savings.Load() 'Select checking account as account to transfer from. cboTransfer.SelectedIndex = 0 'Select checking account as the first account to see. cboAccount.SelectedIndex = 0 txtDate.Text = CStr(Today) 'Today's date UpdateGrid() End Sub Sub UpdateGrid() Dim temp() As String If cboAccount.SelectedIndex = 0 Then temp = IO.File.ReadAllLines("Checking.txt") Else temp = IO.File.ReadAllLines("Savings.txt") End If Dim n = temp.Count - 1 Dim data() As String ReDim sav(n) For i As Integer = 0 To n Dim preBal As Decimal = 0 data = temp(i).Split(","c) sav(i).dt = CDate(data(0)) sav(i).nom = data(1) sav(i).amt = CDec(data(2)) If i = 0 Then preBal = 0 Else preBal = sav(i - 1).newBal End If If CBool(data(3)) Then sav(i).newBal = preBal + sav(i).amt Else sav(i).newBal = preBal - sav(i).amt End If Next © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 432 of 443) Dim query = From s In sav Let amt = (s.amt).ToString("C") Let newBal = (s.newBal).ToString("C") Select s.dt, s.nom, amt, newBal dgvTransactions.DataSource = query.ToList dgvTransactions.CurrentCell = Nothing dgvTransactions.Columns("dt").HeaderText = "Date" dgvTransactions.Columns("nom").HeaderText = "Type of Transaction" dgvTransactions.Columns("amt").HeaderText = "Amount" dgvTransactions.Columns("newBal").HeaderText = "New Balance" End Sub Sub Insufficient(over As Decimal) Handles _ checking.Insufficient, savings.Insufficient 'If insufficient funds, set the committed flag to false and display message committed = False MessageBox.Show("Insufficient Funds: " & over.ToString("C"), "Insufficient Funds") End Sub Sub TransactionCommitted() Handles checking.TransactionCommitted, savings.TransactionCommitted 'If transaction committed, set the committed flag to True committed = True End Sub Private Sub cboAccount_SelectedIndexChanged(...) Handles _ cboAccount.SelectedIndexChanged 'Show the check group box if checking is enabled check = (cboAccount.SelectedIndex = 0) grpCheck.Visible = check Display() 'Display the transactions for the account UpdateGrid() End Sub Sub Display() 'Display the transactions belonging to the account If check Then 'Display the transactions in the lstTransactions list box 'checking.EnumerateTransactions(lstTransactions) 'Display the balance in the text box txtBalance.Text = (checking.Balance).ToString("C") Else 'Display the transactions in the lstTransactions list box 'savings.EnumerateTransactions(lstTransactions) 'Display the balance in the text box txtBalance.Text = (savings.Balance).ToString("C") End If UpdateGrid() End Sub Private Sub btnDeposit_Click(...) Handles btnDeposit.Click 'Deposit an amount into an account Dim trans As Transaction 'Create new deposit transaction curDate = CDate(txtDate.Text) trans = New Transaction(curDate, "Deposit", CDec(txtDeposit.Text), True) 'Store transaction and update display If check Then checking.Add(trans) © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 433 of 443) Dim sw As IO.StreamWriter = IO.File.AppendText("CHECKING.TXT") sw.WriteLine(trans.Format) sw.Close() Else savings.Add(trans) Dim sw As IO.StreamWriter = IO.File.AppendText("SAVINGS.TXT") sw.WriteLine(trans.Format) sw.Close() End If 'Display new transaction Display() txtDeposit.Clear() End Sub Private Sub btnWithdrawal_Click(...) Handles btnWithdrawal.Click 'Withdrawal an amount from an account Dim trans As Transaction 'Create new deposit transaction curDate = CDate(txtDate.Text) trans = New Transaction(curDate, "Withdrawal", CDec(txtWithdrawal.Text), False) 'Store transaction and update display If check Then checking.Add(trans) If committed Then Dim sw As IO.StreamWriter = IO.File.AppendText("CHECKING.TXT") sw.WriteLine(trans.Format) sw.Close() End If Else savings.Add(trans) If committed Then Dim sw As IO.StreamWriter = IO.File.AppendText("SAVINGS.TXT") sw.WriteLine(trans.Format) sw.Close() End If End If 'Display new transaction Display() txtWithdrawal.Clear() End Sub Private Sub btnCheck_Click(...) Handles btnCheck.Click 'Withdrawal an amount from an account. Dim trans As Transaction 'Create new deposit transaction curDate = CDate(txtDate.Text) trans = New Transaction(curDate, "Check cashed by " & txtCheckTo.Text, CDec(txtCheck.Text), False) 'Store transaction, and update display. checking.Add(trans) If committed Then Dim sw As IO.StreamWriter = IO.File.AppendText("CHECKING.TXT") sw.WriteLine(trans.Format) sw.Close() End If Display() txtCheck.Clear() txtCheckTo.Clear() End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 434 of 443) Private Sub cboTransfer_SelectedIndexChanged(...) Handles _ cboTransfer.SelectedIndexChanged 'Display the proper account label caption. If cboTransfer.SelectedIndex = 0 Then lblTransferTo.Text = "to Savings" Else lblTransferTo.Text = "to Checking" End If End Sub Private Sub btnTransfer_Click(...) Handles btnTransfer.Click 'Transfer money from one account to the other. Dim trans As Transaction Dim amount As Decimal = CDec(txtTransfer.Text) curDate = CDate(txtDate.Text) 'Create new withdrawal transaction. committed = True If cboTransfer.SelectedIndex = 0 Then 'Store transaction from checking account. trans = New Transaction(curDate, "Transfer to Savings", amount, False) checking.Add(trans) If committed Then Dim sw As IO.StreamWriter = IO.File.AppendText("Checking.txt") sw.WriteLine(trans.Format) sw.Close() End If Else 'Store transaction from savings account. trans = New Transaction(curDate, "Transfer to Checking", amount, False) savings.Add(trans) If committed Then Dim sw As IO.StreamWriter = IO.File.AppendText("Savings.txt") sw.WriteLine(trans.Format) sw.Close() End If End If 'Deposit to other account only if last transaction was committed. If committed Then If cboTransfer.SelectedIndex = 0 Then 'Store transaction to savings trans = New Transaction(curDate, "Transfer from Checking", amount, True) savings.Add(trans) Dim sw As IO.StreamWriter = IO.File.AppendText("Savings.txt") sw.WriteLine(trans.Format) sw.Close() Else 'Store transaction to checking account. trans = New Transaction(curDate, "Transfer from Savings", amount, True) checking.Add(trans) Dim sw As IO.StreamWriter = IO.File.AppendText("Checking.txt") sw.WriteLine(trans.Format) sw.Close() End If 'Display transactions. Display() txtTransfer.Clear() End If End Sub End Class 'frmBank © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 435 of 443) Class Transaction Private m_name As String Private m_amount As Decimal Private m_date As Date Private m_credit As Boolean Public ReadOnly Property Name() As String Get Return m_name End Get End Property Public ReadOnly Property Amount() As Decimal Get Return m_amount End Get End Property Public ReadOnly Property TransDate() As Date Get Return m_date End Get End Property Public ReadOnly Property Credit() As Boolean Get Return m_credit End Get End Property Public Sub New(dt As Date, nm As String, amt As Decimal, cred As Boolean) 'Create new transaction object. 'Store parameters into member variables. m_name = nm m_amount = amt m_credit = cred m_date = dt End Sub Function Format() As String 'Put information into the proper form for insertion 'into one of the two text files Return CStr(TransDate) & "," & Name & "," & CStr(Amount) & "," & CStr(Credit) End Function End Class 'Transaction Class Account Dim trans(50) As Transaction Dim lastNum As Integer Private m_name As String Private m_balance As Decimal 'Holds the transactions 'Last transaction stored 'Name of the account 'Current balance Public ReadOnly Property Name() As String Get Return m_name End Get End Property © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 436 of 443) Public ReadOnly Property Balance() As Decimal Get Return m_balance End Get End Property 'Insufficient event is raised when a withdrawal is more than the balance. Public Event Insufficient(over As Decimal) Public Event TransactionCommitted() Public Sub New(name As String) 'Store the name m_name = name End Sub Sub Add(transaction As Transaction) 'Add a transaction to the account. Dim newBalance As Decimal 'Calculate new balance. If transaction.Credit Then newBalance = Balance + transaction.Amount Else newBalance = Balance - transaction.Amount End If 'If new balance is negative, then raise the insufficient event. If newBalance < 0 Then RaiseEvent Insufficient(newBalance) Else lastNum += 1 'Ensure there is space to store the transaction within the array. If (trans.Count – 1) <= lastNum Then ReDim Preserve trans(lastNum + 5) End If 'Store the tranasction, new balance, and raise the committed event. trans(lastNum) = transaction m_balance = newBalance RaiseEvent TransactionCommitted() End If End Sub Sub Load() 'Load the data from a comma separated value (CSV) text file Dim fileName As String = m_name & ".TXT" Dim sr As IO.StreamReader Dim data() As String 'Array to receive values of Split function. Dim trans As Transaction 'Only load account if file exists If IO.File.Exists(fileName) Then sr = IO.File.OpenText(fileName) 'Loop through all lines of the file While Not sr.EndOfStream 'Split the line of data on commas into the string array data(). data = sr.ReadLine.Split(","c) 'Add the transaction to the account. trans = New Transaction(CDate(data(0)), data(1), CDec(data(2)), CBool(data(3))) Add(trans) End While sr.Close() End If End Sub End Class 'Account © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 437 of 443) 2. Public Class frmBlackJack Dim player, dealer As Hand 'The two hands Dim WithEvents deck As DeckOfCards 'The deck of cards Private Sub frmBlackJack_Load(...) Handles MyBase.Load 'Instantiate hands and deck. player = New Hand() dealer = New Hand() deck = New DeckOfCards() 'Deal the first hand NewHand() txtOutput.Clear() End Sub Private Sub btnNewHand_Click(...) Handles btnNewHand.Click 'Only deal a new hand if the hand is not finished If dealer.LastStored <> 1 Then NewHand() End If End Sub Private Sub btnHold_Click(...) Handles btnHold.Click 'Only stay if not stayed before and player has not busted yet If (player.Score <= 21) And (dealer.LastStored = 1) Then Hold() End If End Sub Private Sub btnHit_Click(...) Handles btnHit.Click 'Only hit if player has less than 5 cards, has not yet bust and not held If (player.LastStored < 5) And (player.Score < 21) And (dealer.LastStored = 1) Then Deal_Player() End If 'If reached 5 cards or busted then the player must hold If (player.LastStored = 5) Or (player.Score > 21) Then Hold() End If End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 438 of 443) Sub NewHand() 'Reset hands and result. player.Clear() dealer.Clear() lstPlayer.Items.Clear() lstDealer.Items.Clear() txtPlayer.Clear() txtDealer.Clear() txtOutput.Clear() 'Shuffle the deck. deck.ShuffleDeck() 'Deal one card to dealer and two cards to player Deal_Dealer() Deal_Player() Deal_Player() End Sub Sub Deal_Player() 'Deal one card to player. Dim card As Card card = deck.Deal() player.Deal(card) 'Display card and score in appropriate list boxes lstPlayer.Items.Add(card.IdentifyCard) txtPlayer.Text = CStr(player.Score) End Sub Sub Deal_Dealer() 'Deal one card to dealer. Dim card As Card card = deck.Deal() dealer.Deal(card) 'Display card and score in appropriate list boxes lstDealer.Items.Add(card.IdentifyCard) txtDealer.Text = CStr(dealer.Score) End Sub Sub Hold() 'Deal one card to dealer until number reaches 5 or score reaches 17. 'If player has busted, then just deal one more card. Do Deal_Dealer() Loop Until (player.Score > 21) Or (dealer.LastStored = 5) Or (dealer.Score > 16) 'Display the result of the hands. txtOutput.Text = Result() End Sub Function Result() As String 'Determines the result of the hands 'If player or dealer busted If player.Score > 21 Then Return "You Busted - Dealer Wins" End If If dealer.Score > 21 Then Return "Dealer Busted - You win" End If If player.LastStored = 5 Then If dealer.LastStored = 5 Then Return "Both hands reached 5 - Push" End If Return "Hand reached 5 - You win" © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 439 of 443) End If If dealer.LastStored = 5 Then Return "Dealer hand reached 5 - Dealer Wins" End If 'Compare scores Select Case player.Score Case Is > dealer.Score Return "You win" Case dealer.Score Return "Push" Case Else Return "Dealer wins" End Select End Function Private Sub cards_Shuffling(n As Integer, nMax As Integer) Handles deck.Shuffling 'n is the number of the specific pass through the deck (1, 2, 3...). 'nMax is the total number of passes when the deck is shuffled. txtOutput.Text = "Shuffling Pass: " & n & " out of " & nMax For i As Integer = 1 To 1000000 'Slow down the shuffle. Next txtOutput.Update() 'Refresh contents of text box End Sub End Class 'frmBlackJack Class Hand Private cards(5) As Card Private m_lastStored As Integer 'Maximum of 5 cards in a hand 'Location of last stored card Public ReadOnly Property LastStored() As Integer Get Return m_lastStored End Get End Property Public ReadOnly Property Card(i As Integer) As Card Get Return cards(i) End Get End Property Public ReadOnly Property Score() As Integer Get Dim total As Integer Dim Ace As Boolean = False 'Add up all of the cards' scores in the hand. For i As Integer = 1 To m_lastStored 'Remember if there was an ace. total += cards(i).Score If cards(i).Denomination = 1 Then Ace = True End If Next 'If ace in the hand and less than 12, then ace counts 11. If (total < 12) And Ace Then total += 10 End If Return total End Get End Property © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 440 of 443) Sub Deal(card As Card) 'Add the card to the hand. If m_lastStored < 5 Then 'Increment counter, and store card in array. m_lastStored += 1 cards(m_lastStored) = card End If End Sub Sub Clear() 'Removeall cards from hand. m_lastStored = 0 End Sub End Class 'Hand Class Card Private m_Denomination As Integer Private m_Suit As String 'A number from 1 through 13 'Hearts, Clubs, Diamonds, Spades Public Property Denomination() As Integer Get Return m_Denomination End Get Set(Value As Integer) 'Only store valid values. If (Value >= 1) And (Value <= 13) Then m_Denomination = Value End If End Set End Property Public ReadOnly Property Score() As Integer Get 'Jack, Queen and King count 10. If m_Denomination > 10 Then Return 10 Else Return m_Denomination End If End Get End Property Public Property Suit() As String Get Return m_Suit End Get Set(Value As String) 'Only store valid values If (Value = "Hearts") Or (Value = "Clubs") Or (Value = "Diamonds") Or (Value = "Spades") Then m_Suit = Value End If End Set End Property © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 441 of 443) Function IdentifyCard() As String Dim Denom As String = "" Select Case m_Denomination Case 1 Denom = "Ace" Case Is <= 10 Denom = CStr(m_Denomination) Case 11 Denom = "Jack" Case 12 Denom = "Queen" Case 13 Denom = "King" End Select Return Denom & " of " & m_Suit End Function End Class 'Card Class DeckOfCards Private m_deck(52) As Card 'Deck of 52 Cards Private m_dealt As Integer 'Last card dealt (1, 2, ..., 52) 'Shuffling event contains the current pass and total number of passes Public Event Shuffling(n As Integer, nMax As Integer) Public Sub New() 'Make the first thirteen cards hearts, the 'next thirteen cards diamonds, and so on. Dim suits() As String = {"Hearts", "Diamonds", "Clubs", "Spades"} For i As Integer = 0 To 3 For j As Integer = 1 To 13 'Assign numbers from 1 through 13 to the 'cards of each suit. m_deck(i * 13 + j) = New Card() m_deck(i * 13 + j).Suit = suits(i) m_deck(i * 13 + j).Denomination = j Next Next End Sub Function Deal() As Card 'Increment counter, cycling to one. If m_dealt < 52 Then m_dealt += 1 Else m_dealt = 1 End If Return m_deck(m_dealt) End Function Sub Swap(i As Integer, j As Integer) 'Swap the ith and jth card in the deck Dim tempCard As Card tempCard = m_deck(i) m_deck(i) = m_deck(j) m_deck(j) = tempCard End Sub © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 442 of 443) Sub ShuffleDeck() 'Do 2000 passes through the deck. On each pass, 'swap each card with a randomly selected card. Dim index As Integer Dim randomNum As New Random() For i As Integer = 1 To 2000 For k As Integer = 1 To 52 index = randomNum.Next(1, 53) 'Randomly select a number ' from 1 through 52 inclusive Swap(k, index) Next 'Raise the shuffling event to track the progress of the shuffle. RaiseEvent Shuffling(i, 2000) Next End Sub End Class 'DeckOfCards © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved. Instructor Solutions Manual (Page 443 of 443) Some Common Commands (key1+key2 means “Hold down key1 while pressing key2.”) (key1/key2 means “Release key1 before pressing key2.”) Environment and Editor Alt Alt/File/New/Project (or Ctrl+Shift+N) Alt/File/Open/”Project/Solution” Alt/File/Save All (or Ctrl+Shift+S) Alt/File Close Solution (or Project) Alt/Window/Reset Window Layout Alt/File/Exit (or Alt+F4) Alt/View/Code (or F7) Alt/View/Designer (or Shift+F7) Alt/View/Solution Explorer Alt/View/Full Screen (or Shift+Alt+Enter) Alt/Project/Add New Item Alt/Project/Add Existing Item Ctrl+A Ctrl+C Ctrl+F Ctrl+H Ctrl+P Ctrl+V Ctrl+Z Ctrl+Shift+Enter F4 F5 F11 F10 Shift+F11 F9 Esc Drag a window's title bar to center of screen Toggle focus between Document window and Menu bar Start a new program Open an existing program (also Ctrl+Shift+O) Save the current program Close the current program Reset to the IDE's default layout Terminate execution of program or Visual Basic Display the Code Editor for the current program Display the Form Designer for the current program Display the Solution Explorer window Enlarge Visual Basic IDE screen Add a new text file or form to a program Import an existing text file or form into program Select everything in the Form Designer or Code Editor Place selected text into Clipboard Find Replace Print a copy of the current program Replace selected text with contents of Clipboard Undo last change Terminate entry of a query Display the properties window for the selected control Run the current program Execute the next line of code while debugging Execute the next line of code while debugging, but do not follow execution through any procedure calls Execute remainder of current procedure while debugging Toggle a breakpoint Close a menu or dialog box Undock window for easier use (Hold down Ctrl key and double-click on title bar to redock window) Controls Tab Shift+Tab Double-click on an obect arrow key Ctrl+arrow key Shift+arrow key Delete Cycle forward through controls Cycle backward through controls Create a template for object's default event procedure Move selected control in the Form Designer Move selected control to align with another control Resize selected control in the Form Designer Remove the selected control Toolbox Click on upright push pin Click on reclining push pin Slide Toolbox into a tab at left side of the screen Keep Toolbox permanently displayed © 2017 Pearson Education, Inc., Hoboken, NJ. All rights reserved.