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

📄 dlgchart.cpp

📁 小商店管理助手软件
💻 CPP
字号:
// DlgChart.cpp : implementation file
//

#include "stdafx.h"
#include "Project.h"
#include "DlgChart.h"
#include "DlgLogin.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


CString GetTime();
/////////////////////////////////////////////////////////////////////////////
// CDlgChart dialog

CDlgChart::CDlgChart(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgChart::IDD, pParent)
{
}

void CDlgChart::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgChart)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CDlgChart, CDialog)
	//{{AFX_MSG_MAP(CDlgChart)
	ON_WM_PAINT()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgChart message handlers

BOOL CDlgChart::OnInitDialog() 
{
	CDlgLogin dlgLogin;
	try
	{   //连接数据源
		_bstr_t Conn = "DSN="+_bstr_t(dlgLogin.m_LoginDSN)+";";   
		pConn.CreateInstance(__uuidof(Connection));
		HRESULT hr=pConn->Open(Conn,_bstr_t(""),_bstr_t(""),adModeUnknown);  //
	}
	catch(_com_error& ex)
	{
		AfxMessageBox(ex.Description());
	}	

	CDialog::OnInitDialog();
	for(int j = 0; j < 31; j++)
	{
		RunInfor[j] = 0.0;          //数组初始化
	}
	OnRefreshData();
	return TRUE;
}

void CDlgChart::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	CBrush brush;
	brush.CreateSolidBrush(RGB(240,0,0));
	CBrush *pOldBrush = dc.SelectObject(&brush);
	//绘制坐标系
	dc.SetBkColor(RGB(214,215,206));
	dc.MoveTo(20,20);
	dc.LineTo(20,220);
	dc.MoveTo(20,220);
	dc.LineTo(650,220);
	//绘制两个箭头
	dc.MoveTo(15,30);
	dc.LineTo(20,20);
	dc.MoveTo(25,30);
	dc.LineTo(20,20);
	dc.MoveTo(635,215);
	dc.LineTo(650,220);
	dc.MoveTo(635,225);
	dc.LineTo(650,220);
	dc.TextOut(25,15,"营业额");
	dc.TextOut(640,190,"日期");

    //OnRefreshData();
    CString date;
	double CoeY = m_Peak-m_Bottom;
	for(int i = 0; i < 30; i++)
	{	
		//绘制刻度线
		date.Format("%d",i+1);
		int x = 20+i*20;
		dc.MoveTo(x,220);
		dc.LineTo(x,215);
		dc.TextOut(x-5,225,date);
		//绘制曲线
		int X,Y;
	    X= 20*i+10;
		Y= 220-RunInfor[i]*200/CoeY ;   //200/Peak 作为Y方向归一化系数

		dc.MoveTo(X,220);
  		dc.LineTo(X,Y);	
		
		CString s;
	    s.Format("%5.0f",RunInfor[i]);
		if(RunInfor[i]>0.0)        dc.TextOut(X-20,Y-25,s);
		else if(RunInfor[i]<0.0)   dc.TextOut(X-20,Y+5 ,s);	
		else;
	}

    CDialog::OnPaint();
}

void CDlgChart::OnRefreshData()
{
	_RecordsetPtr pRst;
	CString sql;

	CString  sMonth;
	CTime t = CTime::GetCurrentTime();   
	int iMonth =  t.GetMonth();                   //获取当前年月
	if(iMonth<10) sMonth.Format("0%d",iMonth);
	else          sMonth.Format("%d",iMonth);     //补齐两位月份数

	int i=0;
	try	
	{
		pRst = pConn->Execute("Select * FROM TableInfo ",NULL,adCmdText);//读出所有数据
		while(!pRst->End)
		{
			_variant_t vTime =   pRst->Fields->GetItem("Date")->Value;  //!!!
			_variant_t vIncome = pRst->Fields->GetItem("Income")->Value;
			_variant_t vPayout = pRst->Fields->GetItem("Payout")->Value;
		
			CString  sTime = (char*) _bstr_t(vTime); //!!! 取日期时间
 			double income = vIncome.dblVal;
			double payout = vPayout.dblVal;
			if(sMonth.GetAt(0) == sTime.GetAt(4)&&sMonth.GetAt(1) == sTime.GetAt(5)) //如果月份相同
			{
			    CString sDate= sTime.Mid(6,2);
			    int iDate = atoi(sDate);
				if(iDate>0 && iDate<31)              //将每日的每一笔交易累加到该日Infor
		  	        RunInfor[iDate] +=(income-payout);
			}
			pRst->MoveNext();
		}
	}
	catch(_com_error& e)
	{
		AfxMessageBox(e.Description());
	}
	
	m_Peak = m_Bottom = 0;     //冒泡法找出当月每日盈利峰值和负峰值   
	for(int j= 0; j< 30; j++)    
	{
		if(m_Peak < RunInfor[j])   m_Peak = RunInfor[j];
		else m_Peak = m_Peak;
		if(m_Bottom > RunInfor[j]) m_Bottom = RunInfor[j];
		else m_Bottom = m_Bottom;
	}
	pRst->Close();
	pRst.Release();
}

⌨️ 快捷键说明

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