zoukankan      html  css  js  c++  java
  • 图表分析

    1 绘制柱状图

    1.1 建立数据库表

    代码
    create database db_Store;
    create table tb_store(
    sto_id 
    int primary key,
    sto_area 
    float not null,
    sto_name 
    varchar(20not null
    );

    insert into tb_store(sto_id,sto_area,sto_name)
    values(1,900,'仓库1');
    insert into tb_store(sto_id,sto_area,sto_name)
    values(2,800,'仓库1');
    insert into tb_store(sto_id,sto_area,sto_name)
    values(3,700,'仓库1');
    insert into tb_store(sto_id,sto_area,sto_name)
    values(4,1300,'仓库1');
    insert into tb_store(sto_id,sto_area,sto_name)
    values(5,1200,'仓库1');

    1.2 窗体代码

    代码

            
    private void button1_Click(object sender, EventArgs e)
            {
                
    //生成连接数据库字符串
                string ConStr = @"Data Source=YHWY\SQLEXPRESS;Initial Catalog=db_Store;Integrated Security=True";
                
    //定义SQqlConnection对象实例
                SqlConnection Con = new SqlConnection(ConStr);
                Con.Open();
                
    //select查询语句
                string SqlStr = "select sto_id,sto_area from tb_store order by sto_id";
                
    //定义SqlCommand对象实例
                SqlCommand cmd = new SqlCommand(SqlStr, Con);
                
    //定义SqlDataReader对象实例
                SqlDataReader dr = cmd.ExecuteReader();
                
    //定义Bitmap对象实例
                Bitmap bitM=new Bitmap(this.panel1.Width,this.panel1.Height);
                
    //定义Graphics对象实例
                Graphics g = Graphics.FromImage(bitM);
                g.Clear(Color.Yellow);

                
    for (int i = 0; i < 5; i++)
                {
                    g.DrawLine(
    new Pen(new SolidBrush(Color.Blue), 2.0f), 80
                        
    this.panel1.Height - 30 - i * 30this.panel1.Width - 40this.panel1.Height - 30 - i * 30);
                    g.DrawString(Convert.ToString(i 
    * 300), new Font("Times New Roman"15, FontStyle.Regular),
                        
    new SolidBrush(Color.Black), 30this.panel1.Height - 50 - i * 30);
                }

                
    for (int j = 0; j < 5; j++)
                {
                    
    if (dr.Read())
                    {
                        
    int x, y, w, h;
                        
    //绘制图标的横坐标
                        g.DrawString(dr[0].ToString(), new Font("宋体"12, FontStyle.Regular),
                            
    new SolidBrush(Color.Black), 76 + 60 * j, this.panel1.Height - 28);
                        x 
    = 78 + 58 * j;
                        y 
    = this.panel1.Height - 30 - Convert.ToInt32((Convert.ToDouble(Convert.ToDouble(dr[1].ToString()) * 20 / 200)));
                        w 
    = 20;
                        h 
    = Convert.ToInt32(Convert.ToDouble(dr[1].ToString()) * 20 / 200);
                        g.FillRectangle(
    new SolidBrush(Color.FromArgb(25500)), x, y, w, h);
                    }
                }
                
    //在Panel控件上绘制柱状图表
                this.panel1.BackgroundImage = bitM;
            }
            
            
    /*升序与降序差别在于SQL语句不同*/
            
    private void button2_Click(object sender, EventArgs e)
            {
                
    //生成连接数据库字符串
                string ConStr = @"Data Source=YHWY\SQLEXPRESS;Initial Catalog=db_Store;Integrated Security=True";
                
    //定义SQqlConnection对象实例
                SqlConnection Con = new SqlConnection(ConStr);
                Con.Open();
                
    //select查询语句
                string SqlStr = "select sto_id,sto_area from tb_store order by sto_area desc";
                
    //定义SqlCommand对象实例
                SqlCommand cmd = new SqlCommand(SqlStr, Con);
                
    //定义SqlDataReader对象实例
                SqlDataReader dr = cmd.ExecuteReader();
                
    //定义Bitmap对象实例
                Bitmap bitM = new Bitmap(this.panel1.Width, this.panel1.Height);
                
    //定义Graphics对象实例
                Graphics g = Graphics.FromImage(bitM);
                g.Clear(Color.Yellow);

                
    for (int i = 0; i < 5; i++)
                {
                    g.DrawLine(
    new Pen(new SolidBrush(Color.Blue), 2.0f), 80,
                        
    this.panel1.Height - 30 - i * 30this.panel1.Width - 40this.panel1.Height - 30 - i * 30);
                    g.DrawString(Convert.ToString(i 
    * 300), new Font("Times New Roman"15, FontStyle.Regular),
                        
    new SolidBrush(Color.Black), 30this.panel1.Height - 50 - i * 30);
                }

                
    for (int j = 0; j < 5; j++)
                {
                    
    if (dr.Read())
                    {
                        
    int x, y, w, h;
                        
    //绘制图标的横坐标
                        g.DrawString(dr[0].ToString(), new Font("宋体"12, FontStyle.Regular),
                            
    new SolidBrush(Color.Black), 76 + 60 * j, this.panel1.Height - 28);
                        x 
    = 78 + 58 * j;
                        y 
    = this.panel1.Height - 30 - Convert.ToInt32((Convert.ToDouble(Convert.ToDouble(dr[1].ToString()) * 20 / 200)));
                        w 
    = 20;
                        h 
    = Convert.ToInt32(Convert.ToDouble(dr[1].ToString()) * 20 / 200);
                        g.FillRectangle(
    new SolidBrush(Color.FromArgb(25500)), x, y, w, h);
                    }
                }
                
    //在Panel控件上绘制柱状图表
                this.panel1.BackgroundImage = bitM;
            }

    1.3 窗体运行

    2 绘制折线图

    2.1 建立数据库表

    代码
    create database db_Store;
    create table tb_productsale(
    pro_id 
    int primary key,
    pro_price 
    real not null,
    pro_name 
    varchar(20not null,
    pro_date 
    datetime not null);

    insert into tb_productsale(pro_id,pro_price,pro_name,pro_date)
    values(1,'220','李平','2009/1/2');
    insert into tb_productsale(pro_id,pro_price,pro_name,pro_date)
    values(2,'200','李平','2009/4/2');
    insert into tb_productsale(pro_id,pro_price,pro_name,pro_date)
    values(3,'120','李平','2009/6/2');
    insert into tb_productsale(pro_id,pro_price,pro_name,pro_date)
    values(4,'200','李平','2009/8/2');
    insert into tb_productsale(pro_id,pro_price,pro_name,pro_date)
    values(5,'300','李平','2009/11/2');

    insert into tb_productsale(pro_id,pro_price,pro_name,pro_date)
    values(6,'200','张亮','2009/1/2');
    insert into tb_productsale(pro_id,pro_price,pro_name,pro_date)
    values(7,'100','张亮','2009/4/2');
    insert into tb_productsale(pro_id,pro_price,pro_name,pro_date)
    values(8,'100','张亮','2009/6/2');
    insert into tb_productsale(pro_id,pro_price,pro_name,pro_date)
    values(9,'200','张亮','2009/8/2');
    insert into tb_productsale(pro_id,pro_price,pro_name,pro_date)
    values(10,'300','张亮','2009/11/2');

    insert into tb_productsale(pro_id,pro_price,pro_name,pro_date)
    values(11,'300','周涛','2009/1/2');
    insert into tb_productsale(pro_id,pro_price,pro_name,pro_date)
    values(12,'32','周涛','2009/4/2');
    insert into tb_productsale(pro_id,pro_price,pro_name,pro_date)
    values(13,'300','周涛','2009/6/2');
    insert into tb_productsale(pro_id,pro_price,pro_name,pro_date)
    values(14,'200','周涛','2009/8/2');
    insert into tb_productsale(pro_id,pro_price,pro_name,pro_date)
    values(15,'32','周涛','2009/11/2');

    2.2 窗体代码

    代码

            SqlConnection con
    =new SqlConnection(@"Data Source=YHWY\SQLEXPRESS;Initial Catalog=db_Store;Integrated Security=True");
            SqlDataAdapter sqlAda;
    //定义SqlDataAdapter对象实例
            SqlCommand cmd;
    //定义SqlCommand对象实例
            DataSet ds;
    //定义DataSet对象实例
            static 
    int G = 0;//定义静态变量并赋值

            private void DrowFont(string 
    str)
            {
                using (Graphics GrapFont 
    = this.panel1.CreateGraphics())
                {
                    GrapFont.Clear(Color.SeaShell);
                    Pen p 
    = new Pen(Color.Blue, 2.0f);//定义笔的颜色和粗细
                    Font f 
    = new Font("华文新魏", 12, FontStyle.Regular);//定义字体样式
                    Brush b 
    = new SolidBrush(Color.Blue);//设置画笔样式
                    GrapFont.DrawString(
    str + "销售业绩走势图分析", f, b, 4.0f, 5.0f);
                }
            }

            private void DrowPic(string 
    str)
            {
                
    int MaxValue, MinValue;//定义变量
                
    //获取最大销售金额
                using (cmd 
    = new SqlCommand("select Max(pro_price) from tb_productsale where pro_name='" + str + "'", con))
                {
                    con.
    Open();
                    MaxValue 
    = Convert.ToInt16(cmd.ExecuteScalar());
                    con.
    Close();
                }
                using (cmd 
    = new SqlCommand("select Min(pro_price) from tb_productsale where pro_name='" + str + "'", con))
                {
                    con.
    Open();
                    MinValue 
    = Convert.ToInt16(cmd.ExecuteScalar());
                    con.
    Close();
                }
                Graphics g 
    = this.groupBox1.CreateGraphics();//定义Graphics对象实例
                g.Clear(Color.SeaShell);
                Brush b 
    = new SolidBrush(Color.Blue);//定义画笔颜色
                Font f 
    = new Font("Arial", 9, FontStyle.Regular);//定义字体样式
                Pen p 
    = new Pen(b);
                using (sqlAda 
    = new SqlDataAdapter("select * from tb_productsale where pro_name='" + str + "' order by pro_date", con))
                {
                    ds 
    = new DataSet();
                    sqlAda.Fill(ds, "pro_date");
                    
    int M = MaxValue / 50 + 1;//最大值
                    
    int N = MinValue / 50;//最小值
                    
    int T = N;
                    
    for (int i = 0; i <= M - N; i++)
                    {
                        g.DrawString(
    Convert.ToString(T * 50), f, b, 0190 - 30 * i);
                        g.DrawLine(p, 
    30200 - 30 * i, 260200 - 30 * i);//绘制水平坐标线
                        T
    ++;
                    }
                    
    int Num = ds.Tables[0].Rows.Count;
                    
    int[] Values = new int[Num];
                    
    for (int C = 0; C < Num; C++)
                    {
                        
    Values[C] = Convert.ToInt32(ds.Tables[0].Rows[C][1].ToString());
                        
    //绘制销售月份文字
                        g.DrawString(
    Convert.ToDateTime(ds.Tables[0].Rows[C][3].ToString()).Month + "月", f, b, 30 * (C + 1- 1010);
                        
    //绘制垂直坐标线
                        g.DrawLine(p, 
    30 * (C + 1), 20030 * (C + 1), 30);
                    }
                    Point
    [] P = new Point[Num];//定义点对象
                    
    for (int i = 0; i < Num; i++)//利用For循环绘制折线图
                    {
                        P
    [i].X = 30 * (i + 1);
                        P
    [i].Y = 260 - Convert.ToInt32(Values[i] / 50f * 30);
                    }
                    g.DrawLines(p, P);
                }
            }

            private void DrowInfo(string 
    str)
            {
                Graphics g 
    = this.groupBox2.CreateGraphics();//创建Graphics对象实例
                g.Clear(Color.SeaShell);
                Brush b 
    = new SolidBrush(Color.Blue);//定义画笔颜色
                Font f 
    = new Font("Arial", 9, FontStyle.Regular);//设置字体样式
                using (sqlAda 
    = new SqlDataAdapter("select * from tb_productsale where pro_name='" + str + "' order by pro_date", con))
                {
                    DataSet ds 
    = new DataSet();
                    sqlAda.Fill(ds, "tb_productsale");
                    g.DrawString("月份:        " 
    + "销售业绩", f, b, 10.0f, 25.0f);
                    
    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        
    int month = Convert.ToDateTime(ds.Tables[0].Rows[i][3].ToString()).Month;
                        
    if (month >= 10)
                        {
                            g.DrawString(
    month + "月:         " + ds.Tables[0].Rows[i][1].ToString(), f, b, 10.0f, (i + 2* 25.0f);
                        }
                        
    else
                        {
                            g.DrawString("
    0+ month + "月:         " + ds.Tables[0].Rows[i][1].ToString(), f, b, 10.0f, (i + 2f) * 25.0f);
                        }
                    }
                }
            }

            private void Form2_Load(object sender, EventArgs e)
            {
                
    //提取不重复的销售人员信息
                using (sqlAda 
    = new SqlDataAdapter("select distinct(pro_name) from tb_productsale", con))
                {
                    DataSet ds 
    = new DataSet();
                    sqlAda.Fill(ds, "tb_productsale");
                    this.comboBox1.DataSource 
    = ds.Tables[0];
                    this.comboBox1.DisplayMember 
    = "pro_name";//把不重复的销售人员添加到下拉列表框中
                }
            }

            private void button1_Click(object sender, EventArgs e)
            {
                G
    ++;//变量G自动加1
                
    //调用自定义函数DrowFont、DrowInfo和DrowPic
                DrowFont(this.comboBox1.
    Text.ToString());
                DrowInfo(this.comboBox1.
    Text.ToString());
                DrowPic(this.comboBox1.
    Text.ToString());
            }

    2.3 窗体运行

     

    3 总结

    3.1 using(sqlAda=new SqlDataAdapter(".....")

    {

    }的使用

    3.2 利用Graphics对象的DrawLine()方法绘制线段

    3.3 Bitmap对象和SqlDataReader对象的应用

    3.4 SolidBrush对象和Color对象的应用

    3.5 手动绘图必要性(个人观点):存在使用chart以及一些漂亮的infragistics netadvantage控件进行设计数据展示,但是对于大量数据时,算法绘图可以提高效率,更有利于捕捉动态变化情况。

     

  • 相关阅读:
    【操作系统】 管程机制
    【Java】 大话数据结构(13) 查找算法(4) (散列表(哈希表))
    【操作系统】 信号量机制
    【Java】 奇偶数的判断
    【Java】 大话数据结构(12) 查找算法(3) (平衡二叉树(AVL树))
    MySQL之库操作
    数据库简介
    MySQL的知识海洋
    python并发编程之多进程(理论)
    python并发编程之多进程(实现)
  • 原文地址:https://www.cnblogs.com/yongfeng/p/1714585.html
Copyright © 2011-2022 走看看