软件课程设计 中期报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
m_pConnection = NULL;
TRACE(_T("Database CreateInstance failed"));
}
if (!SUCCEEDED(m_pRecordset.CreateInstance(__uuidof(Recordset))))
{
m_pRecordset = NULL;
GetCollect
为了让更改能够动态在列表视图控件里动态显示,每次数据发生更改以后都需要调用CListCtrl的DeleteAllItems,然后再读取出记录集里面的内容。
例如OnModify函数的实现(只列出了部分完整的见代码的OnModify函数):
判断记录集是否已经打开
if (!(m_pRecordset->State & adStateOpen))
_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)
3.1.1
ADO简介
微软公司的ADO(ActiveX Data Objects)是一个用于存取数据源的COM组件。它提供了编程语言和统一数据访问方式OLE DB的一个中间层。允许开发人员编写访问数据的代码而不用关心数据库是如何实现的,而只用关心到数据库的连接。
使用ADO操作数据库的步骤:
(1)COM库的初始化
{
AfxMessageBox((_T("记录集未打开。")));
return;
}
获取记录集的当前位置
CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST);
POSITION pos = pListCtrl->GetFirstSelectedItemPosition();
ASSERT(m_pRecordset != NULL);
ASSERT(lpszSource != NULL);
ASSERT(AfxIsValidString(lpszSource));
//打开记录集
try
{
return (SUCCEEDED(m_pRecordset->Open(_variant_t(lpszSource),
return;
}
(5)执行SQL命令
m_pCommand->put_ActiveConnection(_variant_t((IDispatch*)m_pConnection));
m_pCommand->ActiveConnection=m_pConnection;
CString strCommand= L"CREATE TABLE Persons(Id_P int,LastName varchar(255), FirstNamevarchar(255),Address varchar(255),City varchar(255))";//使用sql命令创建新表
//打开数据库连接
try
{
return SUCCEEDED(m_pConnection->Open(_bstr_t(lpszConnect),
_T(""), _T(""), nOptions));
}
catch (_com_error& e)
{
TRACE(_T("%s\n"), e.ErrorMessage());
}
(4)打开记录集和数据库连接
为了方便打开数据库和记录集构造了两个函数
BOOL CMYDlg::OpenRecordset(LPCTSTR lpszSource,long nCursorType, long nLockType, long nOptions)
{
ASSERT(m_pConnection != NULL);
m_pCommand->CommandType=adCmdText;
m_pCommand->CommandText = _bstr_t(strCommand);
try
{
m_pCommand->Execute(NULL, NULL, adCmdUnknown);
由于之前我们对MFC也不太了解,所以花了一些时间学习了如何新建MFC工程,如何添加消息响应函数,如何添加对话框资源,如何添加事件处理函数,如何在控件里添加内容等等。其中最关键的是登录对话框的设计,使用ADO技术访问数据库。
3.
3.1
在对话框中主要采用了列表框控件其中主要用到的函数为GetDlgItem(),GetFirstSelectedItemPosition(),GetNextSelectedItem(),DeleteAllItems(),InsertItem(),SetItemText(),SetItemState(),具体作用见下表
使用AfxOleInit()来初始化COM库,通常在CWinApp::InitInstance()的重载函数中完成。在InitInstance()函数中添加
if(!AfxOleInit()) //这就是初始化COM库
{
AfxMessageBox(L"OLE初始化出错!");
return FALSE;
return FALSE;
}
}
打开数据库
BOOL CMYDlg::OpenDatabase(LPCTSTR lpszConnect, long nOptions)
{
ASSERT(m_pConnection != NULL);
ASSERT(lpszConnect != NULL);
ASSERT(AfxIsValidString(lpszConnect));
插入一行中需要显示的内容
SetItemState()
设置列表一行的状态(是否被选中)
InsertItem()
在列表中插入一行
由于在任务中使用的ADO访问数据库,所以具体的查询排序添加等等函数都不需要自己写,只需要直接调用系统的函数就可以了。主要的函数包括OnAddclass()(添加班级记录该函数还未实现),OnAddcourse()(添加课程),OnFindname()(按姓名查找),OnFindnumber()(按学号查找),OnAddstudent()(添加学生信息),OnAll()(显示全部记录),OnDelete()(删除一个记录),OnModify()(修改学生信息),OnSortage()(按年龄排序)。中间所有的操作均采用ADO提供的方法来实现。
函数名
作用
关键的ADO方法
OnAddstudent
添加学生信息
AddNew
OnModify
修改学生信息
PutCollect
OnFindName
按姓名查找
Find
OnFindNumber
按学号查找
Find
OnSortage
按年龄排序
Open
OnDelete
删除一个记录
Delete
OnAll
显示全部记录
TRACE(_T("Recordset CreateInstance Failed!"));
}
if (!SUCCEEDED(m_pCommand.CreateInstance(__uuidof(Command))))
{
m_pCommand = NULL;
TRACE(_T("Command CreateInstance Failed!"));
{
AfxMessageBox(_T("数据库打开失败。"));
return;
}
//打开记录集
CString strSource = _T("SELECT * FROM MyTable");
if (!OpenRecordset(strSource))
{
AfxMessageBox(_T("记录集打开失败。"));
华中科技大学电子科学与技术系
软件课程设计
中期进展报告
题目:学生成绩管理系统
组长:
组员:
组员:
组员:
指导老师:
1.
我们组选的题目是:学生成绩管理系统。中期基本完成了所要求的大部分功能,可以添加、修改、删除、查找、排序,并且设计了登陆界面。但是仍然存在很多不足的地方,比如说不能保存排序得到的结果,不能新建表,使用ADO访问数据库的时候遇到了很多困难。
if (pos == NULL)
{
return;
}
int nItem = pListCtrl->GetNextSelectedItem(pos);//获取当前选中的位置
CModifyDlg dlg; //实例化修改对话框的对象
dlg.m_Name = pListCtrl->GetItemText(nItem, 1); //获取修改前的内容
GetDlgItem()
得到一个指向控件的指针
GetFirstSelectedItemPosition()
列表视图控件中获取第一个选择项的位置
GetNextSelectedItem()
返回列表视图控件中被选择的下一项的索引值
DeleteAllItems()
删除控件内的所有内容
SetItemText()
打开登陆界面,可以输入学号和密码登陆;添加学生信息部分可以添加和修改学生的姓名、学号、年龄、各科成绩,也可以添加班级;修改部分除了和添加部分相同的项目基本相同;查找部分可以按学号或姓名查找;排序可以按照各科成绩或学号排序;删除部分可以删除整个学生信息;“显示全部”部分可以显示全部的学生信息。
2.
在完成本次任务的过程中,为了使用VC++实现界面可视化,我们首先自学了关于MFC的一些知识,并且了解了visual studio 2008的基本操作。并且在后续的过程中使用了ADO技术访问数据库。
return FALSE;
}
}
另外还有对应的关闭数据库和记录集的函数。
//打开数据库
CString strConnect = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= MY.mdb");
if (!OpenDatabase(strConnect))
if (dlg.DoModal() != IDOK)
{
return;
}
//在响应IDOK时候文本控件的值已经被更新
m_pRecordset->MoveFirst(); //移动到第一条记录
m_pRecordset->Move((long)nItem); //移动到选中记录的位置
m_pRecordset->PutCollect(_variant_t(_T("SNAME")), //修改记录的值
strText.Format(_T("%s"), strName);
pListCtrl->SetItemText(n, 1, strText);//设置一行的第一个子项的值
n++;
m_pRecordset->MoveNext();
}
return TRUE;
对程序中可能出现的算法的介绍,以及算法的实现方法。注意格式,要活用格式刷。
}
(2)用#import指令引入ADO类型库
我们在stdafx.h中加入如下语句:
#import"c:\program files\common files\system\ado\msado15.dll"\
no_namespace\rename("EOF","adoEOF")
(3)创建Connection对象并连接数据库首先我们需要添加一个指向Connection对象的指针:
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
_CommandPtr m_pCommand;
创建连接
if (!SUCCEEDED(m_pConnection.CreateInstance(__uuidof(Connection))))
{
strName = varValue.bstrVal;
}
else
{
strName = _T("");
}
//刷新ListCtrl
CString strText = _T("");
strText.Format(_T("%d"), n + 1);
pListCtrl->InsertItem(n, strText);//插入一行
m_pConnection.GetInterfacePtr(),
(CursorTypeEnum)nCursorType,
(LockTypeEnum)nLockType,
nOptions)));
}
catch(_com_error e)
{wenku.baidu.com
TRACE(_T("%s\n"), e.ErrorMessage());
相关文档
最新文档