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

📄 kzt.cpp

📁 ISO9000质量管理小程序
💻 CPP
字号:
// Kzt.cpp : implementation file
//

#include "stdafx.h"
#include "Ex07b.h"
#include "Kzt.h"
#include "Kztsplitter.h"
#include "KztList.h"


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

/////////////////////////////////////////////////////////////////////////////
// CKzt

IMPLEMENT_DYNCREATE(CKzt, CFormView)

CKzt::CKzt()
	: CFormView(CKzt::IDD)
{
	//{{AFX_DATA_INIT(CKzt)
	m_gsj = 0.0f;
	//}}AFX_DATA_INIT
}

CKzt::~CKzt()
{
}

void CKzt::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CKzt)
	DDX_Text(pDX, IDC_EDIT1, m_gsj);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CKzt, CFormView)
	//{{AFX_MSG_MAP(CKzt)
	ON_BN_CLICKED(IDC_KZTADD, OnKztadd)
	ON_BN_CLICKED(IDC_KZTTONGJI, OnKzttongji)
	ON_BN_CLICKED(IDC_XSKZT, OnXskzt)
	ON_BN_CLICKED(IDC_KZTXG, OnKztxg)
	ON_BN_CLICKED(IDC_KZTNEXT, OnKztnext)
	ON_BN_CLICKED(IDC_KINSERT, OnKinsert)
	ON_BN_CLICKED(IDC_KREMOVE, OnKremove)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, OnFilePrintPreview)
	ON_COMMAND(ID_FILE_PRINT, OnFilePrint)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CKzt diagnostics

#ifdef _DEBUG
void CKzt::AssertValid() const
{
	CFormView::AssertValid();
}

void CKzt::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CKzt message handlers

void CKzt::OnKztadd() 
{
	// TODO: Add your control notification handler code here

	UpdateData();

	CSbtDoc *pDoc=GetDocument();
	ASSERT_VALID(pDoc);

	CGcsj * pGcsj;
	pGcsj=new CGcsj(m_gsj);
	pDoc->m_gcdataList.AddTail(pGcsj);

	pDoc->gccurPos=pDoc->m_gcdataList.GetHeadPosition();
	pDoc->UpdateAllViews(this);

//控制控件的允许,
	CWnd *m_Wnd=NULL;
	m_Wnd=GetDlgItem(IDC_KZTTONGJI);
	m_Wnd->EnableWindow();
	m_Wnd=GetDlgItem(IDC_KZTNEXT);
	m_Wnd->EnableWindow();
	m_Wnd=GetDlgItem(IDC_KZTXG);
	m_Wnd->EnableWindow();
	m_Wnd=GetDlgItem(IDC_KINSERT);
	m_Wnd->EnableWindow();
	m_Wnd=GetDlgItem(IDC_KREMOVE);
	m_Wnd->EnableWindow();
	
}


#ifdef _DEBUG

	 CSbtDoc * CKzt::GetDocument()
	{
		ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSbtDoc)));
		return (CSbtDoc*)m_pDocument;
	
	}
#endif


void CKzt::OnInitialUpdate() 
{
	CFormView::OnInitialUpdate();
	CSbtDoc *pDoc=GetDocument();
	ASSERT_VALID(pDoc);

	CRect rectb(50,100,80,130);
	CButtonST  button1;
	button1.Create("sldk",BS_AUTOCHECKBOX,rectb,this,5);
	button1.ShowWindow(SW_SHOW);

	int m=pDoc->m_gcdataList.GetCount();
	if (m!=0)
  
	{

		CGcsj *pGcsj=pDoc->m_gcdataList.GetAt(pDoc->gccurPos);

		m_gsj=pGcsj->m_fgcsj;
	
	  //成员变量的数据传给控制ID,在对话框中显示数据
		UpdateData(false); 
		
		pDoc->m_gcdataList.GetNext(pDoc->gccurPos);
		if(pDoc->gccurPos==NULL)
				pDoc->gccurPos=pDoc->m_gcdataList.GetHeadPosition();
		// 为进行下一轮循环做准备
//控制控件的允许,
	CWnd *m_Wnd=NULL;
	m_Wnd=GetDlgItem(IDC_KZTTONGJI);
	m_Wnd->EnableWindow();
	m_Wnd=GetDlgItem(IDC_KZTNEXT);
	m_Wnd->EnableWindow();
	m_Wnd=GetDlgItem(IDC_KZTXG);
	m_Wnd->EnableWindow();
	m_Wnd=GetDlgItem(IDC_KINSERT);
	m_Wnd->EnableWindow();
	m_Wnd=GetDlgItem(IDC_KREMOVE);
	m_Wnd->EnableWindow();

	}	
	// TODO: Add your specialized code here and/or call the base class
//创建丰富的按钮

//显示图形/
	m_btnXstuxing.SubclassDlgItem(IDC_XSKZT,this);
	m_btnXstuxing.SetIcon(IDI_XSTUXING1,IDI_XSTUXING2);
	m_btnXstuxing.SetActiveFgColor(RGB(255,0,0));
	m_btnXstuxing.SetBtnCursor(IDC_HAND);
//添加数据
	m_btnAdd.SubclassDlgItem(IDC_KZTADD,this);
	m_btnAdd.SetIcon(IDI_ADD2,IDI_ADD1);
	m_btnAdd.SetActiveFgColor(RGB(255,0,0));
	m_btnAdd.SetBtnCursor(IDC_HAND);
//数据统计
	m_btnTongji.SubclassDlgItem(IDC_KZTTONGJI,this);
	m_btnTongji.SetIcon(IDI_TONGJI1,IDI_TONGJI2);
	m_btnTongji.SetActiveFgColor(RGB(255,0,0));
	m_btnTongji.SetBtnCursor(IDC_HAND);
//修改数据
	m_btnXg.SubclassDlgItem(IDC_KZTXG,this);
	m_btnXg.SetIcon(IDI_XG1,IDI_XG2);
	m_btnXg.SetActiveFgColor(RGB(255,0,0));
	m_btnXg.SetBtnCursor(IDC_HAND);

//下一数据
	m_btnNext.SubclassDlgItem(IDC_KZTNEXT,this);
	m_btnNext.SetIcon(IDI_NEXT1,IDI_NEXT2);
	m_btnNext.SetActiveFgColor(RGB(255,0,0));
	m_btnNext.SetBtnCursor(IDC_HAND);
//插入数据
	m_btnInsert.SubclassDlgItem(IDC_KINSERT,this);
	m_btnInsert.SetIcon(IDI_INSERT1,IDI_INSERT2);
	m_btnInsert.SetActiveFgColor(RGB(255,0,0));
	m_btnInsert.SetBtnCursor(IDC_HAND);

//删除数据
    m_btnDel256.SubclassDlgItem(IDC_KREMOVE, this);
    m_btnDel256.SetIcon(IDI_DEL1, IDI_DEL2);
    m_btnDel256.SetActiveFgColor(RGB(255,0,0));	
	m_btnDel256.SetBtnCursor(IDC_HAND);
}

void CKzt::OnKzttongji() 
{
	// TODO: Add your control notification handler code here
	CSbtDoc * pDoc=GetDocument();
	ASSERT_VALID(pDoc);
	pDoc->m_kztdataList.RemoveAll();
	if(pDoc->m_gcdataList.GetCount()%5!=0)
	{
		AfxMessageBox("请输入5的倍数个数据");
		return;
	}

	//统计控制图分组数据Xi,R
	int i=0;
	float zleiji=0;//求总的累计量,便于求XI平均值的平均值即pDoc->k_xcl
	float xleiji=0;
	float rleiji=0;
	POSITION pos=pDoc->m_gcdataList.GetHeadPosition();
//	POSITION pos2=pDoc->m_kztdataList.GetHeadPosition();
	while (pos!=NULL)
	{
		float max=-10000;
		float min=10000;
		float leiji=0;

		

		do
		{
			i++;
			CGcsj *pGcsj=pDoc->m_gcdataList.GetNext(pos);
			leiji=leiji+pGcsj->m_fgcsj;
			if (max<pGcsj->m_fgcsj)
				max=pGcsj->m_fgcsj;
			if (min>pGcsj->m_fgcsj)
				min=pGcsj->m_fgcsj;

		}
		while(i%5!=0);
		CKzttjsj *pKzttjsj ;
		pKzttjsj=new CKzttjsj();
		pKzttjsj->k_leiji=leiji;
		pKzttjsj->k_R=max-min;
		pKzttjsj->k_middle=leiji/5;

		pDoc->m_kztdataList.AddTail(pKzttjsj);

		xleiji=xleiji+pKzttjsj->k_middle;
		rleiji=rleiji+pKzttjsj->k_R;

	}
//统计	XUCL,K_XCL,K_XLCL

	pDoc->k_xcl=xleiji*5/i;
	pDoc->k_Rcl=rleiji*5/i;
	pDoc->k_xucl=pDoc->k_xcl+pDoc->k_A2*pDoc->k_Rcl;
	pDoc->k_xlcl=pDoc->k_xcl-pDoc->k_A2*pDoc->k_Rcl;

	pDoc->k_Rucl=pDoc->k_D4*pDoc->k_Rcl;


	pDoc->UpdateAllViews(this);

//控制控件的允许,
	CWnd *m_Wnd=NULL;
	m_Wnd=GetDlgItem(IDC_XSKZT);
	m_Wnd->EnableWindow();
}

void CKzt::OnXskzt() 
{
	// TODO: Add your control notification handler code here
	CSbtDoc * pDoc=GetDocument();
	ASSERT_VALID(pDoc);

	pDoc->b_xskzt=true;
	pDoc->UpdateAllViews(this);
}

void CKzt::OnKztxg() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	CSbtDoc * pDoc=GetDocument();
	ASSERT_VALID(pDoc);

	pDoc->m_gcdataList.GetPrev(pDoc->gccurPos);
		if(pDoc->gccurPos==NULL)
				pDoc->gccurPos=pDoc->m_gcdataList.GetTailPosition();

	CGcsj *pGcsj;
    pGcsj=pDoc->m_gcdataList.GetAt(pDoc->gccurPos);
	pGcsj->m_fgcsj=m_gsj;
	pDoc->m_gcdataList.GetNext(pDoc->gccurPos);

		if(pDoc->gccurPos==NULL)
				pDoc->gccurPos=pDoc->m_gcdataList.GetHeadPosition();
	pDoc->UpdateAllViews(this);
	
}

void CKzt::OnKztnext() 
{
	// TODO: Add your control notification handler code here
	CSbtDoc *pDoc=GetDocument();
	ASSERT_VALID(pDoc);


	if(pDoc->gccurPos!=NULL)   //
	{

		CGcsj *pGcsj=pDoc->m_gcdataList.GetAt(pDoc->gccurPos);

		m_gsj=pGcsj->m_fgcsj;
	
	  //成员变量的数据传给控制ID,在对话框中显示数据
		UpdateData(false); 
		
		pDoc->m_gcdataList.GetNext(pDoc->gccurPos);
		if(pDoc->gccurPos==NULL)
				pDoc->gccurPos=pDoc->m_gcdataList.GetHeadPosition();
		// 为进行下一轮循环做准备
	}
	else
		MessageBox("当前列表中没有数据!");
	pDoc->UpdateAllViews(this);

	
}

void CKzt::OnKinsert() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
	CSbtDoc * pDoc=GetDocument();
	ASSERT_VALID(pDoc);

	CGcsj * pGcsj;
	pGcsj=new CGcsj(m_gsj);	
	pDoc->m_gcdataList.InsertBefore(pDoc->gccurPos,pGcsj);

	pDoc->SetModifiedFlag();
	pDoc->UpdateAllViews(this);	
}

void CKzt::OnKremove() 
{
	// TODO: Add your control notification handler code here
	CSbtDoc * pDoc=GetDocument();
	ASSERT_VALID(pDoc);

	CGcsj *pGcsj=pDoc->m_gcdataList.GetPrev(pDoc->gccurPos);
		if(pDoc->gccurPos==NULL)
				pDoc->gccurPos=pDoc->m_gcdataList.GetTailPosition();
	pDoc->m_gcdataList.RemoveAt(pDoc->gccurPos);
	pDoc->gccurPos=pDoc->m_gcdataList.GetHeadPosition();

	pDoc->SetModifiedFlag();
	pDoc->UpdateAllViews(this);	
}

void CKzt::OnFilePrintPreview() 
{
	// TODO: Add your command handler code here
	CKztsplitter * pFrame=(CKztsplitter*)GetParentFrame();
	CKztList* pList=(CKztList*)(pFrame->m_splitterWnd.GetPane(0,1));
	::SendMessage(pList->m_hWnd,WM_COMMAND,ID_FILE_PRINT_PREVIEW,NULL);
}

void CKzt::OnFilePrint() 
{
	CKztsplitter* pFrame=(CKztsplitter*)GetParentFrame();
    CKztList* pList=(CKztList*)(pFrame->m_splitterWnd.GetPane(0,1));
	::SendMessage(pList->m_hWnd,WM_COMMAND,ID_FILE_PRINT,NULL);	

}



void CKzt::CalcWindowRect(LPRECT lpClientRect, UINT nAdjustType) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	CFormView::CalcWindowRect(lpClientRect, nAdjustType);
}

BOOL CKzt::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class

	if (pMsg->message==WM_KEYDOWN&&pMsg->wParam==VK_RETURN&&pMsg->hwnd==((GetDlgItem(IDC_EDIT1))->m_hWnd))
	{
		UpdateData();

		CSbtDoc *pDoc=GetDocument();
		ASSERT_VALID(pDoc);

		CGcsj * pGcsj;
		pGcsj=new CGcsj(m_gsj);
		pDoc->m_gcdataList.AddTail(pGcsj);

		pDoc->gccurPos=pDoc->m_gcdataList.GetHeadPosition();
		pDoc->UpdateAllViews(this);

//控制控件的允许,
		CWnd *m_Wnd=NULL;
		m_Wnd=GetDlgItem(IDC_KZTTONGJI);
		m_Wnd->EnableWindow();
		m_Wnd=GetDlgItem(IDC_KZTNEXT);
		m_Wnd->EnableWindow();
		m_Wnd=GetDlgItem(IDC_KZTXG);
		m_Wnd->EnableWindow();
		m_Wnd=GetDlgItem(IDC_KINSERT);
		m_Wnd->EnableWindow();
		m_Wnd=GetDlgItem(IDC_KREMOVE);
		m_Wnd->EnableWindow();
		
		CEdit * pEdit=(CEdit*)GetDlgItem(IDC_EDIT1);
		pEdit->SetSel(0,-1,true);
	}
	return CFormView::PreTranslateMessage(pMsg);
}

⌨️ 快捷键说明

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