湖南大学实验报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“湖南大学信号处理实验”。
HUNAN UNIVERSITY
C++
学生姓名 李国龙 学专指生业导学班老
号 201408010211 级 计算机科学与技术 师 杨圣洪
2015年12月 30日
一、实验原理:运用MFC的知识编写一个系统,实现二进制文件的创建,读取,查询,插入,修改,删除,排序,索引,基于索引的查询等功能。
二、实验目标:掌握MFC的相关知识,学会利用MFC进行文件操作系统的编写。
三、实验设计:
1、建立框架
利用 MFC Exe 模板建立 MFC 的基础界面,其中第 3 步中不选“ActiveX 控件”,在第 5 步中选择“作为静态的 DLL”,其他取默认值,等你熟练后,你再百度或搜狗找办法,定制 所你的喜欢的模式。项目名称为 Lt13DTextFile。建立菜单:我的文件、我的编辑 在“我的文件”下方建:建立文本文件 ID_MENUITEMFILENEW、读取文本文件 ID_MENUITEMFILEREAD、查询单条记录 ID_MENUITEMQUERYONE、查询多条记录 ID_MENUITEMQUERYM 在 “ 我 的 编 辑 ” 下 方 建 : 修 改 ID_MENUITEMEDITMODI、删 除 ID_MENUITEMEDITDEL、插 入 ID_MENUITEMEDITINSERT、排 序 ID_MENUITEMEDITSORT1、排 序 2 ID_MENUITEMEDITSORT2、索 引 ID_MENUITEMEDITINDEX、根
据
索
引
查
询
ID_MENUITEMEDITQUERYINDEX。
单击后显示一句话。先建立菜单系统,为每个菜单项的单击事件写上 MeageBox(NULL,“函数名”,“测试 ”,MB_OK),等将来建立相应对话框后,再进行修改。由于保存在 LT13DTextFileView.cpp 即 View 文件中,显
示
对
话
框的命
令
为
:
voidCLt13DTextFileView::OnMenuitemeditqueryindex(){ MeageBox(“根据索引文件快速查询”,“初始代码”,MB_OK);}
2、建立数据结构类 StudScore 在当前项目中建立 StudScore.h,将 LT12B 中同名文件的内容复制过来。再新建 StudScore.cpp,当我将 LT12B::StudScore.cpp 代码贴到当前文件中,再编译时出 现如下错误:studscore.cpp(248): fatal error C1010: unexpected end of file while looking for precompiled header directive,百度一下在最前面加上“#include“stdafx.h””,这是将普通的 DOSAPP 迁移到 MFC 时发生的现象,是正常的!因为不符合 MFC 的规范。
3、建立文件操作类 StudScoreAFile 在当前项目中建立 studScoreAFile.h,将 LT12B 中同名文件的内容复制过来。建立 studScoreAFile.cpp,复制 LT12B 中相关代码,可以要进行修改,加上 include“stdafx.h”后,编译竟然能能通过,不是说 MFC 与 DOSAPP 中 C++的文件读写操作 不一样吧?不再是流媒体 ofstream 或 iftream,而是采用 CStdioFile 吗?先试试看。经实际测试,只需要将以上函数中 stringstream sdata 换成 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_EDITFN IDC_EDITRESULT。
6、查询单条记录 在 studScoreAFile.h
中
增
加
如
下
函
数
:
intqueryOne(stringfn,stringfieldName,string findVal,string&sdata);将 Lt12B 中 studScoreAFile.cpp 中以上函数代码读过来,稍作修改。
建立输入数据 IDC_EDITFN IDC_EDITFIELDNAME IDC_EDITFINDVAL IDC_EDITRESULT。
7、查询多条记录 在 studScoreAFile.h
中
增
加
如
下
函
数
:
intqueryMulti(stringfn,stringfieldName,stringfindVal,string&sdata);将 Lt12B 中 studScoreAFile.cpp 中以上函数代码读过来,稍作修改。建立输入数据 IDC_EDITFN IDC_EDITFIELDNAME IDC_EDITFINDVAL IDC_EDITRESULT。
8、修改记录
在 studScoreAFile.h 中增加如下函数: int modiMulit(string fn,string fieldName,string
findVal,int
&n,string modiField,string modiVal);将 Lt12B 中 studScoreAFile.cpp 中以上函数代码读过来,稍作修改。建立输入数据 IDC_EDITFN IDC_EDITFIELDNAME
IDC_EDITFINDVAL
IDC_EDITN IDC_EDITMODIFIELD IDC_EDITMODIVAL IDC_EDITRESULT。
9、插入记录 在 studScoreAFile.h
中
增
加
如
下
函
数
:
intinsertMulti(stringfn,stringfieldName,string findVal,string &sdata);将 Lt12B 中 studScoreAFile.cpp 中以上函数代码读过来,稍作修改。建立输入数据 IDC_EDITFN fieldName,findVal IDC_EDITFIELDNAME
IDC_EDITFINDVAL
IDC_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_EDITFN
fieldName,findVal
IDC_EDITFIELDNAME IDC_EDITDATAAREA。
12、索引
由于排序过程中困难,可能索引也不会成功,只能对于二进制文件可能成功,对于二进 制文件我没时间再编码了,已经在 studScoreAFile.cpp 同步对于二进制进行说明,但是没有 具体实施,可能有点小问题。在 studScoreAFile.h 中增加如下函数: intindexFile(stringfn,stringfnIndex,stringfieldName);在 studScoreAFile.cpp 编写以上函数的实现代码。建立索引对话框,它与排序对话框一样 DC_EDITFN fieldName,findVal IDC_EDITFIELDNAME IDC_EDITDATAAREA。
13、基于索引的查询
由于排序过程中困难,可能索引也不会成功,只能对于二进制文件可能成功,对于二进 制文件我没时间再编码了,已经在 studScoreAFile.cpp 同步对于二进制进行说明,但是没有 具体实施,可能有点小问题。在 studScoreAFile.h 中增加如下函数: intqueryIndex(stringfn,stringfnIndex,stringfindVal,string&sdata);在 studScoreAFile.cpp 编写以上函数的实现代码。建立查询页面 IDC_EDITFN
fieldName,findVal
IDC_EDITFNNDX IDC_EDITDATAAREA IDC_EDITFINDVALUE IDC_EDITFIELDNAME。
四、运行结果:
1.文件的创建:
2.二进制文件的读取
3.二进制文件查询(单条记录,多条记录)
4.二进制文件的修改
修改后:
5.二进制文件的删除
删除后:
6.二进制文件的插入
插入后:
7.二进制文件的排序
排序后:
8.二进制文件的索引
9.二进制文件的基于索引的查询
五、总结
本次实验是在二进制文件操作系统的基础上进行的,感觉不是太难,不过也有困惑的地方。MFC还是和以往学的有所区别,MFC可以自定义窗口,定义窗口时要注意属性的设置,在执行语句中需要用到GetDlgItem(IDC_EDITA)->GetWindowText()获取对象,用GetDlgItem(IDC_EDITMJ)->SetWindowText()放置对象。想要执行窗口程序,还要用到类似下列语句:dialogSort1 form1;form1.DoModal();注意要将stringstream 换成string&类型,这样可以避免内存问题。
2014年湖南大学建工专业暑假生产实习报告一、实习目的通过暑假期间的实际工作体验,加快实现书本理论与生产实践的对接,培养综合应用能力,为今后的工作实践打下坚实基础。二、实......
湖南大学湖南大学坐落在中国历史文化名城长沙,校区位于湘江之滨、岳麓山下,享有"千年学府,百年名校"之誉。她不仅是国家教育部直属的全国重点综合性大学,也是国家"211工程"......
湖南大学湖南大学是一所理科基础坚实、工科实力雄厚、人文学科独具浓厚文化背景、经济管理学科富有特色的多学科协调发展的全国重点大学,直属国家教育部,是国家“211工程”、......
9.湖南大学基本简介湖南大学坐落在中国历史文化名城长沙,校区位于湘江之滨、岳麓山下,享有“千年学府,百年名校”之誉。她不仅是国家教育部直属的全国重点综合性大学,也是国家“......
政军界:令计划:中共中央书记处书记,中央办公厅主任。袁纯清:中共中央委员,陕西省省长,省委副书记。傅自应:商务部副部长。蒋超良:现国家开发银行行长,原湖北省副省长。张昌平:福建省委......