📄 stugradeview.cpp
字号:
{
CListCtrl *pList = (CListCtrl*)GetDlgItem(IDC_GradeLIST);
if(pList->GetSelectedCount()!=1)
{
pList->SetSelectionMark(pList->GetItemCount()-1);
pList->SetItemState(pList->GetItemCount()-1, LVIS_SELECTED, LVIS_SELECTED);
ASSERT(pList->GetItemState(pList->GetItemCount()-1, LVIS_SELECTED) == LVIS_SELECTED);
}
else
{ int n=pList->GetSelectionMark();
if (n!=0)
{
pList->SetSelectionMark(n-1);
pList->SetItemState(n-1, LVIS_SELECTED, LVIS_SELECTED);
ASSERT(pList->GetItemState(n-1, LVIS_SELECTED) == LVIS_SELECTED);
}
else
{ pList->SetSelectionMark(pList->GetItemCount()-1);
pList->SetItemState(pList->GetItemCount()-1, LVIS_SELECTED, LVIS_SELECTED);
ASSERT(pList->GetItemState(pList->GetItemCount()-1, LVIS_SELECTED) == LVIS_SELECTED);
}
}
}
////////////以下为菜单和工具栏!!!!! //菜单公用查询句
void CSTUGRADEView::OnBUTTONrefresh() //工具栏刷新按钮
{
curSQL = GetMenuStateCZ();
if (curSQL=="NULL")
{
CListCtrl *pList = (CListCtrl*)GetDlgItem(IDC_GradeLIST);
pList->DeleteAllItems();
}
else
RefreshGradeList(curSQL);
}
void CSTUGRADEView::OnShowPs() //显示选项->平时成绩
{
p_Menu =AfxGetMainWnd()->GetMenu(); //取得菜单指针
if (p_Menu==NULL) return;
UINT MU_state = p_Menu->GetMenuState(IDF_SHOW_PS,MF_UNCHECKED);
if (MU_state == MF_CHECKED)
{ p_Menu->CheckMenuItem(IDF_SHOW_ALL,MF_UNCHECKED);
p_Menu->CheckMenuItem(IDF_SHOW_PS,MF_UNCHECKED);
}
else
p_Menu->CheckMenuItem(IDF_SHOW_PS,MF_CHECKED);
curSQL = GetMenuStateCZ();
if (curSQL=="NULL")
{
CListCtrl *pList = (CListCtrl*)GetDlgItem(IDC_GradeLIST);
pList->DeleteAllItems();
}
else
RefreshGradeList(curSQL);
}
void CSTUGRADEView::OnShowKs() //显示选项->考试成绩
{
p_Menu =AfxGetMainWnd()->GetMenu(); //取得菜单指针
if (p_Menu==NULL) return;
UINT MU_state = p_Menu->GetMenuState(IDF_SHOW_KS,MF_UNCHECKED);
if (MU_state == MF_CHECKED)
{
p_Menu->CheckMenuItem(IDF_SHOW_ALL,MF_UNCHECKED);
p_Menu->CheckMenuItem(IDF_SHOW_KS,MF_UNCHECKED);
}
else
p_Menu->CheckMenuItem(IDF_SHOW_KS,MF_CHECKED);
curSQL = GetMenuStateCZ();
if (curSQL=="NULL")
{
CListCtrl *pList = (CListCtrl*)GetDlgItem(IDC_GradeLIST);
pList->DeleteAllItems();
}
else
RefreshGradeList(curSQL);
}
void CSTUGRADEView::OnShowZp() //显示选项->总评成绩
{
p_Menu =AfxGetMainWnd()->GetMenu(); //取得菜单指针
if (p_Menu==NULL) return;
UINT MU_state = p_Menu->GetMenuState(IDF_SHOW_ZP,MF_UNCHECKED);
if (MU_state == MF_CHECKED)
{
p_Menu->CheckMenuItem(IDF_SHOW_ALL,MF_UNCHECKED);
p_Menu->CheckMenuItem(IDF_SHOW_ZP,MF_UNCHECKED);
}
else
p_Menu->CheckMenuItem(IDF_SHOW_ZP,MF_CHECKED);
curSQL = GetMenuStateCZ();
if (curSQL=="NULL")
{
CListCtrl *pList = (CListCtrl*)GetDlgItem(IDC_GradeLIST);
pList->DeleteAllItems();
}
else
RefreshGradeList(curSQL);
}
void CSTUGRADEView::OnShowBk() //显示选项->补考成绩
{
p_Menu =AfxGetMainWnd()->GetMenu(); //取得菜单指针
if (p_Menu==NULL) return;
UINT MU_BK = p_Menu->GetMenuState(IDF_SHOW_BK,MF_UNCHECKED);
if (MU_BK == MF_CHECKED)
{
p_Menu->CheckMenuItem(IDF_SHOW_ALL,MF_UNCHECKED);
p_Menu->CheckMenuItem(IDF_SHOW_BK,MF_UNCHECKED);
}
else
p_Menu->CheckMenuItem(IDF_SHOW_BK,MF_CHECKED);
curSQL = GetMenuStateCZ();
if (curSQL=="NULL")
{
CListCtrl *pList = (CListCtrl*)GetDlgItem(IDC_GradeLIST);
pList->DeleteAllItems();
}
else
RefreshGradeList(curSQL);
}
void CSTUGRADEView::OnShowCx() //显示选项->重修成绩
{
p_Menu =AfxGetMainWnd()->GetMenu(); //取得菜单指针
if (p_Menu==NULL) return;
UINT MU_CX = p_Menu->GetMenuState(IDF_SHOW_CX,MF_UNCHECKED);
if (MU_CX == MF_CHECKED)
{
p_Menu->CheckMenuItem(IDF_SHOW_ALL,MF_UNCHECKED);
p_Menu->CheckMenuItem(IDF_SHOW_CX,MF_UNCHECKED);
}
else
p_Menu->CheckMenuItem(IDF_SHOW_CX,MF_CHECKED);
curSQL = GetMenuStateCZ();
if (curSQL=="NULL")
{
CListCtrl *pList = (CListCtrl*)GetDlgItem(IDC_GradeLIST);
pList->DeleteAllItems();
}
else
RefreshGradeList(curSQL);
}
void CSTUGRADEView::OnShowAll() //显示选项->所有成绩
{
p_Menu =AfxGetMainWnd()->GetMenu(); //取得菜单指针
if (p_Menu==NULL) return;
UINT MU_all = p_Menu->GetMenuState(IDF_SHOW_ALL,MF_UNCHECKED);
if (MU_all == MF_CHECKED) //取消不是所有
{
p_Menu->CheckMenuItem(IDF_SHOW_ALL,MF_UNCHECKED);
}
else
{ //显示所有
//AfxMessageBox("所有!");
p_Menu->CheckMenuItem(IDF_SHOW_ALL,MF_CHECKED);
p_Menu->CheckMenuItem(IDF_SHOW_PS,MF_CHECKED);
p_Menu->CheckMenuItem(IDF_SHOW_KS,MF_CHECKED);
p_Menu->CheckMenuItem(IDF_SHOW_ZP,MF_CHECKED);
p_Menu->CheckMenuItem(IDF_SHOW_BK,MF_CHECKED);
p_Menu->CheckMenuItem(IDF_SHOW_CX,MF_CHECKED);
}
curSQL = GetMenuStateCZ();
if (curSQL=="NULL")
{
CListCtrl *pList = (CListCtrl*)GetDlgItem(IDC_GradeLIST);
pList->DeleteAllItems();
}
else
RefreshGradeList(curSQL);
}
CString CSTUGRADEView::GetMenuStateCZ()
{
CString SQL,SQLlast,sql1,sql2,sql3,sql4,sql5;
p_Menu =AfxGetMainWnd()->GetMenu();
if(p_Menu->GetMenuState(IDF_SHOW_ALL,MF_UNCHECKED) == MF_CHECKED)
{ //所有成绩选中
SQL="SELECT 班级名称,学生基本信息.学号,姓名,课程名称,考试名称,成绩,专业名称,系名 FROM 成绩表,学生基本信息,考试类型代码,班级信息,课程信息,专业信息,系别信息 WHERE 系别信息.系别代码 = 专业信息.所属系别 AND 专业信息.专业代码 = 班级信息.所属专业 AND 成绩表.学号 = 学生基本信息.学号 AND 成绩表.考试代码 = 考试类型代码.考试代码 AND 学生基本信息.所属班级 = 班级信息.班级代码 AND 成绩表.课程代码 = 课程信息.课程代码 "; }
else
{
SQLlast = " AND (";
if (p_Menu->GetMenuState(IDF_SHOW_PS,MF_UNCHECKED) == MF_CHECKED)
SQLlast+=" 考试名称 = '平时成绩'";
if (p_Menu->GetMenuState(IDF_SHOW_KS,MF_UNCHECKED) == MF_CHECKED)
SQLlast+=" OR 考试名称 = '期末考试'";
if (p_Menu->GetMenuState(IDF_SHOW_ZP,MF_UNCHECKED) == MF_CHECKED)
SQLlast+=" OR 考试名称 = '总评成绩'";
if (p_Menu->GetMenuState(IDF_SHOW_BK,MF_UNCHECKED) == MF_CHECKED)
SQLlast+=" OR 考试名称 = '补考成绩'";
if (p_Menu->GetMenuState(IDF_SHOW_CX,MF_UNCHECKED) == MF_CHECKED)
SQLlast+=" OR 考试名称 = '重修成绩'";
SQLlast+=")";
if ((p_Menu->GetMenuState(IDF_SHOW_PS,MF_UNCHECKED) != MF_CHECKED) && ((p_Menu->GetMenuState(IDF_SHOW_KS,MF_UNCHECKED) == MF_CHECKED) || (p_Menu->GetMenuState(IDF_SHOW_ZP,MF_UNCHECKED) == MF_CHECKED) || (p_Menu->GetMenuState(IDF_SHOW_BK,MF_UNCHECKED) == MF_CHECKED) || (p_Menu->GetMenuState(IDF_SHOW_CX,MF_UNCHECKED) == MF_CHECKED)))
{
//删除OR
int fc=SQLlast.Find("OR",4);
if (fc!=-1)
SQLlast.Delete(fc,2);
}
if ((p_Menu->GetMenuState(IDF_SHOW_PS,MF_UNCHECKED) != MF_CHECKED) && (p_Menu->GetMenuState(IDF_SHOW_KS,MF_UNCHECKED) != MF_CHECKED)&& (p_Menu->GetMenuState(IDF_SHOW_ZP,MF_UNCHECKED) != MF_CHECKED) && (p_Menu->GetMenuState(IDF_SHOW_BK,MF_UNCHECKED) != MF_CHECKED) && (p_Menu->GetMenuState(IDF_SHOW_CX,MF_UNCHECKED) != MF_CHECKED))
{
return "NULL";
}
SQL="SELECT 班级名称,学生基本信息.学号,姓名,课程名称,考试名称,成绩,专业名称,系名 FROM 成绩表,学生基本信息,考试类型代码,班级信息,课程信息,专业信息,系别信息 WHERE 系别信息.系别代码 = 专业信息.所属系别 AND 专业信息.专业代码 = 班级信息.所属专业 AND 成绩表.学号 = 学生基本信息.学号 AND 成绩表.考试代码 = 考试类型代码.考试代码 AND 学生基本信息.所属班级 = 班级信息.班级代码 AND 成绩表.课程代码 = 课程信息.课程代码 ";
SQL+=SQLlast;
}
return SQL;
}
void CSTUGRADEView::OnFilePrint()
{
// CListCtrl *pList = (CListCtrl*)GetDlgItem(IDC_GradeLIST);
// PrintListCtrl(*pList);
ToExcel("print");
}
void CSTUGRADEView::OnDblclkGradeLIST(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
OnmodifyGRADE();
*pResult = 0;
}
void CSTUGRADEView::OnColumnclickGradeLIST(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
// pNMListView->iSubItem; //返回点中的第几列
CString szSQL;
if( pNMListView->iSubItem == m_nSortedCol )
m_fAsc = !m_fAsc;
else
{
m_fAsc = TRUE;
m_nSortedCol = pNMListView->iSubItem;
}
switch (m_nSortedCol)
{
case 0: //按班级排
if (m_fAsc)
szSQL = curSQL + " ORDER BY 班级信息.班级名称";
else
szSQL = curSQL + " ORDER BY 班级信息.班级名称 DESC";
break;
case 1:
if (m_fAsc)
szSQL = curSQL + " ORDER BY 学生基本信息.学号";
else
szSQL = curSQL + " ORDER BY 学生基本信息.学号 DESC";
break;
case 2:
if (m_fAsc)
szSQL = curSQL + " ORDER BY 学生基本信息.姓名";
else
szSQL = curSQL + " ORDER BY 学生基本信息.姓名 DESC";
break;
case 3:
if (m_fAsc)
szSQL = curSQL + " ORDER BY 课程信息.课程名称";
else
szSQL = curSQL + " ORDER BY 课程信息.课程名称 DESC";
break;
case 4:
if (m_fAsc)
szSQL = curSQL + " ORDER BY 考试类型代码.考试名称";
else
szSQL = curSQL + " ORDER BY 考试类型代码.考试名称 DESC";
break;
case 5:
if (m_fAsc)
szSQL = curSQL + " ORDER BY 成绩表.成绩";
else
szSQL = curSQL + " ORDER BY 成绩表.成绩 DESC";
break;
case 6:
if (m_fAsc)
szSQL = curSQL + " ORDER BY 专业信息.专业名称";
else
szSQL = curSQL + " ORDER BY 专业信息.专业名称 DESC";
break;
case 7:
if (m_fAsc)
szSQL = curSQL + " ORDER BY 系别信息.系名";
else
szSQL = curSQL + " ORDER BY 系别信息.系名 DESC";
break;
default:
szSQL = curSQL;
break;
}
RefreshGradeList(szSQL);
*pResult = 0;
}
void CSTUGRADEView::OnOUTExcel()
{
ToExcel("open");
}
void CSTUGRADEView::ToExcel(CString opr)
{
//查找 Excel进程,关掉
HANDLE han,Ophan; char pname[50]="EXCEL.EXE";
tagPROCESSENTRY32 lppe;
bool ok=false,oknext=true;
han=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);
ok=Process32First(han,&lppe); //tagPROCESSENTRY32类型的结构体,包含有进程ID DWORD th32ProcessID; 和进程名字char szExeFile[MAX_PATH]; 信息
if (ok)
{ while (oknext)
{
oknext=Process32Next(han,&lppe);
if(!strcmp(lppe.szExeFile,pname))
{
Ophan=OpenProcess(PROCESS_ALL_ACCESS,NULL,lppe.th32ProcessID); //???不太懂
TerminateProcess(Ophan,0); //kill
//Ophan=OpenProcess(PROCESS_CREATE_PROCESS,NULL,lppe.th32ProcessID);
}
}
}//结束关闭进程
BeginWaitCursor();
CDatabase database;
CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel安装驱动
CString sExcelFile = "c:\\STUoutExcel.xls"; // 要建立的Excel文件
CString sSql;
// ::ShellExecute(NULL,"close",sExcelFile,0,0,0); //关闭外部程序打开文件
TRY
{
CFile::Remove(sExcelFile);
}
CATCH( CFileException, e )
{
#ifdef _DEBUG
afxDump << "File " << sExcelFile << " cannot be removed\n";
#endif
}
END_CATCH
try
{
sSql.Format("DRIVER={%s};DSN="";FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",
sDriver,sExcelFile,sExcelFile);
// 创建数据库 (既Excel表格文件)
if (database.OpenEx(sSql,CDatabase::noOdbcDialog))
{
//sSql = "if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[grade]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[grade] GO";
sSql = "CREATE TABLE grade (班级名称 TEXT,学号 TEXT,姓名 TEXT,课程名称 TEXT,考试名称 TEXT,成绩 NUMBER,专业名称 TEXT,系名 TEXT)";
database.ExecuteSQL(sSql);
// 插入数值
CListCtrl *pList = (CListCtrl*)GetDlgItem(IDC_GradeLIST);
for (int i=0;i<pList->GetItemCount()-1;i++)
{
CString Class,Sno,Sname,Cname,Ename,Score,Dname,Pname;
Class = pList->GetItemText(i,0);
Sno = pList->GetItemText(i,1);
Sname = pList->GetItemText(i,2);
Cname = pList->GetItemText(i,3);
Ename = pList->GetItemText(i,4);
Score = pList->GetItemText(i,5);
Dname = pList->GetItemText(i,6);
Pname = pList->GetItemText(i,7);
sSql.Format("INSERT INTO grade VALUES ('%s','%s','%s','%s','%s',%s,'%s','%s')",Class,Sno,Sname,Cname,Ename,Score,Dname,Pname);
// AfxMessageBox(sSql);
database.ExecuteSQL(sSql);
}
}
database.Close();
}
catch (CDBException e)
{
TRACE1("Excel驱动没有安装: %s",sDriver);
}
::ShellExecute(NULL,opr,sExcelFile,0,0,0); //调用外部程序打开
EndWaitCursor();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -