0%

csharp 利用饼型图分析产品市场占有率

  • 来源:明日科技
  • 利用饼型图分析产品市场占有率

    实例说明

    开发商品销售管理系统过程中,为了清晰了解产品在市场上的占有率,使用饼图分析产品市场占有率是最佳的选择。本实例通过利用饼型图分析某电子产品市场占有率,实例运行效果如图1所示。
    图1 利用饼型图分析产品市场占有率

    关键技术

    本实例在实现时,首先通过SQL语句统计商品在市场的占有率,并将其字段名与数量存放于Hashtable哈希表中,然后遍历“哈希表”计算出每种商品所占的比例,最后通过Graphics类的FillPie方法绘制饼型图。

    设计过程

    (1)打开Visual Studio 2008开发环境,新建一个Windows窗体应用程序,命名为CAnalyseGoodsScale。
    (2)更改默认窗体Form1的Name属性为Frm_Main,在该窗体中添加两个Panel控件,分别用来显示绘制的饼型图和说明信息。
    (3)程序主要代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    private void showPic(float f,Brush B)
    {
    Graphics g = this.panel1.CreateGraphics();//通过panel1控件创建一个Graphics对象
    if (TimeNum == 0.0f)
    {
    g.FillPie(B, 0, 0, this.panel1.Width, this.panel1.Height, 0, f * 360);//绘制扇形
    }
    else
    {
    g.FillPie(B, 0, 0, this.panel1.Width, this.panel1.Height, TimeNum, f * 360);
    }
    TimeNum += f * 360;
    }
    private void Form1_Paint(object sender, PaintEventArgs e) //在Paint事件中绘制窗体
    {
    ht.Clear();
    Conn(); //连接数据库
    Random rnd = new Random(); //生成随机数
    using (cmd = new SqlCommand("select t_Name,sum(t_Num) as Num from tb_14 group by t_Name", con))
    {
    Graphics g2 = this.panel2.CreateGraphics(); //通过panel2控件创建一个Graphics对象
    SqlDataReader dr = cmd.ExecuteReader(); //创建SqlDataReader对象
    while (dr.Read())//读取数据
    {
    ht.Add(dr[0],Convert.ToInt32(dr[1])); //将数据添加到Hashtable中
    }
    float[] flo = new float[ht.Count];
    int T = 0;
    foreach (DictionaryEntry de in ht)//遍历Hashtable
    {
    flo[T] = Convert.ToSingle((Convert.ToDouble(de.Value) / SumNum).ToString().Substring(0, 6));
    Brush Bru = new SolidBrush(Color.FromArgb(rnd.Next(255), rnd.Next(255), rnd.Next(255)));
    //绘制商品及百分比
    g2.DrawString(de.Key + " " + flo[T] * 100 + "%", new Font("Arial", 8, FontStyle.Regular), Bru, 7, 5 + T * 18);
    showPic(flo[T], Bru); //调用showPic方法绘制饼型图
    T++;
    }
    }
    }

    秘笈心法

    心法领悟013:使用Paint事件实现窗体或控件的重绘!
    当重绘窗体或控件时会引发其Paint事件,该事件将PaintEventArgs的实例传递给用来处理Paint事件的方法,从而实现窗体或控件的重绘。

    觉得文章有用?请我喝杯咖啡~