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

📄 shaoyeview.cpp

📁 开发的锌流量计算程序
💻 CPP
字号:
// ShaoYeView.cpp : implementation of the CShaoYeView class
//
#include "stdafx.h"
#include "ShaoYe.h"
#include "ShaoYeDoc.h"
#include "ShaoYeView.h"
#include "flowset.h"
#include "global_fun.h"

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

/////////////////////////////////////////////////////////////////////////////
// CShaoYeView

extern BOOL m_bStart;
extern BOOL m_bStop;
extern CSampleResult m_sampleresult;

IMPLEMENT_DYNCREATE(CShaoYeView, CView)

BEGIN_MESSAGE_MAP(CShaoYeView, CView)
	//{{AFX_MSG_MAP(CShaoYeView)
	ON_WM_TIMER()
	ON_WM_CREATE()
	ON_COMMAND(ID_CON_START, OnConStart)
	ON_COMMAND(ID_CON_STOP, OnConStop)
	ON_UPDATE_COMMAND_UI(ID_CON_START, OnUpdateConStart)
	ON_UPDATE_COMMAND_UI(ID_CON_STOP, OnUpdateConStop)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CShaoYeView construction/destruction

CShaoYeView::CShaoYeView()
{
	// TODO: add construction code here
	array_num=0;
}

CShaoYeView::~CShaoYeView()
{
}

BOOL CShaoYeView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CShaoYeView drawing

void CShaoYeView::OnDraw(CDC* pDC)
{
	CShaoYeDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	AfxGetMainWnd()->SetWindowText("锌液流量实时监测");
	CPen CyanPen(PS_SOLID, 1, RGB(128,128,128));
	CPen BluePen(PS_SOLID, 3, RGB( 0, 0, 255 ));
	CPen VioletPen(PS_SOLID,1,RGB( 255, 0, 255 ));
//	CPen YellowPen(PS_SOLID, 1,  RGB(255, 255, 0 ));
//	CPen RedPen(PS_SOLID,1,  RGB(255, 0, 0 ));

	RECT rect;
	GetClientRect(&rect);
	pDC->SetMapMode(MM_TEXT);
	pDC->SetViewportOrg(50,660);
	pDC->SelectObject(BluePen);
	pDC->MoveTo(0,-620);
	pDC->LineTo(0,0);
	pDC->LineTo(950,0);
	pDC->MoveTo(0,-620);//画箭头
	pDC->LineTo(-3,-600);
	pDC->LineTo(3,-600);
	pDC->LineTo(0,-620);
	pDC->MoveTo(950,0);//画箭头
	pDC->LineTo(930,-3);
	pDC->LineTo(930,3);
	pDC->LineTo(950,0);
	
	//划纵坐标
	pDC->SelectObject(CyanPen);
	for(int i=0;i<=15;i++)
	{
		pDC->MoveTo(i*60,3);
		pDC->LineTo(i*60,-580);
	}
	for(i=0;i<=5;i++)
	{
		CTime time = CTime::GetCurrentTime()+CTimeSpan(0,0,0,i*180)-CTimeSpan(0,0,0,900);
		CString str=time.Format("%H:%M:%S");
		pDC->TextOut(i*180-25,5,str);
	}
	pDC->TextOut(935,5,"时间");

	//划横坐标
	for(i=0;i<11;i++)
	{
		pDC->MoveTo(-3,-55*i);
		pDC->LineTo(910,-55*i);
		CString str1;
		str1.Format("%4.1f",16+0.8*i);
		pDC->TextOut(-32,-55*i-8,str1);
	}
	pDC->TextOut(-38,-610,"流量");
	pDC->TextOut(-48,-590,"(吨/班)");
	

	pDC->SetTextColor(RGB(255,0,0));
   	pDC->TextOut(400,-630,"F4");
   	pDC->TextOut(500,-630,"F5");
   	pDC->TextOut(600,-630,"F6");
   	pDC->TextOut(700,-630,"F7");
	pDC->SetTextColor(RGB(0,0,255));
   	pDC->TextOut(375,-610,"流量统计");
   	pDC->TextOut(475,-610,"曲线(小时)");
   	pDC->TextOut(575,-610,"曲线(班次)");
   	pDC->TextOut(680,-610,"异常数据");


	if(!m_bStart)
	{
		pDC->SetTextColor(RGB(128,128,128));
    	pDC->TextOut(200,-630,"F2");
    	pDC->TextOut(180,-610,"开     始");
		pDC->SetTextColor(RGB(255,0,0));
    	pDC->TextOut(300,-630,"F3");
    	pDC->SetTextColor(RGB(0,0,255));
    	pDC->TextOut(280,-610,"停     止");
	}
	else
	{
		pDC->SetTextColor(RGB(255,0,0));
    	pDC->TextOut(200,-630,"F2");
    	pDC->SetTextColor(RGB(0,0,255));
    	pDC->TextOut(180,-610,"开     始");
		pDC->SetTextColor(RGB(128,128,128));
    	pDC->TextOut(300,-630,"F3");
    	pDC->TextOut(280,-610,"停     止");
	}
//	CFont font;
//	font=CreateFont(20,20,0,0,0,0,0,0,0,0,0,0,0);
	//显示流量值
	CRect rect1;
	CBrush brush(RGB(255,0,0));
	for(i=0;i<array_num;i++)
	{
    	rect1=CRect((31-array_num+i)*30+2,-(int)((pDoc->dynamic_array[i]-16)*550/(24-16))-2,(31-array_num+i)*30-2,-(int)((pDoc->dynamic_array[i]-16)*550/(24-16))+2);
		pDC->FillRect(rect1,&brush);
		CString str;
		str.Format("%2.2f",pDoc->dynamic_array[i]);
		if((pDoc->dynamic_array[i]>24)||(pDoc->dynamic_array[i]<16))
			pDC->SetTextColor(RGB(255,0,0));
		else
			pDC->SetTextColor(RGB(0,0,0));
		if(i%2)
			//下面
			pDC->TextOut((31-array_num+i)*30-15,-(int)((pDoc->dynamic_array[i]-16)*550/(24-16)-10),str);
		else
			pDC->TextOut((31-array_num+i)*30-20,-(int)((pDoc->dynamic_array[i]-16)*550/(24-16)+25),str);

	}

	//流量值连线
    pDC->SelectObject(VioletPen);

	for(i=0;i<array_num-1;i++)
	{
		pDC->MoveTo((31-array_num+i)*30,-(int)((pDoc->dynamic_array[i]-16)*550/(24-16)));
		pDC->LineTo((32-array_num+i)*30,-(int)((pDoc->dynamic_array[i+1]-16)*550/(24-16)));
    }

	ReleaseDC(pDC);
}

/////////////////////////////////////////////////////////////////////////////
// CShaoYeView printing

BOOL CShaoYeView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CShaoYeView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CShaoYeView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CShaoYeView diagnostics

#ifdef _DEBUG
void CShaoYeView::AssertValid() const
{
	CView::AssertValid();
}

void CShaoYeView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CShaoYeDoc* CShaoYeView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CShaoYeDoc)));
	return (CShaoYeDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CShaoYeView message handlers

void CShaoYeView::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	CShaoYeDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	
//	Flux_filter[sample_count]=convert_flux()*28.8;//采样流量(班/吨)
	Flux_filter[sample_count]=(rand()%13+56)*28.8/100.0;
	sample_count++;
	if(sample_count==50)
	{
		sample_count=0;
		pDoc->AveFlow=Digital_filter(Flux_filter);

        show_count++;
		if(show_count==6)
		{
			pDoc->show_flag=true;
        	if(array_num<31)
			{
    			pDoc->dynamic_array[array_num]=pDoc->AveFlow;
		    	array_num++;
			}
		    else
			{
			    for(int i=0;i<array_num-1;i++)
    				pDoc->dynamic_array[i]=pDoc->dynamic_array[i+1];
	    		pDoc->dynamic_array[array_num-1]=pDoc->AveFlow;
			}
			InvalidateRect( NULL, TRUE );
			UpdateWindow(); 
			show_count=0;
		}

		CString strdate,strsearch;
		CTime time=CTime::GetCurrentTime();		
		strdate.Format("%4d-%02d-%02d",time.GetYear(),time.GetMonth(),time.GetDay());
		second_now=time.GetSecond();
		int second_dif=second_now-second_pre;
		if(second_dif<0) second_dif+=60;
		second_pre=second_now;

		//添加记录+++++
		if(m_sampleresult.IsOpen())
		{
			m_sampleresult.AddNew();
			m_sampleresult.m_sample_time=720*time.GetHour()+12*time.GetMinute()+(int)time.GetSecond()/5;
			m_sampleresult.m_flux=pDoc->AveFlow;
			m_sampleresult.Update();
		}
		int period=time.GetHour();
		strsearch.Format("%d",period);
		strsearch="[日期]='"+strdate+"' and [时段]="+strsearch;
		if((m_AddFlux.Find(AFX_DAO_FIRST,strsearch)))
		{
			m_AddFlux.Edit();
			pDoc->TotalFlow=pDoc->AveFlow*second_dif/28.8+m_AddFlux.m_nFlow;
			m_AddFlux.m_nFlow=pDoc->TotalFlow;
			m_AddFlux.Update();
		}
		else
		{
			m_AddFlux.AddNew();
			m_AddFlux.m_strDate=strdate;
			m_AddFlux.m_nRange=time.GetHour();
			pDoc->TotalFlow=pDoc->AveFlow*second_dif/28.8;
			m_AddFlux.m_nFlow=pDoc->AveFlow*second_dif/28.8;
			m_AddFlux.Update();
		}
	}
	CView::OnTimer(nIDEvent);
}


int CShaoYeView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	// TODO: Add your specialized creation code here
	return 0;
}

float CShaoYeView::Digital_filter(float a[])
{
	float temp;
    int i,j;
	for(j=1;j<50;j++)
	{
		for(i=j;i>0;i--)
		{
			if(a[i]<a[i-1])
			{
				temp=a[i];
				a[i]=a[i-1];
				a[i-1]=temp;
			}
			else break;
		}
	}
	temp=0;
	for(i=10;i<40;i++)
		temp+=a[i];
	return temp/30;
}

void CShaoYeView::OnConStart() 
{
	// TODO: Add your command handler code here
	m_bStart=false;
	m_bStop=true;
	InvalidateRect( NULL, TRUE );
	UpdateWindow();

	CString str;
	str="已经开始工作!";

//	AfxGetMainWnd()->m


	CTime time;
	time=CTime::GetCurrentTime();
	CString querystr,delstr;
	BOOL flag=true;//创建新表的标记,若有此表,则为flg=false
	int year,month,day;
    year=time.GetYear();
	month=time.GetMonth();
	day=time.GetDay();
	querystr.Format("%4d%02d%02d",year,month,day);
	if(month==1||month==2)
	{
		year=year-1;
		month=month+10;
	}
	else
	{
		month=month-2;
	}
	delstr.Format("%4d%02d",year,month);

	CDaoDatabase m_DB;
	try
	{
		m_DB.Open("e:\\shaoye\\test_result.mdb");
		CDaoTableDefInfo tabledefinfo;
		int tb_num=m_DB.GetTableDefCount();//数据库中表的个数
		CString tb_name;
		
		for(int i=0;i<tb_num;i++)
		{
			m_DB.GetTableDefInfo(i,tabledefinfo);
			tb_name=tabledefinfo.m_strName;
       
			//删除一个月前的数据
			if(tb_name.Left(6)==delstr)
		
			{
				m_DB.DeleteTableDef(tb_name);
				i=i-1;
			}

			//查找是否有此数据表
		if(tb_name==querystr)
			{
				flag=false;
				break;
			}
		}
		
/*		//产生测试数据
		for(int k=1;k<=31;k++)
		{
		    CDaoTableDef *pTableSet;
		    pTableSet=new CDaoTableDef(&m_DB);
			
			querystr.Format("200112%02d",k);
			pTableSet->Create(querystr);
			pTableSet->CreateField("time",dbInteger,dbFixedField);
			pTableSet->CreateField("flux",dbSingle,dbFixedField);
			pTableSet->Append();
		}*/

	if(flag)
		{
			CDaoTableDef *pTableSet;
		    pTableSet=new CDaoTableDef(&m_DB);
			
			pTableSet->Create(querystr);
			pTableSet->CreateField("time",dbInteger,dbFixedField);
			pTableSet->CreateField("flux",dbSingle,dbFixedField);
			pTableSet->Append();
		}
		else
		{
		}
	}
	catch(CDaoException *e)
	{
		e->Delete();
	    MessageBox("无法打开数据库","错误",MB_OK);
	}

	m_AddFlux.Open();
	m_sampleresult.Open();
	sample_count=0;
	array_num=0;
	show_count=0;
    time=CTime::GetCurrentTime();
	second_pre=time.GetSecond();
	SetTimer(0,100,NULL);
}

void CShaoYeView::OnConStop() 
{
	// TODO: Add your command handler code here
	m_bStart=true;
	m_bStop=false;
	InvalidateRect( NULL, TRUE );
	UpdateWindow();
	m_sampleresult.Close();
	m_AddFlux.Close();
	KillTimer(0);
}

void CShaoYeView::OnUpdateConStart(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable(m_bStart);	
}

void CShaoYeView::OnUpdateConStop(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable(m_bStop);
}

⌨️ 快捷键说明

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