`

根据总用量计算每种包装规格的购买量和总价

阅读更多

  

  最近有这么一个需求,就是给出客户需要的总量,然后根据数据库记录的包装规格,计算出客户需要购买的包装规格种类和个数,而且要保证客户的花费最小。

  示例图片效果

  示例代码实现如下。欢迎大家一起讨论。

  

代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->using System;
using System.Collections.Generic;
using System.Linq;
using System.
Text;
using System.Web.Security;
using System.Reflection;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string
[] args)
        {

            
decimal area = 110;
            Console.WriteLine("你的土地面积是:{
0}", area);
            
decimal amount = 10m;
            Console.WriteLine("你的每亩用量是是:{
0}", amount);
            
decimal budget = 0;

            
decimal budgetMin = 0;

            List
<product> products = new List<product>();
            product product1 
= new product()
            {
                Id 
= 1,
                Name 
= "土豆",
                PkgSpecs 
= new List<pkgspec>(){
                  new pkgspec() { amount 
= 202, price = 120, id = 2 },
                  new pkgspec() { amount 
= 300, price = 40, id = 1 },
                  new pkgspec() { amount 
= 250, price = 80, id = 3 }}
            };
            product1.PkgSpecs.Sort(new Comparison
<pkgspec>(compareAmountDesc));
            products.
Add(product1);

            product product2
= new product (){ Id=1, Name="白菜", PkgSpecs =new List<pkgspec>(){
                  new pkgspec() { amount 
= 200, price = 180, id = 2 },
                  new pkgspec() { amount 
= 100, price = 100, id = 1 },
                  new pkgspec() { amount 
= 250, price = 250, id = 3 }}};
            product2.PkgSpecs.Sort(new Comparison
<pkgspec>(compareAmountDesc));
            products.
Add(product2);

            product  product3
= new product (){ Id=1, Name="萝卜", PkgSpecs =new List<pkgspec>(){
                  new pkgspec() { amount 
= 200, price = 210, id = 2 },
                  new pkgspec() { amount 
= 100, price = 150, id = 1 },
                  new pkgspec() { amount 
= 250, price = 220, id = 3 }}};
            product3.PkgSpecs.Sort(new Comparison
<pkgspec>(compareAmountDesc));
            products.
Add(product3);

            
//全部商品需要的购买规格和预算
            List
<productSelect> proselects = new List<productSelect>();
            
//最终选中的商品
            productSelect proselect 
= null;
            
//从一个商品选中的包装
            List
<pkgselect> pkgselect = null;
            
//总共的用量
            
decimal totalAmount = area * amount;
           
            Console.WriteLine("你的总共用量是:{
0}", totalAmount);
            
//选中的包装个数
            
int num = 0;
           
            foreach (product p 
in products)
            {
                
//计算一个商品包装规格及用量
                budget
=0;
                totalAmount 
= area * amount;
                pkgselect 
= new List<pkgselect>();
                proselect 
= new productSelect()
                {
                    Id 
= p.Id,
                    PkgSpecs 
= new List<pkgselect>(),
                    Budget 
= budget,
                    Name 
= p.Name
                };
                                    
                foreach (pkgspec pkg 
in p.PkgSpecs )
                {
                    
if (totalAmount % pkg.amount == totalAmount)
                    {
                        num 
= 1;
                        budget 
+= num * pkg.price;
                        pkgselect.
Add(new pkgselect() { id = pkg.id, num = num, price = pkg.price });
                        
break;
                    }
                    
else if (totalAmount % pkg.amount == 0)
                    {
                        num 
= (int)(totalAmount / pkg.amount);
                        budget 
+= num * pkg.price;
                        pkgselect.
Add(new pkgselect() { id = pkg.id, num = (int)(totalAmount / pkg.amount), price = pkg.price });
                        
break;
                    }
                    
else
                    {
                        num 
= (int)(totalAmount / pkg.amount);
                        budget 
+= num * pkg.price;
                        pkgselect.
Add(new pkgselect() { id = pkg.id, num = num, price = pkg.price });
                        totalAmount 
= totalAmount - num * pkg.amount;
                        
continue;
                    }
                }
                proselect.PkgSpecs 
= pkgselect;
                proselect.Budget 
= budget;
                proselects.
Add(proselect);
            }
            proselects.Sort(compareBudgetAsc);


            foreach (productSelect s 
in proselects)
            {
                Console.WriteLine("商品 {
0} 需要 {1} 个包装规格,总价是 {2}", s.Name, s.PkgSpecs.Count, s.Budget);
            }
            Console.WriteLine("最便宜的是商品 {
0} ", proselects[0].Name);

            foreach (pkgselect s 
in proselects[0].PkgSpecs)
            {
                Console.WriteLine("\t规格 {
0} , 单价 {1}, 需要购买的数量 {2}", s.id, s.price, s.num);
            }
            Console.ReadLine();
        }
        
/// <summary>
        
/// 从低到高
        
/// </summary>
        
/// <param name="pkg1"></param>
        
/// <param name="pkg2"></param>
        
/// <returns></returns>
        private static 
int compareAmountAsc(pkgspec pkg1, pkgspec pkg2)
        {
            
if (pkg1.amount > pkg2.amount)
                
return 1;
            
if (pkg1.amount < pkg2.amount)
                
return -1;
            
else
                
return 0;
        }
        
/// <summary>
        
/// 从高到低
        
/// </summary>
        
/// <param name="pkg1"></param>
        
/// <param name="pkg2"></param>
        
/// <returns></returns>
        private static 
int compareAmountDesc(pkgspec pkg1, pkgspec pkg2)
        {
            
if (pkg1.amount < pkg2.amount)
                
return 1;
            
if (pkg1.amount > pkg2.amount)
                
return -1;
            
else
                
return 0;
        }
        
/// <summary>
        
/// 从低到高
        
/// </summary>
        
/// <param name="pkg1"></param>
        
/// <param name="pkg2"></param>
        
/// <returns></returns>
        private static 
int compareBudgetAsc(productSelect pro1, productSelect pro2)
        {
            
if (pro1.Budget > pro2.Budget) return 1;
            
if (pro1.Budget < pro2.Budget)
                
return -1;
            
else
                
return 0;
        }
        
/// <summary>
        
/// 从高到低
        
/// </summary>
        
/// <param name="pkg1"></param>
        
/// <param name="pkg2"></param>
        
/// <returns></returns>
        private static 
int compareBudgetDesc(productSelect pro1, productSelect pro2)
        {
            
if (pro1.Budget < pro2.Budget) return 1;
            
if (pro1.Budget > pro2.Budget)
                
return -1;
            
else
                
return 0;
        }
    }
    
/// <summary>
    
/// 选中的包装
    
/// </summary>
    class pkgselect
    {
        
/// <summary>
        
/// 选中ID
        
/// </summary>
        
public int id;
        
/// <summary>
        
/// 购买数量
        
/// </summary>
        
public int num;
        
/// <summary>
        
/// 单价
        
/// </summary>
        
public decimal price;
    }
    
/// <summary>
    
/// 包装类型
    
/// </summary>
    class pkgspec : IComparable
<pkgspec>
    {
        
/// <summary>
        
/// 编号
        
/// </summary>
        
public int id;
        
/// <summary>
        
/// 包装量
        
/// </summary>
        
public decimal amount;
        
/// <summary>
        
/// 价格
        
/// </summary>
        
public decimal price;

        #region IComparable
<pkgspec> Members
        
/// <summary>
        
/// List<pkgspec>.Sort()默认从低到高
        
/// </summary>
        
/// <param name="other"></param>
        
/// <returns></returns>
        
public int CompareTo(pkgspec other)
        {
            
if (this.amount > other.amount)
                
return 1;
            
if (this.amount == other.amount)
                
return 0;
            
else
                
return -1;
        }

        #endregion
    }
    
/// <summary>
    
/// 代售商品
    
/// </summary>
    class product
    {
        
/// <summary>
        
/// 商品ID
        
/// </summary>
        
public int Id { set; get; }
        
/// <summary>
        
/// 商品名称
        
/// </summary>
        
public string Name { set; get; }
        
/// <summary>
        
/// 商品包装规格
        
/// </summary>
        
public List<pkgspec> PkgSpecs { set; get; }
    }
    
/// <summary>
    
/// 选中的商品
    
/// </summary>
     class productSelect : IComparable
<productSelect>
    {
/// <summary>
        
/// 商品ID
        
/// </summary>
        
public int Id { set; get; }
        
/// <summary>
        
/// 商品名称
        
/// </summary>
        
public string Name { set; get; }
        
/// <summary>
        
/// 需要购买的包装规格
        
/// </summary>
        
public List<pkgselect> PkgSpecs { set; get; }
        
/// <summary>
        
/// 总价
        
/// </summary>
        
public decimal Budget { get; set; }

        #region IComparable
<productSelect> Members
         
/// <summary>
        
/// List<productSelect>.Sort()默认从低到高
         
/// </summary>
         
/// <param name="other"></param>
         
/// <returns></returns>
        
public int CompareTo(productSelect other)
        {
            
if (this.Budget > other.Budget)
                
return 1;
            
if (this.Budget < other.Budget)
                
return -1;
            
else
                
return 0;
        }

        #endregion
    }
}

 

 

分享到:
评论

相关推荐

    37、某KTV装饰工程量清单报价单.zip

    2. **工程量**:根据设计图纸和技术规范,计算出每项工作的预计数量。这涉及到精确的测量和计算,确保成本估算的准确性。 3. **材料单价**:列出每种材料的价格,包括主材和辅材,如瓷砖、壁纸、木材、电线、插座等...

    三年级应用题专项训练.doc

    在存在多种车型的情况下,需要根据车辆的载重能力和数量计算出每种车型分别需要运输的次数。 3. 装箱问题:这类问题要求将一定数量的物品装入特定规格的箱子中,如电池装箱或月饼装箱。解决这类问题时,需先确定...

    四年级下册数学应用题.doc

    30. **装箱问题**:根据每箱水果的重量和总重量计算所需纸箱数。 31. **植树数量**:根据植树间隔和道路长度求解树的数量。 32. **门票费用**:用总费用除以人数判断是否足够(多种方法:直接除法和估算)。 33. **...

    四川工程量清单计价 招标(#7楼)面积1000多点.rar

    8. **计价软件**:在现代建筑行业中,计价软件如广联达、鲁班等被广泛使用,能够快速、准确地计算工程量和总价,提高工作效率。 9. **法律法规**:整个招标过程需要遵守《中华人民共和国招标投标法》及四川省的相关...

    四年级(下册)数学应用题_计算题复习.doc

    9. 租车方案问题(优化问题):根据每辆车的容量和总人数,设计出最合适的租车组合。 10. 停车费用问题(方程求解):建立两个方程,根据两种车型的费用结构求解停车时间。 11. 除法错误修正问题(除法和验算):...

    EXCEL常用模板-财务模板-预算类-基建预算.zip

    在模板中,需要列出每种材料的规格、数量、单价和总价,以便于跟踪材料成本。Excel的函数功能可以帮助快速计算总价,并且通过公式链接确保数据的一致性。 3. 人工成本:包括工人的工资、福利和其他相关支出。模板...

    小升初数学一课一练-复合应用题闯关-通用版 17页.pdf

    8. 茶叶促销和购买问题:涉及打折和赠品,考察学生对商品促销活动的理解和实际购买量的计算。 9. 出租车费用分摊问题:考察学生对距离和费用计算的理解,并能根据实际情况合理分摊费用。 10. 工作效率和生产计划...

    最新五年级上册数学应用题解答问题训练经典题目(附答案)(3).doc

    8. 油耗和行驶距离的计算:根据现有汽油量、每升油可行驶距离及总路程,计算需要额外添加的汽油量。 9. 工作效率与工作量:草地上割草的问题是一个典型的工程问题,通过工作进度的变化推断人数。 10. 相遇问题与...

    六年级应用题练习(共享用)11.doc

    11. 平均重量问题:通过总重量差计算每箱苹果的重量。 12. 平均采集量计算:总采集量除以班级总数。 13. 工作进度与效率:已工作量加上剩余工作量要在限定时间内完成,求每日平均工作量。 14. 单个商品价格计算:总...

    三年级[上册]数学应用题大全.doc

    38. (1)计算兔子和羊的总售价,(2)购买农药后的余额。 39. 比较单位价格,判断哪种包装的油更便宜。 40. (1)计算价格差,(2)计算2套衣服的总价,对比150元是否足够。 41. 题目要求比较两根铁丝的长度,但...

    小学数学四年级应用题大全.doc

    14. 桔子运输问题,通过每筐的重量和总筐数计算总重量。 15. 割菜问题,用总重量除以人数求平均重量。 16. 电脑购置问题,计算总花费并判断是否足够。 17. 大象和猴子体重问题,通过大象的体重求猴子的体重,可以...

    RF-CZ-LC-02-F01 材料采购预算总表(1).zip

    4. **总价**:材料单价乘以数量得到每种材料的总价,这些总价加起来就是材料采购的总预算。 5. **供应商信息**:可能包含潜在供应商的名字、联系方式,以及他们的报价、交货时间等信息,帮助比较选择最合适的供应商...

    【四年级上册数学】应用题解答问题训练经典题目 (2).doc

    7. 工作效率与工作时间的问题:根据李师傅每天的工作量和总工作量,判断他是否能在规定时间内完成任务。这里涉及工作总量=工作效率×工作时间的公式。 8. 数量与顺序的问题:草莓采摘的数量和顺序不影响总数,只需...

    小数除法解决问题.doc

    16. 对比两种牙刷的单价,计算每种牙刷的平均价格,选择更便宜的。 17. 求儿童画册的单价,用总花费减去科技书花费,再除以画册数量。 18. 求每辆车每天节约的汽油量,总节约量除以车辆数和天数。 19. 不同面积...

    (人)版二年级数学下册应用题200道.doc

    17. 重量单位换算:第18题购买草莓的重量计算,涉及单价和总金额。 18. 种植和计数:第19题计算树木总数,加法和乘法。 19. 学生流动计算:第20题涉及毕业和新招生,加减运算。 20. 日常阅读计划:第21题计算剩余未...

    小数应用题大全- 经典参考.docx

    13. 总价与单价的关系:购买桌椅的费用计算,需要根据已知单价和数量计算总价。 14. 预算管理:李老师活动经费是否足够的判断,通过计算门票和车票的总费用,对比李老师的预算。 15. 最优化问题:购买钢笔最省钱的...

    最新五年级上册数学专题复习 应用题解答问题(含答案).doc

    - 了解商品单价和购买量之间的关系,计算总金额以及找回的零钱。 - 判断给定金额是否足够购买指定的商品组合。 13. **电费计算**: - 根据不同用电量段的收费标准计算电费,可能需要设置并解一元一次方程。 14....

    人教小学六年级数学上册应用题、计算题专项练习总复习-(1).doc

    根据圆的面积公式和周长公式来计算。 4. 比例问题:高档文具盒数量,中档占总数的75%,低档占总数的,可以列出比例关系,从而求出文具盒的总数。 5. 最佳购买策略:对比两家商城的折扣政策,通过计算180只水杯在两...

    四年级数学上册应用题专项训练.doc

    19. **总费用计算**:“两种书的总费用”,分别计算每种书的总费用,再相加。 20. **优惠计算**:“买3棵送1棵,每棵的优惠价”,利用总价除以实际购买的棵数。 21. **工程问题**:“修路队的总工作量”,每天的...

    产品生产情况通知单样式.doc

    13. **单价与总价**:分别计算每个产品单位的价格和整批产品的总价值,用于财务核算。 14. **制造说明**:详细列出生产过程中的特殊要求,如工艺步骤、材料使用等。 15. **纸张尺寸与印刷说明**:对于印刷品,这些...

Global site tag (gtag.js) - Google Analytics