已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
测绘程序设计(VC.net)上机实验报告(Visual C+.Net)实验5 文 件班 级: 学 号: 姓 名: 序 号: 二零一零年四月实验5 文 件一、实验目的 掌握文件对话框的使用方法。 掌握C+文件操作的一般步骤及实现方法。 了解MFC文件操作的特点及使用方法。二、实验内容1. 编制简单的Cass数据文件进行数据整理的程序。整理后的数据文件中要求无重复点数据,且数据按点号大小的升序进行排序。要求整理后的数据按与原始数据文件同样的格式保存为另外一个文件要求: a.用SaveFileDialog和OpenFileDialog控件获取文件打开或保存的文件名。b.自定义一个测量点数据结构体,其元素包括:点号,编码,X,Y,Hc.用文本框显示原始数据和整理后的数据d.按编程规范进行编码设计思路: 1) 自定义一个测量点数据结构体,其元素包括:点号,编码,X,Y,H2) 定义一个分割函数用来分割数据3) 打开文件,将测量点的数据值赋给点的结构体数组4) 通过比较结构体元素的异同删除重复点,获得新的总点数5) 按点号大小的升序排列6) 将新排好的数据输出到另一个文本框中,并保存于文件中。界面设计: 共2个文本框、2个Group Box控件、2个命令按钮。IDMultilineWant Return添加变量名IDC_EDITPriDataTrueTruestrPriDataIDC_EDITTidyDataTrueTruestrTidyData 具体见运行程序。主要代码: FileDlg.cpp /定义点的结构体#define POINT struct pointPOINTint iDotmark;CString strCode;double X;double Y;double Z;void CFileDlg:OnBnClickedOpenfile()/ TODO: 在此添加控件通知处理程序代码CFileDialog dlgFile(TRUE,_T(txt),NULL,OFN_ALLOWMULTISELECT|OFN_EXPLORER,_T(文本文件)|*.txt);if(dlgFile.DoModal()=IDCANCEL) return;CString strFileName=dlgFile.GetPathName();setlocale(LC_ALL,); CStdioFile sf;if(!sf.Open(strFileName, CFile:modeRead) return;CString strLine;strPriData.Empty();BOOL bEOF=sf.ReadString(strLine);while(bEOF)strPriData+=strLine;bEOF=sf.ReadString(strLine);if(bEOF) strPriData+=_T(rn);sf.Close();/整理原始数据并在右边编辑框中输出/UpdateData(TRUE);int iLine;/分行并存入字符串数组CString *pstrLine=SplitString(strPriData,n,iLine);int iTotalPoint; /总点数CString *strTmp=NULL; int n;iTotalPoint = _ttoi(pstrLine0); /第一行为总点数 if(iTotalPoint!=iLine-1)MessageBox(_T(数据格式有误);POINT *pPoint=new POINTiTotalPoint; /结构体指针,指向点结构体/逐行用Split函数分离,给点结构体赋值for(int i=0;iiTotalPoint;i+)strTmp = SplitString(pstrLinei+1, ,n);pPointi.iDotmark = _ttoi(strTmp0);pPointi.strCode = strTmp1;pPointi.X = _tstof(strTmp2);pPointi.Y = _tstof(strTmp3);pPointi.Z = _tstof(strTmp4);if(strTmp!=NULL)/释放内存delete strTmp;strTmp=NULL;if(strTmp!=NULL)/释放内存delete strTmp;strTmp=NULL;/删除重复点for(int i=0;iiTotalPoint;i+)for(int j=i+1;jiTotalPoint;j+)if(pPointi.iDotmark =pPointj.iDotmark)/delete pPoint;for(int k=j;kiTotalPoint-1;k+)pPointk=pPointk+1;iTotalPoint-; /按点号的升序排列/*POINT min=pPoint0;*/for(int i=0;iiTotalPoint;i+)for(int j=i+1;jpPointj.iDotmark)POINT t=pPointi;pPointi=pPointj;pPointj=t;/输出调整后的数据strTidyData.Format(_T(%drn),iTotalPoint);CString strOutput;for(int i=0;iiTotalPoint;i+)strOutput.Format(_T(%d,%s,%f,%f,%frn),pPointi);strTidyData=strTidyData+strOutput;UpdateData(FALSE);/释放内存if(pPoint!=NULL)delete pPoint;pPoint=NULL;void CFileDlg:OnBnClickedSavefile()/ TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);CFileDialog dlgFile(FALSE,_T(txt),NULL,OFN_EXPLORER,_T(文本文件)|*.txt);if(dlgFile.DoModal()=IDCANCEL) return;CString strFileName=dlgFile.GetPathName();setlocale(LC_ALL,); CStdioFile sf;if(!sf.Open(strFileName, CFile:modeCreate|CFile:modeWrite) return;sf.WriteString(strTidyData);sf.Close(); CString *CFileDlg:SplitString(CString str, char split, int& iSubStrs) int iPos = 0; /分割符位置 int iNums = 0; /分割符的总数 CString strTemp = str; CString strRight; /先计算子字符串的数量 while (iPos != -1) iPos = strTemp.Find(split); if (iPos = -1) break; strRight = strTemp.Mid(iPos + 1, str.GetLength(); strTemp = strRight; iNums+; if (iNums = 0) /没有找到分割符 /子字符串数就是字符串本身 iSubStrs = 1; return NULL; /子字符串数组 iSubStrs = iNums + 1; /子串的数量= 分割符数量+ 1 CString* pStrSplit; pStrSplit = new CStringiSubStrs; strTemp = str; CString strLeft; for (int i = 0; i iNums; i+) iPos = strTemp.Find(split); /左子串 strLeft = strTemp.Left(iPos); /右子串 strRight = strTemp.Mid(iPos + 1, strTemp.GetLength(); strTemp = strRight; pStrSpliti = strLeft; pStrSplitiNums = strTemp; return pStrSplit;运行结果:操作过程:单击“打开原始数据”,选择原始数据所在的文本文件,自动输出原始数据及整理后的数据,单击“保存整理后的数据”,选择保存路径,确定文件名,单击保存即可。总 结这次实验主要是文件的打开与保存,老师在这方面讲的很详细,给的相关例子也比较多,所以文件的打开和保存并不是主要的难点了,排序,删除重复点成了我们主要的难点。本次实验还是出现了很多问题,当我把程序写好,调试通过,运行时出现了如下错误:启用监视有:这两个变量我是定义过的,而且也用分割函数为其赋值了,很纳闷,请教同学才知道,关闭文件后我就调用了UpdateData(TRUE)函数,打开文件时就有了数据的输出,我再用一个UpdateData函数就出错了。删除重复点问题,我刚开始的想法的,用两重循环,第i个数据依次和其后的数据比较,如果有重复就将后面的数据删掉,总点数自减,可是这样重复的数据是删掉了,可它的位置又没有空出来,所以得在内部再增加一个循环,使后面的元素前移。排序问题:我刚开始写的程序是这样的,它并不能达到排序的目的。 /按点号的升序排列POINT min=pPoint0;for(int i=0;iiTotalPoint;i+)for(int j=i;jpPointj
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年软件工程师年终项目交付总结与代码质量报告
- 好评回复话术
- 2026福建省面向天津大学选调生选拔工作备考题库及答案详解(各地真题)
- 2026福建省面向北京师范大学选调生选拔工作备考题库及完整答案详解1套
- 2025中国民生银行南宁分行招聘2人备考题库附答案详解(b卷)
- 2026中国农业银行天津市分行校园招聘222人备考题库含答案详解(满分必刷)
- 2026中国工商银行江苏省分行校园招聘备考题库及完整答案详解1套
- 2025四川凉山州中共会东县委组织部 中共会东县委社会工作部 会东县人力资源和社会保障局 定向招聘社区专职工作者50人备考题库及答案详解(名师系列)
- 2026建信期货有限责任公司校园招聘9人备考题库完整参考答案详解
- 2025辽宁鞍山市海城市温香镇人民政府、海城市兴海街道办事处公益性岗位招聘3人备考题库含答案详解
- 5年(2021-2025)北京高考数学真题分类汇编:专题03 三角函数与解三角形(原卷版)
- 普惠金融服务创新实践方案
- 水泥厂应急预案模板
- 2025年消防人员执法资格及相关法律知识考试题库及答案
- 国开(青海)2025年《劳动合同法(本科)》形考作业1-4终考答案
- 2025版粮食仓库安全操作规程
- 医院检验科消防知识培训课件
- 国网南瑞集团招聘考试真题2025
- 堤防工程施工规范(2025版)
- 绿里奇迹课件
- 2025年科创板开户测试题及答案
评论
0/150
提交评论