版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告題目: 編制一個(gè)將待格式化的文本按照一定的版面要求重新排版并輸出到文件的程序:需求分析1:文本文件非空且以文本文件形式存放(為空沒有格式化意義) 。輸入輸出文件名均由用戶從鍵盤輸入。2:字的定義:由非( , (空格 )的任意 ASCII 碼字符組成。 3:文本文件的定義:由字母字符,數(shù)字字符,空格和可以用ASCII 代碼顯示的字符組成。只表示換行的意義。 (空格 )只表示一個(gè)字的結(jié)束的意義。 4:任何完整的字都沒有被分割在兩行 :,行尾不齊沒關(guān)系,但要實(shí)現(xiàn)左對(duì)齊。每行 字符數(shù)不超過 60 5:輸出文件中字與字之間只留一個(gè)空格符,即實(shí)現(xiàn)多余空格符的壓縮。6:符號(hào) 指示它后面的正文
2、在格式化時(shí)應(yīng)另起一段排放,段首縮入8 個(gè)字符的位置。:概要設(shè)計(jì)1: void printOut() 該函數(shù)的功能是:格式化文本文件后必要提示用戶的信息說明 2: void writeOut(FILE * fp2,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)前頁碼 5: void out(int * columns,char * array,i
3、nt * linage,FILE * fp2,int * page,int * size) 該函數(shù)的功能是:判斷是否輸出到文本文件和屏幕 6: void linageFull(FILE * fp2,int * linage,int * columns,int * page)該函數(shù)的功能是:輸出頁首的格式(頭長 + 左空白)7: void readIn(FILE * fp1,FILE * fp2)該函數(shù)是整個(gè)程序的核心,執(zhí)行程序的主要邏輯判斷8: void main() 該函數(shù)的功能是:程序的入口:詳細(xì)設(shè)計(jì)1,頭文件: noteParameter.h(參數(shù)的說明)int (PageLength)
4、 = 56;int PageWedth = 60;int LeftMargin = 10;int HeadingLength = 5;int FootingLength = 5;int StaringPageNumber = 1;/頁長(一頁最大的行數(shù)) /頁寬(一行最大的字符數(shù)) /左空白(一行開始輸出的空格數(shù)) /頭長(一頁開始輸出的空行數(shù)) / 腳長(每頁最后空 5 行) /起始頁號(hào)2,主程序中需要的全局變量和函數(shù)聲明int page = 1; int i = 0; char a5; char * aIndex = a;/記錄頁數(shù)/循環(huán)變量/記錄 page的 char 類型 / 數(shù)組 a
5、 的首地址/函數(shù)聲明(后面的函數(shù)調(diào)用了它)void linageFull(FILE * fp2,int * linage,int * columns,int * page);3:主函數(shù)和其他函數(shù)的偽代碼算法 說明:為了便于描述。 文本文件 1代表用戶輸入的要格式化的文本文件。 文本文件 2代表用戶輸入的格式化之后保存的文本文件。函數(shù) 1:void printOut()/輸出頭文件中的所有整形變量/這個(gè)函數(shù)中的參數(shù)全部來自頭文件printf(n);printf( 格式化文本文件結(jié)束 n);printf( 版面的參數(shù)如下: n);printf( 頁長: %dn,PageLength);printf
6、( 頁寬: %dn,PageWedth);printf( 左空白: %dn,LeftMargin);printf( 頭長: %dn,HeadingLength);printf( 腳長: %dn,FootingLength);printf( 起始頁號(hào): %dn,StaringPageNumber);printf(n);printf(特別說明: 本程序只支持英文格式化, 對(duì)于中文格式化存在亂碼問題。 n);printf(n);函數(shù) 2:void writeOut(FILE * fp2,char c1) /輸出到文本文件 2 和屏幕char ch1;ch1 = fputc(c1,fp2);/ 接收從
7、文本文件 1 中讀出的一個(gè)字符,并且保存到文本文件2 中printf(%c,ch1); /把這個(gè)字符輸出到外設(shè) (屏幕 )函數(shù) 3:/ 左空白/循環(huán) 10次,輸出 10個(gè)空格到文本文件 2 中/返回值為 10.它賦給記錄單行字節(jié)數(shù)的變量columnsint zuokongbai(FILE * fp2) for(i=0; i=0; i-)writeOut(fp2,*(aIndex+i);/向文本文件 2 中輸出 page(*page)+; /指向下一頁函數(shù) 5:void out(int * columns,char * array,int * linage,FILE * fp2,int * pa
8、ge,int * size)/輸出if(*(columns)+1+strlen(array) 60) / 判斷這一行是否還能夠輸出空格加一個(gè)單詞 /這一行不能再輸出了,開始換行 if(*(linage)50) /判斷這一頁是否已經(jīng)印滿linageFull(fp2,linage,columns,page);/ 轉(zhuǎn)到下一頁for(i=0; i*(size); i+) writeOut(fp2,*(array+i);/ 把保存在數(shù)組中的一個(gè)字輸出到文本文件2 中(*(columns)+;/ 輸出一個(gè)字符,這一行的字符數(shù)就增加一個(gè)(*(size) = 0;/ 輸出之后就開始重新向數(shù)組 array 中讀
9、入字符,所以 size 要?dú)w 0 (*(array) =0;/ 如果是多個(gè)空格連在一起,那么就需要把 array 數(shù)組第一個(gè)設(shè) 為結(jié)束字符。else / 這一頁還沒印滿,換行后開始輸出 writeOut(fp2,n);/ 換行 (*(linage)+; /*(columns)=0;(*(columns) = zuokongbai(fp2); / 左空白 10for(i=0; i(*(size); i+) writeOut(fp2,(*(array+i);/ 通過循環(huán)向文本文件 2 中輸入字 (*(columns)+;(*(size) = 0;(*(array) =0;else /這一行還沒有滿
10、,還可以再輸出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)/ 開始下一頁的打印/完成頁的尾部格式(空一行后居中輸出頁碼page 再空 3 行)writeOut(fp2,n);/空一行for(i=0; i29; i+)/居中輸出頁碼 writeOut(fp2, );pageNu
11、mber(fp2,aIndex,page);for(i=0; i3; i+) writeOut(fp2,n); /再空 3 行*linage=0;/開始打印第二頁。實(shí)現(xiàn)輸出頁首的格式(頭長+左空白)for(i=0; i5; i+) / 頭長 5 writeOut(fp2,n);*linage+; / 已經(jīng)占有 linage 行*columns = zuokongbai(fp2); / 左空白 10函數(shù) 7:void readIn(FILE * fp1,FILE * fp2)/ 讀入文本文件int blankNumber=0; int linage = 0;int columns = 0;/ 記
12、錄空格的數(shù)量/ 記錄行數(shù)/ 記錄單行的字節(jié)數(shù)char array61 = 0;/ 存一個(gè)單詞 char * arrayIndex = array;int size = 0;/ 初始化單詞的長度for(i=0; i5; i+) / 頭長 5 writeOut(fp2,n);linage+;/已經(jīng)占有 linage 行columns = zuokongbai(fp2); / 左空白 10 for(i=0; i50) /判斷這一頁是否已經(jīng)印滿 /印滿了要換頁輸出 linageFull(fp2,&linage,&columns,&page); for(i=0; i7; i+) /段首縮進(jìn) 8 字節(jié) w
13、riteOut(fp2, ); columns+;Else/這一頁沒有印滿writeOut(fp2,n);/ 換行 linage+;columns=0;columns = zuokongbai(fp2); / 左空白 10 for(i=0; i61)/ 程序中設(shè)計(jì)一個(gè)字不能超過 60 個(gè)字符,這里判斷條件為 61 是 加了一個(gè)結(jié)束符 0 .printf( 字符格式錯(cuò)誤 ! 哪有這么長的單詞 !n);break; / 結(jié)束 while 循環(huán)函數(shù) 8:/程序的入口void main()/ fp1 指向讀入的文本文件, fp2 指向輸出的文本文件 / 保存要格式化文本文件的文件名/ 保存格式化之后輸
14、出文本文件的文件名FILE * fp1,* 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 的地址printf( 請(qǐng)輸入輸出文件的文件名 (包括后綴名 ):n); gets(fileName_two);if(fp2=fopen(
15、fileName_two,a)=NULL)printf(The file %s was not fopen!n,fileName_two); exit(0); /得到格式化后要保存到文本文件 2 的地址readIn(fp1,fp2);/讀入文本文件開始格式化printOut();/ 參數(shù)說明fclose(fp1);fclose(fp2);/關(guān)閉文件 (把文件緩沖區(qū)的數(shù)據(jù)送入硬盤中 ) 關(guān)閉文件 (把文件緩沖區(qū)的數(shù)據(jù)送入硬盤中 )四:調(diào)試分析1:本程序歷時(shí) 9 天完工,在分析數(shù)據(jù)結(jié)構(gòu)時(shí)對(duì)程序的架構(gòu)沒有想好,導(dǎo)致這個(gè)程 序有 2 個(gè)版本。 每個(gè)版本都有各自的優(yōu)點(diǎn)和缺點(diǎn)。 現(xiàn)在程序已經(jīng)實(shí)現(xiàn)了所有的功
16、能 并對(duì)代碼進(jìn)行了必要的優(yōu)化設(shè)計(jì)。2:在編程過程中,對(duì)設(shè)計(jì)做了如下修改:( 1):在第一版中設(shè)計(jì)為:讀一個(gè)字符判斷是否為:空, 。(占不考慮其他條件) 不是就直接輸出。 導(dǎo)致不能實(shí)現(xiàn)任何完整的字都沒有被分割在兩行這 個(gè)功能。( 2)在第二版中改為:讀一個(gè)字符判斷是否為:空字符, 。(占不考慮其他條件) 不是就保存在數(shù)組中, 這個(gè)數(shù)組就是保存一個(gè)字的作用。 判斷輸出就 是一個(gè)一個(gè)字的輸出, 這樣就實(shí)現(xiàn)了任何完整的字都沒有被分割在兩行這個(gè)功 能。( 3):在第一版中就遇到頁碼輸出的問題。 開始我設(shè)計(jì)頁碼是整形, 當(dāng)格式化 文本文件過大時(shí), 頁碼輸出就出現(xiàn)了問題。 實(shí)現(xiàn)輸出頁碼是用 fputc 這個(gè)
17、函數(shù), 它是實(shí)現(xiàn)字符的輸出,就把整形的頁碼數(shù)轉(zhuǎn)換為 ASCII 碼形式輸出了。( 4)在第二版中改為:把整形的頁碼轉(zhuǎn)換為字符型用一個(gè)字符數(shù)組來保存。 每次輸出頁碼是就是輸出這個(gè)數(shù)組中的數(shù)據(jù)。 這樣就實(shí)現(xiàn)了頁碼的完整輸出。.exe。五:用戶手冊(cè)1:本程序的運(yùn)行環(huán)境為 DOS 操作系統(tǒng),執(zhí)行文件為:文本格式化2:進(jìn)入程序后即顯示提示信息:請(qǐng)輸入要格式化文件的文件名(包括后綴名 ):以等待用戶輸入待格式化的文本文件名 (一個(gè)回車為結(jié)束標(biāo)志的字符串 ),如果該文件不 存在,則顯示信息: The file ?“” was not fopen!(? 為用戶輸入的文件名 ) 并退出程序。 如果該文件存在,則
18、執(zhí)行程序的下一步。提示信息:請(qǐng)輸入輸出文件的文件名 (包 括后綴名 ): 以等待用戶輸入輸出文件的文本文件名(一個(gè)回車為結(jié)束標(biāo)志的字符串),如果該文件不存在, 則程序自動(dòng)新建一個(gè), 如果新建失敗則提示信息: The file “?” was not fopen!(? 為用戶輸入的文件名 )并退出程序。如果該文件存在,則在該文 件后面追加。3:輸入結(jié)束后,程序即進(jìn)行格式化。隨后輸出格式化信息。按任意鍵退出。詳細(xì) 見測試結(jié)果。4:格式化結(jié)果保存在由用戶指定的文本文件中,如果該文件存在,則在該文件后 面追加。(為了更好的觀察測試結(jié)果,請(qǐng)確保當(dāng)前工程中沒有該文件) 5:測試數(shù)據(jù)最大字不能超過 60 個(gè)
19、字符。6:本程序只格式化由字母字符構(gòu)成的文本文件。對(duì)于中文格式化存在亂碼問題。六:測試結(jié)果1:測試數(shù)據(jù): I have a dream.txt 文本文件 I have a dream節(jié)選I say to you today, my friends, that in spite of the difficulties and frustrations of the moment, I still have a dream. It is a dream deeply rooted in the American dream.I have a dream that one day this nati
20、on will rise up and live out the true meaning of its creed: We hold these truths to be self-evident: that all men are created equal.I have a dream that one day on the red hills of Georgia the sons of former slaves and the sons of former slaveowners will be able to sit down together at a table of bro
21、therhood.I have a dream that one day even the state of Mississippi, a desert state, sweltering with the heat of injustice and oppression, will be transformed into an oasis of freedom and justice.I have a dream that my four children will one day live in a nation where they will not be judged by the c
22、olor of their skin but by the content of their character.I have a dream today.2:測試結(jié)果: 請(qǐng)輸入要格式化文件的文件名 (包括后綴名 ):i have a dream.txt 請(qǐng)輸入輸出文件的文件名 (包括后綴名 ): value.txtI say to you today, my friends, that in spite of the difficulties and frustrations of the moment, I still have a dream. It is a dream deeply rooted in the American dream.I have a dream that one day this nation will rise up and live out the true meaning of its creed: We hold these truths to be self-evident: that all men are created equal.I have a dream that one day on the redhills o
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版智能交通解決方案合同
- 2025年粗紡混紡紗行業(yè)深度研究分析報(bào)告
- 2024-2029年中國微電聲器件行業(yè)市場研究與投資預(yù)測分析報(bào)告
- 全電子時(shí)控開關(guān)鐘行業(yè)行業(yè)發(fā)展趨勢及投資戰(zhàn)略研究分析報(bào)告
- 2025年度個(gè)人教育培訓(xùn)貸款延期合同4篇
- 2025年山西華新燃?xì)饧瘓F(tuán)有限公司招聘筆試參考題庫含答案解析
- 2025年山東海洋冷鏈發(fā)展有限公司招聘筆試參考題庫含答案解析
- 二零二五版門衛(wèi)勞務(wù)與城市安全服務(wù)合同4篇
- 2025年江蘇海晟控股集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 2025年遼寧鞍山市臺(tái)安縣城建集團(tuán)招聘筆試參考題庫含答案解析
- 太平洋藍(lán)鯨計(jì)劃制度和基本法
- (承諾書)安防監(jiān)控售后服務(wù)承諾書范文
- 高低溫交變濕熱試驗(yàn)檢測報(bào)告
- 蘇教版四年級(jí)數(shù)學(xué)下冊(cè)《全冊(cè)》完整課件ppt
- 《高一地理必修一全套課件》
- 新點(diǎn)軟件算量基礎(chǔ)知識(shí)內(nèi)部培訓(xùn)講義
- 幼兒園學(xué)前-《拍蚊子》教學(xué)課件設(shè)計(jì)
- 移動(dòng)商務(wù)內(nèi)容運(yùn)營(吳洪貴)任務(wù)三 APP的品牌建立與價(jià)值提供
- 北師大版三年級(jí)數(shù)學(xué)上冊(cè)《總復(fù)習(xí)》教案及教學(xué)反思
- 新聞評(píng)論-第五章新聞評(píng)論的選題技巧課件
- 電子競技范文10篇
評(píng)論
0/150
提交評(píng)論