C# 停车收费计算

C# 停车收费计算,c#,if-statement,C#,If Statement,解决了。非常感谢每一位有意见的人。这里的社区很棒 我有一项任务,其中一部分计划要求计算出客户的停车费 收费以小时和1/2小时为增量 确定小时数和分钟数。1分钟到30分钟按小时费率的1/2收费。从31分钟到59分钟按一小时收费 每小时收费为每小时2美元。停车没有最长时间限制 我被困在如何正确编码这个。我想它使用if语句,这不是问题。但由于没有最长的时间限制,我不知道如何正确地编码,或者至少如何开始 这是到目前为止我整个项目的代码,我只是不知道如何开始处理程序的这一部分 public Wat

解决了。非常感谢每一位有意见的人。这里的社区很棒

我有一项任务,其中一部分计划要求计算出客户的停车费

收费以小时和1/2小时为增量

确定小时数和分钟数。1分钟到30分钟按小时费率的1/2收费。从31分钟到59分钟按一小时收费

每小时收费为每小时2美元。停车没有最长时间限制

我被困在如何正确编码这个。我想它使用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;

        }
    }
公共水上公园()
{
初始化组件();
}
私有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));
        }
    }