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

📄 page2.cpp

📁 这是基于VC的考勤管理系统
💻 CPP
字号:
// Page2.cpp : implementation file
//

#include "stdafx.h"
#include "attendance.h"
#include "Page2.h"
#include "PersonRS.h"
#include "CounterRS.h"
#include "AttDlg.h"

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

extern CDatabase db;
/////////////////////////////////////////////////////////////////////////////
// CPage2 dialog


CPage2::CPage2(CWnd* pParent /*=NULL*/)
	: CDialog(CPage2::IDD, pParent)
{
	//{{AFX_DATA_INIT(CPage2)
	m_Date = CTime::GetCurrentTime();
	m_nHour = 0;
	m_strPersonID = _T("");
	m_strPersonName = _T("");
	//}}AFX_DATA_INIT
}


void CPage2::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPage2)
	DDX_Control(pDX, IDC_LIST2, m_cList);
	DDX_DateTimeCtrl(pDX, IDC_OVERTIME_DATETIMEPICKER, m_Date);
	DDX_Text(pDX, IDC_EDT_OVERTIME_HOUR, m_nHour);
	DDX_Text(pDX, IDC_EDT_OVERTIME_PERSONID, m_strPersonID);
	DDX_Text(pDX, IDC_EDT_OVERTIME_PERSONNAME, m_strPersonName);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CPage2, CDialog)
	//{{AFX_MSG_MAP(CPage2)
	ON_BN_CLICKED(IDC_BTN_OVERTIME_DELETEATTEND, OnBtnOvertimeDeleteattend)
	ON_BN_CLICKED(IDC_BTN_OVERTIME_ADD, OnBtnOvertimeAdd)
	ON_EN_CHANGE(IDC_EDT_OVERTIME_PERSONID, OnChangeEdtOvertimePersonid)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPage2 message handlers

BOOL CPage2::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// 为List添加网格
	m_cList.SetExtendedStyle(LVS_EX_GRIDLINES);
    m_cList.SetExtendedStyle(LVS_EX_FULLROWSELECT);
	// 设置List的列
	int nWidth=110;
	m_cList.InsertColumn(0, "记录编号", LVCFMT_LEFT, nWidth);
	m_cList.InsertColumn(1, "员工号", LVCFMT_LEFT, nWidth);
	m_cList.InsertColumn(2, "加班时间", LVCFMT_LEFT, nWidth);
	m_cList.InsertColumn(3, "加班日期", LVCFMT_LEFT, nWidth);
	COvertimeRS rs(&db); // 构造加班记录表
	UpdateList(rs); // 更新List		
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CPage2::UpdateList(COvertimeRS &rs)
{
	int i=0;
	CString strID,strWorkHours,strTime;
	rs.Open(); // 打开加班记录表
	m_cList.DeleteAllItems(); // 清除列表框内容
	while(!rs.IsEOF()) // 对数据表中所有记录进行处理
	{
		m_cList.InsertItem(i, ""); // 添加新Item
		strID.Format("%d", rs.m_ID); // 转换为字符串
		m_cList.SetItemText(i, 0, strID);
		m_cList.SetItemText(i, 1, rs.m_PERSON);
		strWorkHours.Format("%d",rs.m_WORK_HOURS);
		m_cList.SetItemText(i, 2, strWorkHours);
		m_cList.SetItemText(i, 3, rs.m_WORK_DATE.Format("%Y-%m-%d"));
		rs.MoveNext(); // 跳到下一条记录
		i++;
	}
	rs.Close(); // 关闭加班记录表
}

void CPage2::OnBtnOvertimeDeleteattend() 
{
	CString strSQL;
	int nItem;
	// 得到第一个被选择Item的位置
	POSITION pos = m_cList.GetFirstSelectedItemPosition();
	if(pos==NULL)
	{
		AfxMessageBox("没有选择记录!");
		return;
	}
	while(pos) // 遍历所有被选Item
	{
		nItem=m_cList.GetNextSelectedItem(pos); // 得到Item Index
		// 构造SQL语句
		strSQL="delete from OVERTIME where ID=" + m_cList.GetItemText(nItem, 0);
		db.ExecuteSQL(strSQL); // 执行
	}
	COvertimeRS rs(&db); // 构造加班记录表
	UpdateList(rs); // 更新列表框	
}





void CPage2::OnBtnOvertimeAdd() 
{
	int counter; // 用于保存计数
	CCounterRS rs_counter(&db); // 构造计数器记录表

	UpdateData(); // 更新数据
	if(m_strPersonName.IsEmpty()) return; // 判断员工号是否正确
// 记录编号
	rs_counter.m_strFilter = "ID='O'"; // 设置过滤器,提取计数值
	rs_counter.Open(); // 打开计数器记录表
	counter=rs_counter.m_COUNTER_VALUE; // 提取计数值
	counter++; // 计数值加1
	rs_counter.Edit(); // 编辑计数器
	rs_counter.m_COUNTER_VALUE=counter; // 保存当前计数
	rs_counter.Update(); // 提交修改
	rs_counter.Close(); // 关闭计数器记录表
// 添加记录
	COvertimeRS rs_overtime(&db); // 构造加班记录表
	rs_overtime.Open(); // 打开表
	rs_overtime.AddNew(); // 新增一项记录
	// 设置字段值
	rs_overtime.m_ID=counter;
	rs_overtime.m_PERSON=m_strPersonID;
	rs_overtime.m_WORK_HOURS=m_nHour;
	rs_overtime.m_WORK_DATE=m_Date;
	rs_overtime.Update(); // 更新数据库
	rs_overtime.Close(); // 关闭加班记录表
	UpdateList(rs_overtime); // 更新列表框	
}

void CPage2::OnChangeEdtOvertimePersonid() 
{
	UpdateData(); // 更新数据

	CPersonRS rs(&db); // 构造PERSON记录表
	rs.m_strFilter = "ID='" + m_strPersonID + "'"; // 设置过滤条件
	rs.Open(); // 打开记录表
	if(rs.GetRecordCount()==1) // 判断员工号是否正确
	{
		m_strPersonName=rs.m_NAME; // 提取员工姓名
	}
	else m_strPersonName.Empty(); // 清除员工姓名显示
	rs.Close(); // 关闭记录表
	UpdateData(FALSE); // 更新界面数据	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	
}

⌨️ 快捷键说明

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