VC++软件课程设计报告.doc

上传人:文库蛋蛋多 文档编号:2385774 上传时间:2023-02-17 格式:DOC 页数:24 大小:498KB
返回 下载 相关 举报
VC++软件课程设计报告.doc_第1页
第1页 / 共24页
VC++软件课程设计报告.doc_第2页
第2页 / 共24页
VC++软件课程设计报告.doc_第3页
第3页 / 共24页
VC++软件课程设计报告.doc_第4页
第4页 / 共24页
VC++软件课程设计报告.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《VC++软件课程设计报告.doc》由会员分享,可在线阅读,更多相关《VC++软件课程设计报告.doc(24页珍藏版)》请在三一办公上搜索。

1、通信与信息工程学院2010 /2011 学年 第 2 学期课程设计 实验报告模 块 名 称 VC+软件设计专 业 电子信息工程 学 生 班 级 B090110 学 生 学 号 学 生 姓 名 指 导 教 师 董恒 等 日 期 2012 年 5 月 实验内容 本课程设计分成练习题和综合题两部分。基础练习题11道中每个学生选择5个完成,要求如下:必做:1;2,3选择其一;4,5选择其一;6- 11选择其二。综合课题任选一道。一 、 练习题:1、基本环境调试将例程1用VC+打开,修改错误使程序能够运行。理解编译错误,运行错误等。2、文件操作写一个档案文件保存以下内容:学生姓名,性别,年龄,家庭住址,

2、电话,电子邮件,爱好等。再以上基础上进行该文件的读出并可编辑浏览显示。3、图形编程提供一个图形工具界面,让用户能够画出直线,椭圆,多边形等几何元素,结果可以保存并可读出。4、字符串操作能够从磁盘上选择打开文本文档,读入所有内容并显示,统计所有的字符数目,单词数目,中文字符串的数目。5、动态链接库目的:了解MFC支持的三种动态链接库:Win32DLL,MFC常规DLL, MFC扩展库。掌握封装DLL的基本方法。二、综合题:文件编辑创建一个多文档工程,实现对于磁盘文件的浏览,编辑等功能。能够以文本文件,二进制文件方式打开文件;支持剪贴板功能;支持搜索,查找,替换功能;支持文件定位;基本步骤:(1)

3、数据库后台设计,数据准备;(2)界面设计;(3)功能实现;(4)测试。实验环境VC+ 6.0实验步骤 基础题题目1 基本环境调测1.1实验目的:该程序计算任意数目以内的素数并且输出,要输入范围参数。修改给出的这段程序,使之能够运行,理解编译错误,运行错误等。1.2程序说明:本题是一道改错题,根据已经给出的例程1进行改错及完善的操作。打开VC+6.0,将例程1打开,点编译时会提示有根据错误所在行数,分析代码修改代码,其中的一个错误是error 是C2106: = : left operand must be l-value混淆了逻辑的等于号和赋值的等号;还有的error 是C2181: ille

4、gal else without matching if,if少了一个配套的大括号。重新编译,链接都没有错误,在运行的时候,当输入100,200等较大的数求所有素数时出现下面的状况:只需将存放素数的数组容量变大,变为Primes200或更大1.3测试结果:总结分析:在调试的过程中,通过双击错误提示很轻松的将前两个编译错误很容易改出来了,存放素数的数组定义的太小而导致的问题则比较隐蔽,通过这个题目我对compiling,linking,build有了进一步的理解。1.4程序:void CFund1Dlg:OnButton1() UpdateData();int Primes200;/存放素数的数

5、组.int index=0; /简单的求素数算法.bool flag=true;for(int m=2;m=m_limit;m+) for(int i=2;im;i+)if(m%i=0)flag=false;break;elseflag=true;if(flag=true)Primesindex+=m; CWnd *pWnd=GetDlgItem(IDC_STATICOUTPUT);CString str;str.Format(%d以内的素数有%d个:nn,m_limit,index);for(int i=0;iSetWindowText(str);题目2 文件操作2.1实验目的1) 熟练掌握

6、文件操作,学会用Write() 函数和Read()函数写文件和读文件2) 学会建立工程提供比较直观的对话框界面供浏览2.2程序说明: 系统提供了一个控件面板,用鼠标选中我们需要的控件,将其放置对话框,设计出我们需要的程序界面。然后在建立类向导中为控件关联一个变量,分别为m_name,m_age,m_phone,m_email,m_address,m_hoppy,均为Cstring类型。然后就是编写控件消息处理函数,我们需要编写的是void CMyDlg:OnSave() ,void CMyDlg:OnOpen() ,分别对应控件“打开”“保存”,还需要编写voidCMyDlg:Display(

7、StuInfo *si)显示函数。这样,这个程序的基本功能就满足要求了。2.3流程图:程序窗口输入学生信息保存信息输入结束修改信息打开信息无误YN2.4测试结果:总结分析:本题主要考察要求的是我们能否学会建立工程提供比较直观的对话框界面供浏览,并编写相应的事件函数,以及熟练掌握文件操作,学会用Write() 函数和Read()函数写文件和读文件。2.5关键程序:/显示函数void CMyDlg:Display(StuInfo *si)/StuInfo si=*m_StuIndex;m_name=si-name;m_age=si-age;m_phone=si-phone;m_email=si-e

8、mail;m_hoppy=si-hoppy;m_address=si-address;UpdateData(FALSE); /UpdateData(FALSE)是将控件的关联变量的值传给控件并改变控件状态/保存函数void CMyDlg:OnSave() / TODO: Add your control notification handler code hereUpdateData(); /UpdateData() 是MFC的窗口函数,用来刷新数据的StuInfo si;memset(&si,0,sizeof(StuInfo); /memset() 函数常用于内存空间初始化strcpy(si

9、.name,m_name);strcpy(si.phone,m_phone);strcpy(si.email,m_email);strcpy(si.address,m_address);strcpy(si.hoppy,m_hoppy);strcpy(si.age,m_age);/ write into the fileCFileDialog fileDlg(FALSE);fileDlg.m_ofn.lpstrFilter=Stud Info(*.si)0*.si0All Files(*.*)0*.*00;fileDlg.m_ofn.lpstrDefExt=si;if(IDOK=fileDlg.

10、DoModal()CFile file(fileDlg.GetFileName(), CFile:modeCreate | CFile:modeWrite);file.Write(&si, sizeof(StuInfo);file.Close();/打开文件函数void CMyDlg:OnOpen() / TODO: Add your control notification handler code here CFileDialog fileDlg(TRUE); /构造对话框对象(FALSE)表示保存(TRUE)表示打开fileDlg.m_ofn.lpstrFilter = Stud Inf

11、o(*.si)0*.si0All Files(*.*)0*.*00;if(IDOK=fileDlg.DoModal()/DoModal负责对模态话框的创建和撤销CFile file(fileDlg.GetFileName(), CFile:modeRead);StuInfo si;file.Read(&si,sizeof(StuInfo);file.Close();Display(&si);void CMyDlg:OnAdd() / TODO: Add your control notification handler code hereUpdateData();StuInfo stuinfo

12、;memset(&stuinfo,0,sizeof(StuInfo);strcpy(stuinfo.name,m_name);strcpy(stuinfo.age,m_age);strcpy(stuinfo.phone,m_phone);strcpy(stuinfo.hoppy,m_hoppy);strcpy(stuinfo.email,m_email);/m_Records.push_back(stuinfo);/m_StuIndex=m_Records.end()-1;题目三:图形编辑3.1实验目的1)掌握建立基于的文档工程的步骤2)熟悉鼠标绘图的机理,了解鼠标消息响应函数框架3.2程序说

13、明:本题是使用MFC实现在界面上绘图的功能,基本包括点、直线、椭圆和矩形。关键问题是确定用户选择的图形类型,从而可以调用相应的类库,并将类实例化之后使用其中各种绘图函数。同时需要记录用户鼠标点击的操作,获取鼠标指针当前的屏幕坐标,确定图形的起始位置和结束位置。3.3程序流程图开 始选择图形类型点线椭 圆矩 形3.4测试结果:结果分析:程序提供了一个图形绘制界面,我们可以画出直线,椭圆,矩形,绘制的结果可以通过文件中的保存并可通过“打开”读出原来原来已经保存的图形。要求我们能够熟悉鼠标绘图的机理,了解鼠标消息响应函数框架。3.5关键程序:void CGraphicView:OnDraw(CDC*

14、 pDC)CDrawDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereif (!pDoc) return;int index;index = pDoc-m_ObArray.GetSize();/取得直线的数目for(int i=0;im_ObArray.GetAt(i);pShape-Drawing(pDC);void CDrawView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message h

15、andler code here and/or call default this-last=point;CView:OnLButtonDown(nFlags, point);void CDrawView:OnLButtonUp(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultCDrawDoc *pDoc = GetDocument(); pDoc-AddShape(last,point, m_sType);Invalidate();CView:OnLButtonU

16、p(nFlags, point);题目四:字符串的操作4.1实验目的 1)熟练掌握字符串处理2)熟练掌握判断中文字符,英文单词的方法3)掌握文件操作,如文件读取,文件存储4)掌握工程建立方法4.2程序说明:本题是对文本文件内的字符信息做统计工作。主要思想是通过嵌套判断来实现对字母,字符,汉字的区分。编写一个统计的函数Counting(char *p, int length)来统计,字符数numChar的大小由GetLength()得到,用if(pi=a&pi=A&pi=0x00&pim_char= dwFileLen;pBuf = new chardwFileLen;file.Read(pBu

17、f, dwFileLen);file.Close();m_content =pBuf;Counting(pBuf, dwFileLen);void CMyDlg:Counting(char *p, int length) /计算模块bool wordBeg = true;bool flag = true;int numAsc=0;this-m_word=0;for(int i=0; i=a&pi=A&pim_word+;wordBeg = false;else wordBeg = true;if(pi=0x00&pim_chinese = (length-numAsc)/2;/this-num

18、Char=length-numChinese;UpdateData(FALSE);题目五:动态链接库5.1实验目的了解MFC 支持的三种动态链接库:Win32DLL,MFC 常规DLL, MFC扩展库。掌握封装DLL的基本方法。5.2程序说明:本题是使用动态链接库来完成一些简单的程序算法。动态链接库分为Win32、MFC及MFC扩展三种,分别通过不同的方法来建立。动态链接库编写完毕后,生成Dll和Lib文件,将其复制到测试工程的Debug文件夹下,并在工程中与Lib文件关联之后就可以调用动态链接库中的函数或方法5.3测试结果:总结分析:本题主要要求我们了解MFC 支持的三种动态链接库:Win3

19、2DLL,MFC 常规DLL, MFC扩展库,掌握封装DLL的基本方法。5.4关键程序:void CTestDLLDlg:OnButtonAdd() / TODO: Add your control notification handler code hereHINSTANCE hInst;hInst=LoadLibrary(Win32DLL.dll);typedef int (*ADDPROC)(int a);ADDPROC Add=(ADDPROC)GetProcAddress(hInst,add);if(!Add)MessageBox(获取函数地址失败);return;UpdateDat

20、a(TRUE);m_r1=Add(m_n);UpdateData(FALSE);void CTestDLLDlg:OnButtonfactorial() / TODO: Add your control notification handler code hereHINSTANCE hInst;hInst=LoadLibrary(MFCDLL.dll);typedef int (*ADDPROC)(int a);ADDPROC Jiechen=(ADDPROC)GetProcAddress(hInst,Jiechen);if(!Jiechen)MessageBox(获取函数地址失败);retu

21、rn;UpdateData(true);m_r2=Jiechen(m_n2);UpdateData(FALSE);二 、综合题。实验目的:首先创建一个多文档工程,实现对于磁盘文件的浏览,编辑等功能。能够以文本文件,二进制文件方式打开文件;支持剪贴板功能;支持搜索,查找,替换功能;功能参考了磁盘文件工具程序UltraEdit 。程序说明:功能要求分析:1. 文件读取功能:即利用目标系统能通过读取功能,一方面能够显示文件的原来数据形式,另一方面也能够把原来的数据形式通过编码转化为用户很方便识别的十六进制数据,进而为用户方便的了解文件的存储数据。2. 文件编辑功能:即利用目标系统能通过编辑功能,把对

22、读取的文件数据进行修改,添加,删除,进而实现对原文件的更新的功能,以方便用户能够对文件的方便的操作。3文件保存功能:即利用目标系统能通过保存功能,把对读取的文件数据进行修改和编辑过后的数据在保存回原文件,以实现对原文件的保存测试结果: 关键程序:void CHexEditView:OnDraw(CDC* pDC)CRect rc;GetClientRect(rc);if(m_text = NULL)pDC-FillRect(rc, &CBrush(RGB(255,255,255);return;CDCdc;dc.CreateCompatibleDC(pDC);CBitmap bm;bm.Cre

23、ateCompatibleBitmap(pDC, rc.Width(), rc.Height();dc.SelectObject(bm);dc.SetBoundsRect(&rc, DCB_DISABLE);CFont font;font.CreateFont ( m_LineHeight, 0, 0, 0, FW_NORMAL, 0, 0, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FIXED_PITCH | FF_MODERN, 0 );CFont* oldFont = dc.

24、SelectObject ( &font );CBrush bkBrush(RGB(255,255,255); dc.FillRect(rc, &bkBrush);UINT lineCY, lineCX;UINT dwPos;char currentchar20;UCHAR text17;int lineBeginPos;m_HexStart = m_CharWidth * (14 - m_LeftChar);/计算二进制显示开始位置m_TextStart = m_HexStart + m_CharWidth * 50;/计算ASCII码显示开始位置for(UINT i = 0; i m_Pa

25、geRows; i+)/按行显示数据lineBeginPos = (m_TopLine+i-1)*16;/计算当前行开始字符相对于总缓冲区的位置lineCY = i * m_LineHeight;/当前行的Y坐标sprintf(currentchar, %08Xh:, lineBeginPos);dc.SetTextColor(:GetSysColor(COLOR_WINDOWTEXT);dc.SetBkColor(RGB(255,255,255);dc.TextOut (m_CharWidth*(2-m_LeftChar), lineCY, currentchar);/显示地址基值memcp

26、y(text,&m_textlineBeginPos,16);/取当前行数据text16 = 0;for(int l = 0; l 16; l+)if(textl m_CharCount)textm_CharCount%16 = 0;/最后的数据不满一行时dc.TextOut (m_TextStart, lineCY, text);/显示右面的ASCII字符/被选中时反色显示右面的ASCII字符int selStart = (m_SelStart - lineBeginPos)15? 15:(m_SelEnd - lineBeginPos);if(selStart = 0)dc.SetBkCo

27、lor(:GetSysColor ( COLOR_HIGHLIGHT );dc.SetTextColor(:GetSysColor ( COLOR_HIGHLIGHTTEXT );textselEnd+1=0;dc.TextOut (m_TextStart+selStart*m_CharWidth, lineCY, &textselStart);elsedc.SetTextColor(:GetSysColor(COLOR_WINDOWTEXT);dc.SetBkColor(RGB(255,255,255);for(UINT j = 0; j (m_CharCount-1)goto bitblt

28、;/显示完最后一行退出if(dwPos = m_SelStart & dwPos 4;sprintf(currentchar, %X, cHex);dc.TextOut (lineCX, lineCY, currentchar);elselineCX = m_HexStart + j * m_CharWidth *3 + m_CharWidth;cHex = cHex & 0x0f;sprintf(currentchar, %X, cHex);dc.TextOut (lineCX, lineCY, currentchar);bitblt:pDC-BitBlt(0, 0, rc.Width(),

29、 rc.Height(), &dc, 0, 0, SRCCOPY);dc.DeleteDC ();小结经过四周的c+软件设计,我能明显感受到我在编程语言的应用上有了显著提高。由于以前接触c+的时候基本是编写一个控制台应用程序,而这一次基本上是必须使用MFC编写。而对此我基本上就是第一次遇到,并且由于大一c+课程结束后就几乎没怎么碰过C+等原因,所以在实验周开始后我除了找出原来教材开始温故知新,我还去图书馆借了可视化程序设计Visual C+、Visual C+程序设计实用案例教程两本书。一开始编程有许多不懂的或记得不带清楚的地方, 我就一一 翻书寻找答案解决问题。 随着一个一个困难的解决, 我

30、的第一个程序终于可以完成题目所要求的功能。此外,咨询老师和其他同学也是十分必须的。来自于别人的帮助也十分重要,有时候别人的点拨和指导会让你茅塞顿开,帮助我们更准确的理解题意,比如动态链接库,那个开始根本让我摸不着头脑,经过别人的指导,就知道怎么入手了。 对于编程,我个人觉得,修改和程序的调试需要有细心和耐心。细心可以让我们发现微小的错误,耐心帮我们很好的解决这些错误。面对几百行代码,不断的设置断点,不断的调试,实在是一件很繁琐的事情。也许程序员的辛苦也在此处。但是,每当一个程序调试成功,都是那么地让人振奋人心。辛苦编写代码,修改,程序调试成功,一系列流程中都伴随着烦躁和耐心的较量。在这四周的软件设计中我体会到失败的无耐,同时也体会到了成功的喜悦。 总的来说,这次程序设计使我受益匪浅,对程序设计有了进一步的认识,同时也认识到了自己的不足,今后我会更加努力学习程序设计为以后工作增添筹码。

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号