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

📄 sc1.cpp

📁 学生选课系统
💻 CPP
字号:
// SC1.cpp : implementation file
//

#include "stdafx.h"
#include "SC.h"
#include "SC1.h"
#include "SCSearch.h"
#include "SCCalculate.h"

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

/////////////////////////////////////////////////////////////////////////////
// CSC dialog
CSCSearch scs;

CSC::CSC(CWnd* pParent /*=NULL*/)
	: CDialog(CSC::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSC)
	m_strGrade = _T("");
	//}}AFX_DATA_INIT
}


void CSC::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSC)
	DDX_Control(pDX, IDC_CLIST, m_Clist);
	DDX_Control(pDX, IDC_SLIST, m_Slist);
	DDX_Control(pDX, IDC_SC_LIST, m_SClist);
	DDX_Text(pDX, IDC_GRADE, m_strGrade);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSC, CDialog)
	//{{AFX_MSG_MAP(CSC)
	ON_NOTIFY(NM_CLICK, IDC_SC_LIST, OnClickScList)
	ON_BN_CLICKED(IDC_SC_ADD, OnScAdd)
	ON_BN_CLICKED(IDC_SC_CHANGE, OnScChange)
	ON_BN_CLICKED(IDC_SC_DELETE, OnScDelete)
	ON_BN_CLICKED(IDC_SC_SEARCH, OnScSearch)
	ON_BN_CLICKED(IDC_SC_SEARCH_2, OnScSearch2)
	ON_BN_CLICKED(IDC_SC_CALCULATE, OnScCalculate)
	ON_BN_CLICKED(IDC_SC_ALL, OnScAll)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSC message handlers

BOOL CSC::OnInitDialog()
{
	CDialog::OnInitDialog();
	m_SClist.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
	m_SClist.InsertColumn(0,"学号(Sno)",LVCFMT_CENTER,100,0);
	m_SClist.InsertColumn(1,"课程号(Cno)",LVCFMT_CENTER,100,1);
	m_SClist.InsertColumn(2,"成绩(Grade)",LVCFMT_CENTER,100,2);

	m_Slist.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
	m_Slist.InsertColumn(0,"学号(Sno)",LVCFMT_CENTER,100,0);
	m_Slist.InsertColumn(1,"姓名(Sname)",LVCFMT_CENTER,100,1);
	m_Slist.InsertColumn(2,"年龄(Sage)",LVCFMT_CENTER,100,2);
	m_Slist.InsertColumn(3,"性别(Ssex)",LVCFMT_CENTER,100,3);
	m_Slist.InsertColumn(4,"专业(Sdept)",LVCFMT_CENTER,100,4);

	m_Clist.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
	m_Clist.InsertColumn(0,"课程号(Cno)",LVCFMT_CENTER,100,0);
	m_Clist.InsertColumn(1,"课程名称(Cname)",LVCFMT_CENTER,100,1);
	m_Clist.InsertColumn(2,"先行课(Cpno)",LVCFMT_CENTER,100,2);
	m_Clist.InsertColumn(3,"学分(Ccredit)",LVCFMT_CENTER,100,3);

	DisplayRecord();
	return TRUE;
}

void CSC::DisplayRecord()
{
	CComboBox *sno=(CComboBox*)GetDlgItem(IDC_SNO);
	CComboBox *cno=(CComboBox*)GetDlgItem(IDC_CNO);

	//显示记录
	m_AdoConn.OnInitADOConn();
	CString sql;
	sql.Format("select * from SC");
	//打开记录集
	m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)sql);
	m_pRecordset->MoveFirst();
	int i=0;
	m_SClist.DeleteAllItems();
	while(m_AdoConn.m_pRecordset->adoEOF==0)
	{
		m_SClist.InsertItem(i,"");
		m_SClist.SetItemText(i,0,(char*)(_bstr_t)m_pRecordset->GetCollect("Sno"));
		m_SClist.SetItemText(i,1,(char*)(_bstr_t)m_pRecordset->GetCollect("Cno"));
		m_SClist.SetItemText(i,2,(char*)(_bstr_t)m_pRecordset->GetCollect("Grade"));

		m_pRecordset->MoveNext();
		i++;
	}
	sql.Format("select * from Student");
	m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)sql);
	m_pRecordset->MoveFirst();
	i=0;
	while(m_AdoConn.m_pRecordset->adoEOF==0)
	{
		CString temp=(char*)(_bstr_t)m_pRecordset->GetCollect("Sno");
		CString temp2=(char*)(_bstr_t)m_pRecordset->GetCollect("Sname");
		sno->InsertString(i,temp+" "+temp2);
		m_pRecordset->MoveNext();
		i++;
	}
	sql.Format("select * from Course");
	m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)sql);
	m_pRecordset->MoveFirst();
	i=0;
	while(m_AdoConn.m_pRecordset->adoEOF==0)
	{
		CString temp=(char*)(_bstr_t)m_pRecordset->GetCollect("Cno");
		CString temp2=(char*)(_bstr_t)m_pRecordset->GetCollect("Cname");
		cno->InsertString(i,temp+" "+temp2);
		m_pRecordset->MoveNext();
		i++;
	}

	m_AdoConn.ExitConnect();
}

void CSC::OnClickScList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	CListCtrl *sc=(CListCtrl*)GetDlgItem(IDC_SC_LIST);
	CListCtrl *s=(CListCtrl*)GetDlgItem(IDC_SLIST);
	CListCtrl *c=(CListCtrl*)GetDlgItem(IDC_CLIST);

	CComboBox *sno=(CComboBox*)GetDlgItem(IDC_SNO);
	CComboBox *cno=(CComboBox*)GetDlgItem(IDC_CNO);
	CEdit *grade=(CEdit*)GetDlgItem(IDC_GRADE);

	//获得当前选中项的编号
	int i=sc->GetNextItem(-1,LVNI_SELECTED);
	if(i>=sc->GetItemCount()) return;
	CString temp_Sno=sc->GetItemText(i,0);
	CString temp_Cno=sc->GetItemText(i,1);

	m_AdoConn.OnInitADOConn();
	CString sql;
	sql.Format("select * from SC");
	//打开记录集
	m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)sql);
	m_pRecordset->MoveFirst();
	int j=0;
	while((char*)(_bstr_t)m_pRecordset->GetCollect("Sno")!=temp_Sno
		||(char*)(_bstr_t)m_pRecordset->GetCollect("Cno")!=temp_Cno
		&&m_AdoConn.m_pRecordset->adoEOF==0)
	{
		m_pRecordset->MoveNext();
	}

	//改变编辑框显示
	i=0;
	sno->GetLBText(i,temp_Sno);
	CString temp1=temp_Sno.Mid(0,5);
	while(temp1!=(char*)(_bstr_t)m_pRecordset->GetCollect("Sno"))
	{
		i++;
		sno->GetLBText(i,temp_Sno);
		temp1=temp_Sno.Mid(0,5);
	}
	j=0;
	cno->GetLBText(j,temp_Cno);
	CString temp2=temp_Cno.GetAt(0);
	while(temp2!=(char*)(_bstr_t)m_pRecordset->GetCollect("Cno"))
	{
		j++;
		cno->GetLBText(j,temp_Cno);
		temp2=temp_Cno.GetAt(0);
	}
	
	sno->SetCurSel(i);
	cno->SetCurSel(j);
	grade->SetWindowText((char*)(_bstr_t)m_pRecordset->GetCollect("Grade"));

	_bstr_t sql2;
	sql2="select * from Student where Sno="+temp1;
	//MessageBox(sql2);
	m_pRecordset=m_AdoConn.GetRecordSet(sql2);
	s->DeleteAllItems();
	s->InsertItem(0,"");
	s->SetItemText(0,0,(char*)(_bstr_t)m_pRecordset->GetCollect("Sno"));
	s->SetItemText(0,1,(char*)(_bstr_t)m_pRecordset->GetCollect("Sname"));
	s->SetItemText(0,2,(char*)(_bstr_t)m_pRecordset->GetCollect("Sage"));
	s->SetItemText(0,3,(char*)(_bstr_t)m_pRecordset->GetCollect("Ssex"));
	s->SetItemText(0,4,(char*)(_bstr_t)m_pRecordset->GetCollect("Sdept"));

	sql2="select * from Course where Cno="+temp2;
	m_pRecordset=m_AdoConn.GetRecordSet(sql2);
	//MessageBox(sql2);
	m_Clist.DeleteAllItems();
	m_Clist.InsertItem(0,"");
	m_Clist.SetItemText(0,0,(char*)(_bstr_t)m_pRecordset->GetCollect("Cno"));
	m_Clist.SetItemText(0,1,(char*)(_bstr_t)m_pRecordset->GetCollect("Cname"));
	if(m_pRecordset->GetCollect("Cpno").vt!=VT_NULL)
		m_Clist.SetItemText(0,2,(char*)(_bstr_t)m_pRecordset->GetCollect("Cpno"));
	else m_Clist.SetItemText(0,2,"");
	m_Clist.SetItemText(0,3,(char*)(_bstr_t)m_pRecordset->GetCollect("Ccredit"));

	UpdateData(TRUE);

	*pResult = 0;
}

void CSC::OnScAdd() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	CString strSno,strCno;
	CComboBox *sno=(CComboBox*)GetDlgItem(IDC_SNO);
	CComboBox *cno=(CComboBox*)GetDlgItem(IDC_CNO);
	sno->GetLBText(sno->GetCurSel(),strSno);
	cno->GetLBText(cno->GetCurSel(),strCno);
	strSno=strSno.Mid(0,5);
	strCno=strCno.GetAt(0);

	if(strSno.IsEmpty()==1||strCno.IsEmpty()==1||m_strGrade.IsEmpty()==1) return;

	m_AdoConn.OnInitADOConn();
	_bstr_t sql;
	sql="select * from SC";
	m_pRecordset=m_AdoConn.GetRecordSet(sql);
	while(m_AdoConn.m_pRecordset->adoEOF==0)
	{
		if((char*)(_bstr_t)m_pRecordset->GetCollect("Sno")==strSno
			&&(char*)(_bstr_t)m_pRecordset->GetCollect("Cno")==strCno)
			return;
		else m_pRecordset->MoveNext();
	}
	sql="INSERT INTO SC VALUES('"+strSno+"','"+strCno+"','"+m_strGrade+"')";
	m_AdoConn.ExecuteSQL(sql);
	int count=m_SClist.GetItemCount();
	m_SClist.InsertItem(count,"");
	m_SClist.SetItemText(count,0,strSno);
	m_SClist.SetItemText(count,1,strCno);
	m_SClist.SetItemText(count,2,m_strGrade);
	return;
}

void CSC::OnScChange() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	CString strSno,strCno;
	CComboBox *sno=(CComboBox*)GetDlgItem(IDC_SNO);
	CComboBox *cno=(CComboBox*)GetDlgItem(IDC_CNO);
	sno->GetLBText(sno->GetCurSel(),strSno);
	cno->GetLBText(cno->GetCurSel(),strCno);
	strSno=strSno.Mid(0,5);
	strCno=strCno.GetAt(0);

	if(strSno.IsEmpty()==1||strCno.IsEmpty()==1||m_strGrade.IsEmpty()==1) return;

	m_AdoConn.OnInitADOConn();
	_bstr_t sql;
	sql="select * from SC";
	m_pRecordset=m_AdoConn.GetRecordSet(sql);
	while(m_AdoConn.m_pRecordset->adoEOF==0)
	{
		if((char*)(_bstr_t)m_pRecordset->GetCollect("Sno")==strSno
			&&(char*)(_bstr_t)m_pRecordset->GetCollect("Cno")==strCno)
		{
			sql="UPDATE SC SET Sno="+strSno+",Cno="+strCno+",Grade="
				+m_strGrade+" WHERE Sno="+strSno+" AND Cno="+strCno;
			m_AdoConn.ExecuteSQL(sql);
			m_AdoConn.ExitConnect();
			int count=m_SClist.GetNextItem(-1,LVNI_SELECTED);
			m_SClist.SetItemText(count,0,strSno);
			m_SClist.SetItemText(count,1,strCno);
			m_SClist.SetItemText(count,2,m_strGrade);
			return;
		}
		else m_pRecordset->MoveNext();
	}
	m_AdoConn.ExitConnect();
}

void CSC::OnScDelete() 
{
	// TODO: Add your control notification handler code here
	CListCtrl *s=(CListCtrl*)GetDlgItem(IDC_SC_LIST);
	CString strSno,strCno;
	CComboBox *sno=(CComboBox*)GetDlgItem(IDC_SNO);
	CComboBox *cno=(CComboBox*)GetDlgItem(IDC_CNO);
	sno->GetLBText(sno->GetCurSel(),strSno);
	cno->GetLBText(cno->GetCurSel(),strCno);
	strSno=strSno.Mid(0,5);
	strCno=strCno.GetAt(0);
	int i=0;
	m_AdoConn.OnInitADOConn();
	_bstr_t sql;
	CString str1,str2;

	while(m_SClist.GetSelectedCount()!=0)
	{
		i=m_SClist.GetNextItem(-1,LVNI_SELECTED);
		str1=m_SClist.GetItemText(i,0);
		str2=m_SClist.GetItemText(i,1);
		m_SClist.DeleteItem(i);
		sql="DELETE FROM SC WHERE Sno="+str1+" AND Cno="+str2;
		MessageBox(sql);
		m_AdoConn.ExecuteSQL(sql);	
	}
	m_AdoConn.ExitConnect();
}

void CSC::OnScSearch() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	if(scs.m_SQL.IsEmpty()==1)
	{
		AfxMessageBox("请设置查询条件!");
		return;
	}

	m_AdoConn.OnInitADOConn();
	_bstr_t sql;
	
	sql=scs.m_SQL;
	m_AdoConn.ExecuteSQL(sql);
	
	int i=0;
	
	m_pRecordset=m_AdoConn.GetRecordSet(sql);

	m_SClist.DeleteAllItems();
	
	while(m_AdoConn.m_pRecordset->adoEOF==0)
	{
		m_SClist.InsertItem(i,"");
		m_SClist.SetItemText(i,0,(char*)(_bstr_t)m_pRecordset->GetCollect("Sno"));
		m_SClist.SetItemText(i,1,(char*)(_bstr_t)m_pRecordset->GetCollect("Cno"));
		m_SClist.SetItemText(i,2,(char*)(_bstr_t)m_pRecordset->GetCollect("Grade"));
		m_pRecordset->MoveNext();
		i++;
	}
	m_AdoConn.ExitConnect();
}

void CSC::OnScSearch2() 
{
	// TODO: Add your control notification handler code here
	scs.DoModal();
}

void CSC::OnScCalculate() 
{
	// TODO: Add your control notification handler code here
	CSCCalculate scc;
	scc.DoModal();
}

void CSC::OnScAll() 
{
	// TODO: Add your control notification handler code here
	DisplayRecord();
}

⌨️ 快捷键说明

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