m_ListCtrl.DeleteColumn(0);
_CommandPtrpCmd;
pCmd.CreateInstance(__uuidof(Command));
pCmd->ActiveConnection=m_pConnection;
CStringstrText;
strField.TrimLeft();
if(strField.IsEmpty())
strText.Format("SELECT*FROM%s",tablename);
else
strText.Format("SELECT*FROM%sORDERBY%s",tablename,strField);
pCmd->CommandText=_bstr_t(strText);
_RecordsetPtrpSet;
pSet.CreateInstance(__uuidof(Recordset));
pSet=pCmd->Execute(NULL,NULL,adCmdText);
FiledsPtrflds=pSet->GetFields();
_variant_tIndex;
Index.vt=VT_I2;
m_ListCtrl.InsertColumn(0,"序号",LVCEMT_LEFT,40);
for(i=0;i<(int)flds->GetCount();i++)
{
Index.iVal=i;
intnWidth=flds->GetItem(Index)->GetDefineSize()*9;
if(nWidth<40)nWidth=40;
m_ListCtrl.InsertColumn(i+1,(LPSTR)flds->GetItem(Index)->GetName(),LVSFMT_LEFT,nWidth);
}_bstr_tstr,value;
intnItem=0;
CStringstrItem;
while(!
pSet->adoEOF)
{
strItem.Format("%d",nItem+1);
m_ListCtrl.InsertItem(nItem,strItem);
for(i=0;i<(int)flds->GetCount();i++)
{
Index.iVal=i;
str=flds->GetItem(Index)->GetName();
value=pSet->GetCollect(str);
m_ListCtrl.SetItemText(nItem,i+1,(LPSTR)value);
}
pSet->MoveNext();
nItem++;
}
pSet->Close();
}
4.用MFCClassWizard为Cjy001View类添加该菜单的COMMAND消息映射,并添加下列代码:
voidCjy001View:
:
OnStuinfoAdd()
{
//TODO:
Addyourcommandhandlercodehere
CStuInfoDlgdlg;
if(dlg.DoModal()!
=IDOK)return;
_CommandPtrpCmd;
pCmd.CreateInstance(__uuidof(Command));
pCmd->ActiveConnection=m_pConnection;
CStringstrText;
strText.Format("SELECT*FROMstudentWHEREstudentname='%s'ANDstudentno='%s'",
dlg.m_strName,dlg.m_strNO);
pCmd->CommandText=_bstr_t(strText);
_RecordsetPtrpSet;
pSet.CreateInstance(__uuidof(Recordset));
pSet=pCmd->Execute(NULL,NULL,adCmdText);
if(!
pSet->adoEOF)
{
MessageBox(dlg.m_strName+"学生记录已添加过!
","重复添加");
pSet->Close();
return;
}
CStringstrSex,strTime;
if(dlg.m_strSex=="男")strSex="True";
elsesreSex="False";
strTime=dlg.m_tBirth.Format("%Y-%m-%d");
strText.Format("INSERTINFOstudent(studentname,studentno,xb,birthday,special)\
VALUES('%s','%s','%s','%s','%s')",
dlg.m_strName,dlg.m_strNO,strSex,strTime,dlg.m_strSpec);
pCmd->CommandText=_bstr_t(strText);
pCmd->Execute(NULL,NULL,adCmdText);
DispAllRec("student");
}
5.用MFCClassWizard为Cjy001View类添加该菜单的WM_RBUTTONDOWN消息映射,并添加下列代码:
CListView:
:
OnRButtonDown(nFlags,point);
{
CListCtrl&m_ListCtrl=GetListCtrl();
UINTuFlags;
intnItem=m_ListCtrl.HitTest(point,&uFlags);
if(uFlags&LVHT_ONITEMLABEL)
{
CStuInfoDlgdlg;
dlg.m_strOKText="修改";
dlg.m_strName=m_ListCtrl.GetItemText(nItem,1);
dlg.m_strNO=m_ListCtrl.GetItemText(nItem,2);
CStringstrSex,strTime;
strSex=m_ListCtrl.GetItemText(nItem,3);
if(strSex=="0")strSex="女";
elsestrSex="男";
dlg.m_strSex=strSex;
strTime=m_ListCtrl.GetItemText(nItem,4);
COleVariantvt(strTime);
vt.ChangeType(VT_DATE);
COleDateTimetm=vt;
dlg.m_tBirth=CTime(tm.GetYear(),tm.GetMonth(),tm.GetDay(),0,0,0);
dlg.m_strSpec=m_ListCtrl.GetItemText(nItem,5);
if(IDOK==dlg.DoModal())
{
if(dlg.m_strSex=="男")strSex="True";
elsestrSex="False";
strTime=dlg.m_tBirth.Format("%Y-%m-%d");
_CommandPtrpCmd;
pCmd.CreateInstance(__uuidof(Command));
pCmd->ActiveConnection=m_pConnection;
CStringstrText;
strText.Format("UPDATEstudentSETxb=%S,birthday='%s',special='&s'\
WHEREstudentname='%s'ANDstudentno='%s'",
strSex,strTime,dlg.m_strSpec,dlg.m_strName,dlg.m_strNO);
pCmd->CommandText=_bstr_t(strText);
pCmd->Execute(NULL,NULL,adCmdText);
DispAllRec("student");
}
}
}
学生学习成绩管理系统
四、主要框架,如图13所示
查询
修改
添加
内容
删除
课程信息
学生成绩
学生信息
图13主框架图
五、运行结果截图
1.运行弹出菜单,如图14所示
图14运行菜单
2.运行弹出的“学生信息”对话框,如图15所示
图15“学生信息”对话框
3.运行弹出的“学生成绩”对话框,如图16所示
图16“学生成绩”对话框
4.运行弹出的“课程信息”对话框,如图17所示
图17“课程信息”对话框
六、改进和总结
本学生信息管理系统基本功能已实现,有些功能存在一些局限性,编程代码的复用性不太完善,页面设计比较简单,缺乏修饰效果功能模块的实现需要进一步完善。
进一步深入理解数据库设计的整个过程,该学生选课系统的需求分析、数据库概念结构设计有关内容等。
掌握使用前台程序设计技术VC和SQLServer结合设计C/S结构的管理信息系统。
综合练习了SQLServer的使用和数据库得管理技术。
综合熟悉并练习了SQL语言在编程中的使用。
综合训练编程能力。
认识系统,取得系统需求分析,更重要得是在编程方面提高了实现目标代码得能力及调试代码得能力。
七、参考文献
(1)夏邦国刘凡馨《VisualC++数据库开发经典实例精解》出版社:
机械工业出版社2004.2
(2)陈世洪《SQLSERVER200管理,开发及应用实例》出版社:
人民邮电出版社2003.3
(3)郑阿奇丁有和《VisualC++实用教程》出版社:
机械工业出版社2002.3
(4)姜代红《数据库原理与应用》出版社:
机械工业出版社2005.6
(5)周鸣扬,于秋生《VisualC++程序设计教程》出版社:
机械工业出版社2001.5