-1

私は 3 つのイベント プロシージャ (つまり、3 つの異なるタスク ボタン: [メディアと見積もり資金の選択]、[代理店の追加]、および [レポートの生成]) で構成されるプログラムに取り組んでいます。

[Select Media and Estimated Fund] ボタンをクリックすると、入力ボックスがポップアップし、ユーザーに残高を入力するように求めます。その残高は、(残高 = 残高 * (1 + 金利) の式によって計算されます。残高は、ユーザー入力は、$500.00 未満または $3000.00 を超えることはできません。

( 予算の見積もりは、選択した資金調達リソースに応じて計算する必要があります (資金調達リソースは、選択した口座の種類です。普通預金 (7% の金利) と法人向け (5% の金利)) 計算結果は、すぐ隣の無効化されたテキスト ボックスに表示されます。 2 つのリソースを選択した場合は、それぞれの予算をまとめて計算する必要があります。計算プロセスは、イベント プロシージャで「FundingResource (Balance)」として定義されたサブ プロシージャを呼び出す必要があります。

現在の年である 2013 年に注意してください。現在、レポートは 2013 年に作成されていますが、残高は選択した年 (2015 年、2016 年、2017 年など) について計算する必要があります。繰り返しのトピックについて考えて、選択した年の最終残高を決定します。

私は信じているコードを完成させましたが、それをサブプロシージャに入れる方法がわかりません。上記の質問のコードは「btnMediaEstimatedFund」にあります。

Public Class Form1

Private Sub btnMediaEstimatedFund_Click(sender As Object, e As EventArgs) Handles btnMediaEstimatedFund.Click

    Dim interestRate, balance, initialBalanceSavings, initialBalanceCorporate, finalBalance As Double

    txtBoxEstimatedBudget.Enabled = False
    txtBoxAgenciesNeeded.Enabled = False

    If radButtonTraditional.Checked Then

        txtBoxAgenciesNeeded.Text = 3

    ElseIf radButtonEMedia.Checked Then

        txtBoxAgenciesNeeded.Text = 2

    End If

    If checkBoxSavings.Checked Then

        interestRate = 0.07

    ElseIf checkBoxCorporate.Checked Then

        interestRate = 0.05

    ElseIf checkBoxCorporate.Checked And checkBoxSavings.Checked Then

        interestRate = 0.12

    End If

    initialBalanceSavings = InputBox("Please Enter a balance for SAVINGS account between $500.00 and $3000.00")

    If initialBalanceSavings > 3000 Then

        InputBox("Please enter a balance for SAVINGS account equal to or below $3000.00 and no less than $500.00")

    ElseIf initialBalanceSavings < 500 Then

        InputBox("Please enter a balance for SAVINGS account equal to or above $500.00 and no more than $3000.00")

    End If

     initialBalanceCorporate = InputBox("Please Enter a balance for CORPORATE account between $500.00 and $3000.00")

    If initialBalanceCorporate > 3000 Then

        InputBox("Please enter a balance for CORPORATE account equal to or below $3000.000 and no less than $500.00")

    ElseIf initialBalanceCorporate < 500 Then

        InputBox("Please enter a balance for CORPORATE account equal to or above $500.00 and no more than $3000.00")

    Else

        finalBalance = initialBalanceCorporate + initialBalanceSavings
        balance = finalBalance * (1 + interestRate)
        txtBoxEstimatedBudget.Text = balance

    End If

End Sub


Private Sub btnAddAgencies_Click(sender As Object, e As EventArgs) Handles btnAddAgencies.Click

    Dim dict As Dictionary(Of String, Integer) = New Dictionary(Of String, Integer)()
    dict.Add("U-Ad ($350)", 350)
    dict.Add("Striker ($190)", 190)
    dict.Add("New Ad ($250)", 250)
    dict.Add("Samson ($530)", 530)
    dict.Add("J & R ($420)", 420)
    dict.Add("Victory ($120)", 120)

    Dim selectedItems = (From i In lstBoxAgenciesList.SelectedItems).ToArray()
    Dim total As Integer = 0

    For Each selectedItem In selectedItems

        lstBoxSelectedList.Items.Add(selectedItem)
        lstBoxAgenciesList.Items.Remove(selectedItem)

    Next

    For Each item In lstBoxSelectedList.Items

        total += dict(item)

    Next

    txtBoxEstimatedCost.Text = FormatCurrency(total.ToString())

End Sub

Private Sub btnGenerateReport_Click(sender As Object, e As EventArgs) Handles btnGenerateReport.Click

    Dim employeeLevel, year, selectedMedia, numberOfAgencies As String
    Dim today As Date

    today = CStr(dtpToday.Text)
    Name = CStr(txtBoxCreator.Text)
    employeeLevel = CStr(lstBoxResults.Text)
    year = CStr(lstBoxResults.Text)
    selectedMedia = CStr(lstBoxResults.Text)
    numberOfAgencies = CStr(txtBoxAgenciesNeeded.Text)

    dtpToday.Text = FormatDateTime(today, DateFormat.ShortDate)

    If radButtonManager.Checked Then

        employeeLevel = "Manager"

    ElseIf radButtonStaff.Checked Then

        employeeLevel = "Staff"

    End If

    If radButton2015.Checked Then

        year = "2015"

    ElseIf radButton2016.Checked Then

        year = "2016"

    ElseIf radButton2017.Checked Then

        year = "2017"

    End If

    If radButtonTraditional.Checked Then

        selectedMedia = "Traditional Media (TV, Radio)"

    ElseIf radButtonEMedia.Checked Then

        selectedMedia = "New e-Media (SNS, e-Mail)"

    End If

    lstBoxResults.Items.Add("=======================================")
    lstBoxResults.Items.Add(" ")
    lstBoxResults.Items.Add("Date : " & today)
    lstBoxResults.Items.Add(" ")
    lstBoxResults.Items.Add("Reporting Entity : " & Name)
    lstBoxResults.Items.Add(" ")
    lstBoxResults.Items.Add("Level of Employee :  " & employeeLevel)
    lstBoxResults.Items.Add(" ")
    lstBoxResults.Items.Add("=======================================")
    lstBoxResults.Items.Add(" ")
    lstBoxResults.Items.Add("Year" & " " & year & " " & "Budget of Advertising Report")
    lstBoxResults.Items.Add(" ")
    lstBoxResults.Items.Add("=======================================")
    lstBoxResults.Items.Add(" ")
    lstBoxResults.Items.Add("Total Estimated Cost : " & FormatCurrency(txtBoxEstimatedCost.Text))
    lstBoxResults.Items.Add(" ")
    lstBoxResults.Items.Add("Total Estimated Budget : " & FormatCurrency(txtBoxEstimatedBudget.Text))
    lstBoxResults.Items.Add(" ")
    lstBoxResults.Items.Add("Selected Media : " & selectedMedia)
    lstBoxResults.Items.Add(" ")
    lstBoxResults.Items.Add("Number of Agencies Involved : " & numberOfAgencies)
    lstBoxResults.Items.Add(" ")
    lstBoxResults.Items.Add("=======================================")

End Sub

End Class
4

1 に答える 1

0

アップデート

入力ボックスが正しくありません。無効な値が一貫して入力されている場合、ルーチンは次のコード行にドロップスルーします。

以下のように表示されます。

Do
  inputtedData = InputBox("Please Enter a balance for SAVINGS account between $500.00 and $3000.00", "Initial Savings Balance", "0.00")
  If inputtedData = "" Then
    MsgBox("User chose to Cancel calculation!")
    Exit Sub
  Else
    initialBalanceSavings = CType(inputtedData, Single)
    If initialBalanceSavings > 3000 Or initialBalanceSavings < 500 Then MsgBox("Please enter a balance for SAVINGS account equal to or above $500.00 and no more than $3000.00", MsgBoxStyle.Critical, "Error")
  End If
Loop Until initialBalanceSavings >= 500 And initialBalanceSavings <= 3000

Do
  inputtedData = InputBox("Please Enter a balance for CORPORATE account between $500.00 and $3000.00", "Initial Corporate Balance", "0.00")
  If inputtedData = "" Then
    MsgBox("User chose to Cancel calculation!")
    Exit Sub
  Else
    initialBalanceCorporate = CType(inputtedData, Single)
    If initialBalanceCorporate > 3000 Or initialBalanceCorporate < 500 Then MsgBox("Please enter a balance for CORPORATE account equal to or above $500.00 and no more than $3000.00", MsgBoxStyle.Critical, "Error")
  End If
Loop Until initialBalanceCorporate >= 500 And initialBalanceCorporate <= 3000

最後に、すべてのコードは「btnMediaEstimatedFund」プロシージャに含まれていません。合計値の計算がないため、計算がFUTURE年間であるという事実も考慮されていません。実際、KEYCALCULATIONの部分が欠落しています。

つまり、2016年の計算値を生成したい場合、現在は2013年ですが、7%と5%の利息の会計処理はどこにありますか?実際に計算されるところはどこにも見当たりません。

作成方法を「知らない」サブルーチンは、ボタン/テキストボックス/リストボックスイベント用に作成したサブルーチンと同じです。

パラメータを渡すと計算が行われ、SUBの場合はそれで終わりです。関数の場合は、値またはオブジェクトを返します。

サブルーチンを作成するには、名前にパラメータのリストを付けます。必要に応じて、パラメータのないサブルーチンや関数を使用できますが、関数は常に値/オブジェクトを返す必要があります。

Sub ThisIsMySubroutine(MyParam1 as string, My Param2 as Object)
   ' code here
End Sub


Function ThisIsMyFunction(MyParam1 as string, My Param2 as Object) As Boolean
   ' code here
End Function

パラメータと戻り値のデータ型は、受け入れ可能なデータ型または認識されたデータ型である可能性があることをすでにご存知だと思います。

アップデートII

あなたの最後のコメントに関して(で始まります。また、私は小さなものを1つ持っています。)コードを交換して元のコードを元に戻すと、同じ問題が発生します。

では、最後にもう1つコードサンプルとポインタを追加します。

したがって、プログラム(10%yours 90%mine haha​​ha)が入力を要求しないようにするには、ifステートメントで囲むことができます...

If checkBoxSavings.Checked Then
  Do
    inputtedData = InputBox("Please Enter a balance for SAVINGS account between $500.00 and $3000.00", "Initial Savings Balance", "0.00")
    If inputtedData = "" Then
      MsgBox("User chose to Cancel calculation!")
      Exit Sub
    Else
      initialBalanceSavings = CType(inputtedData, Single)
      If initialBalanceSavings > 3000 Or initialBalanceSavings < 500 Then MsgBox("Please enter a balance for SAVINGS account equal to or above $500.00 and no more than $3000.00", MsgBoxStyle.Critical, "Error")
    End If
  Loop Until initialBalanceSavings >= 500 And initialBalanceSavings <= 3000
End If

If checkBoxCorporate.Checked Then
  Do
    inputtedData = InputBox("Please Enter a balance for CORPORATE account between $500.00 and $3000.00", "Initial Corporate Balance", "0.00")
    If inputtedData = "" Then
      MsgBox("User chose to Cancel calculation!")
      Exit Sub
    Else
      initialBalanceCorporate = CType(inputtedData, Single)
      If initialBalanceCorporate > 3000 Or initialBalanceCorporate < 500 Then MsgBox("Please enter a balance for CORPORATE account equal to or above $500.00 and no more than $3000.00", MsgBoxStyle.Critical, "Error")
    End If
  Loop Until initialBalanceCorporate >= 500 And initialBalanceCorporate <= 3000
End If

そして興味のためにここにあなたのためのリンクがあります、 http://math.about.com/od/businessmath/ss/Interest.htm

それは1年以上にわたる関心を示しているので、それは非常に良い説明です。それはあなたの質問のこの部分が尋ねていることです...

現在の2013年に注意してください。現在、レポートは2013年に作成されていますが、残高は選択した年(2015、2016、2017など)に対して計算する必要があります。繰り返しのトピックについて考えて、選択した年の終了バランスを決定します

于 2013-03-24T02:21:36.143 に答える