南郵軟件設(shè)計(jì)報(bào)告_第1頁
南郵軟件設(shè)計(jì)報(bào)告_第2頁
南郵軟件設(shè)計(jì)報(bào)告_第3頁
南郵軟件設(shè)計(jì)報(bào)告_第4頁
南郵軟件設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩73頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)軟件設(shè)計(jì)報(bào)告姓名:姓名: 李楊李楊 學(xué)號:學(xué)號:B2013 年年 7 月月 1 日日2013 年年 7 月月 12 日日精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)目目 錄錄0133345599003444523346712252精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)5精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)第一章第一章 軟件設(shè)計(jì)介紹軟件設(shè)計(jì)介紹 設(shè)計(jì)是把許多事物和問題抽象起來,并且抽象它們不同的層次和角度。建議用語言來抽象事務(wù)和問題,因?yàn)閿?shù)學(xué)是最好的抽象語言,并且它的本質(zhì)就是抽象。將復(fù)雜的問題分解成可以管理的片斷會更容易。將問題或事物分解并模塊化

2、這使得解決問題變得容易,分解的越細(xì)模塊數(shù)量也就越多,它的副作用就是使得設(shè)計(jì)者考慮更多的模塊之間的情況。 1.任務(wù)任務(wù) 軟件設(shè)計(jì)的任務(wù)是從軟件需求規(guī)格說明書出發(fā),根據(jù)需求分析階段確定的功能設(shè)計(jì)軟件系統(tǒng)的整體結(jié)構(gòu)、劃分功能模塊、確定每個(gè)模塊的實(shí)現(xiàn)算法以及編寫具體的代碼,形成軟件的具體設(shè)計(jì)方案。 2.特征特征一,抽象二,模塊化三,信息隱蔽四,模塊獨(dú)立性:模塊獨(dú)立性可以從兩個(gè)方面度量:1,內(nèi)聚性:偶然內(nèi)聚、邏輯內(nèi)聚、時(shí)間內(nèi)聚、過程內(nèi)聚、通信內(nèi)聚、順序內(nèi)聚、功能內(nèi)聚。2,耦合性:內(nèi)容耦合、公共耦合、外部耦合、控制耦合、標(biāo)記耦合、數(shù)據(jù)耦合、非直接耦合13.設(shè)計(jì)原則設(shè)計(jì)原則一、設(shè)計(jì)對于分析應(yīng)該是可跟蹤的:的

3、模塊可能被映射到多個(gè)上。二、設(shè)計(jì)結(jié)構(gòu)應(yīng)該盡可能的模擬實(shí)際問題。三、設(shè)計(jì)應(yīng)該表現(xiàn)出一致性。四、不要把設(shè)計(jì)當(dāng)成編寫。五、在創(chuàng)建設(shè)計(jì)時(shí)就應(yīng)該能夠評估質(zhì)量。六、評審設(shè)計(jì)以減少語義性的錯誤。七、設(shè)計(jì)應(yīng)該模塊化,將邏輯地劃分為元素或子系統(tǒng),并包含、 、接口和的清晰表示。4.設(shè)計(jì)過程設(shè)計(jì)過程的設(shè)計(jì)是一個(gè)將轉(zhuǎn)變?yōu)檐浖愂觯ū磉_(dá))的過程。這種陳述給一個(gè)對的全局。系統(tǒng)通過使得設(shè)計(jì)陳述逐漸接近。這里有兩個(gè)基本;第一步是初步設(shè)計(jì) Preliminary design ,關(guān)注于如何將轉(zhuǎn)換成和框架。第二步是 Detail design ,關(guān)注于將框架逐步求精細(xì)化為具體的和的算法表達(dá)。發(fā)生中的設(shè)計(jì)行為、 、算法和都需要由現(xiàn)

4、代程序所需的這一清晰的行為來結(jié)合起來。 Interface design 建立布局和人機(jī)交互機(jī)制。貫穿設(shè)計(jì)過程的質(zhì)量由一系列的 正式評定 formal technical reviews 或 設(shè)計(jì)排演 design walkthroughs 來評價(jià)。 第二章第二章 軟件開發(fā)平臺簡介軟件開發(fā)平臺簡介精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)Visual C+是一個(gè)功能強(qiáng)大的可視化軟件開發(fā)工具。自 1993年 Microsoft 公司推出Visual C+1.0后,隨著其新版本的不斷問世, Visual C+已成為專業(yè)程序員進(jìn)行軟件開發(fā)的首選工具。 雖然微軟公司推出了 Visual C+.NET(

5、Visual C+7.0),但它的應(yīng)用的很大的局限性,只適用于 Windows 2000,Windows XP 和 Windows NT4.0。所以實(shí)際中,更多的是以 Visual C+6.0為平臺。 Visual C+6.0不僅是一個(gè) C+編譯器,而且是一個(gè)基于 Windows 操作系統(tǒng)的可視化集成開發(fā)環(huán)境( integrated development environment,IDE) 。Visual C+6.0由許多組件組成,包括編輯器、調(diào)試器以及程序向?qū)?AppWizard、類向?qū)?Class Wizard 等開發(fā)工具。 這些組件通過一個(gè)名為Developer Studio 的組件集成

6、為和諧的開發(fā)環(huán)境。 Visual C+分分類類Visual C+它大概可以分成三個(gè)主要的部分: 1 Developer Studio這是一個(gè)集成開發(fā)環(huán)境,我們?nèi)粘9ぷ鞯?99%都是在它上面完成的,再加上它的標(biāo)題赫然寫著 “Microsoft Visual C+”,所以很多人理所當(dāng)然的認(rèn)為,那就是Visual C+了。其實(shí)不然,雖然 Developer Studio 提供了一個(gè)很好的編輯器和很多Wizard,但實(shí)際上它沒有任何編譯和鏈接程序的功能,真正完成這些工作的幕后英雄后面會介紹。我們也知道, Developer Studio 并不是專門用于 VC 的,它也同樣用于VB,VJ,VID 等家族

7、的其他同胞兄弟。所以不要把Developer Studio 當(dāng)成 Visual C+, 它充其量只是 Visual C+的一個(gè)殼子而已。這一點(diǎn)請切記! 2 MFC從理論上來講, MFC 也不是專用于 Visual C+,Borland C+,C+Builder 和Symantec C+同樣可以處理 MFC。同時(shí),用 Visual C+編寫代碼也并不意味著一定要用 MFC,只要愿意,用 Visual C+來編寫 SDK 程序,或者使用 STL,ATL,一樣沒有限制。不過, Visual C+本來就是為 MFC 打造的,Visual C+中的許多特征和語言擴(kuò)展也是為 MFC 而設(shè)計(jì)的,所以用 Vi

8、sual C+而不用 MFC 就等于拋棄了Visual C+中很大的一部分功能。但是, Visual C+也不等于 MFC。 3 Platform SDK精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)這才是 Visual C+和整個(gè) Visual Studio 的精華和靈魂,雖然我們很少能直接接觸到它。大致說來, Platform SDK 是以 Microsoft C/C+編譯器為核心(不是Visual C+,看清楚了) ,配合 MASM,輔以其他一些工具和文檔資料。上面說到Developer Studio 沒有編譯程序的功能,那么這項(xiàng)工作是由誰來完成的呢?是CL,是 NMAKE,和其他許許多多命

9、令行程序,這些我們看不到的程序才是構(gòu)成Visual Studio 的基石。精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)第三章第三章 軟件設(shè)計(jì)的內(nèi)容軟件設(shè)計(jì)的內(nèi)容3.1 分?jǐn)?shù)統(tǒng)計(jì)軟件(分?jǐn)?shù)統(tǒng)計(jì)軟件(A1)3.1.1 設(shè)計(jì)題目及要求設(shè)計(jì)題目及要求課題內(nèi)容:課題內(nèi)容:設(shè)計(jì)一個(gè)分?jǐn)?shù)統(tǒng)計(jì)程序。包括學(xué)生信息的輸入輸出以及排序。通過該課題全面熟悉數(shù)組、字符串、文件的使用,掌握程序設(shè)計(jì)的基本方法及友好界面的設(shè)計(jì)。課題要求:課題要求:(1)輸入某班級學(xué)生的姓名、分?jǐn)?shù);(2)對(1)的分?jǐn)?shù)進(jìn)行降冪排列并輸出;(3)具有輸入輸出界面。3.1.2 設(shè)計(jì)思想及程序流程框圖設(shè)計(jì)思想及程序流程框圖 將任務(wù)分拆成多個(gè)函數(shù)實(shí)現(xiàn)

10、,以提高程序的易讀性、可移植性和靈活性。因?yàn)閷W(xué)生的信息包括姓名和分?jǐn)?shù),為了方便,所以先定義一個(gè)student 的結(jié)構(gòu)體stu數(shù)組來存放學(xué)生信息。函數(shù)主要分為菜單類和具體功能實(shí)現(xiàn)類。菜單類:dis_menu()用來顯示菜單,用printf 語句設(shè)計(jì)你想要的界面即可; choice_menu()根據(jù)鍵入的字符來選擇一個(gè)分支執(zhí)行,起判斷選擇作用,為了看起來簡潔明了點(diǎn),選擇用switchcase 語句而不是ifelse 實(shí)現(xiàn)。功能類:主要有兩個(gè)功能,分別是錄入學(xué)生信息和成績降冪排序。input_inf()就是用來輸入學(xué)生信息的,利用一個(gè)循環(huán),將姓名和成績分別讀入到 和 stu.scor

11、e 里。為了防止輸入分?jǐn)?shù)時(shí)出錯,在輸入學(xué)生信息前手動輸入本次考試總分,每次輸入一個(gè)學(xué)生成績時(shí)和總分與0 分比較,如在 0100 分范圍外就報(bào)警,提示重新輸入;dis_inf()用來顯示輸入的學(xué)生信息; dec_score()利用雙層循環(huán),定義了一個(gè)最大值下標(biāo),每一趟循環(huán)都將剩下的值同stumax_index.score 比較,若比它大,則將下標(biāo)賦給 max_index,這樣,一趟能夠找到一個(gè)最大值,下一趟就從剩下的里面再逐一同stumax_index.score 比較。 當(dāng)然,還得添加一個(gè)退出選項(xiàng)。程序流程框圖: 精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè) 3.1.3 邏輯功能程序邏輯功能程序

12、 #include#include#include#includestruct student char name10; /學(xué)生姓名 float score; /學(xué)生成績stu100;int num,full;void dis_menu(); /菜單顯示函數(shù)開 始輸入學(xué)生人數(shù)輸入學(xué)生姓名 name和分?jǐn)?shù) fen用程序?qū)W(xué)生分?jǐn)?shù)排序輸出排序后的學(xué)生數(shù)據(jù) 結(jié) 束精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)void choice_menu(); /菜單選擇程序void input_inf(); /學(xué)生信息輸入函數(shù)void dis_inf(); /學(xué)生信息顯示函數(shù)void dec_score(); /學(xué)

13、生成績降冪排列int main()while(1)dis_menu();choice_menu();return 0;void dis_menu()printf(t*分?jǐn)?shù)統(tǒng)計(jì)程序*n);printf(t* 1、輸入學(xué)生成績 *n); printf(t* 2、分?jǐn)?shù)降冪排列 *n);printf(t* 3、退出程序 *n); printf(t*n);printf(t 請選擇你要進(jìn)行的操作:);void choice_menu()char i100;scanf(%s,i);if(strlen(i)1)printf(t 輸入錯誤!請重新輸入:); choice_menu(); elseswitch(*

14、i) case 1: printf(t 請輸入學(xué)生人數(shù):);scanf(%d,&num); printf(t 請輸入本次考試總分:);scanf(%d,&full); 精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè) input_inf(); dis_inf(); break; case 2: dec_score(); dis_inf(); break; case 3: printf(t); exit(1); break; default: printf(t 輸入錯誤!請重新輸入:); choice_menu(); break; void input_inf()int i;for(i

15、=0;ifull|stui.score0)printf(t 輸入錯誤!請重新輸入:); printf(t 成績:);scanf(%f,&stui.score); printf(n);void dis_inf() int i; printf(t 學(xué)生成績統(tǒng)計(jì)如下:n); printf(t%-10st%-8stn,姓名,成績); for(i=0;inum;i+) printf(t%-10st%-8gtn,,stui.score); printf(n);void dec_score()int i,j,max_index,n=num; struct student stu_t

16、emp; for(i=0;in-1;i+)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)max_index=i;for(j=i+1;jstumax_index.score)max_index=j;if(max_index!=i)stu_temp=stui;stui=stumax_index;stumax_index=stu_temp;3.1.4 結(jié)果及完善方向結(jié)果及完善方向 精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)完善方向:完善方向:1.分?jǐn)?shù)降冪排列顯示時(shí)最好顯示出具體的排名,這樣人數(shù)多的時(shí)候比較容易查到排名。2.界面可以做得更漂亮些,例如輸出表格式樣的。3.2 打字軟件(打字軟件(A2)3.2

17、.1 設(shè)計(jì)題目及要求設(shè)計(jì)題目及要求課題內(nèi)容:課題內(nèi)容:精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)設(shè)計(jì)一個(gè)打字程序。包括隨機(jī)產(chǎn)生字符串,以及字符串比較和統(tǒng)計(jì)。通過此課題,熟練掌握數(shù)組、格式輸出、字符串處理等。課題要求:課題要求:(1)隨機(jī)產(chǎn)生一字符串,每次產(chǎn)生的字符串內(nèi)容、長度都不同;(2)根據(jù)(1)的結(jié)果,輸入字符串,判斷輸入是否正確,輸出正確率;(3)具有輸入輸出界面。3.2.2 設(shè)計(jì)思想及程序流程框圖設(shè)計(jì)思想及程序流程框圖 除了界面菜單的打印和利用 switchcase 語句的菜單選擇部分,主要有兩部分,分別是隨機(jī)字符串產(chǎn)生函數(shù)和字符串比較函數(shù)。rand_str(char *p,int l

18、en)主要是用了 rand(),為了限制字符串長度,防止產(chǎn)生過多字符,可以用 1+rand()&max 來限制字符個(gè)數(shù)在 1max 間。數(shù)字和字母的 ascii 碼范圍為 4857,6590,97122,為了產(chǎn)生這些字符可以在 48122 的隨機(jī)數(shù)范圍內(nèi)挖掉 5864 和 9196 兩端。compare()則是用來比較用戶鍵盤輸入的字符串和隨機(jī)產(chǎn)生的字符串有多少一樣的,記下正確字符數(shù)和總字符數(shù),就能得出正確率。 為了讓用戶掌握更多信息,每輸入一組,不僅知道正確率,還要顯示打?qū)Χ嗌賯€(gè)字符;用戶做了多組后,能顯示打了幾組,正確幾組。程序流程框圖: 開 始輸出歡迎菜單 結(jié) 束輸出隨機(jī)產(chǎn)生的字

19、符串輸入用戶的輸入計(jì)算正確率并顯示輸入選項(xiàng) 繼續(xù)?精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)3.2.3 邏輯功能程序邏輯功能程序 #include#include#include#include#define max 20 /定義產(chǎn)生的字符串最長為 20 個(gè)字符void rand_str(char *p,int len); /隨機(jī)字符串產(chǎn)生函數(shù)double compare(char *p,char *q,int len,int *pnum); /輸入輸出比較函數(shù)int main()char p20=;char q20=;char ch20;int len,num=0,i=0,j=0;doubl

20、e F;srand(time(NULL); /清空上次的隨機(jī)數(shù) printf(t*n);printf(t* 歡迎使用打字程序 *n);printf(t*n); printf(tn);dochar p20=; char q20=; printf(nt*n);len=1+rand()%max; /字符串串長在 120 間rand_str(p,len);printf(nt*n);printf(t 請輸入以上字符串:n); printf(t);fflush(stdin);/減少不必要錯誤 scanf(%s,q);F=compare(p,q,len,&num);if(F=1)printf(t 輸

21、入正確!n);精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)i+;elseprintf(t 輸入錯誤,您本次輸入正確率:%0.2g%n,F*100); printf(t 您本次共輸入正確%d 個(gè)字符,num); printf(tn); getchar();j+;printf(t 您已練習(xí)打字%d 組,共正確%d 組,j,i);printf(t 您還繼續(xù)嗎?請按任意鍵繼續(xù)或者按 N 鍵結(jié)束:);scanf(%s,ch);while(ch0!=N&ch0!=n);printf(t);return 0;void rand_str(char *p,int len)int i;char ch;pri

22、ntf(t); for(i=0;i57&num90&num97); /只產(chǎn)生數(shù)字和大小寫字母字符ch=num;printf(%c,num);pi=ch;double compare(char *p,char *q,int len,int *pnum)int i;int num;精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)*pnum=0;double rate;for(i=0;ilen;i+)if(pi-qi)=0)*pnum=*pnum+1;num=*pnum;rate=1.0*num/len;return rate; 3.2.4 結(jié)果及完善方向結(jié)果及完善方向 完善方向完善方向:

23、1.可以調(diào)用系統(tǒng)時(shí)間函數(shù),記錄用戶打一組字符串的時(shí)間,算出打字速率。 2.字符串居中顯示會美觀一些。3.3 文本編輯器(文本編輯器(A3)3.3.1 設(shè)計(jì)題目及要求設(shè)計(jì)題目及要求課題內(nèi)容:課題內(nèi)容:設(shè)計(jì)一個(gè)簡單的文本編輯器,該系統(tǒng)要求對一個(gè)文本文件中的內(nèi)容進(jìn)行各種常規(guī)操作,精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)如:插入、刪除、查找、替換等功能。通過此課題,熟練掌握文本文件的操作及用字符數(shù)組或字符指針實(shí)現(xiàn)字符串操作的功能。 課題要求:課題要求:(1)編輯文本;(2)保存、打開指定位置的文本文件;(3)具有輸入輸出界面3.3.2 設(shè)計(jì)思想及程序流程框圖設(shè)計(jì)思想及程序流程框圖 由于文本編輯器需要

24、打開文件和編輯文件,設(shè)計(jì)了一個(gè)二級菜單,就是兩個(gè)菜單的嵌套,實(shí)質(zhì)上是 switchcase 的嵌套。一級菜單設(shè)有打開文件和退出兩個(gè)選項(xiàng),打開文件下還有一個(gè)二級菜單。為了增強(qiáng)程序容錯能力,在輸入錯誤文件路徑后,會提示錯誤,重新輸入,用一個(gè)循環(huán)來解決,直到輸入正確,才退出循環(huán)。編輯功能較為繁雜。主要分為插入,刪除,查找,替換四個(gè)函數(shù)部分實(shí)現(xiàn)。插入部分,將文本內(nèi)容讀入存儲到 s1中,要插入的字符串放到 s2中,輸入要插入的位置第 set 個(gè)字符后,先輸出 s10s1set-1,再輸出 s2,再把 s1剩下的字符輸出。刪除部分,將原字符串存儲到 s1中,要刪除的字符串放到 s2中。雙層循環(huán),當(dāng) s1中

25、有一個(gè)字符和 s20一樣時(shí),再分別將之后的 len2 長度的字符一一比較,如不一致,則跳出內(nèi)層循環(huán),開始第二趟外層循環(huán)。若都一致,求得一致部分的第一個(gè)字符的數(shù)組下標(biāo),這部分的 s1就不輸出。查找部分,利用 strstr()函數(shù)求得查找的字符串在原字符串出現(xiàn)的地址 p,再減去 s10地址就可求得出現(xiàn)在第幾個(gè)字符后。替換部分,和刪除部分差不多,求得 s1和 s2開始相同的下標(biāo) a,輸出 s10s1a-1到 s4,然后輸出就輸出替換的字符串 s3 到最后輸出的 s4 中,最后把 s1a+len3及之后的字符輸出到 s4 中。開始結(jié)束Choice=1Choice=2輸入文件名及路徑1.插入 2.刪除

26、3.查找 4.替換 5.顯示 6.返回 0.退出輸入插入的字符串輸入刪除的字符串輸入查找的字符串輸入替換的字符串及源字符串顯示文件內(nèi)容1.打開文件2.退出文件能否打開?輸入正確否?選擇操作精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè) n y 1 3 2 4 5 03.3.3 邏輯功能程序邏輯功能程序#include#include精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)#include#includeFILE* fp=NULL;FILE* fp1;char name50;void menu0();void Open();void choose0();void menu1();void choo

27、se1();void insert();void check();void replace();void deletef();void show();void welcome();/-主程序-void main()welcome();choose0();choose1();return;void welcome()printf(ttt*n);printf(ttt* 歡迎使用文本編輯器! *n);printf(ttt*nnn);void menu0() /一級菜單printf(ttt*n);printf(ttt* 1.打開文件 *n);printf(ttt* 0.退出 *n); printf(t

28、tt*n);void choose0() /一級選擇char choice;精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)char input100;int a=1,len;menu0();do printf(請選擇操作:);scanf(%s,input);len=strlen(input);choice=input0;if(choice=0&choice=0&choice=5&strlen(input)=1)a=0;elsesystem(cls); printf(ttt*n); printf(ttt 無效操作,請重新選擇n);printf(ttt*n);menu1();a

29、=1;switch(choice)case 1:insert();show();choose1();break;case 2:deletef();system(cls);show();choose1();break;case 3:system(cls);show();check();choose1();break;case 4:system(cls);replace();system(cls);show();精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)choose1();break;case 5:system(cls);choose0();break;case 0:system(cls);pri

30、ntf(ttt*n); printf(ttt* 歡迎下次使用 *n); printf(ttt*n);exit(1);void insert() /插入功能函數(shù)long set;char ch1;char s110000;char s2100;int i=0;int j=0;while(ch1=fgetc(fp)!=EOF)s1i=ch1;i+;rewind(fp);s1i=0;system(cls);show();printf(請輸入在第幾個(gè)字符后插入字符串:);scanf(%d,&set);getchar();printf(輸入你插入的字符串,以#號結(jié)束:); while(ch1=g

31、etchar()!=#)/若不出現(xiàn)“#”繼續(xù)讀入 s2j+=ch1; getchar();/接收 Enter 字符int len=j;精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)fclose(fp);fp=fopen(name,w+);for(j=0;jset;j+)ch1=s1j;fputc(ch1,fp);for(j=0;jlen;j+)ch1=s2j;fputc(ch1,fp);for(j=set;ji;j+)ch1=s1j;fputc(ch1,fp);fclose(fp);system(cls);void check() /查找功能函數(shù)char str250;char str1500;c

32、har ch;char *p;char *p1;int count=0;int i=0; printf(請輸入需要查找的字符串,以#號結(jié)束:);getchar(); while(ch=getchar()!=#)/若不為“#”繼續(xù)輸入 str2i+=ch;str2i=0;getchar();/消除 Enter 字符影響fp=fopen(name,r);if(!fp)printf(ttt *無法打開文件!*n);精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)rewind(fp);while(ch=fgetc(fp)!=EOF)str1count=ch;count+;str1count=0;fclose

33、(fp);p=strstr(str1,str2); /str2 在 str1 中第一次出現(xiàn)的位置p1=&str10;system(cls);if(p!=NULL)printf(ttt 文本中存在該字符串,在第%d 個(gè)字符后 nn,p-p1);elseprintf(ttt 文本中不存在這樣的字符串 nn);void replace() /替換功能函數(shù)char s1100,s2100,s3100,s4100,ch;int i=0; int j,len1,len2,len3,len4,count=0;int num=0;show();printf(請輸入被替換字符串,以#號結(jié)束:);prin

34、tf(n);getchar(); while(ch=getchar()!=#)/若不為“#”繼續(xù)輸入 s2i+=ch; getchar();/消除 Enter 字符的影響len2=i;printf(請輸入替換的字符串,以#號結(jié)束:);printf(n);i=0; while(ch=getchar()!=#)/若不為“#”繼續(xù)輸入 s3i+=ch;len3=i; getchar();/消除 Enter 字符的影響fp=fopen(name,r);if(!fp)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)printf(ttt*無法打開文件!*n);rewind(fp);while(ch=fgetc(

35、fp)!=EOF)s1count=ch;count+;s1count=0;len1=strlen(s1);fclose(fp);for(i=0;ilen1;i+)for(j=0;jlen2;j+)if(s1i+j!=s2j)s4num=s1i;num+;break;if(j=len2-1)for(int k=0;klen3;k+)s4num=s3k;num+;i+=len2-1;s4num=0;len4=strlen(s4); fp=fopen(name,w);for(j=0;jlen4;j+)ch=s4j;fputc(ch,fp);fclose(fp);return;精選優(yōu)質(zhì)文檔-傾情為你奉

36、上專心-專注-專業(yè)void deletef() /刪除功能函數(shù)char s1100,s2100,s3100,ch;int i=0,j,len1,len2,len3,count=0;system(cls);show();printf(請輸入被刪除字符串,以#號結(jié)束:);getchar(); while(ch=getchar()!=#)/若不為“#”繼續(xù)讀入 s2i+=ch; getchar();/接收 Enter 字符printf(n);len1=strlen(s1);len2=i;int num=0;fp=fopen(name,r);if(!fp)printf(ttt* 文件無法打開!*n);

37、rewind(fp);while(ch=fgetc(fp)!=EOF)s1count=ch;count+;s1count=0;fclose(fp);for(i=0;ilen1;i+)for(j=0;jlen2;j+)if(s1i+j!=s2j)s3num=s1i;num+;break;if(j=len2-1)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)s3num=s1i+len2;num+;i+=len2;s3num=0;len3=strlen(s3);fp=fopen(name,w);for(j=0;jlen3;j+)ch=s3j;fputc(ch,fp);fclose(fp);return;

38、3.3.4 結(jié)果及完善方向結(jié)果及完善方向精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè) 完善方向:完善方向:1.查找只能查找文中第一次出現(xiàn)該字符串的地方,可以加一個(gè)循環(huán),查出所有出現(xiàn)該字符串的地方。 2.要是查找出的字符能有其他顏色高亮顯示就不錯了,只是從沒接觸過這種代碼,不知能不能實(shí)現(xiàn)。3.4 加密軟件(加密軟件(A4)3.4.1 設(shè)計(jì)題目及要求設(shè)計(jì)題目及要求精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)課題內(nèi)容:課題內(nèi)容:設(shè)計(jì)一個(gè)加密程序。包括明文與密鑰的轉(zhuǎn)換。通過此課題,

39、熟練掌握數(shù)組、格式輸出、字符串處理、類型轉(zhuǎn)換等。課題要求:課題要求:(1)輸入任意一段明文 M,以及密鑰 K;(2)根據(jù)以下公式將其轉(zhuǎn)換為密文 C。 Ci = mi + K ,其中 i = 0,1,n-1 , K 為密鑰; (3)具有輸入輸出界面。3.4.2 設(shè)計(jì)思想及程序流程框圖設(shè)計(jì)思想及程序流程框圖 加密解密較為簡單,只要 m中每個(gè)字符的 ascii 碼值加上密鑰 K 即可。由于 ascii 值表中出現(xiàn)字符的范圍在 33126,故只把這些碼值存入數(shù)組 a中,記錄碼文下標(biāo) c=(mi+key-33)%94,則碼文為 codei=ac,這樣密鑰無論多大都可以。解密過程類比于加密。程序流程框圖:

40、3.4.3 邏輯功能程序邏輯功能程序#include#include 開 始輸出功能菜單輸入 n num結(jié) 束輸入明文 m和密鑰 kCi=mi+k輸出 m 和密文C輸入密文C 和密鑰 k mi=Ci-k輸出密文 C 和明文 m精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)#include void dis_menu();void choice();void encryption(char *m, char *c); void decryption(char *m, char *c); int main()while(1)dis_menu(); choice();return 0;void dis_

41、menu()printf(t*n); printf(t*加密解密程序*n);printf(t* 1、加密 *n);printf(t* 2、解密 *n);printf(t* 3、退出 *n);printf(t*nn);printf(t 請選擇要進(jìn)行的操作:);void choice() char m100=; char code100=; char n100; scanf(%s,n); if(strlen(n)1) printf(t 輸入錯誤!請重新輸入:); choice(); else switch(*n) case 1: encryption(m, code); break;精選優(yōu)質(zhì)文檔-

42、傾情為你奉上專心-專注-專業(yè) case 2: decryption(m, code); break; case 3: printf(t); exit(1); break; default: printf(t 輸入錯誤!請重新輸入:); choice(); break; void encryption(char *m, char *code) /加密函數(shù)int i,len,c;int key; char a94;for(i=0;i94;i+)ai=i+33;printf(t 請輸入需加密的明文:);scanf(%s,m);printf(t 請輸入密鑰:);scanf(%d,&key);l

43、en=strlen(m);printf(t 你輸入的明文為:);printf(%sn,m); for(i=0;ilen;i+)c=(mi+key-33)%94;codei=ac;printf(t 加密后的密文為:);printf(%snn,code);void decryption(char *m, char *code) /解密函數(shù)int i,len,key,c; char a94;for(i=0;i94;i+)ai=i+33;printf(t 請輸入需解密的密文:);scanf(%s,code);printf(t 請輸入密鑰:);精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)scanf(%d,

44、&key); len=strlen(code);printf(t 你輸入的密文為:);printf(%sn,code); for(i=0;ilen;i+)c=codei-key-33; while(c0)c=c+94; mi=ac;printf(t 破解后的明文為:);printf(%snn,m);3.4.4 結(jié)果及完善方向結(jié)果及完善方向精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)完善方向:完善方向:加密的明文和解密的碼文都要手動輸入,實(shí)際運(yùn)用中,可能會有很長的明文和碼文,最好設(shè)計(jì)成從外部文件中讀入明文或碼文。 設(shè)計(jì)題目及要求設(shè)計(jì)題目及要求課題內(nèi)容:課題內(nèi)容:設(shè)計(jì)一個(gè)進(jìn)制

45、轉(zhuǎn)換器程序。包括二進(jìn)制、八進(jìn)制、十進(jìn)制、十六進(jìn)制數(shù)互相轉(zhuǎn)換。通過此課題,熟練掌握字符串、格式輸出、進(jìn)制換算的各種操作。課題要求:課題要求:(1)可輸入二進(jìn)制、八進(jìn)制、十進(jìn)制、十六進(jìn)制數(shù);(2)將已輸入的數(shù)轉(zhuǎn)換成其余進(jìn)制的數(shù);(3)具有輸入輸出界面。3.5.2 設(shè)計(jì)思想及程序流程框圖設(shè)計(jì)思想及程序流程框圖 首先菜單要設(shè)計(jì)成兩級形式,第一級菜單選擇輸入的進(jìn)制,第二級菜單選擇輸出的進(jìn)制。 所有數(shù)的進(jìn)制轉(zhuǎn)化通過兩個(gè)函數(shù)來實(shí)現(xiàn),一個(gè)是將其他進(jìn)制的數(shù)轉(zhuǎn)換為十進(jìn)制,另一個(gè)是將十進(jìn)制的數(shù)轉(zhuǎn)換為其他進(jìn)制的。若輸入的數(shù)為十進(jìn)制,只要調(diào)用后一個(gè)子函數(shù)即可;若輸入的數(shù)為其他進(jìn)制的,則先調(diào)用前一個(gè)子函數(shù),然后調(diào)用后一個(gè)

46、子函數(shù)即可。 為了提高容錯性,在輸入某一 n 進(jìn)制的數(shù)時(shí)應(yīng)判斷每一位的數(shù)是否不大于 n,若大于等于 n,則提示輸入錯誤,重新輸入。精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)3.5.3 邏輯功能程序邏輯功能程序#include#include#include#includevoid dis_menu(); /菜單顯示void cho_menu(); /菜單選項(xiàng)void dis_menu1();void cho_menu1(); 開 始輸出功能菜單 輸入進(jìn)制 進(jìn)制選擇判斷輸入 str輸入 str輸入 str輸入 str二進(jìn)制八進(jìn)制十進(jìn)制十六進(jìn)制 結(jié) 束轉(zhuǎn)成十進(jìn)制十進(jìn)制轉(zhuǎn)換成其他進(jìn)制錯誤精選優(yōu)質(zhì)文檔

47、-傾情為你奉上專心-專注-專業(yè)void DX_transfer(int num,int n); /十進(jìn)制轉(zhuǎn)換為其他進(jìn)制int XD_transfer(int n);/其他進(jìn)制轉(zhuǎn)換成十進(jìn)制int flag=1; char p500;int main()while(flag)dis_menu();cho_menu();return 0; void dis_menu()printf(t=n);printf(t-歡迎使用進(jìn)制轉(zhuǎn)換器-n);printf(t=nnn);printf(t-1、輸入二進(jìn)制數(shù)字-n); printf(t-2、輸入八進(jìn)制數(shù)字-n);printf(t-3、輸入十進(jìn)制數(shù)字-n); p

48、rintf(t-4、輸入十六進(jìn)制數(shù)字-n);printf(t-5、退出程序-n);printf(t 請選擇你要進(jìn)行的操作:); void cho_menu()char c;scanf(%s,p);if(p05|strlen(p)1)printf(t 輸入錯誤!請重新輸入:);cho_menu();elseswitch(*p) 精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè) case 1: dis_menu1(); cho_menu1();printf(tn); break; case 2: dis_menu1(); cho_menu1(); printf(tn); break; case 3: d

49、is_menu1(); cho_menu1(); printf(tn); break; case 4: dis_menu1(); cho_menu1(); printf(tn); break; case 5: printf(t); printf(-再見!-n); exit(1); break; default: printf(t 輸入錯誤!請重新輸入:); cho_menu(); break; printf(t 是否繼續(xù)使用該系統(tǒng)?任意鍵繼續(xù)或 N 鍵結(jié)束: ); scanf(%c,&c); printf(n); if(c=110|c=78) flag=0; printf(t-再見!-

50、n); void dis_menu1() 精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)printf(t=nnn);printf(t-1、轉(zhuǎn)換為二進(jìn)制數(shù)字-n); printf(t-2、轉(zhuǎn)換為八進(jìn)制數(shù)字-n);printf(t-3、轉(zhuǎn)換為十進(jìn)制數(shù)字-n); printf(t-4、轉(zhuǎn)換為十六進(jìn)制數(shù)字-n);printf(t-5、返回-n);void cho_menu1() int num,n; char m500; printf(t 請選擇你要進(jìn)行的操作:); scanf(%s,m); if(m05|strlen(m)!=1)printf(t 輸入錯誤!請重新輸入:);cho_menu1(); el

51、seswitch(*m) case 1:switch(*p)case1:n=2;break;case2:n=8;break;case3:n=10;break;case4:n=16;break; num=XD_transfer(n); DX_transfer(num,2); printf(tn); break; case 2: switch(*p)case1:n=2;break;case2:n=8;break;case3:n=10;break;精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)case4:n=16;break; num=XD_transfer(n); DX_transfer(num,8)

52、; printf(tn); break; case 3: switch(*p)case1:n=2;break;case2:n=8;break;case3:n=10;break;case4:n=16;break; num=XD_transfer(n); printf(t 轉(zhuǎn)換 10 進(jìn)制輸出為:%dn,num); printf(tn); break; case 4: switch(*p)case1:n=2;break;case2:n=8;break;case3:n=10;break;case4:n=16;break; num=XD_transfer(n); DX_transfer(num,16)

53、; printf(tn); break; case 5: printf(t); cho_menu() ; break; default: printf(t 輸入錯誤!請重新輸入:); cho_menu1(); break; 精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)void DX_transfer(int num,int n)char tra100;int i=0;printf(t 轉(zhuǎn)換%d 進(jìn)制輸出為:,n);if(n9&num%1616)trai=A+(num%16-10);elsetrai=0+num%16;num=num/16;i+;trai=0;while(i!=0)putc

54、har(tra-i);printf(n);int XD_transfer(int n)char temp100,ch,m;int num=0,i=0,flag=1,count=0;while(flag)i=0;flag=0;精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)count=0;fflush(stdin); /清空輸入緩沖區(qū),確保讀入無錯printf(t 請輸入%d 進(jìn)制數(shù):,n); m=48+n-1;if(n16)while(ch=getchar()!=n)if(chm)printf(t 輸入數(shù)字有誤!n);flag=1;break;tempi=ch;count+;i+;tempi=0;f

55、or(i=0;icount;i+)num=num+(tempi-0)*(int)pow(n,(count-i-1);/計(jì)算值 else while(ch=getchar()!=n)if(ch9)&(chF)&(chf)printf(t 輸入數(shù)字有誤!n);flag=1;break;tempi=ch;count+;i+; tempi=0;/ 輸入正確十六進(jìn)制結(jié)束 for(i=0;i=0&tempi=A&tempi=a&tempi=f) num=num+(tempi-a)+10)*(int)pow(16,(count-i-1); return num;3.5

56、.4 結(jié)果及完善方向結(jié)果及完善方向精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)完善方向:完善方向:1.界面比較難看,要是用圖形化語言編寫,將會直觀明了不少。 2.為了添加二級菜單,導(dǎo)致程序比較冗長,可以再精簡。3.6 學(xué)生成績核算系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)(學(xué)生成績核算系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)(B1)3.6.1 設(shè)計(jì)題目及要求設(shè)計(jì)題目及要求課題內(nèi)容:課題內(nèi)容:精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)設(shè)計(jì)一個(gè)學(xué)生成績核算系統(tǒng)。能實(shí)現(xiàn)從文件中讀取學(xué)生成績資料,并提供成績查詢統(tǒng)計(jì)服務(wù)。通過此課題,熟練掌握文件、數(shù)組、結(jié)構(gòu)體的各種操作以及友好界面的設(shè)計(jì)。課題要求:課題要求:(1)按班級按課程從文件中讀入相應(yīng)的平時(shí)成績、

57、期中考試成績和期末考試成績。(2)三個(gè)成績對總評成績的百分比被定義為常數(shù),各占總成績的 30%、30%和 40%。(3)計(jì)算每位學(xué)生的總評成績。(4)計(jì)算該班級本課程的總平均成績。(5)計(jì)算處于優(yōu)、良、中、及格、不及格的學(xué)生人數(shù)以及占總?cè)藬?shù)的百分比。其中100-90 為優(yōu),89-80 為良,79-70 為中,69-60 為及格,60 分以下為不及格。(6)按要求輸出成績在優(yōu)、良、中、及格、不及格各區(qū)間的學(xué)生學(xué)號、成績。3.6.2 設(shè)計(jì)思想及程序流程框圖設(shè)計(jì)思想及程序流程框圖1、建立文本文件、建立文本文件 note.dat,第一行為學(xué)生的總?cè)藬?shù),其后為每個(gè)學(xué)生的成績,每個(gè)學(xué)生的信息占一行,格式為

58、: 學(xué)號(9 位) 平時(shí)成績 期中考試成績 期末考試成績例如: 15B 88 75.5 66 B 91 79.5 76B 85 75 77 B 79 82 80.5B 94 83.5 81.5 B 80 69 68B 82 77 71 B 77 57 58B 91 88 86 B 96 89 90B 70 45.5 50 B 74 65 66B 81 71 76 B 83 75 77B 85 78 79 2、從文件中讀入、從文件中讀入相應(yīng)的平時(shí)成績、期中考試成績和期末考試成績時(shí),數(shù)據(jù)的讀入方式可用 C 語言中的文件讀入方式進(jìn)行,也可用 C+中的流實(shí)現(xiàn)。 3、 每次計(jì)算出的結(jié)果可在屏幕輸出每次計(jì)

59、算出的結(jié)果可在屏幕輸出,并把每個(gè)學(xué)生的總評成績輸入到新文件 out.dat 文件中,格式為: 學(xué)生學(xué)號(9 位) 總評成績 成績等級 例如: B 88 B 為查詢方便,可把總評成績所處等級(優(yōu)、良、中、及格、不及格)同時(shí)保存在文件out.dat 中,分別用字母 A、B、C、D、E 表示。4、數(shù)據(jù)結(jié)構(gòu)(可用、數(shù)據(jù)結(jié)構(gòu)(可用 C+實(shí)現(xiàn))實(shí)現(xiàn))精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)兩個(gè)類:學(xué)生(student)和學(xué)生成績(marks)(1)學(xué)生類數(shù)據(jù)成員:學(xué)號、姓名、專業(yè)等數(shù)據(jù)類型屬性(私有、保護(hù)、公有)方法:構(gòu)造函數(shù)和析構(gòu)函數(shù)設(shè)置學(xué)號void SetId( long );讀取學(xué)號long Ge

60、tId( ); 等等(2)學(xué)生成績類 從學(xué)生類派生數(shù)據(jù)成員:平時(shí)成績、期中考試成績、期末考試成績、總評成績、成績等級數(shù)據(jù)類型屬性(私有、保護(hù)、公有)方法:讀入成績void In( ifstream& ); 或 void In( FILE* );輸出成績void Out( ofstream& ); 或 void Out( FILE* );顯示成績void print( );求總評成績void ComputeZP( );求等級void ComputeDJ( );讀取總評成績float GetZP( );讀取等級char GetDJ( ); 等等5、設(shè)計(jì)、設(shè)計(jì)基本思想:自頂向下、逐步細(xì)化主要功能:(1)總控模塊功能:編制菜單,不斷從菜單選擇計(jì)算或查詢功能執(zhí)行,直到退出。程序流程圖:(2)計(jì)算(3)查詢6、實(shí)現(xiàn)、實(shí)現(xiàn) 編程時(shí)要求每一個(gè)類建兩個(gè)文件,即類的定義和實(shí)現(xiàn)文件。注意包含相關(guān)的文件。總控模塊

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論