📄 studentinfo.cpp
字号:
// StudentInfo.cpp : implementation file
//
#include "stdafx.h"
#include "StudentCheck.h"
#include "StudentInfo.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define COLNUM 12 // 11是记录的属性数目
#define COLSTARTNUM 32775 // 11是记录的属性数目
/////////////////////////////////////////////////////////////////////////////
// CStudentInfoDlg dialog
CStudentInfoDlg::CStudentInfoDlg(CWnd* pParent /*=NULL*/)
: CDialog(CStudentInfoDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CStudentInfoDlg)
m_strClassNum = _T("");
m_strCollegeNum = _T("");
m_strDormPos = _T("");
m_strDuty = _T("");
m_strGradeNum = _T("");
m_strRoomNum = _T("");
m_strSpecialtyNum = _T("");
m_strStuID = _T("");
m_strStuBDay = _T("");
m_strStuName = _T("");
m_strStuSex = _T("");
m_strTest = _T("");
//}}AFX_DATA_INIT
m_bIsCurDlgChanged = TRUE;
m_bIsIsertNewRecord = TRUE;
m_bIsUseReadOnly = FALSE;
StuInfoPointerConjunction();
m_strModifySQL.LoadString(IDS_SQL_NOSQL);
m_pStuInfo = NULL;
// m_ctrlStuID.Create()
}
void CStudentInfoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CStudentInfoDlg)
DDX_Control(pDX, IDC_STU_SEX, m_ctrlSex);
DDX_Control(pDX, IDC_SPECIALTY_NUM, m_ctrlSpecialtyName);
DDX_Control(pDX, IDC_GRADE_NUM, m_ctrlGradeName);
DDX_Control(pDX, IDC_CLASS_NUM, m_ctrlClassName);
DDX_CBString(pDX, IDC_CLASS_NUM, m_strClassNum);
DDX_CBString(pDX, IDC_COLLEGE_NUM, m_strCollegeNum);
DDX_Text(pDX, IDC_DORM_POS, m_strDormPos);
DDX_Text(pDX, IDC_DUTY, m_strDuty);
DDX_CBString(pDX, IDC_GRADE_NUM, m_strGradeNum);
DDX_Text(pDX, IDC_ROOM_NUM, m_strRoomNum);
DDX_CBString(pDX, IDC_SPECIALTY_NUM, m_strSpecialtyNum);
DDX_Text(pDX, IDC_STD_ID, m_strStuID);
DDX_Control(pDX, IDC_STD_ID, m_ctrlStuID);
DDX_Text(pDX, IDC_STU_BD, m_strStuBDay);
DDX_Text(pDX, IDC_STU_NAME, m_strStuName);
DDX_CBString(pDX, IDC_STU_SEX, m_strStuSex);
//}}AFX_DATA_MAP
}
void CStudentInfoDlg::SetItmeInfos(CArray <CString, LPCTSTR> * _pCurItemInfos, int _nStuInfoArySize)
{
CString ** pCurString = NULL;
CString * strItemInfo = NULL;
pCurString = m_OneStuInfosPointerAry.GetData();
strItemInfo = _pCurItemInfos->GetData();
for (int i = 0; i < _nStuInfoArySize; i++)
{
*pCurString[i] = strItemInfo[i];
}
// UpdateData(TRUE);
}
void CStudentInfoDlg::SetStuInfoPointer(CStuInfo* _pCurStuInfos)
{
m_pStuInfo = _pCurStuInfos;
}
void CStudentInfoDlg::StuInfoPointerConjunction()
{
m_OneStuInfosPointerAry.SetSize(COLNUM-1);
CString ** pCurString = NULL;
pCurString = m_OneStuInfosPointerAry.GetData();
pCurString[0] = &m_strStuID;
pCurString[1] = &m_strStuName;
pCurString[2] = &m_strStuSex;
pCurString[3] = &m_strStuBDay;
pCurString[4] = &m_strClassNum;
pCurString[5] = &m_strSpecialtyNum;
pCurString[6] = &m_strCollegeNum;
pCurString[7] = &m_strGradeNum;
pCurString[8] = &m_strDuty;
pCurString[9] = &m_strDormPos;
pCurString[10] = &m_strRoomNum;
}
BEGIN_MESSAGE_MAP(CStudentInfoDlg, CDialog)
//{{AFX_MSG_MAP(CStudentInfoDlg)
ON_EN_CHANGE(IDC_DORM_POS, OnColDataChanged)
ON_CBN_DROPDOWN(IDC_CLASS_NUM, OnDropdownClassNum)
ON_EN_CHANGE(IDC_COLLEGE_NUM, OnColDataChanged)
ON_EN_CHANGE(IDC_DUTY, OnColDataChanged)
ON_EN_CHANGE(IDC_ROOM_NUM, OnColDataChanged)
ON_EN_CHANGE(IDC_GRADE_NUM, OnColDataChanged)
ON_EN_CHANGE(IDC_SPECIALTY_NUM, OnColDataChanged)
ON_EN_CHANGE(IDC_STD_ID, OnColDataChanged)
ON_EN_CHANGE(IDC_STU_BD, OnColDataChanged)
ON_EN_CHANGE(IDC_DORM_POS, OnColDataChanged)
ON_EN_CHANGE(IDC_STU_NAME, OnColDataChanged)
ON_EN_CHANGE(IDC_STU_SEX, OnColDataChanged)
ON_CBN_DROPDOWN(IDC_GRADE_NUM, OnDropdownComboBox)
ON_CBN_DROPDOWN(IDC_SPECIALTY_NUM, OnDropdownComboBox)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CStudentInfoDlg message handlers
BOOL CStudentInfoDlg::IsCurDateChanged()
{
return m_bIsCurDlgChanged;
}
void CStudentInfoDlg::OnColDataChanged()
{
// TODO: If this is a RICHEDIT control, the control will not
// 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
m_bIsCurDlgChanged = TRUE;
}
void CStudentInfoDlg::OnOK()
{
UpdateData(TRUE);
CString strSQLCondition;
CString strQuotationMark;
CString* pCurColName = NULL;
CString strEqualMark;
CString strCommaMark;
CString ** pCurStuInfo = NULL;
CString strSQLHead;
CString strSQLTail;
CString strBracketFront;
CString strBracketBack;
int i = 0;
int j = 0;
//以下将所有列属性进入数组
CArray <CString, LPCTSTR> strAllSQLColAry;
if (TRUE == IsComBoxbeFilled())
{
strEqualMark.LoadString(IDS_EQUAL_MARK);
strAllSQLColAry.SetSize(COLNUM - 1);
pCurColName = strAllSQLColAry.GetData();
strQuotationMark.LoadString(IDS_QUOTATION_MARK);
strCommaMark.LoadString(IDS_COMMA_MARK);
strBracketFront.LoadString(IDS_BRACKET_MARK_FRONT);
strBracketBack.LoadString(IDS_BRACKET_MARK_BACK);
pCurStuInfo = m_OneStuInfosPointerAry.GetData();
//所有表名载入
for (i = 1; i < COLNUM; i++)
{
pCurColName[i - 1].LoadString(COLSTARTNUM + i);
}
m_strClassNum = m_pStuInfo->GetClassNum(m_strClassNum);
m_strSpecialtyNum = m_pStuInfo->GetSpecialityNum(m_strSpecialtyNum);
m_strGradeNum = m_pStuInfo->GetGradeNum(m_strGradeNum);
// AfxMessageBox(m_strGradeNum);
if (FALSE == m_bIsIsertNewRecord) // 是否插入新的记录
{
if (TRUE == m_bIsCurDlgChanged) //不是插入新记录,但是当前记录已改变
{
// 构造新的SQL语句
strSQLHead.LoadString(IDS_SQL_MODIFY_STU_HEAD);
strSQLTail.LoadString(IDS_SQL_MODIFY_STU_TAIL);
strSQLCondition = strSQLHead;
//构造新的SQL语句中的条件部分
for (j = 1; j < COLNUM - 2; j++)
{
// 表名+等号+引号+值+引号+逗号
strSQLCondition = strSQLCondition + pCurColName[j] + strEqualMark +
strQuotationMark + *pCurStuInfo[j] + strQuotationMark + strCommaMark;
}
// 补最后一个条件
strSQLCondition = strSQLCondition + pCurColName[j] + strEqualMark +
strQuotationMark + *pCurStuInfo[j] + strQuotationMark;
strSQLCondition = strSQLCondition + strSQLTail +
strQuotationMark + *pCurStuInfo[0] + strQuotationMark;
}
}
else // 插入新记录
{
// 构造新的SQL语句
strSQLHead.LoadString(IDS_SQL_INSERT_STU);
strSQLCondition = strSQLHead + strBracketFront;
for (j = 0; j < COLNUM - 2; j++)
{
// 表名+逗号
strSQLCondition = strSQLCondition + pCurColName[j] + strCommaMark;
}
// 补最后一个条件
strSQLCondition = strSQLCondition + pCurColName[j];
//尾括号
strSQLCondition = strSQLCondition + strBracketBack;
strSQLTail.LoadString(IDS_SQL_VALUE);
// values + (
strSQLCondition = strSQLCondition + strSQLTail + strBracketFront;
for (j = 0; j < COLNUM - 2; j++)
{
// 引号+值+引号+逗号
strSQLCondition = strSQLCondition + strQuotationMark + *pCurStuInfo[j] + strQuotationMark + strCommaMark;
}
//补最后一个值 + )
strSQLCondition = strSQLCondition + *pCurStuInfo[j] + strBracketBack;
}
m_strModifySQL = strSQLCondition;
CDialog::OnOK();
}
else
{
AfxMessageBox("有尚未选择的下拉菜单!");
}
}
void CStudentInfoDlg::FillClassComboBox()
{
UpdateData(TRUE);
CString strCradeID;
CString strSpecialityID;
CClassInfoStringAry aryCurClassName;
CString* pCUrClassName;
CString strCurKey;
m_strGradeNum = m_pStuInfo->GetGradeNum(m_strGradeNum);
m_strSpecialtyNum = m_pStuInfo->GetSpecialityNum(m_strSpecialtyNum);
strCradeID = m_strGradeNum;
strSpecialityID = m_strSpecialtyNum;
strCurKey = strSpecialityID + strCradeID;
// m_ClassInfoMap.Lookup(strCurKey, aryCurClassName);
m_pStuInfo->GetClassMapInfo(strCurKey, aryCurClassName);
pCUrClassName = aryCurClassName.GetData();
// m_ctrlClassName.ResetContent();
for (int i = 0; i < aryCurClassName.GetSize(); i++)
{
m_ctrlClassName.AddString(pCUrClassName[i]);
}
}
void CStudentInfoDlg::SetStuIDReadOnly()
{
m_bIsUseReadOnly = TRUE;
}
void CStudentInfoDlg::SetNewRecordSign(BOOL _bIsInsertNew)
{
m_bIsIsertNewRecord = _bIsInsertNew;
}
CString CStudentInfoDlg::GetModifySQL()
{
return m_strModifySQL;
}
void CStudentInfoDlg::OnDropdownClassNum()
{
// TODO: Add your control notification handler code here
CString strCurKey;
CString strCradeID;
CString strSpecialityID;
if ((CB_ERR != m_ctrlSpecialtyName.GetCurSel())&&
(CB_ERR != m_ctrlGradeName.GetCurSel()))
{
m_ctrlClassName.ResetContent();
FillClassComboBox();
}
}
BOOL CStudentInfoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
// GetAllDBInfo();
if (m_bIsUseReadOnly)
{
m_ctrlStuID.SetReadOnly(TRUE);
}
m_ctrlSex.AddString("男");
m_ctrlSex.AddString("女");
CString strCulName;
CStudentStudyInfo * pCulStudyInfo = NULL;
pCulStudyInfo = m_pStuInfo->GetGradeInfos();
for (int i = 0; i < m_pStuInfo->GetGradeCounts(); i++)
{
strCulName = pCulStudyInfo[i].GetNameInfo();
m_ctrlGradeName.AddString(strCulName);
}
pCulStudyInfo = m_pStuInfo->GetSpecialityInfos();
for (int j = 0; j < m_pStuInfo->GetSpecialityCounts(); j++)
{
strCulName = pCulStudyInfo[j].GetNameInfo();
m_ctrlSpecialtyName.AddString(strCulName);
}
FillClassComboBox();
return TRUE; // return TRUE unless you set the focus to a control
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -