课程设计(文本格式化)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计
2013 年6 月17 日
题目:文本格式化
一,问题描述:
试写一个文本格式化程序可以处理一个输入文件,它按照用户指定的下列版面规格参数重排版面:实现页内调整、分段、分页等文本处理功能,排版结果存入输出文本文件中。
(1)输出文件中字与字之间只留一个空格符,即实现多余空格符的压缩。
( 2)输出文件中,任何完整的字不能分割在两行,行尾可以不齐,但行首要对齐。
( 3)将页号印在页底空行中第 2 行的中间位置上。
( 4)版面要求的参数见题集p117。
(5)测试用例自己设计。
二,设计:
1, 版面要求的参数要包含:
页长(Page Length) ——每页内文字(不计页号)的行数。
页宽(Page Wedth) ----- 每行内文字所占最大字符数。
左空白(Left Margin) ——每行文字前的固定格数。
头长(Heading Length) ——每页页顶所空行数。
脚长(Footing Length) ——每页页底所空行数(含页号行)
起始页号(Starting Page Number)------- 首页的页号。
2,概要设计:
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,int * 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 ()
3,实验设计程序代码:
#include
#include
FootingLength = 5; int
StaringPageNumber = 1;
int page = 1; // 记录页数
int i = 0;
//循
环变量
char a[5]; //记录 page
的 char 类型 char * aIndex = a; //数组 a 的首地址
//函数声明(后面的函数调用了它)
void linageFull (FILE * fp2,int * linage,int * columns,int * page );
// 函数 1:
void printOut () // 输出头文件中的所以整形变量
{ //这个函数中的参数全部来自头文件 printf ("\n");
printf (" 格式化文本文件结束 \n"); printf (" 版面的参数如下: \n");
printf (" 页长: %d\n",PageLength );
printf (" 页宽: %d\n",PageWedth );
printf (" 左空白: %d\n",LeftMargin );
printf (" 头长: %d\n",HeadingLength );
printf (" 脚长: %d\n",FootingLength );
printf (" 起始页号: %d\n",StaringPageNumber );
//页长(一页最大的行数) //页宽(一行最大的字符数) //左空白(一行开始输出的空格数) //头长(一页开始输出的空行数) // 脚长(每页最后空 5 行) //起始页号
printf("\n");
printf(" 特别说明:本程序只支持英文格式化,对于中文格式化存在乱码问题。 \n"); printf("\n"); }
// 函数 2:
void writeOut(FILE * fp2,char c1) //
输出到文本文件 2 和屏幕
{ char ch1;
ch1 = fputc(c1,fp2);// 接收从文本文件 1 中读出的一个字符,并且保存到文本文件 2 中
printf("%c",ch1); //把这个字符输出到外设 (屏幕 )
}
// 函数 3:
int zuokongbai(FILE * fp2) {
for(i=0; i<10; i++)
writeOut(fp2,' ');
return i; // 函数 4:
void pageNumber(FILE * fp2,char * aIndex,int * page) //输出当前页码
{
int m,n;
/定义2个整形变量接收 page 和page%10的值 m = *page;
//接收 page 的值 int i=0;
while(m != 0) //判断条件为:m 的值不为0即page 的值不为0
{ n = m % 10;
*(alndex+i) = n+'0';
//对数组a 进行赋值操作,把int 类型的page 的各位数转换为字符型 保存到数组 a 中,以便于向文本文件 2 中输出 page
i++;
m = m /10;
} //此时 page 已经保存在数组 a 中了,开始输出 page
for(i=i-1; i>=0; i--)
{
writeOut(fp2,*(alndex+i)); //向文本文件 2 中输出 page
}
(*page)++;
//指向下一页
} //函数 5:
void out(int * columns,char * array,int * linage,FILE * fp2,int * page,int * size)
// 输出 { if(((*(columns))+1+strlen(array)) > 60) // 判断这一行是否还能够输出空格加一个单词 {
//这一行不能再输出了,开始换行 if((*(linage))>50) // 判断这一页是否已经印满
{ linageFull(fp2,linage,columns,page);// 转到下一页 for(i=0; i<*(size); i++)
{
// 左空白 //循环 10 次,输出 10 个空格到文本文件 2中
// 返回值为 10.它赋给记录单行字节数的变量 columns