⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlggaihua.cpp

📁 用Visual c++写
💻 CPP
字号:
// DlgGaihua.cpp : implementation file
//

#include "stdafx.h"
#include "mining.h"
#include "DlgGaihua.h"
#include <cmath>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
struct  COUNT
{
	float	gao;
	float	zhong;
	float	di;
	float	jige;
	float	bujige;
	float	like;
	float	wenke;
	float	yishu;
	int		RecordCount;	
};

struct COUNT m_count[5];


/////////////////////////////////////////////////////////////////////////////
// CDlgGaihua dialog


CDlgGaihua::CDlgGaihua(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgGaihua::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlgGaihua)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CDlgGaihua::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgGaihua)
	DDX_Control(pDX, IDC_LIST2, m_listCtrl);
	DDX_Control(pDX, IDC_LIST1, m_list);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgGaihua, CDialog)
	//{{AFX_MSG_MAP(CDlgGaihua)
	ON_LBN_SELCHANGE(IDC_LIST1, OnSelchangeList1)
	ON_WM_PAINT()
	ON_WM_CLOSE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgGaihua message handlers

BOOL CDlgGaihua::OnInitDialog() 
{
	CDialog::OnInitDialog();
	CString tbName,fdName;

	int nCount, fenshu;
	Y_long=140.0;
	char *p;
	CODBCFieldInfo fdInfo;
	
	m_list.AddString("教学机时");
	m_list.AddString("自由机时");
	m_list.AddString("期末成绩");
	m_list.AddString("专业");
	m_list.AddString("过级成绩");
	m_rdJoin.Open(AFX_DB_USE_DEFAULT_TYPE,"select  *  from 学校成绩表,过级成绩表 \
		 where 学校成绩表.学号=过级成绩表.学号");
	int n=0;
	m_rdJoin.MoveFirst();
	nCount=m_rdJoin.GetODBCFieldCount();

	m_listCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

	for(int k=0;k<nCount;k++)
	{	
		m_rdJoin.GetODBCFieldInfo(k,fdInfo);
		fdName=fdInfo.m_strName;
		p=fdName.GetBuffer(fdName.GetLength());
		m_listCtrl.InsertColumn(k,p,LVCFMT_LEFT,90);
	}
	m_listCtrl.DeleteColumn(4);
	for(int i=0;i<4;i++)
	{
		m_count[i].di=0.0;
		m_count[i].zhong=0.0;
		m_count[i].gao=0.0;
		m_count[i].jige=0.0;
		m_count[i].bujige=0.0;
		m_count[i].like=0.0;
		m_count[i].wenke=0.0;
		m_count[i].yishu=0.0;
		m_count[0].RecordCount=0;
	}
	
	do
	{
		CString s;
		if(m_rdJoin.m_column2<20)		//教学机时概化;
		{
			m_count[0].di++;
			m_listCtrl.InsertItem(n,"低",0);
		}
		else if(m_rdJoin.m_column2>=20&&m_rdJoin.m_column2<=29)
		{
			m_count[0].zhong++;
			m_listCtrl.InsertItem(n,"中",0);
		}
		else if (m_rdJoin.m_column2<=40)
		{
			m_count[0].gao++;
			m_listCtrl.InsertItem(n,"高",0);
		}
		if(m_rdJoin.m_column3<20)			//自由机时概化;
		{
			m_count[1].di++;
			m_listCtrl.SetItemText(n,1,"低");
		}
		else if(m_rdJoin.m_column3>=20&&m_rdJoin.m_column3<=29)
		{
			m_count[1].zhong++;
			m_listCtrl.SetItemText(n,1,"中");
		}
		else if (m_rdJoin.m_column3>=30)
		{
			m_count[1].gao++;
			m_listCtrl.SetItemText(n,1,"高");
		}
		if(m_rdJoin.m_column4<60)			//期末成绩概化;
		{
			m_count[2].bujige++;
			m_listCtrl.SetItemText(n,2,"不及格");
		}
		else 
		{
			m_count[2].jige++;
			m_listCtrl.SetItemText(n,2,"及格");
		}
		//专业的概化!
		if((strcmp(m_rdJoin.m_column32,"化学")==0) ||		
			(strcmp(m_rdJoin.m_column32,"计算机")==0) ||	
			(strcmp(m_rdJoin.m_column32,"数学")==0) ||		
			(strcmp(m_rdJoin.m_column32,"教育技术")==0))
		{
			
			m_count[4].like++;
			m_listCtrl.SetItemText(n,4,"理科");
		}

		if((strcmp(m_rdJoin.m_column32,"机器翻译")==0) ||		
			(strcmp(m_rdJoin.m_column32,"教育学")==0) ||		
			(strcmp(m_rdJoin.m_column32,"历史教育")==0) ||			
			(strcmp(m_rdJoin.m_column32,"心理学")==0) ||
			(strcmp(m_rdJoin.m_column32,"对外汉语")==0) ||
			(strcmp(m_rdJoin.m_column32,"政教")==0))
		{
			m_count[4].wenke++;
			m_listCtrl.SetItemText(n,4,"文科");
		}

		if(strcmp(m_rdJoin.m_column32,"美术学")==0 ||
			strcmp(m_rdJoin.m_column32,"体育")==0)
		{
			m_count[4].yishu++;
			m_listCtrl.SetItemText(n,4,"艺术类");
		}
        fenshu=(int)m_rdJoin.m_column12;//过级成绩概化;
		
		if(fenshu<60)
		{
			m_count[3].bujige++;
		    m_listCtrl.SetItemText(n,5,"不及格");
		}
		else 
		{
			m_count[3].jige++;
			m_listCtrl.SetItemText(n,5,"及格");
		}
		
        m_rdJoin.MoveNext();
		n++;
	} while(!m_rdJoin.IsEOF());
	m_count[0].RecordCount=m_rdJoin.GetRecordCount();
	m_rdJoin.MoveFirst();
	m_listCtrl.DeleteColumn(0);
	m_listCtrl.DeleteColumn(3);
	return TRUE;  
}

void CDlgGaihua::OnSelchangeList1() 
{
	int index;
	m_listIndex=m_list.GetCurSel();
	index=m_listIndex;
	HuiTu(index);
}

void CDlgGaihua::OnPaint() 
{
	CDC *dc; // device context for painting
	PAINTSTRUCT	ps;
	dc=BeginPaint(&ps);
	CBrush brush(RGB(97,97,200));
	dc->FillRect(CRect(200,35,740,220),&brush);
	CBrush Brush(RGB(0,0,0));
	dc->FillRect(CRect(205,190,477,193),&Brush);//X坐标;
	dc->FillRect(CRect(225,48,228,200),&Brush);//Y坐标;
	EndPaint(&ps);
}

//绘直方图;
void CDlgGaihua::HuiTu(int index)
{
	if(index==0)
	{	
		int y;
		float a,b;
		CString s;
		
		InvalidateRect(CRect(200,35,740,220),true);
		OnPaint();
		CClientDC dc(this);
		CBrush Brush1(RGB(255,0,0));
		//过级成绩“不及格”!
		a=m_count[3].bujige/m_count[0].RecordCount;
		s.Format("%f",a);
		y=int(int(a*Y_long));
		dc.FillRect(CRect(225,(180-y),238,190),&Brush1);
		dc.SetBkColor(RGB(97,97,200));
		dc.TextOut(228,195,"不及格");
		dc.TextOut(228,(150-y),s);
		CBrush brush1(RGB(255,0,0));
		dc.SelectObject(&brush1);
		dc.Pie(500,60,620,180,560,60,560-(int)(sin(2*3.1415926*a)*60),60+60-(int)(cos(2*3.1415926*a)*60));
		dc.TextOut(500,40,"不及格");

		//过级成绩”及格“!
		CBrush	Brush2(RGB(0,255,0));
		b=m_count[3].jige/m_count[0].RecordCount;
		s.Format("%f",b);
		y=int(b*Y_long);
		dc.FillRect(CRect(295,(180-y),308,190),&Brush2);
		dc.TextOut(288,195,"及格");
		dc.TextOut(285,(150-y),s);
		CBrush brush2(RGB(0,255,0));
		dc.SelectObject(&brush2);
		dc.Pie(500,60,620,180,560-(int)(sin(2*3.1415926*a)*60),60+60-(int)(cos(2*3.1415926*a)*60),560,60);
		dc.TextOut(560-(int)(sin(2*3.1415926*a)*60)-10,60+60-(int)(cos(2*3.1415926*a)*60)+20,"及格");
		SetDlgItemText(IDC_XIANSHI,"概化为:不及格和及格");
		SetDlgItemText(IDC_ZHIFANGTU,"过级成绩概化的直方图");
	}
	
      
	 if(m_listIndex==1)
	 {  
		int y;
		float a,b,c;
		CString s;
		//教学机时“低”!
		a=m_count[0].di/m_count[0].RecordCount;
		//a=a*100;
		s.Format("%f",a);
		y=int(a*Y_long);
		InvalidateRect(CRect(200,35,740,220),true);
		OnPaint();
		CClientDC dc(this);
		CBrush Brush1(RGB(255,0,0));
		dc.FillRect(CRect(225,(180-y),238,190),&Brush1);
		dc.SetBkColor(RGB(97,97,200));
		dc.TextOut(228,195,"低");
		dc.TextOut(228,(150-y),s);
		//dc.Pie(500,60,600,180,520,90,60,550);
		CBrush brush1(RGB(255,0,0));
		dc.SelectObject(&brush1);
		//dc.Pie(500,60,620,180,560,90,660,90);
		dc.Pie(500,60,620,180,560,60,560-(int)(sin(2*3.1415926*a)*60),60+60-(int)(cos(2*3.1415926*a)*60));
		dc.TextOut(520,40,"低");
		//教学机时”中“!
		CBrush	Brush2(RGB(0,255,0));
		b=m_count[0].zhong/m_count[0].RecordCount;
		s.Format("%f",b);
		y=int(b*Y_long);
		dc.FillRect(CRect(295,(180-y),308,190),&Brush2);
		dc.TextOut(298,195,"中");
		dc.TextOut(295,(150-y),s);
		CBrush brush2(RGB(0,255,0));
		dc.SelectObject(&brush2);
		dc.Pie(500,60,620,180,560-(int)(sin(2*3.1415926*a)*60),60+60-(int)(cos(2*3.1415926*a)*60),560-(int)(sin(2*3.1415926*(a+b))*60),60+60-(int)(cos(2*3.1415926*(a+b))*60));
		dc.TextOut(560-(int)(sin(2*3.1415926*a)*60)-30,60+60-(int)(cos(2*3.1415926*a)*60)+20,"中");
		//教学机时“高”!
		CBrush	Brush3(RGB(0,0,255));
		c=m_count[0].gao/m_count[0].RecordCount;
		s.Format("%f",c);
		y=int(c*Y_long);
		dc.FillRect(CRect(365,(180-y),378,190),&Brush3);
		dc.TextOut(368,195,"高");
		dc.TextOut(365,(150-y),s);
		CBrush brush3(RGB(0,0,255));
		dc.SelectObject(&brush3);
		dc.Pie(500,60,620,180,560-(int)(sin(2*3.1415926*(a+b))*60),60+60-(int)(cos(2*3.1415926*(a+b))*60),560,60);
		dc.TextOut(560-(int)(sin(2*3.1415926*(a+b))*60)+30,60+60-(int)(cos(2*3.1415926*(a+b))*60),"高");
		SetDlgItemText(IDC_XIANSHI,"概化为:高,中,低");
		SetDlgItemText(IDC_ZHIFANGTU,"教学机时概化的直方图");
	}
	 if(m_listIndex==2)
	{	int y;
		float a,b;
		CString s;
		InvalidateRect(CRect(200,35,740,220),true);
		OnPaint();
		CClientDC dc(this);
		CBrush Brush1(RGB(255,0,0));
		//期末成绩“不及格”!
		a=m_count[2].bujige/m_count[0].RecordCount;
		s.Format("%f",a);
		y=(int(a*Y_long));
		//y=0;
		dc.FillRect(CRect(225,(180-y),238,190),&Brush1);
		dc.SetBkColor(RGB(97,97,200));
		dc.TextOut(228,195,"不及格");
		dc.SetBkColor(RGB(97,97,200));
		dc.TextOut(228,(150-y),s);
		CBrush brush1(RGB(255,0,0));
		dc.SelectObject(&brush1);
		dc.Pie(500,60,620,180,560,60,560-(int)(sin(2*3.1415926*a)*60),60+60-(int)(cos(2*3.1415926*a)*60));
		dc.TextOut(460,70,"不及格");
		//期末成绩”及格“!
		CBrush	Brush2(RGB(0,255,0));
		b=m_count[2].jige/m_count[0].RecordCount;
		s.Format("%f",b);
		y=int(b*Y_long);
		//y=0;
		dc.FillRect(CRect(295,(180-y),308,190),&Brush2);
		dc.TextOut(298,195,"及格");
		dc.TextOut(295,(150-y),s);
		CBrush brush2(RGB(0,255,0));
		dc.SelectObject(&brush2);
		dc.Pie(500,60,620,180,560-(int)(sin(2*3.1415926*a)*60),60+60-(int)(cos(2*3.1415926*a)*60),560,60);
		dc.TextOut(560-(int)(sin(2*3.1415926*a)*60)+50,60+60-(int)(cos(2*3.1415926*a)*60)-20,"及格");
		SetDlgItemText(IDC_XIANSHI,"概化为:不及格和及格");
		SetDlgItemText(IDC_ZHIFANGTU,"期末成绩概化的直方图");
	}
	if(m_listIndex==3)
	 {  
		int y;
		float a,b,c;
		CString s;
		//专业理科!
		a=m_count[4].like/m_count[0].RecordCount;
		//a=a*100;
		s.Format("%f",a);
		y=int(a*Y_long);
	
		InvalidateRect(CRect(200,35,740,220),true);
		OnPaint();
		CClientDC dc(this);
		CBrush Brush1(RGB(255,0,0));
		dc.FillRect(CRect(225,(180-y),238,190),&Brush1);
		dc.SetBkColor(RGB(97,97,200));
		dc.TextOut(228,195,"理科");
		dc.TextOut(228,(150-y),s);
		CBrush brush1(RGB(255,0,0));
		dc.SelectObject(&brush1);
		dc.Pie(500,60,620,180,560,60,560-(int)(sin(2*3.1415926*a)*60),60+60-(int)(cos(2*3.1415926*a)*60));
		dc.TextOut(500,50,"理科");
		//专业文科!
		CBrush	Brush2(RGB(0,255,0));
		b=m_count[4].wenke/m_count[0].RecordCount;
		s.Format("%f",b);
		y=int(b*Y_long);
		dc.FillRect(CRect(295,(180-y),308,190),&Brush2);
		dc.SetBkColor(RGB(97,97,200));
		dc.TextOut(298,195,"文科");
		dc.TextOut(295,(150-y),s);
		CBrush brush2(RGB(0,255,0));
		dc.SelectObject(&brush2);
		dc.Pie(500,60,620,180,560-(int)(sin(2*3.1415926*a)*60),60+60-(int)(cos(2*3.1415926*a)*60),560-(int)(sin(2*3.1415926*(a+b))*60),60+60-(int)(cos(2*3.1415926*(a+b))*60));
		dc.TextOut(560-(int)(sin(2*3.1415926*a)*60)-30,60+60-(int)(cos(2*3.1415926*a)*60)+30," 文科");
		//专业艺术!
		CBrush	Brush3(RGB(0,0,255));
		c=m_count[4].yishu/m_count[0].RecordCount;
		s.Format("%f",c);
		y=int(c*Y_long);
		dc.FillRect(CRect(365,(180-y),378,190),&Brush3);
		dc.TextOut(368,195,"艺术类");
		dc.TextOut(365,(150-y),s);
		CBrush brush3(RGB(0,0,255));
		dc.SelectObject(&brush3);
		dc.Pie(500,60,620,180,560-(int)(sin(2*3.1415926*(a+b))*60),60+60-(int)(cos(2*3.1415926*(a+b))*60),560,60);
		dc.TextOut(560-(int)(sin(2*3.1415926*(a+b))*60)-10,60+60-(int)(cos(2*3.1415926*(a+b))*60)-30,"艺术类");
		SetDlgItemText(IDC_XIANSHI,"概化为:理科,文科,艺术类");
		SetDlgItemText(IDC_ZHIFANGTU,"专业概化的直方图");
	}
	 if(m_listIndex==4)
	{
		int y;
		float a,b,c;
		CString s;
		//自由机时“低”!
		a=m_count[1].di/m_count[0].RecordCount;
		//a=a*100;
		s.Format("%f",a);
		y=int(a*Y_long);
		InvalidateRect(CRect(200,35,740,220),true);
		OnPaint();
		CClientDC dc(this);
		CBrush Brush1(RGB(255,0,0));
		dc.FillRect(CRect(225,(180-y),238,190),&Brush1);
		dc.SetBkColor(RGB(97,97,200));
		dc.TextOut(228,195,"低");
		dc.TextOut(228,(150-y),s);
		CBrush brush1(RGB(255,0,0));
		dc.SelectObject(&brush1);
	    dc.Pie(500,60,620,180,560,60,560-(int)(sin(2*3.1415926*a)*60),60+60-(int)(cos(2*3.1415926*a)*60));
		dc.TextOut(500,50,"低");
		//自由机时”中“!
		CBrush	Brush2(RGB(0,255,0));
		b=m_count[1].zhong/m_count[0].RecordCount;
		s.Format("%f",b);
		y=int(b*Y_long);
		dc.FillRect(CRect(295,(180-y),308,190),&Brush2);
		dc.TextOut(298,195,"中");
		dc.TextOut(295,(150-y),s);
		CBrush brush2(RGB(0,255,0));
		dc.SelectObject(&brush2);
		dc.Pie(500,60,620,180,560-(int)(sin(2*3.1415926*a)*60),60+60-(int)(cos(2*3.1415926*a)*60),560-(int)(sin(2*3.1415926*(a+b))*60),60+60-(int)(cos(2*3.1415926*(a+b))*60));
		dc.TextOut(560-(int)(sin(2*3.1415926*a)*60)-10,60+60-(int)(cos(2*3.1415926*a)*60)+20,"中");
		//自由机时“高”!
		CBrush	Brush3(RGB(0,0,255));
		c=m_count[1].gao/m_count[0].RecordCount;
		s.Format("%f",c);
		y=int(c*Y_long);
		dc.FillRect(CRect(365,(180-y),378,190),&Brush3);
		dc.TextOut(368,195,"高");
		dc.TextOut(365,(150-y),s);
		CBrush brush3(RGB(0,0,255));
		dc.SelectObject(&brush3);
		dc.Pie(500,60,620,180,560-(int)(sin(2*3.1415926*(a+b))*60),60+60-(int)(cos(2*3.1415926*(a+b))*60),560,60);
		dc.TextOut(560-(int)(sin(2*3.1415926*(a+b))*60)+10,60+60-(int)(cos(2*3.1415926*(a+b))*60+20),"高");
		SetDlgItemText(IDC_XIANSHI,"概化为:高,中,低");
		SetDlgItemText(IDC_ZHIFANGTU,"自由机时概化的直方图");
	}	
}

void CDlgGaihua::OnClose() 
{
	m_rdJoin.Close();	
	CDialog::OnClose();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -