如何每天对C#asp.net的变量产生影响

时间:2017-06-15 08:11:46

标签: c# asp.net

我有一个数据库,里面有一些价格。例如,我有牛奶= 1€。 我希望价格不要修改多于或少于10%。因此,在这种情况下,您可以将价格设置在0.90或1.10之间。这很容易做到,但是,当价格被修改后,用户可以立即再次修改它。 (如果他将其设置为0.9,那么他可以将其设置在0.81和0.99之间等等......)所以我想在变量中影响价格,例如每天早上9点,所以在一天它不能变化多于或少于10%。

DataClassesDataContext db = new DataClassesDataContext();

List<ARTICLE> article = db.ARTICLE.ToList();

for (int i = 0; i < article.Count; i++)
{
    switch (article[i].Name)
    {
        case "Milk":
            if (decimal.Parse(Milk.Text, CultureInfo.InvariantCulture) <= 
                (article[i].Price/ 10) * 11 && decimal.Parse(Milk.Text,
                 CultureInfo.InvariantCulture) >= (article[i].Price/ 10) * 9)
            {
                if (decimal.Parse(Milk.Text, CultureInfo.InvariantCulture) != article[i].Price)
                {
                    article[i].Price= decimal.Parse(Milk.Text, CultureInfo.InvariantCulture);
                }
            }
            break;
        case "Other thing":
            //... etc
     }
}

5 个答案:

答案 0 :(得分:3)

所以你想:

  • 保存每天的起始价格
  • 允许用户在N%
  • 的阈值内更改当天的价格
  • 允许用户每天多次更改价格(以修正更正,或者只要总差异

然后在更改每日价格后,检查它与基准价格的差异是否超过N%。

要解决此问题,您需要使用三列:DailyPriceCurrentPricePriceModified。然后编辑价格:

if (record.PriceModified.Date != DateTime.Now.Date)
{
    // First edit for today. 
    if (PriceWithinChangeThreshold(formData.NewPrice, record.CurrentPrice))
    {       
        // Save the old price as the new start price for today
        record.DailyPrice = record.CurrentPrice;
        record.CurrentPrice = formData.NewPrice;
        record.PriceModified = DateTime.Now;
    }
}
else
{
    // This price has already been edited today.
    if (PriceWithinChangeThreshold(formData.NewPrice, record.DailyPrice))
    {
        // But it's within the threshold for today
        record.CurrentPrice = formData.NewPrice;
        record.PriceModified = DateTime.Now;
    }   
}

但正如评论中所讨论的那样,将价格保存为十进制列通常是一个坏主意。考虑(历史)报告,发票,税收,货币等等:“产品价格”方式多于一个数字。所以我建议你以不同的方式存储你的价格。请参阅mjwlls' answer

答案 1 :(得分:2)

一种可能的解决方案是添加PriceHistory表。

然后,每当您保存价格时,检查新价格是否有效,(如果是)将记录添加到PriceHistory表。

检查将是:

SELECT TOP 1 MostRecentPrice
FROM PriceHistory
WHERE Item = 'Milk' and PriceDateTime < 'Today's Date (with midnight as the time)'
ORDER BY PriceDateTime DESC

然后验证您保存的新价格是否在MostRecentPrice的10%以内。此外,请确保您处理没有近期价格的情况(即这是您第一次保存物品的价格)。

这样做的另一个好处是,它不仅可以解决您当前的问题,还可以随着时间的推移为您提供有价值的信息。 “3周前牛奶的价格是多少?”那种事。

另外,您可以合理地简单地更改验证规则 - 例如,您可以说“每天10%的价格变化或每周20%的价格变化” - 如果您不这样做,您就无法轻易做到存储完整的历史。

答案 2 :(得分:1)

您可以保存上次修改日期时间,并可以在每次更改时对其进行验证。

答案 3 :(得分:0)

您可以在所有Articles中引入class Article { DateTime LastModified { get; set; } } ... foreach(var article in articles) { var timespan = DateTime.Now - article.LastModified; if(timeSpan.TotalDays >= 1) ... } 成员。因此,您知道是否可以修改当前产品:

a

答案 4 :(得分:0)

创建一个类似&#34; LastModified&#34;的列。作为表中的DateTime。并在检查&#34; LastModified&#34;的日期和月份后启用按钮进行修改。与今天的日期不一样。

它无法在应用程序本身中完成,或者您需要在服务器上运行的某些内容,您可以使用Web服务或任何内容进行查询。

如果您无法修改表格,可能会创建一个上次修改日期的本地文件,但用户可以修改它,所以要小心。