📄 viewshowcent.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 + -