2016-02-05 7 views
0

Мне нужно сделать программу счета за телефон, которая позволит пользователю рассчитать их счет за телефон. Они будут вводить свои протоколы, тексты и данные, а также то, сколько они использовали.Не удается вычислить расчет

Каждая дополнительная минута 30p, каждый дополнительный текст 10p, а данные, используемые над лимитом, составляют 10,00 фунтов стерлингов, все они добавляются к окончательной стоимости.

Проблема в том, что я не могу заставить программу рассчитать стоимость каждой минуты, я думаю, что после выяснения того, как вычисляются минуты, я смогу сделать то же самое для текстов и данных.

Спасибо за помощь, очень признателен.

UI

This is the problem

Public Class Form1 Private Sub Form1_Load (отправитель As Object, е Как EventArgs) Ручки MyBase.Load End Sub

Private Sub btn1TotalCost_Click(sender As Object, e As EventArgs) Handles btn1TotalCost.Click 

    Dim MinutesAllowed As Integer 
    Dim MinutesUsed As Integer 
    Dim TextsAllowed As Integer 
    Dim TextsUsed As Integer 
    Dim DataAllowed As Integer 
    Dim DataUsed As Integer 
    Dim MinutesTotalCost As Double 
    Dim TextsTotalCost As Double 
    Dim DataTotalCost As Double 
    Dim MonthlyCost As Double 
    Dim TotalCost As Double 

    MinutesAllowed = Val(txtBoxMinutesAllowed.Text) 
    MinutesUsed = Val(txtBoxMinutesUsed.Text) 
    TextsAllowed = Val(txtBoxTextsAllowed.Text) 
    TextsUsed = Val(txtBoxTextsUsed.Text) 
    DataAllowed = Val(txtBoxDataAllowed.Text) 
    DataUsed = Val(txtBoxDataUsed.Text) 
    MinutesTotalCost = Val(txtBoxTotalCost.Text) 
    TextsTotalCost = Val(txtBoxTotalCost.Text) 
    DataTotalCost = Val(txtBoxTotalCost.Text) 
    TotalCost = Val(txtBoxTotalCost.Text) 

    'Minutes 
    MinutesAllowed = Integer.Parse(txtBoxMinutesAllowed.Text) 
    MinutesUsed = Integer.Parse(txtBoxMinutesUsed.Text) 
    MonthlyCost = Val(txtBoxMonthlyCost.Text) 

    If MinutesAllowed >= MinutesUsed Then 
     MinutesTotalCost = 0 
    Else 
     MinutesTotalCost = (MinutesUsed - MinutesAllowed) * 0.3 
    End If 
    txtBoxTotalCost.Text = CType(MinutesTotalCost + MonthlyCost, String) 

    'Texts 
    TextsAllowed = Integer.Parse(txtBoxTextsAllowed.Text) 
    TextsUsed = Integer.Parse(txtBoxTextsUsed.Text) 
    MonthlyCost = Val(txtBoxMonthlyCost.Text) 

    If TextsAllowed >= TextsUsed Then 
     TextsTotalCost = 0 
    Else 
     TextsTotalCost = (TextsUsed - TextsAllowed) * 0.15 
    End If 
    txtBoxTotalCost.Text = CType(TextsTotalCost + MonthlyCost, String) 

    'Data 
    DataAllowed = Integer.Parse(txtBoxDataAllowed.Text) 
    DataUsed = Integer.Parse(txtBoxDataUsed.Text) 
    MonthlyCost = Val(txtBoxMonthlyCost.Text) 

    If DataAllowed >= DataUsed Then 
     DataTotalCost = 0 
    Else 
     DataTotalCost = (DataUsed - DataAllowed) + 10.0 
    End If 
    txtBoxTotalCost.Text = CType(DataTotalCost + MonthlyCost, String) 

End Sub 

End Class

+0

Вы должны включить Option Strict - у вас есть несколько преобразований. – Plutonix

+0

Сделал это сейчас, но спасибо! – FutureProgrammer

ответ

1
MinutesTotalCost = MinutesUsed - MinutesAllowed * 0.3 

Операторы умножения и деления имеют приоритет над операторами сложения и вычитания.
Вам необходимо добавить скобки к расчету.

MinutesTotalCost = (MinutesUsed - MinutesAllowed) * 0.3 

Вы также перезаписать результат вычисления здесь:

MinutesTotalCost = txtBoxTotalCost.Text 

Edit: Работа кода для всего протокола

Dim MinutesAllowed As Integer 
Dim MinutesUsed As Integer 
Dim MinutesTotalCost As Double 
Dim MonthlyCost As Double 

MinutesAllowed = Integer.Parse(txtBoxMinutesAllowed.Text) 
MinutesUsed = Integer.Parse(txtBoxMinutesUsed.Text) 
MonthlyCost = Val(txtBoxMonthlyCost.Text) 

If MinutesAllowed >= MinutesUsed Then 
    MinutesTotalCost = 0 
Else 
    MinutesTotalCost = (MinutesUsed - MinutesAllowed) * 0.3   
End If 
txtBoxTotalCost.Text = CType(MinutesTotalCost + MonthlyCost, String) 

Val() возвращает двойной, так что вы должны использовать Integer.Parse() для внутр.
Двойной должен быть преобразован в строку для текстового поля.

Edit 2:
Поскольку MonthlyCost не изменяет вам нужна строка

MonthlyCost = Val(txtBoxMonthlyCost.Text) 

только один раз в начале.
Вы всегда переписываете значение txtBoxTotalCost. Просто сделайте единый расчет со всеми расходами, то есть

txtBoxTotalCost.Text = CType(MinutesTotalCost + TextsTotalCost + DataTotalCost + MonthlyCost, String) 
+0

Нет, это не сработало. Он все равно не вычисляет каждую минуту. – FutureProgrammer

+0

Спасибо за это, я попробую это. – FutureProgrammer

+0

По какой-то причине это не сработало. – FutureProgrammer