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

How to affect something to a variable each day C# asp.net

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
     }
}


所以你想:

  • 每天节约起始价
  • 允许用户在n%的阈值内更改当天的价格
  • 允许用户一天多次更改价格(修正修正,或在总差额小于n%的情况下增加或减少价格)

然后,在更改每日价格后,检查其与基础价格的差异是否不超过n%。

为了解决这个问题,您可以使用三列:DailyPriceCurrentPricePriceModified。然后编辑价格:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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;
    }  
}

但正如评论中所讨论的,将价格保存为小数列通常是一个坏主意。想想(历史的)报告,发票,税收,货币和其他什么:一个"产品价格"远远超过一个数字。所以我建议把你们的价格以一种完全不同的方式储存起来。见MJWLS的答案。


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

然后,每当您节省一个价格时,您都会检查新价格是否有效,并且(如果是)将一个记录添加到PriceHistory表中。

支票内容如下:

1
2
3
4
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%没有价格变化"-如果不存储完整的历史记录,您就无法轻松做到这一点。


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


在表中创建类似"lastmodified"的列作为datetime。检查"LastModified"的日期和月份是否与今天的日期不同后,启用按钮进行修改。

它不能在应用程序本身中完成,或者您需要一些运行在服务器上的东西,您可以使用WebService或任何时候都可以查询。

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


你可以在你所有的Articles中引入一个lastModified成员。因此,您知道您是否可以修改当前产品:

1
2
3
4
5
6
7
8
9
10
11
12
class Article
{
    DateTime LastModified { get; set; }
}

...

foreach(var article in articles)
{
    var timespan = DateTime.Now - article.LastModified;
    if(timeSpan.TotalDays >= 1) ...
}