📄 dlggrade.cpp
字号:
{
// 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 + -