📄 queryformview.cpp
字号:
// QueryFormView.cpp : implementation file
//
#include "stdafx.h"
#include "QueryFormView.h"
#include "ssq.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include "mainfrm.h"
/////////////////////////////////////////////////////////////////////////////
// CQueryFormView
IMPLEMENT_DYNCREATE(CQueryFormView, CFormView)
CQueryFormView::CQueryFormView()
: CFormView(CQueryFormView::IDD)
{
//{{AFX_DATA_INIT(CQueryFormView)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
CQueryFormView::~CQueryFormView()
{
}
void CQueryFormView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CQueryFormView)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CQueryFormView, CFormView)
//{{AFX_MSG_MAP(CQueryFormView)
ON_BN_CLICKED(IDC_QUERY, OnQuery)
ON_BN_CLICKED(IDC_DRAWLINE, OnDrawline)
ON_CBN_DROPDOWN(IDC_START, OnDropdownStart)
ON_CBN_DROPDOWN(IDC_END, OnDropdownEnd)
ON_CBN_SELCHANGE(IDC_END, OnSelchangeEnd)
ON_CBN_SELCHANGE(IDC_START, OnSelchangeStart)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CQueryFormView diagnostics
#ifdef _DEBUG
void CQueryFormView::AssertValid() const
{
CFormView::AssertValid();
}
void CQueryFormView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CQueryFormView message handlers
void CQueryFormView::OnQuery()
{
//检查和获取各个选择项的状态及取值
mystate.bhanRed = ((CButton*)GetDlgItem(IDC_CHECK1))->GetState();
mystate.bRCount = ((CButton*)GetDlgItem(IDC_CHECK2))->GetState();
mystate.bblue = ((CButton*)GetDlgItem(IDC_CHECK3))->GetState();
mystate.bminred = ((CButton*)GetDlgItem(IDC_CHECK4))->GetState();
mystate.bmaxred = ((CButton*)GetDlgItem(IDC_CHECK5))->GetState();
mystate.b0 = ((CButton*)GetDlgItem(IDC_CHECK6))->GetState();
mystate.b1 = ((CButton*)GetDlgItem(IDC_CHECK7))->GetState();
mystate.b2 = ((CButton*)GetDlgItem(IDC_CHECK8))->GetState();
int index = ((CComboBox*)GetDlgItem(IDC_START))->GetCurSel();
((CComboBox*)GetDlgItem(IDC_START))->GetLBText( index, mystate.strstartNo);
index = ((CComboBox*)GetDlgItem(IDC_END))->GetCurSel();
((CComboBox*)GetDlgItem(IDC_END))->GetLBText( index, mystate.strendNo);
((CEdit*)GetDlgItem(IDC_EDIT1))->GetWindowText(mystate.strred);
((CEdit*)GetDlgItem(IDC_EDIT2))->GetWindowText(mystate.strRCount);
CString strtmp = "";
((CEdit*)GetDlgItem(IDC_EDIT3))->GetWindowText(strtmp);
mystate.ublue = atoi(strtmp);
((CEdit*)GetDlgItem(IDC_EDIT4))->GetWindowText(strtmp);
mystate.uminRed = atoi(strtmp);
((CEdit*)GetDlgItem(IDC_EDIT5))->GetWindowText(strtmp);
mystate.umaxRed = atoi(strtmp);
((CEdit*)GetDlgItem(IDC_EDIT6))->GetWindowText(strtmp);
mystate.ub0 = atoi(strtmp);
((CEdit*)GetDlgItem(IDC_EDIT7))->GetWindowText(strtmp);
mystate.ub1 = atoi(strtmp);
((CEdit*)GetDlgItem(IDC_EDIT8))->GetWindowText(strtmp);
mystate.ub2 = atoi(strtmp);
QueryAll(mystate,myarray);
//将查询到的结果送到显示视
CMainFrame* pmain = (CMainFrame*)AfxGetMainWnd();
(pmain->pview)->SendMessage(WM_DISPDATA,(WPARAM)&myarray,0);
}
//计算字符串中的参数个数,strDomain为要计算参数个数的字符串,cfgf为分隔符
void fjstrParam(CString strDomain,char cfgf,CStringArray& m_strarray)
{
//首先初始化引用数组
m_strarray.RemoveAll();
int ifirst=0;
int ilen;
int ncount = 0;
strDomain.TrimLeft();
strDomain.TrimRight();
strDomain.MakeUpper();
int i = strDomain.Find(cfgf);
if(i < 0) //类型或值域字符串中仅仅只有一项时
{
m_strarray.Add(strDomain);
return ;
}
CString strtemp;
ilen = strDomain.GetLength();
while(i<ilen)
{
strtemp = strDomain.Mid(ifirst,i);
m_strarray.Add(strtemp);
strDomain = strDomain.Mid(i+1,ilen);
strDomain.TrimLeft();
strDomain.TrimRight();
ilen = strDomain.GetLength();
i = strDomain.Find(cfgf);
if(i<0)
{
//把最后一个数写入数组
m_strarray.Add(strDomain);
return ;
}
}
}
int subFind(UINT m[],UINT n[])
{
int nCount = 0;
for(int j = 0;j<6;j++)
{
for(int i=0;i<6;i++)
if(m[j] == n[i])
nCount ++;
}
return nCount;
}
//根据所给定的所有条件进行查询,最终结果存放在m_array中
void CQueryFormView::QueryAll(QUERYSTATE mystate,SSQARRAY& m_array)
{
m_array.RemoveAll();
m_visit.OnInit();
UINT m_Red[6] = {0,0,0,0,0,0};
UINT m_RCount[2] = {0,0};
CStringArray m_strary;
fjstrParam(mystate.strred,' ',m_strary);
for(int i=0;i<m_strary.GetSize();i++)
m_Red[i] = atoi(m_strary.GetAt(i));
//所含红码个数nRCount
int nRCount = m_strary.GetSize();
fjstrParam(mystate.strRCount,' ',m_strary);
for(i=0;(i<m_strary.GetSize() && i<2);i++)
m_RCount[i] = atoi(m_strary.GetAt(i));
int nCountValue = m_strary.GetSize();
SSQDATA myssqdata;
bool bstate = 0;
while(!m_visit.m_pSet->IsEOF())
{
bstate = (mystate.bhanRed == 1) && (mystate.bRCount == 1) && (mystate.bminred == 1) && \
(mystate.bmaxred == 1) && (mystate.bblue == 1) &&(mystate.b0 == 1) && (mystate.b1 == 1) && (mystate.b2 == 1);
if(bstate) //所有条件全部选择
{
//
}
bstate = (mystate.bhanRed == 1) && (mystate.bRCount == 1) && (mystate.bminred == 1) && \
(mystate.bmaxred == 1) && (mystate.bblue == 1) &&(mystate.b0 == 0) && (mystate.b1 == 0) && (mystate.b2 == 0);
if(bstate) //只选择了前面5个条件
{
UINT utmp[6] = {m_visit.m_pSet->m_Red1,m_visit.m_pSet->m_Red2,m_visit.m_pSet->m_Red3,m_visit.m_pSet->m_Red4,m_visit.m_pSet->m_Red5,m_visit.m_pSet->m_Red6};
if(nCountValue == 1) //只给出一个和值,表示仅查询该单独值的记录
m_RCount[1] = m_RCount[0];
if(subFind(m_Red,utmp) == nRCount && (m_visit.m_pSet->m_RCountValue >= m_RCount[0] && m_visit.m_pSet->m_RCountValue <= m_RCount[1]) \
&& (m_visit.m_pSet->m_Red1 >= mystate.uminRed) && (m_visit.m_pSet->m_Red6 <= mystate.umaxRed) && (m_visit.m_pSet->m_Blue == mystate.ublue)) //该记录符合查询条件要求
{
myssqdata.strNo = m_visit.m_pSet->m_qishu;
myssqdata.iBlue = m_visit.m_pSet->m_Blue;
myssqdata.iCountValue = m_visit.m_pSet->m_RCountValue;
for(i = 0;i<6;i++)
myssqdata.iRed[i] = utmp[i];
m_array.Add(myssqdata);
}
}
bstate = (mystate.bhanRed == 1) && (mystate.bRCount == 0) && (mystate.bminred == 0) && \
(mystate.bmaxred == 0) && (mystate.bblue == 0) &&(mystate.b0 == 0) && (mystate.b1 == 0) && (mystate.b2 == 0);
if(bstate) //只选择条件1
{
UINT utmp[6] = {m_visit.m_pSet->m_Red1,m_visit.m_pSet->m_Red2,m_visit.m_pSet->m_Red3,m_visit.m_pSet->m_Red4,m_visit.m_pSet->m_Red5,m_visit.m_pSet->m_Red6};
if(subFind(m_Red,utmp) == nRCount) //该记录符合查询条件要求
{
myssqdata.strNo = m_visit.m_pSet->m_qishu;
myssqdata.iBlue = m_visit.m_pSet->m_Blue;
myssqdata.iCountValue = m_visit.m_pSet->m_RCountValue;
for(i = 0;i<6;i++)
myssqdata.iRed[i] = utmp[i];
m_array.Add(myssqdata);
}
}
bstate = (mystate.bhanRed == 0) && (mystate.bRCount == 1) && (mystate.bminred == 0) && \
(mystate.bmaxred == 0) && (mystate.bblue == 0) &&(mystate.b0 == 0) && (mystate.b1 == 0) && (mystate.b2 == 0);
if(bstate) //只选择条件2
{
if(nCountValue == 1) //只给出一个和值,表示仅查询该单独值的记录
m_RCount[1] = m_RCount[0];
if(m_visit.m_pSet->m_RCountValue >= m_RCount[0] && m_visit.m_pSet->m_RCountValue <= m_RCount[1])
{
myssqdata.strNo = m_visit.m_pSet->m_qishu;
myssqdata.iBlue = m_visit.m_pSet->m_Blue;
myssqdata.iCountValue = m_visit.m_pSet->m_RCountValue;
myssqdata.iRed[0] = m_visit.m_pSet->m_Red1;
myssqdata.iRed[1] = m_visit.m_pSet->m_Red2;
myssqdata.iRed[2] = m_visit.m_pSet->m_Red3;
myssqdata.iRed[3] = m_visit.m_pSet->m_Red4;
myssqdata.iRed[4] = m_visit.m_pSet->m_Red5;
myssqdata.iRed[5] = m_visit.m_pSet->m_Red6;
m_array.Add(myssqdata);
}
}
bstate = (mystate.bhanRed == 0) && (mystate.bRCount == 0) && (mystate.bminred == 0) && \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -