六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

從一個輿論調查的制作談面向對象的編程思路(4)

[摘要]public MyChart()//// TODO: Add Constructor Logic here//m_arrItems = new ArrayList() ;m_strTitle = "" ;m_objBackColor = Color.White ;m_intWi...
public MyChart()
{
//
// TODO: Add Constructor Logic here
//
m_arrItems = new ArrayList() ;
m_strTitle = "" ;
m_objBackColor = Color.White ;
m_intWidth = 200 ;
m_intHeight = 200 ;
m_intChartType = ChartType.Pie ;
m_strUnit = "" ;
}

/// <summary>
/// 重載構造函數
/// </summary>
/// <param name="a_strTitle"> </param>
/// <param name="a_objBackColor"> </param>
/// <param name="a_intWidth"> </param>
/// <param name="a_intHeight"> </param>
/// <param name="a_intChartType"> </param>
/// <param name="a_strUnit"> </param>
public MyChart(string a_strTitle , System.Drawing.Color a_objBackColor ,
int a_intWidth , int a_intHeight , ChartType a_intChartType , string a_strUnit)
{
m_arrItems = new ArrayList() ;
m_strTitle = a_strTitle ;
m_objBackColor = a_objBackColor ;
m_intWidth = a_intWidth ;
m_intHeight = a_intHeight ;
m_intChartType = a_intChartType ;
m_intTotalCount = 0 ;
m_strUnit = a_strUnit ;
}

/// <summary>
/// 添加一個新的統計圖項目
/// </summary>
/// <param name="a_objItem"> </param>
public void AddItem(object a_objItem)
{
if(a_objItem is MyClass.Util.ChartItem)
{
m_arrItems.Add(a_objItem) ;
m_intTotalCount += ((ChartItem)a_objItem).Count ;
}
else
{
throw(new Exception("對象類型錯誤,要加入的必須是ChartItem對象")) ;
}
}

/// <summary>
/// 產生統計圖圖片
/// </summary>
/// <param name="a_strFileName">要保存的文件名 </param>
/// <remarks>
/// a_strFileName必須是絕對物理路徑
/// </remarks>
public void Create(string a_strFileName)
{
//如果沒有定義統計圖項,則拋出異常
if (m_arrItems.Count == 0)
{
throw(new Exception("沒有定義統計圖項")) ;
}


//根據不同統計圖類型選擇函數
switch(m_intChartType)
{
case ChartType.Bar:
DrawBar(a_strFileName) ;
break;

case ChartType.Pie:
DrawPie(a_strFileName) ;
break ;

case ChartType.Curve:
DrawCurve(a_strFileName) ;
break ;

default:
DrawPie(a_strFileName) ;
break ;
}

}

/// <summary>
/// 畫條形圖
/// </summary>
/// <param name="a_strFileName">要保存的圖片名稱</param>
protected void DrawBar(string a_strFileName)
{
//繪圖準備,新建一個image對象,一個graphics對象
System.Drawing.Image myBmp = new Bitmap(m_intWidth , m_intHeight ) ;
System.Drawing.Graphics g = Graphics.FromImage(myBmp) ;

//填充背景
g.FillRectangle(new System.Drawing.SolidBrush(m_objBackColor) , 0 , 0 , m_intWidth , m_intHeight) ;

//如果沒有任何回答,則顯示沒有結果
if (this.m_intTotalCount == 0)
{
g.DrawString("沒有統計數字!" , new Font("宋體" , m_intWidth / 14) ,
new SolidBrush(Color.Red) , (m_intWidth - m_intWidth / 8 * 6) / 2 ,
m_intHeight / 2 - m_intWidth / 8) ;
}
else
{

//寫題目

//g.DrawString(m_strTitle , new System.Drawing.Font("黑體" , m_intWidth / 30) ,
// new System.Drawing.SolidBrush(Color.Black) , (m_intWidth - m_strTitle.Length * (m_intWidth / 30))/2 , 10 ,
// System.Drawing.StringFormat.GenericDefault) ;


//畫統計圖項目的矩形
//計算每個矩形的寬度
int intWidth = m_intWidth / (m_arrItems.Count * 2 - 1) ;

//定義一個一個像素寬的黑色的筆
System.Drawing.Pen pen = new System.Drawing.Pen(new System.Drawing.SolidBrush(Color.Black) , 1) ;

for (int i = 0 ; i < m_arrItems.Count ; i ++)
{
ChartItem item = (ChartItem)m_arrItems[i] ;

//計算所占百分比
float intPercent = (float)Decimal.Divide(item.Count * 100 , m_intTotalCount) ;

//計算矩形高度
int intHeight = (int)(m_intHeight/ 3 * 2 * intPercent / 100 - 10) ;

//計算矩形坐標
int ix = intWidth * i * 3 / 2 + intWidth ;
int iy = m_intHeight / 3 * 2 - intHeight ;


//畫矩形
g.FillRectangle(new System.Drawing.SolidBrush(item.Color) ,
ix , iy , intWidth , intHeight + 10) ;

//寫字
//計算字體大小
int intFontSize = intWidth / this.TotalCount.ToString().Length ;
//限制一下,字體大小不能超過12
intFontSize = intFontSize > 12 ? 12 : intFontSize ;
g.DrawString(item.Count.ToString() + m_strUnit ,
new System.Drawing.Font("宋體" , intFontSize) ,
new System.Drawing.SolidBrush(item.Color) ,
ix , iy - intFontSize * 2) ;

//畫圖例

//計算字體大小
intFontSize = m_intHeight / 3 / m_arrItems.Count / 2 - 1 ;
intFontSize = intFontSize > 12 ? 12 : intFontSize ;
g.FillRectangle(new System.Drawing.SolidBrush(item.Color) , 20 ,
m_intHeight / 3 * 2 + intFontSize * (i * 2 + 1) + 5 ,
intFontSize , intFontSize) ;
g.DrawString( intPercent.ToInt32().ToString() + "%" ,
new System.Drawing.Font("宋體" , intFontSize) ,
new System.Drawing.SolidBrush(item.Color) ,
20 + intFontSize ,
m_intHeight / 3 * 2 + intFontSize * (i * 2 + 1) + 5) ;
g.DrawString(item.Text ,
new System.Drawing.Font("宋體" , intFontSize) ,
new System.Drawing.SolidBrush(item.Color) , 80 ,
m_intHeight / 3 * 2 + intFontSize * (i * 2 + 1) + 5) ;

}

//畫標志線
g.DrawLine(pen , 0 , 10 , 0 , m_intHeight / 3 * 2 + 10) ;
g.DrawLine(pen , 0 , m_intHeight / 3 * 2 + 10 , m_intWidth ,
m_intHeight / 3 * 2 + 10) ;
for (int i = 0 ; i < 10 ; i++)
{
g.DrawLine( pen , 0 , m_intHeight / 3 * 2 / 10 * i + 10 ,
5 , m_intHeight / 3 * 2 / 10 * i + 10) ;
}

//寫單位
//g.DrawString("單位:" + m_strUnit , new System.Drawing.Font("宋體" , m_intWidth/40) ,
// new SolidBrush(Color.Black) , 10 , 10) ;

//清空
pen.Dispose() ;
}

//清控對象
g.Dispose() ;

//保存為jpg格式
try
{
myBmp.Save(a_strFileName , System.Drawing.Imaging.ImageFormat.JPEG) ;
}
catch(Exception e)
{
throw(new Exception("保存圖片失敗:" + e.ToString())) ;
}

myBmp.Dispose() ;

}

/// <summary>
/// 畫餅形圖
/// </summary>
/// <param name="a_strFileName"> </param>
/// <remarks>
/// 這段程序很難懂,因為需要根據圖片大小決定餅圖及文字的大小,所以所有計算方法
/// 都是試驗出來的。
/// </remarks>
protected void DrawPie(string a_strFileName)
{
//繪圖準備,新建一個image對象,一個graphics對象
System.Drawing.Image myBmp = new Bitmap(m_intWidth , m_intHeight ) ;
System.Drawing.Graphics g = Graphics.FromImage(myBmp) ;

//填充背景
g.FillRectangle(new System.Drawing.SolidBrush(m_objBackColor) , 0 , 0 , m_intWidth , m_intHeight) ;

//如果沒有任何回答,則顯示沒有結果
if (this.m_intTotalCount == 0)
{
g.DrawString("沒有統計數字!" , new Font("宋體" , m_intWidth / 14) ,
new SolidBrush(Color.Red) , (m_intWidth - m_intWidth / 8 * 6) / 2 ,
m_intHeight / 2 - m_intWidth / 8) ;
}
else
{
//定義一個浮點變量,記住上一個項目結束的角度
int intAngel = 180 ;

//畫餅形圖
for (int i = 0 ; i < m_arrItems.Count ; i ++)
{
ChartItem item = (ChartItem)m_arrItems[i] ;

//開始時從180度開始

//計算所占百分比
float intPercent = (float)Decimal.Divide(item.Count * 100 , m_intTotalCount) ;
if (i == m_arrItems.Count - 1)
{
g.FillPie(new SolidBrush(item.Color) , 0 , 0 , m_intWidth * 2 / 3 ,
m_intHeight * 2 / 3 , intAngel , 540 - intAngel) ;
}
else
{
g.FillPie(new SolidBrush(item.Color) , 0 , 0 , m_intWidth * 2 / 3,
m_intHeight * 2 / 3 , intAngel , 360 * intPercent/100) ;
intAngel += (int)(360 * intPercent/100) ;
}

//畫餅圖右邊圖例百分數
//計算矩形大小
int intRectSize = m_intHeight / 30 ;

//畫顏色方塊
g.FillRectangle(new SolidBrush(item.Color) , m_intWidth * 2 / 3 + intRectSize ,
intRectSize * (i * 2 + 1) + m_intHeight / 2 - m_arrItems.Count * 2 * intRectSize
,intRectSize , intRectSize) ;

//寫百分數
g.DrawString(item.Count.ToString() + m_strUnit ,
new Font("宋體" , intRectSize) ,
new SolidBrush(item.Color) ,
m_intWidth * 2 / 3 + intRectSize * 3 ,
intRectSize * (i * 2 + 1) + m_intHeight / 2
- m_arrItems.Count * 2 * intRectSize);

//畫餅圖下方圖例文字
//計算矩形大小
intRectSize = m_intHeight / 3 / (m_arrItems.Count * 2) - 1 ;
intRectSize = intRectSize > 12 ? 12 : intRectSize ;

//畫顏色方塊
g.FillRectangle(new SolidBrush(item.Color) , intRectSize * 2 ,
intRectSize * (i * 2 + 1) + m_intHeight / 3 * 2
,intRectSize , intRectSize) ;
//寫文字
g.DrawString(intPercent.ToInt32().ToString() + "% " + item.Text ,
new Font("宋體" , intRectSize) ,
new SolidBrush(item.Color) , intRectSize * 4 ,
intRectSize * ( i * 2 + 1) + m_intHeight / 3 * 2) ;

}
}
//清控對象
g.Dispose() ;

//保存為jpg格式
try
{
myBmp.Save(a_strFileName , System.Drawing.Imaging.ImageFormat.JPEG) ;
}
catch(Exception e)
{
throw(new Exception("保存圖片失敗:" + e.ToString())) ;
}

myBmp.Dispose() ;

}

/// <summary>
/// 畫折線圖
/// </summary>
/// <param name="a_strFileName"> </param>
protected void DrawCurve(string a_strFileName)
{
//繪圖準備,新建一個image對象,一個graphics對象
System.Drawing.Image myBmp = new Bitmap(m_intWidth , m_intHeight ) ;
System.Drawing.Graphics g = Graphics.FromImage(myBmp) ;

//填充背景
g.FillRectangle(new System.Drawing.SolidBrush(m_objBackColor) , 0 , 0 , m_intWidth , m_intHeight) ;

//如果沒有任何回答,則顯示沒有結果
if (this.m_intTotalCount == 0)
{
g.DrawString("沒有統計數字!" , new Font("宋體" , m_intWidth / 14) ,
new SolidBrush(Color.Red) , (m_intWidth - m_intWidth / 8 * 6) / 2 ,
m_intHeight / 2 - m_intWidth / 8) ;
}
else
{
//定義一個一個像素寬的黑色的筆
System.Drawing.Pen pen = new System.Drawing.Pen(new System.Drawing.SolidBrush(Color.Black) , 1) ;

//畫標志線
g.DrawLine(pen , 0 , 10 , 0 , m_intHeight / 3 * 2 + 10) ;
g.DrawLine(pen , 0 , m_intHeight / 3 * 2 + 10 , m_intWidth , m_intHeight / 3 * 2 + 10) ;
for (int i = 0 ; i < 10 ; i++)
{
g.DrawLine( pen , 0 , m_intHeight / 3 * 2 / 10 * i + 10 , 5 , m_intHeight / 3 * 2 / 10 * i + 10) ;
}

//寫單位
g.DrawString("單位:" + m_strUnit , new System.Drawing.Font("宋體" , m_intWidth/40) ,
new SolidBrush(Color.Black) , 10 , 10) ;

//畫折線

//計算寬度
int intWidth = m_intWidth / (m_arrItems.Count * 2) ;

//定義兩個變量,記住上一個點的x , y
int ix = 0 ;
int iy = 0 ;

for ( int i = 0 ; i < m_arrItems.Count ; i ++)
{
ChartItem item = (ChartItem)m_arrItems[i] ;

//計算所占百分比
float intPercent = (float)Decimal.Divide(item.Count * 100 , m_intTotalCount) ;

//計算點高度
int intHeight = (int)(m_intHeight / 3 * 2 * intPercent / 100) ;

//畫點
g.FillEllipse(new SolidBrush(item.Color) , intWidth * (i * 2 + 1) ,
m_intHeight / 3 * 2 - intHeight , 10 , 10) ;

//連接線
//定義筆,如果是升則為藍顏色,否則是紅色
if (iy > m_intHeight /3 * 2 - intHeight + 5)
{
pen = new Pen(new SolidBrush(Color.Blue) , 3) ;
}
else
{
pen = new Pen(new SolidBrush(Color.Red) , 3) ;
}
if (i != 0)
{
g.DrawLine(pen , ix , iy , intWidth * (i * 2 + 1) + 5 , m_intHeight /3 * 2 - intHeight + 5) ;
}
ix = intWidth * (i * 2 + 1) + 5 ;
iy = m_intHeight / 3 * 2 - intHeight + 5 ;

//畫餅圖下方圖例文字
//計算矩形大小
int intRectSize = m_intHeight / 3 / (m_arrItems.Count * 2) - 1 ;
intRectSize = intRectSize > 12 ? 12 : intRectSize ;

//畫顏色方塊
g.FillRectangle(new SolidBrush(item.Color) , intRectSize * 2 ,
intRectSize * (i * 2 + 1) + m_intHeight / 3 * 2 + 5
,intRectSize , intRectSize) ;
//寫文字
g.DrawString(intPercent.ToInt32().ToString() + "% " + item.Text ,
new Font("宋體" , intRectSize) ,
new SolidBrush(item.Color) , intRectSize * 4 ,
intRectSize * ( i * 2 + 1) + m_intHeight / 3 * 2 + 5) ;
}

//清空
pen.Dispose() ;
}

//清控對象
g.Dispose() ;

//保存為jpg格式
try
{
myBmp.Save(a_strFileName , System.Drawing.Imaging.ImageFormat.JPEG) ;
}
catch(Exception e)
{
throw(new Exception("保存圖片失敗:" + e.ToString())) ;
}

myBmp.Dispose() ;



}

}

/// <summary>
/// 統計圖項目類
/// </summary>
/// <remarks>
/// 構造一個統計圖項目,屬性有要顯示的文字、所占的百分比以及想顯示的顏色。
/// </remarks>
public class ChartItem : object
{
/// <summary>
/// 要顯示的文字
/// </summary>
private string m_strText ;

/// <summary>
/// 數量
/// </summary>
private int m_intCount ;


/// <summary>
/// 顏色
/// </summary>
private System.Drawing.Color m_objColor ;

//屬性
public string Text
{
get
{
return m_strText ;
}
set
{
m_strText = value ;
}
}


public int Count
{
get
{
return m_intCount ;
}
set
{
m_intCount = value ;
}
}
public System.Drawing.Color Color
{
get
{
return m_objColor ;
}
set
{
m_objColor = value ;
}
}

/// <summary>
/// 構造函數
/// </summary>
public ChartItem()
{
m_strText = "" ;
m_intCount = 0 ;
m_objColor = Color.White ;
}

/// <summary>
/// 重載構造函數
/// </summary>
/// <param name="a_strText"> </param>
/// <param name="a_intPercent"> </param>
/// <param name="a_objColor"> </param>
public ChartItem(string a_strText , int a_intCount , System.Drawing.Color a_objColor)
{
m_strText = a_strText ;
m_objColor = a_objColor ;
m_intCount = a_intCount ;
}
}
}





主站蜘蛛池模板: 深爱激情五月婷婷 | 一级做a爰片久久毛片图片 一级做a爰片久久毛片人呢 | 人人揉人人添人人捏人人看 | 亚洲网站在线 | 青娱乐手机在线视频 | 五月天激情婷婷 | 日本高清免费在线 | 欧美一级做一级爱a做片性 欧美一级做一a做片性视频 | 亚洲天堂一区二区 | 亚洲三级一区 | 欧美偷拍色图 | 综合久久久 | 日韩一级片免费在线观看 | 手机看片国产欧美日韩高清 | 天天干天天做天天射 | 日韩国产成人精品视频 | 思思久久96热在精品国产免费 | 日韩一级黄色毛片 | 午夜影院在线视频 | 日日夜夜摸| 日韩精品视频观看 | 欧美亚洲国产精品久久 | 日韩欧美国产综合 | 色视频久久| 日日操日日爽 | 外国毛片视频 | 日日夜夜免费精品 | 一本到视频在线观看 | 伊人色院成人蜜桃视频 | 日本一区二区三区免费高清在线 | 亚洲乱码一二三四五六区 | 性感保姆正片 | 日韩中文字幕在线 | 亚洲国产日韩综合久久精品 | 色女人久久 | 午夜久久久久久网站 | 青青视频网站 | 亚洲国产第一页 | 天天影视色香欲综合网小说 | 天天综合网天天综合色 | 五月婷婷激情在线 |