📄 vchomeworkdlg.cpp
字号:
m_radio2 = 2;
m_mark = 3;
m_info.DeleteColumn(0);
m_info.InsertColumn(0,"样品ID");
RECT rect3;
m_info.GetWindowRect(&rect3);
int wid3 = rect3.right - rect3.left;
m_info.SetColumnWidth(0,wid3);
m_info.SetExtendedStyle(LVS_EX_FULLROWSELECT);
m_info.DeleteAllItems();
m_info.SetRedraw(FALSE);
_bstr_t str3("select * from swatch");
_variant_t temp;
try
{
int i = 0;
m_Ptr.CreateInstance(__uuidof(Recordset));
m_Ptr = m_conn->Execute(str3,NULL,adCmdText);
m_Ptr->MoveFirst();
while(!m_Ptr->adoEOF)
{
temp = m_Ptr->GetCollect("样品ID");
if(temp.vt != VT_NULL)
m_info.InsertItem(i,(char*)(_bstr_t)temp);
m_Ptr->MoveNext();
}
m_Ptr->Close();
}
catch(_com_error& e)
{
AfxMessageBox(e.ErrorMessage());
}
m_info.SetRedraw(TRUE);
}
void CVcHomeworkDlg::OnRadio8()
{
// TODO: Add your control notification handler code here
m_radio2 = 3;
m_mark = 4;
m_info.DeleteColumn(0);
m_info.InsertColumn(0,"样品ID");
RECT rect4;
m_info.GetWindowRect(&rect4);
int wid4 = rect4.right - rect4.left;
m_info.SetColumnWidth(0,wid4);
m_info.SetExtendedStyle(LVS_EX_FULLROWSELECT);
m_info.DeleteAllItems();
m_info.SetRedraw(FALSE);
_bstr_t str3("select * from swatch");
_variant_t temp;
try
{
int i = 0;
m_Ptr.CreateInstance(__uuidof(Recordset));
m_Ptr = m_conn->Execute(str3,NULL,adCmdText);
m_Ptr->MoveFirst();
while(!m_Ptr->adoEOF)
{
temp = m_Ptr->GetCollect("样品ID");
if(temp.vt != VT_NULL)
m_info.InsertItem(i,(char*)(_bstr_t)temp);
m_Ptr->MoveNext();
}
m_Ptr->Close();
}
catch(_com_error& e)
{
AfxMessageBox(e.ErrorMessage());
}
m_info.SetRedraw(TRUE);
}
void CVcHomeworkDlg::OnClickListInfo(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
int i = m_info.GetSelectionMark();
_variant_t T;
T = m_info.GetItemText(i,0);
m_id = (long)T;
*pResult = 0;
}
void CVcHomeworkDlg::OnButtonSearch()
{
// TODO: Add your control notification handler code here
switch(m_mark)
{
case 1:
{
if(m_id <= 0)
{
AfxMessageBox("客户ID错误,请选择正确值!");
return;
}
m_Ptr.CreateInstance(__uuidof(Recordset));
_bstr_t str;
_variant_t temp;
m_list.DeleteColumn(0);
m_list.DeleteColumn(1);
m_list.DeleteColumn(2);
m_list.InsertColumn(0,"样品ID");
m_list.InsertColumn(1,"客户ID");
m_list.InsertColumn(2,"仪器ID");
RECT rect;
m_list.GetWindowRect(&rect);
int wid = rect.right - rect.left;
m_list.SetColumnWidth(0,wid/3);
m_list.SetColumnWidth(1,wid/3);
m_list.SetColumnWidth(2,wid/3);
m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT);
m_list.DeleteAllItems();
m_list.SetRedraw(FALSE);
try
{
CString sql;
sql.Format("select * from swatch where 客户ID = %ld",m_id);
str = sql;
m_Ptr = m_conn->Execute(str,NULL,adCmdText);
if(m_Ptr->adoEOF)
{
AfxMessageBox("此用户没有样品记录,请选择其他客户ID!");
return;
}
int i=0;
_variant_t roader;
while(!m_Ptr->adoEOF)
{
roader = m_Ptr->GetCollect("样品ID");
if(roader.vt != VT_NULL)
m_list.InsertItem(i,(char*)(_bstr_t)roader);
roader = m_Ptr->GetCollect("客户ID");
if(roader.vt != VT_NULL)
m_list.SetItemText(i,1,(char*)(_bstr_t)roader);
roader = m_Ptr->GetCollect("仪器ID");
if(roader.vt != VT_NULL)
m_list.SetItemText(i,2,(char*)(_bstr_t)roader);
m_Ptr->MoveNext();
}
m_Ptr->Close();
}
catch(_com_error& e)
{
AfxMessageBox(e.ErrorMessage());
}
m_list.SetRedraw(TRUE);
AfxMessageBox("查询成功!信息记录表中即为结果。");
m_id = 0;
m_Eflag = 1;
break;
}
case 2:
{
if(m_id <= 0)
{
AfxMessageBox("仪器ID错误,请选择正确值!");
return;
}
m_Ptr.CreateInstance(__uuidof(Recordset));
_bstr_t str;
_variant_t temp;
m_list.DeleteColumn(0);
m_list.DeleteColumn(1);
m_list.DeleteColumn(2);
m_list.InsertColumn(0,"样品ID");
m_list.InsertColumn(1,"客户ID");
m_list.InsertColumn(2,"仪器ID");
RECT rect;
m_list.GetWindowRect(&rect);
int wid = rect.right - rect.left;
m_list.SetColumnWidth(0,wid/3);
m_list.SetColumnWidth(1,wid/3);
m_list.SetColumnWidth(2,wid/3);
m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT);
m_list.DeleteAllItems();
m_list.SetRedraw(FALSE);
try
{
CString sql;
sql.Format("select * from swatch where 仪器ID = %ld",m_id);
str = sql;
m_Ptr = m_conn->Execute(str,NULL,adCmdText);
if(m_Ptr->adoEOF)
{
AfxMessageBox("此没有样品使用此仪器,请选择其它样品ID!");
return;
}
int i=0;
_variant_t roader;
while(!m_Ptr->adoEOF)
{
roader = m_Ptr->GetCollect("样品ID");
if(roader.vt != VT_NULL)
m_list.InsertItem(i,(char*)(_bstr_t)roader);
roader = m_Ptr->GetCollect("客户ID");
if(roader.vt != VT_NULL)
m_list.SetItemText(i,1,(char*)(_bstr_t)roader);
roader = m_Ptr->GetCollect("仪器ID");
if(roader.vt != VT_NULL)
m_list.SetItemText(i,2,(char*)(_bstr_t)roader);
m_Ptr->MoveNext();
}
m_Ptr->Close();
}
catch(_com_error& e)
{
AfxMessageBox(e.ErrorMessage());
}
m_list.SetRedraw(TRUE);
AfxMessageBox("查询成功!信息记录表中即为结果。");
m_id = 0;
m_Eflag = 1;
break;
}
case 3:
{
if(m_id <= 0)
{
AfxMessageBox("样品ID错误,请选择正确值!");
return;
}
m_Ptr.CreateInstance(__uuidof(Recordset));
_bstr_t str;
_variant_t temp;
m_list.DeleteColumn(0);
m_list.DeleteColumn(1);
m_list.DeleteColumn(2);
m_list.InsertColumn(0,"样品ID");
m_list.InsertColumn(1,"自变量X");
m_list.InsertColumn(2,"因变量Y");
RECT rect;
m_list.GetWindowRect(&rect);
int wid = rect.right - rect.left;
m_list.SetColumnWidth(0,wid/3);
m_list.SetColumnWidth(1,wid/3);
m_list.SetColumnWidth(2,wid/3);
m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT);
m_list.DeleteAllItems();
m_list.SetRedraw(FALSE);
try
{
CString sql;
sql.Format("select * from data where 样品ID = %ld",m_id);
str = sql;
m_Ptr = m_conn->Execute(str,NULL,adCmdText);
if(m_Ptr->adoEOF)
{
AfxMessageBox("此样品没有数据,请选择其它样品ID!");
return;
}
int i=0;
_variant_t roader;
while(!m_Ptr->adoEOF)
{
roader = m_Ptr->GetCollect("样品ID");
if(roader.vt != VT_NULL)
m_list.InsertItem(i,(char*)(_bstr_t)roader);
roader = m_Ptr->GetCollect("自变量X");
if(roader.vt != VT_NULL)
m_list.SetItemText(i,1,(char*)(_bstr_t)roader);
roader = m_Ptr->GetCollect("因变量Y");
if(roader.vt != VT_NULL)
m_list.SetItemText(i,2,(char*)(_bstr_t)roader);
m_Ptr->MoveNext();
}
m_Ptr->Close();
}
catch(_com_error& e)
{
AfxMessageBox(e.ErrorMessage());
}
m_list.SetRedraw(TRUE);
AfxMessageBox("查询成功!信息记录表中即为结果。");
m_id = 0;
m_Eflag = 1;
break;
}
}
}
void CVcHomeworkDlg::OnButtonAbout()
{
// TODO: Add your control notification handler code here
CAboutDlg dlg;
dlg.DoModal();
}
void CVcHomeworkDlg::OnNihe(double m_x[], double m_y[], int n, double a[], int power)
{
int i,j,k;
double s[100],t[100],b[100];
double z,p,c,g,q,d1,d2;
for(i = 0;i <= power-1; i++)a[i] = 0.0;
if(power > n) power = n;
if(power > 20) power = 20;
z= 0.0;
for(i=0;i<=n-1;i++)
z = z+m_x[i]/(1.0*n);
b[0] = 1.0; d1 = 1.0*n; p = 0.0; c= 0.0;
for(i=0;i<=n-1; i++)
{
p=p+(m_x[i]-z);
c= c+m_y[i];
}
c=c/d1;
p=p/d1;
a[0] = c*b[0];
if(power>1)
{
t[1] = 1.0;
t[0] = -p;
d2 = 0.0;
c=0.0;
g=0.0;
for(i=0;i<=n-1;i++)
{
q=m_x[i]-z-p;
d2=d2+q*q;
c=c+m_y[i]*q;
g=g+(m_x[i]-z)*q*q;
}
c=c/d2;
p=g/d2;
q=d2/d1;
d1 = d2;
a[1]= c*t[1];
a[0] = c*t[0]+a[0];
}
for(j=2;j<=power-1;j++)
{
s[j]=t[j-1];
s[j-1]= -p*t[j-1]+t[j-2];
if(j>=3)
for(k=j-2;k>=1;k--)
s[k]=-p*t[k]+t[k-1]-q*b[k];
s[0]=-p*t[0]-q*b[0];
d2=0.0;
c=0.0;
g=0.0;
for(i=0;i<=n-1;i++)
{
q=s[j];
for(k=j-1;k>=0;k--)
q=q*(m_x[i]-z)+s[k];
d2=d2+q*q;
c=c+m_y[i]*q;
g=g+(m_x[i]-z)*q*q;
}
c=c/d2;
p=g/d2;
q=d2/d1;
d1=d2;
a[j]=c*s[j];
t[j]=s[j];
for(k=j-1;k>=0;k--)
{
a[k]=c*s[k]+a[k];
b[k]=t[k];
t[k]=s[k];
}
}
}
void CVcHomeworkDlg::OnButtonFit()
{
// TODO: Add your control notification handler code here
if(m_mark == 4)
{
if (m_id == 0)
{
MessageBox("请选择样品ID!");
return;
}
int power;
CPowerDlg dlg;
if(dlg.DoModal() == IDCANCEL)
return;
power = dlg.Getpower();
//从数据库中读取要拟合的数据
CString sql_;
sql_.Format("select * from data where 样品ID=%ld",m_id);
_bstr_t sql = sql_;
_variant_t temp;
double sx[100],sy[100],sa[100];
int n;
try
{
m_Ptr.CreateInstance(__uuidof(Recordset));
m_Ptr =m_conn->Execute(sql,NULL,adCmdText);
n = 0;
m_Ptr->MoveFirst();
if(m_Ptr->adoEOF)
{
MessageBox("样品没有数据,不能拟合!");
return;
}
while(!m_Ptr->adoEOF)
{
temp = m_Ptr->GetCollect("自变量X");
if(temp.vt != VT_NULL)
sx[n] =(double)temp;
temp = m_Ptr->GetCollect("因变量Y");
if(temp.vt != VT_NULL)
sy[n]=(double)temp;
m_Ptr->MoveNext();
n++;
}
if(n<=2)
{
MessageBox("样品数据太少!");
return;
}
m_Ptr->Close();
}
catch(_com_error& e)
{
AfxMessageBox(e.ErrorMessage());
return;
}
if (power >= n)
{
MessageBox("拟合次数需小于数据个数!");
return;
}
OnNihe(sx,sy,n,sa,power);
CString func1,func2,func3;
func1.Format("Y = ");
for(int i=0;i<power-1;i++)
{
func2.Format(" %lf (X - x(平均值))",sa[i]);
func3.Format("^%d +",i);
func1 += func2;
func1 += func3;
}
func2.Format(" %lf (X - x(平均值))",sa[power-1]);
func3.Format("^%d ",power-1);
func1 += func2;
func1 += func3;
AfxMessageBox(func1);
m_id = 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -