对于学校项目,我被要求使用visual basic在Windows窗体应用程序中创建虚拟自动售货机。我已经完成了大约80%,但是我有一些问题,我已经多次研究但仍然无法找到帮助。
首先,在自动售货机上购买物品时,如果剩余的信用额(更改)小于产品原件价格,则会显示错误消息,说明您没有足够的信用来购买产品。我如何制作它,如果信用额度不足以购买产品而不是在购买后立即显示该信息?
其次,我如何在购买后为剩余的信用额度制作系统,因为目前我只有一个信用退回按钮,用户将用它来提取购买后留下的剩余信用,而不是一个发布变化的系统。
最后,我如何制作它以便不允许用户在文本框中输入文本,因为自动售货机使用两个文本框,一个显示信用,另一个显示其他常规信息,例如澄清您购买了某种产品,或者您没有足够的信用来购买某种产品。
到目前为止,这是我的代码:
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
RichTextBox1.Text = "You Have Selected Galaxy Caramel, Please Insert 60p"
If credit >= 60 Then RichTextBox1.Text = "Thank you for purchasing a Galaxy Caramel bar"
credit = credit - 60
TextBox1.Text = credit
If credit < 60 Then RichTextBox1.Text = "You do not have enough credit to purchase a Galaxy Caramel Bar"
End Sub
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
RichTextBox1.Text = "You Have Selected Cadburys Milk Chocolate, Please Insert 75p"
If credit >= 75 Then RichTextBox1.Text = "Thank you for purchasing a Cadburys Milk Chocolate Bar"
credit = credit - 75
TextBox1.Text = credit
If credit < 75 Then RichTextBox1.Text = "You do not have enough credit to purchase a Cadburys Milk Chocolate Bar"
End Sub
Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
RichTextBox1.Text = "You Have Selected Bounty, Please Insert 70p"
If credit >= 70 Then RichTextBox1.Text = "Thank you for purchasing a Bounty bar"
credit = credit - 70
TextBox1.Text = credit
If credit < 70 Then RichTextBox1.Text = "You do not have enough credit to purchase a Bounty Bar"
End Sub
Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
RichTextBox1.Text = "You Have Selected Yorkie, Please Insert 60p"
If credit >= 60 Then RichTextBox1.Text = "Thank you for purchasing a Yorkie bar"
credit = credit - 60
TextBox1.Text = credit
If credit < 60 Then RichTextBox1.Text = "You do not have enough credit to purchase a Yorkie Bar"
End Sub
Private Sub Button8_Click(sender As System.Object, e As System.EventArgs) Handles Button8.Click
RichTextBox1.Text = "You Have Selected Doritos Tangy Cheese, Please Insert 85p"
If credit >= 85 Then RichTextBox1.Text = "Thank you for purchasing Doritos Tangy Cheese Crisps"
credit = credit - 85
TextBox1.Text = credit
If credit < 85 Then RichTextBox1.Text = "You do not have enough credit purchase Doritos Tangy Cheese Crisps"
End Sub
Private Sub Button7_Click(sender As System.Object, e As System.EventArgs) Handles Button7.Click
RichTextBox1.Text = "You Have Selected Doritos Cool Original, Please Insert 75p"
If credit >= 75 Then RichTextBox1.Text = "Thank you for purchasing Doritos Cool Original Crisps"
credit = credit - 75
TextBox1.Text = credit
If credit < 75 Then RichTextBox1.Text = "You do not have enough credit to purchase Doritos Cool Original Crisps"
End Sub
Private Sub Button6_Click(sender As System.Object, e As System.EventArgs) Handles Button6.Click
RichTextBox1.Text = "You Have Selected Walkers Cheese & Onion, Please Insert 70p"
If credit >= 70 Then RichTextBox1.Text = "Thank you for purchasing Walkers Cheese & Onion Crisps"
credit = credit - 70
TextBox1.Text = credit
If credit < 70 Then RichTextBox1.Text = "You do not have enough credit to purchase Walkers Cheese & Onion Crisps"
End Sub
Private Sub Button5_Click(sender As System.Object, e As System.EventArgs) Handles Button5.Click
RichTextBox1.Text = "You Have Selected Mccoy's Cheddar, Please Insert 80p"
If credit >= 80 Then RichTextBox1.Text = "Thank you for purchasing Mccoy's Cheddar Crisps"
credit = credit - 80
TextBox1.Text = credit
If credit < 80 Then RichTextBox1.Text = "You do not have enough credit to purchase Mccoy's Cheddar Crisps"
End Sub
Private Sub Button9_Click(sender As System.Object, e As System.EventArgs) Handles Button9.Click
RichTextBox1.Text = "You Have Selected Pepsi Max, Please Insert £1.10"
If credit >= 110 Then RichTextBox1.Text = "Thank you for purchasing Pepsi Max"
credit = credit - 110
TextBox1.Text = credit
If credit < 110 Then RichTextBox1.Text = "You do not have enough credit to purchase Pepsi Max"
End Sub
Private Sub Button12_Click(sender As System.Object, e As System.EventArgs) Handles Button12.Click
RichTextBox1.Text = "You Have Selected Mountain Dew, Please Insert 99p"
If credit >= 99 Then RichTextBox1.Text = "Thank you for purchasing Mountain Dew"
credit = credit - 99
TextBox1.Text = credit
If credit < 99 Then RichTextBox1.Text = "You do not have enough credit to purchase Mountain Dew"
End Sub
Private Sub Button10_Click(sender As System.Object, e As System.EventArgs) Handles Button10.Click
RichTextBox1.Text = "You Have Selected Fanta, Please Insert £1.05"
If credit >= 105 Then RichTextBox1.Text = "Thank you for purchasing Fanta"
credit = credit - 105
TextBox1.Text = credit
If credit < 105 Then RichTextBox1.Text = "You do not have enough credit to purchase Fanta"
End Sub
Private Sub Button11_Click(sender As System.Object, e As System.EventArgs) Handles Button11.Click
RichTextBox1.Text = "You Have Selected Dr.Pepper, Please Insert £1.20"
If credit >= 120 Then RichTextBox1.Text = "Thank you for purchasing Dr.Pepper"
credit = credit - 120
TextBox1.Text = credit
If credit < 120 Then RichTextBox1.Text = "You do not have enough credit to purchase Dr.Pepper"
End Sub
Private Sub Button13_Click(sender As System.Object, e As System.EventArgs) Handles Button13.Click
RichTextBox1.Text = "You Have Selected Buxton Mineral Water, Please Insert 90p"
If credit >= 90 Then RichTextBox1.Text = "Thank you for purchasing Buxton Mineral Water"
credit = credit - 90
TextBox1.Text = credit
If credit < 90 Then RichTextBox1.Text = "You do not have enough credit to purchase Buxton Mineral Water"
End Sub
Private Sub Button14_Click(sender As System.Object, e As System.EventArgs) Handles Button14.Click
credit = credit + 1
TextBox1.Text = credit
End Sub
Private Sub Button21_Click(sender As System.Object, e As System.EventArgs) Handles Button21.Click
credit = credit + 2
TextBox1.Text = credit
End Sub
Private Sub Button20_Click(sender As System.Object, e As System.EventArgs) Handles Button20.Click
credit = credit + 5
TextBox1.Text = credit
End Sub
Private Sub Button19_Click(sender As System.Object, e As System.EventArgs) Handles Button19.Click
credit = credit + 10
TextBox1.Text = credit
End Sub
Private Sub Button18_Click(sender As System.Object, e As System.EventArgs) Handles Button18.Click
credit = credit + 20
TextBox1.Text = credit
End Sub
Private Sub Button17_Click(sender As System.Object, e As System.EventArgs) Handles Button17.Click
credit = credit + 50
TextBox1.Text = credit
End Sub
Private Sub Button16_Click(sender As System.Object, e As System.EventArgs) Handles Button16.Click
credit = credit + 100
TextBox1.Text = credit
End Sub
Private Sub Button15_Click(sender As System.Object, e As System.EventArgs) Handles Button15.Click
credit = credit + 200
TextBox1.Text = credit
End Sub
Private Sub Button22_Click(sender As System.Object, e As System.EventArgs) Handles Button22.Click
credit = 0
TextBox1.Text = credit
RichTextBox1.Text = "Credit has been returned"
End Sub
Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
If credit < 0 Then credit = 0
TextBox1.Text = credit
If credit >= 1000 Then credit = 1000
TextBox1.Text = credit
If credit = 1000 Then RichTextBox1.Text = "Maximum credit of £10"
End Sub
Private Sub Button23_Click(sender As System.Object, e As System.EventArgs) Handles Button23.Click
RichTextBox1.Text = "You Have Selected Monster Munch, Please Insert 90p"
If credit >= 90 Then RichTextBox1.Text = "Thank you for purchasing Monster Munch Crisps"
credit = credit - 90
TextBox1.Text = credit
If credit < 90 Then RichTextBox1.Text = "You do not have enough credit to purchase Monster Munch Crisps"
End Sub
结束班
答案 0 :(得分:1)
我该怎么做才能只显示该信息,如果信用不是 足以购买产品,而不是直接购买 购买?
首先,您应该始终使用End If
来关闭If
语句,即使它们只有一行。如果If
语句为真,那么当您认为代码的“块”正在运行时,不这样做会导致细微的错误,但只有第一行受到影响而其余行总是运行。
对于您的特定代码,您非常接近。通过添加Else
块,End If
并重新格式化代码,它变得如此简单:
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
RichTextBox1.Text = "You Have Selected Galaxy Caramel, Please Insert 60p"
If credit >= 60 Then
RichTextBox1.Text = "Thank you for purchasing a Galaxy Caramel bar"
credit = credit - 60
TextBox1.Text = credit
Else
RichTextBox1.Text = "You do not have enough credit to purchase a Galaxy Caramel Bar"
End If
End Sub
显然,您需要更改所有项目以遵循上述模式。
其次,我将如何建立一个信用系统 在购买之后,目前我只获得了一笔信用 用户将用于提取剩余信用的返回按钮 购买后遗留下来,而不是放弃的系统 变化
不确定你的意思。你能更详细地解释一下你想要发生什么吗?
最后,我将如何制作,以便不允许用户输入文字 进入文本框,因为自动售货机使用两个文本框,一个到 显示信用,另一个显示其他常规信息,如 澄清你已经购买了某种产品或者你没有购买 有足够的信用购买某种产品。
TextBox和RichTextBox都有一个ReadOnly()属性,您可以将其设置为True,以便用户无法更改它们。但由于他们只使用按钮,而根本不需要打字,为什么不使用像Labels这样的不同控件?
答案 1 :(得分:0)
您可以在此方案中使用状态机。 Head First Design Patterns有一个使用State Design模式的自动售货机的好例子。即使本书以Java形式提供样本,您仍然可以计算出概念。
为了计算变化,我在下面写了这个块。它接受可用的硬币库存和所需的更改,并返回一个布尔值以指示是否可以返回所有更改。该方法将尝试返回给定库存可能的最大更改。
/// <summary>
/// This method attempts to calculate required change from a given coin inventory
/// </summary>
/// <param name="coinInventory">Key is the denomination of coin and value is the available number </param>
/// <param name="changeRequired">The change to count and return</param>
/// <param name="updatedCoinInventory"></param>
/// <param name="coinsToReturn"></param>
/// <returns>True if changeRequired could be calculated, False if coinsToReturn represent less than changeRequired </returns>
public bool GetChange(IDictionary<int, int> coinInventory, int changeRequired,
ref IDictionary<int, int> updatedCoinInventory,
ref IDictionary<int, int> coinsToReturn,
ref int amountDue)
{
int changeOutstanding = changeRequired;
updatedCoinInventory = coinInventory.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
coinsToReturn = new Dictionary<int, int>();
foreach (KeyValuePair<int, int> coin in coinInventory)
{
if (changeOutstanding == 0) break;
int numberOfAvailableCoins = coin.Value;
while (changeOutstanding >= coin.Key && numberOfAvailableCoins >= 1)
{
if (!coinsToReturn.ContainsKey(coin.Key))
{
coinsToReturn.Add(coin.Key, 1);
}
else
{
++ coinsToReturn[coin.Key];
}
changeOutstanding = changeOutstanding - coin.Key;
-- updatedCoinInventory[coin.Key];
-- numberOfAvailableCoins;
}
}
amountDue = changeOutstanding;
return changeOutstanding == 0;
}
}
希望这有帮助。