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

📄 noticemangedlg.cpp

📁 学校社团管理系统Visual C
💻 CPP
字号:
/**
 * <p> Title: 活动通知管理功能的窗口类实现 </p>
 * <p> Description:提供对通知的增删改查等功能 </p>
 * <p> Copyright: Copyright (c) 2005-12-17 </p>
 * <p> Company: bjut </p>
 * @author gaok
 * @version 1.0 
 * @Created on 2005-12-17
 */
#include "stdafx.h"
#include "STMis.h"
#include "NoticeMangeDlg.h"
#include "NoticeInfoDlg.h"
#include "AddNoticeRSet.h"
#include "AddStMsgRSet.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CNoticeMangeDlg dialog

/*
 * 构造函数
 */
CNoticeMangeDlg::CNoticeMangeDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CNoticeMangeDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CNoticeMangeDlg)
	m_strST = _T(""); // 所选社团
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CNoticeMangeDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CNoticeMangeDlg)
	DDX_Control(pDX, IDC_LIST2, m_ctrList);
	DDX_Control(pDX, IDC_COMBO_INWHICHST, m_ctrST);
	DDX_CBString(pDX, IDC_COMBO_INWHICHST, m_strST);
	DDX_Control(pDX, IDC_BUTTON_NEW, m_bntNew);
	DDX_Control(pDX, IDC_Modify, m_bntModify);
	DDX_Control(pDX, IDC_Delete, m_bntDelete);
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CNoticeMangeDlg, CDialog)
	//{{AFX_MSG_MAP(CNoticeMangeDlg)
	ON_BN_CLICKED(IDC_BUTTON_NEW, OnButtonNew)
	ON_BN_CLICKED(IDC_Search, OnButtonSearch)
	ON_BN_CLICKED(IDC_Detail, OnButtonBrowse)
	ON_NOTIFY(NM_DBLCLK, IDC_LIST2, OnDblclkList2)
	ON_BN_CLICKED(IDC_Modify, OnButtonModify)
	ON_BN_CLICKED(IDC_Delete, OnButtonDelete)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CNoticeMangeDlg message handlers
/*
 * 初始化“所在社团”下拉选项和活动列表
 */
BOOL CNoticeMangeDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	CString strSQL;
	UpdateData(TRUE); // 读入用户输入的信息
	if (!m_bIsAdmin) { // 如果是普通用户,屏蔽增加,修改,删除按钮,只允许查询,察看
		m_bntNew.EnableWindow(FALSE);
	    m_bntDelete.EnableWindow(FALSE);
	    m_bntModify.EnableWindow(FALSE);
	}
	CAddStMsgRSet m_recordset(&m_database); // 连接数据库
	strSQL.Format("select * from ST where ST_SCBZ=false");
	if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) { // 查询数据库
		MessageBox("打开数据库失败!","数据库错误",MB_OK);
	}	
	while(!m_recordset.IsEOF()) { // 将数据库中ST表中的社团名称加到“所在社团”的下拉选项中
		m_ctrST.AddString(m_recordset.m_ST_ZZMC);
		m_recordset.MoveNext(); // 移到下一条记录
	}
	m_database.Close(); // 关掉数据库

	// 设置活动信息列表的表项
	m_ctrList.InsertColumn(0,"所在社团");
	m_ctrList.InsertColumn(1,"活动地点");
	m_ctrList.InsertColumn(2,"活动日期");
	m_ctrList.InsertColumn(3,"开始时间");
	m_ctrList.InsertColumn(4,"结束时间");
	m_ctrList.InsertColumn(5,"活动内容");
    m_ctrList.InsertColumn(6,""); // 活动内码,主键,暗传方式
	m_ctrList.SetColumnWidth(0,100);
	m_ctrList.SetColumnWidth(1,100);
	m_ctrList.SetColumnWidth(2,100);
	m_ctrList.SetColumnWidth(3,100);
	m_ctrList.SetColumnWidth(4,100);
	m_ctrList.SetColumnWidth(5,200);
	m_ctrList.SetColumnWidth(6,0);
	m_ctrList.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); // 设置列表	
	UpdateData(FALSE);	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}
/*
 * 执行某操作(修改,删除,查询)后刷新活动列表的记录
 * @param strSQL SQL文
 */
void CNoticeMangeDlg::RefreshData(CString strSQL)
{
	m_ctrList.DeleteAllItems(); // 将活动列表的记录清空
	m_ctrList.SetRedraw(FALSE);
	UpdateData(TRUE); // 读入用户输入的信息
    CAddNoticeRSet m_recordSet(&m_database); // 连接数据库
	if(!m_recordSet.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) {
		MessageBox("打开数据库失败!","数据库错误",MB_OK);
		return ;
	}	
	int i=0;
	while(!m_recordSet.IsEOF()) { // 将记录显示在活动列表中
		m_ctrList.InsertItem(i,m_recordSet.m_HD_ZZMC); // 所在社团
		m_ctrList.SetItemText(i,1,m_recordSet.m_HD_HDDD); // 活动地点
		CTime tmTemp = m_recordSet.m_HD_HDRQ; // 获得活动日期
		CString strTemp=tmTemp.Format("%Y-%m-%d"); // 格式成:YYYY-MM-DD的格式
		m_ctrList.SetItemText(i,2,strTemp); // 开始时间
		tmTemp = m_recordSet.m_HD_HDKSSJ; // 获得开始时间
		strTemp=tmTemp.Format("%H:%M:%S"); // 格式成:hh:mm:ss的格式			
		m_ctrList.SetItemText(i,3,strTemp); // 开始时间
		tmTemp = m_recordSet.m_HD_HDJSSJ; // 获得开始时间
		strTemp=tmTemp.Format("%H:%M:%S"); // 格式成:hh:mm:ss的格式
		m_ctrList.SetItemText(i,4,strTemp); // 结束时间
		m_ctrList.SetItemText(i,5,m_recordSet.m_HD_HDNR); // 活动内容
		m_ctrList.SetItemText(i,6,m_recordSet.m_HD_NM); // 主键
		i++;
		m_recordSet.MoveNext();
	}
	m_database.Close(); // 关掉数据库
	m_ctrList.SetRedraw(TRUE);
}
/*
* 刷新社团名称的下拉列表
*/
void CNoticeMangeDlg::RefreshStList() {
	CString strSQL;
	UpdateData(TRUE); // 读入用户输入的信息
    m_ctrST.ResetContent();
	CAddStMsgRSet m_recordset(&m_database); // 连接数据库
	strSQL.Format("select * from ST where ST_SCBZ=false");
	if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) { // 查询数据库
		MessageBox("打开数据库失败!","数据库错误",MB_OK);
	}	
	while(!m_recordset.IsEOF()) { // 将数据库中ST表中的社团名称加到“所在社团”的下拉选项中
		m_ctrST.AddString(m_recordset.m_ST_ZZMC);
		m_recordset.MoveNext(); // 移到下一条记录
	}
	m_database.Close(); // 关掉数据库
}
/*
 * 刷新结果列表
 * @param noticeAction Action指针
 */
void CNoticeMangeDlg::RefreshResultList(Action* noticeAction) {
	m_ctrList.DeleteAllItems(); // 将活动列表的记录清空
	m_ctrList.SetRedraw(FALSE);
	CString sSql = "select * from HD where HD_SCBZ=false order by HD_HDRQ desc";
	
	/* 增加新的社团成功,将社团显示在列表中, 将CRecordset对象转成不同的数据集对象 */
	CAddNoticeRSet* oaValues = (CAddNoticeRSet *)noticeAction->RefreshData(sSql);
	int i=0;
	while(!oaValues->IsEOF()) { // 将记录显示在活动列表中
		m_ctrList.InsertItem(i,oaValues->m_HD_ZZMC); // 所在社团
		m_ctrList.SetItemText(i,1,oaValues->m_HD_HDDD); // 活动地点
		CTime tmTemp = oaValues->m_HD_HDRQ; // 获得活动日期
		CString strTemp=tmTemp.Format("%Y-%m-%d"); // 格式成:YYYY-MM-DD的格式
		m_ctrList.SetItemText(i,2,strTemp); // 开始时间
		tmTemp = oaValues->m_HD_HDKSSJ; // 获得开始时间
		strTemp=tmTemp.Format("%H:%M:%S"); // 格式成:hh:mm:ss的格式			
		m_ctrList.SetItemText(i,3,strTemp); // 开始时间
		tmTemp = oaValues->m_HD_HDJSSJ; // 获得开始时间
		strTemp=tmTemp.Format("%H:%M:%S"); // 格式成:hh:mm:ss的格式
		m_ctrList.SetItemText(i,4,strTemp); // 结束时间
		m_ctrList.SetItemText(i,5,oaValues->m_HD_HDNR); // 活动内容
		m_ctrList.SetItemText(i,6,oaValues->m_HD_NM); // 主键
		i++;
		oaValues->MoveNext(); // 移到下一条记录
	}
	m_ctrList.SetRedraw(TRUE); // 显示数据					
	m_database.Close(); // 关掉数据库
}
/*
 * 点击增加按钮,对活动进行添加
 */
void CNoticeMangeDlg::OnButtonNew() 
{
	CNoticeInfoDlg Dlg;
	if(IDOK==Dlg.DoModal()) {
		
		// 判断用户所增加的活动是否已经存在,不允许活动在时间地点上冲突
		UpdateData(TRUE); // 读入用户输入的信息
		if (Dlg.m_strSt == "") { // 检查是否选择了社团名称
			MessageBox("请先选择社团名称!");
			return;
		}
		NoticeVariable* vSt = new NoticeVariable(); // 生成一个变量对象,存储各个表用到的变量
		vSt->HD_HDRQ = Dlg.m_dtNotice; // 活动日期
        vSt->HD_HDKSSJ = Dlg.m_tmBegin; // 活动开始时间
		vSt->HD_HDJSSJ = Dlg.m_tmEnd; // 活动结束时间
		vSt->HD_HDDD = Dlg.m_strPlace; // 活动地点
		vSt->STMC = Dlg.m_strSt; // 所在社团
		vSt->HD_HDNR = Dlg.m_strContent; // 活动内容
		vSt->LRR = m_username; // 录入人
		ActionFactory afac; // Factory模式
        Action *noticeAction = afac.creatNoticeAction(vSt); // 生成通知处理对象
		if(noticeAction->isEmpty()) { // 数据库中是否存在所增加的活动,如果不存在
			noticeAction->add(); // 增加此活动
			RefreshResultList(noticeAction); // 刷新结果列表	
			RefreshStList(); // 刷新社团下拉列表
		} else{ // 存在此社团
			MessageBox("存在此社团名称!");
		}
	}
}
/*
 * 点击查询按钮后,查询HD数据表,显示符合条件的活动通知记录
 */
void CNoticeMangeDlg::OnButtonSearch() 
{
    UpdateData(); // 读入用户输入的信息
	CString  strSQL; // sql文
	BOOL bHaveCon = FALSE; // 是否选择了“所在社团”
	NoticeVariable* vSt = new NoticeVariable(); // 生成一个变量对象,存储各个表用到的变量
	ActionFactory afac; // Factory模式
	if(m_strST!="") { // 若选择了“所在社团”
		strSQL.Format("select * from HD where HD_SCBZ=false and HD_ZZMC = '%s' order by HD_HDRQ desc",m_strST);
		bHaveCon = TRUE;
	}
	if(!bHaveCon) { // 若什么都没有选择,则查询所有的
		strSQL.Format("select * from HD where HD_SCBZ=false order by HD_HDRQ desc");
	}
	Action *noticeAction = afac.creatNoticeAction(vSt); // 生成通知处理对象
	/* 点击查询按钮后,将活动信息显示在列表中, 将CRecordset对象转成不同的数据集对象 */
	CAddNoticeRSet* oaValues = (CAddNoticeRSet *)noticeAction->RefreshData(strSQL);	
	m_ctrList.DeleteAllItems(); // 将活动列表的记录清空
	m_ctrList.SetRedraw(FALSE);
	int i=0;
	while(!oaValues->IsEOF()) { // 将记录显示在活动列表中
		m_ctrList.InsertItem(i,oaValues->m_HD_ZZMC); // 所在社团
		m_ctrList.SetItemText(i,1,oaValues->m_HD_HDDD); // 活动地点
		CTime tmTemp = oaValues->m_HD_HDRQ; // 获得活动日期
		CString strTemp=tmTemp.Format("%Y-%m-%d"); // 格式成:YYYY-MM-DD的格式
		m_ctrList.SetItemText(i,2,strTemp); // 开始时间
		tmTemp = oaValues->m_HD_HDKSSJ; // 获得开始时间
		strTemp=tmTemp.Format("%H:%M:%S"); // 格式成:hh:mm:ss的格式			
		m_ctrList.SetItemText(i,3,strTemp); // 开始时间
		tmTemp = oaValues->m_HD_HDJSSJ; // 获得开始时间
		strTemp=tmTemp.Format("%H:%M:%S"); // 格式成:hh:mm:ss的格式
		m_ctrList.SetItemText(i,4,strTemp); // 结束时间
		m_ctrList.SetItemText(i,5,oaValues->m_HD_HDNR); // 活动内容
		m_ctrList.SetItemText(i,6,oaValues->m_HD_NM); // 主键	
		i++;
		oaValues->MoveNext(); // 移到下一条记录
	}
	m_ctrList.SetRedraw(TRUE); // 显示数据					
	m_database.Close(); // 关掉数据库
}
/*
 * 点击察看按钮后,查询HD数据表,显示符合条件的活动通知记录
 */
void CNoticeMangeDlg::OnButtonBrowse() 
{
	CNoticeInfoDlg Dlg;
	UpdateData();
	int i = m_ctrList.GetSelectionMark();
	if(0>i)
	{
		AfxMessageBox("请选择一条记录进行查看!");
		return;
	}
	Dlg.m_strHdNm = m_ctrList.GetItemText(i,6); // 内码,主键
	Dlg.DoModal();
	
}

/*
 * 双击某条活动记录列表,查询ST数据表,显示活动的详细记录
 */
void CNoticeMangeDlg::OnDblclkList2(NMHDR* pNMHDR, LRESULT* pResult) 
{
	this->OnButtonBrowse();
	*pResult = 0;
}
/*
 * 点击修改按钮后,查询HD数据表,
 * 显示符合条件的活动记录,
 * 并提供修改相关信息功能
 */
void CNoticeMangeDlg::OnButtonModify() 
{
    CNoticeInfoDlg Dlg;
	UpdateData();
	int i = m_ctrList.GetSelectionMark(); // 得到用户所选的学生记录
	if(0>i)
	{
		AfxMessageBox("请选择一条记录进行修改!");
		return;
	}
	Dlg.m_strHdNm = m_ctrList.GetItemText(i,6); // 内码,主键
	CString strHdnm = m_ctrList.GetItemText(i, 6); // 内码,主键
	if(IDOK==Dlg.DoModal())	{ // 修改记录
		NoticeVariable* vSt = new NoticeVariable(); // 生成一个变量对象,存储各个表用到的变量
		vSt->NM = strHdnm; // 活动内码,主键
		vSt->STMC = Dlg.m_strSt; // 社团名称
		vSt->HD_HDRQ = Dlg.m_dtNotice; // 活动日期
		vSt->HD_HDKSSJ = Dlg.m_tmBegin; // 活动开始时间
		vSt->HD_HDJSSJ = Dlg.m_tmEnd; // 活动结束时间
		vSt->HD_HDDD = Dlg.m_strPlace; // 活动地点
		vSt->HD_HDNR = Dlg.m_strContent; // 活动内容
		vSt->LRR = m_username; // 修改人
		ActionFactory afac; // Factory模式
        Action *noticeAction = afac.creatNoticeAction(vSt); // 生成社团处理对象
		CString strSQL;
		CAddNoticeRSet m_recordset(&m_database); // 连接数据库		
		CTime m_dtNotice = Dlg.m_dtNotice; // 活动日期
		CTime m_tmBegin = Dlg.m_tmBegin; // 活动开始时间
		CTime m_tmEnd = Dlg.m_tmEnd; // 活动结束时间
		CString m_strPlace = Dlg.m_strPlace; // 活动地点
		strSQL.Format("select * from HD where HD_SCBZ=false and HD_NM not in ('%s') and HD_HDDD='%s' and HD_HDRQ=#%d-%d-%d# and HD_HDKSSJ=#70/1/1 %d:%d:%d# and HD_HDJSSJ=#70/1/1 %d:%d:%d#", strHdnm, m_strPlace, m_dtNotice.GetYear(), m_dtNotice.GetMonth(), m_dtNotice.GetDay(), m_tmBegin.GetHour(), m_tmBegin.GetMinute(), m_tmBegin.GetSecond(), m_tmEnd.GetHour(), m_tmEnd.GetMinute(), m_tmEnd.GetSecond()); // 查询数据库,是否已经录入过此活动
		if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
		{
			AfxMessageBox("打开数据库失败!");
			return ;
		}
		if (m_recordset.GetRecordCount() > 0) { // 修改后的学生信息在数据表中已经存在,则不允许修改,修改失败
			MessageBox("活动的时间和地点与已有的活动冲突!修改失败!");
            m_database.Close(); // 关闭数据库
			return;
		} else { // 修改相应数据
			noticeAction->modify(); // 修改此活动
			RefreshResultList(noticeAction); // 刷新结果列表	
			RefreshStList(); // 刷新社团下拉列表
		}
	}	
}

/*
 * 点击删除按钮后,
 * 设置此活动的scbz为true
 */
void CNoticeMangeDlg::OnButtonDelete() 
{   UpdateData(); // 读入用户输入的信息
    int i = m_ctrList.GetSelectionMark();
	if(0>i)
	{
		AfxMessageBox("请选择一条记录进行查看!");
		return;
	}
	if (AfxMessageBox("你确定要删除此活动吗?", MB_OKCANCEL) == IDCANCEL) {
		CString sSql = "select * from HD where HD_SCBZ=false order by HD_HDRQ desc";
	RefreshData(sSql);
		return;
	}
	CString strHdnm = m_ctrList.GetItemText(i, 6); // 活动内码,主键
	CString strSQL;
    NoticeVariable* vSt = new NoticeVariable(); // 生成一个变量对象,存储各个表用到的变量
	vSt->NM = strHdnm; // 组织内码,主键
	vSt->LRR = m_username; // 删除人
	ActionFactory afac; // Factory模式
	Action *noticeAction = afac.creatNoticeAction(vSt); // 生成社团处理对象
	noticeAction->del(); // 修改此社团
	RefreshResultList(noticeAction); // 刷新结果列表
	RefreshStList(); // 刷新社团名称下拉列表
}

⌨️ 快捷键说明

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