📄 dlggrade.cpp
字号:
void CDlgGrade::OnEditchangeCBOSno()
{
//每输入一个数字即提示
CString ComoText;
GetDlgItemText(IDC_CBO_Sno,ComoText);
SelectSno(ComoText,NULL,1); //1为删除原有的Item!
// MessageBox("此学号不存在!","学号输入有误",MB_OK);
//int n=pCombo_Sno->GetCount();
// CString a; a.Format("%d",n);
// AfxMessageBox(a);
}
void CDlgGrade::OnSelendokCBOSno()
{
CString ComoText;
//GetDlgItemText(IDC_CBO_Sno,ComoText);不能取得动态,怎说呢,是选择瞬间那时的值
pCombo_Sno->GetLBText(pCombo_Sno->GetCurSel(),ComoText); //OK
SelectSno(ComoText,NULL,0); //0不删除Item
}
void CDlgGrade::OnKillfocusCBOSno() //取消焦点时,自动补上没有填的学号
{
// TODO: Add your control notification handler code here
CString ComoText,szNO;
char *a = new char[50]; //返回完整Sno 字符 分配空间有两种方法 1、new 2、a="ff" //尽量不要用a="ff";这样初始化会只有两个空间,而且这样赋值在传指针函数也不能再用!!!! 不能再a="ddfd";不再分配空间再赋值
GetDlgItemText(IDC_CBO_Sno,ComoText);
//pCombo_Sno->GetLBText(pCombo_Sno->GetCurSel(),ComoText); //在killfocus会出错
if(SelectSno(ComoText,a,0))
{ szNO=a;
int nIndex=pCombo_Sno->FindString(0,szNO);
if (pCombo_Sno->FindString(0,szNO)!=LB_ERR) //在combo已有的
pCombo_Sno->SetCurSel(nIndex);
else
{
pCombo_Sno->ResetContent();
pCombo_Sno->AddString(szNO);
pCombo_Sno->SetCurSel(0);
}
}
else
{
if ((m_nFlag ==0) || (m_nFlag ==1))
MessageBox("此学号不存在!","学号输入有误",MB_OK|MB_ICONERROR);
}
}
void CDlgGrade::OnEditchangeCBOSname()
{
//每输入一个姓名汉字即提示
CString ComoText;
GetDlgItemText(IDC_CBO_Sname,ComoText);
SelectSname(ComoText,NULL,1);
// MessageBox("此姓名不存在!","姓名输入有误",MB_OK);
}
void CDlgGrade::OnSelendokCBOSname() //选择完成!
{
CString ComoText;
pCombo_Sname->GetLBText(pCombo_Sname->GetCurSel(),ComoText);
SelectSname(ComoText,NULL,0);
}
void CDlgGrade::OnKillfocusCBOSname() //取消焦点时,自动补上没有填的姓名
{
CString ComoText,szName;
char *a= new char[50];
GetDlgItemText(IDC_CBO_Sname,ComoText);
if(SelectSname(ComoText,a,0))
{ szName=a;
int nIndex=pCombo_Sname->FindString(0,szName);
if (pCombo_Sname->FindString(0,szName)!=LB_ERR) //在combo已有的
pCombo_Sname->SetCurSel(nIndex);
else
{
pCombo_Sname->ResetContent();
pCombo_Sname->AddString(szName);
pCombo_Sname->SetCurSel(0);
}
}
else if ((m_nFlag ==0) || (m_nFlag ==1))
MessageBox("此姓名不存在!","姓名输入有误",MB_OK|MB_ICONERROR);
}
int CDlgGrade::SelectSno(CString sno,char *fullsno,int nFlag) //提示查询,返回第一个符合的sno full字符 用指针
{
// TODO: Add your control notification handler code here
_RecordsetPtr p_set;
p_set.CreateInstance(__uuidof( Recordset ));
CString szSQL = "select * from 学生基本信息";
szSQL += " where 学号 like '" + sno +"%'";
szSQL += " order by 学号";
p_set->Open((LPCSTR)szSQL,RS_PARAM);
// pCombo_Sno->ResetContent();
if (nFlag==1)
{ int a=pCombo_Sno->GetCount();
for (int i=0;i<a;i++)
pCombo_Sno->DeleteString(0);
//pCombo_Sno->ResetContent();
pCombo_Sname->ResetContent();
}
if(!p_set->adoEOF)
{
if (nFlag==1)
{ bool fir=true;
while (!p_set->adoEOF) //有值,把类似的加入!呵呵
{
CString szID = (char*) ((_bstr_t) p_set->Fields->Item["学号"]->Value);
CString szName= (char*) ((_bstr_t) p_set->Fields->Item["姓名"]->Value);
if( fullsno != NULL && fir)
{ fir=false;
strcpy(fullsno,(LPSTR)(LPCTSTR)szID); //(LPSTR)(LPCTSTR)获得CString的指针
}
pCombo_Sno->AddString(szID);
pCombo_Sname->AddString(szName);
p_set->MoveNext();
}
pCombo_Sname->SetCurSel(0);
}
else
{
CString szID = (char*) ((_bstr_t) p_set->Fields->Item["学号"]->Value);
CString szName= (char*) ((_bstr_t) p_set->Fields->Item["姓名"]->Value);
if( fullsno != NULL)
strcpy(fullsno,(LPSTR)(LPCTSTR)szID); //(LPSTR)(LPCTSTR)获得CString的指针
int nIndex=pCombo_Sname->FindString(0,szName);
if (pCombo_Sname->FindString(0,szName)!=LB_ERR) //在combo已有的
pCombo_Sname->SetCurSel(nIndex);
else
{
pCombo_Sname->ResetContent();
pCombo_Sname->AddString(szName);
pCombo_Sname->SetCurSel(0);
}
}
p_set->Close();
return 1;
}
else //MessageBox("此学号不存在!","学号输入有误",MB_OK);
{ p_set->Close();
return 0;}
}
int CDlgGrade::SelectSname(CString sname,char *fullsname,int nFlag)
{
// TODO: Add your control notification handler code here
_RecordsetPtr p_set;
p_set.CreateInstance(__uuidof( Recordset ));
CString szSQL = "select * from 学生基本信息";
szSQL += " where 姓名 like '" + sname +"%'";
szSQL += " order by 学号";
p_set->Open((LPCSTR)szSQL,RS_PARAM);
if (nFlag==1)
{ int a=pCombo_Sname->GetCount();
for (int i=0;i<a;i++)
pCombo_Sname->DeleteString(0);
//pCombo_Sno->ResetContent();
pCombo_Sno->ResetContent();
}
if(!p_set->adoEOF)
{
if (nFlag==1)
{ bool fir=true;
while (!p_set->adoEOF) //有值,把类似的加入!呵呵
{
CString szID = (char*) ((_bstr_t) p_set->Fields->Item["学号"]->Value);
CString szName= (char*) ((_bstr_t) p_set->Fields->Item["姓名"]->Value);
if( fullsname != NULL && fir)
{ fir=false;
strcpy(fullsname,(LPSTR)(LPCTSTR)szName); //(LPSTR)(LPCTSTR)获得CString的指针
}
pCombo_Sno->AddString(szID);
pCombo_Sname->AddString(szName);
p_set->MoveNext();
}
pCombo_Sno->SetCurSel(0);
}
else
{
CString szID = (char*) ((_bstr_t) p_set->Fields->Item["学号"]->Value);
CString szName= (char*) ((_bstr_t) p_set->Fields->Item["姓名"]->Value);
if( fullsname != NULL)
strcpy(fullsname,(LPSTR)(LPCTSTR)szName); //(LPSTR)(LPCTSTR)获得CString的指针
int nIndex=pCombo_Sno->FindString(0,szID);
if (pCombo_Sno->FindString(0,szID)!=LB_ERR) //在combo已有的
pCombo_Sno->SetCurSel(nIndex);
else
{
pCombo_Sno->ResetContent();
pCombo_Sno->AddString(szID);
pCombo_Sno->SetCurSel(0);
}
}
p_set->Close();
return 1;
}
else //MessageBox("此学号不存在!","学号输入有误",MB_OK);
{ p_set->Close();
return 0;}
}
void CDlgGrade::OnChangeEdit1() //检查float型数字
{
CString InputStr; char c;
CEdit *pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
GetDlgItemText(IDC_EDIT1,InputStr);
if (!InputStr.GetLength()) return;
c=InputStr.GetAt(InputStr.GetLength()-1); //全角字符是负值 0~9 为48~57 小数点. 为46
if ((c > 47) && (c < 58)) //输入为数字 主要检查0开头数字 但0.1 OK
{
if (InputStr.GetLength()==2)
{
if(InputStr.GetAt(0)=='0' && InputStr.GetAt(1)!='.') //发现.不是最后一只,说明前面有.
{
MessageBox("请检查数字的输入!","出错信息",MB_OK|MB_ICONERROR);
InputStr.Delete(InputStr.GetLength()-1,1);
SetDlgItemText(IDC_EDIT1,_T(InputStr));
}
}
}
else if (c=='.')
{
if(InputStr.Find(c)!=InputStr.GetLength()-1) //发现.不是最后一只,说明前面有.
{
MessageBox("已输入小数点,请检查!","出错信息",MB_OK|MB_ICONERROR);
InputStr.Delete(InputStr.GetLength()-1,1);
SetDlgItemText(IDC_EDIT1,_T(InputStr));
}
}
else
{
MessageBox("输入成绩不是数字,请检查!","出错信息",MB_OK|MB_ICONERROR);
InputStr.Delete(InputStr.GetLength()-1,1);
SetDlgItemText(IDC_EDIT1,_T(InputStr));
}
}
void CDlgGrade::OnChangeEdit3()
{
CString InputStr; char c;
CEdit *pEdit = (CEdit*)GetDlgItem(IDC_EDIT3);
GetDlgItemText(IDC_EDIT3,InputStr);
if (!InputStr.GetLength()) return; //|| !strcmp(InputStr,"输入总评成绩最低补考分数")
c=InputStr.GetAt(InputStr.GetLength()-1); //全角字符是负值 0~9 为48~57 小数点. 为46
if ((c > 47) && (c < 58)) //输入为数字 主要检查0开头数字 但0.1 OK
{
if (InputStr.GetLength()==2)
{
if(InputStr.GetAt(0)=='0' && InputStr.GetAt(1)!='.') //发现.不是最后一只,说明前面有.
{
MessageBox("请检查数字的输入!","出错信息",MB_OK|MB_ICONERROR);
InputStr.Delete(InputStr.GetLength()-1,1);
SetDlgItemText(IDC_EDIT3,_T(InputStr));
}
}
}
else if (c=='.')
{
if(InputStr.Find(c)!=InputStr.GetLength()-1) //发现.不是最后一只,说明前面有.
{
MessageBox("已输入小数点,请检查!","出错信息",MB_OK|MB_ICONERROR);
InputStr.Delete(InputStr.GetLength()-1,1);
SetDlgItemText(IDC_EDIT3,_T(InputStr));
}
}
else
{
MessageBox("输入成绩不是数字,请检查!","出错信息",MB_OK|MB_ICONERROR);
InputStr.Delete(InputStr.GetLength()-1,1);
SetDlgItemText(IDC_EDIT3,_T(InputStr));
}
}
void CDlgGrade::RefreshGradeList(CListCtrl *pList, CString szSQL)
{
pList->DeleteAllItems();
_RecordsetPtr p_set;
if(FAILED(p_set.CreateInstance( __uuidof( Recordset ) ) ) )
{
MessageBox("Fail to create recordset instance!",NULL,MB_ICONSTOP);
return;
}
try{
p_set->Open((LPCSTR)szSQL,RS_PARAM);
}
catch(_com_error e)
{ CString errormessage;
errormessage.Format("打开记录错误!\r\n数据连接错误:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
return;
}
while ( !p_set->adoEOF )
{
CString Class = (char*) ((_bstr_t) p_set->Fields->Item["班级名称"]->Value);
CString Sno = (char*) ((_bstr_t) p_set->Fields->Item["学号"]->Value);
CString Sname = (char*) ((_bstr_t) p_set->Fields->Item["姓名"]->Value);
CString Cname = (char*) ((_bstr_t) p_set->Fields->Item["课程名称"]->Value);
CString Ename = (char*) ((_bstr_t) p_set->Fields->Item["考试名称"]->Value);
CString Rname = (char*) ((_bstr_t) p_set->Fields->Item["成绩"]->Value);
CString Dname = (char*) ((_bstr_t) p_set->Fields->Item["专业名称"]->Value);
CString Pname = (char*) ((_bstr_t) p_set->Fields->Item["系名"]->Value);
int iItem = pList->InsertItem(pList->GetItemCount(),Class,0);
pList->SetItemText(iItem,1,Sno);
pList->SetItemText(iItem,2,Sname);
pList->SetItemText(iItem,3,Cname);
pList->SetItemText(iItem,4,Ename);
pList->SetItemText(iItem,5,Rname);
pList->SetItemText(iItem,6,Dname);
pList->SetItemText(iItem,7,Pname);
p_set->MoveNext();
}
p_set->Close();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -