2014-02-28 51 views
0

該程序應該讀取文本文件中的值並獲取所有這些值的總和。然後使用從一系列複選框和文本框中收集的信息來計算最終利潤。在Visual Basic中計算利潤

由於現在編寫代碼,如果所有複選框都被選中,利潤是正確的,但是如果選中了一個,兩個或全部三個,我需要它是正確的。下面是當前的代碼 選項嚴格在

Imports System.IO 

Public Class Form1 

    Dim sum As Double 
    Dim fileRead As Boolean 
    Dim profit As Double 

    Private Sub menOpen_Click(sender As Object, e As EventArgs) Handles menOpen.Click 
     Dim ofd As New OpenFileDialog 
     ofd.Filter = "text files |*.txt|All Files|*.*" 
     ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) 

     If ofd.ShowDialog() = Windows.Forms.DialogResult.OK Then 
      Dim selectedFileName As String = System.IO.Path.GetFileName(ofd.FileName) 
      If selectedFileName.ToLower = "profit.txt" Then 
       Dim line As String 
       Using reader As New StreamReader(ofd.OpenFile) 
        While Not reader.EndOfStream 
         line = reader.ReadLine 
         Dim value As Integer 
         If Integer.TryParse(line, value) Then 
          sum = sum + value 
          fileRead = True 
         End If 
         Console.WriteLine(line) 
        End While 
       End Using 
      Else 
       MessageBox.Show("You cannot use that file!") 
      End If 
     End If 
    End Sub 

    Private Sub menExit_Click(sender As Object, e As EventArgs) Handles menExit.Click 
     Me.Close() 
    End Sub 

    Private Sub radSales_CheckedChanged(sender As Object, e As EventArgs) Handles radSales.CheckedChanged 
     If radSales.Checked Then 
      profit = sum 
     End If 
    End Sub 

    Private Sub radSandO_CheckedChanged(sender As Object, e As EventArgs) Handles radSandO.CheckedChanged 
     If radSandO.Checked Then 
      If Trim(txtWages.Text) = "" Then 
       txtWages.Text = CStr(0) 
      End If 
      profit = (sum - CDbl(txtWages.Text) - CDbl(txtRent.Text) - CDbl(txtUtilities.Text)) 
     End If 

    End Sub 


    Private Sub menComputeProfit_Click(sender As Object, e As EventArgs) Handles menComputeProfit.Click 
     If fileRead = False Then 
      MessageBox.Show("The file profit.txt has not been read in yet, the profit will be set to zero.") 
      sum = 0 
     End If 

     If chkWages.Checked Then 
      profit = CDbl(("$" & Val(sum) - (Val(txtWages.Text) + Val(txtRent.Text) + Val(txtUtilities.Text)))) 
     End If 
     If chkRent.Checked Then 
      profit = CDbl(("$" & Val(sum) - (Val(txtRent.Text) + Val(txtWages.Text) + Val(txtUtilities.Text)))) 
     End If 
     If chkUtilities.Checked Then 
      profit = CDbl(("$" & Val(sum) - (Val(txtUtilities.Text) + Val(txtWages.Text) + Val(txtRent.Text)))) 
     End If 

     txtAnswer.Text = profit.ToString 

    End Sub 
End Class 

任何幫助將不勝感激。

+0

我想你已經檢查了文本框只包含數字和小數點。 – Mych

+0

請記住在VB.NET中計算利潤以取得Micro $ oft的楔子! – Paul

+0

我認爲你的利潤分配有點不對。嘗試從混音中刪除「$」,並在分配給文本框時將其添加到字符串中。 – Paul

回答

0

其中一個文本輸入很可能是空的(如錯誤狀態)。即使它不是空的,它仍然可能是一個無效的Double值。

爲了安全檢查,如果字符串可以轉換爲double,你可以使用Double.TryParse,像這樣:

If Double.TryParse(value, number) Then 
    Console.WriteLine("'{0}' --> {1}", value, number) 
Else 
    Console.WriteLine("Unable to parse '{0}'.", value)  
End If  
+0

謝謝,我現在把所有的錯誤都理順了。但我仍然無法讓程序在txtAnswer文本框中顯示利潤。有什麼建議麼? –

+0

你到底在做什麼?是否顯示任何錯誤消息或引發異常? –

0

之前字符串轉換爲加倍,檢查字符串不是空的。這是錯誤說的。之後,您應該檢查框中的字符串實際上是數字。

+0

謝謝,我現在把所有的錯誤都理順了。但我仍然無法讓程序在txtAnswer文本框中顯示利潤。有什麼建議麼? –

0

您正在使用TextChanged事件的txtAnswer

Private Sub txtAnswer_TextChanged(sender As Object, e As EventArgs) Handles txtAnswer.TextChanged 
    txtAnswer.Text = CStr(profit) 
End Sub 

所以上面的代碼會在每次改變的時候對自己火了!只需在txt中彈出利潤回答每次計算

If chkWages.Checked Then 
     profit = CDbl(("$" & Val(sum) - Val(txtWages.Text))) 
     txtAnswer.text = profit 
    End If 
    If chkRent.Checked Then 
     profit = CDbl(("$" & Val(sum) - Val(txtRent.Text))) 
     txtAnswer.text = profit 
    End If 
    If chkUtilities.Checked Then 
     profit = CDbl(("$" & Val(sum) - Val(txtUtilities.Text))) 
     txtAnswer.text = profit 
    End If 

有點不整齊,但應該這樣做......只要利潤改變,您就需要這樣做。並擺脫TextChanged事件。

修訂答案CLARITY

好吧,我絕不添加貨幣符號,所以我不知道什麼CDbl(("$" & Val(Sum) - Val(txtWages.Text)))會做,因爲它可能把它作爲一個字符串的字符「$」,而不是貨幣。 擺脫「$」的,只是添加值...如果你想那麼粘在$前一次計算完成說txtAnswer = $ & profit.toString

+0

我最終取消了與txtAnswer的子處理。我已經更新了當前版本的帖子,有什麼建議嗎? –

+0

那麼你在哪裏更新txtAnswer?我在代碼中看不到任何點會改變它的值 - 請參閱我添加的最後一段代碼txtAnswer.text =利潤 – Mych

+0

對不起,我真的很累,忘了我沒有更新代碼,因爲我一直在與它合作。我編輯了這篇文章,以反映最近的代碼和我遇到的問題。 –