www.pudn.com > ODBC.rar > AutoStuMisView.cpp
// AutoStuMisView.cpp : implementation of the CAutoStuMisView class
//
#include "stdafx.h"
#include "AutoStuMis.h"
#include "AutoStuMisDoc.h"
#include "AutoStuMisView.h"
#include "DlgStudentEdit.h"
#include "DlgClassEdit.h"
#include "DlgFilterClass.h"
#include "DlgFindStudent.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAutoStuMisView
IMPLEMENT_DYNCREATE(CAutoStuMisView, CListView)
BEGIN_MESSAGE_MAP(CAutoStuMisView, CListView)
//{{AFX_MSG_MAP(CAutoStuMisView)
ON_COMMAND(ID_DATA_STUDENT, OnDataStudent)
ON_COMMAND(ID_VIEW_REFRESH, OnViewRefresh)
ON_UPDATE_COMMAND_UI(ID_DATA_STUDENT, OnUpdateDataStudent)
ON_COMMAND(ID_DATA_CLASS, OnDataClass)
ON_UPDATE_COMMAND_UI(ID_DATA_CLASS, OnUpdateDataClass)
ON_COMMAND(ID_EDIT_ADDNEW, OnEditAddnew)
ON_COMMAND(ID_EDIT_MODIFY, OnEditModify)
ON_COMMAND(ID_EDIT_DELETE, OnEditDelete)
ON_COMMAND(ID_EDIT_SEARCH, OnEditSearch)
ON_COMMAND(ID_VIEW_CLEARDATA, OnViewCleardata)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CListView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CListView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CListView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAutoStuMisView construction/destruction
CAutoStuMisView::CAutoStuMisView()
{
// TODO: add construction code here
}
CAutoStuMisView::~CAutoStuMisView()
{
}
BOOL CAutoStuMisView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CListView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CAutoStuMisView drawing
void CAutoStuMisView::OnDraw(CDC* pDC)
{
CAutoStuMisDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
void CAutoStuMisView::OnInitialUpdate()
{
CListView::OnInitialUpdate();
// TODO: You may populate your ListView with items by directly accessing
// its list control through a call to GetListCtrl().
LONG lStyle;
lStyle=GetWindowLong(this->GetListCtrl().GetSafeHwnd(),GWL_STYLE);//获取当前窗口类型
lStyle&=~LVS_TYPEMASK; //清除显示方式位
lStyle|=LVS_REPORT; //设置显示方式
SetWindowLong(this->GetListCtrl().GetSafeHwnd(),GWL_STYLE,lStyle);//设置窗口类型
this->GetListCtrl().SetExtendedStyle(LVS_EX_FULLROWSELECT);
OnDataStudent();
}
/////////////////////////////////////////////////////////////////////////////
// CAutoStuMisView printing
BOOL CAutoStuMisView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CAutoStuMisView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CAutoStuMisView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CAutoStuMisView diagnostics
#ifdef _DEBUG
void CAutoStuMisView::AssertValid() const
{
CListView::AssertValid();
}
void CAutoStuMisView::Dump(CDumpContext& dc) const
{
CListView::Dump(dc);
}
CAutoStuMisDoc* CAutoStuMisView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CAutoStuMisDoc)));
return (CAutoStuMisDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CAutoStuMisView message handlers
void CAutoStuMisView::OnDataStudent()
{
// TODO: Add your command handler code here
m_nDataType = dtStudent;
OnViewRefresh();
}
void CAutoStuMisView::OnViewRefresh()
{
// TODO: Add your command handler code here
CListCtrl *pListCtrl;
pListCtrl = &this->GetListCtrl();
pListCtrl->DeleteAllItems();
while(pListCtrl->DeleteColumn(0)){}
//LV_ITEM lvitem;
CStudent *pStu;
CItem *pItem;
CString sTmp;
CClass *pClass;
int i=0,iPos=0,j=0;
CAutoStuMisDoc *pDoc=this->GetDocument();
switch(m_nDataType)
{
case dtStudent:
pDoc->FillStudentsToListctrl(pListCtrl,_T(""),_T(""));
break;
case dtClass:
pListCtrl->InsertColumn(0,"*",LVCFMT_LEFT,30,-1);
pListCtrl->InsertColumn(1,"日期",LVCFMT_LEFT,80,-1);
pListCtrl->InsertColumn(2,"时间",LVCFMT_LEFT,40,-1);
pListCtrl->InsertColumn(3,"车号",LVCFMT_LEFT,80,-1);
pListCtrl->InsertColumn(4,"教练",LVCFMT_LEFT,50,-1);
pListCtrl->InsertColumn(5,"姓名",LVCFMT_LEFT,50,-1);
pListCtrl->InsertColumn(6,"性别",LVCFMT_LEFT,40,-1);
pListCtrl->InsertColumn(7,"身份证",LVCFMT_LEFT,100,-1);
pListCtrl->InsertColumn(8,"联系地址",LVCFMT_LEFT,110,-1);
pListCtrl->InsertColumn(9,"电话",LVCFMT_LEFT,80,-1);
pListCtrl->InsertColumn(10,"上车时间",LVCFMT_LEFT,70,-1);
pListCtrl->InsertColumn(11,"场考时间",LVCFMT_LEFT,70,-1);
pListCtrl->InsertColumn(12,"路考时间",LVCFMT_LEFT,70,-1);
pListCtrl->InsertColumn(13,"考试类型",LVCFMT_LEFT,70,-1);
pListCtrl->InsertColumn(14,"发证日期",LVCFMT_LEFT,70,-1);
if(pDoc->ReadClasss(0,0,_T(""),_T(""))<=0)
return;
for(i=0;im_arrClass.GetSize();i++)
{ pClass = pDoc->m_arrClass[i];
for(j=0;jm_arrStudent.GetSize();j++)
{
pStu = pClass->m_arrStudent[j];
sTmp.Format("%d",pListCtrl->GetItemCount()+1);
iPos = pListCtrl->InsertItem(pListCtrl->GetItemCount(),sTmp,0);
sTmp.Format("%d-%d-%d",pClass->m_F_Date.GetYear(),pClass->m_F_Date.GetMonth(),pClass->m_F_Date.GetDay());
pListCtrl->SetItemText(iPos,1,sTmp);
if(pClass->m_F_NoonID==0)
sTmp = "上午";
else
sTmp = "下午";
pListCtrl->SetItemText(iPos,2,sTmp);
pListCtrl->SetItemText(iPos,3,pClass->m_F_AutoNo);
pListCtrl->SetItemText(iPos,4,pClass->m_F_Teacher);
pListCtrl->SetItemText(iPos,5,pStu->m_F_ItemName);
pListCtrl->SetItemText(iPos,6,pStu->m_F_Sex);
pListCtrl->SetItemText(iPos,7,pStu->m_F_SN);
pListCtrl->SetItemText(iPos,8,pStu->m_F_Address);
pListCtrl->SetItemText(iPos,9,pStu->m_F_Tel);
//*/日期/时间/车号/教练/姓名/性别/身份证/联系地址/电话/上车时间
//场考时间/路考时间/考试类型/发证日期
if(pStu->m_tmUpAuto>0)
{
sTmp.Format("%d-%d-%d",pStu->m_tmUpAuto.GetYear(),pStu->m_tmUpAuto.GetMonth(),pStu->m_tmUpAuto.GetDay());
pListCtrl->SetItemText(iPos,10,sTmp);
}
if(pStu->m_tmExamField>0)
{
sTmp.Format("%d-%d-%d",pStu->m_tmExamField.GetYear(),pStu->m_tmExamField.GetMonth(),pStu->m_tmExamField.GetDay());
pListCtrl->SetItemText(iPos,11,sTmp);
}
if(pStu->m_tmExamRoad>0)
{
sTmp.Format("%d-%d-%d",pStu->m_tmExamRoad.GetYear(),pStu->m_tmExamRoad.GetMonth(),pStu->m_tmExamRoad.GetDay());
pListCtrl->SetItemText(iPos,12,sTmp);
}
pItem = pDoc->GetItemByID(&pDoc->m_arrExamType,pStu->m_nExamTypeID);
if(pItem)
pListCtrl->SetItemText(iPos,13,pItem->m_F_ItemName);
if(pStu->m_tmEnd>0)
{
sTmp.Format("%d-%d-%d",pStu->m_tmEnd.GetYear(),pStu->m_tmEnd.GetMonth(),pStu->m_tmEnd.GetDay());
pListCtrl->SetItemText(iPos,14,sTmp);
}
pListCtrl->SetItemData(iPos,pClass->m_F_ID);
}
}
break;
default:
break;
}
}
void CAutoStuMisView::OnUpdateDataStudent(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable();
pCmdUI->SetCheck(m_nDataType == dtStudent);
}
void CAutoStuMisView::OnDataClass()
{
// TODO: Add your command handler code here
m_nDataType = dtClass;
OnViewRefresh();
}
void CAutoStuMisView::OnUpdateDataClass(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable();
pCmdUI->SetCheck(m_nDataType == dtClass);
}
void CAutoStuMisView::OnEditAddnew()
{
// TODO: Add your command handler code here
CDlgStudentEdit dlg;
CDlgClassEdit dlg2;
switch(m_nDataType)
{
case dtStudent:
if(dlg.DoModal()==IDOK)
OnViewRefresh();
break;
case dtClass:
if(dlg2.DoModal()==IDOK)
OnViewRefresh();
break;
}
}
void CAutoStuMisView::OnEditModify()
{
// TODO: Add your command handler code here
CDlgStudentEdit dlg;
CDlgClassEdit dlg2;
int i,iState,ID;
int nItemSelected = this->GetListCtrl().GetSelectedCount();//所选表项数
int nItemCount = this->GetListCtrl().GetItemCount();//表项总数
for(i=0;i<=nItemCount;i++)
{
iState=this->GetListCtrl().GetItemState(i,LVIS_SELECTED);
if(iState!=0)
{
ID = this->GetListCtrl().GetItemData(i);
switch(this->m_nDataType)
{
case dtStudent:
dlg.m_nOldID = ID;
if(dlg.DoModal()==IDOK)
OnViewRefresh();
break;
case dtClass:
dlg2.m_nOldID = ID;
if(dlg2.DoModal()==IDOK)
OnViewRefresh();
break;
}
}
}
}
void CAutoStuMisView::OnEditDelete()
{
// TODO: Add your command handler code here
long ID = 0;
int i,iState;
int nItemSelected=this->GetListCtrl().GetSelectedCount();//所选表项数
int nItemCount=this->GetListCtrl().GetItemCount();//表项总数
if(nItemSelected<1) return;
if (IDYES!=MessageBox(_T("你确实要删除这些记录吗?"),_T("重要提示"),MB_YESNO|MB_ICONQUESTION))
return;
for(i=nItemCount-1;i>=0;i--)
{
iState=this->GetListCtrl().GetItemState(i,LVIS_SELECTED);
if(iState!=0)
{
ID=this->GetListCtrl().GetItemData(i);
if(KillItemByID(ID))
this->GetListCtrl().DeleteItem(i);
}
}
}
BOOL CAutoStuMisView::KillItemByID(int ID)
{
CString sql;
CStudent *pStu=NULL;
CClass *pClass=NULL;
CAutoStuMisApp *pApp = (CAutoStuMisApp*)AfxGetApp();
int i=0;
switch(m_nDataType)
{
case dtStudent:
sql.Format("Delete From T_Student Where F_ID=%d",ID);
pApp->m_db.ExecuteSQL(sql);
for(i=0;im_pDoc->m_arrStudent.GetSize();i++)
{
pStu = pApp->m_pDoc->m_arrStudent.GetAt(i);
if(pStu)
{
if(pStu->m_F_ID == ID)
{
delete pStu;
pApp->m_pDoc->m_arrStudent.RemoveAt(i);
break;
}
}
}
return true;
break;
default:
sql.Format("Delete From T_Class Where F_ID = %d",ID);
pApp->m_db.ExecuteSQL(sql);
return true;
break;
}
return false;
}
void CAutoStuMisView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
// TODO: Add your specialized code here and/or call the base class
OnViewRefresh();
}
void CAutoStuMisView::OnEditSearch()
{
// TODO: Add your command handler code here
switch(m_nDataType)
{
case dtClass:
FilterClass();
break;
case dtStudent:
FindStudent();
break;
}
}
void CAutoStuMisView::FilterClass()
{
CDlgFilterClass dlg;
if(dlg.DoModal()==IDCANCEL)
return;
CListCtrl *pListCtrl;
pListCtrl = &this->GetListCtrl();
pListCtrl->DeleteAllItems();
while(pListCtrl->DeleteColumn(0)){}
//LV_ITEM lvitem;
CStudent *pStu;
CItem *pItem;
CString sTmp;
CClass *pClass;
int i=0,iPos=0,j=0;
CAutoStuMisDoc *pDoc=this->GetDocument();
pListCtrl->InsertColumn(0,"*",LVCFMT_LEFT,30,-1);
pListCtrl->InsertColumn(1,"日期",LVCFMT_LEFT,80,-1);
pListCtrl->InsertColumn(2,"时间",LVCFMT_LEFT,40,-1);
pListCtrl->InsertColumn(3,"车号",LVCFMT_LEFT,80,-1);
pListCtrl->InsertColumn(4,"教练",LVCFMT_LEFT,50,-1);
pListCtrl->InsertColumn(5,"姓名",LVCFMT_LEFT,50,-1);
pListCtrl->InsertColumn(6,"性别",LVCFMT_LEFT,40,-1);
pListCtrl->InsertColumn(7,"身份证",LVCFMT_LEFT,100,-1);
pListCtrl->InsertColumn(8,"联系地址",LVCFMT_LEFT,110,-1);
pListCtrl->InsertColumn(9,"电话",LVCFMT_LEFT,80,-1);
pListCtrl->InsertColumn(10,"上车时间",LVCFMT_LEFT,70,-1);
pListCtrl->InsertColumn(11,"场考时间",LVCFMT_LEFT,70,-1);
pListCtrl->InsertColumn(12,"路考时间",LVCFMT_LEFT,70,-1);
pListCtrl->InsertColumn(13,"考试类型",LVCFMT_LEFT,70,-1);
pListCtrl->InsertColumn(14,"发证日期",LVCFMT_LEFT,70,-1);
if(pDoc->ReadClasss(dlg.m_tmStart,dlg.m_tmEnd,dlg.m_sAutoNo,dlg.m_sTeacher)<=0)
return;
for(i=0;im_arrClass.GetSize();i++)
{ pClass = pDoc->m_arrClass[i];
for(j=0;jm_arrStudent.GetSize();j++)
{
pStu = pClass->m_arrStudent[j];
sTmp.Format("%d",pListCtrl->GetItemCount()+1);
iPos = pListCtrl->InsertItem(pListCtrl->GetItemCount(),sTmp,0);
sTmp.Format("%d-%d-%d",pClass->m_F_Date.GetYear(),pClass->m_F_Date.GetMonth(),pClass->m_F_Date.GetDay());
pListCtrl->SetItemText(iPos,1,sTmp);
if(pClass->m_F_NoonID==0)
sTmp = "上午";
else
sTmp = "下午";
pListCtrl->SetItemText(iPos,2,sTmp);
pListCtrl->SetItemText(iPos,3,pClass->m_F_AutoNo);
pListCtrl->SetItemText(iPos,4,pClass->m_F_Teacher);
pListCtrl->SetItemText(iPos,5,pStu->m_F_ItemName);
pListCtrl->SetItemText(iPos,6,pStu->m_F_Sex);
pListCtrl->SetItemText(iPos,7,pStu->m_F_SN);
pListCtrl->SetItemText(iPos,8,pStu->m_F_Address);
pListCtrl->SetItemText(iPos,9,pStu->m_F_Tel);
//*/日期/时间/车号/教练/姓名/性别/身份证/联系地址/电话/上车时间
//场考时间/路考时间/考试类型/发证日期
if(pStu->m_tmUpAuto>0)
{
sTmp.Format("%d-%d-%d",pStu->m_tmUpAuto.GetYear(),pStu->m_tmUpAuto.GetMonth(),pStu->m_tmUpAuto.GetDay());
pListCtrl->SetItemText(iPos,10,sTmp);
}
if(pStu->m_tmExamField>0)
{
sTmp.Format("%d-%d-%d",pStu->m_tmExamField.GetYear(),pStu->m_tmExamField.GetMonth(),pStu->m_tmExamField.GetDay());
pListCtrl->SetItemText(iPos,11,sTmp);
}
if(pStu->m_tmExamRoad>0)
{
sTmp.Format("%d-%d-%d",pStu->m_tmExamRoad.GetYear(),pStu->m_tmExamRoad.GetMonth(),pStu->m_tmExamRoad.GetDay());
pListCtrl->SetItemText(iPos,12,sTmp);
}
pItem = pDoc->GetItemByID(&pDoc->m_arrExamType,pStu->m_nExamTypeID);
if(pItem)
pListCtrl->SetItemText(iPos,13,pItem->m_F_ItemName);
if(pStu->m_tmEnd>0)
{
sTmp.Format("%d-%d-%d",pStu->m_tmEnd.GetYear(),pStu->m_tmEnd.GetMonth(),pStu->m_tmEnd.GetDay());
pListCtrl->SetItemText(iPos,14,sTmp);
}
pListCtrl->SetItemData(iPos,pClass->m_F_ID);
}
}
}
void CAutoStuMisView::FindStudent()
{
CDlgFindStudent dlg;
if(dlg.DoModal()==IDCANCEL)
return;
int i;
CListCtrl *pList=&this->GetListCtrl();
CString sName=_T("");
for(i=0;iGetItemCount();i++)
{
sName = pList->GetItemText(i,1);
if(sName.Find(dlg.m_sName,0)>=0)
{
pList->SetItemState(i,LVIS_SELECTED,LVIS_SELECTED);
}
else
pList->SetItemState(i,~LVIS_SELECTED,LVIS_SELECTED);
}
}
void CAutoStuMisView::OnViewCleardata()
{
// TODO: Add your command handler code here
if(MessageBox("你确实要清除所有数据吗?\n清除所有数据后,程序将会自动退出!","重要提示",MB_ICONQUESTION | MB_YESNO ) == IDNO)
return;
BOOL bTrans = false;
CAutoStuMisApp *pApp=(CAutoStuMisApp*)AfxGetApp();
CString sql;
try
{
pApp->m_db.BeginTrans();
bTrans = true;
{
//pApp->m_db.ExecuteSQL("Delete From T_Class");
//pApp->m_db.ExecuteSQL("Delete From T_Student");
TRACE("初始化数据\n");
}
pApp->m_db.CommitTrans();
bTrans = false;
}
catch(CException e)
{
if(bTrans)
pApp->m_db.Rollback();
e.ReportError();
}
pApp->GetMainWnd()->SendMessage(WM_CLOSE);
}