课程设计文本格式化Word文件下载.docx
- 文档编号:17962326
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:17
- 大小:150.62KB
课程设计文本格式化Word文件下载.docx
《课程设计文本格式化Word文件下载.docx》由会员分享,可在线阅读,更多相关《课程设计文本格式化Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
左空白(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<
stdio.h>
stdlib.h>
string.h>
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"
);
格式化文本文件结束\n"
版面的参数如下:
页长:
%d\n"
PageLength);
页宽:
PageWedth);
左空白:
LeftMargin);
头长:
HeadingLength);
脚长:
FootingLength);
起始页号:
StaringPageNumber);
特别说明:
本程序只支持英文格式化,对于中文格式化存在乱码问题。
}
//函数2:
voidwriteOut(FILE*fp2,charc1)//输出到文本文件2和屏幕
{
charch1;
ch1=fputc(c1,fp2);
//接收从文本文件1中读出的一个字符,并且保存到文本文件2中
%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;
*(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
(*(size));
writeOut(fp2,(*(array+i)));
//通过循环向文本文件2中输入字
else//这一行还没有满,还可以再输出
(*(columns))++;
for(i=0;
i<
*size;
writeOut(fp2,*(array+i));
(*(columns))++;
(*(size))=0;
(*(array))='
//函数6:
voidlinageFull(FILE*fp2,int*linage,int*columns,int*page)//开始下一页的打印
//完成页的尾部格式(空一行后居中输出页码page再空3行)
writeOut(fp2,'
//空一行
29;
i++)//居中输出页码
pageNumber(fp2,aIndex,page);
3;
//再空3行
*linage=0;
//开始打印第二页。
实现输出页首的格式(头长+左空白)
5;
i++)//头长5
*linage++;
//已经占有linage行
*columns=zuokongbai(fp2);
//函数7:
voidreadIn(FILE*fp1,FILE*fp2)//读入文本文件
intblankNumber=0;
//记录空格的数量
intlinage=0;
//记录行数
intcolumns=0;
//记录单行的字节数
chararray[61]={"
\0"
};
//存一个单词
char*arrayIndex=array;
intsize=0;
//初始化单词的长度
linage++;
columns=zuokongbai(fp2);
7;
i++)//段首缩进8字节
columns++;
//以上代码实现了基本的版面参数要求,下面开始具体到字母的排版
charc1;
c1=fgetc(fp1);
//读入第一个字符
while(c1!
=EOF)//如果读到结尾了,退出这个函数。
否则开始字符的输入输出操作
if(c1=='
)//如果字符为空格
if(strlen(array)==0)//判断空格前是否有一个字
;
//没有字不打印
else//有一个字
{
//调用这个函数把这个字输出到文本文件2和屏幕中
out(&
columns,array,&
linage,fp2,&
page,&
size);
elseif(c1=='
@'
)//如果字符为‘@’就要另起一段
{
//先输出
if(strlen(array)==0)//判断‘@’前是否有一个字
else//有字要打印
//输出字后开始另起下一段
if(linage>
//印满了要换页输出
linageFull(fp2,&
linage,&
columns,&
page);
for(i=0;
{
writeOut(fp2,'
columns++;
}
else//这一页没有印满
writeOut(fp2,'
linage++;
columns=0;
columns=zuokongbai(fp2);
else//此时c1是一个要输出的字符
array[size]=c1;
//保存到数组中
size++;
array[size]='
c1=fgetc(fp1);
//上一个字符处理完了,开始从文本文件1中读出下一个字符
if(c1==EOF)//首先判断是不是结束了
//文本文件已经读完。
把前面已经读出保存在数组中的字输出到文本文件2中
out(&
break;
//结束while循环
if(strlen(array)>
61)//程序中设计一个字不能超过60个字符,这里判断条件为61是加了一个结束符‘\0’.
printf("
字符格式错误!
哪有这么长的单词!
//结束while循环
//函数8:
//程序的入口
FILE*fp1,*fp2;
//fp1指向读入的文本文件,fp2指向输出的文本文件
charfileName_one[100];
//保存要格式化文本文件的文件名
charfileName_two[100];
//保存格式化之后输出文本文件的文件名
请输入要格式化文件的文件名(包括后缀名):
gets(fileName_one);
if((fp1=fopen(fileName_one,"
r"
))==NULL)
printf("
Thefile\"
%s\"
wasnotfopen!
fileName_one);
exit(0);
//得到要进行格式化的文本文件1的地址
请输入输出文件的文件名(包括后缀名):
gets(fileName_two);
if((fp2=fopen(fileName_two,"
a"
fileName_two);
//得到格式化后要保存到文本文件2的地址
readIn(fp1,fp2);
//读入文本文件开始格式化
printOut();
//参数说明
fclose(fp1);
//关闭文件(把文件缓冲区的数据送入硬盘中)
fclose(fp2);
3,调试过程:
●
(1):
开始我设计页码是整形,当格式化文本文件过大时,页码输出就出现了问题。
实现输出页码是用fputc这个函数,它是实现字符的输出,就把整形的页码数转换为ASCII码形式输出了。
改为:
把整形的页码转换为字符型用一个字符数组来保存。
每次输出页码是就是输出这个数组中的数据。
这样就实现了页码的完整输出。
●
(2)读一个字符判断是否为:
空,‘@’。
(占不考虑其他条件)不是就直接输出。
导致不能实现任何完整的字都没有被分割在两行这个功能。
读一个字符判断是否为:
空字符,‘@’。
(占不考虑其他条件)不是就保存在数组中,这个数组就是保存一个字的作用。
判断输出就是一个一个字的输出,这样就实现了任何完整的字都没有被分割在两行这个功能。
4,运行结果:
本人运行程序的到的结果:
(测试数据1.txt)
Theuseofsilenceincommunicationis
differentfromculturetoculture.Silencecan
communicateagreement,confusion,respect,
sadness,oranynumberofmeanings.
Ineastern
cultures,silencehaslongbeenregardedasa
virtue.Whileinwesterncultures,silencehas
generallybeenconsideredsociallydisagreeable.
TomostpeopleintheUnitedStates,silenceThe
useofsilenceTheuseofsilenceincommunication
isdifferentfromculturetoculture.Silencecan
1
cult
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 文本 格式化