1

私がアマチュアっぽく出くわしたら許してください、これを数週間しかやっていません。年齢と選択した保険プランに基づいて、毎月の保険料と合計保険料を計算するアプリケーションを作成する必要があります。

calcButton_click イベントの前にいくつかのメソッドを作成しました。

i) ageCatTest を使用して、クライアントが属する年齢カテゴリを決定します。

ii) deductibleChoice (0、75、または 100) を支払う免責額を決定します。3 つすべてをリストボックスに入れる方が、これら 3 つのオプション以外の回答を含むコードを作成するよりも簡単だと思いました。

iii) どのプランが選択されたか (A または B) を決定するための planChoice。また、リストボックスを使用して、可能な回答の領域を含めようとしました。

行 [0] はプラン A に対応し、行 [1] はプラン B に対応します。列 [0,1,2,3,4] は年齢カテゴリに対応します。 (ageCat)。次に、ageCat メソッドと planChoice メソッドの結果をインデックス キーとして使用して、配列から値が選択されるように設定しようとしました。

最後に、保険料が決定されると、潜在的な割引が掛けられます (ユーザーがリストボックスで免責金額として 0 ではなく 75 または 100 を選択した場合)。

これらすべての結果は、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に同意します。ここでの問題は、コンパイル時エラーというより、隠れた論理エラーです。Textboxes を解析した後に「else」ステートメントが存在しないということは、「silent-fail」を意味します。代わりに、解析に try...catch ブロックを使用する適切な else ステートメントでエラーを発生させ、それに応じてキャッチされた例外を処理します。

「else」状況の場合、単純な解決策は次のようになります (疑似コード):

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

「try..catch」状況の場合、1 つの簡単な解決策は (疑似コード) です。

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