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

📄 dlggrade.cpp

📁 成绩管理系统
💻 CPP
📖 第 1 页 / 共 3 页
字号:
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 + -