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

📄 成绩管理系统dlg.cpp

📁 成绩管理系统,用VC和SQL 2000开发
💻 CPP
📖 第 1 页 / 共 4 页
字号:
			  m_list.SetItemText(i,2,(char*)(_bstr_t)holder);
	     holder=prst->GetCollect("课程号");
		  if(holder.vt!=VT_NULL)
			  m_list.SetItemText(i,3,(char*)(_bstr_t)holder);   
		  holder=prst->GetCollect("课程名");
		  if(holder.vt!=VT_NULL)
			  m_list.SetItemText(i,4,(char*)(_bstr_t)holder);
		   holder=prst->GetCollect("学分");
		  if(holder.vt!=VT_NULL)
			  m_list.SetItemText(i,5,(char*)(_bstr_t)holder);
		   holder=prst->GetCollect("总评成绩");
		  if(holder.vt!=VT_NULL)
			  m_list.SetItemText(i,6,(char*)(_bstr_t)holder);
		  prst->MoveNext();
	  }
	  prst->Close();
  }
  catch(_com_error&e)
  {
	 AfxMessageBox("操作异常!");
	  return;
  }
}

void CMyDlg::OnDel() 
{
	// TODO: Add your control notification handler code here
	CString lb;
	m_LB.GetLBText(m_LB.GetCurSel(),lb);
	if(lb=="学生资料")delstu();
	if(lb=="课程表")delcourse();
	if(lb=="选修课成绩表")delsc();
	if(lb=="补考通知单")delbukaotongzhi();
	if(lb=="重修通知单")delchongxiutongzhi();
	//if(m_lb=="学生资料")delbukaochengji();
	//if(m_lb=="学生资料")delchongxiuchengji();
}

void CMyDlg::delstu()
{
 CString sID,strsQL;
	int item;
	_RecordsetPtr prst=NULL;
      prst.CreateInstance(__uuidof(Recordset));
  try
  {	 
	  _bstr_t strsql("select * from student");
	   prst=m_DBCnt->Execute(strsql,NULL,adCmdText);
       
	   	if(!prst->BOF)
			prst->MoveFirst();
		else
		{
			AfxMessageBox("表内数据为空");
			return;
		}
     POSITION pos=m_list.GetFirstSelectedItemPosition();
	   if(pos==NULL)
	   {
		   AfxMessageBox("没有选中记录!");
		   return;
	   }
	   else while(pos)
	  {
		   
          item=m_list.GetNextSelectedItem(pos);
		   sID=m_list.GetItemText(item,0);
         if(AfxMessageBox("是否删除?",MB_YESNO) == IDYES)
		 {
			strsQL.Format("delete from v_student where 学号='"+sID+"'");	
	         prst=m_DBCnt->Execute(_bstr_t(strsQL),NULL,adCmdText);
		 }
         Readstudent();
	   }
           
   }
	   catch(_com_error& e)
	   {
	    AfxMessageBox("操作异常或者是你所在的用户组无此权限!");
	    return;
	   }
}

void CMyDlg::delcourse()
{
CString sID,strsQL;
	int item;
	_RecordsetPtr prst=NULL;
      prst.CreateInstance(__uuidof(Recordset));
  try
  {	 
	  _bstr_t strsql("select * from v_course");
	   prst=m_DBCnt->Execute(strsql,NULL,adCmdText);
       
	   	if(!prst->BOF)
			prst->MoveFirst();
		else
		{
			AfxMessageBox("表内数据为空");
			return;
		}
     POSITION pos=m_list.GetFirstSelectedItemPosition();
	   if(pos==NULL)
	   {
		   AfxMessageBox("没有选中记录!");
		   return;
	   }
	   else while(pos)
	  {
		   
          item=m_list.GetNextSelectedItem(pos);
		   sID=m_list.GetItemText(item,0);
         if(AfxMessageBox("是否删除?",MB_YESNO) == IDYES)
		 {
			strsQL.Format("delete from v_course where 课程号='%s'",sID);	
	         prst=m_DBCnt->Execute(_bstr_t(strsQL),NULL,adCmdText);
		 }
         Readcourse();
	   }
           
   }
	   catch(_com_error e)
	   {
	    AfxMessageBox("操作异常或者是你所在的用户组无此权限!");
	    return;
	   }
}

void CMyDlg::delsc()
{
CString sID,strsQL;
	int item;
	_RecordsetPtr prst=NULL;
      prst.CreateInstance(__uuidof(Recordset));
  try
  {	 
	  _bstr_t strsql("select * from v_sc");
	   prst=m_DBCnt->Execute(strsql,NULL,adCmdText);
       
	   	if(!prst->BOF)
			prst->MoveFirst();
		else
		{
			AfxMessageBox("表内数据为空");
			return;
		}
     POSITION pos=m_list.GetFirstSelectedItemPosition();
	   if(pos==NULL)
	   {
		   AfxMessageBox("没有选中记录!");
		   return;
	   }
	   else while(pos)
	  {
		   
          item=m_list.GetNextSelectedItem(pos);
		   sID=m_list.GetItemText(item,0);
         if(AfxMessageBox("是否删除?",MB_YESNO) == IDYES)
		 {
			strsQL.Format("delete from v_sc where 学号='%s'",sID);	
	         prst=m_DBCnt->Execute(_bstr_t(strsQL),NULL,adCmdText);
		 }
         ReadSC();
	   }
           
   }
	   catch(_com_error& e)
	   {
	    AfxMessageBox("操作异常或者是你所在的用户组无此权限!");
	    return;
	   }
}

void CMyDlg::delbukaotongzhi()
{

}

void CMyDlg::delchongxiutongzhi()
{

}

void CMyDlg::OnCx() 
{
	// TODO: Add your control notification handler code here
_RecordsetPtr prst;
    
	CHAXUN dlg;
	if(dlg.DoModal()==IDOK)
	{
     zcxlb=cxlb;
	 ZSQL=CXSQL;
	 key=k;
	 cxinit(ZSQL);
	}
}


typedef struct tagColAtt
{
    int nColIndex;
    CString strColText;
    int nPrintX;
    int nSubItemIndex;
}COLATT;

BOOL PrintListCtrl(CListCtrl &m_list)
{

    PRINTDLG pd;
    pd.lStructSize = sizeof(PRINTDLG);
    pd.Flags = PD_RETURNDC;
    pd.hDC = NULL;
    pd.hwndOwner = NULL;
    pd.hInstance = NULL;
    pd.nMaxPage = 1;
    pd.nMinPage = 1;
    pd.nFromPage = 1;
    pd.nToPage  = 1;
    pd.nCopies = 1;
    pd.hDevMode = NULL;
    pd.hDevNames = NULL;

    //显示打印对话框,由用户来设定纸张大小等。
    if(!PrintDlg(&pd)) return FALSE; 
    ASSERT(pd.hDC!=NULL);

    int nHorRes = GetDeviceCaps(pd.hDC, HORZRES);    
    int nVerRes = GetDeviceCaps(pd.hDC, VERTRES);
    int nXMargin = 8;
    int nYMargin = 8;
    TEXTMETRIC tm;
    GetTextMetrics(pd.hDC, &tm);
    int nCharHeight = tm.tmHeight;
    int nCharWidth = tm.tmAveCharWidth;
    

    CHeaderCtrl* pHeader = m_list.GetHeaderCtrl();
    //获得行,列的个数
    int nColCount = pHeader->GetItemCount();
    int nLineCount = m_list.GetItemCount();
    
    int ColOrderArray[100];
    COLATT ca[100];
    m_list.GetColumnOrderArray(ColOrderArray, nColCount);
    int nColX =nXMargin*nCharWidth;

    //检索各列的信息,确定列标题的内容长度。
    for(int i =0 ; i< nColCount; i++)
    {
        ca[i].nColIndex = ColOrderArray[i];
        LVCOLUMN lvc;
        char text[100];
        lvc.mask = LVCF_TEXT|LVCF_SUBITEM;
        lvc.pszText = text;
        lvc.cchTextMax = 100;
        m_list.GetColumn(ca[i].nColIndex, &lvc);
        ca[i].strColText = lvc.pszText;
        ca[i].nSubItemIndex = lvc.iSubItem;
        ca[i].nPrintX = nColX;
        nColX += nCharWidth * strlen(ca[i].strColText);

        if(nColX > nHorRes) 
        {
            DeleteDC(pd.hDC);
            AfxMessageBox("字段太多,无法在一行内打印,请试用较大的纸,或横向打印。");
            return FALSE;
        }

  
    }

    DOCINFO di;
    di.cbSize = sizeof(DOCINFO);
    di.lpszDocName = "ListCtrl Data Printing"; 
    di.lpszOutput = (LPTSTR) NULL; 
    di.lpszDatatype = (LPTSTR) NULL; 
    di.fwType = 0; 
    StartDoc(pd.hDC, &di);
    StartPage(pd.hDC);

    //调整各列的宽度,以使各列在后面的打印输出时更均匀的打印在纸上。
    int space = (nHorRes-nXMargin*nCharWidth-nColX) / (nColCount -1);
    for(i =1; i<nColCount; i++)
    {
        ca[i].nPrintX += i*space;
    }
    
    //输出列标题
    for(i =0; i<nColCount; i++)
        TextOut(pd.hDC, ca[i].nPrintX, nYMargin, 
            ca[i].strColText, strlen(ca[i].strColText));
    
    int nMaxLinePerPage = nVerRes/nCharHeight -3;
    int nCurPage =1;
    //输出各列的数据
    for(i =0; i<nLineCount; i++)
    {
        for(int j =0; j<nColCount; j++)
        {
            if(i+1-(nCurPage-1)*nMaxLinePerPage > nMaxLinePerPage)
            {
                //新的一页
                EndPage(pd.hDC);
                StartPage(pd.hDC);
                nCurPage ++;
            }
            CString subitem = m_list.GetItemText(i,j);
            TextOut(pd.hDC, ca[j].nPrintX, 
                    nYMargin+(i+1-(nCurPage-1)*nMaxLinePerPage)*nCharHeight, 
                    subitem, strlen(subitem));
        }
    }
    
    EndPage(pd.hDC);
    EndDoc(pd.hDC);
//打印结束
    DeleteDC(pd.hDC);
    return TRUE;
}
void CMyDlg::OnDy() 
{
	// TODO: Add your control notification handler code here
 PrintListCtrl(m_list);
	
}

void CMyDlg::OnMenuStuCx() 
{
	// TODO: Add your command handler code here
	CHAXUN dlg;
		if(dlg.DoModal()==IDOK)
	{
     zcxlb=cxlb;
	 ZSQL=CXSQL;
	 key=k;
	 cxinit(ZSQL);
	}
}

void CMyDlg::OnMenuBf() 
{
		// TODO: Add your command handler code here
	CFile file;	
	CString strPath;
	TCHAR   lpstrFilename[MAX_PATH]="";     
  CFileDialog   filedlg(FALSE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"BAK Files(*.bak)|*.bak|All files(*.*)|*.*||",NULL);   
  filedlg.m_ofn.lpstrFile= lpstrFilename;       
  filedlg.m_ofn.lStructSize =88;   
  if(filedlg.DoModal()==IDOK)   
  {   
   strPath=filedlg.GetPathName();  
   CString strsql;
	_RecordsetPtr prst=NULL; 
	prst.CreateInstance(__uuidof(Recordset)); 
	try
	{
	strsql.Format("BACKUP DATABASE StuGrade TO DISK ='%s'",strPath);
	prst=m_DBCnt->Execute(_bstr_t(strsql),NULL,adCmdText);
    MessageBox("备份数据库成功!");
	}	
	catch(_com_error& e)
	{
          AfxMessageBox("备份数据库失败,可能是你所在的用户组没有此权限!");           
              return;
	}
 
  } 	
}

void CMyDlg::OnMenuHf() 
{
	// TODO: Add your command handler code here
		CFile file;	
	CString strPath;
	TCHAR   lpstrFilename[MAX_PATH]="";     
  CFileDialog   filedlg(TRUE,".bak","*",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"BAK Files(*.bak)|*.bak|All files(*.*)|*.*||",NULL);   
  filedlg.m_ofn.lpstrFile= lpstrFilename;       
  filedlg.m_ofn.lStructSize =88;   
  if(filedlg.DoModal()==IDOK)   
  {   
   strPath=filedlg.GetPathName();  
	CString strsql;
	_RecordsetPtr prst=NULL; 
	prst.CreateInstance(__uuidof(Recordset)); 
	try
	{
	strsql.Format("RESTORE FILELISTONLY FROM DISK='%s' WITH NORECOVERY",strPath);
	prst=m_DBCnt->Execute(_bstr_t(strsql),NULL,adCmdText);
    MessageBox("恢复数据库成功!");
	}	
	catch(_com_error& e)
	{
          AfxMessageBox("恢复数据库失败!");          
              return;
	}
  }
	
}


void CMyDlg::cxinit(CString s)
{
		CString lb;
	m_LB.GetLBText(m_LB.GetCurSel(),lb);
	/////////////////////列表加线和整行选择/////////////////////////////////
		LONG lStyle = m_list.SendMessage
		(LVM_GETEXTENDEDLISTVIEWSTYLE);
	lStyle |= LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES| 
		LVS_EX_HEADERDRAGDROP;
	m_list.SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0,
		(LPARAM)lStyle);
	m_list.SetExtendedStyle(lStyle);
	/////////////////////////////////////////////////////////////
	int nWidth=100;
	int nColumnCount = m_list.GetHeaderCtrl()->GetItemCount();
	m_dy.EnableWindow(true);

⌨️ 快捷键说明

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