版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、軟件設(shè)計報告姓名:姓名: 方軼琦方軼琦 學(xué)號:學(xué)號:10005808 2013 年年 6 月月 18 日日2013 年年 6 月月 28 日日目目 錄錄第一章 軟件設(shè)計介紹.1第三章 軟件設(shè)計的內(nèi)容.4分?jǐn)?shù)統(tǒng)計軟件(A1).4設(shè)計題目及要求.4設(shè)計思想及程序流程框圖.4邏輯功能程序.5結(jié)果及完善方向.8打字軟件(A2).9設(shè)計題目及要求.9設(shè)計思想及程序流程框圖.9邏輯功能程序.103.結(jié)果及完善方向.12文本編輯器(A3).13設(shè)計題目及要求.13設(shè)計思想及程序流程框圖.13邏輯功能程序.14結(jié)果及完善方向.17加密軟件(A4).18設(shè)計題目及要求.18設(shè)計思想及程序流程框圖.19邏輯功能程
2、序.19結(jié)果及完善方向.21進(jìn)制轉(zhuǎn)換器(A5).22設(shè)計題目及要求.22設(shè)計思想及程序流程框圖.22邏輯功能程序.24結(jié)果及完善方向.29學(xué)生成績核算系統(tǒng)的設(shè)計與實(shí)現(xiàn)(B1).30設(shè)計題目及要求.30設(shè)計思想及程序流程框圖.30邏輯功能程序.32結(jié)果及完善方向.42模擬電信計費(fèi)系統(tǒng)的設(shè)計與實(shí)現(xiàn)(B2).48設(shè)計題目及要求.48設(shè)計思想及程序流程框圖.48邏輯功能程序.50結(jié)果及完善方向.66第四章 心得體會.72軟件設(shè)計介紹軟件設(shè)計介紹一一 軟軟件件的的設(shè)設(shè)計計概概念念軟件設(shè)計是把許多事物和問題抽象起來,并且抽象它們不同的層次和角度。建議用數(shù)學(xué)語言來抽象事務(wù)和問題,因為數(shù)學(xué)是最好的抽象語言,并
3、且它的本質(zhì)就是抽象。將復(fù)雜的問題分解成可以管理的片斷會更容易。將問題或事物分解并模塊化這使得解決問題變得容易,分解的越細(xì)模塊數(shù)量也就越多,它的副作用就是使得設(shè)計者考慮更多的模塊之間耦合度的情況。二軟件設(shè)計的性質(zhì)、目的:二軟件設(shè)計的性質(zhì)、目的:本課程是一門技能訓(xùn)練課,為在校學(xué)生的必修課程。通過設(shè)計培養(yǎng)學(xué)生良好的編程習(xí)慣,使學(xué)生掌握編程的基本步驟,規(guī)范學(xué)生的編寫程序的格式,鍛煉學(xué)生編寫程序的能力,為將來編寫較大程序的打好基礎(chǔ)。三軟件設(shè)計總時間:三軟件設(shè)計總時間:二周四實(shí)驗設(shè)備:四實(shí)驗設(shè)備:南京郵電大學(xué)微機(jī)室微機(jī)。五軟件設(shè)計的任務(wù)五軟件設(shè)計的任務(wù)通過集中時間上機(jī)實(shí)驗,使學(xué)生充分發(fā)揮已有的編程能力,熟
4、悉編譯環(huán)境,選擇若干課題,進(jìn)行審題、分析、設(shè)計和調(diào)試,并根據(jù)要求寫出實(shí)驗報告。六實(shí)驗內(nèi)容六實(shí)驗內(nèi)容軟件設(shè)計課題共分 A 、B 兩檔。A 檔共 5 題,第一周完成;B檔共 2 題,第二周完成。第二章第二章 軟件開發(fā)平臺簡介軟件開發(fā)平臺簡介Visual Studio 2008 簡介簡介Microsoft Visual Studio 2008 使開發(fā)人員能夠快速創(chuàng)建高質(zhì)量、用戶體驗豐富而又緊密聯(lián)系的應(yīng)用程序,充分展示了 Microsoft 開發(fā)智能客戶端應(yīng)用程序的構(gòu)想。借助 Visual Studio 2008,采集和分析信息將變得更為簡單便捷,業(yè)務(wù)決策也會因此變得更為有效。任何規(guī)模的組織都可以使用
5、 Visual Studio 2008 快速創(chuàng)建能夠利用 Windows Vista 和 2007 Visual Studio system 的更安全、更易于管理并且更可靠的應(yīng)用程序。Visual Studio 2008 提供了高級開發(fā)工具、調(diào)試功能、數(shù)據(jù)庫功能和創(chuàng)新功能,幫助在各種平臺上快速創(chuàng)建當(dāng)前最先進(jìn)的應(yīng)用程序。Visual Studio 2008 包括各種增強(qiáng)功能,例如可視化設(shè)計器(使用 .NET Framework 3.5 加速開發(fā)) 、對 Web 開發(fā)工具的大量改進(jìn),以及能夠加速開發(fā)和處理所有類型數(shù)據(jù)的語言增強(qiáng)功能。Visual Studio 2008 為開發(fā)人員提供了所有相關(guān)的工
6、具和框架支持,幫助創(chuàng)建引人注目的、令人印象深刻并支持 AJAX 的 Web 應(yīng)用程序。開發(fā)人員能夠利用這些豐富的客戶端和服務(wù)器端框架輕松構(gòu)建以客戶為中心的 Web 應(yīng)用程序,這些應(yīng)用程序可以集成任何后端數(shù)據(jù)提供程序、在任何當(dāng)前瀏覽器內(nèi)運(yùn)行并完全訪問 ASP.NET 應(yīng)用程序服務(wù)和 Microsoft 平臺。Visual Studio 2008 具備如下優(yōu)勢:快速開發(fā)新突破從建模到編碼,再到調(diào)試,Visual Studio 2008 提供了增強(qiáng)的編程語言、設(shè)計器、編輯器以及和數(shù)據(jù)相關(guān)的新功能,可以幫助您體驗到生產(chǎn)力的突破。創(chuàng)建杰出的用戶體驗Visual Studio 2008 為開發(fā)人員提供了新
7、的工具,通過使用最新的平臺,如Web, Windows Vista、2007 Microsoft Office System、Microsoft SQL Server 2008、Windows Mobile以及 Windows Server2008,開發(fā)人員可以快速創(chuàng)建個性化很強(qiáng)的用戶體驗以及互聯(lián)的應(yīng)用程序。跨越開發(fā)周期的協(xié)作Visual Studio 2008 可以讓開發(fā)人員、設(shè)計人員、測試人員、架構(gòu)師以及項目經(jīng)理通過共享工具以及過程整合的方式,實(shí)現(xiàn)協(xié)同工作,從而減少了解決方案所花費(fèi)的時間。采用統(tǒng)一整合的方式處理數(shù)據(jù)Visual Studio 2008 可以顯著的改進(jìn)開發(fā)人員處理數(shù)據(jù)的方法。
8、傳統(tǒng)方式中,開發(fā)人員不得不根據(jù)數(shù)據(jù)的存儲位置以及用戶的連接方法,對數(shù)據(jù)進(jìn)行不同的操作。通過語言集成查詢(Language-Integrated Query, LINQ), 開發(fā)人員可以使用單獨(dú)的模型來查詢并轉(zhuǎn)換 XML, Microsoft SQL Server和對象數(shù)據(jù),而不需要學(xué)習(xí)或使用特定的編程語言,這樣就降低了復(fù)雜度并提高了生產(chǎn)力。體驗全新的 Web 開發(fā)工具Visual Studio 2008 為公司或開發(fā)團(tuán)隊提供了一個健壯的、端到端的平臺來構(gòu)建應(yīng)用程序并通過 Web 方式提供應(yīng)用程序。通過 Visual Studio 2008, 開發(fā)人員可以很容易的將最新的 Windows Pre
9、sentation Foundation (WPF) 功能整合到現(xiàn)有的 Windows Forms 應(yīng)用程序以及新的應(yīng)用程序中,并在 Windows 平臺上創(chuàng)建高保真的用戶體驗。通過額外的 ASP.NET AJAX 1.0 和 Microsoft IntelliSense以及對調(diào)試 JavaScript 8.0 的支持,構(gòu)建 AJAX 應(yīng)用程序?qū)涌旖?。增?qiáng)的 Web 設(shè)計器帶有分離視圖編輯功能,可以讓開發(fā)人員同時看到HTML 頁面以及結(jié)果頁面,從而提升了 Web 開發(fā)的體驗。將數(shù)據(jù)庫功能整合到應(yīng)用程序生命周期的管理中Visual Studio 2008 為不同的團(tuán)隊成員提供了一系列針對架
10、構(gòu)、設(shè)計、程序開發(fā)、數(shù)據(jù)庫開發(fā)以及應(yīng)用程序測試的相關(guān)工具。Microsoft Visual Studio Team System 2008 Database Edition 目前已經(jīng)全部整合到了 Microsoft Visual Studio Team System 2008 Team Suite 中。構(gòu)建運(yùn)行在多個版本的 .NET Framework 之上的應(yīng)用程序通過 Visual Studio 2008, 開發(fā)人員可以使用一個工具來管理并構(gòu)建針對多個版本的.NET Framework 的應(yīng)用程序。Visual Studio 2008 將會自動讓項目以及設(shè)置適應(yīng)開發(fā)人員所指定的.NET f
11、ramework 版本。開發(fā)人員不再需要安裝多個版本的 Visual Studio 來維護(hù)運(yùn)行于多個版本的 .NET Framework 之上的應(yīng)用程序。為 Microsoft Office 系列構(gòu)建可靠的、可伸縮的應(yīng)用程序Visual Studio Tools for Office 目前已經(jīng)完全整合到了 Visual Studio 2008 專業(yè)版當(dāng)中。Visual Studio 2008 可以讓開發(fā)人員自己定制 Microsoft Office Word, Microsoft Office Excel ,Microsoft Office PowerPoint , Microsoft Off
12、ice Outlook ,Microsoft Office Visio , Microsoft Office InfoPath , 以及 Microsoft Office Project, 從而提升用戶生產(chǎn)力并且更有效的利用了 Office 2007 中的新增功能。對Microsoft Office 進(jìn)行自定義,同時應(yīng)用程序支持 ClickOnce 部署,從而使開發(fā)人員可以采用正確的工具以及框架來實(shí)現(xiàn)對 Microsoft Office 解決方案進(jìn)行從容部署。為 Windows Vista 構(gòu)建完美的應(yīng)用程序Visual Studio 2008 可以讓開發(fā)人員快捷的創(chuàng)建出同 Windows V
13、ista 外觀風(fēng)格一樣炫的應(yīng)用程序,并且可以利用 Windows Vista 中所提供的 8000 多種新API.在開發(fā)人員和設(shè)計人員之間實(shí)現(xiàn)無縫協(xié)作Microsoft 已經(jīng)針對設(shè)計人員發(fā)布了名為 Microsoft Expression 的工具。在Visual Studio 2008 中,來自于 Microsoft Expression Web 以及 Microsoft Expression Blend中的設(shè)計元素可以在不更改后臺代碼的情況下,從 VisualStudio 中進(jìn)行導(dǎo)入導(dǎo)出的操作。這就意味著開發(fā)人員和設(shè)計人員可以實(shí)時的進(jìn)行無縫協(xié)作,并且不用擔(dān)心用戶界面設(shè)計更改所引起的開發(fā)問題。
14、 第三章第三章 軟件設(shè)計的內(nèi)容軟件設(shè)計的內(nèi)容3.1 分?jǐn)?shù)統(tǒng)計軟件(分?jǐn)?shù)統(tǒng)計軟件(A1)設(shè)計題目及要求設(shè)計題目及要求設(shè)計題目:分?jǐn)?shù)統(tǒng)計要求:(1) 、輸入某班級學(xué)生的姓名、分?jǐn)?shù);(2) 、對(1)的分?jǐn)?shù)進(jìn)行降冪排列并輸出;(3) 、具有輸入輸出界面。設(shè)計思想及程序流程框圖設(shè)計思想及程序流程框圖這道題我是用 C# 的可視化環(huán)境制作了一個分?jǐn)?shù)統(tǒng)計系統(tǒng)。制作的界面如圖 3.1-1 所示:實(shí)現(xiàn)的功能和設(shè)計方法:1.在“姓名”和“分?jǐn)?shù)”后面的文本框內(nèi)輸入學(xué)生信息,輸入完畢后,按“輸入”按鈕,學(xué)生信息就會顯示到左下方的listbox中。2.當(dāng)用戶輸入若干名學(xué)生信息后,按“排序”按鈕,右下方的listbox中
15、就會顯示按成績降冪排序后的學(xué)生信息。排序方法是使用冒泡排序法。3.當(dāng)用戶輸入學(xué)生信息出錯時,用鼠標(biāo)選擇出錯項,按下“刪除選中的輸入項”,即可刪除輸錯項,繼續(xù)輸入學(xué)生信息。方法是用找到選中的索引值,然后刪除數(shù)組中該學(xué)生信息和listbox中信息就可以了。4.當(dāng)用戶想重新輸入學(xué)生信息,按下“重新開始”清空數(shù)組和listbox中的信息。5.當(dāng)用戶要結(jié)束操作,按下“結(jié)束”,調(diào)用close()函數(shù)就可以跳出界面。主程序的流程圖如圖3.1-2所示。冒泡排序的流程圖如圖3.1-3所示。 開始輸入學(xué)生信息排序刪除重新開始結(jié)束開始結(jié)束N=學(xué)生數(shù)i=0ii?scorej - 1 scorej?交換scorej-1
16、,scorej交換namej-1,namEj,k=ji=kj=j-1k=NNNNYYY圖 3.1- 1 主流程圖 圖 3.1- 2 冒泡排序流程圖邏輯功能程序邏輯功能程序具體程序如下:#include#include#includestruct student /存放學(xué)生信息的結(jié)構(gòu)體char name20; /字符型數(shù)組存放姓名int grade; /成績類型temp,std100;int main() int err; char x5; int n; int i; int m; char ch20; do system(cls); printf( nn); printf( - n); pri
17、ntf( | 歡迎使用本系統(tǒng) | n); printf( - n); printf( n); printf( -請輸入學(xué)生數(shù)-nn);do printf(tt 學(xué)生數(shù): );err=0;i=0;scanf(%s,x); /輸入選項getchar();while(xi!=0) /依次檢查輸入的字符串是否為數(shù)字 if(xi9|xi0) err=1; i+;if(err) printf(ntt 請輸入數(shù)字!n);while(err);n=atoi(x); /將字符型數(shù)組 x 轉(zhuǎn)換成整型 nfor(i=0;in;i+) /循環(huán) N 次輸入學(xué)生信息 printf(ntt 請輸入第%d 個人的信息ntt
18、姓名:,i+1); scanf(%s,); getchar(); printf(tt 分?jǐn)?shù):); scanf(%d,&stdi.grade); getchar();printf(輸入信息:n);printf( - n);printf( 姓名 成績 nn);for(i=0;in;i+)printf( %s %dn,,stdi.grade); printf(nn - n);printf(n 排序后信息:n);for(m=0;mn;m+) for(i=0;in-m-1;i+)if(stdi.gradestdi+1.grade)temp=stdi;stdi=
19、stdi+1;stdi+1=temp; /成績按降冪排序printf(n 您所輸入的學(xué)生名次如下:nn); printf( - n); printf( 名次 姓名 成績 nn);for(i=0;in;i+) printf( 第 %d 名 %s %dn,i+1,,stdi.grade); printf(nn - n);printf(t 您還繼續(xù)嗎?請按 Y 鍵繼續(xù):); /選擇是否繼續(xù)scanf(%s,ch); while(ch0=Y|ch0=y); /與開頭組成 do-while 結(jié)構(gòu)循環(huán) printf(t); return 0;圖圖4圖 3.1- 3 運(yùn)行結(jié)果系統(tǒng)的完善:系
20、統(tǒng)的完善:1. 當(dāng)用戶在分?jǐn)?shù)框輸入了非數(shù)字字符,則會提示用戶輸出正確格式的分?jǐn)?shù)。2. 當(dāng)用戶未完整輸入姓名和分?jǐn)?shù),系統(tǒng)會提示用戶完整輸入。完善方向完善方向該系統(tǒng)雖然考慮了并完善了很多用戶操作可能出現(xiàn)的錯誤,但仍然有不足之處。比如,本系統(tǒng)中的刪除按鈕只能在用戶排序前刪除用戶想刪除的信息。若用戶排序后刪除左邊欄目里的學(xué)生信息,再來排序,這時排序出的結(jié)果就可能會出錯。這點(diǎn)是需要改進(jìn)的。另外這題和數(shù)據(jù)庫 SQL 連接起來,程序會更加簡單方便。這方面還需加以學(xué)習(xí)。3.2 打字軟件(打字軟件(A2)設(shè)計題目及要求設(shè)計題目及要求設(shè)計題目:打字程序要求:(1)隨即產(chǎn)生一字符串,每次產(chǎn)生的字符串內(nèi)容、長度都不同
21、;(2)根據(jù)(1)的結(jié)果,輸入字符串,判斷輸入是否正確,輸出正確率;(3)具有輸入輸出界面。設(shè)計思想及程序流程框圖設(shè)計思想及程序流程框圖設(shè)計思想:采用 C#界面編程。(1).從題目的要求可知,本系統(tǒng)要求隨機(jī)產(chǎn)生字符串,字符串的內(nèi)容和長度都是隨機(jī)的。要產(chǎn)生隨機(jī)數(shù),就可以使用 rand()函數(shù)。設(shè)定字符串最長為 20。用 rand.Next(min, max)函數(shù)就可以產(chǎn)生 minmax 之間的隨機(jī)數(shù)。(2).為使系統(tǒng)隨機(jī)產(chǎn)生字母字符,首先用 rand.Next(0,25)產(chǎn)生 025 的隨機(jī)數(shù),將隨機(jī)數(shù)加上 97,然后再將數(shù)字轉(zhuǎn)換為相應(yīng)的 ASCII 碼的字母就可以了。(3).正確率的計算。將系
22、統(tǒng)產(chǎn)生的隨機(jī)字符和用戶輸入的字符進(jìn)行逐個比較統(tǒng)計出相同的字符個數(shù),在與系統(tǒng)產(chǎn)生的字符總數(shù)相除便可得到得正確率。 開始 產(chǎn)生隨機(jī)字符串用戶輸入字符串計算正確率結(jié)束?結(jié)束YN 圖 3.2- 1 主流程圖界面按鈕功能設(shè)計思想:“開始”:按下后,首先清空界面的三個輸入文本框 textbox。然后再隨機(jī)生成字符串顯示在第一個文本框 textbox1 中。“確定”:用戶在第二個文本框 textbox2 中輸入字符串后,按下確定按鈕,首先系統(tǒng)會讀入用戶的字符串,然后與系統(tǒng)字符串比較,計算出正確率最后輸出到正確率的文本框里?!敖Y(jié)束”:使用 close()函數(shù),按下后退出系統(tǒng)。邏輯功能程序邏輯功能程序具體程序如
23、下:#include#include#include#include#define max_len 40 /定義產(chǎn)生的字符串最長為 40 個字符void rand_str(char *p,int length);double compare(char *p,char *s,int length);void display(); int main()char ch20;int length;double flag;srand(time(NULL);char p80=;char s80=; display();dochar p80=; char s80=; printf(nt-n);length=
24、1+rand()%max_len;rand_str(p,length);printf(nt-n);printf(t 請輸入上面的字母:n); printf(t);fflush(stdin);/減少不必要錯誤 scanf(%s,s);flag=compare(p,s,length);if(flag=1)printf(t 輸入完全正確!n);elseprintf(t 輸入有誤,您本次輸入正確率:%n,flag*100); printf(tn); getchar();printf(t 您還繼續(xù)嗎?請按任意鍵繼續(xù)或者按 N 鍵結(jié)束:);scanf(%s,ch);while(ch0!=N&ch0
25、!=n);printf(t);return 0;void rand_str(char *p,int length)int i;char ch;printf(t); for(i=0;i90&num97);ch=num;printf(%c,num);pi=ch;double compare(char *p,char *s,int length)int j;int number=0;double rate;for(j=0;jlength;j+)if(pj-sj)=0)number=number+1;rate=1.0*number/length;return rate;void display
26、()printf(t*n);printf(t*n);printf(t* 歡迎進(jìn)入打字練習(xí)程序 *n);printf(t*n); printf(t*n);printf(tn);結(jié)果及完善方向結(jié)果及完善方向程序運(yùn)行結(jié)果程序運(yùn)行結(jié)果:用戶按下開始按鈕后,輸入字符串,最后按下確定按鈕的程序運(yùn)行情況如圖 3.2-3 所示。按下開始按鈕 輸入字符串后按下確定按鈕圖 3.2- 2 程序運(yùn)行結(jié)果系統(tǒng)的完善系統(tǒng)的完善最初編寫的程序中存在輸出正確率的 BUG。就是在用戶輸入字符串的前半段和系統(tǒng)的字符串一樣,而后面又多輸入了其他字符,這時算出的正確率是100%,這在常理上是不正確的,發(fā)現(xiàn)錯誤后,更正了正確率的計算方
27、法。當(dāng)用戶輸入的字符串長度小于或等于系統(tǒng)產(chǎn)生的字符串長度時,正確率的計算方法為:正確率=系統(tǒng)產(chǎn)生的字符串長度母數(shù)與系統(tǒng)字符串相同的字當(dāng)用戶輸入的字符長于系統(tǒng)字符串長度時,正確率的計算方法為:正確率=用戶輸入的字符串長度母數(shù)與系統(tǒng)字符串相同的字這樣就避免了之前的錯誤情況。完善方向完善方向本打字系統(tǒng)仍然有需要完善的地方,如可增加計時系統(tǒng),這樣就增加了打字程序的趣味性。系統(tǒng)中正確率的計算方法也有待改進(jìn)。3.3 文本編輯器(文本編輯器(A3)設(shè)計題目及要求設(shè)計題目及要求設(shè)計題目:文本編輯器要求:(1) 、編輯文本;(2) 、保存、打開指定位置的文本文件;(3) 、具有輸入輸出界面。設(shè)計思想及程序流程框
28、圖設(shè)計思想及程序流程框圖文本編輯器的界面設(shè)計,我是參考了 word 中提供的部分功能,用 C#界面環(huán)境設(shè)計編寫一個小型的文字編輯工具。在 C#界面的工具箱中,RichTextBox 控件擁有非常強(qiáng)大的文字格式化功能。很多對文字文本的各種操作只需要調(diào)用 RichTextBox 控件中的函數(shù),就可以搞定,非常的方便。界面設(shè)計時,具有工具欄和功能圖標(biāo)按鈕,提高了操作的便利性。文本編輯器的界面如圖所示。文本編輯器具有三個大模塊,具有以下功能:1:文件:(新建 打開 保存 退出)2:編輯:(撤銷 恢復(fù) 全選 復(fù)制 剪切 粘貼 清除)3:幫助:(關(guān)于版權(quán)信息)模塊結(jié)構(gòu)如圖 3.3-2 所示。開始用戶選擇操
29、作文件幫助編輯新建打開保存退出撤銷恢復(fù)粘貼剪切復(fù)制全選清除關(guān)于圖 3.3- 1 模塊結(jié)構(gòu)圖邏輯功能程序邏輯功能程序具體程序和注釋如下:#include#include /包含exit(1)的原型#include#includewindows.hvoid create_file(FILE *fp,char *fname); /建立文本函數(shù)void write_file(FILE *fp,char *fname); /編輯函數(shù)void read_file(FILE *fp,char *fname); /讀取函數(shù)int main()FILE *fp;int count=0; char choose1
30、00;int flag1,flag2,flag3;char F_name20;while(1) printf(*n);printf(*文本編輯器*n);printf(*n);printf(* 1、建立文本 *n); printf(* 2、編輯文本 *n);printf(* 3、讀取文本 *n);printf(* 4、退出程序 *n); printf(*n);printf(t請選擇你要進(jìn)行的文件操作:);scanf(%s,choose);getchar(); switch(choose0)case 1: flag1=1; break; case 2: flag2=1; break; case 3
31、: flag3=1; break; case 4: printf(t);printf(nnt* 謝謝使用! *n);exit(0); break;default : printf(t輸入錯誤!n);Sleep(500);system(cls);if(flag1=1)flag1=0; printf(n*建立文件*n); create_file(fp,F_name); else if(flag2=1)flag2=0;printf(n*編輯文件*n);write_file(fp,F_name);else if(flag3=1)flag3=0;printf(n*讀取文件*n);read_file(fp
32、,F_name);return 0; void write_file(FILE *fp,char *fname) char ch;printf(請鍵入編輯的文件名(如D:name.txt):nt); gets(fname); if(fp=fopen(fname,w)=NULL)printf(不能打開文件!n);exit(0);printf(請輸入內(nèi)容(以#號鍵結(jié)束):n);ch=getchar();while(ch!=#)fputc(ch,fp);ch=getchar();printf(nn);getchar();fclose(fp);Sleep(500); system(cls);void
33、create_file(FILE *fp,char *fname)printf(請鍵入新建的文件名(如D:name.txt):nt);gets(fname);if(fp=fopen(fname,w+)=NULL)printf(不能打開文件!n);exit(0);printf(%s文件已經(jīng)創(chuàng)建好!nn,fname);fclose(fp);Sleep(500);system(cls);void read_file(FILE *fp,char *fname)char ch;printf(請鍵入讀取的文件名(如D:name.txt):nt);gets(fname);if(fp=fopen(fname,
34、r)=NULL)printf(不能打開文件!n);exit(0);printf(*文件內(nèi)容*n);printf(- n);while(ch=fgetc(fp)!=EOF) /輸出文件直到文件結(jié)束符putchar(ch);printf(n- nn);fclose(fp);Sleep(1000); printf(nn);結(jié)果及完善方向結(jié)果及完善方向系統(tǒng)完善方向系統(tǒng)完善方向這次設(shè)計的文本編輯器基本上能夠較好的模擬出 word 中對文本的部分操作功能?;?RichTextBox 控件的功能很多,可以在此基礎(chǔ)上添加更多的有用的方便的功能,如改變文本背景顏色,字體格式和顏色,文本左對齊右對齊等。這樣文本
35、編輯器的功能就會更加完善。3.4 加密軟件(加密軟件(A4)設(shè)計題目及要求設(shè)計題目及要求設(shè)計題目:加密要求:(1)輸入任意一段明文 M,以及密鑰 K;(2)根據(jù)以下公式將其轉(zhuǎn)換為密文 C。 Ci = mi + K ,其中 i = 0,1,n-1 , K 為密鑰;(3)具有輸入輸出界面。設(shè)計思想及程序流程框圖設(shè)計思想及程序流程框圖設(shè)計思想:用 C#界面編程。由題目可以知道,要實(shí)現(xiàn)加密,就要對用戶輸入的字符串進(jìn)行操作。首先要將用戶輸入的字符串存入數(shù)組。將字符類型轉(zhuǎn)換為相應(yīng)的 ASCII 碼,再與輸入的密鑰相加,最后再轉(zhuǎn)換為字符型就可以得到密文。系統(tǒng)共有三個功能按鈕,為“生成密文” , “重新輸入”
36、和“結(jié)束” ?!吧擅芪摹笔前瓷鲜龅乃枷雽τ脩糨斎氲淖址M(jìn)行加密。 “重新輸入”是清空三個 textbox。 “結(jié)束是”調(diào)用 close()函數(shù)退出系統(tǒng)。系統(tǒng)界面和系統(tǒng)流程框圖如圖 3.4-1 所示。開始用戶輸入明文,密鑰加密重新開始結(jié)束圖 3.4- 1 程序流程框圖邏輯功能程序邏輯功能程序#include#include #include void dis_menu(); /顯示函數(shù)void set_menu(); /輸入函數(shù)void encryption(char *m, char *c, char *key); /加密函數(shù) void decryption(char *m, char *
37、c, char *key); /解密函數(shù)int main()while(1)dis_menu(); set_menu();return 0;void dis_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 set_menu() char m100=; /明文 char c100=; /密文 char key100=; /密鑰 char n100; scanf(%s,n); i
38、f(strlen(n)1) printf(t 輸入錯誤!請重新輸入:); set_menu(); else switch(*n) case 1: encryption(m, c, key); break; case 2: decryption(m, c, key); break; case 3: printf(t); exit(1); break; default: printf(t 輸入錯誤!請重新輸入:); set_menu(); break; void encryption(char *m, char *c, char *key)printf(t-n);printf(t-加密環(huán)節(jié)-n);
39、 printf(t-n); printf(t 請輸入需加密的明文:);scanf(%s,m);printf(t 請輸入密鑰:);scanf(%s,key); while(strlen(key)1) /密鑰長度不能大于 1printf(t 輸入密鑰有誤,請重輸:); scanf(%s,key);int i,length;length=strlen(m);printf(t 你輸入的明文為:);printf(%sn,m); for(i=0;i1) printf(t 輸入密鑰有誤(應(yīng)輸入一個字符),請重輸:); scanf(%s,key);int i,length;length=strlen(c);p
40、rintf(t 你輸入的密文為:);printf(%sn,c); for(i=0;ilength;i+)mi=ci-(key0-0); /密文反譯printf(t 破解后的明文為:);printf(%snn,m);結(jié)果及完善方向結(jié)果及完善方向運(yùn)行結(jié)果:運(yùn)行結(jié)果:用戶輸入明文和密鑰后,按下“生成密文”后的程序運(yùn)行結(jié)果如圖 3.4-2 所示。圖 3.4- 2 密鑰運(yùn)行結(jié)果系統(tǒng)完善系統(tǒng)完善1. 當(dāng)用戶明文和密鑰輸入的不完整,系統(tǒng)會提示要求用戶輸入完整。2. 當(dāng)用戶輸入的密鑰不在要求的 09 之間,系統(tǒng)會提示用戶。如圖 3.4-3 所示。完善方向完善方向當(dāng)密鑰過大時,生成的密文字符有些無法輸出,因此可
41、改進(jìn)加密算法,更好完善這個加密系統(tǒng)。3.5 進(jìn)制轉(zhuǎn)換器(進(jìn)制轉(zhuǎn)換器(A5)設(shè)計題目及要求設(shè)計題目及要求設(shè)計題目:進(jìn)制轉(zhuǎn)換器要求:(1)可輸入二進(jìn)制、八進(jìn)制、十進(jìn)制、十六進(jìn)制數(shù);(2)將已輸入的數(shù)轉(zhuǎn)換成其余進(jìn)制的數(shù);(3)具有輸入輸出界面。設(shè)計思想及程序流程框圖設(shè)計思想及程序流程框圖設(shè)計思想:由題目可以知道,本系統(tǒng)要求實(shí)現(xiàn)二、八、十、十六進(jìn)制數(shù)之間的相互轉(zhuǎn)換功能。(1)、對于數(shù)字的顯示問題,可以用字符串的形式進(jìn)行數(shù)字的輸入輸出。在系統(tǒng)內(nèi)部進(jìn)行轉(zhuǎn)換前,利用 ASCII 碼將字符串再轉(zhuǎn)換為相應(yīng)的數(shù)字進(jìn)行處理。(2)、進(jìn)制的轉(zhuǎn)換。系統(tǒng)中,首先將用戶輸入的任意進(jìn)制的數(shù)統(tǒng)一轉(zhuǎn)換為十進(jìn)制。然后再將得到的十進(jìn)
42、制數(shù)轉(zhuǎn)換為其他進(jìn)制最后輸出。(3). 轉(zhuǎn)化成十進(jìn)制時可以先得到用戶輸入的字符串的長度,在知道輸入是什么進(jìn)制數(shù)的前提下就可以將不同位上的數(shù)乘以進(jìn)制的相應(yīng)冪次最后求和就可以十進(jìn)制數(shù);由十進(jìn)制轉(zhuǎn)換成任意進(jìn)制時可以使用短除法,不斷相除取余數(shù)直到商為零為止,得到的字符串在翻轉(zhuǎn)后即使得到的任意進(jìn)制數(shù)對應(yīng)的字符串。(4).轉(zhuǎn)換輸出時,是將該數(shù)據(jù)的所有進(jìn)制轉(zhuǎn)換結(jié)果進(jìn)行輸出。進(jìn)制轉(zhuǎn)換系統(tǒng)是采用 C#界面環(huán)境編程制作的。系統(tǒng)界面如圖 3.5-1 所示。圖 3.5- 1 進(jìn)制轉(zhuǎn)換系統(tǒng)界面界面中用戶可以打開下拉菜單選擇要輸入的進(jìn)制,選定后,選擇的進(jìn)制輸入文本框會變白,用戶可以輸入要轉(zhuǎn)換的數(shù),按下“轉(zhuǎn)換”按鈕后,其他進(jìn)
43、制后面的文本框就會顯示轉(zhuǎn)換后的數(shù)。按下“結(jié)束”按鈕可以退出系統(tǒng)。整個程序可分為四個模塊,分別是:數(shù)據(jù)輸入模塊,數(shù)據(jù)轉(zhuǎn)換為十進(jìn)制模塊,十進(jìn)制轉(zhuǎn)換為其他進(jìn)制模塊,數(shù)據(jù)輸出模塊。程序流程框圖如圖 3.5-2 所示。開始用戶選擇要輸入的進(jìn)制數(shù)據(jù)讀入轉(zhuǎn)換為十進(jìn)制十進(jìn)制轉(zhuǎn)換其他進(jìn)制數(shù)據(jù)輸出結(jié)束圖 3.5- 2 程序流程框圖邏輯功能程序邏輯功能程序具體程序和注釋如下:#include stdio.h#include void bishow(int m);void main()char x,w;char c10;int i=0,err=0,quitflag=0;int num=0;do system(cls)
44、;printf(t- n);printf(t 歡迎數(shù)制轉(zhuǎn)換系統(tǒng) n);printf(t- n);printf(t n);printf(t- n);printf(t| 1 二進(jìn)制 |n);printf(t| 2 八進(jìn)制 |n);printf(t| 3 十進(jìn)制 |n);printf(t| 4 十六進(jìn)制 |n);printf(t| 0 退出 |n);printf(t- n);printf(nt請選擇: );do err=0;scanf(%c,&x);/輸入選項getchar(); if(x4|x7 | ci9 | ci0) err=1;/若輸入數(shù)據(jù)為非數(shù)字符號,則錯誤 i+; if(err)
45、 printf(n輸入數(shù)值錯誤,不是十進(jìn)制數(shù)!n); while(err); i=0; while(ci!=0) num=num*10; num=num+ci-48; i+; printf(nt十進(jìn)制數(shù) %s 轉(zhuǎn)換為其他進(jìn)制:nn,c); printf(t*n); bishow(num); printf(t八進(jìn)制: %on,num); printf(t十六進(jìn)制: %xn,num); printf(t*n); printf(是否繼續(xù)?(任意鍵繼續(xù)N鍵退出); scanf(%c,&w); getchar(); if(w=N|w=n) quitflag=1; break; case 4: /
46、輸入十六進(jìn)制 do err=0;i=0;num=0; printf(nt請輸入十六進(jìn)制數(shù):); scanf(%s,c); getchar(); while(ci!=0) if(ci=0) err=0;/若輸入數(shù)據(jù)為非數(shù)字符號,則錯誤 else if(ci=a&ci=A&ci=F) err=0; else err=1; i+; if(err) printf(n輸入數(shù)值錯誤,不是十六進(jìn)制數(shù)!n); while(err); i=0; while(ci!=0) num=num*16; if(0=ci&ci=9) num=num+ci-48; if(a=ci&ci=f)
47、num=num+ci-97+10; if(A=ci&ci=0) printf(%d,bi-); /輸出二進(jìn)制數(shù) printf(n);結(jié)果及完善方向結(jié)果及完善方向程序運(yùn)行結(jié)果:程序運(yùn)行結(jié)果:圖 3.5- 3 進(jìn)制轉(zhuǎn)換系統(tǒng)界面運(yùn)行情況系統(tǒng)的完善系統(tǒng)的完善本系統(tǒng)能夠較好的完成二、八、十、十六進(jìn)制數(shù)之間的相互轉(zhuǎn)換,并且對可能出現(xiàn)的異常情況進(jìn)行了處理。例如,當(dāng)用戶選擇輸入二進(jìn)制,用戶就無法在其他進(jìn)制的文本框內(nèi)輸入數(shù)據(jù)。還有,如果用戶要鍵入非該進(jìn)制內(nèi)的字符,用戶的鍵入將無效,非法字符將無法輸入到文本框內(nèi)。這樣的設(shè)計能方便用戶操作。系統(tǒng)還有一些地方有待完善,比如,用戶輸入的字符串的最大長度需要進(jìn)行一
48、定的限制等等。3.6 分?jǐn)?shù)統(tǒng)計分?jǐn)?shù)統(tǒng)計設(shè)計題目及要求設(shè)計題目及要求設(shè)計題目:學(xué)生成績核算系統(tǒng)的設(shè)計與實(shí)現(xiàn)要求:(1) 、按班級按課程從文件中讀入相應(yīng)的平時成績、期中考試成績和期末考試成績。(2) 、三個成績對總評成績的百分比被定義為常數(shù),各占總成績的30%、30%和 40%。(3) 、計算每位學(xué)生的總評成績。(4) 、計算該班級本課程的總平均成績。(5) 、計算處于優(yōu)、良、中、及格、不及格的學(xué)生人數(shù)以及占總?cè)藬?shù)的百分比。其中 100-90 為優(yōu),89-80 為良,79-70 為中,69-60 為及格,60 分以下為不及格。(6) 、按要求輸出成績在優(yōu)、良、中、及格、不及格各區(qū)間的學(xué)生學(xué)號、成績
49、。設(shè)計思想及程序流程框圖設(shè)計思想及程序流程框圖設(shè)計思想:1.建立文本文件,第一行為學(xué)生的總?cè)藬?shù),其后為每個學(xué)生的成績,每個學(xué)生的信息占一行,格式為: 學(xué)號(9 位) 平時成績 期中考試成績 期末考試成績例如: 15B10040801 88 75.5 66 B10040802 91 79.5 76B10040803 85 75 77 B10040804 79 82 B10040805 94 83.5 81.5 B10040806 80 69 68B10040807 82 77 71 B10040808 77 57 58B10040809 91 88 86 B10040810 96 89 90B1
50、0 50 B10040812 74 65 66B10040813 81 71 76 B10040814 83 75 77B10040815 85 78 79 2. 數(shù)據(jù)結(jié)構(gòu)(用 C+實(shí)現(xiàn))本題中共設(shè)計了兩個類:學(xué)生(Student)和學(xué)生成績(marks)(1)基類學(xué)生(Student) ,定義如下:class Student /基類學(xué)生private: /私有成員:char stu_no10; /學(xué)號(題目中用到的)char stu_name10; /姓名(可拓展的)char stu_zhy20; /專業(yè)(可拓展的)public: /公有成員:Student() /構(gòu)造函數(shù)strcpy(st
51、u_no,NULL);strcpy(stu_name,NULL);strcpy(stu_zhy,NULL);Student() /析構(gòu)函數(shù)void setno(char no) /設(shè)置學(xué)號strcpy(stu_no,no);void setname(char name) /設(shè)置姓名 strcpy(stu_name,name);void setzhy(char zhy) /設(shè)置專業(yè)strcpy(stu_zhy,zhy);char *getno() /取學(xué)號return stu_no;char *getname() /取姓名return stu_name; char *getzhy() /取專業(yè)r
52、eturn stu_zhy;(2)基類學(xué)生(Student)的派生類學(xué)生成績(marks) ,定義如下:class marks:public Student /派生類學(xué)生成績protected: /保護(hù)成員:float sco1; /平時成績float sco2; /期中成績float sco3; /期末成績 float avg; /總評成績char dengj; /等級public: /公有成員: void setsco1(float s1)sco1=s1; /設(shè)置平時成績void setsco2(float s2)sco2=s2; /設(shè)置期中成績void setsco3(float s3)
53、sco3=s3; /設(shè)置期末成績float getsco1()return sco1; /取平時成績float getsco2()return sco2; /取期中成績float getsco3()return sco3; /取期末成績float getavg() return avg; /取總評成績char getdengj()return dengj; /取等級void Computavg(); /計算總評成績void GetDJ(); /計算等級mark100;3從文件中讀入相應(yīng)的平時成績、期中考試成績和期末考試成績時,用C+中的流實(shí)現(xiàn)。 4. 每次計算出的結(jié)果可在屏幕輸出,并把每個學(xué)生
54、的總評成績輸入到新文件文件中,格式為: 學(xué)生學(xué)號(9 位) 總評成績 成績等級例如: B07040801 88 B 為查詢方便,可把總評成績所處等級(優(yōu)、良、中、及格、不及格)同時保存在文件中,分別用字母 A、B、C、D、E 表示。5.設(shè)計方法:本系統(tǒng)采用自頂向下,逐步細(xì)化的方法,將整個系統(tǒng)細(xì)化為5 個模塊:讀入文件,計算成績模塊,保存文件模塊,計算并輸出等級分布模塊以及退出模塊。根據(jù)這個思想,主程序的流程圖如-1 圖所示:開始顯示菜單鍵盤輸入選項讀入文件計算成績退出系統(tǒng)計算輸出等級分布保存文件是否退出系統(tǒng)?結(jié)束是否 1 主程序流程圖邏輯功能程序邏輯功能程序具體程序及注釋如下:#include
55、#include#define N 100struct studentchar number10; char psgra5;char qzgra5;char qmgra5; ;int information() FILE* fp; int i; struct student std15= B10040801, 88, 75.5, 66 , B10040802 ,91, 79.5,76, B10040803,85,75,77 , B10040804,79,82,80.5, B10040805,94,83.5,81.5, B10040806 ,80,69,68, B10040807,82,77,7
56、1 , B10040808,77,57,58, B10040809,91,88,86 , B10040810,96, 89,90, B10040811,70,45.5,50 , B10040812,74,65,66, B10040813,81,71,76, B10040814,83,75,77, B10040815,85,78,79 ; if(fp=fopen(note.dat,w)=NULL)printf(文件打開錯誤!n);exit(0); fprintf(fp, 學(xué)號 平時成績 期中成績 期末成績n 15n); for(i=0;i15;i+)fprintf(fp, %-8s %8s %8
57、s %8sn,stdi.number,stdi.psgra,stdi.qzgra,stdi.qmgra); /%8s表示輸出 8 個字符的字符串,不夠 8 個字符右對齊; fclose(fp);return 0;int read(struct student st15) /讀取文件的函數(shù);FILE*fp1;struct student s;int size;int i=0;if(fp1=fopen(note.dat,r)=NULL) /打開 information 文件;printf( 文件打開錯誤!n);exit(0);size=sizeof(struct student);fseek(fp
58、1,0L,SEEK_SET);fread(&s,size,1,fp1); /讀取一個字節(jié)的 fp1 指針 fread(&s,size,1,fp1);for(i=0;i15;i+) fscanf(fp1,%s, sti.number); fscanf(fp1,%s, sti.psgra); fscanf(fp1,%s, sti.qzgra); fscanf(fp1,%s, sti.qmgra); fclose(fp1);return 0;void output(double n20,char a20,struct student st15,char ch) int j=0; in
59、t i; printf(得等級%c 的學(xué)生及其分?jǐn)?shù):n,ch); for(i=0;i=0&n=60&n=70&n=80&n90) return B; else return A;int main()FILE*fp1;struct student st15;int i=0;double nN;char aN;double d=0.0;information(); read(st); if(fp1=fopen(out.dat,w)=NULL)printf( File open error!n);exit(0); fprintf(fp1, 學(xué)號 總評成績 等級n 15
60、n); for(i=0;i15;i+) ni=0.3*atof(sti.psgra)+0.3*atof(sti.qzgra)+0.4*atof(sti.qzgra); /按照 0.3 0.3 0.4 計算成績; ai=level(ni); /輸出等級給 ai; fprintf(fp1, %-8s %8.1lf %8c n,sti.number,ni,ai); d=d+ni; /求總成績; fclose(fp1);while(1) printf(tttt 南京郵電大學(xué)nnn); printf(-); printf(tttt 請選擇服務(wù)類型:ntttt1:輸出得 A 的學(xué)生。ntttt2:輸出得 B 的學(xué)生。ntttt3:輸出得 C 的學(xué)生。n); printf(tttt4:輸出得 D 的學(xué)生。ntttt5:輸出得 E
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版農(nóng)業(yè)科研溫室大棚租賃及實(shí)驗數(shù)據(jù)共享合同3篇
- 智能家庭電網(wǎng)的建設(shè)與運(yùn)營模式探討
- 二零二五年度棉被市場調(diào)研與推廣合作協(xié)議4篇
- 2025年度新能源汽車零部件代工及定制協(xié)議4篇
- 2025年度新能源發(fā)電站打井用水合作協(xié)議書3篇
- 2025年度腳手架租賃與維修保養(yǎng)服務(wù)合同3篇
- 二零二五版專業(yè)展覽場地租賃與展會組織合同3篇
- 基于2025年度大數(shù)據(jù)分析的營銷策略咨詢合同2篇
- 二零二四年商品混凝土環(huán)保生產(chǎn)與節(jié)能減排合同書3篇
- 二零二五年度科研院所車庫租賃與研發(fā)支持合同4篇
- 2024年全國體育專業(yè)單獨(dú)招生考試數(shù)學(xué)試卷試題真題(含答案)
- 北師大版小學(xué)三年級上冊數(shù)學(xué)第五單元《周長》測試卷(含答案)
- DB45T 1950-2019 對葉百部生產(chǎn)技術(shù)規(guī)程
- 新修訂《保密法》知識考試題及答案
- 電工基礎(chǔ)知識培訓(xùn)課程
- 住宅樓安全性檢測鑒定方案
- 廣東省潮州市潮安區(qū)2023-2024學(xué)年五年級上學(xué)期期末考試數(shù)學(xué)試題
- 市政道路及設(shè)施零星養(yǎng)護(hù)服務(wù)技術(shù)方案(技術(shù)標(biāo))
- 《論語》學(xué)而篇-第一課件
- 《寫美食有方法》課件
- (完整word版)申論寫作格子紙模板
評論
0/150
提交評論