- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
已解决。非常感谢所有提供意见的人。这里有很棒的社区。
我有一项任务,其中部分程序需要计算客户的 parking 费。
收费以小时和 1/2 小时为增量。
确定小时数和分钟数。第 1 分钟到第 30 分钟按小时费率的 1/2 收费。从 31 到 59 分钟按一小时收费。
每小时收费 2.00 美元。没有最长 parking 时间限制。
我对如何正确编码感到困惑。我想它使用 if 语句,这不是问题。但由于没有最大时间限制,我不知道如何正确编码,或者至少如何开始。
到目前为止,这是我整个项目的代码,我只是不知道如何开始处理这部分程序。
public Waterpark()
{
InitializeComponent();
}
private void individualButton_Click(object sender, EventArgs e)
{
if (groupNameTextBox.Text.Trim() != string.Empty)
{
try
{
groupAmount = int.Parse(groupNameTextBox.Text);
try
{
parkingMinutes = int.Parse(parkedTextBox.Text);
IndividualTotals();
}
catch
{
MessageBox.Show("Must be an integer.", "INPUT ERROR");
parkedTextBox.Focus();
parkedTextBox.SelectAll();
}
}
catch
{
MessageBox.Show("Must be an integer.", "INPUT ERROR");
peopleTextBox.Focus();
peopleTextBox.SelectAll();
}
}
else
{
MessageBox.Show("Must be a valid group name.", "INPUT ERROR");
groupNameTextBox.Focus();
groupNameTextBox.SelectAll();
}
}
private void eventOneCheckBox_CheckedChanged(object sender, EventArgs e)
{
eventInt += 1;
eventInt -= 1;
}
private void eventTwoCheckBox_CheckedChanged(object sender, EventArgs e)
{
eventInt += 1;
eventInt -= 1;
}
private void eventThreeCheckBox_CheckedChanged(object sender, EventArgs e)
{
eventInt += 1;
eventInt -= 1;
}
private void eventFourCheckBox_CheckedChanged(object sender, EventArgs e)
{
eventInt += 1;
eventInt -= 1;
}
private void eventFiveCheckBox_CheckedChanged(object sender, EventArgs e)
{
eventInt += 1;
eventInt -= 1;
}
private void IndividualTotals()
{
extraInt = eventInt - 1;
switch(extraInt)
{
case 1:
extraFee = 3.00;
break;
case 2:
extraFee = 5.00;
break;
case 3:
extraFee = 6.00;
break;
case 4:
extraFee = 7.00;
break;
default:
extraFee = 00.00;
break;
int hoursParked = minutesParked / 60;
int minutesRemainder = hoursParked % 60;
double hoursCost = hoursParked * 2;
if (minutesRemainder <= 30)
{
minutesCost = 1;
}
else
{
minutesCost = 2;
}
parkingFee = hoursCost + minutesCost;
}
}
最佳答案
首先,我建议将界面(用于输入数据的按钮和文本框)与计算费用的逻辑分开。这将通过创建新方法来完成,该方法采用参数(例如每小时费用和总 parking 时间)并返回总成本(就像 rsbarro 建议的那样)。然后一些按钮点击事件只会检查输入的正确性,调用计数函数,并将它返回的内容放入某个文本框,等等。
如果我理解正确的话,计算费用的实际函数应该不会很难写,如果你考虑如何手动为人 parking ,例如 20 分钟、30 分钟,然后 50、60、100 , 200, 300 等。
我会根据这个写剩下的:
Determine the number of hours and minutes. Minutes 1 through 30 are charged at 1/2 the hourly rate. Minutes from 31 through 59 are charged for a full hour.
Hourly charge is $2.00 per hour. There is no maximum time limit to park.
因为这对我来说不是很清楚 - 我应该按 1/2 小时费率的 13/30 收取 13 分钟的费用,即大约 0.43 美元,还是 1 美元,而 31 分钟是 2.00 美元?那么 61 分钟就是 3.00 美元 - 这是我的解释。
确定总分钟数。
考虑用户如何提供输入。一个带有 session 记录的文本框?两个带有小时/分钟的文本框?一个 hh:mm 格式的文本框?不管怎样,找到计算总分钟数的方法,因为这是您最终费用的基础。
计数
由于每 60 分钟将收取 2.00 美元,我们可以通过将分钟数除以 60(或 61,取决于解释)并取商(其整数部分)来轻松计算小时数。这意味着:
25 div 60 = 0
35 div 60 = 0
60 div 60 = 1
95 div 60 = 1
128 div 60 = 2
在这里我们很容易看到,在 25 分钟和 35 分钟内没有整整一小时,而在 60 分钟内有整整一小时。在 128 分钟内有两个完整的小时,我们应该向客户收费。这意味着某些结果值 (rv
) 将是rv = (minutes/60) * 2;
。
现在我们必须为剩余时间(不是整小时)增加费用。这里我们有两个选择:如果余数少于 30,我们只收取 1.00 美元。如果超过 30,我们会向这个可怜的家伙收取 2.00 美元。您使用 modulo
除法得到余数:
25 mod 60 = 25
35 mod 60 = 35
60 mod 60 = 0
95 mod 60 = 35
128 mod 60 = 8
所以,让我们取 remainder = minutes % 60;
。并检查选项(因为这是您的作业,我将用伪代码编写):
remainder <- minutes mod 60;
if remainder =< 30:
add $1.00 to the fee
else: # (if remainder is more than 30, namely 31..59)
add $2.00 to the fee
之后,只需通过您的函数返回总费用(全小时费用 + 剩余时间费用)并呈现给用户即可。
同样出于好奇:您的代码中的 eventInt
到底是什么?
关于c# - parking 费计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12885048/
我必须计算持卡人的总计费金额,以使用卡进入 parking 场。我的费率结构如下所示。 parking 场的每个区域都有这些价格的优先列表。 public partial class HourlyPr
我是一名优秀的程序员,十分优秀!