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

📄 studyworddlg.cpp

📁 这是一个学生信息管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// StudyWordDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "SMS.h"
#include "StudyWordDlg.h"


// CStudyWordDlg 对话框

IMPLEMENT_DYNAMIC(CStudyWordDlg, CDialog)

CStudyWordDlg::CStudyWordDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CStudyWordDlg::IDD, pParent)
	, m_pSet(&theApp.m_db )
	, m_iWordAmount(0)
	, m_pTempSet(&theApp.m_db)
{
	//显示窗口颜色
	m_backcolor=m_RGB_BkColor;
	m_brush.CreateSolidBrush(m_backcolor);
	m_bItemClick=false;

}

CStudyWordDlg::~CStudyWordDlg()
{
}

void CStudyWordDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_STUDY_WORD_LIST, m_cWordList);
	DDX_Text(pDX, IDC_WORDAMOUNT_STATIC, m_iWordAmount);
	DDX_Control(pDX, IDC_STUDY_WORD_DELETE_BT, m_cDeleteBt);
	DDX_Control(pDX, IDC_STUDY_WORD_UPDATE_BT, m_cUpdateBt);
	DDX_Control(pDX, IDC_STUDY_WORD_PRINT_BT, m_cPrintBt);
}


BEGIN_MESSAGE_MAP(CStudyWordDlg, CDialog)
	ON_BN_CLICKED(IDC_STUDY_WORD_ADD_BT, &CStudyWordDlg::OnBnClickedStudyWordAddBt)
	ON_BN_CLICKED(IDC_STUDY_WORD_ALL_BT, &CStudyWordDlg::OnBnClickedStudyWordAllBt)
	ON_BN_CLICKED(IDC_STUDY_WORD_UPDATE_BT, &CStudyWordDlg::OnBnClickedStudyWordUpdateBt)
	ON_BN_CLICKED(IDC_STUDY_WORD_DELETE_BT, &CStudyWordDlg::OnBnClickedStudyWordDeleteBt)
	ON_BN_CLICKED(IDC_STUDY_WORD_SEARCH_BT, &CStudyWordDlg::OnBnClickedStudyWordSearchBt)
	ON_BN_CLICKED(IDC_WORDTYPE_BT, &CStudyWordDlg::OnBnClickedWordtypeBt)
	ON_WM_QUERYDRAGICON()//打印
	ON_BN_CLICKED(IDC_STUDY_WORD_PRINT_BT, &CStudyWordDlg::OnBnClickedStudyWordPrintBt)
	ON_WM_CTLCOLOR()
	ON_NOTIFY(HDN_ITEMCLICK, 0, &CStudyWordDlg::OnHdnItemclickStudyWordList)
	ON_WM_SETCURSOR()
	ON_WM_TIMER()
    ON_WM_CONTEXTMENU()
	ON_WM_CLOSE()
	ON_COMMAND(ID_WORD_ALL, &CStudyWordDlg::OnWordAll)
	ON_COMMAND(ID_WORD_KIND, &CStudyWordDlg::OnWordKind)
	ON_COMMAND(ID_WORD_ADD, &CStudyWordDlg::OnWordAdd)
	ON_COMMAND(ID_WORD_UPDATE, &CStudyWordDlg::OnWordUpdate)
	ON_COMMAND(ID_WORD_DELETE, &CStudyWordDlg::OnWordDelete)
	ON_COMMAND(ID_WORD_SEARCH, &CStudyWordDlg::OnWordSearch)
	ON_COMMAND(ID_WORD_PRINT, &CStudyWordDlg::OnWordPrint)
	ON_UPDATE_COMMAND_UI(ID_WORD_UPDATE, &CStudyWordDlg::OnUpdateWordUpdate )
	ON_UPDATE_COMMAND_UI(ID_WORD_DELETE, &CStudyWordDlg::OnUpdateWordDelete )
	ON_UPDATE_COMMAND_UI(ID_WORD_PRINT, &CStudyWordDlg::OnUpdateWordPrint )
    ON_WM_INITMENUPOPUP()
END_MESSAGE_MAP()


// CStudyWordDlg 消息处理程序

void CStudyWordDlg::Add ()
{
	CStudyWordAddDlg dlg;
	if(dlg.DoModal ()==IDOK)
	{
		if(!theApp.m_db.CanTransact ())
		{
			//虽然不支持事务处理的数据库很少,但是我强硬地不允许这种情况出现
			MessageBox(L"\n系统不支持事务处理,添加不成功!\n",L"错误", MB_ICONSTOP);
			return ;                                    
		}
		theApp.m_db.BeginTrans ();//开始事务处理
		TRY
		{
	        m_pSet.Open (AFX_DB_USE_DEFAULT_TYPE,L"Select * from WordList  order by wGroup");
		    m_pSet.m_strFilter.Empty ();
			m_pSet.AddNew ();
			m_pSet.m_wWord =dlg.m_sWord ;
			m_pSet.m_wMean =dlg.m_sMean ;
			m_pSet.m_wGroup =dlg.m_sKind ;
			m_pSet.m_wRemark =dlg.m_sRemark ;
			m_pSet.Update ();
			m_pSet.MoveLast ();
		    m_pSet.Close ();
            theApp.m_db.CommitTrans ();//添加成功了
		}
		CATCH_ALL(e)
		{
			theApp.m_db.Rollback ();
		    MessageBox(L"\n事务处理出错,添加失败!\n",L"错误", MB_ICONSTOP);
			return;
	    }
	    END_CATCH_ALL
		//添加成功了,就要在列表中显示出来
        m_cWordList.InsertItem(0,dlg.m_sWord ,0);
        m_cWordList.SetItemText (0,1,dlg.m_sMean  );
		m_cWordList.SetItemText (0,2,dlg.m_sKind );
		m_cWordList.SetItemText (0,3,dlg.m_sRemark );
		//然后再在个数中加一,显示给用户
		m_iWordAmount++;
		CString s;
		s.Format (L"%d",m_iWordAmount);
		SetDlgItemText(IDC_WORDAMOUNT_STATIC,s);//显示
	}	
}
void CStudyWordDlg::OnBnClickedStudyWordAddBt()
{
	// TODO: 在此添加控件通知处理程序代码
    Add();
}

void CStudyWordDlg::ViewAll ()
{
	BeginWaitCursor();
	m_cWordList.DeleteAllItems ();
	if(m_pSet.IsOpen ())
		m_pSet.Close ();
	m_pSet.Open (AFX_DB_USE_DEFAULT_TYPE,L"Select * from WordList order by wGroup");
	m_pSet.m_strFilter .Empty ();
	int count;
	count=m_pSet.GetRecordCount ();
	if(count==0)//如果该数据表为空,则不用显示
	{
		EndWaitCursor();
		m_pSet.Close ();
		return ;
	}
	m_pSet.MoveFirst ();
	int i=0; 
	while (!m_pSet.IsEOF ())
	{
        m_cWordList.InsertItem(i,(CString)m_pSet.m_wWord ,0);
        m_cWordList.SetItemText (i,1,m_pSet.m_wMean );
		m_cWordList.SetItemText (i,2,m_pSet.m_wGroup );
		m_cWordList.SetItemText (i,3,m_pSet.m_wRemark );
        i++;
		m_pSet.MoveNext ();
	}
	m_pSet.Close ();
	//现在在右边显示个数
	m_iWordAmount=i;
	CString s;
	s.Format (L"%d",m_iWordAmount);
	SetDlgItemText(IDC_WORDAMOUNT_STATIC,s);//显示
	EndWaitCursor();
}

BOOL CStudyWordDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// TODO:  在此添加额外的初始化
	SetTimer(1,100,NULL);
	//初始化列表
	m_cWordList.SetExtendedStyle (LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
	m_cWordList.InsertColumn (0,L"单词",LVCFMT_IMAGE|LVCFMT_LEFT);
	m_cWordList.InsertColumn (1,L"词义");
	m_cWordList.InsertColumn (2,L"分类");
	m_cWordList.InsertColumn (3,L"备注");
	for (int i=0; i<4; i++)
		m_cWordList.SetColumnWidth (i,124);
	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常: OCX 属性页应返回 FALSE
}

void CStudyWordDlg::OnBnClickedStudyWordAllBt()
{
	// TODO: 在此添加控件通知处理程序代码
	ViewAll();
}

void CStudyWordDlg::Update ()
{
	POSITION pos = m_cWordList.GetFirstSelectedItemPosition();
    if (pos == NULL)
	{
		MessageBox(L"你没有选择要修改的单词\n请在列表中选择要修改的单词!",L"提示",MB_ICONEXCLAMATION);
		return ;//没有选择表项则不用做下面的事情
	}
    else
    {
		if(!theApp.m_db.CanTransact ())
		{
			//虽然不支持事务处理的数据库很少,但是我强硬地不允许这种情况出现
			MessageBox(L"\n系统不支持事务处理,修改不成功!\n",L"错误", MB_ICONSTOP);
			return ;                                    
		}
	    int nItem = m_cWordList.GetNextSelectedItem(pos);//列表中的项目序号也即数据库中的编号
		//下面获取该表项的数据,用于在修改对话框中显示
		m_sStudyWord_Word=m_cWordList.GetItemText (nItem,0);
        m_sStudyWord_Mean=m_cWordList.GetItemText (nItem,1);
		m_sStudyWord_Group=m_cWordList.GetItemText (nItem,2);
		m_sStudyWord_Remark=m_cWordList.GetItemText (nItem,3);
        //下面弹出修改对话框,初始化数据由上面部分提供
		CStudyWordUpdateDlg dlg;
		if(dlg.DoModal ()!=IDOK)
		{
			return ;//万一用户没有输入正确信息,则退出,不给修改
		}
		theApp.m_db.BeginTrans ();//开始事务处理
		TRY
		{
	        m_pSet.Open (AFX_DB_USE_DEFAULT_TYPE,L"Select * from WordList order by wGroup");
		    m_pSet.m_strFilter.Empty ();
			m_pSet.MoveFirst ();//刚开始移动到第一个位置
			while(!m_pSet.IsEOF ())
			{
				if((CString)m_pSet.m_wWord ==m_sStudyWord_Word)
				{
					m_pSet.Edit ();
 			        m_pSet.m_wWord =(CStringW)dlg.m_sWord ;
			        m_pSet.m_wMean =(CStringW)dlg.m_sMean ;
			        m_pSet.m_wGroup =(CStringW)dlg.m_sKind ;
			        m_pSet.m_wRemark =(CStringW)dlg.m_sRemark ;
			        m_pSet.Update ();
			        m_pSet.Requery ();
					m_pSet.MoveNext ();
					break;
				}
				m_pSet.MoveNext ();
			}
        m_pSet.Close ();
        theApp.m_db.CommitTrans ();//修改成功了
		}
		CATCH_ALL(e)
		{
			theApp.m_db.Rollback ();
		    MessageBox(L"\n事务处理出错,修改失败!\n",L"错误", MB_ICONSTOP);
			return;
	    }
	    END_CATCH_ALL
		//修改成功了,就要把新的在列表中显示出来,同时去掉旧的
		//先去掉旧的
		m_cWordList.DeleteItem (nItem);
		//再添加新的
        m_cWordList.InsertItem(nItem,dlg.m_sWord ,0);
        m_cWordList.SetItemText (nItem,1,dlg.m_sMean  );
		m_cWordList.SetItemText (nItem,2,dlg.m_sKind );
		m_cWordList.SetItemText (nItem,3,dlg.m_sRemark );
	}
}
void CStudyWordDlg::OnBnClickedStudyWordUpdateBt()
{
	// TODO: 在此添加控件通知处理程序代码
    Update();
}

void CStudyWordDlg::Delete ()
{
	POSITION pos = m_cWordList.GetFirstSelectedItemPosition();
    if (pos == NULL)
	{
		MessageBox(L"\n你没有选中任何一个项目,不可以删除!\n",L"提示",MB_ICONEXCLAMATION);
	}
    else
   {
	   if(MessageBox(L"\n此操作将永久删除该项,确定吗?\n",L"删除提醒",MB_OKCANCEL|MB_ICONQUESTION|MB_DEFBUTTON2)==IDCANCEL)
		   return ;
	   while (pos)
      {
		  int nItem = m_cWordList.GetNextSelectedItem(pos);
		  CString str;
		  str="Select * from WordList order by wGroup";
	      m_pSet.Open (AFX_DB_USE_DEFAULT_TYPE,str);
		  //获取该单词
		  CString m_Word;
		  m_Word=m_cWordList.GetItemText (nItem,0);
		  m_pSet.m_strFilter.Empty ();
		  m_pSet.MoveFirst ();//刚开始移动到第一个位置
		  while(!m_pSet.IsEOF ())
		  {
			  if((CString)m_pSet.m_wWord ==m_Word)
			  {
				  m_pSet.Delete ();
				  break;
			  }
			  m_pSet.MoveNext ();
		  }		 
		  if(!m_pSet.IsDeleted ())
		  {
			  MessageBox(L"\n删除失败!\n",L"错误", MB_ICONSTOP);
			  return ;
		  }
		  m_pSet.MoveNext ();
		  //数据库删除成功后就删除列表了
		  m_cWordList.DeleteItem (nItem);
		  m_pSet.Close ();
		  //现在在右边显示个数
	      m_iWordAmount--;
	      CString s;
	      s.Format (L"%d",m_iWordAmount);
	      SetDlgItemText(IDC_WORDAMOUNT_STATIC,s);//显示
      }
   }
}
void CStudyWordDlg::OnBnClickedStudyWordDeleteBt()
{
	// TODO: 在此添加控件通知处理程序代码
    Delete();
}

void CStudyWordDlg::Search ()
{
	CStudyWordSearchDlg dlg;
	int i=0;
	if(dlg.DoModal ()==IDOK)
	{
        BeginWaitCursor();
		m_cWordList.DeleteAllItems ();
		if(m_pSet.IsOpen ())
			m_pSet.Close ();
		CString str;
		str="Select * from WordList where ";
		switch(dlg.m_iItem )
		{
	    case 0: str+="wWord"; break;
		case 1: str+="wMean"; break;
		case 2: str+="wGroup"; break;
		case 3: str+="wRemark"; break;
		}
		str+=" Like '%";
		str+=dlg.m_sKeyWord ;
		str+="%' order by wGroup";
	    m_pSet.Open (AFX_DB_USE_DEFAULT_TYPE,str);
		m_pSet.m_strFilter .Empty ();
		m_pSet.Requery ();
		if(m_pSet.IsEOF ())
		{
		     m_iWordAmount=i;
	         CString s;
	         s.Format (L"%d",m_iWordAmount);
	         SetDlgItemText(IDC_WORDAMOUNT_STATIC,s);//显示
			 MessageBox(L"\n不存在这样的记录!\n",L"提示",MB_ICONEXCLAMATION);
			 m_pSet.Close ();
			 EndWaitCursor();
			 return ;
		}
		else
		{
	        if(m_pSet.GetRecordCount ()==0)
		   {
				m_iWordAmount=i;
				CString s;
				s.Format (L"%d",m_iWordAmount);
				SetDlgItemText(IDC_WORDAMOUNT_STATIC,s);//显示
				MessageBox(L"\n不存在这样的记录!\n",L"提示",MB_ICONEXCLAMATION);
			    m_pSet.Close ();
				EndWaitCursor();
			    return ;
		   }
		   m_pSet.MoveFirst ();
	       while (!m_pSet.IsEOF ())
	       { 
		       m_cWordList.InsertItem (i,(CString)m_pSet.m_wWord ,0);
		       m_cWordList.SetItemText (i,1,(CString)m_pSet.m_wMean );
		       m_cWordList.SetItemText (i,2,(CString)m_pSet.m_wGroup );
		       m_cWordList.SetItemText (i,3,(CString)m_pSet.m_wRemark );
               i++;
			   m_pSet.MoveNext ();
	       }
	       m_pSet.Close ();
		   //现在在右边显示个数
	        if(i==0)
		   {
				m_iWordAmount=i;
				CString s;
				s.Format (L"%d",m_iWordAmount);
				SetDlgItemText(IDC_WORDAMOUNT_STATIC,s);//显示
				MessageBox(L"\n不存在这样的记录!\n",L"提示",MB_ICONEXCLAMATION);
			    m_pSet.Close ();
				EndWaitCursor();
			    return ;
		   }
	       m_iWordAmount=i;
	       CString s;
	       s.Format (L"%d",m_iWordAmount);
	       SetDlgItemText(IDC_WORDAMOUNT_STATIC,s);//显示
		}
		EndWaitCursor();
	}	
}
void CStudyWordDlg::OnBnClickedStudyWordSearchBt()
{
	// TODO: 在此添加控件通知处理程序代码
    Search();
}

void CStudyWordDlg::Kind ()
{
    CStudyWordTypeDlg dlg;
	int i=0;
	if(dlg.DoModal ()==IDOK)

⌨️ 快捷键说明

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