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

📄 stugradeview.cpp

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