www.gusucode.com > 一个VC++课程管理程序,MSSQL数据库-源码程序 > 一个VC++课程管理程序,MSSQL数据库-源码程序\code\SourceCode\DialogCOU.cpp
//Download by http://www.NewXing.com // DialogCOU.cpp : implementation file // #include "stdafx.h" #include "YDMS.h" #include "DialogCOU.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CDialogCOU dialog CDialogCOU::CDialogCOU(CWnd* pParent /*=NULL*/) : CDialog(CDialogCOU::IDD, pParent) { //{{AFX_DATA_INIT(CDialogCOU) m_CouID = 0; m_CouName = _T(""); m_CouScore = 0; m_CouKind = _T(""); m_CouTea = 0; //}}AFX_DATA_INIT } void CDialogCOU::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CDialogCOU) DDX_Control(pDX, IDC_EDIT_COUID, m_ctlCouID); DDX_Control(pDX, IDC_BUTTON_QUERY, m_btnQuery); DDX_Control(pDX, IDC_BUTTON_PRE, m_btnPre); DDX_Control(pDX, IDC_BUTTON_OK, m_btnOK); DDX_Control(pDX, IDC_BUTTON_NEXT, m_btnNext); DDX_Control(pDX, IDC_BUTTON_MODIFY, m_btnModify); DDX_Control(pDX, IDC_BUTTON_LAST, m_btnLast); DDX_Control(pDX, IDC_BUTTON_FIRST, m_btnFirst); DDX_Control(pDX, IDC_BUTTON_DELETE, m_btnDelete); DDX_Control(pDX, IDC_BUTTON_ADD, m_btnAdd); DDX_Text(pDX, IDC_EDIT_COUID, m_CouID); DDV_MinMaxInt(pDX, m_CouID, 0, 10000); DDX_Text(pDX, IDC_EDIT_COUNAME, m_CouName); DDV_MaxChars(pDX, m_CouName, 50); DDX_Text(pDX, IDC_EDIT_COUSCORE, m_CouScore); DDV_MinMaxInt(pDX, m_CouScore, 0, 20); DDX_CBString(pDX, IDC_COMBO_KIND, m_CouKind); DDX_Text(pDX, IDC_EDIT_TEAID, m_CouTea); DDV_MinMaxInt(pDX, m_CouTea, 0, 10000); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CDialogCOU, CDialog) //{{AFX_MSG_MAP(CDialogCOU) ON_BN_CLICKED(IDC_BUTTON_QUERY, OnButtonQuery) ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd) ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete) ON_BN_CLICKED(IDC_BUTTON_MODIFY, OnButtonModify) ON_BN_CLICKED(IDC_BUTTON_PRE, OnButtonPre) ON_BN_CLICKED(IDC_BUTTON_NEXT, OnButtonNext) ON_BN_CLICKED(IDC_BUTTON_LAST, OnButtonLast) ON_BN_CLICKED(IDC_BUTTON_OK, OnButtonOK) ON_BN_CLICKED(IDC_BUTTON_CANCEL, OnButtonCancel) ON_BN_CLICKED(IDC_BUTTON_GOBACK, OnButtonGoBack) ON_BN_CLICKED(IDC_BUTTON_FIRST, OnButtonFirst) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDialogCOU message handlers // //添加枚举变量来实现对不同功能的区分 // enum examCOU { INIT, //对应没有功能 SEARCH, //对应查找功能 ADD, //对应添加功能 DEL, //对应删除功能 MODIFY, //对应修改功能 }; //定义枚举变量FOUNCTION examCOU FOUNCTION = INIT; BOOL CDialogCOU::OnInitDialog() { CDialog::OnInitDialog(); // TODO: ADD extra initialization here //创建记录集对象 m_pRecordset.CreateInstance(__uuidof(Recordset)); m_pRecordsetCHO.CreateInstance(__uuidof(Recordset)); //打开课程表 OpenCOURSES(); _variant_t var; CString str; try { if(!m_pRecordset->BOF) { m_pRecordset->MoveFirst(); } //如果表内数据为空,设置控件属性并初始对话框 else { AfxMessageBox("表内数据为空"); m_btnQuery.EnableWindow(FALSE); m_btnDelete.EnableWindow(FALSE); m_btnModify.EnableWindow(FALSE); m_btnFirst.EnableWindow(FALSE); m_btnPre.EnableWindow(FALSE); m_btnNext.EnableWindow(FALSE); m_btnLast.EnableWindow(FALSE); m_btnOK.SetFocus(); return TRUE; } // // 读入库中首字段并加入控件中 // //更新编辑框m_CouID var = m_pRecordset->GetCollect("CouID"); if(var.vt != VT_NULL) m_CouID = var.iVal ; //更新编辑框m_CouName var = m_pRecordset->GetCollect("CouName"); str = (LPCSTR)_bstr_t(var); m_CouName = str; //更新组合框m_CouKind var = m_pRecordset->GetCollect("CouKind"); str = (LPCSTR)_bstr_t(var); m_CouKind = str; //更新编辑框m_CouScore var = m_pRecordset->GetCollect("CouScore"); m_CouScore = var.iVal; //更新编辑框m_CouTea var = m_pRecordset->GetCollect("CouTea"); m_CouTea = var.iVal; //更新所有控件显示 UpdateData(false); } catch(_com_error *e) { AfxMessageBox(e->ErrorMessage()); } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CDialogCOU::OpenCOURSES() { //在ADO操作中建议语句中要常用try...catch()来捕获错误信息, //因为它有时会经常出现一些想不到的错误 try { //从SQL数据库中打开COURSES表 m_pRecordset->Open("SELECT * FROM COURSES", theApp.m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText); } catch(_com_error *e) { AfxMessageBox(e->ErrorMessage()); } } void CDialogCOU::OpenTEACHERS() { try { //从SQL数据库中打开TEACHERS表 m_pRecordset->Open("SELECT * FROM TEACHERS", theApp.m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText); } catch(_com_error *e) { AfxMessageBox(e->ErrorMessage()); } } void CDialogCOU::OnButtonQuery() { // TODO: ADD your control notification handler code here m_CouID = 0; m_CouScore = 0; m_CouName = ""; m_CouKind = ""; m_CouTea = 0; UpdateData(false); //更新FOUNCTION值 FOUNCTION = SEARCH; //修改各个矩形按钮的属性 m_btnQuery.SetState(TRUE); m_btnAdd.EnableWindow(FALSE); m_btnDelete.EnableWindow(FALSE); m_btnModify.EnableWindow(FALSE); m_btnFirst.EnableWindow(FALSE); m_btnPre.EnableWindow(FALSE); m_btnNext.EnableWindow(FALSE); m_btnLast.EnableWindow(FALSE); m_btnOK.SetFocus(); } ////////////////////////// // //执行查找功能 // ///////////////////////// void CDialogCOU::Query() { //定义变量 _variant_t var; CString str; //更新控件变量的值 UpdateData(true); try { m_pRecordset->MoveFirst(); while(!m_pRecordset->adoEOF) { var = m_pRecordset->GetCollect("CouID"); if(m_CouID == var.iVal) { var = m_pRecordset->GetCollect("CouID"); if(var.vt != VT_NULL) { m_CouID = var.iVal; } var = m_pRecordset->GetCollect("CouName"); str = (LPCSTR)_bstr_t(var); m_CouName = str; var = m_pRecordset->GetCollect("CouKind"); str = (LPCSTR)_bstr_t(var); m_CouKind = str; var = m_pRecordset->GetCollect("CouScore"); m_CouScore = var.iVal; var = m_pRecordset->GetCollect("CouScore"); m_CouScore = var.iVal; UpdateData(false); break; } else { m_pRecordset->MoveNext(); } } if(m_pRecordset->adoEOF) { MessageBox("没有这个课程号!"); } } catch(_com_error *e) { AfxMessageBox(e->ErrorMessage()); } } ////////////////////////// // //执行添加功能 // ///////////////////////// void CDialogCOU::Add() { //定义变量 _variant_t var; CString str; //更新控件变量的值 UpdateData(true); //判断要添加的课程号是否存在 if(m_CouID != 0 && !m_pRecordset->BOF) { m_pRecordset->MoveFirst(); while(!m_pRecordset->adoEOF) { var = m_pRecordset->GetCollect("CouID"); if(m_CouID == var.iVal) { AfxMessageBox("已经存在这个课程号!"); break; } m_pRecordset->MoveNext(); } if(!m_pRecordset->adoEOF) { return; } } //判断要添加的导师号是否存在 if(m_CouTea !=0) { m_pRecordset->Close(); OpenTEACHERS(); if(m_pRecordset->BOF) { AfxMessageBox("导师表为空,需先建立导师表!"); m_pRecordset->Close(); OpenCOURSES(); return; } else { m_pRecordset->MoveFirst(); while(!m_pRecordset->adoEOF) { var = m_pRecordset->GetCollect("TeaID"); if(m_CouTea == var.iVal) { break; } m_pRecordset->MoveNext(); } if(m_pRecordset->adoEOF) { AfxMessageBox("没有这个导师号!"); m_pRecordset->Close(); OpenCOURSES(); return; } else { m_pRecordset->Close(); OpenCOURSES(); } } } if(m_CouID == 0 || m_CouTea == 0) { AfxMessageBox("课程号和导师号都不能为空!"); return; } else { try { // // 写入各字段值 // m_pRecordset->AddNew(); //写入CouID字段 var.iVal = m_CouID; m_pRecordset->PutCollect("CouID", var.iVal); //写入CouName字段 m_pRecordset->PutCollect("CouName", _variant_t(m_CouName)); //写入CouKind字段 m_pRecordset->PutCollect("CouKind", _variant_t(m_CouKind)); //写入CouScore字段 var.iVal = m_CouScore; m_pRecordset->PutCollect("CouScore", var.iVal); //写入CouTea字段 var.iVal = m_CouTea; m_pRecordset->PutCollect("CouTea", var.iVal); //更新SQL数据库 m_pRecordset->Update(); //当前记录移动到最后 m_pRecordset->MoveLast(); AfxMessageBox("插入成功!"); } catch(_com_error *e) { AfxMessageBox(e->ErrorMessage()); } } } ////////////////////////// // //执行删除功能 // ///////////////////////// void CDialogCOU::Delete() { //定义变量 _variant_t var; CString str; //判断当前是否有记录 if(m_CouID == 0) { MessageBox(" 没有记录!"); return; } //判断是否作为外键被使用 str.Format("select * from CHOICES where CouID = %d",m_CouID); m_pRecordsetCHO->Open(str.AllocSysString(), theApp.m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText); if(!m_pRecordsetCHO->BOF) { AfxMessageBox("此数据正在被其他表使用,不能删除!"); m_pRecordsetCHO->Close(); return; } else { m_pRecordsetCHO->Close(); } try { // // 删除当前行记录 // m_pRecordset->Delete(adAffectCurrent); m_pRecordset->Update(); m_pRecordset->MoveFirst(); //判断删除后表内数据是否为空 if(m_pRecordset->BOF) { AfxMessageBox("表内数据已经为空!"); m_btnQuery.EnableWindow(FALSE); m_btnDelete.EnableWindow(FALSE); m_btnModify.EnableWindow(FALSE); m_btnFirst.EnableWindow(FALSE); m_btnPre.EnableWindow(FALSE); m_btnNext.EnableWindow(FALSE); m_btnLast.EnableWindow(FALSE); m_btnOK.SetFocus(); return; } //显示最后一条记录 m_pRecordset->MoveLast(); var = m_pRecordset->GetCollect("CouID"); if(var.vt != VT_NULL) m_CouID = var.iVal ; var = m_pRecordset->GetCollect("CouName"); str = (LPCSTR)_bstr_t(var); m_CouName = str; var = m_pRecordset->GetCollect("CouKind"); str = (LPCSTR)_bstr_t(var); m_CouKind = str; var = m_pRecordset->GetCollect("CouScore"); m_CouScore = var.iVal; var = m_pRecordset->GetCollect("CouTea"); m_CouTea = var.iVal; UpdateData(false); } catch(_com_error *e) { AfxMessageBox(e->ErrorMessage()); } } ////////////////////////// // //执行修改功能 // ///////////////////////// void CDialogCOU::Modify() { //定义变量 _variant_t var; CString str; //更新控件变量的值 UpdateData(true); if(m_CouID == 0 || m_CouTea == 0) { AfxMessageBox("课程号和导师名都不能为空!"); return; } //判断修改后的导师号是否存在 if(m_CouTea !=0) { m_pRecordset->Close(); OpenTEACHERS(); if(m_pRecordset->BOF) { AfxMessageBox("导师表为空,需先建立导师表!"); m_pRecordset->Close(); OpenCOURSES(); return; } else { m_pRecordset->MoveFirst(); while(!m_pRecordset->adoEOF) { var = m_pRecordset->GetCollect("TeaID"); if(m_CouTea == var.iVal) { break; } m_pRecordset->MoveNext(); } if(m_pRecordset->adoEOF) { AfxMessageBox("没有这个导师号!"); m_pRecordset->Close(); OpenCOURSES(); return; } else { m_pRecordset->Close(); OpenCOURSES(); m_pRecordset->MoveFirst(); while(!m_pRecordset->adoEOF) { var = m_pRecordset->GetCollect("CouID"); if(m_CouID == var.iVal) { break; } m_pRecordset->MoveNext(); } } } } // // 修改当前记录的字段值 // try { var.iVal = m_CouID; m_pRecordset->PutCollect("CouID", var.iVal); m_pRecordset->PutCollect("CouName", _variant_t(m_CouName)); m_pRecordset->PutCollect("CouKind", _variant_t(m_CouKind)); var.iVal = m_CouScore; m_pRecordset->PutCollect("CouScore", var.iVal); var.iVal = m_CouTea; m_pRecordset->PutCollect("CouTea", var.iVal); m_pRecordset->Update(); AfxMessageBox("修改成功!"); } catch(_com_error *e) { AfxMessageBox(e->ErrorMessage()); } } void CDialogCOU::OnButtonOK() { // TODO: ADD your control notification handler code here if(FOUNCTION == SEARCH) { Query(); } else if(FOUNCTION == ADD) { Add(); } else if(FOUNCTION == DEL) { Delete(); } else if(FOUNCTION == MODIFY) { Modify(); } } void CDialogCOU::OnButtonGoBack() { // TODO: ADD your control notification handler code here //关闭记录集,退出 m_pRecordset->Close(); OnCancel(); } void CDialogCOU::OnButtonAdd() { // TODO: ADD your control notification handler code here // //给所有显示控件一个添加之前的初值 // m_CouID = 0; m_CouScore = 0; m_CouName = ""; m_CouKind = ""; m_CouTea = 0; UpdateData(false); //更新FOUNCTION值 FOUNCTION = ADD; //修改各个矩形按钮的属性 m_btnQuery.EnableWindow(FALSE); m_btnAdd.SetState(TRUE); m_btnDelete.EnableWindow(FALSE); m_btnModify.EnableWindow(FALSE); m_btnFirst.EnableWindow(FALSE); m_btnPre.EnableWindow(FALSE); m_btnNext.EnableWindow(FALSE); m_btnLast.EnableWindow(FALSE); m_btnOK.SetFocus(); } void CDialogCOU::OnButtonDelete() { // TODO: ADD your control notification handler code here if(MessageBox("真的删除?\n是请按“是”,\n否请按“否”!", NULL, MB_YESNO | MB_ICONQUESTION) == IDYES) { //更新FOUNCTION值 FOUNCTION = DEL; OnButtonOK(); } else { OnButtonCancel(); } } void CDialogCOU::OnButtonModify() { // TODO: ADD your control notification handler code here //更新FOUNCTION值 FOUNCTION = MODIFY; m_ctlCouID.SetReadOnly(); //修改各个矩形按钮的属性 m_btnQuery.EnableWindow(FALSE); m_btnAdd.EnableWindow(FALSE); m_btnDelete.EnableWindow(FALSE); m_btnModify.SetState(TRUE); m_btnFirst.EnableWindow(FALSE); m_btnPre.EnableWindow(FALSE); m_btnNext.EnableWindow(FALSE); m_btnLast.EnableWindow(FALSE); m_btnOK.SetFocus(); } void CDialogCOU::OnButtonFirst() { // TODO: ADD your control notification handler code here m_pRecordset->MoveFirst(); _variant_t var; CString str; try { var = m_pRecordset->GetCollect("CouID"); if(var.vt != VT_NULL) m_CouID = var.iVal ; var = m_pRecordset->GetCollect("CouName"); str = (LPCSTR)_bstr_t(var); m_CouName = str; var = m_pRecordset->GetCollect("CouKind"); str = (LPCSTR)_bstr_t(var); m_CouKind = str; var = m_pRecordset->GetCollect("CouScore"); m_CouScore = var.iVal; var = m_pRecordset->GetCollect("CouTea"); m_CouTea = var.iVal; UpdateData(false); } catch(_com_error *e) { AfxMessageBox(e->ErrorMessage()); } } void CDialogCOU::OnButtonPre() { // TODO: ADD your control notification handler code here m_pRecordset->MovePrevious(); _variant_t var; CString str; if(m_pRecordset->BOF) { MessageBox("已经是首记录!"); m_pRecordset->MoveFirst(); } try { var = m_pRecordset->GetCollect("CouID"); if(var.vt != VT_NULL) m_CouID = var.iVal; var = m_pRecordset->GetCollect("CouName"); str = (LPCSTR)_bstr_t(var); m_CouName = str; var = m_pRecordset->GetCollect("CouKind"); str = (LPCSTR)_bstr_t(var); m_CouKind = str; var = m_pRecordset->GetCollect("CouScore"); m_CouScore = var.iVal; var = m_pRecordset->GetCollect("CouTea"); m_CouTea = var.iVal; UpdateData(false); } catch(_com_error *e) { AfxMessageBox(e->ErrorMessage()); } } void CDialogCOU::OnButtonNext() { // TODO: ADD your control notification handler code here m_pRecordset->MoveNext(); _variant_t var; CString str; if(m_pRecordset->adoEOF) { MessageBox("已经是末记录!"); m_pRecordset->MoveLast(); } try { var = m_pRecordset->GetCollect("CouID"); if(var.vt != VT_NULL) m_CouID = var.iVal; var = m_pRecordset->GetCollect("CouName"); str = (LPCSTR)_bstr_t(var); m_CouName = str; var = m_pRecordset->GetCollect("CouKind"); str = (LPCSTR)_bstr_t(var); m_CouKind = str; var = m_pRecordset->GetCollect("CouScore"); m_CouScore = var.iVal; var = m_pRecordset->GetCollect("CouTea"); m_CouTea = var.iVal; UpdateData(false); } catch(_com_error *e) { AfxMessageBox(e->ErrorMessage()); } } void CDialogCOU::OnButtonLast() { // TODO: ADD your control notification handler code here m_pRecordset->MoveLast(); _variant_t var; CString str; try { var = m_pRecordset->GetCollect("CouID"); if(var.vt != VT_NULL) m_CouID = var.iVal; var = m_pRecordset->GetCollect("CouName"); str = (LPCSTR)_bstr_t(var); m_CouName = str; var = m_pRecordset->GetCollect("CouKind"); str = (LPCSTR)_bstr_t(var); m_CouKind = str; var = m_pRecordset->GetCollect("CouScore"); m_CouScore = var.iVal; var = m_pRecordset->GetCollect("CouTea"); m_CouTea = var.iVal; UpdateData(false); } catch(_com_error *e) { AfxMessageBox(e->ErrorMessage()); } } void CDialogCOU::OnButtonCancel() { // TODO: ADD your control notification handler code here _variant_t var; CString str; FOUNCTION=INIT; //如果表为空,返回不做下面的操作 if(m_pRecordset->BOF) { m_btnAdd.SetState(false); return; } //修改各个矩形按钮的属性 m_btnQuery.EnableWindow(true); m_btnAdd.EnableWindow(true); m_btnDelete.EnableWindow(true); m_btnModify.EnableWindow(true); m_btnFirst.EnableWindow(true); m_btnPre.EnableWindow(true); m_btnNext.EnableWindow(true); m_btnLast.EnableWindow(true); m_btnQuery.SetState(false); m_btnAdd.SetState(false); m_btnDelete.SetState(false); m_btnModify.SetState(false); m_btnFirst.SetState(false); m_btnPre.SetState(false); m_btnNext.SetState(false); m_btnLast.SetState(false); m_ctlCouID.SetReadOnly(FALSE); m_btnOK.SetFocus(); // //把m_pRecordset所指当前记录显示出来 // if(m_pRecordset->adoEOF) { m_pRecordset->MoveLast(); } try { var = m_pRecordset->GetCollect("CouID"); if(var.vt != VT_NULL) m_CouID = var.iVal ; var = m_pRecordset->GetCollect("CouName"); str = (LPCSTR)_bstr_t(var); m_CouName = str; var = m_pRecordset->GetCollect("CouKind"); str = (LPCSTR)_bstr_t(var); m_CouKind = str; var = m_pRecordset->GetCollect("CouScore"); m_CouScore = var.iVal; var = m_pRecordset->GetCollect("CouTea"); m_CouTea = var.iVal; UpdateData(false); } catch(_com_error *e) { AfxMessageBox(e->ErrorMessage()); } }