📄 stumangedlg.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 "StuMangeDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CStuMangeDlg dialog
/*
* 构造函数
*/
CStuMangeDlg::CStuMangeDlg(CWnd* pParent /*=NULL*/)
: CDialog(CStuMangeDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CStuMangeDlg)
// NOTE: the ClassWizard will add member initialization here
m_strST = _T(""); // 所选社团
//}}AFX_DATA_INIT
}
void CStuMangeDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CStuMangeDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
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_Modify, m_bntModify);
DDX_Control(pDX, IDC_Delete, m_bntDelete);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CStuMangeDlg, CDialog)
//{{AFX_MSG_MAP(CStuMangeDlg)
ON_BN_CLICKED(IDC_Search, OnButtonSearch)
ON_BN_CLICKED(IDC_Modify, OnButtonModify)
ON_NOTIFY(NM_CLICK, IDC_LIST2, OnClickList2)
ON_BN_CLICKED(IDC_Detail, OnButtonBrowse)
ON_BN_CLICKED(IDC_Delete, OnButtonDelete)
ON_NOTIFY(NM_DBLCLK, IDC_LIST2, OnDblclkList2)
ON_BN_CLICKED(IDC_BUTTON_NEW, OnButtonNew)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CStuMangeDlg message handlers
/*
* 初始化“所在社团”下拉选项和学生列表
*/
BOOL CStuMangeDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CString strSQL;
UpdateData(TRUE); // 读入用户输入的信息
if (!m_bIsAdmin) { // 如果是普通用户,屏蔽增加,修改,删除按钮,只允许查询,察看
m_bntDelete.EnableWindow(FALSE);
m_bntModify.EnableWindow(FALSE);
}
CAddStMsgRSet m_recordset(&m_database); // 连接数据库
strSQL.Format("select * from ST where ST_SCBZ=false order by ST_ZZMC");
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,60);
m_ctrList.SetColumnWidth(3,100);
m_ctrList.SetColumnWidth(4,100);
m_ctrList.SetColumnWidth(5,100);
m_ctrList.SetColumnWidth(6,0);
m_ctrList.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); // 设置列表
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
/*
* 执行某操作(修改,删除,查询)后刷新学生列表的记录
* @param strSQL SQL文
*/
void CStuMangeDlg::RefreshData(CString strSQL)
{
m_ctrList.DeleteAllItems(); // 将学生列表的记录清空
m_ctrList.SetRedraw(FALSE);
UpdateData(TRUE); // 读入用户输入的信息
CAddXsMsgReSet m_recordSet(&m_database); // 连接数据库
if(!m_recordSet.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) {
MessageBox("打开数据库失败!","数据库错误",MB_OK);
return ;
}
int i=0;
CString strSex;
while(!m_recordSet.IsEOF()) { // 将记录显示在学生列表中
m_ctrList.InsertItem(i,m_recordSet.m_XS_XH); // 学号
m_ctrList.SetItemText(i,1,m_recordSet.m_XS_XM); // 姓名
strSex = m_recordSet.m_XS_XB? "男": "女";
m_ctrList.SetItemText(i,2,strSex); // 性别
m_ctrList.SetItemText(i,3,m_recordSet.m_XS_YDDH); // 手机
m_ctrList.SetItemText(i,4,m_recordSet.m_XS_YJDZ); // 邮件地址
m_ctrList.SetItemText(i,5,m_recordSet.m_XS_STMC); // 所在社团
m_ctrList.SetItemText(i,6,m_recordSet.m_XS_XSNM); // 学生内码,主键
i++;
m_recordSet.MoveNext();
}
m_database.Close(); // 关掉数据库
m_ctrList.SetRedraw(TRUE);
}
/*
* 刷新结果列表
* @param studentAction 对学生信息处理的对象
*/
void CStuMangeDlg::RefreshResultList(Action* studentAction) {
m_ctrList.DeleteAllItems(); // 将活动列表的记录清空
m_ctrList.SetRedraw(FALSE);
CString sSql = "select * from XS where XS_SCBZ=false order by XS_XH desc";
/* 增加新的学生成功,将学生信息显示在列表中, 将CRecordset对象转成不同的数据集对象 */
CAddXsMsgReSet* oaValues = (CAddXsMsgReSet *)studentAction->RefreshData(sSql);
int i=0;
while(!oaValues->IsEOF()) { // 将记录显示在活动列表中
m_ctrList.InsertItem(i,oaValues->m_XS_XH); // 学号
m_ctrList.SetItemText(i,1,oaValues->m_XS_XM); // 姓名
m_ctrList.SetItemText(i,2,(oaValues->m_XS_XB? "男":"女")); // 性别
m_ctrList.SetItemText(i,3,oaValues->m_XS_YDDH); // 手机
m_ctrList.SetItemText(i,4,oaValues->m_XS_YJDZ); // 邮件地址
m_ctrList.SetItemText(i,5,oaValues->m_XS_STMC); // 所在社团
m_ctrList.SetItemText(i,6,oaValues->m_XS_XSNM); // 学生内码,主键
i++;
oaValues->MoveNext(); // 移到下一条记录
}
m_ctrList.SetRedraw(TRUE); // 显示数据
m_database.Close(); // 关掉数据库
}
/*
* 刷新社团名称的下拉列表
*/
void CStuMangeDlg::RefreshStList() {
CString strSQL;
UpdateData(TRUE); // 读入用户输入的信息
m_ctrST.ResetContent();
CAddStMsgRSet m_recordset(&m_database); // 连接数据库
strSQL.Format("select * from ST where ST_SCBZ=false order by ST_ZZMC");
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(); // 关掉数据库
}
/*
* 点击查询按钮后,查询XS数据表,显示符合条件的学生记录
*/
void CStuMangeDlg::OnButtonSearch()
{
UpdateData(); // 读入用户输入的信息
CString strSQL; // sql文
BOOL bHaveCon = FALSE; // 是否选择了“所在社团”
int i=0;
StudentVariable* vSt = new StudentVariable(); // 生成一个变量对象,存储各个表用到的变量
ActionFactory afac; // Factory模式
if(m_strST!="") { // 若选择了“所在社团”
strSQL.Format("select * from XS where XS_SCBZ=false and XS_STMC = '%s' order by XS_XH desc",m_strST);
bHaveCon = TRUE;
}
if(!bHaveCon) { // 若什么都没有选择,则查询所有的
strSQL.Format("select * from XS where XS_SCBZ=false order by XS_XH desc");
}
Action *studentAction = afac.creatStudentAction(vSt); // 生成学生处理对象
/* 点击查询按钮后,将学生信息显示在列表中, 将CRecordset对象转成不同的数据集对象 */
CAddXsMsgReSet* oaValues = (CAddXsMsgReSet *)studentAction->RefreshData(strSQL);
m_ctrList.DeleteAllItems(); // 将活动列表的记录清空
m_ctrList.SetRedraw(FALSE);
while(!oaValues->IsEOF()) { // 将记录显示在活动列表中
m_ctrList.InsertItem(i,oaValues->m_XS_XH); // 学号
m_ctrList.SetItemText(i,1,oaValues->m_XS_XM); // 姓名
m_ctrList.SetItemText(i,2,(oaValues->m_XS_XB? "男":"女")); // 性别
m_ctrList.SetItemText(i,3,oaValues->m_XS_YDDH); // 手机
m_ctrList.SetItemText(i,4,oaValues->m_XS_YJDZ); // 邮件地址
m_ctrList.SetItemText(i,5,oaValues->m_XS_STMC); // 所在社团
m_ctrList.SetItemText(i,6,oaValues->m_XS_XSNM); // 学生内码,主键
i++;
oaValues->MoveNext(); // 移到下一条记录
}
m_ctrList.SetRedraw(TRUE); // 显示数据
m_database.Close(); // 关掉数据库
}
/*
* 点击修改按钮后,查询XS数据表,
* 显示符合条件的学生记录,
* 并提供修改相关信息功能
*/
void CStuMangeDlg::OnButtonModify()
{
CStudentInfoDlg Dlg;
UpdateData();
int i = m_ctrList.GetSelectionMark(); // 得到用户所选的学生记录
if(0>i)
{
AfxMessageBox("请选择一条记录进行修改!");
return;
}
Dlg.m_strCode=m_ctrList.GetItemText(i,0); // 学号
Dlg.m_strName = m_ctrList.GetItemText(i,1); // 姓名
Dlg.m_strSex = m_ctrList.GetItemText(i,2); // 性别
Dlg.m_strPhone = m_ctrList.GetItemText(i,3); // 手机
Dlg.m_strEmail = m_ctrList.GetItemText(i,4); // 邮件地址
Dlg.m_strSt = m_ctrList.GetItemText(i,5); // 所在社团
CString strXsnm = m_ctrList.GetItemText(i, 6); // 学生内码,主键
if(IDOK==Dlg.DoModal()) { // 修改记录
StudentVariable* vSt = new StudentVariable(); // 生成一个变量对象,存储各个表用到的变量
vSt->NM = strXsnm; // 学生内码,主键
vSt->STMC = Dlg.m_strSt; // 社团名称
vSt->XS_XH = Dlg.m_strCode; // 学号
vSt->XS_XM = Dlg.m_strName; // 姓名
vSt->XS_XB = Dlg.m_strSex == "男"? true:false; // 性别
vSt->XS_YDDH = Dlg.m_strPhone; // 手机
vSt->XS_YJDZ = Dlg.m_strEmail; // 邮件地址
vSt->LRR = m_username; // 修改人
ActionFactory afac; // Factory模式
Action *studentAction = afac.creatStudentAction(vSt); // 生成通知处理对象
CString strSQL;
CAddXsMsgReSet m_recordset(&m_database); // 连接数据库
strSQL.Format("select * from XS where XS_SCBZ=false and XS_STMC = '%s' and XS_XH = '%s' and XS_XSNM not in ('%s') ", Dlg.m_strSt, Dlg.m_strCode, strXsnm);
if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
{
AfxMessageBox("打开数据库失败!");
return ;
}
if (m_recordset.GetRecordCount() > 0) { // 修改后的学生信息在数据表中已经存在,则不允许修改,修改失败
MessageBox("所选社团中已经存在此学生!修改失败!");
m_database.Close(); // 关闭数据库
return;
} else { // 修改相应数据
studentAction->modify(); // 修改此学生信息
RefreshResultList(studentAction); // 刷新结果列表
RefreshStList(); // 刷新社团下拉列表
}
}
}
void CStuMangeDlg::OnClickList2(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
*pResult = 0;
}
/*
* 点击察看按钮后,查询XS数据表,显示符合条件的学生记录
*/
void CStuMangeDlg::OnButtonBrowse()
{
CStudentInfoDlg Dlg;
UpdateData();
int i = m_ctrList.GetSelectionMark();
if(0>i)
{
AfxMessageBox("请选择一条记录进行查看!");
return;
}
Dlg.m_strCode = m_ctrList.GetItemText(i,0); // 学号
Dlg.m_strName = m_ctrList.GetItemText(i,1); // 姓名
Dlg.m_strSex = m_ctrList.GetItemText(i,2); // 性别
Dlg.m_strPhone = m_ctrList.GetItemText(i,3); // 手机
Dlg.m_strEmail = m_ctrList.GetItemText(i,4); // 邮件地址
Dlg.m_strSt = m_ctrList.GetItemText(i,5); // 所在社团
Dlg.DoModal();
}
/*
* 点击删除按钮后,
* 设置此学生的scbz为true
*/
void CStuMangeDlg::OnButtonDelete()
{
int i = m_ctrList.GetSelectionMark();
if(0>i)
{
AfxMessageBox("请选择一条记录进行删除!");
return;
}
if (AfxMessageBox("你确定要删除此学生吗?", MB_OKCANCEL) == IDCANCEL) {
CString sSql = "select * from XS where XS_SCBZ=false order by XS_XH desc";
RefreshData(sSql);
return;
}
CString strXsnm = m_ctrList.GetItemText(i, 6); // 学生内码,主键
CString strSQL;
StudentVariable* vSt = new StudentVariable(); // 生成一个变量对象,存储各个表用到的变量
vSt->NM = strXsnm; // 学生内码,主键
vSt->LRR = m_username; // 删除人
ActionFactory afac; // Factory模式
Action *studentAction = afac.creatStudentAction(vSt); // 生成学生处理对象
studentAction->del(); // 修改此学生
RefreshResultList(studentAction); // 刷新结果列表
RefreshStList(); // 刷新社团名称下拉列表
}
/*
* 双击某条学生列表,查询ST数据表,显示学生的详细记录
*/
void CStuMangeDlg::OnDblclkList2(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
this->OnButtonBrowse();
*pResult = 0;
}
/*
* 点击增加按钮,对学生进行添加
*/
void CStuMangeDlg::OnButtonNew()
{
CXSAddDlg Dlg; // 增加学生
if(IDOK==Dlg.DoModal()) {
// 判断用户所增加的学生是否已经存在
UpdateData(TRUE); // 读入用户输入的信息
if (Dlg.m_strST == "") { // 检查是否选择了社团名称
MessageBox("请先选择社团名称!");
return;
}
StudentVariable* vSt = new StudentVariable(); // 生成一个变量对象,存储各个表用到的变量
vSt->XS_XH = Dlg.m_xsId; // 学号
vSt->XS_XM = Dlg.m_xsName; // 姓名
vSt->XS_XB = (Dlg.sIsmale== "男"? true:false); // 性别
vSt->XS_YDDH = Dlg.m_xsMobile; // 手机
vSt->XS_YJDZ = Dlg.m_xsEmail; // 邮件地址
vSt->STMC = Dlg.m_strST; // 所在社团
vSt->LRR = m_username; // 录入人
ActionFactory afac; // Factory模式
Action *studentAction = afac.creatStudentAction(vSt); // 生成通知处理对象
if(studentAction->isEmpty()) { // 数据库中是否存在所增加的学生,如果不存在
studentAction->add(); // 增加此学生
RefreshResultList(studentAction); // 刷新结果列表
RefreshStList(); // 刷新社团下拉列表
} else{ // 存在此社团
MessageBox("存在此社团名称!");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -