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

📄 viewshowcent.cpp

📁 成绩管理系统
💻 CPP
字号:
// ViewShowCent.cpp : implementation file
//

#include "stdafx.h"
#include "STUGRADE.h"
#include "ViewShowCent.h"
#include "MainFrm.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CViewShowCent

extern CMainFrame *pFrame; 
 
IMPLEMENT_DYNCREATE(CViewShowCent, CFormView)

CViewShowCent::CViewShowCent()
	: CFormView(CViewShowCent::IDD)
{
	//{{AFX_DATA_INIT(CViewShowCent)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	CMenu *p_Menu =AfxGetMainWnd()->GetMenu();
	if (p_Menu==NULL) return;
	p_Menu->CheckMenuItem(IDF_Show_TotalCent,MF_CHECKED);
	p_Menu->CheckMenuItem(IDF_Show_AllCourse,MF_UNCHECKED);
}

CViewShowCent::~CViewShowCent()
{
}

void CViewShowCent::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CViewShowCent)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CViewShowCent, CFormView)
	//{{AFX_MSG_MAP(CViewShowCent)
	ON_WM_SIZE()
	ON_COMMAND(ID_FILE_PRINT, OnFilePrint)
	ON_COMMAND(IDF_Show_TotalCent, OnShowTotalCent)
	ON_COMMAND(IDF_Show_AllCourse, OnShowAllCourse)
	ON_COMMAND(ID_LIST_NEXT, OnListNext)
	ON_COMMAND(ID_LIST_PRV, OnListPrv)
	ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST1, OnColumnclickList1)
	ON_COMMAND(IDC_BUTTON_refresh, OnBUTTONrefresh)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CViewShowCent diagnostics

#ifdef _DEBUG
void CViewShowCent::AssertValid() const
{
	CFormView::AssertValid();
}

void CViewShowCent::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CViewShowCent message handlers

void CViewShowCent::OnOK() 
{
	// TODO: Add your control notification handler code here
	
}

void CViewShowCent::OnSize(UINT nType, int cx, int cy) 
{
	CFormView::OnSize(nType, cx, cy);
	
	// TODO: Add your message handler code here
	::SetWindowPos(*GetDlgItem(IDC_LIST1),NULL,0,0,cx,cy,SWP_NOZORDER);		

}

void CViewShowCent::OnInitialUpdate() 
{
	CFormView::OnInitialUpdate();	
	CListCtrl *pctrl = (CListCtrl*)GetDlgItem(IDC_LIST1);
	::SetWindowLong(*pctrl,GWL_STYLE,::GetWindowLong(*pctrl,GWL_STYLE)&~LVS_SORTASCENDING&~LVS_SORTDESCENDING);
	pctrl->SetExtendedStyle(pctrl->GetExStyle()&~LVS_EX_CHECKBOXES |
		LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|
		LVS_EX_GRIDLINES|LVS_EX_TRACKSELECT);
	pctrl->SetImageList(&pFrame->m_ImageListFORCent,LVSIL_SMALL);
	pctrl->InsertColumn(0,"班级名称",LVCFMT_CENTER,140);
	pctrl->InsertColumn(1,"学号",LVCFMT_CENTER,120);
	pctrl->InsertColumn(2,"学生姓名",LVCFMT_LEFT,80);
	pctrl->InsertColumn(3,"总得学分",LVCFMT_LEFT,80);	
//	pctrl->InsertColumn(4,"课程名称",LVCFMT_LEFT,100);
	pctrl->InsertColumn(4,"专业名称",LVCFMT_LEFT,130);
	pctrl->InsertColumn(5,"院系名称",LVCFMT_LEFT,130);


    curSQL = "SELECT 学生基本信息.学号, 学生基本信息.姓名, 学生基本信息.总得学分, 班级信息.班级名称, 专业信息.专业名称, 系别信息.系名 FROM 学生基本信息,班级信息,专业信息,系别信息 WHERE  学生基本信息.所属班级 = 班级信息.班级代码 AND 班级信息.所属专业 = 专业信息.专业代码 AND 专业信息.所属系别 = 系别信息.系别代码 AND (NOT (学生基本信息.总得学分 IS NULL))";
	ShowFlg = 0;
	RefreshCentList(curSQL,ShowFlg);	
}

int CViewShowCent::RefreshCentList(CString szSQL,int Flg)
{
	int state=0;  //返回记录数
	CListCtrl *pList = (CListCtrl*)GetDlgItem(IDC_LIST1);
	pList->DeleteAllItems();
	_RecordsetPtr p_set;
	if(FAILED(p_set.CreateInstance( __uuidof( Recordset ) ) ) )	  
	{
		MessageBox("Fail to create recordset instance!",NULL,MB_ICONSTOP);
		return -1; 
	}
	try{ 
		p_set->Open((LPCSTR)szSQL,RS_PARAM);
	}
	catch(_com_error e)
	{ 
		CString errormessage;
		errormessage.Format("打开记录错误!\r\n数据连接错误:%s",e.ErrorMessage());
		AfxMessageBox(errormessage);///显示错误信息
		return -1;
	}
	
	if (!Flg)  //0 为显示总学分
	{		
		pList->DeleteColumn(4);
		pList->DeleteColumn(5);
    	pList->InsertColumn(4,"专业名称",LVCFMT_LEFT,100);
    	pList->InsertColumn(5,"院系名称",LVCFMT_LEFT,100);
		while ( !p_set->adoEOF )
		{  
			state++;
			CString Sno =   (char*) ((_bstr_t) p_set->Fields->Item["学号"]->Value);
			CString Sname = (char*) ((_bstr_t) p_set->Fields->Item["姓名"]->Value);
     		CString Cent  = (char*) ((_bstr_t) p_set->Fields->Item["总得学分"]->Value);
			CString Class = (char*) ((_bstr_t) p_set->Fields->Item["班级名称"]->Value);
			CString Dname = (char*) ((_bstr_t) p_set->Fields->Item["专业名称"]->Value);
			CString Pname = (char*) ((_bstr_t) p_set->Fields->Item["系名"]->Value);
			
			int iItem = pList->InsertItem(pList->GetItemCount(),Class,0);
			pList->SetItemText(iItem,1,Sno);			
			pList->SetItemText(iItem,2,Sname);			
			pList->SetItemText(iItem,3,Cent);			
			pList->SetItemText(iItem,4,Dname);			
			pList->SetItemText(iItem,5,Pname);			
			p_set->MoveNext();
		}
		p_set->Close();		
	}
	else 
	{
        pList->DeleteColumn(4);
		pList->DeleteColumn(5);
	    pList->InsertColumn(4,"课程名称",LVCFMT_LEFT,100);
		pList->InsertColumn(5,"课程学分",LVCFMT_LEFT,100);
    	pList->InsertColumn(6,"专业名称",LVCFMT_LEFT,100);
    	pList->InsertColumn(7,"院系名称",LVCFMT_LEFT,100);
		while ( !p_set->adoEOF )
		{  
			state++;
			CString Class = (char*) ((_bstr_t) p_set->Fields->Item["班级名称"]->Value);			
			CString Sno =   (char*) ((_bstr_t) p_set->Fields->Item["学号"]->Value);
			CString Sname = (char*) ((_bstr_t) p_set->Fields->Item["姓名"]->Value);
			CString TCent  = (char*) ((_bstr_t) p_set->Fields->Item["总得学分"]->Value);
			CString Cname = (char*) ((_bstr_t) p_set->Fields->Item["课程名称"]->Value);
			CString CCent = (char*) ((_bstr_t) p_set->Fields->Item["课程学分"]->Value);			
			CString Dname = (char*) ((_bstr_t) p_set->Fields->Item["专业名称"]->Value);
			CString Pname = (char*) ((_bstr_t) p_set->Fields->Item["系名"]->Value);
			
			int iItem = pList->InsertItem(pList->GetItemCount(),Class,0);
			pList->SetItemText(iItem,1,Sno);			
			pList->SetItemText(iItem,2,Sname);			
			pList->SetItemText(iItem,3,TCent);			
			pList->SetItemText(iItem,4,Cname);			
			pList->SetItemText(iItem,5,CCent);	
			pList->SetItemText(iItem,6,Dname);			
			pList->SetItemText(iItem,7,Pname);
			p_set->MoveNext();
		}
		p_set->Close();		

	}
	return state;
	
}

void CViewShowCent::OnFilePrint() 
{
	// TODO: Add your command handler code here
	//打印学分表
//	CListCtrl *pList = (CListCtrl*)GetDlgItem(IDC_GradeLIST);
//	PrintListCtrl(*pList);
}

void CViewShowCent::OnShowAllCourse() //显示所有课程学分
{	
	CMenu *p_Menu =AfxGetMainWnd()->GetMenu();
	if (p_Menu==NULL) return;
	UINT MU_all = p_Menu->GetMenuState(IDF_Show_AllCourse,MF_UNCHECKED);
	if (MU_all == MF_CHECKED)
	{
		p_Menu->CheckMenuItem(IDF_Show_AllCourse,MF_UNCHECKED);
		p_Menu->CheckMenuItem(IDF_Show_TotalCent,MF_CHECKED);
		curSQL = "SELECT 学生基本信息.学号, 学生基本信息.姓名, 学生基本信息.总得学分, 班级信息.班级名称, 专业信息.专业名称, 系别信息.系名 FROM 学生基本信息,班级信息,专业信息,系别信息 WHERE  学生基本信息.所属班级 = 班级信息.班级代码 AND 班级信息.所属专业 = 专业信息.专业代码 AND 专业信息.所属系别 = 系别信息.系别代码 AND (NOT (学生基本信息.总得学分 IS NULL))";
		ShowFlg = 0;
		RefreshCentList(curSQL,ShowFlg);
	}
	else 
	{
		p_Menu->CheckMenuItem(IDF_Show_AllCourse,MF_CHECKED);
        p_Menu->CheckMenuItem(IDF_Show_TotalCent,MF_UNCHECKED);
	    curSQL = "SELECT 班级信息.班级名称, T_分科学分.学号, 学生基本信息.姓名, 学生基本信息.总得学分, T_分科学分.课程名称, T_分科学分.课程学分, 专业信息.专业名称, 系别信息.系名 FROM T_分科学分,学生基本信息,班级信息,专业信息,系别信息 WHERE T_分科学分.学号 = 学生基本信息.学号 AND 学生基本信息.所属班级 = 班级信息.班级代码 AND 班级信息.所属专业 = 专业信息.专业代码 AND 专业信息.所属系别 = 系别信息.系别代码";
		ShowFlg = 1;
		RefreshCentList(curSQL,ShowFlg); 
	}
	
}

void CViewShowCent::OnShowTotalCent() //显示总学分
{

	CMenu *p_Menu =AfxGetMainWnd()->GetMenu();	
	if (p_Menu==NULL) return;
	UINT MU_all = p_Menu->GetMenuState(IDF_Show_TotalCent,MF_UNCHECKED);
	if (MU_all == MF_CHECKED)
	{
		p_Menu->CheckMenuItem(IDF_Show_TotalCent,MF_UNCHECKED);
		p_Menu->CheckMenuItem(IDF_Show_AllCourse,MF_CHECKED);
        curSQL = "SELECT 班级信息.班级名称, T_分科学分.学号, 学生基本信息.姓名, 学生基本信息.总得学分, T_分科学分.课程名称, T_分科学分.课程学分, 专业信息.专业名称, 系别信息.系名 FROM T_分科学分,学生基本信息,班级信息,专业信息,系别信息 WHERE T_分科学分.学号 = 学生基本信息.学号 AND 学生基本信息.所属班级 = 班级信息.班级代码 AND 班级信息.所属专业 = 专业信息.专业代码 AND 专业信息.所属系别 = 系别信息.系别代码";
		ShowFlg = 1;
		RefreshCentList(curSQL,ShowFlg);

	}
	else 
	{
		p_Menu->CheckMenuItem(IDF_Show_TotalCent,MF_CHECKED);
        p_Menu->CheckMenuItem(IDF_Show_AllCourse,MF_UNCHECKED);
		curSQL = "SELECT 学生基本信息.学号, 学生基本信息.姓名, 学生基本信息.总得学分, 班级信息.班级名称, 专业信息.专业名称, 系别信息.系名 FROM 学生基本信息,班级信息,专业信息,系别信息 WHERE  学生基本信息.所属班级 = 班级信息.班级代码 AND 班级信息.所属专业 = 专业信息.专业代码 AND 专业信息.所属系别 = 系别信息.系别代码 AND (NOT (学生基本信息.总得学分 IS NULL))";
		ShowFlg = 0;
		RefreshCentList(curSQL,ShowFlg);

	}
	
}


void CViewShowCent::OnListNext() 
{
	
	CListCtrl *pList = (CListCtrl*)GetDlgItem(IDC_LIST1);
	if(pList->GetSelectedCount()!=1)
	{
		pList->SetSelectionMark(0);
		pList->SetItemState(0, LVIS_SELECTED, LVIS_SELECTED);
		ASSERT(pList->GetItemState(0, LVIS_SELECTED) == LVIS_SELECTED);
	}
	else
	{  
		int n=pList->GetSelectionMark();
		if (n!=pList->GetItemCount()-1)
		{   
			pList->SetSelectionMark(n+1);
			pList->SetItemState(n+1, LVIS_SELECTED, LVIS_SELECTED);
			ASSERT(pList->GetItemState(n+1, LVIS_SELECTED) == LVIS_SELECTED);
		}
		else 
		{  
			pList->SetSelectionMark(0);
			pList->SetItemState(0, LVIS_SELECTED, LVIS_SELECTED);
			ASSERT(pList->GetItemState(0, LVIS_SELECTED) == LVIS_SELECTED);
			
		}
		
	}
	
}


void CViewShowCent::OnListPrv() 
{
	// TODO: Add your command handler code here
	
	CListCtrl *pList = (CListCtrl*)GetDlgItem(IDC_LIST1);
	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 CViewShowCent::OnColumnclickList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
		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;
    default:
		szSQL = curSQL;
		break;
	}
//	AfxMessageBox(szSQL);
    RefreshCentList(szSQL,ShowFlg);
	*pResult = 0;
}


void CViewShowCent::OnBUTTONrefresh() 
{
	// TODO: Add your command handler code here
	RefreshCentList(curSQL,ShowFlg);
}

⌨️ 快捷键说明

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