1

如果我遇到业余爱好者,请原谅我,只做了几个星期。我必须构建一个应用程序,根据年龄和选择的保险计划计算每月保险费和总保费。

我在 calcButton_click 事件之前做了一些方法,包括:

i) ageCatTest 确定客户所属的年龄类别。

ii) deductibleChoice 来确定他们将支付的免赔额(0、75 或 100)。我认为将所有 3 个都放在一个列表框中会比尝试编写代码来包含这 3 个选项之外的答案更容易。

iii) planChoice 以确定选择了哪个计划(A 或 B)。我还使用了一个列表框来尝试包含可能答案的领域。

我将所有可能的月保费设置在一个二维数组中,row[0] 对应计划 A,row[1] 对应计划 B。列 [0,1,2,3,4] 对应年龄类别(年龄猫)。然后我尝试设置它,以便使用 ageCat 方法和 planChoice 方法的结果作为索引键从数组中选择值。

最后,一旦确定了溢价,它就会乘以潜在的折扣(如果用户在列表框中选择 75 或 100 作为免赔额,而不是 0)。

当 calcButton_click 被激活时,所有这些的结果应该显示在几个文本框中,但事实并非如此。当我点击计算时它不会冻结或滞后,没有任何反应。

Visual Studio 找不到任何错误,就编译器而言,没有任何错误。但是,由于没有发生任何事情,我假设我构建方法或 click_event 的方式有问题,但我找不到任何问题。如果有人能发现任何明显的错误,将不胜感激。

谢谢!

namespace InsuranceApp
{
public partial class insuranceCalculator : Form
{
    public insuranceCalculator()
    {
        InitializeComponent();
    }

    private bool planChoice(string plan)
    {
        bool planType = false;
        if (plan.Equals("B"))
        {
            planType = true;
            return planType;
        }
        return planType;
    }

    private decimal deductibleChoice(string deductibleSelect)
    {
        decimal discount;
        discount = 1;

        switch (deductibleSelect)
        {
            case "75":
                discount = 0.95m;
                return discount;

            case "100":
                discount = 0.92m;
                return discount;
        }

        return discount;
    }




    private int ageCatTest(int age)
    {
        int ageCat = 0;

        if (age >= 36 && age <= 45)
        {
            ageCat = 1;
            return ageCat;
        }
        else if (age >= 46 && age <= 55)
        {
            ageCat = 2;
            return ageCat;
        }
        else if (age >= 56 && age <= 65)
        {
            ageCat = 3;
            return ageCat;
        }
        else if (age >= 66 && age <= 75)
        {
            ageCat = 4;
            return ageCat;
        }

        return ageCat;
    }

    private void calcButton_Click(object sender, EventArgs e)
    {
        int[,] plans = {{80, 90, 110, 140, 170},
                   {100, 110, 125, 170, 210}};
        int ageCat;
        int planType = 0;
        int age;
        decimal discount;
        string deductible;
        decimal coverage = 100000;
        decimal monthlyPremium;
        int months;
        string plan;
        decimal totalPremium;

        if (int.TryParse((ageTextBox.Text), out age))
        {
            if (age < 18 || age > 75)
            {
                MessageBox.Show("Sorry, you are ineligible for travel insurance.");
            }
            else
            {
                if (int.TryParse((monthsTextBox.Text), out months))
                {
                    ageCat = ageCatTest(age);

                    plan = planListBox.SelectedItem.ToString();

                    if (planChoice(plan) == true)
                    {
                        planType = 1;
                        coverage = 150000;
                    }

                    coverageTextBox.Text = coverage.ToString("n2");

                    deductible = deducSelBox.SelectedItem.ToString();
                    discount = deductibleChoice(deductible);

                    monthlyPremium = plans[planType, ageCat];
                    monthlyPremium = monthlyPremium * discount;
                    premiumTextBox.Text = monthlyPremium.ToString("n2");


                    totalPremium = monthlyPremium * months;
                    totalPremTextBox.Text = totalPremium.ToString("n2");
                }
            }
        }
    }



    private void exitButton_Click(object sender, EventArgs e)
    {
        this.Close();
    }
}

}
4

1 回答 1

1

计算机错误的一般分类是:编译时错误、运行时错误和逻辑错误。

我同意@Jay 和@Steve。这里的问题更多的是隐藏的逻辑错误,而不是编译时错误。解析文本框后没有“else”语句意味着“静默失败”。而是在使用 try...catch 块进行解析的适当 else 语句中引发错误,并相应地处理捕获的异常。

对于“其他”情况,一个简单的解决方案如下所示(伪代码):

if (try.parse (text box) == success) {
  execute program
}
else {
  message box show (relevant error message)
}

对于“try..catch”情况,一种简单的解决方案是(伪代码):

try {
  parse (text box)
  execute program 
}
catch (Parsing Exception as e) {
  message box show (relevant error message)
}
于 2013-10-24T13:11:44.373 回答