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

📄 studytimetabledlg.cpp

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

#include "stdafx.h"
#include "SMS.h"
#include "StudyTimetableDlg.h"


// CStudyTimetableDlg 对话框

IMPLEMENT_DYNAMIC(CStudyTimetableDlg, CDialog)

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

CStudyTimetableDlg::~CStudyTimetableDlg()
{
}

void CStudyTimetableDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_STUDY_COURSE_LIST, m_cCourseListCtrl);
	DDX_Text(pDX, IDC_COURSEAMOUNT_STATIC, m_iCourseAmount);
	DDX_Control(pDX, IDC_STUDY_COURSE_DELETE_BT, m_cDeleteBt);
	DDX_Control(pDX, IDC_STUDY_COURSE_UPDATE_BT, m_cUpdateBt);
	DDX_Control(pDX, IDC_STUDY_COURSE_PRINT_BT, m_cPrintBt);
}


BEGIN_MESSAGE_MAP(CStudyTimetableDlg, CDialog)
	ON_BN_CLICKED(IDC_STUDY_COURSE_TYPE_BT, &CStudyTimetableDlg::OnBnClickedStudyCourseTypeBt)
	ON_BN_CLICKED(IDC_STUDY_COURSE_ALL_BT, &CStudyTimetableDlg::OnBnClickedStudyCourseAllBt)
	ON_BN_CLICKED(IDC_STUDY_COURSE_ADD_BT, &CStudyTimetableDlg::OnBnClickedStudyCourseAddBt)
	ON_BN_CLICKED(IDC_STUDY_COURSE_UPDATE_BT, &CStudyTimetableDlg::OnBnClickedStudyCourseUpdateBt)
	ON_BN_CLICKED(IDC_STUDY_COURSE_SEARCH_BT, &CStudyTimetableDlg::OnBnClickedStudyCourseSearchBt)
	ON_BN_CLICKED(IDC_STUDY_COURSE_DELETE_BT, &CStudyTimetableDlg::OnBnClickedStudyCourseDeleteBt)
	ON_WM_QUERYDRAGICON()//打印
	ON_BN_CLICKED(IDC_STUDY_COURSE_PRINT_BT, &CStudyTimetableDlg::OnBnClickedStudyCoursePrintBt)
	ON_WM_CTLCOLOR()
	ON_NOTIFY(HDN_ITEMCLICK, 0, &CStudyTimetableDlg::OnHdnItemclickStudyCourseList)
	ON_COMMAND(ID_COURSE_ALL, &CStudyTimetableDlg::OnCourseAll)
	ON_COMMAND(ID_COURSE_KIND, &CStudyTimetableDlg::OnCourseKind)
	ON_COMMAND(ID_COURSE_ADD, &CStudyTimetableDlg::OnCourseAdd)
	ON_COMMAND(ID_COURSE_UPDATE, &CStudyTimetableDlg::OnCourseUpdate)
	ON_COMMAND(ID_COURSE_DELETE, &CStudyTimetableDlg::OnCourseDelete)
	ON_COMMAND(ID_COURSE_SEARCH, &CStudyTimetableDlg::OnCourseSearch)
	ON_COMMAND(ID_COURSE_PRINT, &CStudyTimetableDlg::OnCoursePrint)
	ON_WM_CONTEXTMENU()
	ON_WM_TIMER()
	ON_WM_CLOSE()
	ON_UPDATE_COMMAND_UI(ID_COURSE_UPDATE, &CStudyTimetableDlg::OnUpdateCourseUpdate)
	ON_UPDATE_COMMAND_UI(ID_COURSE_DELETE, &CStudyTimetableDlg::OnUpdateCourseDelete)
	ON_UPDATE_COMMAND_UI(ID_COURSE_PRINT, &CStudyTimetableDlg::OnUpdateCoursePrint)
    ON_WM_INITMENUPOPUP()
END_MESSAGE_MAP()


// CStudyTimetableDlg 消息处理程序

void CStudyTimetableDlg::Kind()
{
	CString s;
	int i=0;
    CStudyCourseTypeDlg dlg;
	if(dlg.DoModal ()==IDOK)
	{
		BeginWaitCursor();
		m_cCourseListCtrl.DeleteAllItems ();
	    if(m_pSet.IsOpen ())
		    m_pSet.Close ();
	    CString str;
	    str="Select * from Course where cKind='";
	    str+=dlg.m_sCourseType ;
	    str+="' order by cTerm";
	    m_pSet.Open (AFX_DB_USE_DEFAULT_TYPE,str);
	    m_pSet.m_strFilter .Empty ();
	    m_pSet.Requery ();
	    if(m_pSet.IsEOF ())
	    {
	        m_iCourseAmount=i;
	        CString s;
	        s.Format (L"%d",m_iCourseAmount);
	        SetDlgItemText(IDC_COURSEAMOUNT_STATIC,s);//显示
		    MessageBox(L"\n不存在这样的记录!\n",L"提示",MB_ICONEXCLAMATION);
		    m_pSet.Close ();
			EndWaitCursor();
		    return ;
	    }
	    else
	    {
	        if(m_pSet.GetRecordCount ()==0)
		    {
				m_iCourseAmount=i;
				CString s;
				s.Format (L"%d",m_iCourseAmount);
				SetDlgItemText(IDC_COURSEAMOUNT_STATIC,s);//显示
				MessageBox(L"\n不存在这样的记录!\n",L"提示",MB_ICONEXCLAMATION);
			    m_pSet.Close ();
				EndWaitCursor();
			    return ;
		    }
		    m_pSet.MoveFirst ();
	        while (!m_pSet.IsEOF ())
	        {  
		        m_cCourseListCtrl.InsertItem (i,(CString)m_pSet.m_cName ,0);
                m_cCourseListCtrl.SetItemText (i,1,(CString)m_pSet.m_cTeacherName );
		        m_cCourseListCtrl.SetItemText (i,2,(CString)m_pSet.m_cTime );
		        m_cCourseListCtrl.SetItemText (i,3,(CString)m_pSet.m_cPlace );
		        s.Format (L"%d",m_pSet.m_cCredit);
		        m_cCourseListCtrl.SetItemText (i,4,s );
		        s.Format (L"%d",m_pSet.m_cTerm );
		        m_cCourseListCtrl.SetItemText (i,5,s);
		        m_cCourseListCtrl.SetItemText (i,6,(CString)m_pSet.m_cKind );
		        m_cCourseListCtrl.SetItemText (i,7,(CString)m_pSet.m_cExamTime );
		        m_cCourseListCtrl.SetItemText (i,8,(CString)m_pSet.m_cRemark );
				s.Format (L"%d",m_pSet.m_cId );
				m_cCourseListCtrl.SetItemText (i,9,s);
				i++;
			    m_pSet.MoveNext ();
	        }
	        m_pSet.Close ();
	        //现在在右边显示个数
	        if(i==0)
		    {
				m_iCourseAmount=i;
				CString s;
				s.Format (L"%d",m_iCourseAmount);
				SetDlgItemText(IDC_COURSEAMOUNT_STATIC,s);//显示
				MessageBox(L"\n不存在这样的记录!\n",L"提示",MB_ICONEXCLAMATION);
			    m_pSet.Close ();
				EndWaitCursor();
			    return ;
		    }
	        m_iCourseAmount=i;
	       CString s;
	       s.Format (L"%d",m_iCourseAmount);
	       SetDlgItemText(IDC_COURSEAMOUNT_STATIC,s);//显示
		}
		EndWaitCursor();
	}
}
void CStudyTimetableDlg::OnBnClickedStudyCourseTypeBt()
{
	// TODO: 在此添加控件通知处理程序代码
    Kind();
}

BOOL CStudyTimetableDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	// TODO:  在此添加额外的初始化
	SetTimer(1,100,NULL);
	m_cCourseListCtrl.SetExtendedStyle (LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
	m_cCourseListCtrl.InsertColumn (0,L"名称",LVCFMT_IMAGE|LVCFMT_LEFT);
    m_cCourseListCtrl.SetColumnWidth(0,63);
	m_cCourseListCtrl.InsertColumn (1,L"老师");
    m_cCourseListCtrl.SetColumnWidth(1,60);
	m_cCourseListCtrl.InsertColumn (2,L"时间");
    m_cCourseListCtrl.SetColumnWidth(2,60);
	m_cCourseListCtrl.InsertColumn (3,L"地点");
    m_cCourseListCtrl.SetColumnWidth(3,60);
	m_cCourseListCtrl.InsertColumn (4,L"学分");
    m_cCourseListCtrl.SetColumnWidth(4,40);
	m_cCourseListCtrl.InsertColumn (5,L"学期");
    m_cCourseListCtrl.SetColumnWidth(5,40);
	m_cCourseListCtrl.InsertColumn (6,L"性质");
    m_cCourseListCtrl.SetColumnWidth(6,60);
	m_cCourseListCtrl.InsertColumn (7,L"考试时间");
    m_cCourseListCtrl.SetColumnWidth(7,63);
	m_cCourseListCtrl.InsertColumn (8,L"备注");
    m_cCourseListCtrl.SetColumnWidth(8,63);
	m_cCourseListCtrl.InsertColumn (9,L"主键");
	m_cCourseListCtrl.SetColumnWidth(9,0);
	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常: OCX 属性页应返回 FALSE
}

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

void CStudyTimetableDlg::ViewAll()
{
	BeginWaitCursor();
	m_cCourseListCtrl.DeleteAllItems ();
	if(m_pSet.IsOpen ())
		m_pSet.Close ();
	m_pSet.Open (AFX_DB_USE_DEFAULT_TYPE,L"Select * from Course order by cTerm");
	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; 
	CString s;
	while (!m_pSet.IsEOF ())
	{
        m_cCourseListCtrl.InsertItem(i,(CString)m_pSet.m_cName ,0);
        m_cCourseListCtrl.SetItemText (i,1,(CString)m_pSet.m_cTeacherName );
		m_cCourseListCtrl.SetItemText (i,2,(CString)m_pSet.m_cTime );
		m_cCourseListCtrl.SetItemText (i,3,(CString)m_pSet.m_cPlace );
		s.Format (L"%d",m_pSet.m_cCredit);
		m_cCourseListCtrl.SetItemText (i,4,s );
		s.Format (L"%d",m_pSet.m_cTerm );
		m_cCourseListCtrl.SetItemText (i,5,s);
		m_cCourseListCtrl.SetItemText (i,6,(CString)m_pSet.m_cKind );
		m_cCourseListCtrl.SetItemText (i,7,(CString)m_pSet.m_cExamTime );
		m_cCourseListCtrl.SetItemText (i,8,(CString)m_pSet.m_cRemark );
		s.Format (L"%d",m_pSet.m_cId );
		m_cCourseListCtrl.SetItemText (i,9,s);
        i++;
		m_pSet.MoveNext ();
	}
	m_pSet.Close ();
	//现在在右边显示个数
	m_iCourseAmount=i;
	s.Format (L"%d",m_iCourseAmount);
	SetDlgItemText(IDC_COURSEAMOUNT_STATIC,s);//显示
	EndWaitCursor();
}

void CStudyTimetableDlg::Add()
{
	CString s;
	CStudyCourseAddDlg 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 Course  order by cTerm");
		    m_pSet.m_strFilter.Empty ();
			m_pSet.AddNew ();
			m_pSet.m_cName =dlg.m_sName ;
			m_pSet.m_cTeacherName =dlg.m_sTeacher ;
			m_pSet.m_cTime =dlg.m_sCourseTime  ;
			m_pSet.m_cPlace =dlg.m_sPlace ;
			m_pSet.m_cCredit =dlg.m_iCredit ;
			m_pSet.m_cTerm =dlg.m_iTerm +1;//记住,ComboBox是从0开始的
			m_pSet.m_cKind =dlg.m_sKind ;
			m_pSet.m_cExamTime =dlg.m_sExamTime ;
			m_pSet.m_cRemark =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_cCourseListCtrl.InsertItem(0,dlg.m_sName,0);
        m_cCourseListCtrl.SetItemText (0,1,dlg.m_sTeacher);
		m_cCourseListCtrl.SetItemText (0,2,dlg.m_sCourseTime  );
		m_cCourseListCtrl.SetItemText (0,3,dlg.m_sPlace);
		s.Format (L"%d",dlg.m_iCredit );
		m_cCourseListCtrl.SetItemText (0,4,s );
		s.Format (L"%d",dlg.m_iTerm+1  );
		m_cCourseListCtrl.SetItemText (0,5,s);
		m_cCourseListCtrl.SetItemText (0,6,dlg.m_sKind );
		m_cCourseListCtrl.SetItemText (0,7,dlg.m_sExamTime );
		m_cCourseListCtrl.SetItemText (0,8,dlg.m_sRemark );	
	    s.Format (L"%d",m_pSet.m_cId );
		m_cCourseListCtrl.SetItemText (0,9,s);
	    //然后再在个数中加一,显示给用户
		m_iCourseAmount++;
		CString s;
		s.Format (L"%d",m_iCourseAmount);
		SetDlgItemText(IDC_COURSEAMOUNT_STATIC,s);//显示
	}
}
void CStudyTimetableDlg::OnBnClickedStudyCourseAddBt() 
{
	// TODO: 在此添加控件通知处理程序代码
	Add();
}
void CStudyTimetableDlg::Update ()
{
CString s;
	CString Time;
	CString Day;
	int Length;
	POSITION pos = m_cCourseListCtrl.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_cCourseListCtrl.GetNextSelectedItem(pos);//列表中的项目序号也即数据库中的编号
		//下面获取该表项的数据,用于在修改对话框中显示
        m_sStudyCourse_Name=m_cCourseListCtrl.GetItemText (nItem,0);
        m_sStudyCourse_TeacherName=m_cCourseListCtrl.GetItemText (nItem,1);
        Day=Time=m_cCourseListCtrl.GetItemText (nItem,2);
		//再对Time分解
		Length=Time.GetLength ();
		Day.Delete (2,Length-2);//只取周次
		Time.Delete (0,3);//只取节数
		m_sStudyCourse_Day=Day;
		m_sStudyCourse_Time=Time;
        m_sStudyCourse_Place=m_cCourseListCtrl.GetItemText (nItem,3);
        m_sStudyCourse_Credit=m_cCourseListCtrl.GetItemText (nItem,4);
        m_sStudyCourse_Term=m_cCourseListCtrl.GetItemText (nItem,5);
        m_sStudyCourse_Kind=m_cCourseListCtrl.GetItemText (nItem,6);
        m_sStudyCourse_ExamTime=m_cCourseListCtrl.GetItemText (nItem,7);
        m_sStudyCourse_Remark=m_cCourseListCtrl.GetItemText (nItem,8);
		m_iStudyCourse_Id=_ttol(m_cCourseListCtrl.GetItemText (nItem,9));
       //下面弹出修改对话框,初始化数据由上面部分提供
		CStudyCourseUpdateDlg dlg;
		if(dlg.DoModal ()!=IDOK)
		{
			return ;//万一用户没有输入正确信息,则退出,不给修改
		}
		theApp.m_db.BeginTrans ();//开始事务处理
		TRY
		{
	        m_pSet.Open (AFX_DB_USE_DEFAULT_TYPE,L"Select * from Course order by cTerm");
		    m_pSet.m_strFilter.Empty ();
			m_pSet.MoveFirst ();//刚开始移动到第一个位置
			while(!m_pSet.IsEOF ())
			{
				if(m_iStudyCourse_Id==m_pSet.m_cId )
				{
					m_pSet.Edit ();
			        m_pSet.m_cName =dlg.m_sName ;
			        m_pSet.m_cTeacherName =dlg.m_sTeacher ;
			        m_pSet.m_cTime =dlg.m_sCourseTime;
			        m_pSet.m_cPlace =dlg.m_sPlace ;
			        m_pSet.m_cCredit =dlg.m_iCredit ;
			        m_pSet.m_cTerm =dlg.m_iTerm+1 ;//记住,ComboBox是从0开始的
			        m_pSet.m_cKind =dlg.m_sKind ;
			        m_pSet.m_cExamTime =dlg.m_sExamTime ;
			        m_pSet.m_cRemark =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_cCourseListCtrl.DeleteItem (nItem);
		//再添加新的
        m_cCourseListCtrl.InsertItem(nItem,dlg.m_sName,0);
        m_cCourseListCtrl.SetItemText (nItem,1,dlg.m_sTeacher );
		m_cCourseListCtrl.SetItemText (nItem,2,dlg.m_sCourseTime );
		m_cCourseListCtrl.SetItemText (nItem,3,dlg.m_sPlace );
		s.Format (L"%d",dlg.m_iCredit);
		m_cCourseListCtrl.SetItemText (nItem,4,s );
		s.Format (L"%d",dlg.m_iTerm+1 );
		m_cCourseListCtrl.SetItemText (nItem,5,s);
		m_cCourseListCtrl.SetItemText (nItem,6,dlg.m_sKind );
		m_cCourseListCtrl.SetItemText (nItem,7,dlg.m_sExamTime );
		m_cCourseListCtrl.SetItemText (nItem,8,dlg.m_sRemark );	
	    s.Format (L"%d",m_iStudyCourse_Id);
		m_cCourseListCtrl.SetItemText (nItem,9,s);
	}
}
void CStudyTimetableDlg::OnBnClickedStudyCourseUpdateBt()
{
	// TODO: 在此添加控件通知处理程序代码
	Update();
}

void CStudyTimetableDlg::Search ()
{
	CString s;
	int i=0;
	CStudyCourseSearchDlg dlg;
	if(dlg.DoModal ()==IDOK)
	{
		m_cCourseListCtrl.DeleteAllItems ();
		if(m_pSet.IsOpen ())
			m_pSet.Close ();
		CString str;
		str="Select * from Course where ";
		switch(dlg.m_iItem)
		{
		case 0: str+="cName";break;
		case 1: str+="cTeacherName";break;
		case 2: str+="cTime";break;
		case 3: str+="cPlace";break;
		case 4: str+="cExamTime";break;
		case 5: str+="cKind";break;
		}
		str+=" Like '%";
		str+=dlg.m_sKeyWord ;
		str+="%' order by cTerm";
	    m_pSet.Open (AFX_DB_USE_DEFAULT_TYPE,str);
		m_pSet.m_strFilter .Empty ();
		m_pSet.Requery ();
		if(m_pSet.IsEOF ())
		{
	       m_iCourseAmount=i;
	       CString s;
	       s.Format (L"%d",m_iCourseAmount);
	       SetDlgItemText(IDC_COURSEAMOUNT_STATIC,s);//显示
			MessageBox(L"\n不存在这样的记录!\n",L"提示",MB_ICONEXCLAMATION);
			m_pSet.Close ();
			return ;

⌨️ 快捷键说明

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