using System;
          using System.Collections.Generic;
          using System.Text;
          using BestCut.Classes;
          using System.Windows.Forms;
          using System.Windows;
          using System.Text;
          using System.Text.RegularExpressions;
          using System.Collections;
          using System.Data;
          namespace BestCut
          {
             public class ManagePage : System.Windows.Forms.Form
              {
                  private DbAccess _db;
                  public DbAccess db
                  {

                      get
                      {
                          if (_db == null)
                          {
                              _db = new DbAccess();
                          }
                          return _db;
                      }
                  }
                 public string CheckString(string str)
                 {
                     return str.Replace("'","''");
                 }
                 /// <summary>
                 /// 檢查小數格式
                 /// </summary>
                 /// <param name="sender"></param>
                 /// <param name="e"></param>
                 public void KeyUpCheckNum(object sender, KeyEventArgs e)
                 {
                    // MessageBox.Show("該項不是數據格式!!");
                     ((TextBox)sender).Text = Regex.Replace(((TextBox)sender).Text, "[^\\d\\u002E]+", "");
                     if (Regex.IsMatch(((TextBox)sender).Text, "[\\d]*[\\u002E]?[\\d]*"))
                     {

                     }
                     else
                     {
                         MessageBox.Show("該項不是數據格式!!");
                         ((TextBox)sender).Focus();

                     }
                 }
                 /// <summary>
                 /// 檢查整數
                 /// </summary>
                 /// <param name="sender"></param>
                 /// <param name="e"></param>
                 public void KeyUpCheckInt(object sender, KeyEventArgs e)
                 {
                     ((TextBox)sender).Text = Regex.Replace(((TextBox)sender).Text, "[^\\d]*", "");
                     if (Regex.IsMatch(((TextBox)sender).Text, "\\d*"))
                     {

                     }
                     else
                     {
                         MessageBox.Show("該項不是數據格式!!");
                         ((TextBox)sender).Focus();

                     }
                 }
                 /// <summary>
                 /// 迭代計算
                 /// </summary>
                 /// <param name="dic"></param>
                 /// <param name="sums"></param>
                 /// <param name="res"></param>
                 /// <returns></returns>
                 public Dictionary<string, int> GetResult(Dictionary<string, int> dic,double sums,Dictionary<string,int> res)
                 {
                     Package p = new Package();
                     ArrayList needs = new ArrayList();
                     #region 加載測試數據
                     try
                     {
                         foreach (string str in dic.Keys)
                         {
                             for (int i = 0; i < dic[str]; i++)
                             {
                                 needs.Add(str);
                             }
                         }
                     }
                     catch (Exception ex)
                     {

                         //Console.WriteLine(ex.Message);
                     }

           


                     #endregion

                     //從大到小排序
                     IComparer myComperMethod = new comperOne();
                     needs.Sort(myComperMethod);


                     //迭代方法
                     for (int i = 0; i < needs.Count; )
                     {
                         string result = string.Empty;
                         double temp = double.Parse(needs[i].ToString().Split('-')[0]);
                         ArrayList tempResult = new ArrayList();
                         tempResult.Add(needs[i]);
                         needs.RemoveAt(i);

                         for (int j = 0; j < needs.Count; )
                         {
                             if (temp + double.Parse(needs[j].ToString().Split('-')[0]) > sums)
                             {
                                 j++;
                             }
                             else
                             {
                                 temp += double.Parse(needs[j].ToString().Split('-')[0]);
                                 tempResult.Add(needs[j]);

                                 needs.RemoveAt(j);
                             }
                         }

                         //記錄結果
                         for (int k = 0; k < tempResult.Count; k++)
                         {
                             result += tempResult[k].ToString() + ",";
                         }
                         result = result.Trim(',');

                         result = p.stringFormat(result);

                         if (res.ContainsKey(result))
                         {
                             res[result]++;
                         }
                         else
                         {
                             res.Add(result, 1);
                         }

                       
                     }
                     return res;
                 }
                 /// <summary>
                 ///
                 /// </summary>
                 /// <param name="str"></param>
                 /// <returns></returns>
                 public double Sums(string str)
                 {
                     string[] temp = str.Split(',');
                     double sum= 0;
                     try
                     {
                         for (int i = 0; i < temp.Length; i++)
                         {
                             sum += Convert.ToDouble(temp[i].Split('-')[0]);
                         }
                     }
                     catch
                     {

                         sum = 0;
                     }
                
                     return sum;
                 }
                 public DataTable getDataPart(string str)
                 {
                     Dictionary<string, int> dics = new Dictionary<string, int>();
                     string[] temp = str.Split(',');
                     foreach (string tempstr in temp)
                     {
                         if (dics.ContainsKey(tempstr))
                         {
                             dics[tempstr]++;
                         }
                         else
                         {
                             dics.Add(tempstr,1);
                         }
                     }
                    
                     DataTable dt = new DataTable();
                     dt.Columns.Add("Gid");
                     dt.Columns.Add("PLength");
                     dt.Columns.Add("PCount");
                     dt.Columns.Add("P45");
                     dt.Columns.Add("P45Both");
                     dt.Columns.Add("PWidth");
                     int j = 0;
                     double d = 0;
                     string tempLength = "";
                     string temp45 = "";
                     string temp45Both = "";
                     string tempWidth = "";
                   foreach(string tempdic in dics.Keys)
                   {
                      
                       DataRow dr = dt.NewRow();
                       dr["Gid"] = (++j).ToString();
                       tempLength = tempdic.Split('-')[0];
                       temp45 = tempdic.Split('-')[1].ToLower();
                       temp45Both = tempdic.Split('-')[2].ToLower();
                       tempWidth = tempdic.Split('-')[3];
                       double.TryParse(tempLength, out d);
                       dr["PLength"] = temp45 == "true" ? (temp45Both == "true" ? (d - 5 - (double.Parse(tempWidth)*2)) : (d - 5 - double.Parse(tempWidth))) : (d - 5); ;
                       dr["PCount"] = (dics[tempdic]).ToString();
                       dr["P45"] = temp45 == "true"?("是"):("否");
                       dr["P45Both"] = temp45Both == "true" ? ("是") : ("否");
                       dr["PWidth"] = tempWidth;
                       dt.Rows.Add(dr);
                   }
                    
                   return dt;


                 }
                 /// <summary>
                 /// 獲取信息
                 /// </summary>
                 /// <param name="str"></param>
                 /// <returns></returns>
                 public string getStrDetail(string str)
                 {
                     string tempLength = "";
                     string temp45 = "";
                     string temp45Both = "";
                     string tempWidth = "";
                     double d = 0;
                     tempLength = str.Split('-')[0];
                     temp45 = str.Split('-')[1].ToLower();//=="true"?("是"):("不是");
                     temp45Both = str.Split('-')[2].ToLower();//=="true"?("是"):("不是");
                     tempWidth = str.Split('-')[3];
                      double.TryParse(tempLength,out d);
                      d = d-5;
                      d=temp45 == "true" ? (temp45Both == "true" ? (d - 5 - (double.Parse(tempWidth)*2)) : (d - 5 - double.Parse(tempWidth))) : (d - 5);

                      return string.Format("{0}mm{1}{2}", d.ToString(), temp45 == "true" ? (temp45Both == "true" ? ("---◢▆◣") : ("--◢▆")) : (""), tempWidth == "0" ? ("") : (string.Format("{0}{1}{2}","--" , tempWidth ,"mm角度寬")));
                 }
                 /// <summary>
                 /// 獲取型材信息
                 /// </summary>
                 /// <param name="str"></param>
                 /// <returns></returns>
                 public string getDataPartDetail(string str)
                 {
                     StringBuilder tempsb = new StringBuilder();
                     Dictionary<string, int> dics = new Dictionary<string, int>();
                     string[] temp = str.Split(',');
                     foreach (string tempstr in temp)
                     {
                         if (dics.ContainsKey(tempstr))
                         {
                             dics[tempstr]++;
                         }
                         else
                         {
                             dics.Add(tempstr, 1);
                         }
                     }

                
                     int j = 0;
                     double d = 0;
                     ArrayList al = new ArrayList();
                     foreach (string tempdic in dics.Keys)
                     {
                         al.Add(new Model(tempdic, dics[tempdic]));
                         //tempsb.AppendFormat("{0}個{1}mm\n",dics[tempdic].ToString(),tempdic);
                     
                     }
                     al.Sort(new myCompare());
                     foreach (object o in al)
                     {
                         Model m = (Model)o;
                         tempsb.AppendFormat("{0}個{1}\n", m.Sum.ToString(), getStrDetail(m.Lists));
                     }

                     return tempsb.ToString();


                 }
             }
              public class Model
              {
                  private string _Lists;
                  private double _Sum;
                  public string Lists
                  {
                      get { return _Lists; }
                      set { _Lists = value; }
                  }
                  public double Sum
                  {
                      get { return _Sum; }
                      set { _Sum = value; }
                  }
                  public Model(string lists, double sum)
                  {
                      this.Lists = lists;
                      this.Sum = sum;
                  }
              }
              //排序方法
              public class comper : IComparer
              {
                  int IComparer.Compare(object a, object b)
                  {
                      float flotA = 0, flotB = 0;
                      bool isFloat = float.TryParse(a.ToString(), out flotA) && float.TryParse(b.ToString(), out flotB);
                      if (!isFloat)
                      {
                          return -string.Compare(a.ToString(), b.ToString(), false);
                      }
                      else
                      {
                          return flotA == flotB ? 0 : (flotA > flotB ? -1 : 1);
                      }
                  }
              }
              //排序方法
              public class comperOne : IComparer
              {
                  int IComparer.Compare(object a, object b)
                  {
                      float flotA = 0, flotB = 0;
                      bool isFloat = float.TryParse(a.ToString().Split('-')[0], out flotA) && float.TryParse(b.ToString().Split('-')[0], out flotB);
                      if (!isFloat)
                      {
                          return -string.Compare(a.ToString(), b.ToString(), false);
                      }
                      else
                      {
                          return flotA == flotB ? 0 : (flotA > flotB ? -1 : 1);
                      }
                  }
              }
              //排序降序方法
              public class comperSort : IComparer
              {
                  int IComparer.Compare(object a, object b)
                  {
                      float flotA = 0, flotB = 0;

                      bool isFloat = float.TryParse(((System.Windows.Forms.DataGridViewRow)a).Cells[2].Value.ToString(), out flotA) && float.TryParse(((System.Windows.Forms.DataGridViewRow)b).Cells[2].Value.ToString(), out flotB);
                      return (int)(flotA - flotB);
                  }
              }

              public class myCompare : IComparer
              {
                  int IComparer.Compare(object x, object y)
                  {
                      return (int)((((Model)y).Sum - ((Model)x).Sum) * 100);
                  }

              }
              public class myLenCompare : IComparer
              {
                  int IComparer.Compare(object x, object y)
                  {
                      return x.ToString().Length - y.ToString().Length;
                      // return ((Model)x).Lists.ToString().Length - ((Model)y).Lists.ToString().Length;
                  }

              }
              public class Package
              {
                  public double[] goods;
                  public double dmin;
                  double tempsum;
                  // public List<Model> lists = new List<Model>();
                  public ArrayList lists = new ArrayList();
                  public ArrayList listsModel = new ArrayList();

                  public void Init(double sum, double[] goods)
                  {
                      tempsum = sum;
                      this.goods = goods;
                      ArrayList al = new ArrayList();
                      foreach (double d in goods)
                      {
                          al.Add(d);
                      }
                      al.Sort();
                      dmin = (Double)al[0];
                  }
                  /// <summary>
                  /// 用遞歸算出
                  /// </summary>
                  /// <param name="puts">目前放入背包的數</param>
                  /// <param name="unPuts">可放入背包的數</param>
                  /// <param name="sum">背包還剩的容量</param>
                  public void ShowComposes(List<double> puts, double[] unPuts, double sum)
                  {
                      //輸出當前放入背包符合條件的所有數
                      bool exist = false;
                      double sums = 0;
                      string temp = "";

                      foreach (double d in puts)
                      {
                          temp += d.ToString() + ",";
                          //System.Console.Write(d + " ");
                          sums += d;
                          exist = true;
                      }
                      if (exist)
                      {
                          if (sums + dmin > tempsum)
                          {
                              try
                              {
                                  lists.Add(new Model(temp.Trim(','), sums));

                              }
                              catch (Exception ex)
                              {

                                  Console.WriteLine(ex.Message);
                              }

                          }
                          System.Console.Write("=" + sums);
                          System.Console.WriteLine();
                      }

                      //在可放入背包的數字中,選擇可放的數并放進背包
                      foreach (double d in unPuts)
                      {
                          if (d < sum)
                          {
                              List<double> newPuts = puts.GetRange(0, puts.Count);//.ToList<double>();
                              newPuts.Add(d);
                              ShowComposes(newPuts, goods, sum - d);
                          }
                      }
                      // System.Console.WriteLine(dmin.ToString());
                  }
                  /// <summary>
                  ///
                  /// </summary>
                  public void getBest()
                  {
                      lists.Sort(new myCompare());
                      foreach (Model m in lists)
                      {

                          bool state = false;
                          foreach (double dtemp in goods)
                          {
                              if (dtemp >= (tempsum / 2 - 1))
                              {
                                  state = m.Lists.IndexOf(dtemp.ToString()) > 0;
                                  if (state)
                                      break;
                              }
                          }
                          if (state)
                          {
                              listsModel.Add(new Model(m.Lists, m.Sum));
                              //  Console.WriteLine("zun={0}----sum={1}", m.Lists, m.Sum.ToString());
                          }


                      }
                  }
                  public string stringFormat(string t1)
                  {
                      //
                      string[] tempNum = t1.Split(',');
                      //ArrayList tempal = new ArrayList();
                      //foreach (string t in tempNum)
                      //{
                      //    tempal.Add(t);
                      //}
                      //tempal.Sort();
                      t1 = "";
                      Array.Sort(tempNum);
                      foreach (string t in tempNum)
                      {
                          t1 += t + ",";
                      }
                      return t1.Trim(',');
                  }
                  public Dictionary<ArrayList, string> sortDistinct()
                  {
                      ArrayList tempAl = new ArrayList();
                      ArrayList al = new ArrayList();

                      foreach (object o in listsModel)
                      {
                          Model m = (Model)o;
                          m.Lists = stringFormat(m.Lists);
                          tempAl.Add(m);


                      }


                      foreach (object o in tempAl)
                      {
                          if (!al.Contains(((Model)o).Lists))
                          {
                              al.Add(((Model)o).Lists);
                          }

                      }
                      al.Sort(new myLenCompare());
                      ArrayList alo = new ArrayList();
                      ArrayList tempal = null;
                      Dictionary<ArrayList, string> dicCon = new Dictionary<ArrayList, string>();
                      foreach (object o in al)
                      {
                          // Console.WriteLine(o.ToString() + "----");
                          tempal = new ArrayList();
                          string[] array = o.ToString().Split(',');
                          Dictionary<string, int> dicCount = new Dictionary<string, int>();
                          foreach (string s in array)
                          {
                              if (!dicCount.ContainsKey(s))
                                  dicCount.Add(s, 1);
                              else
                                  dicCount[s]++;
                          }
                          foreach (string s in dicCount.Keys)
                          {
                              tempal.Add(new Model(s, dicCount[s]));
                          }

                          dicCon.Add(tempal, o.ToString());

                      }

                      return dicCon;

                  }
              }
          }

          posted on 2009-03-24 11:22 sanmao 閱讀(227) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          常用鏈接

          留言簿(5)

          隨筆分類

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 中西区| 册亨县| 阿克| 麻阳| 闻喜县| 文昌市| 聂拉木县| 项城市| 喀喇| 沂南县| 鲜城| 贺兰县| 巩义市| 河曲县| 东明县| 商丘市| 台南市| 岫岩| 城固县| 泾源县| 梁河县| 巴东县| 资溪县| 乌兰察布市| 濮阳县| 金山区| 张北县| 中西区| 屏山县| 凤阳县| 清河县| 南和县| 城口县| 唐山市| 平南县| 定南县| 聂拉木县| 梨树县| 常宁市| 盈江县| 泾川县|