多媒体数据库应用程序图像的操作资料.docx

上传人:b****6 文档编号:7337280 上传时间:2023-01-23 格式:DOCX 页数:13 大小:88.88KB
下载 相关 举报
多媒体数据库应用程序图像的操作资料.docx_第1页
第1页 / 共13页
多媒体数据库应用程序图像的操作资料.docx_第2页
第2页 / 共13页
多媒体数据库应用程序图像的操作资料.docx_第3页
第3页 / 共13页
多媒体数据库应用程序图像的操作资料.docx_第4页
第4页 / 共13页
多媒体数据库应用程序图像的操作资料.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

多媒体数据库应用程序图像的操作资料.docx

《多媒体数据库应用程序图像的操作资料.docx》由会员分享,可在线阅读,更多相关《多媒体数据库应用程序图像的操作资料.docx(13页珍藏版)》请在冰豆网上搜索。

多媒体数据库应用程序图像的操作资料.docx

多媒体数据库应用程序图像的操作资料

《多媒体开发与编程》

课程设计报告

 

题目:

多媒体数据库应用程序

专业:

软件工程

学号:

1315925186

姓名:

张聪聪

指导教师:

李蕊

 

2016年 5月 27 日

 

一、课程设计目的

理解ODBC的基本原理,并且掌握基于Access2003设计简单多媒体数据库应用程序,并根据对应的数据显示相应的要求。

二、课程设计内容

多媒体数据库应用程序——图像的操作

三、实验要求

设计要求当运行该程序时,首先显示数据库的信息(已经添加的或者即时添加的)会显示基本信息,性别,年龄,学号,姓名等基本信息以及信息人的头像。

然后可以在该信息基础上修改信息,修改信息删除等各项功能的操作。

数据的存放利用结构体数组来实现,完成设计任务并书写课程设计报告

四、设计思路

基本数据库信息管理系统是一个管理数据的服务平台,它包括添加信息,修改信息,删除信息等功能。

分析任务书中的要求,根据各项要求给出相应的代码完善。

主要根据数据库设计的,所以,基本信息都应该在数据库中找到,图片的显示是重点,由于数据库识别的是BMP格式,以大二进制保存在数据库中,所以显示的时候应该先将图片的格式转换成BMP格式,不能直接修改图片的后缀名而进行。

五、程序源代码

1,为不同的成员函数之间传递数据,为CMyDB2View声明数据成员代码如下

classCMyDB2View:

publicCRecordView

public:

CMyDB2Doc*GetDocument();

HBITMAPm_hPhotoBmp;

DWORDm_nFileLength;

BOOLm_RecordAddNew;

BOOLm_RecordModify;

char*m_pBmpBuffer;

}

2,初始化m_pSet对象代码如下:

classCMyDB2View:

:

CMyDB2View():

CRecordView(CMyDB2View:

:

IDD)

{

m_pSet=NULL;

}

3,在视图的OnInitialUpdate()函数中初始化部分成员变量代码如下:

voidCMyDB2View:

:

OnInitialUpdate()

{

m_pSet=&GetDocument()->m_myDB2Set;

CRecordView:

:

OnInitialUpdate();

GetParentFrame()->RecalcLayout();

ResizeParentToFit();

CStringstrFileName="yyy.bmp";

chartmpPath[_MAX_PATH+1];

GetTempPath(_MAX_PATH,tmpPath);

strFileName.Insert(0,tmpPath);

CFileoutFile(strFileName,CFile:

:

modeCreate|CFile:

:

modeWrite);

LPSTRbuffer=(LPSTR)GlobalLock(m_pSet->m_column5.m_hData);

outFile.WriteHuge(buffer,m_pSet->m_column5.m_dwDataLength);

GlobalUnlock(m_pSet->m_column5.m_hData);

outFile.Close();

LoadBmpFile(strFileName);

m_hPhotoBmp=TransToBmp();

m_Butt_Add.EnableWindow(TRUE);

m_Butt_Edit.EnableWindow(TRUE);

m_Butt_Del.EnableWindow(TRUE);

m_Butt_QR.EnableWindow(FALSE);

m_Butt_Pic.EnableWindow(FALSE);

m_Butt_CX.EnableWindow(FALSE);

m_RecordAddNew=FALSE;

m_RecordModify=FALSE;

}

4,加载指定图像文件代码如下:

BOOLCMyDB2View:

:

LoadBmpFile(constchar*pBmpPathname)

{

CFilefile;

if(!

file.Open(pBmpPathname,CFile:

:

modeRead))

returnFALSE;

m_nFileLength=file.GetLength();

m_pBmpBuffer=newchar[m_nFileLength+1];

if(!

m_pBmpBuffer)

returnFALSE;

if(file.ReadHuge(m_pBmpBuffer,m_nFileLength)!

=m_nFileLength)

returnFALSE;

returnTRUE;

}

5,函数TransToBmp()生成位图对象代码如下:

HBITMAPCMyDB2View:

:

TransToBmp()

{

HBITMAPhBmp;

LPSTRhDIB,lpBuffer=m_pBmpBuffer;

LPVOIDlpDIBBits;

BITMAPFILEHEADERbmfHeader;

DWORDbmfHeaderLen;

//获得位图的头信息

bmfHeaderLen=sizeof(bmfHeader);

strncpy((LPSTR)&bmfHeader,(LPSTR)lpBuffer,bmfHeaderLen);

//根据获得的信息头判断是否是位图

if(bmfHeader.bfType!

=(*(WORD*)"BM"))returnNULL;

//获取位图数据

hDIB=lpBuffer+bmfHeaderLen;

BITMAPINFOHEADER&bmiHeader=*(LPBITMAPINFOHEADER)hDIB;

BITMAPINFO&bmInfo=*(LPBITMAPINFO)hDIB;

lpDIBBits=(lpBuffer)+((BITMAPFILEHEADER*)lpBuffer)->bfOffBits;

//创建位图

CClientDCdc(this);

hBmp=CreateDIBitmap(dc.m_hDC,&bmiHeader,

CBM_INIT,lpDIBBits,&bmInfo,DIB_RGB_COLORS);

returnhBmp;

}

6,“添加”事件的代码如下:

voidCMyDB2View:

:

OnAdd()

{

EnableEditCom(true);

IniData();

m_Butt_Add.EnableWindow(FALSE);

m_Butt_Edit.EnableWindow(FALSE);

m_Butt_Del.EnableWindow(FALSE);

m_Butt_QR.EnableWindow(FALSE);

m_Butt_CX.EnableWindow(TRUE);

m_Butt_Pic.EnableWindow(TRUE);

m_pSet->CanAppend();

m_pSet->AddNew();

//m_pSet->GetDefaultSQL();

//m_pSet->DoFieldExchange(FALSE);

UpdateData(FALSE);

m_RecordAddNew=TRUE;

}

7,编辑框控件代码如下:

voidCMyDB2View:

:

EnableEditCom(boolFlag)

{

m_XH.EnableWindow(Flag);

m_XM.EnableWindow(Flag);

m_NL.EnableWindow(Flag);

m_XB.EnableWindow(Flag);

}

8,InitData()用于初始化空间数据代码如下:

voidCMyDB2View:

:

IniData()

{

m_XH.SetWindowText("");

m_XM.SetWindowText("");

m_NL.SetWindowText("");

m_XB.SetCurSel(-1);

ClearPhoto();

9,ClearPhoto()函数代码如下:

voidCMyDB2View:

:

ClearPhoto()

{

if(m_hPhotoBmp)

{

DeleteObject(m_hPhotoBmp);

m_hPhotoBmp=NULL;

Invalidate();

}

if(m_pBmpBuffer)

{

deletem_pBmpBuffer;

m_pBmpBuffer=NULL;

}

}

10,几个按钮的OnChange()事件的相应代码:

voidCMyDB2View:

:

OnChangeEditXh()

{

m_Butt_QR.EnableWindow(TRUE);

}

voidCMyDB2View:

:

OnChangeEditXm()

{

m_Butt_QR.EnableWindow(TRUE);

}

voidCMyDB2View:

:

OnChangeEditNl()

{

m_Butt_QR.EnableWindow(TRUE);

}

voidCMyDB2View:

:

OnSelchangeComboXb()

{

m_Butt_QR.EnableWindow(TRUE);

}

11,浏览照片的响应函数代码如下:

voidCMyDB2View:

:

OnBUTTONPic()

{

staticcharBASED_CODEszFilter[]="BMPFiles(*.bmp)|*.bmp||";

CFileDialogdlg(TRUE,"BMP",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter);

if(dlg.DoModal()==IDOK)

{

CStringpathname=dlg.GetPathName();

ClearPhoto();

LoadBmpFile(pathname);

m_hPhotoBmp=TransToBmp();

m_Butt_QR.EnableWindow(TRUE);

Invalidate();

}

}

视图的OnPaint()函数代码如下:

voidCMyDB2View:

:

OnPaint()

{

CPaintDCdc(this);

if(!

m_hPhotoBmp)

return;

CWnd*hwnd=GetDlgItem(IDC_Picture);

RECTrect;

hwnd->GetClientRect(&rect);

HBITMAPOldBitmap;

CDCMemDC;

MemDC.CreateCompatibleDC(hwnd->GetDC());

OldBitmap=(HBITMAP)MemDC.SelectObject(m_hPhotoBmp);

BITMAPbm;

GetObject(m_hPhotoBmp,sizeof(BITMAP),&bm);

hwnd->GetDC()->StretchBlt(rect.left,rect.top,rect.right,rect.bottom,&MemDC,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);

MemDC.SelectObject(OldBitmap);

}

12,修改事件函数的响应代码如下:

voidCMyDB2View:

:

OnEdit()

{

EnableEditCom(true);

m_Butt_Add.EnableWindow(FALSE);

m_Butt_Edit.EnableWindow(FALSE);

m_Butt_Del.EnableWindow(FALSE);

m_Butt_QR.EnableWindow(FALSE);

m_Butt_Pic.EnableWindow(TRUE);

m_Butt_CX.EnableWindow(TRUE);

m_RecordModify=TRUE;

}

13,确认事件响应代码如下:

voidCMyDB2View:

:

OnButtonQr()

{

UpdateData(TRUE);

m_pSet->m_column5.m_dwDataLength=m_nFileLength;

m_pSet->m_column5.m_hData=m_pBmpBuffer;

m_pSet->SetFieldDirty(&m_pSet->m_column5);

m_pSet->SetFieldNull(&m_pSet->m_column5,FALSE);

if(m_RecordAddNew)

{

m_pSet->Update();

}

elseif(m_RecordModify)

{

m_pSet->Edit();

m_pSet->Update();

}

m_Butt_QR.EnableWindow(FALSE);

m_Butt_Add.EnableWindow(TRUE);

m_Butt_Edit.EnableWindow(TRUE);

m_Butt_Del.EnableWindow(TRUE);

}

撤销事件代码如下:

voidCMyDB2View:

:

OnButtonCx()

{

UpdateData(FALSE);

m_pSet->CancelUpdate();

EnableEditCom(FALSE);

m_Butt_Add.EnableWindow(TRUE);

m_Butt_Edit.EnableWindow(TRUE);

m_Butt_Del.EnableWindow(TRUE);

m_Butt_Pic.EnableWindow(FALSE);

m_Butt_QR.EnableWindow(FALSE);

m_Butt_CX.EnableWindow(FALSE);

}

14,删除按钮的响应函数代码:

voidCMyDB2View:

:

OnDelete()

{

if(MessageBox("确实要删除吗?

","删除",MB_YESNO|MB_ICONQUESTION)==IDYES)

{

m_pSet->Delete();

UpdateData(FALSE);

}

}

15,导航按钮响应函数代码如下:

BOOLCMyDB2View:

:

OnMove(UINTnIDMoveCommand)

{

CRecordView:

:

OnMove(nIDMoveCommand);

CStringstrFileName="yyy.bmp";

chartmpPath[_MAX_PATH+1];

GetTempPath(_MAX_PATH,tmpPath);

strFileName.Insert(0,tmpPath);

CFileoutFile(strFileName,CFile:

:

modeCreate|CFile:

:

modeWrite);

LPSTRbuffer=(LPSTR)GlobalLock(m_pSet->m_column5.m_hData);

outFile.WriteHuge(buffer,m_pSet->m_column5.m_dwDataLength);

GlobalUnlock(m_pSet->m_column5.m_hData);

outFile.Close();

LoadBmpFile(strFileName);

m_hPhotoBmp=TransToBmp();

Invalidate();

returnTRUE;

returnCRecordView:

:

OnMove(nIDMoveCommand);

}

六、程序运行结果及分析

基本记录显示及信息

删除操作

修改及确认

七、课程设计总结心得:

两周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。

在设计过程中,和同学们相互探讨,相互学习,相互监督。

学到了很多,加深了对access数据库的理解。

回顾起此次课程设计,至今我仍感慨颇多,的确,从拿到老师给我们的题目,然后老师简单的阐述我们该做些什么,该完成些什么的时候,我就觉得这个课程设计是很有挑战的,因为我知道平时自己学的知识不是很牢固,这些做起来肯定很棘手。

事实验证了我的想法。

在整整两星期的日子里,可以说得是苦多于甜,由于对相关知识所学甚少,可以说做起设计来是一片茫然。

在设计的过程中遇到问题,可以说得是困难重重,遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

看着那些陌生的代码和程序,真的不知道该怎么办。

但是得到了同学的热心帮助,在他们的讲解下试着去看懂代码,在这期间我也弄懂了不少问题和知识。

由于自己并没多少知识,别人可以说是通过此次课程设计巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,而我呢,只能说是从这次课程设计中重新审视了自己,终于发现自己对所学知识的严重不足,这也给我提了个醒,没知识终究将是一事无成。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1