课程设计文本格式化.docx

上传人:b****1 文档编号:403904 上传时间:2022-10-09 格式:DOCX 页数:17 大小:150.62KB
下载 相关 举报
课程设计文本格式化.docx_第1页
第1页 / 共17页
课程设计文本格式化.docx_第2页
第2页 / 共17页
课程设计文本格式化.docx_第3页
第3页 / 共17页
课程设计文本格式化.docx_第4页
第4页 / 共17页
课程设计文本格式化.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

课程设计文本格式化.docx

《课程设计文本格式化.docx》由会员分享,可在线阅读,更多相关《课程设计文本格式化.docx(17页珍藏版)》请在冰豆网上搜索。

课程设计文本格式化.docx

课程设计文本格式化

附件1:

学号:

0121110340427

课程设计

 

题目

文本格式化

学院

计算机科学与技术学院

专业

计算机科学与技术

班级

计算机1104班

姓名

成霖

指导教师

吴利军

 

2013

6

17

题目:

文本格式化

 

一,问题描述:

试写一个文本格式化程序可以处理一个输入文件,它按照用户指定的下列版面规格参数重排版面:

实现页内调整、分段、分页等文本处理功能,排版结果存入输出文本文件中。

(1)输出文件中字与字之间只留一个空格符,即实现多余空格符的压缩。

(2)输出文件中,任何完整的字不能分割在两行,行尾可以不齐,但行首要对齐。

(3)将页号印在页底空行中第2行的中间位置上。

(4)版面要求的参数见题集p117。

(5)测试用例自己设计。

二,设计:

1,版面要求的参数要包含:

页长(PageLength)——每页内文字(不计页号)的行数。

页宽(PageWedth)——每行内文字所占最大字符数。

左空白(LeftMargin)——每行文字前的固定格数。

头长(HeadingLength)——每页页顶所空行数。

脚长(FootingLength)——每页页底所空行数(含页号行)

起始页号(StartingPageNumber)——首页的页号。

 

2,概要设计:

Ø1:

voidprintOut()

{该函数的功能是:

格式化文本文件后必要提示用户的信息说明}

Ø2:

voidwriteOut(FILE*fp2,charc1)

{该函数的功能是:

将字符输出到文本文件和屏幕}

Ø3:

intzuokongbai(FILE*fp2)

{该函数的功能是:

实现文本参数格式(左空白)}

Ø4:

voidpageNumber(FILE*fp2,char*aIndex,int*page)

{该函数的功能是:

输出当前页码}

Ø5:

voidout(int*columns,char*array,int*linage,FILE*fp2,int*page,int*size)

{该函数的功能是:

判断是否输出到文本文件和屏幕}

Ø6:

voidlinageFull(FILE*fp2,int*linage,int*columns,int*page)

{该函数的功能是:

输出页首的格式(头长+左空白)}

Ø7:

voidreadIn(FILE*fp1,FILE*fp2)

{该函数是整个程序的核心,执行程序的主要逻辑判断}

Ø8:

voidmain()

3,实验设计程序代码:

#include

#include

#include

int(PageLength)=56;//页长(一页最大的行数)

intPageWedth=60;//页宽(一行最大的字符数)

intLeftMargin=10;//左空白(一行开始输出的空格数)

intHeadingLength=5;//头长(一页开始输出的空行数)

intFootingLength=5;//脚长(每页最后空5行)

intStaringPageNumber=1;//起始页号

intpage=1;//记录页数

inti=0;//循环变量

chara[5];//记录page的char类型

char*aIndex=a;//数组a的首地址

//函数声明(后面的函数调用了它)

voidlinageFull(FILE*fp2,int*linage,int*columns,int*page);

//函数1:

voidprintOut()//输出头文件中的所以整形变量

{

//这个函数中的参数全部来自头文件

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);

printf("\n");

printf("特别说明:

本程序只支持英文格式化,对于中文格式化存在乱码问题。

\n");

printf("\n");

}

//函数2:

voidwriteOut(FILE*fp2,charc1)//输出到文本文件2和屏幕

{

charch1;

ch1=fputc(c1,fp2);//接收从文本文件1中读出的一个字符,并且保存到文本文件2中

printf("%c",ch1);//把这个字符输出到外设(屏幕)

}

//函数3:

intzuokongbai(FILE*fp2)//左空白

{

for(i=0;i<10;i++)

writeOut(fp2,'');//循环10次,输出10个空格到文本文件2中

returni;//返回值为10.它赋给记录单行字节数的变量columns

}

//函数4:

voidpageNumber(FILE*fp2,char*aIndex,int*page)//输出当前页码

{

intm,n;//定义2个整形变量接收page和page%10的值

m=*page;//接收page的值

inti=0;

while(m!

=0)//判断条件为:

m的值不为0即page的值不为0

{

n=m%10;

*(aIndex+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,*(aIndex+i));//向文本文件2中输出page

}

(*page)++;//指向下一页

}

//函数5:

voidout(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++)

{

writeOut(fp2,*(array+i));//把保存在数组中的一个字输出到文本文件2中

(*(columns))++;//输出一个字符,这一行的字符数就增加一个

}

(*(size))=0;//输出之后就开始重新向数组array中读入字符,所以size要归0

(*(array))='\0';//如果是多个空格连在一起,那么就需要把array数组第一个设为结束字符。

}

else//这一页还没印满,换行后开始输出

{

writeOut(fp2,'\n');//换行

(*(linage))++;

//*(columns)=0;

(*(columns))=zuokongbai(fp2);//左空白10

for(i=0;i<(*(size));i++)

{

writeOut(fp2,(*(array+i)));//通过循环向文本文件2中输入字

(*(columns))++;

}

(*(size))=0;

(*(array))='\0';

}

}

else//这一行还没有满,还可以再输出

{

writeOut(fp2,'');

(*(columns))++;

for(i=0;i<*size;i++)

{

writeOut(fp2,*(array+i));

(*(columns))++;

}

(*(size))=0;

(*(array))='\0';

}

}

 

//函数6:

voidlinageFull(FILE*fp2,int*linage,int*columns,int*page)//开始下一页的打印

{

//完成页的尾部格式(空一行后居中输出页码page再空3行)

writeOut(fp2,'\n');//空一行

for(i=0;i<29;i++)//居中输出页码

{

writeOut(fp2,'');

}

pageNumber(fp2,aIndex,page);

for(i=0;i<3;i++)

{

writeOut(fp2,'\n');//再空3行

}

*linage=0;

//开始打印第二页。

实现输出页首的格式(头长+左空白)

for(i=0;i<5;i++)//头长5

{

writeOut(fp2,'\n');

*linage++;//已经占有linage行

}

*columns=zuokongbai(fp2);//左空白10

}

 

//函数7:

voidreadIn(FILE*fp1,FILE*fp2)//读入文本文件

{

intblankNumber=0;//记录空格的数量

intlinage=0;//记录行数

intcolumns=0;//记录单行的字节数

chararray[61]={"\0"};//存一个单词

char*arrayIndex=array;

intsize=0;//初始化单词的长度

for(i=0;i<5;i++)//头长5

{

writeOut(fp2,'\n');

linage++;//已经占有linage行

}

columns=zuokongbai(fp2);//左空白10

for(i=0;i<7;i++)//段首缩进8字节

{

writeOut(fp2,'');

columns++;

}

//以上代码实现了基本的版面参数要求,下面开始具体到字母的排版

charc1;

c1=fgetc(fp1);//读入第一个字符

while(c1!

=EOF)//如果读到结尾了,退出这个函数。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1