MFC学生信息管理完整.docx
- 文档编号:14822777
- 上传时间:2023-06-27
- 格式:DOCX
- 页数:14
- 大小:19.40KB
MFC学生信息管理完整.docx
《MFC学生信息管理完整.docx》由会员分享,可在线阅读,更多相关《MFC学生信息管理完整.docx(14页珍藏版)》请在冰点文库上搜索。
MFC学生信息管理完整
:
数据结构的实例教案_二叉树在信息加密中的应用
课程题目解读
甘肃政法学院
本科生实验报告
(数据库编程)
姓名:
郭加强
学院:
计算机科学学院
专业:
计算机科学与技术
班级:
计算机科学与技术一班
实验课程名称:
面向对象程序设计
实验日期:
2012年6月20日
指导教师及职称:
金涛老师
实验成绩:
开课时间:
2011-2012学年第二学期
甘肃政法学院实验管理中心印制
实验题目
ODBC数据库编程
小组合作
姓名
郭加强
班级
计本班
学号
201181110105
一、实验目的
1.学习使用VC++与数据库进行连接,创建数据库编程。
2.熟悉数据库编程的作用和使用方法。
二.实验环境
VisualC++6.0
三、实验内容与步骤
1.创建一个基于Clistview的单文本应用程序Ex_ODBC,用来操作ODBC源“用于MFCODBC的数据库”中指定的score表。
如图1所示:
图1
2.对于大量数据处理,采用数据库更为安全简便。
例如,对于学生成绩管理系统,常常需要处理学生的基本信息、课程成绩及与学生有关的院系、专业情况等,这些信息用数据库表的形式来描述更为清晰。
四、实验过程与分析
1.创建工作文件夹。
2.并建立数据库和数据表。
(1)启动数据库,选择新建文件,单击空数据库,弹出一个对话框,指定数据库名main.mdb。
单击创建按钮。
(2)双击“使用设计器创建表”,出现如图所示的表设计界面,其中单击数据类型框的下拉按钮,可在弹出的列表中选择合适的数据类型。
(3)保存建立的数据库和数据表。
(4)在数据库设计窗口中,双击score表,就可向数据表输入记录数据。
如图2所示:
图2
(5)在Windows“控制面板”的“管理工具”中,找到并运行“数据库(ODBC)”组件,弹出“ODBC数据源管理器”的对话框。
如图3所示:
图3
(6)加载数据库到VisualC++6.0联系,将实验中的main.mdb数据库导入。
(7)一直单击确定按钮,刚才创建的用户数据源就会被添加在“ODBC数据源管理器”的“用户数据源”列表中。
如图4所示:
图4
3.
(1)启动VisualC++6.0。
(2)用MFC AppWizard创建一个基于CListView的默认单文档应用程序Ex_ODBC。
在向导的第六步对话框中为CEx_ODBCView选定CListView基类。
如图5所示:
图5
(3)添加代码,编译并运行。
得到截图如图6所示:
图6
4.学生信息的添加、修改和删除
(1)添加对话框,创建对话框类CScoreDlg。
如图7所示,将添加的对话框的标题设为“课程成绩信息”,将对话框的字体改为“宋体,9号”。
将“OK”和“Cancel”按钮标题分别改为“确定”和“取消”。
图7
5.添加代码,并运行得到的截图如图8所示:
图8
6.视图类实验代码如下:
#if!
defined(AFX_EX_ODBCVIEW_H__67EB9D2E_5048_4026_880E_A41624015617__INCLUDED_)
#defineAFX_EX_ODBCVIEW_H__67EB9D2E_5048_4026_880E_A41624015617__INCLUDED_
#if_MSC_VER>1000
#pragmaonce
#endif//_MSC_VER>1000
classCEx_ODBCView:
publicCListView
{
protected:
//createfromserializationonly
CEx_ODBCView()。
DECLARE_DYNCREATE(CEx_ODBCView)
//Attributes
public:
CEx_ODBCDoc*GetDocument()。
//Operations
public:
//Overrides
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CEx_ODBCView)
public:
virtualvoidOnDraw(CDC*pDC)。
//overriddentodrawthisview
virtualBOOLPreCreateWindow(CREATESTRUCT&cs)。
protected:
virtualvoidOnInitialUpdate()。
//calledfirsttimeafterconstruct
virtualBOOLOnPreparePrinting(CPrintInfo*pInfo)。
virtualvoidOnBeginPrinting(CDC*pDC,CPrintInfo*pInfo)。
virtualvoidOnEndPrinting(CDC*pDC,CPrintInfo*pInfo)。
//}}AFX_VIRTUAL
//Implementation
public:
voidCEx_ODBCView:
:
UpdateListItemData()。
virtual~CEx_ODBCView()。
#ifdef_DEBUG
virtualvoidAssertValid()const。
virtualvoidDump(CDumpContext&dc)const。
#endif
protected:
//Generatedmessagemapfunctions
protected:
//{{AFX_MSG(CEx_ODBCView)
afx_msgvoidOnOpAdd()。
afx_msgvoidOnOpChange()。
afx_msgvoidOnOpDel()。
afx_msgvoidOnDblclk(NMHDR*pNMHDR,LRESULT*pResult)。
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
}。
#ifndef_DEBUG//debugversioninEx_ODBCView.cpp
inlineCEx_ODBCDoc*CEx_ODBCView:
:
GetDocument()
{return(CEx_ODBCDoc*)m_pDocument。
}
#endif
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
//MicrosoftVisualC++willinsertadditionaldeclarationsimmediatelybeforethepreviousline.
#endif//!
defined(AFX_EX_ODBCVIEW_H__67EB9D2E_5048_4026_880E_A41624015617__INCLUDED_)
7.资源类代码如下:
//Ex_ODBCView.cpp:
implementationoftheCEx_ODBCViewclass
//
#include"stdafx.h"
#include"Ex_ODBC.h"
#include"Ex_ODBCDoc.h"
#include"Ex_ODBCView.h"
#include"Scoreset.h"
#include"ScoreDlg.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__。
#endif
/////////////////////////////////////////////////////////////////////////////
//CEx_ODBCView
IMPLEMENT_DYNCREATE(CEx_ODBCView,CListView)
BEGIN_MESSAGE_MAP(CEx_ODBCView,CListView)
//{{AFX_MSG_MAP(CEx_ODBCView)
ON_COMMAND(ID_OP_ADD,OnOpAdd)
ON_COMMAND(ID_OP_CHANGE,OnOpChange)
ON_COMMAND(ID_OP_DEL,OnOpDel)
ON_NOTIFY_REFLECT(NM_DBLCLK,OnDblclk)
//}}AFX_MSG_MAP
//Standardprintingcommands
ON_COMMAND(ID_FILE_PRINT,CListView:
:
OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT,CListView:
:
OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW,CListView:
:
OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CEx_ODBCViewconstruction/destruction
CEx_ODBCView:
:
CEx_ODBCView()
{
//TODO:
addconstructioncodehere
}
CEx_ODBCView:
:
~CEx_ODBCView()
{
}
BOOLCEx_ODBCView:
:
PreCreateWindow(CREATESTRUCT&cs)
{
//TODO:
ModifytheWindowclassorstylesherebymodifying
//theCREATESTRUCTcs
cs.style|=LVS_REPORT。
returnCListView:
:
PreCreateWindow(cs)。
}
/////////////////////////////////////////////////////////////////////////////
//CEx_ODBCViewdrawing
voidCEx_ODBCView:
:
OnDraw(CDC*pDC)
{
CEx_ODBCDoc*pDoc=GetDocument()。
ASSERT_VALID(pDoc)。
//TODO:
adddrawcodefornativedatahere
}
voidCEx_ODBCView:
:
OnInitialUpdate()
{
CListView:
:
OnInitialUpdate()。
CListCtrl&m_ListCtrl=GetListCtrl()。
m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT)。
//LVS_EX_GRIDLINES)。
CScoreSetcSet。
cSet.Open()。
CODBCFieldInfofield。
//创建列表头
for(UINTi=0。
i i++) { cSet.GetODBCFieldInfo(i,field)。 m_ListCtrl.InsertColumn(i,field.m_strName,LVCFMT_LEFT,100)。 } cSet.Close()。 UpdateListItemData()。 //关闭记录集 //TODO: YoumaypopulateyourListViewwithitemsbydirectlyaccessing //itslistcontrolthroughacalltoGetListCtrl(). } ///////////////////////////////////////////////////////////////////////////// //CEx_ODBCViewprinting BOOLCEx_ODBCView: : OnPreparePrinting(CPrintInfo*pInfo) { //defaultpreparation returnDoPreparePrinting(pInfo)。 } voidCEx_ODBCView: : OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/) { //TODO: addextrainitializationbeforeprinting } voidCEx_ODBCView: : OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/) { //TODO: addcleanupafterprinting } ///////////////////////////////////////////////////////////////////////////// //CEx_ODBCViewdiagnostics #ifdef_DEBUG voidCEx_ODBCView: : AssertValid()const { CListView: : AssertValid()。 } voidCEx_ODBCView: : Dump(CDumpContext&dc)const { CListView: : Dump(dc)。 } CEx_ODBCDoc*CEx_ODBCView: : GetDocument()//non-debugversionisinline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CEx_ODBCDoc)))。 return(CEx_ODBCDoc*)m_pDocument。 } #endif//_DEBUG ///////////////////////////////////////////////////////////////////////////// //CEx_ODBCViewmessagehandlers voidCEx_ODBCView: : UpdateListItemData() { CListCtrl&m_ListCtrl=GetListCtrl()。 m_ListCtrl.DeleteAllItems()。 CScoreSetcSet。 cSet.m_strSort="studentno,courseno"。 cSet.Open()。 //添加列表项 intnItem=0。 CStringstr。 while(! cSet.IsEOF()) { for(UINTi=0。 i i++) { cSet.GetFieldValue(i,str)。 if(i==0) m_ListCtrl.InsertItem(nItem,str)。 else m_ListCtrl.SetItemText(nItem,i,str)。 } nItem++。 cSet.MoveNext()。 } cSet.Close()。 } voidCEx_ODBCView: : OnOpAdd() { //TODO: Addyourcommandhandlercodehere CScoreDlgdlg。 if(dlg.DoModal()==IDOK) {//先查找是否有同学号同课程的记录 CScoreSetcSet。 cSet.m_strFilter.Format("studentno='%s'ANDcourseno='%s'",dlg.m_strStuNO,dlg.m_strCourseNO)。 cSet.Open()。 if(! cSet.IsEOF()) { MessageBox("有相同的记录存在! ")。 cSet.Close()。 return。 } cSet.AddNew()。 cSet.m_studentno=dlg.m_strStuNO。 cSet.m_courseno=dlg.m_strCourseNO。 cSet.m_score=dlg.m_fScore。 cSet.m_credit=dlg.m_fCredit。 cSet.Update()。 cSet.Requery()。 cSet.Close()。 MessageBox("记录已添加! ")。 UpdateListItemData()。 } } voidCEx_ODBCView: : OnOpChange() { //TODO: Addyourcommandhandlercodehere MessageBox("双击要修改的列表项即可! ")。 } voidCEx_ODBCView: : OnOpDel() { //TODO: Addyourcommandhandlercodehere CListCtrl&m_ListCtrl=GetListCtrl()。 POSITIONpos。 pos=m_ListCtrl.GetFirstSelectedItemPosition()。 if(pos==NULL) { MessageBox("你还没有选中列表项! ")。 return。 } intnItem=m_ListCtrl.GetNextSelectedItem(pos)。 CStringstrItem,str。 strItem=m_ListCtrl.GetItemText(nItem,0)。 str.Format("你确实要删除%s列表项(记录)吗? ")。 if(IDOK! =MessageBox(str,"删除确认",MB_ICONQUESTION|MB_OKCANCEL)) return。 CStringstrStuNO=m_ListCtrl.GetItemText(nItem,0)。 CStringstrCourseNO=m_ListCtrl.GetItemText(nItem,1)。 CScoreSetinfoSet。 infoSet.m_strFilter.Format("studentno='%s'ANDcourseno='%s'",strStuNO,strCourseNO)。 infoSet.Open()。 if(! infoSet.IsEOF()) { CRecordsetStatusstatus。 infoSet.GetStatus(status)。 infoSet.Delete()。 if(status.m_lCurrentRecord==0) infoSet.MoveNext()。 else infoSet.MoveFirst()。 } if(infoSet.IsOpen()) infoSet.Close()。 MessageBox("当前指定的记录已删除! ")。 UpdateListItemData()。 } voidCEx_ODBCView: : OnDblclk(NMHDR*pNMHDR,LRESULT*pResult) { //TODO: Addyourcontrolnotificationhandlercodehere CListCtrl&m_ListCtrl=GetListCtrl()。 POSITIONpos。 pos=m_ListCtrl.GetFirstSelectedItemPosition()。 if(pos==NULL) { MessageBox("应双击要修改的列表项! ")。 return。 } intnItem=m_ListCtrl.GetNextSelectedItem(pos)。 CStringstrStuNO=m_ListCtrl.GetItemText(nItem,0)。 CStringstrCourseNO=m_ListCtrl.GetItemText(nItem,1)。 CScoreSetsSet。 sSet.m_strFilter.Format("studentno='%s'ANDcourseno='%s'",strStuNO,strCourseNO)。 sSet.Open()。 CScoreDlgdlg。 dlg.m_strCourseNO=sSet.m_courseno。 dlg.m_strStuNO=sSet.m_studentno。 dlg.m_fScore=sSet.m_score。 dlg.m_fCredit=sSet.m_credit。 if(IDOK! =dlg.DoModal()) { if(sSet.IsOpen())sSet.Close()。 return。 } sSet.Edit()。 sSet.m_score=dlg.m_fScore。 //只能修改学分 sSet.m_credit=dlg.m_fCredit。 //只能修改成绩 sSet.Update()。 sSet.Requery()。 if(sSet.IsOpen())sSet.Close()。 //更新列表视图 MessageBox("当前只能修改成绩和学分,修改成功! ")。 UpdateListItemData()。 *pResult=0。 } 8.实验添加学生信息对话框截图,如图9所示: 图9 五、实验总结 1,在建立数据库与数据表是应注意名称还有格式及其他选项。 2,在数据库与VC之间建立连接时,要注意类的添加还有选项的选择。 3,在建立对话框时要注意美观和功能的全面,信息的详细等。 4,编写代码时要注意头文件的使用,还有其他的一下小错误,如大小写,标点符号等。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MFC 学生 信息管理 完整