課程設(shè)計文本格式化_第1頁
課程設(shè)計文本格式化_第2頁
課程設(shè)計文本格式化_第3頁
課程設(shè)計文本格式化_第4頁
課程設(shè)計文本格式化_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、附件1:0121110340427程設(shè)計題目文本格式化學(xué)院計算機(jī)科學(xué)與技術(shù)學(xué)院專業(yè)計算機(jī)科學(xué)與技術(shù)班級計算機(jī)1104班姓名成霖指導(dǎo)教師吳利軍2013年6月17日題目:文本格式化一,問題描述:試寫一個文本格式化程序可以處理一個輸入文件,它按照用戶指定的下列版面規(guī)格參數(shù)重排版面:實(shí)現(xiàn)頁內(nèi)調(diào)整、分段、分頁等文本處理功能,排版結(jié)果存入輸出文本文件中。(1)輸出文件中字與字之間只留一個空格符,即實(shí)現(xiàn)多余空格符的壓縮。(2)輸出文件中,任何完整的字不能分割在兩行,行尾可以不齊,但行首要對齊。(3)將頁號印在頁底空行中第2行的中間位置上。(4)版面要求的參數(shù)見題集p117。(5)測試用例自己設(shè)計。二,設(shè)計:

2、1,版面要求的參數(shù)要包含:頁長(PageLength)每頁內(nèi)文字(不計頁號)的行數(shù)。頁寬(PageWedth)每行內(nèi)文字所占最大字符數(shù)。左空白(LeftMargin)每行文字前的固定格數(shù)。頭長(HeadingLength)每頁頁頂所空行數(shù)。腳長(FootingLength)每頁頁底所空行數(shù)(含頁號行)起始頁號(StartingPageNumber)首頁的頁號。2,概要設(shè)計:1:voidprintOut()該函數(shù)的功能是:格式化文本文件后必要提示用戶的信息說明2:voidwriteOut(FILE*fp2,charc1)該函數(shù)的功能是:將字符輸出到文本文件和屏幕3: intzuokongbai(

3、FILE*fp2)該函數(shù)的功能是:實(shí)現(xiàn)文本參數(shù)格式(左空白)4:voidpageNumber(FILE*fp2,char*aIndex,int*page)該函數(shù)的功能是:輸出當(dāng)前頁碼5: voidout(int*columns,char*array,int*linage,FILE*fp2,int*page,int*size)該函數(shù)的功能是:判斷是否輸出到文本文件和屏幕6: voidlinageFull(FILE*fp2,int*linage,int*columns,int*page)該函數(shù)的功能是:輸出頁首的格式(頭長+左空白)7:voidreadIn(FILE*fp1,FILE*fp2)該函

4、數(shù)是整個程序的核心,執(zhí)彳T程序的主要邏輯判斷8:voidmain()3,實(shí)驗設(shè)計程序代碼:#include<stdio.h>#include<stdlib.h>#include<string.h>/頁長(一頁最大的行數(shù))/頁寬(一行最大的字符數(shù))左空白(一行開始輸出的空格數(shù))/頭長(一頁開始輸出的空行數(shù))/腳長(每頁最后空5行)起始頁號int(PageLength)=56;intPageWedth=60;intLeftMargin=10;intHeadingLength=5;intFootingLength=5;intStaringPageNumber=1;

5、intpage=1;記錄頁數(shù)inti=0;循環(huán)變量chara5;記錄page的char類型char*aIndex=a;數(shù)組a的首地址函數(shù)聲明(后面的函數(shù)調(diào)用了它)voidlinageFull(FILE*fp2,int*linage,int*columns,int*page);/函數(shù)1:voidprintOut()輸出頭文件中的所以整形變量/這個函數(shù)中的參數(shù)全部來自頭文件printf("n");printf("格式化文本文件結(jié)束n");printf("版面的參數(shù)如下:n");printf("頁長:dn",PageLe

6、ngth);printf("頁寬:%dn",PageWedth);printf("左空白:%dn",LeftMargin);printf("頭長:%dn",HeadingLength);printf("腳長:%dn",FootingLength);printf("起始頁號:dn",StaringPageNumber);printf("n");printf("特別說明:本程序只支持英文格式化,對于中文格式化存在亂碼問題。n");printf("n&

7、quot;);)/函數(shù)2:voidwriteOut(FILE*fp2,charc1)/輸出到文本文件2和屏幕(charch1;ch1=fputc(c1,fp2);/接收從文本文件1中讀出的一個字符,并且保存到文本文件2中printf("%c",ch1);把這個字符輸出到外設(shè)(屏幕)/函數(shù)3:intzuokongbai(FILE*fp2)/左空白(for(i=0;i<10;i+)writeOut(fp2,'');循環(huán)10次,輸出10個空格到文本文件2中returni;返回值為10.它賦給記錄單行字節(jié)數(shù)的變量columns)/函數(shù)4:voidpageNum

8、ber(FILE*fp2,char*aIndex,int*page)/輸出當(dāng)前頁碼(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'/對數(shù)組a進(jìn)行賦值操作,把int類型的page的各位數(shù)轉(zhuǎn)換為字符型保存到數(shù)組a中,以便于向文本文件2中輸出pagei+;m=m/10;)/此時page已經(jīng)保存在數(shù)組a中了,開始輸出pagefor(i=i-1;i>=0;i-)(writeOut(fp2,*(aInde

9、x+i);向文本文件2中輸出page)(*page)+;指向下一頁)/函數(shù)5:voidout(int*columns,char*array,int*linage,FILE*fp2,int*page,int*size)輸出(if(*(columns)+1+strlen(array)>60)/判斷這一行是否還能夠輸出空格加一個單詞(這一行不能再輸出了,開始換行if(*(linage)>50)判斷這一頁是否已經(jīng)印滿(linageFull(fp2,linage,columns,page);/轉(zhuǎn)至U下頁for(i=0;i<*(size);i+)(writeOut(fp2,*(array

10、+i);/把保存在數(shù)組中的一個字輸出到文本文件2中(*(columns)+;/輸出一個字符,這一行的字符數(shù)就增加一個(*(size)=0;輸出之后就開始重新向數(shù)組array中讀入字符,所以size要30(*(array)='0'/如果是多個空格連在一起,那么就需要把a(bǔ)rray數(shù)組第一個設(shè)為結(jié)束字符。else這一頁還沒印滿,換行后開始輸出(writeOut(fp2,'n');/換行(*(linage)+;/*(columns)=0;(*(columns)=zuokongbai(fp2);/左空白10for(i=0;i<(*(size);i+)(writeOu

11、t(fp2,(*(array+i);/通過循環(huán)向文本文件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'/函數(shù)6:開始下一頁的打印voidlinageFull(FILE*fp2,int*linage,int*columns,int*page)/(完成

12、頁的尾部格式(空一行后居中輸出頁碼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;開始打印第二頁。實(shí)現(xiàn)輸出頁首的格式(頭長+左空白)for(i=0;i<5;i+)/頭長5(writeOut(fp2,'n');*linage+;已經(jīng)占有l(wèi)inage行)*columns=z

13、uokongbai(fp2);/左空白10)/函數(shù)7:voidreadIn(FILE*fp1,FILE*fp2)/讀入文本文件(intblankNumber=0;intlinage=0;intcolumns=0;/記錄空格的數(shù)量/記錄行數(shù)/記錄單行的字節(jié)數(shù)chararray61="0"/存一個單詞char*arrayIndex=array;intsize=0;/初始化單詞的長度for(i=0;i<5;i+)/頭長5writeOut(fp2,'n');linage+;已經(jīng)占有l(wèi)inage行)columns=zuokongbai(fp2);/左空白10fo

14、r(i=0;i<7;i+)段首縮進(jìn)8字節(jié)writeOut(fp2,'');columns+;)以上代碼實(shí)現(xiàn)了基本的版面參數(shù)要求,下面開始具體到字母的排版charc1;c1=fgetc(fp1);讀入第一個字符while(c1!=EOF)如果讀到結(jié)尾了,退出這個函數(shù)。否則開始字符的輸入輸出操作if(c1='')/如果字符為空格if(strlen(array)=0)/判斷空格前是否有一個字;沒有字不打印else/有一個字調(diào)用這個函數(shù)把這個字輸出到文本文件2和屏幕中out(&columns,array,&linage,fp2,&page,

15、&size);)elseif(c1='')如果字符為'就要另起一段先輸出if(strlen(array)=0)/判斷''前是否有一個字;沒有字不打印else/有字要打印調(diào)用這個函數(shù)把這個字輸出到文本文件2和屏幕中out(&columns,array,&linage,fp2,&page,&size);)輸出字后開始另起下一段if(linage>50)判斷這一頁是否已經(jīng)印滿印滿了要換頁輸出linageFull(fp2,&linage,&columns,&page);for(i=0;i<

16、;7;i+)/段首縮進(jìn)8字節(jié)writeOut(fp2,'');columns+;)else/這一頁沒有印滿(writeOut(fp2,'n');/換行l(wèi)inage+;columns=0;columns=zuokongbai(fp2);/左空白10for(i=0;i<7;i+)/段首縮進(jìn)8字節(jié)(writeOut(fp2,'');columns+;)else/此時cl是一個要輸出的字符(arraysize=c1;/保存到數(shù)組中size+;arraysize='0')cl=fgetc(fpl);/上一個字符處理完了,開始從文本文件

17、1中讀出下一個字符if(c1=EOF)/首先判斷是不是結(jié)束了(/文本文件已經(jīng)讀完。把前面已經(jīng)讀出保存在數(shù)組中的字輸出到文本文件2中out(&columns,array,&linage,fp2,&page,&size);break;/結(jié)束while循環(huán))61是加了一個if(strlen(array)>61)/程序中設(shè)計一個字不能超過60個字符,這里判斷條件為結(jié)束符'0'.(printf("字符格式錯誤!哪有這么長的單詞!n");break;/結(jié)束while循環(huán))/函數(shù)8:/程序的入口voidmain()(FILE*fp1,

18、*fp2;charfileName_one100;charfileName_two100;/fp1指向讀入的文本文件,fp2指向輸出的文本文件/保存要格式化文本文件的文件名/保存格式化之后輸出文本文件的文件名printf("請輸入要格式化文件的文件名(包括后綴名):n");gets(fileName_one);if(fp1=fopen(fileName_one,"r")=NULL)(printf("Thefile"%s"wasnotfopen!n",fileName_one);exit(0);得到要進(jìn)行格式化的文本

19、文件1的地址printf("請輸入輸出文件的文件名(包括后綴名):n");gets(fileName_two);if(fp2=fopen(fileName_two,"a")=NULL)(printf("Thefile"%s"wasnotfopen!n",fileName_two);exit(0);得到格式化后要保存到文本文件2的地址readIn(fp1,fp2);/讀入文本文件開始格式化printOut();/參數(shù)說明fclose(fp1);/關(guān)閉文件(把文件緩沖區(qū)的數(shù)據(jù)送入硬盤中)fclose(fp2);/關(guān)閉文

20、件(把文件緩沖區(qū)的數(shù)據(jù)送入硬盤中)3,調(diào)試過程:(1):開始我設(shè)計頁碼是整形,當(dāng)格式化文本文件過大時,頁碼輸出就出現(xiàn)了問題。實(shí)現(xiàn)輸出頁碼是用fputc這個函數(shù),它是實(shí)現(xiàn)字符的輸出,就把整形的頁碼數(shù)轉(zhuǎn)換為ASCII碼形式輸出了。改為:把整形的頁碼轉(zhuǎn)換為字符型用一個字符數(shù)組來保存。每次輸出頁碼是就是輸出這個數(shù)組中的數(shù)據(jù)。這樣就實(shí)現(xiàn)了頁碼的完整輸出。(2)讀一個字符判斷是否為:空,''。(占不考慮其他條件)不是就直接輸出。導(dǎo)致不能實(shí)現(xiàn)任何完整的字都沒有被分割在兩行這個功能。改為:讀一個字符判斷是否為:空字符,''。(占不考慮其他條件)不是就保存在數(shù)組中,這個數(shù)組就是保

21、存一個字的作用。判斷輸出就是一個一個字的輸出,這樣就實(shí)現(xiàn)了任何完整的字都沒有被分割在兩行這個功能。4,運(yùn)行結(jié)果:本人運(yùn)行程序的到的結(jié)果:(測試數(shù)據(jù)1.txt)Theuseofsilenceincommunicationisdifferentfromculturetoculture.Silencecancommunicateagreement,confusion,respect,sadness,oranynumberofmeanings.Ineasterncultures,silencehaslongbeenregardedasavirtue.Whileinwesterncultures,sil

22、encehasgenerallybeenconsideredsociallydisagreeable.TomostpeopleintheUnitedStates,silenceTheuseofsilenceTheuseofsilenceincommunicationisdifferentfromculturetoculture.Silencecancommunicateagreement,confusion,respect,sadness,oranynumberofmeanings.Ineasterncultures,silencehaslongbeenregardedasavirtue.Wh

23、ileinwesterncultures,silencehasgenerallybeenconsideredsociallydisagreeable.TomostpeopleintheUnitedStates,silenceTheuseofsilenceTheuseofsilenceincommunicationisdifferentfromculturetoculture.Silencecancommunicateagreement,confusion,respect,sadness,oranynumberofmeanings.Ineasterncultures,silencehaslong

24、beenregardedasavirtue.Whileinwesterncultures,silencehasgenerallybeenconsideredsociallydisagreeable.TomostpeopleintheUnitedStates,silenceTheuseofsilenceTheuseofsilenceincommunicationisdifferentfromculturetoculture.Silencecancommunicateagreement,confusion,respect,sadness,oranynumberofmeanings.Ineaster

25、ncultures,silencehaslongbeenregardedasavirtue.Whileinwesterncultures,silencehasgenerallybeenconsideredsociallydisagreeable.TomostpeopleintheUnitedStates,silenceTheuseofsilenceTheuseofsilenceincommunicationisdifferentfromculturetoculture.Silencecancommunicateagreement,confusion,respect,sadness,oranyn

26、umberofmeanings.Ineasterncultures,silencehaslongbeenregardedasavirtue.Whileinwesterncultures,silencehasgenerallybeenconsideredsociallydisagreeable.TomostpeopleintheUnitedStates,silenceTheuseofsilenceTheuseofsilenceincommunicationisdifferentfromculturetoculture.Silencecancommunicateagreement,confusio

27、n,respect,sadness,oranynumberofmeanings.Ineasterncultures,silencehaslongbeenregardedasavirtue.Whileinwesterncultures,silencehasgenerallybeenconsideredsociallydisagreeable.1TomostpeopleintheUnitedStates,silenceTheuseofsilenceTheuseofsilenceincommunicationisdifferentfromculturetoculture.Silencecancomm

28、unicateagreement,confusion,respect,sadness,oranynumberofmeanings.Ineasterncultures,silencehaslongbeenregardedasavirtue.Whileinwesterncultures,silencehasgenerallybeenconsideredsociallydisagreeable.TomostpeopleintheUnitedStates,silenceTheuseofsilenceTheuseofsilenceincommunicationisdifferentfromculture

29、toculture.Silencecancommunicateagreement,confusion,respect,sadness,oranynumberofmeanings.Ineasterncultures,silencehaslongbeenregardedasavirtue.Whileinwesterncultures,silencehasgenerallybeenconsideredsociallydisagreeable.TomostpeopleintheUnitedStates,silenceTheuseofsilence附截圖:I告理員C:Windowssystem32cmd.exeC:MJs

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論