版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计实验报告题目: 编制一个将待格式化的文本按照一定的版面要求重新排版并输出到文件的程序:需求分析1:文本文件非空且以文本文件形式存放(为空没有格式化意义) 。输入输出文件名均由用户从键盘输入。2:字的定义:由非( , (空格 )的任意 ASCII 码字符组成。 3:文本文件的定义:由字母字符,数字字符,空格和可以用ASCII 代码显示的字符组成。只表示换行的意义。 (空格 )只表示一个字的结束的意义。 4:任何完整的字都没有被分割在两行 :,行尾不齐没关系,但要实现左对齐。每行 字符数不超过 60 5:输出文件中字与字之间只留一个空格符,即实现多余空格符的压缩。6:符号 指示它后面的正文
2、在格式化时应另起一段排放,段首缩入8 个字符的位置。:概要设计1: void printOut() 该函数的功能是:格式化文本文件后必要提示用户的信息说明 2: void writeOut(FILE * fp2,char c1) 该函数的功能是:将字符输出到文本文件和屏幕 3: int zuokongbai(FILE * fp2) 该函数的功能是:实现文本参数格式(左空白) 4: void pageNumber(FILE * fp2,char * aIndex,int * page) 该函数的功能是:输出当前页码 5: void out(int * columns,char * array,i
3、nt * linage,FILE * fp2,int * page,int * size) 该函数的功能是:判断是否输出到文本文件和屏幕 6: void linageFull(FILE * fp2,int * linage,int * columns,int * page)该函数的功能是:输出页首的格式(头长 + 左空白)7: void readIn(FILE * fp1,FILE * fp2)该函数是整个程序的核心,执行程序的主要逻辑判断8: void main() 该函数的功能是:程序的入口:详细设计1,头文件: noteParameter.h(参数的说明)int (PageLength)
4、 = 56;int PageWedth = 60;int LeftMargin = 10;int HeadingLength = 5;int FootingLength = 5;int StaringPageNumber = 1;/页长(一页最大的行数) /页宽(一行最大的字符数) /左空白(一行开始输出的空格数) /头长(一页开始输出的空行数) / 脚长(每页最后空 5 行) /起始页号2,主程序中需要的全局变量和函数声明int page = 1; int i = 0; char a5; char * aIndex = a;/记录页数/循环变量/记录 page的 char 类型 / 数组 a
5、 的首地址/函数声明(后面的函数调用了它)void linageFull(FILE * fp2,int * linage,int * columns,int * page);3:主函数和其他函数的伪代码算法 说明:为了便于描述。 文本文件 1代表用户输入的要格式化的文本文件。 文本文件 2代表用户输入的格式化之后保存的文本文件。函数 1:void printOut()/输出头文件中的所有整形变量/这个函数中的参数全部来自头文件printf(n);printf( 格式化文本文件结束 n);printf( 版面的参数如下: n);printf( 页长: %dn,PageLength);printf
6、( 页宽: %dn,PageWedth);printf( 左空白: %dn,LeftMargin);printf( 头长: %dn,HeadingLength);printf( 脚长: %dn,FootingLength);printf( 起始页号: %dn,StaringPageNumber);printf(n);printf(特别说明: 本程序只支持英文格式化, 对于中文格式化存在乱码问题。 n);printf(n);函数 2:void writeOut(FILE * fp2,char c1) /输出到文本文件 2 和屏幕char ch1;ch1 = fputc(c1,fp2);/ 接收从
7、文本文件 1 中读出的一个字符,并且保存到文本文件2 中printf(%c,ch1); /把这个字符输出到外设 (屏幕 )函数 3:/ 左空白/循环 10次,输出 10个空格到文本文件 2 中/返回值为 10.它赋给记录单行字节数的变量columnsint zuokongbai(FILE * fp2) for(i=0; i=0; i-)writeOut(fp2,*(aIndex+i);/向文本文件 2 中输出 page(*page)+; /指向下一页函数 5:void out(int * columns,char * array,int * linage,FILE * fp2,int * pa
8、ge,int * size)/输出if(*(columns)+1+strlen(array) 60) / 判断这一行是否还能够输出空格加一个单词 /这一行不能再输出了,开始换行 if(*(linage)50) /判断这一页是否已经印满linageFull(fp2,linage,columns,page);/ 转到下一页for(i=0; i*(size); i+) writeOut(fp2,*(array+i);/ 把保存在数组中的一个字输出到文本文件2 中(*(columns)+;/ 输出一个字符,这一行的字符数就增加一个(*(size) = 0;/ 输出之后就开始重新向数组 array 中读
9、入字符,所以 size 要归 0 (*(array) =0;/ 如果是多个空格连在一起,那么就需要把 array 数组第一个设 为结束字符。else / 这一页还没印满,换行后开始输出 writeOut(fp2,n);/ 换行 (*(linage)+; /*(columns)=0;(*(columns) = zuokongbai(fp2); / 左空白 10for(i=0; i(*(size); i+) writeOut(fp2,(*(array+i);/ 通过循环向文本文件 2 中输入字 (*(columns)+;(*(size) = 0;(*(array) =0;else /这一行还没有满
10、,还可以再输出writeOut(fp2, );(*(columns)+; for(i=0;i*size; i+)writeOut(fp2,*(array+i); (*(columns)+;(*(size) = 0; (*(array) =0;函数 6:void linageFull(FILE * fp2,int * linage,int * columns,int * page)/ 开始下一页的打印/完成页的尾部格式(空一行后居中输出页码page 再空 3 行)writeOut(fp2,n);/空一行for(i=0; i29; i+)/居中输出页码 writeOut(fp2, );pageNu
11、mber(fp2,aIndex,page);for(i=0; i3; i+) writeOut(fp2,n); /再空 3 行*linage=0;/开始打印第二页。实现输出页首的格式(头长+左空白)for(i=0; i5; i+) / 头长 5 writeOut(fp2,n);*linage+; / 已经占有 linage 行*columns = zuokongbai(fp2); / 左空白 10函数 7:void readIn(FILE * fp1,FILE * fp2)/ 读入文本文件int blankNumber=0; int linage = 0;int columns = 0;/ 记
12、录空格的数量/ 记录行数/ 记录单行的字节数char array61 = 0;/ 存一个单词 char * arrayIndex = array;int size = 0;/ 初始化单词的长度for(i=0; i5; i+) / 头长 5 writeOut(fp2,n);linage+;/已经占有 linage 行columns = zuokongbai(fp2); / 左空白 10 for(i=0; i50) /判断这一页是否已经印满 /印满了要换页输出 linageFull(fp2,&linage,&columns,&page); for(i=0; i7; i+) /段首缩进 8 字节 w
13、riteOut(fp2, ); columns+;Else/这一页没有印满writeOut(fp2,n);/ 换行 linage+;columns=0;columns = zuokongbai(fp2); / 左空白 10 for(i=0; i61)/ 程序中设计一个字不能超过 60 个字符,这里判断条件为 61 是 加了一个结束符 0 .printf( 字符格式错误 ! 哪有这么长的单词 !n);break; / 结束 while 循环函数 8:/程序的入口void main()/ fp1 指向读入的文本文件, fp2 指向输出的文本文件 / 保存要格式化文本文件的文件名/ 保存格式化之后输
14、出文本文件的文件名FILE * fp1,* fp2;char fileName_one100;char fileName_two100;printf( 请输入要格式化文件的文件名 (包括后缀名 ):n); gets(fileName_one);if(fp1=fopen(fileName_one,r)=NULL) printf(The file %s was not fopen!n,fileName_one); exit(0);/得到要进行格式化的文本文件 1 的地址printf( 请输入输出文件的文件名 (包括后缀名 ):n); gets(fileName_two);if(fp2=fopen(
15、fileName_two,a)=NULL)printf(The file %s was not fopen!n,fileName_two); exit(0); /得到格式化后要保存到文本文件 2 的地址readIn(fp1,fp2);/读入文本文件开始格式化printOut();/ 参数说明fclose(fp1);fclose(fp2);/关闭文件 (把文件缓冲区的数据送入硬盘中 ) 关闭文件 (把文件缓冲区的数据送入硬盘中 )四:调试分析1:本程序历时 9 天完工,在分析数据结构时对程序的架构没有想好,导致这个程 序有 2 个版本。 每个版本都有各自的优点和缺点。 现在程序已经实现了所有的功
16、能 并对代码进行了必要的优化设计。2:在编程过程中,对设计做了如下修改:( 1):在第一版中设计为:读一个字符判断是否为:空, 。(占不考虑其他条件) 不是就直接输出。 导致不能实现任何完整的字都没有被分割在两行这 个功能。( 2)在第二版中改为:读一个字符判断是否为:空字符, 。(占不考虑其他条件) 不是就保存在数组中, 这个数组就是保存一个字的作用。 判断输出就 是一个一个字的输出, 这样就实现了任何完整的字都没有被分割在两行这个功 能。( 3):在第一版中就遇到页码输出的问题。 开始我设计页码是整形, 当格式化 文本文件过大时, 页码输出就出现了问题。 实现输出页码是用 fputc 这个
17、函数, 它是实现字符的输出,就把整形的页码数转换为 ASCII 码形式输出了。( 4)在第二版中改为:把整形的页码转换为字符型用一个字符数组来保存。 每次输出页码是就是输出这个数组中的数据。 这样就实现了页码的完整输出。.exe。五:用户手册1:本程序的运行环境为 DOS 操作系统,执行文件为:文本格式化2:进入程序后即显示提示信息:请输入要格式化文件的文件名(包括后缀名 ):以等待用户输入待格式化的文本文件名 (一个回车为结束标志的字符串 ),如果该文件不 存在,则显示信息: The file ?“” was not fopen!(? 为用户输入的文件名 ) 并退出程序。 如果该文件存在,则
18、执行程序的下一步。提示信息:请输入输出文件的文件名 (包 括后缀名 ): 以等待用户输入输出文件的文本文件名(一个回车为结束标志的字符串),如果该文件不存在, 则程序自动新建一个, 如果新建失败则提示信息: The file “?” was not fopen!(? 为用户输入的文件名 )并退出程序。如果该文件存在,则在该文 件后面追加。3:输入结束后,程序即进行格式化。随后输出格式化信息。按任意键退出。详细 见测试结果。4:格式化结果保存在由用户指定的文本文件中,如果该文件存在,则在该文件后 面追加。(为了更好的观察测试结果,请确保当前工程中没有该文件) 5:测试数据最大字不能超过 60 个
19、字符。6:本程序只格式化由字母字符构成的文本文件。对于中文格式化存在乱码问题。六:测试结果1:测试数据: I have a dream.txt 文本文件 I have a dream节选I say to you today, my friends, that in spite of the difficulties and frustrations of the moment, I still have a dream. It is a dream deeply rooted in the American dream.I have a dream that one day this nati
20、on will rise up and live out the true meaning of its creed: We hold these truths to be self-evident: that all men are created equal.I have a dream that one day on the red hills of Georgia the sons of former slaves and the sons of former slaveowners will be able to sit down together at a table of bro
21、therhood.I have a dream that one day even the state of Mississippi, a desert state, sweltering with the heat of injustice and oppression, will be transformed into an oasis of freedom and justice.I have a dream that my four children will one day live in a nation where they will not be judged by the c
22、olor of their skin but by the content of their character.I have a dream today.2:测试结果: 请输入要格式化文件的文件名 (包括后缀名 ):i have a dream.txt 请输入输出文件的文件名 (包括后缀名 ): value.txtI say to you today, my friends, that in spite of the difficulties and frustrations of the moment, I still have a dream. It is a dream deeply rooted in the American dream.I have a dream that one day this nation will rise up and live out the true meaning of its creed: We hold these truths to be self-evident: that all men are created equal.I have a dream that one day on the redhills o
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年海南省建筑安全员B证考试题库
- 2025年安徽建筑安全员-C证考试题库
- 2025黑龙江省建筑安全员-A证考试题库及答案
- 《急腹症诊治原则》课件
- 酸碱盐复习课件浙教版
- 《手机视频转换》课件
- 单位管理制度展示大全【人员管理】十篇
- 车钩缓冲器拆装器行业深度研究报告
- 单位管理制度展示汇编【职工管理篇】十篇
- 单位管理制度收录大全【人力资源管理篇】
- 机动车查验员技能理论考试题库大全-上(单选题部分)
- 监理人员安全生产培训
- 2024-2030年中国电力检修行业运行状况及投资前景趋势分析报告
- 河北省百师联盟2023-2024学年高二上学期期末大联考历史试题(解析版)
- 中央空调系统运行与管理考核试卷
- 核电工程排水隧道专项施工方案
- 2021年四川省凉山州九年级中考适应性考试理科综合(试卷)
- 骨科疼痛的评估及护理
- 民办学校招生教师培训
- 【MOOC】概率论与数理统计-南京邮电大学 中国大学慕课MOOC答案
- 2024年度软件开发分包合同技术要求与交底2篇
评论
0/150
提交评论