📄 studytimetabledlg.cpp
字号:
// 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 + -