课程设计实验报告.docx
《课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《课程设计实验报告.docx(6页珍藏版)》请在冰豆网上搜索。
![课程设计实验报告.docx](https://file1.bdocx.com/fileroot1/2022-10/20/d6a76dd1-072f-4714-919d-b4785e93eb32/d6a76dd1-072f-4714-919d-b4785e93eb321.gif)
课程设计实验报告
课程设计实验报告
课程设计实验报告
题目:
编制一个将待格式化得文本按照一定得版面要求重新排版并输出到文件得程序
一:
需求分析
?
1:
文本文件非空且以文本文件形式存放(为空没有格式化意义)。
输入输出文件名均由用户从键盘输入。
?
2:
字得定义:
由非(‘@’,‘’(空格))得任意ASCII码字符组成。
?
3:
文本文件得定义:
由字母字符,数字字符,空格与可以用ASCII代码显示得字符组成。
‘@’只表示换行得意义。
‘’(空格)只表示一个字得结束得意义。
?
4:
任何完整得字都没有被分割在两行:
,行尾不齐没关系,但要实现左对齐。
每行字符数不超过60
?
5:
输出文件中字与字之间只留一个空格符,即实现多余空格符得压缩。
?
6:
符号‘@’指示它后面得正文在格式化时应另起一段排放,段首缩入8个字符得位置。
二:
概要设计
?
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()
{该函数得功能就是:
程序得入口}
三:
详细设计
1,头文件:
noteParameter、h(参数得说明)
int(PageLength)=56;//页长(一页最大得行数)
intPageWedth=60;//页宽(一行最大得字符数)
intLeftMargin=10;//左空白(一行开始输出得空格数)
intHeadingLength=5;//头长(一页开始输出得空行数)
intFootingLength=5;//脚长(每页最后空5行)
intStaringPageNumber=1;//起始页号
2,主程序中需要得全局变量与函数声明
intpage=1;//记录页数
inti=0;//循环变量
chara[5];//记录page得char类型
char*aIndex=a;//数组a得首地址
//函数声明(后面得函数调用了它)
voidlinageFull(FILE*fp2,int*linage,int*columns,int*page);
3:
主函数与其她函数得伪代码算法
说明:
为了便于描述。
‘文本文件1’代表用户输入得要格式化得文本文件。
‘文本文件2’代表用户输入得格式化之后保存得文本文件。
函数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=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;i50)//判断这一页就是否已经印满
{
//印满了要换页输出
linageFull(fp2,&linage,&columns,&page);
for(i=0;i61)//程序中设计一个字不能超过60个字符,这里判断条件为61就是加了一个结束符‘\0’、
{
printf("字符格式错误!
哪有这么长得单词!
\n");
break;//结束while循环
}
}
}
函数8:
//程序得入口
voidmain()
{
FILE*fp1,*fp2;//fp1指向读入得文本文件,fp2指向输出得文本文件char[100];//保存要格式化文本文件得文件名
char[100];//保存格式化之后输出文本文件得文件名
printf("请输入要格式化文件得文件名(包括后缀名):
\n");
gets();
if((fp1=fopen(,"r"))==NULL)
{
printf("Thefile\"%s\"wasnotfopen!
\n",);
exit(0);
}
//得到要进行格式化得文本文件1得地址
printf("请输入输出文件得文件名(包括后缀名):
\n");
gets();
if((fp2=fopen(,"a"))==NULL)
{
printf("Thefile\"%s\"wasnotfopen!
\n",);
exit(0);
}
//得到格式化后要保存到文本文件2得地址
readIn(fp1,fp2);//读入文本文件开始格式化
printOut();//参数说明
fclose(fp1);//关闭文件(把文件缓冲区得数据送入硬盘中)
fclose(fp2);//关闭文件(把文件缓冲区得数据送入硬盘中)
}
四:
调试分析
?
1:
本程序历时9天完工,在分析数据结构时对程序得架构没有想好,导致这个程序有2个版本。
每个版本都有各自得优点与缺点。
现在程序已经实现了所有得功能
并对代码进行了必要得优化设计。
?
2:
在编程过程中,对设计做了如下修改:
●
(1):
在第一版中设计为:
读一个字符判断就是否为:
空,‘@’。
(占不考虑
其她条件)不就是就直接输出。
导致不能实现任何完整得字都没有被分割在两
行这个功能。
●
(2)在第二版中改为:
读一个字符判断就是否为:
空字符,‘@’。
(占不考虑
其她条件)不就是就保存在数组中,这个数组就就是保存一个字得作用。
判断
输出就就是一个一个字得输出,这样就实现了任何完整得字都没有被分割在两
行这个功能。
●(3):
在第一版中就遇到页码输出得问题。
开始我设计页码就是整形,当格式
化文本文件过大时,页码输出就出现了问题。
实现输出页码就是用fputc这个
函数,它就是实现字符得输出,就把整形得页码数转换为ASCII码形式输出
了。
●(4)在第二版中改为:
把整形得页码转换为字符型用一个字符数组来保存。
每次输出页码就是就就是输出这个数组中得数据。
这样就实现了页码得完整
输出。
五:
用户手册
?
1:
本程序得运行环境为DOS操作系统,执行文件为:
文本格式化、exe。
?
2:
进入程序后即显示提示信息:
请输入要格式化文件得文件名(包括后缀名):
以等待用户输入待格式化得文本文件名(一个回车为结束标志得字符串),如果该文件不
存在,则显示信息:
Thefile“?
”wasnotfopen!
(?
为用户输入得文件名)并退出程序。
如果该文件存在,则执行程序得下一步。
提示信息:
请输入输出文件得文件名(包
括后缀名):
以等待用户输入输出文件得文本文件名(一个回车为结束标志得字符
串),如果该文件不存在,则程序自动新建一个,如果新建失败则提示信息:
Thefile
“?
”wasnotfopen!
(?
为用户输入得文件名)并退出程序。
如果该文件存在,则在该文
件后面追加。
?
3:
输入结束后,程序即进行格式化。
随后输出格式化信息。
按任意键退出。
详细见测试结果。
?
4:
格式化结果保存在由用户指定得文本文件中,如果该文件存在,则在该文件后面追加。
(为了更好得观察测试结果,请确保当前工程中没有该文件)?
5:
测试数据最大字不能超过60个字符。
?
6:
本程序只格式化由字母字符构成得文本文件。
对于中文格式化存在乱码问题。
六:
测试结果
?
1:
测试数据:
Ihaveadream、txt文本文件《Ihaveadream》节选
Isaytoyoutoday,myfriends,thatinspiteofthedifficultiesandfrustrationsofthemoment,Istill
haveadream、ItisadreamdeeplyrootedintheAmericandream、@Ihaveadreamthatonedaythis
nationwillriseupandliveoutthetruemeaningofitscreed:
"Weholdthesetruthstobeself-evident:
thatallmenarecreatedequal、"