📄 studentview.cpp
字号:
// StudentView.cpp : implementation of the CStudentView class
//
#include "stdafx.h"
#include "Student.h"
#include "StudentSet.h"
#include "StudentDoc.h"
#include "StudentView.h"
#include "SCSet.h"
#include "CSet.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CStudentView
IMPLEMENT_DYNCREATE(CStudentView, CRecordView)
BEGIN_MESSAGE_MAP(CStudentView, CRecordView)
//{{AFX_MSG_MAP(CStudentView)
ON_BN_CLICKED(IDC_RADIOSTUID, OnRadiostuid)
ON_BN_CLICKED(IDC_RADIOSTUNAME, OnRadiostuname)
ON_BN_CLICKED(IDC_B_OK, OnBOk)
ON_BN_CLICKED(IDC_BUTTONWU, OnButtonwu)
ON_BN_CLICKED(IDC_BSC, OnBsc)
ON_BN_CLICKED(IDC_B_INSERT, OnBInsert)
ON_BN_CLICKED(IDC_B_SERCH, OnBSerch)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CRecordView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CRecordView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CRecordView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CStudentView construction/destruction
CStudentView::CStudentView()
: CRecordView(CStudentView::IDD)
{
//{{AFX_DATA_INIT(CStudentView)
m_pSet = NULL;
m_strstuID = _T("");
m_strstuname = _T("");
m_icourse = -1;
m_sstuID = _T("");
m_scourseID = _T("");
m_strgrade = _T("");
//}}AFX_DATA_INIT
// TODO: add construction code here
}
CStudentView::~CStudentView()
{
}
void CStudentView::DoDataExchange(CDataExchange* pDX)
{
CRecordView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CStudentView)
DDX_Control(pDX, IDC_LISTWU, m_listwu);
DDX_Control(pDX, IDC_LISTGRADE, m_listgrade);
DDX_Control(pDX, IDC_LISTC, m_listC);
DDX_Control(pDX, IDC_LISTSC, m_listSC);
DDX_Control(pDX, IDC_LISTSTUDENT, m_liststu);
DDX_Text(pDX, IDC_E_STUID, m_strstuID);
DDX_Text(pDX, IDC_E_STUNAME, m_strstuname);
DDX_CBIndex(pDX, IDC_COMBOCOURSE, m_icourse);
DDX_Text(pDX, IDC_E_STU, m_sstuID);
DDX_Text(pDX, IDC_E_COURSE, m_scourseID);
DDX_Text(pDX, IDC_E_GRADE, m_strgrade);
//}}AFX_DATA_MAP
}
BOOL CStudentView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CRecordView::PreCreateWindow(cs);
}
void CStudentView::OnInitialUpdate()
{
m_pSet = &GetDocument()->m_studentSet;
CRecordView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
course[0] = "数据库";
course[1] = "数学";
course[2] = "信息系统";
course[3] = "操作系统";
course[4] = "数据结构";
course[5] = "数据处理";
course[6] = "PASCAL语言";
this->OnRadiostuname();
m_liststu.SetTextColor(RGB(0,0,0));
m_liststu.SetBkColor(RGB(255,255,255));
m_liststu.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
m_liststu.InsertColumn(0,"学号",LVCFMT_LEFT,80);
m_liststu.InsertColumn(1,"姓名",LVCFMT_LEFT,80);
m_liststu.InsertColumn(2,"性别",LVCFMT_LEFT,80);
m_liststu.InsertColumn(3,"年龄",LVCFMT_LEFT,80);
m_liststu.InsertColumn(4,"系别",LVCFMT_LEFT,80);
m_listSC.SetTextColor(RGB(0,0,0));
m_listSC.SetBkColor(RGB(255,255,255));
m_listSC.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
m_listSC.InsertColumn(0,"学号",LVCFMT_LEFT,80);
m_listSC.InsertColumn(1,"课程号",LVCFMT_LEFT,80);
m_listSC.InsertColumn(2,"成绩",LVCFMT_LEFT,80);
m_listC.SetTextColor(RGB(0,0,0));
m_listC.SetBkColor(RGB(255,255,255));
m_listC.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
m_listC.InsertColumn(0,"课程号",LVCFMT_LEFT,80);
m_listC.InsertColumn(1,"课程名",LVCFMT_LEFT,80);
m_listC.InsertColumn(2,"先修课程号",LVCFMT_LEFT,80);
m_listC.InsertColumn(3,"学分",LVCFMT_LEFT,80);
m_listgrade.SetTextColor(RGB(0,0,0));
m_listgrade.SetBkColor(RGB(255,255,255));
m_listgrade.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
m_listgrade.InsertColumn(0,"课程号",LVCFMT_LEFT,80);
m_listgrade.InsertColumn(1,"成绩",LVCFMT_LEFT,80);
this->OnRefreshListstu();
this->OnRefreshListSC();
this->OnRefreshListC();
}
/////////////////////////////////////////////////////////////////////////////
// CStudentView printing
BOOL CStudentView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CStudentView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CStudentView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CStudentView diagnostics
#ifdef _DEBUG
void CStudentView::AssertValid() const
{
CRecordView::AssertValid();
}
void CStudentView::Dump(CDumpContext& dc) const
{
CRecordView::Dump(dc);
}
CStudentDoc* CStudentView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CStudentDoc)));
return (CStudentDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CStudentView database support
CRecordset* CStudentView::OnGetRecordset()
{
return m_pSet;
}
/////////////////////////////////////////////////////////////////////////////
// CStudentView message handlers
void CStudentView::OnRadiostuid()
{
// TODO: Add your control notification handler code here
CWnd *pstuname=GetDlgItem(IDC_E_STUNAME);
pstuname->EnableWindow(FALSE);
CWnd *pstuid=GetDlgItem(IDC_E_STUID);
pstuid->EnableWindow(TRUE);
}
void CStudentView::OnRadiostuname()
{
// TODO: Add your control notification handler code here
CWnd *pstuid=GetDlgItem(IDC_E_STUID);
pstuid->EnableWindow(FALSE);
CWnd *pstuname = GetDlgItem(IDC_E_STUNAME);
pstuname->EnableWindow(TRUE);
}
void CStudentView::OnBOk()
{
// TODO: Add your control notification handler code here
this->UpdateData(TRUE);
m_listgrade.DeleteAllItems();
if(m_strstuID != "")
{
CString str = "";
str.Format("Sno = \'%s\'",m_strstuID);
CSCSet SCRst;
try
{
if(SCRst.IsOpen())
SCRst.Close();
SCRst.m_strFilter = str;
SCRst.Open();
while(!SCRst.IsEOF())
{
CString sgrade = "";
sgrade.Format("%d",SCRst.m_Grade);
int nItem = m_listgrade.InsertItem(0,SCRst.m_Cno);
m_listgrade.SetItemText(nItem,1,sgrade);
SCRst.MoveNext();
}
SCRst.Close();
}
catch(CDBException &e)
{
AfxMessageBox(e.m_strError);
SCRst.Close();
}
}
if(m_strstuname != "")
{
CString str = "";
CString strsno = "";
str.Format("Sname = \'%s\'",m_strstuname);
CStudentSet StuRst;
try
{
if(StuRst.IsOpen())
StuRst.Close();
StuRst.m_strFilter = str;
StuRst.Open();
strsno = StuRst.m_Sno;
StuRst.Close();
}
catch(CDBException &e)
{
AfxMessageBox(e.m_strError);
StuRst.Close();
}
str.Format("Sno = \'%s\'",strsno);
CSCSet SCRst;
try
{
if(SCRst.IsOpen())
SCRst.Close();
SCRst.m_strFilter = str;
SCRst.Open();
while(!SCRst.IsEOF())
{
CString sgrade = "";
sgrade.Format("%d",SCRst.m_Grade);
int nItem = m_listgrade.InsertItem(0,SCRst.m_Cno);
m_listgrade.SetItemText(nItem,1,sgrade);
SCRst.MoveNext();
}
SCRst.Close();
}
catch(CDBException &e)
{
AfxMessageBox(e.m_strError);
SCRst.Close();
}
}
}
void CStudentView::OnButtonwu()
{
// TODO: Add your control notification handler code here
this->UpdateData(TRUE);
int i = m_listwu.GetHeaderCtrl()->GetItemCount();
for(int j=0;j<i;j++)
m_listwu.DeleteColumn(0);
m_listwu.SetTextColor(RGB(0,0,0));
m_listwu.SetBkColor(RGB(255,255,255));
m_listwu.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
m_listwu.InsertColumn(0,"学号",LVCFMT_LEFT,80);
m_listwu.InsertColumn(1,"姓名",LVCFMT_LEFT,80);
m_listwu.InsertColumn(2,"课程号",LVCFMT_LEFT,80);
m_listwu.InsertColumn(3,"成绩",LVCFMT_LEFT,80);
m_listwu.DeleteAllItems();
if(m_icourse == -1)
{
AfxMessageBox("请选择一门课程!");
return;
}
m_listwu.DeleteAllItems();
CSCSet SCRst;
CCSet CRst;
CStudentSet StuRst;
try
{
if(CRst.IsOpen())
CRst.Close();
CString scourse = "";
scourse.Format("Select * from C where Cname = \'%s\'",course[m_icourse]);
CRst.Open(CRecordset::dynaset,_T(scourse));
if(SCRst.IsOpen())
SCRst.Close();
CString sSC = "";
sSC.Format("Select * from SC where Cno = \'%s\' order by Grade DESC",CRst.m_Cno);
SCRst.Open(CRecordset::dynaset,_T(sSC));
int i=0;
while(!SCRst.IsEOF()&&i != 5)
{
CString sgrade = "";
sgrade.Format("%d",SCRst.m_Grade);
if(StuRst.IsOpen())
StuRst.Close();
CString sSno = "";
sSno.Format("Select * from Student where Sno = \'%s\'",SCRst.m_Sno);
StuRst.Open(CRecordset::dynaset,_T(sSno));
int nItem = m_listwu.InsertItem(i,SCRst.m_Sno);
m_listwu.SetItemText(nItem,1,StuRst.m_Sname);
m_listwu.SetItemText(nItem,2,CRst.m_Cname);
m_listwu.SetItemText(nItem,3,sgrade);
i++;
SCRst.MoveNext();
}
SCRst.Close();
CRst.Close();
}
catch(CDBException &e)
{
AfxMessageBox(e.m_strError);
SCRst.Close();
CRst.Close();
StuRst.Close();
}
}
void CStudentView::OnBsc()
{
// TODO: Add your control notification handler code here
CSCSet SCRst;
try
{
if(SCRst.IsOpen())
SCRst.Close();
SCRst.Open();
while(!SCRst.IsEOF())
{
if(SCRst.m_Grade<60)
SCRst.Delete();
if(SCRst.m_Grade>=60&&SCRst.m_Grade<=69)
{
SCRst.Edit();
SCRst.m_Grade+=5;
SCRst.Update();
}
SCRst.MoveNext();
}
SCRst.Close();
this->OnRefreshListSC();
}
catch(CDBException &e)
{
AfxMessageBox(e.m_strError);
SCRst.Close();
}
}
void CStudentView::OnRefreshListstu()
{
m_liststu.DeleteAllItems();
CStudentSet stuRst;
try
{
if(stuRst.IsOpen())
stuRst.Close();
stuRst.Open();
stuRst.MoveLast();
while(!stuRst.IsBOF())
{
CString str="";
str.Format("%d",stuRst.m_Sage);
int nItem = m_liststu.InsertItem(0,stuRst.m_Sno);
m_liststu.SetItemText(nItem,1,stuRst.m_Sname);
m_liststu.SetItemText(nItem,2,stuRst.m_Ssex);
m_liststu.SetItemText(nItem,3,str);
m_liststu.SetItemText(nItem,4,stuRst.m_Sdept);
stuRst.MovePrev();
}
stuRst.Close();
}
catch(CDBException& e)
{
AfxMessageBox(e.m_strError);
stuRst.Close();
}
}
void CStudentView::OnRefreshListSC()
{
m_listSC.DeleteAllItems();
CSCSet SCRst;
try
{
if(SCRst.IsOpen())
SCRst.Close();
SCRst.Open();
SCRst.MoveLast();
while(!SCRst.IsBOF())
{
CString str="";
int nItem = m_listSC.InsertItem(0,SCRst.m_Sno);
m_listSC.SetItemText(nItem,1,SCRst.m_Cno);
if(SCRst.m_Grade <= 150)
{
str.Format("%d",SCRst.m_Grade);
m_listSC.SetItemText(nItem,2,str);
}
else
{
str="无成绩";
m_listSC.SetItemText(nItem,2,str);
}
SCRst.MovePrev();
}
SCRst.Close();
}
catch(CDBException& e)
{
AfxMessageBox(e.m_strError);
SCRst.Close();
}
}
void CStudentView::OnRefreshListC()
{
m_listC.DeleteAllItems();
CCSet CRst;
try
{
if(CRst.IsOpen())
CRst.Close();
CRst.Open();
CRst.MoveLast();
while(!CRst.IsBOF())
{
CString str="";
str.Format("%.1f",CRst.m_Ccredit);
int nItem = m_listC.InsertItem(0,CRst.m_Cno);
m_listC.SetItemText(nItem,1,CRst.m_Cname);
m_listC.SetItemText(nItem,2,CRst.m_Cpno);
m_listC.SetItemText(nItem,3,str);
CRst.MovePrev();
}
CRst.Close();
}
catch(CDBException& e)
{
AfxMessageBox(e.m_strError);
CRst.Close();
}
}
void CStudentView::OnBInsert()
{
// TODO: Add your control notification handler code here
this->UpdateData(TRUE);
CSCSet SCRst;
try
{
if(SCRst.IsOpen())
SCRst.Close();
SCRst.Open();
SCRst.AddNew();
SCRst.m_Sno = m_sstuID;
SCRst.m_Cno = m_scourseID;
if(m_strgrade != "")
SCRst.m_Grade = (long)atof(m_strgrade);
SCRst.Update();
SCRst.Close();
this->OnRefreshListSC();
}
catch(CDBException &e)
{
AfxMessageBox(e.m_strError);
SCRst.Close();
}
}
void CStudentView::OnBSerch()
{
// TODO: Add your control notification handler code here
int i = m_listwu.GetHeaderCtrl()->GetItemCount();
for(int j=0;j<i;j++)
m_listwu.DeleteColumn(0);
m_listwu.SetTextColor(RGB(0,0,0));
m_listwu.SetBkColor(RGB(255,255,255));
m_listwu.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
m_listwu.InsertColumn(0,"学号",LVCFMT_LEFT,80);
m_listwu.InsertColumn(1,"姓名",LVCFMT_LEFT,80);
m_listwu.InsertColumn(2,"性别",LVCFMT_LEFT,80);
m_listwu.InsertColumn(3,"年龄",LVCFMT_LEFT,80);
m_listwu.InsertColumn(4,"系别",LVCFMT_LEFT,80);
m_listwu.DeleteAllItems();
CSCSet SCRst;
try
{
if(SCRst.IsOpen())
SCRst.Close();
CString str = "";
str = "select Sno from SC group by Sno having avg(Grade)>(select avg(Grade) from SC)";
SCRst.Open(CRecordset::dynaset,_T(str));
CStudentSet StuRst;
SCRst.MoveLast();
while(!SCRst.IsBOF())
{
if(StuRst.IsOpen())
StuRst.Close();
CString sSno = "";
sSno.Format("select * from Student where Sno = \'%s\'",SCRst.m_Sno);
StuRst.Open(CRecordset::dynaset,_T(sSno));
CString str = "";
str.Format("%d",StuRst.m_Sage);
int nItem = m_listwu.InsertItem(0,StuRst.m_Sno);
m_listwu.SetItemText(nItem,1,StuRst.m_Sname);
m_listwu.SetItemText(nItem,2,StuRst.m_Ssex);
m_listwu.SetItemText(nItem,3,str);
m_listwu.SetItemText(nItem,4,StuRst.m_Sdept);
SCRst.MovePrev();
StuRst.Close();
}
SCRst.Close();
}
catch(CDBException &e)
{
AfxMessageBox(e.m_strError);
SCRst.Close();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -