- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个自动化应用程序,它允许用户从复选框等中选择选项,并在最后显示费用的价格。
问题是我完成这个申请的方式很别扭。例如,请参阅我的 if else 语句,它们并未涵盖决策的各个方面。
例如,这是我的代码的一部分
private decimal RushesMethod(out decimal radiatorRush_var, out decimal transmissionFlush_var, out decimal both_var)
{
radiatorRush_var = 0m;
transmissionFlush_var = 0m;
both_var = 0m;
if (radiatorRushCheckBox.Checked)
{
radiatorRush_var = 30.00m;
}
else if (transmissionFlushCheckBox.Checked)
{
transmissionFlush_var = 80.00m;
}
else if (radiatorRushCheckBox.Checked && transmissionFlushCheckBox.Checked)
{
radiatorRush_var = 30.00m;
transmissionFlush_var = 80.00m;
both_var = radiatorRush_var + transmissionFlush_var;
}
return both_var + transmissionFlush_var + radiatorRush_var;
}
如果用户选择了 radiatorRushCheckBox.Checked
选项和一些其他选项,但不是这个方法,假设 oilChangeCheckBox.Checked
那么我将如何涵盖所有那个决定。为所有人制作 if else 语句太冗长了,因为谁知道用户选择了什么。
这是如果我选择了所有选项但未显示正确价格时会发生的情况。
这是完整的应用程序代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Automative_APP
{
public partial class automativeForm : Form
{
public automativeForm()
{
InitializeComponent();
}
private void ClearOilLube()
{
oilChangeCheckBox.CheckState = CheckState.Unchecked;
lubeJobCheckBox.CheckState = CheckState.Unchecked;
}
private void ClearFlushes()
{
radiatorRushCheckBox.CheckState = CheckState.Unchecked;
transmissionFlushCheckBox.CheckState = CheckState.Unchecked;
}
private void ClearMisc()
{
inspectionCheckBox.CheckState = CheckState.Unchecked;
replaceMufflerCheckBox.CheckState = CheckState.Unchecked;
tireRotationCheckBox.CheckState = CheckState.Unchecked;
}
private void ClearOthers()
{
partsTextBox.Text = "";
laborTextBox.Text = "";
}
private void ClearFees()
{
serviceLaborAnsLabelBox.Text = "";
partsSummaryAnsLabelBox.Text = "";
taxPartsAnsLabelBox.Text = "";
totalFeesAnsLabelBox.Text = "";
}
private decimal TotalCharges()
{
decimal rushesVar = RushesMethod();
decimal oiLAndLubeVar = OilLubeCharges();
decimal miscVar = MiscMethod();
decimal partsLaborVar = PartsLaborMethod();
decimal storeTaxCharges = TaxCharges();
decimal totalSum;
decimal totalSum1;
totalSum1 = (rushesVar + oiLAndLubeVar + miscVar);
totalSum = (rushesVar + oiLAndLubeVar + miscVar + partsLaborVar);
partsSummaryAnsLabelBox.Text = partsLaborVar.ToString();
partsSummaryAnsLabelBox.Text = partsTextBox.Text;
serviceLaborAnsLabelBox.Text = "Total Services fee is " + " " + totalFeesAnsLabelBox.Text + " " + "and Labor amount is" + " " + laborTextBox.Text;
taxPartsAnsLabelBox.Text = storeTaxCharges.ToString();
return totalSum;
}
private decimal TaxCharges()
{
const decimal PARTS_TAX_VAR = 0.6m;
decimal storeTax;
decimal taxCal;
storeTax = decimal.Parse(partsTextBox.Text);
taxCal = PARTS_TAX_VAR * storeTax;
return taxCal;
}
private decimal PartsLaborMethod()
{
decimal PL=0m;
decimal labor;
decimal totalPL = 0m;
PL = decimal.Parse(partsTextBox.Text);
labor = decimal.Parse(laborTextBox.Text);
totalPL= PL* labor;
return totalPL;
}
private decimal MiscMethod()
{
decimal valueTotal2 = 0m;
if (inspectionCheckBox.Checked && replaceMufflerCheckBox.Checked && tireRotationCheckBox.Checked)
{
valueTotal2 += (15.00m + 100.00m + 20.00m);
}
else if (inspectionCheckBox.Checked)
{
valueTotal2 += 15.00m;
}
else if (replaceMufflerCheckBox.Checked)
{
valueTotal2 += 100.00m;
}
else if (tireRotationCheckBox.Checked)
{
valueTotal2 += 20.00m;
}
return valueTotal2;
}
private decimal RushesMethod()
{
decimal valueTotal = 0m;
if (radiatorRushCheckBox.Checked)
{
valueTotal += 30.00m;
}
else if (transmissionFlushCheckBox.Checked)
{
valueTotal += 80.00m;
}
else if (radiatorRushCheckBox.Checked && transmissionFlushCheckBox.Checked)
{
valueTotal += (80.00m + 30.00m);
}
return valueTotal;
}
private decimal OilLubeCharges()
{
decimal valueTotalOL=0m;
if (oilChangeCheckBox.Checked && lubeJobCheckBox.Checked)
{
valueTotalOL += (26.00m + 18.00m);
}
else if (oilChangeCheckBox.Checked)
{
valueTotalOL += 26.00m;
}
else if (lubeJobCheckBox.Checked)
{
valueTotalOL += 18.00m;
}
return valueTotalOL;
}
private void partsSummaryLabelBox_Click(object sender, EventArgs e)
{
}
private void taxPartsLabelBox_Click(object sender, EventArgs e)
{
}
private void exitButton_Click(object sender, EventArgs e)
{
this.Close(); //close the form
}
private void calculateButton_Click(object sender, EventArgs e)
{
decimal totalStore= TotalCharges();
totalFeesAnsLabelBox.Text = totalStore.ToString();
}
private void clearButton_Click(object sender, EventArgs e)
{
ClearOilLube();
ClearFlushes();
ClearMisc();
ClearOthers();
ClearFees();
}
}
}
EDIT:
问题是这样的,
The application should have the following value-returning methods:
• OilLubeCharges —Returns the total charges for an oil change and/or a lube job, if any.
• FlushCharges —Returns the total charges for a radiator flush and/or a transmission flush, if any.
• MiscCharges —Returns the total charges for an inspection, muffler replacement, and/or a tire rotation, if any.
• OtherCharges —Returns the total charges for other services (parts and labor), if any.
• TaxCharges —Returns the amount of sales tax, if any. Sales tax is 6% and is charged only on parts. If the customer purchases services only, no sales tax is charged.
• TotalCharges —Returns the total charges.
The application should have the following void methods, called when the user clicks the Clear button:
• ClearOilLube —Clears the check boxes for oil change and lube job.
• ClearFlushes —Clears the check boxes for radiator flush and transmission flush.
• ClearMisc —Clears the check boxes for inspection, muffler replacement, and tire rotation.
• ClearOther —Clears the text boxes for parts and labor.
• ClearFees —Clears the labels that display the labels in the section marked Summary
Finally, I did it by using the @OmegaMan's solution. I wanted to post the changes so that it can help anyone
我对 TotalCharges() 方法进行了更改。比较早期的和这个。
private decimal TotalCharges()
{
decimal total = 0.0m;
if ( inspectionCheckBox.Checked)
total += 15.00m;
if (replaceMufflerCheckBox.Checked)
total += 100.00m;
if (tireRotationCheckBox.Checked)
total += 20.00m;
if (oilChangeCheckBox.Checked)
total += 26.00m;
if (lubeJobCheckBox.Checked)
total += 18.00m;
if (radiatorRushCheckBox.Checked)
total += 30.00m;
if (transmissionFlushCheckBox.Checked)
total += 80.00m;
return total;
我还更改了计算按钮点击事件处理程序:
private void calculateButton_Click(object sender, EventArgs e)
{
decimal totalStore= TotalCharges();
decimal taxCharge = TaxCharges();
totalFeesAnsLabelBox.Text = (totalStore + taxCharge).ToString();
taxPartsAnsLabelBox.Text = taxCharge.ToString();
partsSummaryAnsLabelBox.Text = partsTextBox.Text;
serviceLaborAnsLabelBox.Text = "The Total Service charges are" + totalStore + "and Labor is " + laborTextBox.Text;
其余部分相同,逻辑成功。感谢所有做出贡献的人。
最佳答案
在单独的方法中汇总和集中汇总操作,并在进行汇总时检查每个复选框的状态:
public decimal TotalCosts()
{
decimal total = 0.0m;
if ({Oil Changed Checked})
total += {Oil Cost};
if ({Transmission checked})
total += {Transmission total};
if ({Repair Clutch})
total += {Clutch Cost}; // Maybe call a separate method ClutchTotal()?
... { Do this for all check boxes }
return total;
}
不要尝试将不同的操作单独添加在一起(就像您对 both_var = radiatorRush_var + transmissionFlush_var;
所做的那样,那是您的困惑。
有限状态机
我提到了一个有限状态机逻辑,它在组织任何代码时都很有用。
想想一台自动售货机,它必须接受所有不同类型的硬币和美元钞票,并且在提供产品之前它有特定的状态。 通过映射所有状态,然后集中代码来处理每个状态,这将大大减少代码错误和可维护性。
如果向机器中添加一角硬币,状态将从 Welcome
变为汇总当前硬币和美元但不提供产品。在 total > cost 之前,该状态为真,然后 Vend
状态被触发,它会分发产品。在完成 provide any moneys if overpayment
的最后一步之前,它不会返回到 Welcome
状态。
通过设置状态,您可以组织代码来处理您在应用中看到的所有情况。
关于c# - 在程序中实现逻辑时,If else 的更好选择是什么? | C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38295730/
我有一个包含数字和整数的文件,我只想读取整数, 如果它们令人讨厌,请忽略宏,但是我只需要有整数,但是我必须确保还要读取字符串,然后忽略它们 我必须在这里修改什么: #include #include
我有一个这样格式化的txt文件: MyDepartureTown MyDestinationTown 123.45 Vehicle 12 我正在尝试将数据导入到我的 C 程序中。这是我用来实现这一目标
我创建了一个简单的文件,使用 flex,它生成了一个文件 lex.yy.c,现在,我想把它放到 C++ 程序中。 %{ #include %} %% stop printf("Stop co
我的一个程序用 c++ 代码生成一个大文件。有没有办法从另一个C++类调用将生成的代码插入其中? 这是一个小例子,可以清楚地说明我想要实现的目标。 生成的文件示例: FirstClass first
我需要了解我的程序“检查输入十六进制消息的第三个位置” 程序将采用十六进制值输入消息。例如0x0123456789abcdef 程序将检查输入消息的第三个位置,即 0 现在程序将采用另一条十六进制值的
当我将输入从输入文件重定向到 yacc 程序时,在它完成解析文件后,我希望 yacc 解析器打印其所做操作的摘要。如果我通过键盘输入内容然后按 Ctrl+D,我希望它执行相同的操作。有办法做到这一点吗
我正在扫描该文件,但它有两种不同的结构。 文件: ParisRoubaix "Marco MARCATO" 33 UAD ITA 26 5:43:31 ParisRoubaix "Sam BEWLEY
我想将winsock2.lib 添加到我的程序中,但不希望将其包含到最终的可执行文件中。有什么方法可以让我动态加载与winsock2关联的dll吗?如果没有,是否有任何 dll(Windows 附带)
我尝试了一个基本程序来将数据从数据库表检索到java程序中。编译结束后,运行代码时出现异常。控制台中没有显示错误。显示异常消息 import java.sql.*; public class clas
我想用 C++ 创建一个跨平台安装程序。它可以是任何压缩类型,例如 zip 或 gzip,像普通安装程序一样嵌入程序本身。我不想在不同的平台、linux 和 windows 上创建很多更改。如何跨平台
每次尝试用鼠标输入两个顶点时,我都会崩溃。我最近改变了组织每个形状的方式,以确保新形状与旧形状重叠。 这个项目的想法是制作各种交互式 Canvas 。用户可以在直线、三角形和矩形之间进行选择,然后选择
我想在我的程序中显示以下文本。当我在 python 中粘贴以下文本时,它会将反斜杠解释为转义序列并弄乱我的 ascii 艺术..任何解决这个问题的想法极客。这是我的文本想出现在我的节目中 _ _
我正在尝试加载名为 Tut16_ReadText.txt 的文件,并使其运行程序以输出其重或轻。 我收到了粘贴在下面的错误。我无法抽出时间让这个程序运行。谁能解释一下我必须做什么才能使这个程序正常工作
我想使用命令行将列表作为参数传递,例如: $python example.py [1,2,3] [4,5,6] 我希望第一个列表 [1,2,3] 成为 first_list,[4,5,6] 成为 se
在分析 C# 应用程序时,我发现名为“ThePreStub”的系统 (?) 方法中有相当多的 CPU 使用率。这是什么? 最佳答案 参见:CLR Inside out - The Performanc
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 9 年前。 Improve this qu
我正在用 Python 开发一个游戏,想知道如何给它自己的图标。我使用的是 Windows 计算机,没有安装 Python 的额外东西。哦,我也在使用 3.3 版,这甚至可能吗? P.S 我在 Sta
我正在使用 tkinter 使用 Python 开发一个项目,该项目将允许对 IP 地址进行地理定位。我有原始转换,我可以获取 IP 地址并知道城市、州、国家、经度、纬度等。我想知道是否有任何方法可以
我编写了一个程序,您可以在其中选择任意数字并将其与任意数字的幂相关联。代码运行正常,直到它到达某个部分,然后我必须输入一个字符以使其移动到代码的下一部分。这就是我的意思: #include int
我正在编写“HACKING Art Of Exploitation”一书练习 Convert2.c 第 61 页。 这是我的代码。下面是我的问题。 #include void usage(char
我是一名优秀的程序员,十分优秀!