湖南大学实验报告.docx
- 文档编号:25777702
- 上传时间:2023-06-13
- 格式:DOCX
- 页数:13
- 大小:159.59KB
湖南大学实验报告.docx
《湖南大学实验报告.docx》由会员分享,可在线阅读,更多相关《湖南大学实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
湖南大学实验报告
HUNANUNIVERSITY
C++
学生姓名
李国龙
学生学号
201408010211
专业班级
计算机科学与技术
指导老师
杨圣洪
2015年12月30日
一、实验原理:
运用MFC的知识编写一个系统,实现二进制文件的创建,读取,查询,插入,修改,删除,排序,索引,基于索引的查询等功能。
二、实验目标:
掌握MFC的相关知识,学会利用MFC进行文件操作系统的编写。
三、实验设计:
1、建立框架
利用MFCExe模板建立MFC的基础界面,其中第3步中不选“ActiveX控件”,在第5步中选择“作为静态的DLL”,其他取默认值,等你熟练后,你再XX或搜狗找办法,定制所你的喜欢的模式。
项目名称为Lt13DTextFile。
建立菜单:
我的文件、我的编辑在“我的文件”下方建:
建立文本文件ID_MENUITEMFILENEW、读取文本文件ID_MENUITEMFILEREAD、查询单条记录ID_MENUITEMQUERYONE、查询多条记录ID_MENUITEMQUERYM在“我的编辑”下方建:
修改ID_MENUITEMEDITMODI、删除ID_MENUITEMEDITDEL、插入ID_MENUITEMEDITINSERT、排序ID_MENUITEMEDITSORT1、排序2ID_MENUITEMEDITSORT2、索引ID_MENUITEMEDITINDEX、根据索引查询ID_MENUITEMEDITQUERYINDEX。
单击后显示一句话。
先建立菜单系统,为每个菜单项的单击事件写上MessageBox(NULL,"函数名","测试",MB_OK),等将来建立相应对话框后,再进行修改。
由于保存在LT13DTextFileView.cpp即View文件中,显示对话框的命令为:
voidCLt13DTextFileView:
:
OnMenuitemeditqueryindex(){MessageBox("根据索引文件快速查询","初始代码",MB_OK);}
2、建立数据结构类StudScore
在当前项目中建立StudScore.h,将LT12B中同名文件的内容复制过来。
再新建StudScore.cpp,当我将LT12B:
:
StudScore.cpp代码贴到当前文件中,再编译时出现如下错误:
studscore.cpp(248):
fatalerrorC1010:
unexpectedendoffilewhilelookingforprecompiledheaderdirective,XX一下在最前面加上“#include"stdafx.h"”,这是将普通的DOSAPP迁移到MFC时发生的现象,是正常的!
因为不符合MFC的规范。
3、建立文件操作类StudScoreAFile
在当前项目中建立studScoreAFile.h,将LT12B中同名文件的内容复制过来。
建立studScoreAFile.cpp,复制LT12B中相关代码,可以要进行修改,加上include"stdafx.h"后,编译竟然能能通过,不是说MFC与DOSAPP中C++的文件读写操作不一样吧?
不再是流媒体ofstream或iftream,而是采用CStdioFile吗?
先试试看。
经实际测试,只需要将以上函数中stringstreamsdata换成string&sdata0就可以了,然后在各函数内部建立字符串流stringstream的输入或输出流,从而在沿用DOSAPP的框架基础上稍作修改,得到MFC的体系,真是伟大呀!
为了测试方便,建立每次只在studScoreAFile.h与studScoreAFile.cpp中增加一个函数,然后建立其最终操作作界面,相当于DOSAPP即Lt12A与Lt12B中主控程序,现在采用了窗体形式。
4、创建文件
在studScoreAFile.h中增加函数intcreateFileText(stringfn,string&sdata);
将Lt12B项目中相应代码,复制到studScoreAFile.cpp中,修改成如下形式,主要是送来的数据是string,在函数局部转换为stringstream变量(哪些出错的程序,也可以这样处理)还需要在studScoreAFile.cpp的最前面增加#include"stdafx.h"
在DOSAPP中,数据的输入是通过CMD窗体中进行,实际是cin>>stud完成的,在MFC中需要创建7个控件输入相关数据,再建立一个文件文本框,输入文件名,为了一次性写入多条数据,在右边建立一个多行文本框,在界面的按钮中:
确定(保存),取消,保存到下方区域,将来点“保存”时,将多行文本区域的内容以stringstream的形式,发给studScoreAFile中的函数。
5、读取文件的内容
在studScoreAFile.h中增加如下函数:
intreadFileText(stringfn,string&sdata);
将Lt12B中studScoreAFile.cpp中以上函数代码读过来,稍作修改。
建立输入数据IDC_EDITFNIDC_EDITRESULT。
6、查询单条记录
在studScoreAFile.h中增加如下函数:
intqueryOne(stringfn,stringfieldName,stringfindVal,string&sdata);将Lt12B中studScoreAFile.cpp中以上函数代码读过来,稍作修改。
建立输入数据IDC_EDITFNIDC_EDITFIELDNAMEIDC_EDITFINDVALIDC_EDITRESULT。
7、查询多条记录
在studScoreAFile.h中增加如下函数:
intqueryMulti(stringfn,stringfieldName,stringfindVal,string&sdata);将Lt12B中studScoreAFile.cpp中以上函数代码读过来,稍作修改。
建立输入数据IDC_EDITFNIDC_EDITFIELDNAMEIDC_EDITFINDVALIDC_EDITRESULT。
8、修改记录
在studScoreAFile.h中增加如下函数:
intmodiMulit(stringfn,stringfieldName,stringfindVal,int&n,stringmodiField,stringmodiVal);将Lt12B中studScoreAFile.cpp中以上函数代码读过来,稍作修改。
建立输入数据IDC_EDITFNIDC_EDITFIELDNAMEIDC_EDITFINDVALIDC_EDITNIDC_EDITMODIFIELDIDC_EDITMODIVALIDC_EDITRESULT。
9、插入记录
在studScoreAFile.h中增加如下函数:
intinsertMulti(stringfn,stringfieldName,stringfindVal,string&sdata);
将Lt12B中studScoreAFile.cpp中以上函数代码读过来,稍作修改。
建立输入数据IDC_EDITFNfieldName,findValIDC_EDITFIELDNAMEIDC_EDITFINDVALIDC_EDITSTUDNO,IDC_EDITSTUDNAME,IDC_EDITCOURSENAME,IDC_EDITPS1,IDC_EDITPS2,IDC_EDITEXAMEND,IDC_EDITTOTALSCORE,,IDC_BUTTONSAVEDOWN,IDC_EDITDATAAREA。
10、删除记录
在studScoreAFile.h中增加如下函数:
intdelOne(stringfn,stringfieldName,stringfindVal,int&n,string&sdata);
将Lt12B中studScoreAFile.cpp中以上函数代码读过来,稍作修改。
建立输入删除文件名、删除线索值的界面IDC_EDITFN、IDC_EDITFIELDNAME、IDC_EDITFINDVAL、IDC_EDITN、IDC_EDITRESULT。
11、排序
在studScoreAFile.h中增加如下函数:
intsortFile(stringfn,stringfieldName);
在studScoreAFile.cpp编写以上函数的实现代码。
建立排序数据对话框只需要输入文件名、排序字段名,与显示结果多行区域就可以了IDC_EDITFNfieldName,findValIDC_EDITFIELDNAMEIDC_EDITDATAAREA。
12、索引
由于排序过程中困难,可能索引也不会成功,只能对于二进制文件可能成功,对于二进制文件我没时间再编码了,已经在studScoreAFile.cpp同步对于二进制进行说明,但是没有具体实施,可能有点小问题。
在studScoreAFile.h中增加如下函数:
intindexFile(stringfn,stringfnIndex,stringfieldName);
在studScoreAFile.cpp编写以上函数的实现代码。
建立索引对话框,它与排序对话框一样DC_EDITFNfieldName,findValIDC_EDITFIELDNAMEIDC_EDITDATAAREA。
13、基于索引的查询
由于排序过程中困难,可能索引也不会成功,只能对于二进制文件可能成功,对于二进制文件我没时间再编码了,已经在studScoreAFile.cpp同步对于二进制进行说明,但是没有具体实施,可能有点小问题。
在studScoreAFile.h中增加如下函数:
intqueryIndex(stringfn,stringfnIndex,stringfindVal,string&sdata);在studScoreAFile.cpp编写以上函数的实现代码。
建立查询页面IDC_EDITFNfieldName,findValIDC_EDITFNNDXIDC_EDITDATAAREAIDC_EDITFINDVALUEIDC_EDITFIELDNAME。
四、运行结果:
1.文件的创建:
2.二进制文件的读取
3.二进制文件查询(单条记录,多条记录)
4.二进制文件的修改
修改后:
5.二进制文件的删除
删除后:
6.二进制文件的插入
插入后:
7.二进制文件的排序
排序后:
8.二进制文件的索引
9.二进制文件的基于索引的查询
五、总结
本次实验是在二进制文件操作系统的基础上进行的,感觉不是太难,不过也有困惑的地方。
MFC还是和以往学的有所区别,MFC可以自定义窗口,定义窗口时要注意属性的设置,在执行语句中需要用到GetDlgItem(IDC_EDITA)->GetWindowText()获取对象,用GetDlgItem(IDC_EDITMJ)->SetWindowText()放置对象。
想要执行窗口程序,还要用到类似下列语句:
dialogSort1form1;form1.DoModal();注意要将stringstream换成string&类型,这样可以避免内存问题。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 湖南大学 实验 报告