您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 设计及方案 > 软件课程设计 中期报告
华中科技大学电子科学与技术系软件课程设计中期进展报告题目:学生成绩管理系统组长:组员:组员:组员:指导老师:1目录1.设计任务....................................................12.基本思路....................................................13.方案设计....................................................13.1主要算法说明................................................................................................................................13.1.1ADO基本介绍......................................................................................................................43.1.2ADO中的主要函数使用方法..............................................................................................83.2程序框架设计..............................................................................................................................114.程序的源代码...............................................115.调试过程中出现的问题及相应解决办法.........................166.总结.......................................................17参考文献......................................................1711.设计任务我们组选的题目是:学生成绩管理系统。中期基本完成了所要求的大部分功能,可以添加、修改、删除、查找、排序,并且设计了登陆界面。但是仍然存在很多不足的地方,比如说不能保存排序得到的结果,不能新建表,使用ADO访问数据库的时候遇到了很多困难。打开登陆界面,可以输入学号和密码登陆;添加学生信息部分可以添加和修改学生的姓名、学号、年龄、各科成绩,也可以添加班级;修改部分除了和添加部分相同的项目基本相同;查找部分可以按学号或姓名查找;排序可以按照各科成绩或学号排序;删除部分可以删除整个学生信息;“显示全部”部分可以显示全部的学生信息。2.基本思路在完成本次任务的过程中,为了使用VC++实现界面可视化,我们首先自学了关于MFC的一些知识,并且了解了visualstudio2008的基本操作。并且在后续的过程中使用了ADO技术访问数据库。由于之前我们对MFC也不太了解,所以花了一些时间学习了如何新建MFC工程,如何添加消息响应函数,如何添加对话框资源,如何添加事件处理函数,如何在控件里添加内容等等。其中最关键的是登录对话框的设计,使用ADO技术访问数据库。3.方案设计3.1主要算法说明在对话框中主要采用了列表框控件其中主要用到的函数为GetDlgItem(),GetFirstSelectedItemPosition(),GetNextSelectedItem(),DeleteAllItems(),InsertItem(),SetItemText(),SetItemState(),具体作用见下表GetDlgItem()得到一个指向控件的指针GetFirstSelectedItemPosition()列表视图控件中获取第一个选择项的位置GetNextSelectedItem()返回列表视图控件中被选择的下一项的索引值2DeleteAllItems()删除控件内的所有内容SetItemText()插入一行中需要显示的内容SetItemState()设置列表一行的状态(是否被选中)InsertItem()在列表中插入一行由于在任务中使用的ADO访问数据库,所以具体的查询排序添加等等函数都不需要自己写,只需要直接调用系统的函数就可以了。主要的函数包括OnAddclass()(添加班级记录该函数还未实现),OnAddcourse()(添加课程),OnFindname()(按姓名查找),OnFindnumber()(按学号查找),OnAddstudent()(添加学生信息),OnAll()(显示全部记录),OnDelete()(删除一个记录),OnModify()(修改学生信息),OnSortage()(按年龄排序)。中间所有的操作均采用ADO提供的方法来实现。函数名作用关键的ADO方法OnAddstudent添加学生信息AddNewOnModify修改学生信息PutCollectOnFindName按姓名查找FindOnFindNumber按学号查找FindOnSortage按年龄排序OpenOnDelete删除一个记录DeleteOnAll显示全部记录GetCollect为了让更改能够动态在列表视图控件里动态显示,每次数据发生更改以后都需要调用CListCtrl的DeleteAllItems,然后再读取出记录集里面的内容。例如OnModify函数的实现(只列出了部分完整的见代码的OnModify函数):判断记录集是否已经打开if(!(m_pRecordset-State&adStateOpen)){AfxMessageBox((_T(记录集未打开。)));return;}获取记录集的当前位置3CListCtrl*pListCtrl=(CListCtrl*)GetDlgItem(IDC_LIST);POSITIONpos=pListCtrl-GetFirstSelectedItemPosition();if(pos==NULL){return;}intnItem=pListCtrl-GetNextSelectedItem(pos);//获取当前选中的位置CModifyDlgdlg;//实例化修改对话框的对象dlg.m_Name=pListCtrl-GetItemText(nItem,1);//获取修改前的内容if(dlg.DoModal()!=IDOK){return;}//在响应IDOK时候文本控件的值已经被更新m_pRecordset-MoveFirst();//移动到第一条记录m_pRecordset-Move((long)nItem);//移动到选中记录的位置m_pRecordset-PutCollect(_variant_t(_T(SNAME)),//修改记录的值_variant_t(dlg.m_Name));m_pRecordset-Update();//更新记录集中的内容while(!m_pRecordset-adoEOF){varValue=m_pRecordset-GetCollect(_variant_t(_T(SNAME)));if(varValue.vt!=VT_NULL){strName=varValue.bstrVal;}else{strName=_T();}4//刷新ListCtrlCStringstrText=_T();strText.Format(_T(%d),n+1);pListCtrl-InsertItem(n,strText);//插入一行strText.Format(_T(%s),strName);pListCtrl-SetItemText(n,1,strText);//设置一行的第一个子项的值n++;m_pRecordset-MoveNext();}returnTRUE;对程序中可能出现的算法的介绍,以及算法的实现方法。注意格式,要活用格式刷。3.1.1ADO基本介绍ADO简介微软公司的ADO(ActiveXDataObjects)是一个用于存取数据源的COM组件。它提供了编程语言和统一数据访问方式OLEDB的一个中间层。允许开发人员编写访问数据的代码而不用关心数据库是如何实现的,而只用关心到数据库的连接。使用ADO操作数据库的步骤:(1)COM库的初始化使用AfxOleInit()来初始化COM库,通常在CWinApp::InitInstance()的重载函数中完成。在InitInstance()函数中添加if(!AfxOleInit())//这就是初始化COM库{AfxMessageBox(LOLE初始化出错!);returnFALSE;}(2)用#import指令引入ADO类型库我们在stdafx.h中加入如下语句:#importc:\programfiles\commonfiles\system\ado\msado15.dll\5no_namespace\rename(EOF,adoEOF)(3)创建Connection对象并连接数据库首先我们需要添加一个指向Connection对象的指针:_ConnectionPtrm_pConnection;_RecordsetPtrm_pRecordset;_CommandPtrm_pCommand;创建连接if(!SUCCEEDED(m_pConnection.CreateInstance(__uuidof(Connection)))){m_pConnection=NULL;TRACE(_T(DatabaseCreateInstancefailed));}if(!SUCCEEDED(m_pRecordset.CreateInstance(__uuidof(Recordset)))){m_pRecordset=NULL;TRACE(_T(RecordsetCreateInstanceFailed!));}if(!SUCCEEDED(m_pCommand.CreateInstance(__uuidof(Command)))){m_pCommand=NULL;TRACE(_T(CommandCreateInstanceFailed!));}(4)打开记录集和数据库连接为了方便打开数据库和记录集构造了两个函数BOOLCMYDlg::OpenRecordset(LPCTSTRlpszSource,longnCursorType,longnLockType,longnOptions){6ASSERT(m_pConnection!=NULL);ASSERT(m_pRecordset!=NULL);ASSERT(lpszSource!=NULL);ASSERT(AfxIsValidString(lpszSource));//打开记录集try{return(SUCCEEDED(m_pRecordset-Open(_variant_t(lpszSource),m_pConnection.GetInterfacePtr(),(CursorTypeEnum)nCursorType,(LockTypeEnum)nLockType,nOptions)));}catch(_com_errore){TRACE(_T(%s\n),e.ErrorMessage());returnFALSE;}}打开数据库BOOLCMYDlg::OpenDatabase(LPCTSTRlpszConnect,longnOptions){ASSERT(m_pConnection!=NULL);ASSERT(lpszConnect!=NULL);ASSERT(AfxIsValidString(lpszConnect));//打开数据库连接try
本文标题:软件课程设计 中期报告
链接地址:https://www.777doc.com/doc-3490677 .html