C# 停车收费计算
解决了。非常感谢每一位有意见的人。这里的社区很棒 我有一项任务,其中一部分计划要求计算出客户的停车费 收费以小时和1/2小时为增量 确定小时数和分钟数。1分钟到30分钟按小时费率的1/2收费。从31分钟到59分钟按一小时收费 每小时收费为每小时2美元。停车没有最长时间限制 我被困在如何正确编码这个。我想它使用if语句,这不是问题。但由于没有最长的时间限制,我不知道如何正确地编码,或者至少如何开始 这是到目前为止我整个项目的代码,我只是不知道如何开始处理程序的这一部分C# 停车收费计算,c#,if-statement,C#,If Statement,解决了。非常感谢每一位有意见的人。这里的社区很棒 我有一项任务,其中一部分计划要求计算出客户的停车费 收费以小时和1/2小时为增量 确定小时数和分钟数。1分钟到30分钟按小时费率的1/2收费。从31分钟到59分钟按一小时收费 每小时收费为每小时2美元。停车没有最长时间限制 我被困在如何正确编码这个。我想它使用if语句,这不是问题。但由于没有最长的时间限制,我不知道如何正确地编码,或者至少如何开始 这是到目前为止我整个项目的代码,我只是不知道如何开始处理程序的这一部分 public Wat
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;
}
}
公共水上公园()
{
初始化组件();
}
私有void individualButton_单击(对象发送者,事件参数e)
{
if(groupNameTextBox.Text.Trim()!=string.Empty)
{
尝试
{
groupAmount=int.Parse(groupNameTextBox.Text);
尝试
{
parkingments=int.Parse(parkedTextBox.Text);
个人总数();
}
接住
{
Show(“必须是整数。”,“输入错误”);
parkedTextBox.Focus();
parkedTextBox.SelectAll();
}
}
接住
{
Show(“必须是整数。”,“输入错误”);
peopleTextBox.Focus();
peopleTextBox.SelectAll();
}
}
其他的
{
Show(“必须是有效的组名。”,“输入错误”);
groupNameTextBox.Focus();
groupNameTextBox.SelectAll();
}
}
私有void eventOneCheckBox\u CheckedChanged(对象发送方,EventArgs e)
{
eventInt+=1;
eventInt-=1;
}
私有void eventtwocketbox\u CheckedChanged(对象发送方,事件参数e)
{
eventInt+=1;
eventInt-=1;
}
私有void eventThreeCheckBox\u CheckedChanged(对象发送方,事件参数e)
{
eventInt+=1;
eventInt-=1;
}
私有void eventFourCheckBox\u CheckedChanged(对象发送方,EventArgs e)
{
eventInt+=1;
eventInt-=1;
}
私有void eventFiveCheckBox_CheckedChanged(对象发送方,EventArgs e)
{
eventInt+=1;
eventInt-=1;
}
私有void IndividualTotals()
{
extraInt=eventInt-1;
交换机(外部接口)
{
案例1:
额外费用=3.00;
打破
案例2:
额外费用=5.00;
打破
案例3:
额外费用=6.00;
打破
案例4:
额外费用=7.00;
打破
违约:
额外费用=00.00;
打破
内小时停车=分钟停车/60;
int minutesRequires=停放的小时数%60;
双小时成本=停车小时数*2;
首先,我建议将界面(输入数据的按钮和文本框)与计算费用的逻辑分离。这可以通过创建新方法来实现,该方法采用参数(如小时费用和总停车时间)并返回总成本(如rsbarro建议的那样)。然后某个按钮点击事件只会检查输入的正确性,调用计数函数,并将返回的内容放入某个文本框中,不管是什么
如果我正确地理解了,计算费用的实际功能不应该是很难写的,如果你考虑如何手动地为人停车,例如20分钟,30分钟,然后50, 60, 100,200, 300等等。
我将根据以下内容编写其余内容:
确定小时数和分钟数。分钟1到30为
每小时收费1/2。从31分钟到59分钟收费
整整一个小时
每小时收费为每小时2.00美元。没有最高时间限制
公园
因为这对我来说不是很清楚-我应该按1/2小时费率的13/30收费13分钟,即~$0.43,还是$1,31分钟是$2.00?那么61分钟是$3.00-这就是我的解释
确定总分钟数。
考虑用户是如何输入的。一个文本框包含分钟数?两个文本框包含小时/分钟数?一个文本框采用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=(分钟/60)*2;
现在我们必须为剩余部分(不是整小时)增加费用。这里我们有两个选择:如果剩余部分少于30,我们只收取1.00美元。如果超过30,我们向可怜的家伙收取2.00美元。
使用模
除法得到余数:
25 mod 60 = 25
35 mod 60 = 35
60 mod 60 = 0
95 mod 60 = 35
128 mod 60 = 8
因此,让我们用rements=minutes%60;
。检查选项(因为这是您的作业,我将用伪代码编写):
rements首先,我建议将界面(输入数据的按钮和文本框)与计算费用的逻辑分开。这可以通过创建新方法来完成,该方法采用参数(如小时费用和总停车时间)并返回总成本(如rsbarro建议的)。然后是一些按钮
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
public static float Charge(int lengthInMinutes)
{
float charge = 0.0f;
while (lengthInMinutes >= 60)
{
charge += 2;
lengthInMinutes -= 60;
}
// use this code instead of the 'if else' blog below to charge for ever minute after that for half the rate
//float chargePerMinute = (float)((2.0f / 2) / 60);
//charge += (float)lengthInMinutes * chargePerMinute;
// at this point, we'll only have less than 60 minutes
if (lengthInMinutes > 30)
{
charge += 2;
}
else if (lengthInMinutes > 0)
{
charge += 1;
}
if (charge > float.MaxValue)
return float.MaxValue;
return charge;
}
class Program
{
static void Main(string[] args)
{
float charge = ParkingCharges.Charge(100);
Console.WriteLine(charge.ToString("000.00"));
Console.ReadKey();
}
}
[TestClass]
public class Parking
{
private int GetParkingCharge(int minutesParked)
{
return (int)Math.Ceiling(minutesParked/30f);
}
[TestMethod]
public void TestParking()
{
Assert.AreEqual(0, GetParkingCharge(0));
Assert.AreEqual(1, GetParkingCharge(25));
Assert.AreEqual(2, GetParkingCharge(45));
Assert.AreEqual(2, GetParkingCharge(60));
Assert.AreEqual(3, GetParkingCharge(61));
Assert.AreEqual(3, GetParkingCharge(90));
Assert.AreEqual(4, GetParkingCharge(91));
}
}