为什么此保险计算器在 Visual Studio 2012 中运行时不显示输出?(它完美调试)
本文关键字:输出 显示 调试 完美 运行时 计算器 保险 Visual 2012 Studio 为什么 | 更新日期: 2023-09-27 18:36:25
如果我给人的印象是业余的,请原谅我,只做了几个星期。我必须构建一个应用程序,根据年龄和所选的保险计划计算每月保险月费和总保费。
我在calcButton_click活动前做了一些方法,包括;
i) ageCatTest 以确定客户所属的年龄类别。
ii) 免赔额选择确定他们将支付的免赔额(0、75 或 100)。我认为将所有 3 个放在列表框中比尝试编写代码以包含这 3 个选项之外的答案更容易。
iii) 计划选择以确定已选择的计划(A 或 B)。我还使用了一个列表框来尝试包含可能的答案领域。
我将所有可能的每月保费设置在一个二维数组中,行 [0] 对应于计划 A,行 [1] 对应于计划 B.列 [0,1,2,3,4] 对应于年龄类别 (ageCat)。然后,我尝试对其进行设置,以便使用 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();
}
}
}
计算机错误的一般分类是:编译时错误、运行时错误和逻辑错误。
我同意@Jay和@Steve。这里的问题与其说是编译时错误,不如说是隐藏的逻辑错误。解析文本框后缺少"else"语句意味着"静默失败"。而是在适当的其他语句中使用尝试中引发错误...用于解析的 catch 块并相应地处理捕获的异常。
对于"else"情况,一个简单的解决方案如下所示(伪代码):
if (try.parse (text box) == success) {
execute program
}
else {
message box show (relevant error message)
}
对于"尝试..catch'的情况,一个简单的解决方案是(伪代码):
try {
parse (text box)
execute program
}
catch (Parsing Exception as e) {
message box show (relevant error message)
}