版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告題目: 編制一個(gè)將待格式化的文本按照一定的版面要求重新排版并輸出到文件的程序:需求分析1:文本文件非空且以文本文件形式存放(為空沒(méi)有格式化意義) 。輸入輸出文件名均由用戶從鍵盤(pán)輸入。2:字的定義:由非( , (空格 )的任意 ASCII 碼字符組成。 3:文本文件的定義:由字母字符,數(shù)字字符,空格和可以用ASCII 代碼顯示的字符組成。只表示換行的意義。 (空格 )只表示一個(gè)字的結(jié)束的意義。 4:任何完整的字都沒(méi)有被分割在兩行 :,行尾不齊沒(méi)關(guān)系,但要實(shí)現(xiàn)左對(duì)齊。每行 字符數(shù)不超過(guò) 60 5:輸出文件中字與字之間只留一個(gè)空格符,即實(shí)現(xiàn)多余空格符的壓縮。6:符號(hào) 指示它后面的正文
2、在格式化時(shí)應(yīng)另起一段排放,段首縮入8 個(gè)字符的位置。:概要設(shè)計(jì)1: void printOut() 該函數(shù)的功能是:格式化文本文件后必要提示用戶的信息說(shuō)明 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)前頁(yè)碼 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ù)的功能是:輸出頁(yè)首的格式(頭長(zhǎng) + 左空白)7: void readIn(FILE * fp1,FILE * fp2)該函數(shù)是整個(gè)程序的核心,執(zhí)行程序的主要邏輯判斷8: void main() 該函數(shù)的功能是:程序的入口:詳細(xì)設(shè)計(jì)1,頭文件: noteParameter.h(參數(shù)的說(shuō)明)int (PageLength)
4、 = 56;int PageWedth = 60;int LeftMargin = 10;int HeadingLength = 5;int FootingLength = 5;int StaringPageNumber = 1;/頁(yè)長(zhǎng)(一頁(yè)最大的行數(shù)) /頁(yè)寬(一行最大的字符數(shù)) /左空白(一行開(kāi)始輸出的空格數(shù)) /頭長(zhǎng)(一頁(yè)開(kāi)始輸出的空行數(shù)) / 腳長(zhǎng)(每頁(yè)最后空 5 行) /起始頁(yè)號(hào)2,主程序中需要的全局變量和函數(shù)聲明int page = 1; int i = 0; char a5; char * aIndex = a;/記錄頁(yè)數(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ù)的偽代碼算法 說(shuō)明:為了便于描述。 文本文件 1代表用戶輸入的要格式化的文本文件。 文本文件 2代表用戶輸入的格式化之后保存的文本文件。函數(shù) 1:void printOut()/輸出頭文件中的所有整形變量/這個(gè)函數(shù)中的參數(shù)全部來(lái)自頭文件printf(n);printf( 格式化文本文件結(jié)束 n);printf( 版面的參數(shù)如下: n);printf( 頁(yè)長(zhǎng): %dn,PageLength);printf
6、( 頁(yè)寬: %dn,PageWedth);printf( 左空白: %dn,LeftMargin);printf( 頭長(zhǎng): %dn,HeadingLength);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);/ 接收從
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)+; /指向下一頁(yè)函數(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è)單詞 /這一行不能再輸出了,開(kāi)始換行 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;/ 輸出之后就開(kāi)始重新向數(shù)組 array 中讀
9、入字符,所以 size 要?dú)w 0 (*(array) =0;/ 如果是多個(gè)空格連在一起,那么就需要把 array 數(shù)組第一個(gè)設(shè) 為結(jié)束字符。else / 這一頁(yè)還沒(méi)印滿,換行后開(kā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;(*(array) =0;else /這一行還沒(méi)有滿
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)/ 開(kāi)始下一頁(yè)的打印/完成頁(yè)的尾部格式(空一行后居中輸出頁(yè)碼page 再空 3 行)writeOut(fp2,n);/空一行for(i=0; i29; i+)/居中輸出頁(yè)碼 writeOut(fp2, );pageNu
11、mber(fp2,aIndex,page);for(i=0; i3; i+) writeOut(fp2,n); /再空 3 行*linage=0;/開(kāi)始打印第二頁(yè)。實(shí)現(xiàn)輸出頁(yè)首的格式(頭長(zhǎng)+左空白)for(i=0; i5; i+) / 頭長(zhǎng) 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;/ 初始化單詞的長(zhǎng)度f(wàn)or(i=0; i5; i+) / 頭長(zhǎng) 5 writeOut(fp2,n);linage+;/已經(jīng)占有 linage 行columns = zuokongbai(fp2); / 左空白 10 for(i=0; i50) /判斷這一頁(yè)是否已經(jīng)印滿 /印滿了要換頁(yè)輸出 linageFull(fp2,&linage,&columns,&page); for(i=0; i7; i+) /段首縮進(jìn) 8 字節(jié) w
13、riteOut(fp2, ); columns+;Else/這一頁(yè)沒(méi)有印滿writeOut(fp2,n);/ 換行 linage+;columns=0;columns = zuokongbai(fp2); / 左空白 10 for(i=0; i61)/ 程序中設(shè)計(jì)一個(gè)字不能超過(guò) 60 個(gè)字符,這里判斷條件為 61 是 加了一個(gè)結(jié)束符 0 .printf( 字符格式錯(cuò)誤 ! 哪有這么長(zhǎng)的單詞 !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);/讀入文本文件開(kāi)始格式化printOut();/ 參數(shù)說(shuō)明fclose(fp1);fclose(fp2);/關(guān)閉文件 (把文件緩沖區(qū)的數(shù)據(jù)送入硬盤(pán)中 ) 關(guān)閉文件 (把文件緩沖區(qū)的數(shù)據(jù)送入硬盤(pán)中 )四:調(diào)試分析1:本程序歷時(shí) 9 天完工,在分析數(shù)據(jù)結(jié)構(gòu)時(shí)對(duì)程序的架構(gòu)沒(méi)有想好,導(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:在編程過(guò)程中,對(duì)設(shè)計(jì)做了如下修改:( 1):在第一版中設(shè)計(jì)為:讀一個(gè)字符判斷是否為:空, 。(占不考慮其他條件) 不是就直接輸出。 導(dǎo)致不能實(shí)現(xiàn)任何完整的字都沒(méi)有被分割在兩行這 個(gè)功能。( 2)在第二版中改為:讀一個(gè)字符判斷是否為:空字符, 。(占不考慮其他條件) 不是就保存在數(shù)組中, 這個(gè)數(shù)組就是保存一個(gè)字的作用。 判斷輸出就 是一個(gè)一個(gè)字的輸出, 這樣就實(shí)現(xiàn)了任何完整的字都沒(méi)有被分割在兩行這個(gè)功 能。( 3):在第一版中就遇到頁(yè)碼輸出的問(wèn)題。 開(kāi)始我設(shè)計(jì)頁(yè)碼是整形, 當(dāng)格式化 文本文件過(guò)大時(shí), 頁(yè)碼輸出就出現(xiàn)了問(wèn)題。 實(shí)現(xiàn)輸出頁(yè)碼是用 fputc 這個(gè)
17、函數(shù), 它是實(shí)現(xiàn)字符的輸出,就把整形的頁(yè)碼數(shù)轉(zhuǎn)換為 ASCII 碼形式輸出了。( 4)在第二版中改為:把整形的頁(yè)碼轉(zhuǎn)換為字符型用一個(gè)字符數(shù)組來(lái)保存。 每次輸出頁(yè)碼是就是輸出這個(gè)數(shù)組中的數(shù)據(jù)。 這樣就實(shí)現(xiàn)了頁(yè)碼的完整輸出。.exe。五:用戶手冊(cè)1:本程序的運(yùn)行環(huán)境為 DOS 操作系統(tǒng),執(zhí)行文件為:文本格式化2:進(jìn)入程序后即顯示提示信息:請(qǐng)輸入要格式化文件的文件名(包括后綴名 ):以等待用戶輸入待格式化的文本文件名 (一個(gè)回車(chē)為結(jié)束標(biāo)志的字符串 ),如果該文件不 存在,則顯示信息: The file ?“” was not fopen!(? 為用戶輸入的文件名 ) 并退出程序。 如果該文件存在,則
18、執(zhí)行程序的下一步。提示信息:請(qǐng)輸入輸出文件的文件名 (包 括后綴名 ): 以等待用戶輸入輸出文件的文本文件名(一個(gè)回車(chē)為結(jié)束標(biāo)志的字符串),如果該文件不存在, 則程序自動(dòng)新建一個(gè), 如果新建失敗則提示信息: The file “?” was not fopen!(? 為用戶輸入的文件名 )并退出程序。如果該文件存在,則在該文 件后面追加。3:輸入結(jié)束后,程序即進(jìn)行格式化。隨后輸出格式化信息。按任意鍵退出。詳細(xì) 見(jiàn)測(cè)試結(jié)果。4:格式化結(jié)果保存在由用戶指定的文本文件中,如果該文件存在,則在該文件后 面追加。(為了更好的觀察測(cè)試結(jié)果,請(qǐng)確保當(dāng)前工程中沒(méi)有該文件) 5:測(cè)試數(shù)據(jù)最大字不能超過(guò) 60 個(gè)
19、字符。6:本程序只格式化由字母字符構(gòu)成的文本文件。對(duì)于中文格式化存在亂碼問(wèn)題。六:測(cè)試結(jié)果1:測(cè)試數(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:測(cè)試結(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. 本站所有資源如無(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年海南省建筑安全員B證考試題庫(kù)
- 2025年安徽建筑安全員-C證考試題庫(kù)
- 2025黑龍江省建筑安全員-A證考試題庫(kù)及答案
- 《急腹癥診治原則》課件
- 酸堿鹽復(fù)習(xí)課件浙教版
- 《手機(jī)視頻轉(zhuǎn)換》課件
- 單位管理制度展示大全【人員管理】十篇
- 車(chē)鉤緩沖器拆裝器行業(yè)深度研究報(bào)告
- 單位管理制度展示匯編【職工管理篇】十篇
- 單位管理制度收錄大全【人力資源管理篇】
- 機(jī)動(dòng)車(chē)查驗(yàn)員技能理論考試題庫(kù)大全-上(單選題部分)
- 監(jiān)理人員安全生產(chǎn)培訓(xùn)
- 2024-2030年中國(guó)電力檢修行業(yè)運(yùn)行狀況及投資前景趨勢(shì)分析報(bào)告
- 河北省百師聯(lián)盟2023-2024學(xué)年高二上學(xué)期期末大聯(lián)考?xì)v史試題(解析版)
- 中央空調(diào)系統(tǒng)運(yùn)行與管理考核試卷
- 核電工程排水隧道專項(xiàng)施工方案
- 2021年四川省涼山州九年級(jí)中考適應(yīng)性考試?yán)砜凭C合(試卷)
- 骨科疼痛的評(píng)估及護(hù)理
- 民辦學(xué)校招生教師培訓(xùn)
- 【MOOC】概率論與數(shù)理統(tǒng)計(jì)-南京郵電大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 2024年度軟件開(kāi)發(fā)分包合同技術(shù)要求與交底2篇
評(píng)論
0/150
提交評(píng)論