/*
         * 验证过程
         * 1. 取出菜肴名称
         * 2. 在常用菜肴table里面查找对应的各种原料,认为用量单位是克
         * 3. 通过查询营养维护table,计算出每种原料含有的营养素,认为营养维护table是100g对应的营养素
         * 4. 验证每个营养素是否在合理的区间,返回结果
         */
        private Boolean verfiyOneDaySPList(List <string> list, ScopeDouble能量 scopeDouble能量)
        {
            原料营养值 营养值 = new 原料营养值();

            foreach (string item in list)
            {
                string 菜肴名称 = item;

                原料营养值 营养值1 = get营养值By菜肴名称(菜肴名称);
                营养值.糖   += 营养值1.糖;
                营养值.脂肪  += 营养值1.脂肪;
                营养值.蛋白质 += 营养值1.蛋白质;
            }

            // TODO: hacker
            营养值.蛋白质 *= 6;
            营养值.脂肪  *= 40;
            营养值.糖   *= 60;

            if (((scopeDouble能量.d蛋白质start.start <= 营养值.蛋白质) && (营养值.蛋白质 <= scopeDouble能量.d蛋白质end.end)) &&
                ((scopeDouble能量.d脂肪start.start <= 营养值.脂肪) && (营养值.脂肪 <= scopeDouble能量.d脂肪end.end)) &&
                ((scopeDouble能量.d糖start.start <= 营养值.糖) && (营养值.糖 <= scopeDouble能量.d糖end.end)))
            {
                return(true);
            }
            else
            {
                /*
                 * Console.WriteLine("" + scopeDouble能量.d蛋白质start.start + "<=" + 蛋白质总合 + "<=" + scopeDouble能量.d蛋白质end.end + "|"
                 + scopeDouble能量.d脂肪start.start + "<=" + 脂肪总合 + "<=" + scopeDouble能量.d脂肪end.end + "|"
                 + scopeDouble能量.d糖start.start + "<=" + 糖总合 + "<=" + scopeDouble能量.d糖end.end + "+"
                 + (scopeDouble能量.d蛋白质start.start / 蛋白质总合) + "->" + (scopeDouble能量.d蛋白质end.end / 蛋白质总合) + "|"
                 + (scopeDouble能量.d脂肪start.start / 脂肪总合) + "->" + (scopeDouble能量.d脂肪end.end / 脂肪总合) + "|"
                 + (scopeDouble能量.d糖start.start / 糖总合) + "->" + (scopeDouble能量.d糖end.end / 糖总合)
                 +  );
                 + //*/

                Console.WriteLine("" + (int)(scopeDouble能量.d蛋白质start.start / 营养值.蛋白质) + "->" + (int)(scopeDouble能量.d蛋白质end.end / 营养值.蛋白质) + "|"
                                  + (int)(scopeDouble能量.d脂肪start.start / 营养值.脂肪) + "->" + (int)(scopeDouble能量.d脂肪end.end / 营养值.脂肪) + "|"
                                  + (int)(scopeDouble能量.d糖start.start / 营养值.糖) + "->" + (int)(scopeDouble能量.d糖end.end / 营养值.糖)
                                  );
                return(false);
            }
        }
        /*
         * 食谱生成过程
         * 1. 根据每人每天的劳动强度获取对应的能量和营养供应量
         * 2. 分配能量配比:蛋白质占11%~13%,脂肪20%~30%,糖55%~65%
         * //*/
        private void getOneWeekSPList(List <string> list常用菜肴, DataRow dr)
        {
            // 获取每天劳动强度对应的能量和营养供应量
            string[]    能量     = get能量(comboBox8.Text);
            double      dstart = Convert.ToDouble(能量[0]);
            double      dend   = Convert.ToDouble(能量[2]);
            ScopeDouble d能量    = new ScopeDouble(dstart, dend);

            ScopeDouble能量 scopeDouble能量 = new ScopeDouble能量();

            scopeDouble能量.d蛋白质start = new ScopeDouble(d能量.start * 0.11, d能量.start * 0.13);
            scopeDouble能量.d蛋白质end   = new ScopeDouble(d能量.end * 0.11, d能量.end * 0.13);

            scopeDouble能量.d脂肪start = new ScopeDouble(d能量.start * 0.20, d能量.start * 0.30);
            scopeDouble能量.d脂肪end   = new ScopeDouble(d能量.end * 0.20, d能量.end * 0.30);

            scopeDouble能量.d糖start = new ScopeDouble(d能量.start * 0.55, d能量.start * 0.65);
            scopeDouble能量.d糖end   = new ScopeDouble(d能量.end * 0.55, d能量.end * 0.65);

            int offset = 1;

            for (int i = 0; i < 7; i++)
            {
                List <string> list;
                do
                {
                    list = getOneDaySPList(list常用菜肴);
                }while (!verfiyOneDaySPList(list, scopeDouble能量));

                foreach (string item in list)
                {
                    string 序号   = "菜肴" + offset++;
                    string 菜肴名称 = item;

                    dr[序号] = 菜肴名称;
                }
            }
        }