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

下載本文檔

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

文檔簡(jiǎn)介

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

2、)測(cè)試用例自己設(shè)計(jì)。二,設(shè)計(jì):1, 版面要求的參數(shù)要包含: 頁(yè)長(zhǎng)(Page Length)每頁(yè)內(nèi)文字(不計(jì)頁(yè)號(hào))的行數(shù)。 頁(yè)寬(Page Wedth)每行內(nèi)文字所占最大字符數(shù)。 左空白(Left Margin)每行文字前的固定格數(shù)。 頭長(zhǎng)(Heading Length)每頁(yè)頁(yè)頂所空行數(shù)。 腳長(zhǎng)(Footing Length)每頁(yè)頁(yè)底所空行數(shù)(含頁(yè)號(hào)行) 起始頁(yè)號(hào)(Starting Page Number)首頁(yè)的頁(yè)號(hào)。2,概要設(shè)計(jì):Ø 1:void printOut()該函數(shù)的功能是:格式化文本文件后必要提示用戶的信息說(shuō)明Ø 2:void writeOut(FILE * fp

3、2,char c1)該函數(shù)的功能是:將字符輸出到文本文件和屏幕Ø 3:int zuokongbai(FILE * fp2)該函數(shù)的功能是:實(shí)現(xiàn)文本參數(shù)格式(左空白)Ø 4:void pageNumber(FILE * fp2,char * aIndex,int * page)該函數(shù)的功能是:輸出當(dāng)前頁(yè)碼 Ø 5:void out(int * columns,char * array,int * linage,FILE * fp2,int * page,int * size)該函數(shù)的功能是:判斷是否輸出到文本文件和屏幕Ø 6:void linageFull

4、(FILE * fp2,int * linage,int * columns,int * page)該函數(shù)的功能是:輸出頁(yè)首的格式(頭長(zhǎng)+左空白)Ø 7:void readIn(FILE * fp1,FILE * fp2)該函數(shù)是整個(gè)程序的核心,執(zhí)行程序的主要邏輯判斷Ø 8:void main()3,實(shí)驗(yàn)設(shè)計(jì)程序代碼:#include<stdio.h>#include<stdlib.h>#include<string.h>int (PageLength) = 56;/頁(yè)長(zhǎng)(一頁(yè)最大的行數(shù))int PageWedth = 60;/頁(yè)寬(一行

5、最大的字符數(shù))int LeftMargin = 10;/左空白(一行開始輸出的空格數(shù))int HeadingLength = 5;/頭長(zhǎng)(一頁(yè)開始輸出的空行數(shù))int FootingLength = 5;/腳長(zhǎng)(每頁(yè)最后空5行)int StaringPageNumber = 1;/起始頁(yè)號(hào)int page = 1;/記錄頁(yè)數(shù) int i = 0;/循環(huán)變量 char a5;/記錄page的char類型 char * aIndex = a;/數(shù)組a的首地址 /函數(shù)聲明(后面的函數(shù)調(diào)用了它) void linageFull(FILE * fp2,int * linage,int * columns

6、,int * page);/函數(shù)1:void printOut()/輸出頭文件中的所以整形變量/這個(gè)函數(shù)中的參數(shù)全部來(lái)自頭文件printf("n");printf("格式化文本文件結(jié)束n");printf("版面的參數(shù)如下:n");printf("頁(yè)長(zhǎng):%dn",PageLength);printf("頁(yè)寬:%dn",PageWedth);printf("左空白:%dn",LeftMargin);printf("頭長(zhǎng):%dn",HeadingLength)

7、;printf("腳長(zhǎng):%dn",FootingLength);printf("起始頁(yè)號(hào):%dn",StaringPageNumber);printf("n");printf("特別說(shuō)明:本程序只支持英文格式化,對(duì)于中文格式化存在亂碼問(wèn)題。n");printf("n");/函數(shù)2:void writeOut(FILE * fp2,char c1)/輸出到文本文件2和屏幕char ch1;ch1 = fputc(c1,fp2);/接收從文本文件1中讀出的一個(gè)字符,并且保存到文本文件2中printf

8、("%c",ch1);/把這個(gè)字符輸出到外設(shè)(屏幕)/函數(shù)3:int zuokongbai(FILE * fp2)/左空白for(i=0; i<10; i+)writeOut(fp2,' ');/循環(huán)10次,輸出10個(gè)空格到文本文件2中return i;/返回值為10.它賦給記錄單行字節(jié)數(shù)的變量columns/函數(shù)4:void pageNumber(FILE * fp2,char * aIndex,int * page)/輸出當(dāng)前頁(yè)碼int m,n;/定義2個(gè)整形變量接收page和page%10的值m = *page;/接收page的值int i=0;

9、while(m != 0)/判斷條件為:m的值不為0即page的值不為0n = m % 10;*(aIndex+i) = n+'0'/對(duì)數(shù)組a進(jìn)行賦值操作,把int類型的page的各位數(shù)轉(zhuǎn)換為字符型保存到數(shù)組a中,以便于向文本文件2中輸出pagei+;m = m /10;/此時(shí)page 已經(jīng)保存在數(shù)組a中了,開始輸出pagefor(i=i-1; i>=0; i-)writeOut(fp2,*(aIndex+i);/向文本文件2中輸出page(*page)+;/指向下一頁(yè)/函數(shù)5:void out(int * columns,char * array,int * linag

10、e,FILE * fp2,int * page,int * size)/輸出if(*(columns)+1+strlen(array) > 60)/判斷這一行是否還能夠輸出空格加一個(gè)單詞/這一行不能再輸出了,開始換行if(*(linage)>50)/判斷這一頁(yè)是否已經(jīng)印滿linageFull(fp2,linage,columns,page);/轉(zhuǎn)到下一頁(yè)for(i=0; i<*(size); i+)writeOut(fp2,*(array+i);/把保存在數(shù)組中的一個(gè)字輸出到文本文件2中(*(columns)+;/輸出一個(gè)字符,這一行的字符數(shù)就增加一個(gè)(*(size) = 0

11、;/輸出之后就開始重新向數(shù)組array中讀入字符,所以size要?dú)w0(*(array) ='0'/如果是多個(gè)空格連在一起,那么就需要把a(bǔ)rray數(shù)組第一個(gè)設(shè)為結(jié)束字符。else/這一頁(yè)還沒(méi)印滿,換行后開始輸出writeOut(fp2,'n');/換行(*(linage)+;/*(columns)=0;(*(columns) = zuokongbai(fp2);/左空白10for(i=0; i<(*(size); i+)writeOut(fp2,(*(array+i);/通過(guò)循環(huán)向文本文件2中輸入字(*(columns)+;(*(size) = 0;(*(a

12、rray) ='0'else/這一行還沒(méi)有滿,還可以再輸出writeOut(fp2,' ');(*(columns)+;for(i=0;i<*size; i+)writeOut(fp2,*(array+i);(*(columns)+;(*(size) = 0;(*(array) ='0'/函數(shù)6:void linageFull(FILE * fp2,int * linage,int * columns,int * page)/開始下一頁(yè)的打印/完成頁(yè)的尾部格式(空一行后居中輸出頁(yè)碼page再空3行)writeOut(fp2,'n&#

13、39;);/空一行for(i=0; i<29; i+)/居中輸出頁(yè)碼writeOut(fp2,' ');pageNumber(fp2,aIndex,page);for(i=0; i<3; i+)writeOut(fp2,'n');/再空3行*linage=0;/開始打印第二頁(yè)。實(shí)現(xiàn)輸出頁(yè)首的格式(頭長(zhǎng)+左空白)for(i=0; i<5; i+)/頭長(zhǎng)5writeOut(fp2,'n');*linage+;/已經(jīng)占有l(wèi)inage行*columns = zuokongbai(fp2);/左空白10/函數(shù)7:void readIn(F

14、ILE * fp1,FILE * fp2)/讀入文本文件int blankNumber=0;/記錄空格的數(shù)量int linage = 0;/記錄行數(shù)int columns = 0;/記錄單行的字節(jié)數(shù)char array61 = "0"/存一個(gè)單詞char * arrayIndex = array;int size = 0; /初始化單詞的長(zhǎng)度f(wàn)or(i=0; i<5; i+)/頭長(zhǎng)5writeOut(fp2,'n');linage+;/已經(jīng)占有l(wèi)inage行columns = zuokongbai(fp2);/左空白10for(i=0; i<7;

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

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

17、首縮進(jìn)8字節(jié)writeOut(fp2,' ');columns+;else/這一頁(yè)沒(méi)有印滿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/此時(shí)c1是一個(gè)要輸出的字符arraysize = c1;/保存到數(shù)組中size+;arraysize='0'c1 = fgetc(fp1);/上一個(gè)字符處理完了,開始從文本文件1中讀出

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

19、讀入的文本文件,fp2指向輸出的文本文件char fileName_one100;/保存要格式化文本文件的文件名char fileName_two100;/保存格式化之后輸出文本文件的文件名printf("請(qǐng)輸入要格式化文件的文件名(包括后綴名):n");gets(fileName_one);if(fp1=fopen(fileName_one,"r")=NULL)printf("The file "%s" was not fopen!n",fileName_one);exit(0);/得到要進(jìn)行格式化的文本文件1的

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

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

22、個(gè)一個(gè)字的輸出,這樣就實(shí)現(xiàn)了任何完整的字都沒(méi)有被分割在兩行這個(gè)功能。4,運(yùn)行結(jié)果:本人運(yùn)行程序的到的結(jié)果:(測(cè)試數(shù)據(jù)1.txt) The use of silence in communication is different from culture to culture. Silence can communicate agreement, confusion, respect, sadness, or any number of meanings. In eastern cultures, silence has long been regarded as a virtue. While

23、 in western cultures, silence has generally been considered socially disagreeable. To most people in the United States, silence The use of silence The use of silence in communication is different from culture to culture. Silence can communicate agreement, confusion, respect, sadness, or any number o

24、f meanings. In eastern cultures, silence has long been regarded as a virtue. While in western cultures, silence has generally been considered socially disagreeable. To most people in the United States, silence The use of silence The use of silence in communication is different from culture to cultur

25、e. Silence can communicate agreement, confusion, respect, sadness, or any number of meanings. In eastern cultures, silence has long been regarded as a virtue. While in western cultures, silence has generally been considered socially disagreeable. To most people in the United States, silence The use

26、of silence The use of silence in communication is different from culture to culture. Silence can communicate agreement, confusion, respect, sadness, or any number of meanings. In eastern cultures, silence has long been regarded as a virtue. While in western cultures, silence has generally been consi

27、dered socially disagreeable. To most people in the United States, silence The use of silence The use of silence in communication is different from culture to culture. Silence can communicate agreement, confusion, respect, sadness, or any number of meanings. In eastern cultures, silence has long been

28、 regarded as a virtue. While in western cultures, silence has generally been considered socially disagreeable. To most people in the United States, silence The use of silence The use of silence in communication is different from culture to culture. Silence can communicate agreement, confusion, respect, sadness, or any number of meanings. In eastern cultures, silence has long been regarded as a virtue. While in western cultures, silence has generally been considered socially disagreeable. 1 To most people in the United States, silence The use of sile

溫馨提示

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

評(píng)論

0/150

提交評(píng)論