'********************************************************************* ' yachtChartering.vb ' -------------------- 'Folder: yachtChartering 'Project: Assignment 7.3 - Yacht Chartering 'Programmer: Adam Reyher (adam@adamreyher.com) 'Date: Monday, November 5, 2007 'Description: This program is for chartering yacht trips. ' Prices will be calcualted basec on yacht size and ' hourly rate. A summary can be printed. '********************************************************************* Option Strict On Option Explicit On Public Class mainForm 'Declare summary values we'll need Dim numberOfChartersDecimal As Decimal = 0D Dim totalRevenueDecimal As Decimal = 0D Dim totalHoursCharteredInteger As Integer = 0I Dim averageHoursCharteredDecimal As Decimal Private Sub ExitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExitToolStripMenuItem.Click Me.Close() End Sub Private Sub AboutToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AboutToolStripMenuItem.Click aboutForm.ShowDialog() End Sub Private Function CheckYachtType(ByVal selectedYachtType As String) As Boolean Dim duplicateTypeBoolean As Boolean = False Dim searchInteger As Integer = 0I With Me Do While searchInteger < .typeComboBox.Items.Count If selectedYachtType.ToLower = .typeComboBox.Items(searchInteger).ToString.ToLower Then duplicateTypeBoolean = True Exit Do End If searchInteger = searchInteger + 1 Loop End With Return duplicateTypeBoolean End Function Private Sub AddYachtTypeToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddYachtTypeToolStripMenuItem.Click 'Add Yacht Type from the text box Dim duplicateTypeBoolean As Boolean = False Dim searchInteger As Integer = 0I With Me 'Check for blank entries and duplicates If .typeComboBox.Text.Trim <> "" Then Do While searchInteger < .typeComboBox.Items.Count If .typeComboBox.Text.ToLower = .typeComboBox.Items(searchInteger).ToString.ToLower Then duplicateTypeBoolean = True Exit Do End If searchInteger = searchInteger + 1 Loop If duplicateTypeBoolean = False Then .typeComboBox.Items.Add(.typeComboBox.Text) .typeComboBox.Text = ControlChars.NullChar Else MessageBox.Show("That yacht type already exists", "Duplicate Found", _ MessageBoxButtons.OK, MessageBoxIcon.Information) End If Else MessageBox.Show("Yacht type cannot be blank", "Data Entry Error", _ MessageBoxButtons.OK, MessageBoxIcon.Information) End If End With End Sub Private Sub RemoveYachtTypeToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RemoveYachtTypeToolStripMenuItem.Click 'Remove a yacht type from the list With Me 'Check for blank entries or non existant types If .typeComboBox.SelectedIndex <> -1 Then .typeComboBox.Items.RemoveAt(.typeComboBox.SelectedIndex) Else MessageBox.Show("Please enter a yacht type to remove", "Data Entry Error", _ MessageBoxButtons.OK, MessageBoxIcon.Information) .typeComboBox.Focus() End If End With End Sub Private Sub clearButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles clearButton.Click 'Clear the form and focus With Me .partyTextBox.Text = ControlChars.NullChar .hoursTextBox.Text = ControlChars.NullChar .sizeComboBox.Text = ControlChars.NullChar .typeComboBox.Text = ControlChars.NullChar .partyTextBox.Focus() End With End Sub Private Sub ClearForNextCharterToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ClearForNextCharterToolStripMenuItem.Click 'Recall the code clearButton_Click(sender, e) End Sub Private Sub okButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles okButton.Click 'The big momma of the program ... hold on tight 'Calculate the price and check for data entry errors Dim charterHoursInteger As Integer Dim sizeofCharterInteger As Integer Dim errorThrownBoolean As Boolean = False Dim errorMessageString As String = "" Dim charterHourlyCostDecimal As Decimal Dim thisCharterCostDecimal As Decimal 'Check to see if data was entered If Me.partyTextBox.Text = "" Then errorThrownBoolean = True errorMessageString &= "Responsible party is required" & ControlChars.NewLine End If If Me.hoursTextBox.Text = "" Then errorThrownBoolean = True errorMessageString &= "Hours chartered is required" & ControlChars.NewLine End If If Me.sizeComboBox.Text = "" Then errorThrownBoolean = True errorMessageString &= "Size of charter is required" & ControlChars.NewLine End If If CheckYachtType(Me.typeComboBox.Text) = False Then errorThrownBoolean = True errorMessageString &= "Yacht type is required" & ControlChars.NewLine End If 'Display the error message(s) if it has been toggled to TRUE If errorThrownBoolean = True Then MessageBox.Show(errorMessageString, "Error entering data", _ MessageBoxButtons.OK, MessageBoxIcon.Information) 'No errors? Let's proceed Else Try 'Convert string to decimal charterHoursInteger = Integer.Parse(Me.hoursTextBox.Text) Try sizeofCharterInteger = Integer.Parse(Me.sizeComboBox.Text) Try Select Case sizeofCharterInteger Case 22I charterHourlyCostDecimal = 95D Case 24I charterHourlyCostDecimal = 137D Case 30I charterHourlyCostDecimal = 160D Case 32I charterHourlyCostDecimal = 192D Case 36I charterHourlyCostDecimal = 250D Case 38I charterHourlyCostDecimal = 400D Case 45I charterHourlyCostDecimal = 550D End Select 'Let's calculate the pay and enable the summary, then finally display the value thisCharterCostDecimal = (charterHourlyCostDecimal * charterHoursInteger) Me.PrintSummaryToolStripMenuItem.Enabled = True 'Increment the total summary values numberOfChartersDecimal = numberOfChartersDecimal + 1 totalRevenueDecimal = totalRevenueDecimal + thisCharterCostDecimal totalHoursCharteredInteger = totalHoursCharteredInteger + charterHoursInteger averageHoursCharteredDecimal = (totalHoursCharteredInteger / numberOfChartersDecimal) Me.calculatedTextBox.Text = thisCharterCostDecimal.ToString("C") Catch ex As Exception 'Some random error happened here MessageBox.Show("Error when calculating value", "Data calculation error", _ MessageBoxButtons.OK, MessageBoxIcon.Error) End Try Catch ex As Exception 'If this fires (it shouldn't since the ComboBox is locked), give an error MessageBox.Show("Size of charter must be an integer", "Data entry error", _ MessageBoxButtons.OK, MessageBoxIcon.Error) End Try Catch ex As Exception ' If this fires, the user has entered a non-integer for the hours MessageBox.Show("Hours chartered must be an integer", "Data entry error", _ MessageBoxButtons.OK, MessageBoxIcon.Information) With Me.hoursTextBox .Focus() .Select() End With End Try End If End Sub Private Sub summaryPrintDocument_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles summaryPrintDocument.PrintPage Dim printXCoorSingle As Single = e.MarginBounds.Left Dim printYCoorSingle As Single = e.MarginBounds.Top Dim printFont As New Font("New Courier", 16) Dim printFontBold As New Font("New Courier", 16, FontStyle.Bold) Dim lineHeight As Single = printFont.GetHeight Dim printLineStringTitle As String Dim printLineStringCharters As String Dim printLineStringRevenue As String Dim printLineStringAverage As String 'Print out each line ... printing in VB.NET is horrible! printLineStringTitle = "Sunken Ship Yacht Charters" & ControlChars.NewLine _ & "by Adam Reyher" & ControlChars.NewLine & ControlChars.NewLine _ & "Summary Data" e.Graphics.DrawString(printLineStringTitle, printFontBold, Brushes.Black, _ printXCoorSingle, printYCoorSingle) printYCoorSingle += lineHeight * 2 printLineStringCharters = "Number of Charters: " & numberOfChartersDecimal e.Graphics.DrawString(printLineStringCharters, printFont, Brushes.Black, _ printXCoorSingle, printYCoorSingle + (lineHeight * 2)) printYCoorSingle += lineHeight printLineStringRevenue = "Total Revenue: " & totalRevenueDecimal.ToString("C") e.Graphics.DrawString(printLineStringRevenue, printFont, Brushes.Black, _ printXCoorSingle, printYCoorSingle + (lineHeight * 2)) printYCoorSingle += lineHeight printLineStringAverage = "Average Hours Chartered: " & averageHoursCharteredDecimal e.Graphics.DrawString(printLineStringAverage, printFont, Brushes.Black, _ printXCoorSingle, printYCoorSingle + (lineHeight * 2)) printYCoorSingle += lineHeight End Sub Private Sub PrintSummaryToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PrintSummaryToolStripMenuItem.Click 'Grab the document Me.summaryPrintPreview.Document = Me.summaryPrintDocument Me.summaryPrintPreview.ShowDialog() End Sub Private Sub yachtPrintDocument_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles yachtPrintDocument.PrintPage Dim printXCoorSingle As Single = e.MarginBounds.Left Dim printYCoorSingle As Single = e.MarginBounds.Top Dim printFont As New Font("New Courier", 16) Dim printFontBold As New Font("New Courier", 16, FontStyle.Bold) Dim lineHeight As Single = printFont.GetHeight Dim printLineString As String Dim indexInteger As Integer 'Print out each line ... printing in VB.NET is horrible! printLineString = "Sunken Ship Yacht Charters" & ControlChars.NewLine _ & "by Adam Reyher" & ControlChars.NewLine & ControlChars.NewLine _ & "List of Yacht Types" e.Graphics.DrawString(printLineString, printFontBold, Brushes.Black, _ printXCoorSingle, printYCoorSingle) printYCoorSingle += lineHeight * 2 For indexInteger = 0 To Me.typeComboBox.Items.Count - 1 printLineString = Me.typeComboBox.Items(indexInteger).ToString e.Graphics.DrawString(printLineString, _ printFont, Brushes.Black, printXCoorSingle, printYCoorSingle + (lineHeight * 2)) printYCoorSingle += lineHeight Next End Sub Private Sub PrintYachtTypesToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PrintYachtTypesToolStripMenuItem.Click 'Grab the document Me.yachtPrintPreview.Document = Me.yachtPrintDocument Me.yachtPrintPreview.ShowDialog() End Sub Private Sub DisplayCountOfYachtTypesToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DisplayCountOfYachtTypesToolStripMenuItem.Click 'Display a count of the yacht types Dim yachtCountInteger As Integer yachtCountInteger = Me.typeComboBox.Items.Count MessageBox.Show("Number of yachts: " & yachtCountInteger, "Yacht Count", _ MessageBoxButtons.OK, MessageBoxIcon.Information) End Sub End Class