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

📄 dlggrade.cpp

📁 成绩管理系统
💻 CPP
📖 第 1 页 / 共 3 页
字号:
{
	// TODO: Add your specialized code here and/or call the base class
	
	return CDialog::DoModal();
}

void CDlgGrade::OnNewRecordG() 
{
	CString szSQL,ComoText,Sno,Cno,kao,strfen; double minfen,fen;
	_RecordsetPtr p_set;
	p_set.CreateInstance(__uuidof( Recordset ));
	//检查学号	
	szSQL = "select * from 学生基本信息";
	GetDlgItemText(IDC_CBO_Sno,ComoText);
	if (ComoText!="所有...")
	{
		szSQL += " where 学号 = '" + ComoText +"'";
		p_set->Open((LPCSTR)szSQL,RS_PARAM); 
		if (p_set->adoEOF) {MessageBox("学号输入有误,请检查!","出错信息",MB_OK|MB_ICONERROR); return;}
		else Sno=ComoText;
		p_set->Close();
	}
	//取得课程代码
	szSQL = "select * from 课程信息";
	GetDlgItemText(IDC_CBO_Cname,ComoText); 
	if (ComoText!="所有...")
	{
		szSQL += " where 课程名称 = '" + ComoText +"'";
		p_set->Open((LPCSTR)szSQL,RS_PARAM); 
		if (p_set->adoEOF) {MessageBox("课程输入有误,请检查!","出错信息",MB_OK|MB_ICONERROR); return;}
		else Cno = (char*) ((_bstr_t) p_set->Fields->Item["课程代码"]->Value);
		p_set->Close();
	}
	//取考试类型
	szSQL = "select * from 考试类型代码";
	GetDlgItemText(IDC_CBO_examType,ComoText); 

		szSQL += " WHERE 考试名称 = '" + ComoText +"'";
		p_set->Open((LPCSTR)szSQL,RS_PARAM); 
		if (p_set->adoEOF) {MessageBox("考试类型有误,请检查!","出错信息",MB_OK|MB_ICONERROR); return;}
		else kao = (char*) ((_bstr_t) p_set->Fields->Item["考试代码"]->Value);
		p_set->Close();
	
	//取成绩
	GetDlgItemText(IDC_EDIT1,ComoText); 
	if (ComoText==_T("")) 
	{
		switch (m_nFlag)
		{
		case 2:
		case 3:
			MessageBox("请输入合格分数线!","出错信息",MB_OK|MB_ICONERROR); 
			break;
        case 4:
			MessageBox("请输入优秀分数线!","出错信息",MB_OK|MB_ICONERROR); 
            break;
		default:
			MessageBox("请输入成绩!","出错信息",MB_OK|MB_ICONERROR); 
		}
		return;}
	else
	{
		try{
			fen=atof(ComoText); 
			strfen.Format("%f",fen);
			if (fen<0 || fen >150) {MessageBox("成绩数字过大!","出错信息",MB_OK|MB_ICONERROR); return;}
		}catch(...)//CException e
		{
			MessageBox("成绩不是数字,请检查!","出错信息",MB_OK|MB_ICONERROR);
		}
	}
	///检查完输入基本项
	switch (m_nFlag)
	{
	case 2:  //补考处理
	case 3:  //重修处理

        GetDlgItemText(IDC_EDIT3,ComoText);  //取最低补考分数线
		if (ComoText==_T("")) 
		{
			
			MessageBox("请输入最低分数线!","出错信息",MB_OK|MB_ICONERROR); 
			return;}
		else
		{
			try{
				minfen=atof(ComoText); 			
				if (fen<0 || fen >150) {MessageBox("成绩数字过大!","出错信息",MB_OK|MB_ICONERROR); return;}
			}catch(...)//CException e
			{
				MessageBox("成绩不是数字,请检查!","出错信息",MB_OK|MB_ICONERROR);
			}
		}

		GetDlgItemText(IDC_EDIT3,ComoText); //合格线
		*b_MiniScore = ComoText;
		//还没有退出的break;
	case 4:  //优秀处理
		GetDlgItemText(IDC_CBO_Sno,ComoText);  //取学号
		*b_Sno = ComoText;
		GetDlgItemText(IDC_CBO_Sname,ComoText);  //取学号
		*b_Sname = ComoText;
		GetDlgItemText(IDC_CBO_Cname,ComoText);//取课程名
		*b_Cname = ComoText;
        GetDlgItemText(IDC_CBO_examType,ComoText); //考试类型
        *b_Ename = ComoText;
		GetDlgItemText(IDC_EDIT1,ComoText); //合格线
		*b_Score = ComoText;

		 CDialog::OnOK();  //退出!
		break;
	default:  //增加和修改
		//先检查有无该项学生-课程记录!
		szSQL.Format("SELECT * FROM 成绩表 WHERE (学号 = '%s') AND (课程代码 = '%s') AND (考试代码 = '%s')",Sno,Cno,kao);
		p_set->Open((LPCSTR)szSQL,RS_PARAM); 
		if (p_set->adoEOF && !m_nFlag) //空而且是修改
		{
			int a= MessageBox("没有学生该科的成绩,要增加吗?","修改出错",MB_YESNO|MB_ICONERROR); 
			if (a==IDYES)
				m_nFlag=1;
			else 
				return;		
		}
		else if (!p_set->adoEOF && (m_nFlag==1))  //已有数据而且是增加
		{
			int a =MessageBox("已有学生该科的成绩,要修改为这个值吗?","增加出错",MB_YESNO|MB_ICONQUESTION);
            if (a==IDYES)
				m_nFlag=0;
			else 
				return;
		}  
		p_set->Close();
		
		if (m_nFlag==1) //1增加
		{  
			szSQL.Format("INSERT INTO 成绩表 VALUES ('%s','%s','%s',%s)",Sno,Cno,kao,strfen);
		}
		else   //修改
		{   
			szSQL.Format("UPDATE 成绩表 SET 成绩 = %s WHERE (学号 = '%s') AND (课程代码 = '%s') AND (考试代码 = '%s')",strfen,Sno,Cno,kao);
		}
		
		HRESULT hr;	
		try{
			hr = pFrame->ExecSQL(szSQL);
			if(SUCCEEDED(hr) && (m_nFlag==1) ) MessageBox("添加成绩成功!","OK",MB_OK|MB_ICONASTERISK);
			if(SUCCEEDED(hr) && !m_nFlag ) MessageBox("修改成绩成功!","OK",MB_OK|MB_ICONASTERISK);
		}
		catch(_com_error e)///捕捉异常
		{
			CString errormessage;
			errormessage.Format("系统中已有此项成绩!\r\n错误信息:%s",e.ErrorMessage());
			AfxMessageBox(errormessage);///显示错误信息
		} 	
		//添加修改成功后,刷新成绩表
		//	CSTUGRADEView *pParent = (CSTUGRADEView*)CDlgGrade::GetParent();//pParentWnd;  //CDlgGrade::GetParent();
		//	if(pParent && pParent->m_hWnd) pParent->RefreshGradeList("SELECT 班级名称,学生基本信息.学号,姓名,课程名称,考试名称,成绩,专业名称,系名 FROM 成绩表,学生基本信息,考试类型代码,班级信息,课程信息,专业信息,系别信息 WHERE 系别信息.系别代码 = 专业信息.所属系别 AND 专业信息.专业代码 = 班级信息.所属专业 AND 成绩表.学号 = 学生基本信息.学号 AND 成绩表.考试代码 = 考试类型代码.考试代码 AND      学生基本信息.所属班级 = 班级信息.班级代码 AND 成绩表.课程代码 = 课程信息.课程代码 ");
		//	else AfxMessageBox("Invalid Parent Window!");
		//pListCtrl->InsertItem(pListCtrl->GetItemCount(),"QQ",0);
		RefreshGradeList(pListCtrl,"SELECT 班级名称,学生基本信息.学号,姓名,课程名称,考试名称,成绩,专业名称,系名 FROM 成绩表,学生基本信息,考试类型代码,班级信息,课程信息,专业信息,系别信息 WHERE 系别信息.系别代码 = 专业信息.所属系别 AND 专业信息.专业代码 = 班级信息.所属专业 AND 成绩表.学号 = 学生基本信息.学号 AND 成绩表.考试代码 = 考试类型代码.考试代码 AND 学生基本信息.所属班级 = 班级信息.班级代码 AND 成绩表.课程代码 = 课程信息.课程代码 AND 考试名称 <> '总评成绩'");
	}

}

void CDlgGrade::OnSelchangedTREEclass(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	CString szSQL;
	if (!m_nFlag && (Modifyother==0))  //修改时搞的  //0默认
	{
		int ans = MessageBox("要修改别的学生成绩吗?","转移修改",MB_YESNO|MB_ICONQUESTION);
		if (ans == IDYES)
		{
			pCombo_Sno->EnableWindow(TRUE);
			pCombo_Sname->EnableWindow(TRUE);
			pCombo_Cname->EnableWindow(TRUE);
			pCombo_kao->EnableWindow(TRUE);

			pCombo_Sno->ResetContent();
			pCombo_Sname->ResetContent();
			pCombo_Cname->ResetContent();
			pCombo_kao->ResetContent();
			Modifyother=1;			
				_RecordsetPtr pT_set1;   
				_variant_t vDno,vDname,vSno,vSname,vCno,vCname;
				pT_set1.CreateInstance(__uuidof( Recordset ));
				//初始化课程
				szSQL = "SELECT * FROM 课程信息 ORDER BY 课程代码";
				pT_set1->Open((LPCSTR)szSQL,RS_PARAM);
				while(!pT_set1->adoEOF)
				{
					vDno=pT_set1->GetCollect("课程代码");  
					vDname=pT_set1->GetCollect("课程名称");
					CString Cname = (BSTR)vDname.pbstrVal;
					pCombo_Cname->AddString(Cname);
					pT_set1->MoveNext();
				}
				pCombo_Cname->SetCurSel(19);
				pT_set1->Close();
			   
			   //初始化考试类型
			   pCombo_kao = (CComboBox*) GetDlgItem(IDC_CBO_examType);
			   szSQL = "SELECT * FROM 考试类型代码 WHERE (考试代码 <> '05') ORDER BY 考试代码";
			   pT_set1->Open((LPCSTR)szSQL,RS_PARAM);
			   while(!pT_set1->adoEOF)
			   {
				   vDno=pT_set1->GetCollect("考试代码");  
				   vDname=pT_set1->GetCollect("考试名称");
				   CString Kname = (BSTR)vDname.pbstrVal;
				   pCombo_kao->AddString(Kname);
				   pT_set1->MoveNext();
			   }
			   pCombo_kao->SetCurSel(0);
			   pT_set1->Close();	   
			
		}
		else 
		{
			Modifyother=2;  //不要再问我修不修改了,好烦呀 ,而且不能修改时点树不要改我不能选中
		}
	}
	if (Modifyother!=2)  //可以修改时入来呵
	{
		
		szSQL = "SELECT * FROM 学生基本信息";
		CTreeCtrl *ptree = (CTreeCtrl*)GetDlgItem(IDC_TREE_class);
		HTREEITEM hitem = ptree->GetSelectedItem();
		//取第几层
		HTREEITEM hN=hitem; int n=0;
		while(hN && hN!=ptree->GetRootItem())
		{  
			n++;
		    hN=ptree->GetParentItem(hN);
		}
      if ((m_nFlag==2) || (m_nFlag==3) || (m_nFlag==4)) *b_Np=n;//返回给补考重修用
		if( hitem && hitem != ptree->GetRootItem())
		{
			CString szPar,szGra;HTREEITEM hpar,hGra;
		szSQL="SELECT 学生基本信息.* FROM 学生基本信息,系别信息,专业信息,班级信息 where 系别信息.系别代码 = 专业信息.所属系别 and 专业信息.专业代码 = 班级信息.所属专业 and 班级信息.班级代码 = 学生基本信息.所属班级";
		CString szSDS = ptree->GetItemText(hitem);
		if ((m_nFlag ==2) || (m_nFlag ==3) || (m_nFlag==4)) *b_School = szSDS;
		switch (n)
		{
		case 1:       //第一层 选中院系
			szSQL+=" and 系别信息.系名='" + szSDS + "'";
            
			break;
		case 2:
			hpar=ptree->GetParentItem(hitem);  //取回父亲结点值
			szPar=ptree->GetItemText(hpar);    //系
			szSQL+=" and 系别信息.系名='" + szPar + "' and 专业信息.专业名称='" + szSDS + "'";
			break; //选中专业
		case 3:
			hpar=ptree->GetParentItem(hitem);  //取回父亲结点值
			szPar=ptree->GetItemText(hpar);    //系
			hGra=ptree->GetParentItem(hpar);    //取回"祖"结点值
			szGra=ptree->GetItemText(hGra);     //专业
			szSQL+=" and 系别信息.系名='" + szGra + "' and 专业信息.专业名称='" + szPar + "' and 班级信息.班级名称 ='" + szSDS + "'";
			break;
		}
		//刷新取得学生信息
		pCombo_Sno->ResetContent();   //删除原有的
		pCombo_Sname->ResetContent();
		
		CString Nostr,str;   
		_variant_t vDno,vDname;//vSno,vSname,vCno,vCname;
		_RecordsetPtr pT_set1;
		pCombo_Sno = (CComboBox*) GetDlgItem(IDC_CBO_Sno);
		pCombo_Sname = (CComboBox*) GetDlgItem(IDC_CBO_Sname);   
		pT_set1.CreateInstance(__uuidof( Recordset ));
		pT_set1->Open((LPCSTR)szSQL,RS_PARAM);
		if ((m_nFlag ==2) || (m_nFlag ==3) || (m_nFlag==4))
		{ 
			pCombo_Sno->AddString("所有...");
			pCombo_Sname->AddString("所有...");
		}
		while(!pT_set1->adoEOF)
		{
			vDno=pT_set1->GetCollect("学号");  
			vDname=pT_set1->GetCollect("姓名");
			CString Sno = (BSTR)vDno.pbstrVal;
			CString Sname = (BSTR)vDname.pbstrVal;
			pCombo_Sno->AddString(Sno);
			pCombo_Sname->AddString(Sname);
			pT_set1->MoveNext();
		}
		pCombo_Sno->SetCurSel(0);
		pCombo_Sname->SetCurSel(0);
		pT_set1->Close();
		if ((m_nFlag ==2) || (m_nFlag ==3) || (m_nFlag==4))  //增加补考的课程和考试类
		{   
			pCombo_Cname = (CComboBox*) GetDlgItem(IDC_CBO_Cname);			
			pCombo_kao = (CComboBox*) GetDlgItem(IDC_CBO_examType);			
			pCombo_Cname->ResetContent();
			pCombo_kao->ResetContent();
			pCombo_Cname->AddString("所有...");
			if ((m_nFlag ==2) || (m_nFlag==4))
				pCombo_kao->AddString("总评成绩");
			else if(m_nFlag ==3)
				pCombo_kao->AddString("补考成绩");

			szSQL = "SELECT * FROM 课程信息 ORDER BY 课程代码";
			pT_set1->Open((LPCSTR)szSQL,RS_PARAM);
			while(!pT_set1->adoEOF)
			{
				vDno=pT_set1->GetCollect("课程代码");  
				vDname=pT_set1->GetCollect("课程名称");
				CString Cname = (BSTR)vDname.pbstrVal;
				pCombo_Cname->AddString(Cname);
				pT_set1->MoveNext();
			}
			pCombo_Cname->SetCurSel(0);
			pT_set1->Close();			   
			if (m_nFlag !=3) //重修处理不需要这些
			{
				szSQL = "SELECT * FROM 考试类型代码 WHERE (考试代码 <> '05') ORDER BY 考试代码";
				pT_set1->Open((LPCSTR)szSQL,RS_PARAM);
				while(!pT_set1->adoEOF)
				{
					vDno=pT_set1->GetCollect("考试代码");  
					vDname=pT_set1->GetCollect("考试名称");
					CString Kname = (BSTR)vDname.pbstrVal;
					pCombo_kao->AddString(Kname);
					pT_set1->MoveNext();
				}				
				pT_set1->Close();
			}		
				pCombo_kao->SetCurSel(0);
		}//end if ((m_nFlag ==2) || (m_nFlag ==3)|| (m_nFlag==4))
		}
	}
	*pResult = 0;
}



⌨️ 快捷键说明

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