📄 studorm.cpp
字号:
iCheck[nCount] = 0;
m_StuActList.SetCheck(nCount,false);
}
}
}
void CStuDorm::OnSave()
{
//获取当前选择的项的值,
//把相关的值写入数据库中
CString strTemp;
int d;
if ((d=m_cmbAct.GetItemData(m_cmbAct.GetCurSel())) <0)
{
AfxMessageBox("请选择活动名称!");
return;
}
for (int i=0 ; i<m_StuActList.GetItemCount(); i++)
{
if (iCheck[i])
{
//存储被选择的
strTemp.Format("0%i",m_StuActList.GetItemData(i));
sa_CheckOn.Add(strTemp);
AfxMessageBox("参加:"+strTemp);
}
else
{
//存储没有被选择的
strTemp.Format("0%i",m_StuActList.GetItemData(i));
sa_CheckNot.Add(strTemp);
AfxMessageBox("没有参加:"+strTemp);
}
}
//向数据库中写入
if (InsertStuAct())
AfxMessageBox("成功保存数据!");
}
BOOL CStuDorm::InsertStuAct()
{
CString strStuNum,strDormID,strTime;
// CString strDormTypeID; //待用中
_bstr_t vSQL;
int nCheck,nUnCheck;
nCheck=0;
nUnCheck=0;
strDormID.Format("%d",m_cmbAct.GetItemData(m_cmbAct.GetCurSel()));
strTime=Time;
if (m_StuActList.GetItemCount()<=0)
{
AfxMessageBox("列表控件里,无学生记录!!!");
return false;
}
//插入所有该班的学生
for(int i=0 ; i< m_StuActList.GetItemCount(); i++)
{
//判断该学生是否参加该活动
if (iCheck[i])
{
//参加活动的学生要小于,sa_CheckOn实际存储的
if (nCheck<sa_CheckOn.GetSize())
{
//参加活动的学生
strStuNum=sa_CheckOn.GetAt(nCheck);
//?????????????须修改DormTypeID
vSQL="Insert into StuDorm(StudentNum, DormID,DormDateTime,IsDo)\
VALUES ( '" +strStuNum +"','"+strDormID+"','"+strTime+"','1')";
m_CurAdo.ExecuteSQL(vSQL);
nCheck++;
}
}
else
{
//不参加活动的学生要小于,sa_CheckNot实际存储的
if (nUnCheck<sa_CheckNot.GetSize())
{
//没参加活动学生
strStuNum=sa_CheckNot.GetAt(nUnCheck);
vSQL="Insert into StuDorm(StudentNum, DormID,DormDateTime,IsDo)\
VALUES ( '" +strStuNum +"','"+strDormID+"','"+strTime+"','0')";
m_CurAdo.ExecuteSQL(vSQL);
nUnCheck++;
}
}
}
return true;
}
void CStuDorm::OnClickMemberList(NMHDR* pNMHDR, LRESULT* pResult)
{
HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR;
//若鼠标没有点击listCtrl中的项,则不执行以下操作
CString str1;
if (phdn->iItem < 0)
return;
CString strTemp;
strTemp.Format("%d", m_StuActList.GetItemData(phdn->iItem));
//
if ( strTemp.GetLength()>8 )
{
//获的是学号,标识为非查询
//保存按钮时,对列表复选框的操作
if (iCheck[phdn->iItem])
{
iCheck[phdn->iItem] = 0;
m_StuActList.SetCheck(phdn->iItem, FALSE);
}
else
{
iCheck[phdn->iItem] = 1;
m_StuActList.SetCheck(phdn->iItem);
}
}
else
{
//获的ID,标识查询
//修改按钮时,对列表复选框的操作
//若修改,要通知查询,已经修改,
if (iModyCheck[phdn->iItem]) //为的是和查询数据库里的做对比
{ //记录变化的数据,以便用来更新
iModyCheck[phdn->iItem] = 0;
m_StuActList.SetCheck(phdn->iItem, FALSE);
}
else
{
iModyCheck[phdn->iItem] = 1;
m_StuActList.SetCheck(phdn->iItem);
}
}
*pResult = 0;
}
void CStuDorm::OnQuery()
{
// TODO: Add your control notification handler code here
//通过选择班级、课程、时间来查询显示该班每个人的出勤情况
//1.能够在列表控件里显示每个人的出勤信息
//2、并能够对每个人的出勤信息进行修改
GetDlgItem(IDC_MODIFY)->EnableWindow(true);
GetDlgItem(IDC_All_CHECK)->EnableWindow(false);
GetDlgItem(IDC_AllNOT_CHECK)->EnableWindow(false);
GetDlgItem(IDC_SAVE)->EnableWindow(false);
ShowQueryTitle(); //设置标题头
QueryData(); //查询数据库
}
void CStuDorm::ShowQueryTitle()
{
//在列表框中显示标题
if (bTitleQuery)
{
int nColumnCount = m_StuActList.GetHeaderCtrl()->GetItemCount();
// Delete all of the columns.
for (int i=0;i < nColumnCount;i++)
m_StuActList.DeleteColumn(0);
m_StuActList.InsertColumn(0,"学号",LVCFMT_LEFT,100);
m_StuActList.InsertColumn(1,"姓名",LVCFMT_LEFT,70);
m_StuActList.InsertColumn(2,"班级名称",LVCFMT_LEFT,130);
m_StuActList.InsertColumn(3,"奖惩名称",LVCFMT_LEFT,80);
m_StuActList.InsertColumn(4,"奖惩类型",LVCFMT_LEFT,80);
m_StuActList.InsertColumn(5,"奖惩时间",LVCFMT_LEFT,80);
m_StuActList.InsertColumn(6,"是否奖惩",LVCFMT_LEFT,80);
m_StuActList.InsertColumn(7,"ID",LVCFMT_LEFT,40);
bTitleQuery=false;
bTitleTree=true;
UpdateData(0);
}
}
void CStuDorm::QueryData()
{
//联合多个表格进行查询,主要就是了解该项目下,该时间下的学生的出勤情况
//对StuCourse表中的项,ID为主键
CString strCourseID,strTime,strClassID;
//获取时间控件的值
CTime time;
m_dateAct.GetTime(time);
Time=time.Format("%Y-%m-%d"); //转换实际格式
strCourseID.Format("%d", m_cmbAct.GetItemData(m_cmbAct.GetCurSel()));
strTime = Time;
CString strMarkSharp;
strMarkSharp.LoadString(IDS_MARK_SHARP);
strClassID=m_ClassID;
if (strClassID.GetLength()<8)
{
AfxMessageBox("请选择班级!!!");
return;
}
int nColumn=8; //要显示8列数据
//设置SELECT语句
_bstr_t vSQL;
CString strSQL;
vSQL = "select Student.StudentNum,Name, ClassName,DormName,DormTypeName,DormDateTime, IsDo, \
StuDorm.StuDormID from Student, Dorm, StuDorm, DormType,Class where Student.ClassID='" \
+ m_ClassID + "' and Student.ClassID=Class.ClassID "\
+ " and Student.StudentNum=StuDorm.StudentNum " +" and StuDorm.DormDateTime= " \
+ strMarkSharp + strTime + strMarkSharp \
+ " and StuDorm.DormID="+strCourseID+ " and StuDorm.DormID=Dorm.DormID " \
+ " and Dorm.DormTypeID=DormType.DormTypeID " \
+ " ORDER BY StuDorm.StuDormID ";
AfxMessageBox(vSQL);
m_StuActList.DeleteAllItems();
CArray <CString, LPCTSTR> StudentInfoAry;
CString strCurColInfo;
StudentInfoAry.SetSize(nColumn);
CString * pCurInfo = StudentInfoAry.GetData();
int nRecordNum = 0;
//执行SELETE语句,如果记录集不为空
_RecordsetPtr CurRecordset;
_variant_t nIndex = (long)0;
_variant_t var;
int iModCheBase=0;
CurRecordset = m_CurAdo.GetRecordSet(vSQL);
while (0 == CurRecordset->adoEOF)
{
//取一条记录付值给数组StudentInfoAry
for (int i = 0; i < nColumn; i++)
{
nIndex = (long) i;
var = CurRecordset->GetCollect(nIndex);
pCurInfo[i] = (LPCTSTR)(_bstr_t )var;
}
m_StuActList.InsertItem(nRecordNum, "");
for (int j = 0; j < nColumn; j++)
{
if(7==j)//表示ID
m_StuActList.SetItemData(nRecordNum,atoi(pCurInfo[j]));
if (6==j) //是否出勤
{
if (1==atoi(pCurInfo[j]))
{
iModyCheckBase[iModCheBase] = 1; //保存该学生的选择状态
m_StuActList.SetCheck(nRecordNum, true);
m_StuActList.SetItemText(nRecordNum,j,"是");
iModCheBase++;
}
else
{
iModyCheckBase[iModCheBase] = 0;
m_StuActList.SetCheck(nRecordNum, false);
m_StuActList.SetItemText(nRecordNum,j,"否");
iModCheBase++;
}
}
else
m_StuActList.SetItemText(nRecordNum, j, pCurInfo[j]);
}
nRecordNum ++;
//记录转下一条
CurRecordset->MoveNext();
}
for(int k=0 ; k<iModCheBase ;k++)
iModyCheck[k]=iModyCheckBase[k]; //原数据库中的标识赋值给待变的
}
void CStuDorm::OnModify()
{
//修改,仅仅是对从数据库中查到的数据进行修改
//仅修改学生是否缺勤,
//因此,课程,日期应该值为不可用
GetDlgItem((IDC_COMBO_DORM))->EnableWindow(false);
GetDlgItem((IDC_DATETIM))->EnableWindow(false);
//对学生出勤情况进行修改
CString StuDormID; //记录ID
_bstr_t vSQL;
CString strTemp;
if (m_StuActList.GetItemCount()<=0)
{
AfxMessageBox("列表控件里,无学生记录!!!");
return ;
}
//插入所有该班的学生
for(int i=0 ; i< m_StuActList.GetItemCount(); i++)
{
StuDormID.Format("%d",m_StuActList.GetItemData(i));
//判断该学生是否参加该活动
if (iModyCheck[i] !=iModyCheckBase[i])
{
strTemp.Format("%d",iModyCheck[i]);
//该学生的出勤状态被修改,应该更新数据库
vSQL = "Update StuDorm Set IsDo= " + strTemp
+ " Where StuDormID= " + StuDormID;
m_CurAdo.ExecuteSQL(vSQL);
AfxMessageBox(" 修改了: " + StuDormID);
}
}
}
void CStuDorm::OnDropdownComboDorm()
{
ReadToComb();
UpdateData(false);
}
void CStuDorm::OnRadioPunish()
{
UpdateData(1);
CString str;
str.Format("Pun:%d",m_DormType);
AfxMessageBox(str);
GetDlgItem((IDC_COMBO_DORM))->EnableWindow(true);
GetDlgItem((IDC_COMBO_DORM2))->EnableWindow(false);
}
void CStuDorm::OnRadioReward()
{
UpdateData(1);
CString str;
str.Format("Reward:%d",m_DormType);
AfxMessageBox(str);
GetDlgItem((IDC_COMBO_DORM))->EnableWindow(false);
GetDlgItem((IDC_COMBO_DORM2))->EnableWindow(true);
ReadToComb();
UpdateData(false);
}
void CStuDorm::OnDropdownComboDorm2()
{
ReadToComb();
UpdateData(false);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -