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

📄 dlgclassedit.cpp

📁 一个驾校学员的数据库管理软件。采用ACCESS数据库。非常方便。
💻 CPP
字号:
// DlgClassEdit.cpp : implementation file
//

#include "stdafx.h"
#include "AutoStuMis.h"
#include "DlgClassEdit.h"
#include "DlgSelectStudent.h"
#include "AutoStuMisDoc.h"
#include "DlgStudentInfor.h"
#include "RstClass.h"
#include "RstClassList.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDlgClassEdit dialog


CDlgClassEdit::CDlgClassEdit(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgClassEdit::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlgClassEdit)
	m_tmDate = CTime::GetCurrentTime();
	m_sAutoNo = _T("");
	m_sTeacher = _T("");
	m_sRemark = _T("");
	//}}AFX_DATA_INIT
	m_nOldID = 0;
}


void CDlgClassEdit::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgClassEdit)
	DDX_Control(pDX, IDC_BUTTON_MODIFYSTUDENT, m_btnModify);
	DDX_Control(pDX, IDCANCEL, m_btnCancel);
	DDX_Control(pDX, ID_BUTTON_SAVE, m_btnSave);
	DDX_Control(pDX, IDC_LIST1, m_list);
	DDX_Control(pDX, IDC_COMBO1, m_cbxNoon);
	DDX_Control(pDX, IDC_BUTTON_REMOVESTUDENT, m_btnRemoveStudent);
	DDX_Control(pDX, IDC_BUTTON_ADDSTUDENT, m_btnAddStudent);
	DDX_DateTimeCtrl(pDX, IDC_DATETIMEPICKER1, m_tmDate);
	DDX_Text(pDX, IDC_EDIT_AUTONO, m_sAutoNo);
	DDX_Text(pDX, IDC_EDIT_TEACHER, m_sTeacher);
	DDX_Text(pDX, IDC_EDIT_REMARK, m_sRemark);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgClassEdit, CDialog)
	//{{AFX_MSG_MAP(CDlgClassEdit)
	ON_BN_CLICKED(IDC_BUTTON_ADDSTUDENT, OnButtonAddstudent)
	ON_BN_CLICKED(IDC_BUTTON_REMOVESTUDENT, OnButtonRemovestudent)
	ON_BN_CLICKED(IDC_BUTTON_MODIFYSTUDENT, OnButtonModifystudent)
	ON_BN_CLICKED(ID_BUTTON_SAVE, OnButtonSave)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgClassEdit message handlers

BOOL CDlgClassEdit::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	LONG lStyle;
	lStyle=GetWindowLong(m_list.GetSafeHwnd(),GWL_STYLE);//获取当前窗口类型
	lStyle&=~LVS_TYPEMASK; //清除显示方式位
	lStyle|=LVS_REPORT; //设置显示方式
	SetWindowLong(m_list.GetSafeHwnd(),GWL_STYLE,lStyle);//设置窗口类型
	m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT);

	if(m_cbxNoon.GetCount()>0)
		m_cbxNoon.SetCurSel(0);

	CListCtrl *pListCtrl = &m_list;
	pListCtrl->DeleteAllItems();
	while(pListCtrl->DeleteColumn(0)){}
	pListCtrl->InsertColumn(0,"姓名",LVCFMT_LEFT,50,-1);
	pListCtrl->InsertColumn(1,"性别",LVCFMT_LEFT,40,-1);
	pListCtrl->InsertColumn(2,"电话",LVCFMT_LEFT,90,-1);
	pListCtrl->InsertColumn(3,"上车时间",LVCFMT_LEFT,70,-1);
	pListCtrl->InsertColumn(4,"场考时间",LVCFMT_LEFT,70,-1);
	pListCtrl->InsertColumn(5,"路考时间",LVCFMT_LEFT,70,-1);
	pListCtrl->InsertColumn(6,"考试类型",LVCFMT_LEFT,70,-1);
	pListCtrl->InsertColumn(7,"发证日期",LVCFMT_LEFT,70,-1);

	CRstClass rsBill;
	CRstClassList rsSub;
	CStudent *pStu;
	CAutoStuMisApp *pApp=(CAutoStuMisApp*)AfxGetApp();
	if(m_nOldID>0)
	{//读取老的记录
		rsBill.m_strFilter.Format("F_ID=%d",m_nOldID);
		rsBill.Open();
		if(rsBill.GetRecordCount()>0)
		{
			this->m_sAutoNo = rsBill.m_F_AutoNo;
			this->m_sRemark = rsBill.m_F_Remark;
			this->m_sTeacher = rsBill.m_F_Teacher;
			this->m_tmDate = rsBill.m_F_Date;
		}
		rsBill.Close();
		rsSub.m_strFilter.Format("F_ClassID=%d",m_nOldID);
		rsSub.Open();
		while(!rsSub.IsEOF())
		{
			pStu = (CStudent*)pApp->m_pDoc->GetItemByID(&pApp->m_pDoc->m_arrStudent,rsSub.m_F_StudentID);
			if(pStu)
			{
				pStu->m_nExamTypeID = rsSub.m_F_ExamTypeID;
				pStu->m_tmEnd = rsSub.m_F_DateEnd;
				pStu->m_tmExamField = rsSub.m_F_DateField;
				pStu->m_tmExamRoad = rsSub.m_F_DateRoad;
				pStu->m_tmUpAuto = rsSub.m_F_DateUpAuto;
				
				m_arrStudent.Add(pStu);
			}
			rsSub.MoveNext();
		}
		rsSub.Close();
		FillStudents();
		UpdateData(false);
	}
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CDlgClassEdit::OnButtonAddstudent() 
{
	// TODO: Add your control notification handler code here
	CDlgSelectStudent dlg;
	CStudent *pStu=dlg.SelectStudent();
	if(pStu)
	{
		if(GetStudentByID(pStu->m_F_ID)==NULL)
		{
			m_arrStudent.Add(pStu);
		}
		FillStudents();
	}
}

CStudent* CDlgClassEdit::GetStudentByID(long nID)
{
	for(int i=0;i<m_arrStudent.GetSize();i++)
	{
		if(m_arrStudent[i]->m_F_ID == nID)
			return m_arrStudent[i];
	}
	return NULL;
}

int CDlgClassEdit::FillStudents()
{
	CListCtrl *pListCtrl = &m_list;
	pListCtrl->DeleteAllItems();
	
	LV_ITEM lvitem;
	CStudent *pStu;
	CItem *pItem;
	CAutoStuMisApp *pApp=(CAutoStuMisApp*)AfxGetApp();
	CString sTmp;
	int i=0,iPos=0;
	for(i = 0;i<m_arrStudent.GetSize();i++)
	{
		lvitem.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;
		lvitem.iItem = pListCtrl->GetItemCount();
		lvitem.iSubItem = 0;
		sTmp.Format("%d",pListCtrl->GetItemCount()+1);
		lvitem.pszText = sTmp.GetBuffer(MAX_PATH) ;
		lvitem.iImage = 0;
		pStu = m_arrStudent.GetAt(i);
		if(pStu)
		{
			////0,"姓名/性别/电话/上车时间/场考时间/路考时间/考试类型/发证日期
			iPos = pListCtrl->InsertItem(&lvitem);
			pListCtrl->SetItemText(iPos,0,pStu->m_F_ItemName);
			pListCtrl->SetItemText(iPos,1,pStu->m_F_Sex);
			pListCtrl->SetItemText(iPos,2,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,3,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,4,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,5,sTmp);
			}
			pItem = pApp->m_pDoc->GetItemByID(&pApp->m_pDoc->m_arrExamType,pStu->m_nExamTypeID);
			if(pItem)
				pListCtrl->SetItemText(iPos,6,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,7,sTmp);
			}
			pListCtrl->SetItemData(iPos,pStu->m_F_ID);
		}
	}
	return pListCtrl->GetItemCount();
}

void CDlgClassEdit::OnButtonRemovestudent() 
{
	// TODO: Add your control notification handler code here
	long ID = 0;
	int i,iState;
	int nItemSelected=m_list.GetSelectedCount();//所选表项数
	int nItemCount=m_list.GetItemCount();//表项总数
	if(nItemSelected<1) return;
	CAutoStuMisApp *pApp=(CAutoStuMisApp*)AfxGetApp();
	CStudent *pStu;
	for(i=nItemCount-1;i>=0;i--)
	{
		iState=m_list.GetItemState(i,LVIS_SELECTED);
		if(iState!=0) 
		{
			ID=m_list.GetItemData(i);
			pStu = GetStudentByID(ID);
			if(pStu)
			{
				if(MessageBox("你确实要移除该学员吗?","重要提示",MB_ICONQUESTION | MB_YESNO ) == IDNO)
					return;
				RemoveStudentByID(ID);
				FillStudents();
			}
		}
	}
}

void CDlgClassEdit::RemoveStudentByID(long ID)
{
	for(int i=0;i<m_arrStudent.GetSize();i++)
	{
		if(m_arrStudent[i]->m_F_ID == ID)
		{
			m_arrStudent.RemoveAt(i); 
			return;
		}
	}
}

void CDlgClassEdit::OnButtonModifystudent() 
{
	// TODO: Add your control notification handler code here
	CDlgStudentInfor dlg;
	long ID = 0;
	int i,iState;
	int nItemSelected=m_list.GetSelectedCount();//所选表项数
	int nItemCount=m_list.GetItemCount();//表项总数
	if(nItemSelected<1) return;
	CAutoStuMisApp *pApp=(CAutoStuMisApp*)AfxGetApp();
	CStudent *pStu;
	for(i=nItemCount-1;i>=0;i--)
	{
		iState=m_list.GetItemState(i,LVIS_SELECTED);
		if(iState!=0) 
		{
			ID=m_list.GetItemData(i);
			pStu = GetStudentByID(ID);
			if(pStu)
			{
				dlg.m_pStu = pStu;
				if(dlg.DoModal()==IDOK)
					FillStudents();
			}
		}
	}
}

void CDlgClassEdit::OnOK() 
{
	// TODO: Add extra validation here
	CWnd *pWnd;
	if(GetFocus()==&m_btnSave)
		OnButtonSave();
	else if(GetFocus()==&m_btnCancel)
		OnCancel();
	else if(GetFocus()==&m_btnAddStudent)
		OnButtonAddstudent();
	else if(GetFocus()==&m_btnRemoveStudent)
		OnButtonRemovestudent();
	else if(GetFocus()==&m_btnModify)
		OnButtonModifystudent();
	else
	{
		pWnd = this->GetNextDlgTabItem(GetFocus());
		if(pWnd)
			pWnd->SetFocus();
	}

	//CDialog::OnOK();
}

void CDlgClassEdit::OnButtonSave() 
{
	// TODO: Add your control notification handler code here
	if(MessageBox("你确实要保存该班次吗?","重要提示",MB_ICONQUESTION | MB_YESNO ) == IDNO)
		return;
	UpdateData();
	CAutoStuMisApp *pApp=(CAutoStuMisApp*)AfxGetApp();
	BOOL bTrans = false;
	CRstClass rsBill;
	CRstClassList rsSub;
	CString sql;
	CStudent *pStu;
	try
	{
		pApp->m_db.BeginTrans();
		bTrans = true;
		{
			if(m_nOldID<=0)
				m_nOldID = pApp->GetCurMaxKeyID("T_Class",true);
			rsBill.m_strFilter.Format("F_ID=%d",m_nOldID);
			rsBill.Open();
			if(rsBill.GetRecordCount()>0)
				rsBill.Edit();
			else
				rsBill.AddNew();
			rsBill.m_F_AutoNo = this->m_sAutoNo;
			rsBill.m_F_Date = this->m_tmDate;
			rsBill.m_F_ID = m_nOldID;
			rsBill.m_F_Noon = (int)m_cbxNoon.GetItemData(m_cbxNoon.GetCurSel());
			rsBill.m_F_Remark = this->m_sRemark;
			rsBill.m_F_Teacher = this->m_sTeacher;
			rsBill.Update();
			rsBill.Close();
			sql.Format("Delete From T_ClassList Where F_ClassID=%d",m_nOldID);
			pApp->m_db.ExecuteSQL(sql);
			rsSub.m_strFilter.Format("F_ClassID = %d",m_nOldID);
			rsSub.Open();
			//保存明细记录
			for(int i=0;i<m_arrStudent.GetSize();i++)
			{
				pStu = m_arrStudent[i];
				rsSub.AddNew();
				rsSub.m_F_ClassID = m_nOldID;
				rsSub.m_F_DateEnd = pStu->m_tmEnd;
				rsSub.m_F_DateField = pStu->m_tmExamField;
				rsSub.m_F_DateRoad = pStu->m_tmExamRoad;
				rsSub.m_F_DateUpAuto = pStu->m_tmUpAuto;
				rsSub.m_F_ExamTypeID = pStu->m_nExamTypeID;
				rsSub.m_F_ID = pApp->GetCurMaxKeyID("T_ClassList",true);
				rsSub.m_F_StudentID = pStu->m_F_ID;
				rsSub.Update();
			}
			rsSub.Close();
		}
		pApp->m_db.CommitTrans();
		bTrans = false;
	}
	catch(CException e)
	{
		if(bTrans)
			pApp->m_db.Rollback();
		e.ReportError();
		e.Delete();
	}
	m_sAutoNo = _T("");
	m_sTeacher = _T("");
	m_sRemark = _T("");
	m_nOldID = 0;
	m_arrStudent.RemoveAll();
	FillStudents();
	UpdateData(false);
}

⌨️ 快捷键说明

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