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

📄 studentview.cpp

📁 一个小型学生选课管理系统
💻 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 + -