南京郵電大學軟件設計_第1頁
南京郵電大學軟件設計_第2頁
南京郵電大學軟件設計_第3頁
南京郵電大學軟件設計_第4頁
南京郵電大學軟件設計_第5頁
已閱讀5頁,還剩52頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優質文檔-傾情為你奉上南 京 郵 電 大 學軟件設計報告學 號:姓 名: 專 業:2014年06月23日2014年07月04日目 錄專心-專注-專業第一章 軟件設計介紹一、軟件設計的性質、目的本課程是一門技能訓練課,為在校學生的必修課程。通過設計培養學生良好的編程習慣,使學生掌握編程的基本步驟,規范學生的編寫程序的格式,鍛煉學生編寫程序的能力,為將來編寫較大程序的打好基礎。二、軟件設計的任務通過集中時間上機實驗,使學生充分發揮已有的編程能力,熟悉編譯環境,選擇若干課題,進行審題、分析、設計和調試,并根據要求寫出實驗報告。三、實驗內容軟件設計課題共分A 、B兩檔。A檔共5題,第一周完成;B檔

2、共2題,第二周完成。四、考核辦法考核采取程序驗收和面試的方法進行。其中,程序驗收及面試占50%,實驗報告占50%。在考核過程中,若發現抄襲程序者,所抄襲的程序按零分記。注:如有以下情況,視為抄襲:1、 與已驗收的程序明顯雷同;2、 面試時不能解釋程序中的某些基本功能,或對所寫程序一無所知。第二章 軟件開發平臺簡介 Microsoft Visual C+是Microsoft公司推出的開發Win32環境程序,面向對象的可視化集成編程系統。它不但具有程序框架自動生成、靈活方便的類管理、代碼編寫 和界面設計集成交互操作、可開發多種程序等優點,而且通過簡單的設置就可使其生成的程序框架支持數據庫接口、OL

3、E2,WinSock網絡、3D控制界 面。 它以擁有“語法高亮”,(自 動編譯功能)以及高級除錯功能而著稱。比如,它允許用戶進行遠程調試,單步執行等。還有允許用戶在調試期間重新編譯被修改的代碼,而不必重新啟動正在調試 的程序。其編譯及建置系統以預編譯頭文件、最小重建功能及累加連結著稱。這些特征明顯縮短程式編輯、編譯及連結的時間花費,在大型軟件計劃上尤其顯著。第三章 軟件設計的內容3.1 分數統計軟件(A1)3.1.1設計題目及要求 題目:分數統計 要求:(1)輸入某班級學生的姓名、分數; (2)對(1)的分數進行降冪排列并輸出; (3)具有輸入輸出界面。3.1.2設計思想及程序流程框圖 設計思

4、想:先輸出程序菜單,然后按照菜單選項進行操作,選擇選項一:即先輸入要排序的學生人數,然后利用循環語句按次輸入學生姓名和成績,直至將學生姓名和分數全輸入,輸入完后按enter后,在程序界面上顯示剛才輸入的內容。選擇選項二:則運行程序中的按照成績的降序功能輸出排序后的學生學號、學生姓名和學生成績。選擇選項三:則程序正常退出。 程序流程框圖:開 始 輸出菜單選項輸入選項 n輸入學生姓名name和分數score用程序將學生分數排序輸出排序后的學生數據 結 束輸入學生人數n3.1.3邏輯功能程序要求:(1)輸入某班級學生的姓名、分數;(2)對(1)的分數進行降冪排列并輸出;(3)具有輸入輸出界面。源代碼

5、:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>int num; /人數struct student char Class_ID20; /班級學號 char name20; /姓名 float score; /成績stu100; void menu(); /菜單顯示函數void choose(); /菜單選擇void input_information(); /學生信息輸入函數void output_information(); /學生信息顯示函數void

6、 rank(); /學生成績降序排列void number(); /控制學生人數函數void main()while(1) int i;char ch;menu(); choose();ch=getchar();/*菜單*/void menu() getchar();printf(" n");printf(" 分數統計程序 n");printf(" nn");printf(" 錄入學生數據-請輸入:1 nn"); printf(" 顯示學生數據-請輸入:2 nn"); printf("

7、 成績降序排列-請輸入:3 nn");printf(" 退 出 程 序 -請輸入:4 nn"); printf("t請正確選擇(如:1,2,3或則4):");/*選擇*/void choose() char choos;do scanf("%c",&choos);while(choos<'1'|choos>'4');switch(choos) case '1': number();input_information(); break; case '2

8、': output_information();break; case '3': rank(); output_information(); break; case '4': printf("n"); exit(1); /*輸入*/void input_information() int i;for(i=0;i<num;i+) printf("t班級學號:"); scanf("%s",&stui.Class_ID);printf("t姓名:"); scanf(&

9、quot;%s",&); printf("t成績:"); scanf("%f",&stui.score); printf("n");/*輸出*/void output_information() int i; printf("t學生成績統計如下:n"); printf("t班級學號t姓名t成績n"); for(i=0;i<num;i+) printf("t%s",stui.Class_ID); printf("t%s

10、",); printf("t%3.1f",stui.score); printf("n"); printf("n");/*成績排序*/void rank() int i,j,max,n=num; struct student temp; for(i=0;i<n-1;i+) max=i;for(j=i+1;j<n;j+)if(stuj.score>stumax.score)max=j;if(max!=i)temp=stui;stui=stumax;stumax=temp;/*學生人數*/vo

11、id number() printf("nt請輸入學生人數:");scanf("%d",&num);printf("n");3.1.4程序調試結果:1、錄入學生數據:2、顯示學生數據:3、排名顯示:4退出程序:3.1.5:編程時候遇到的問題及解決方案問題:#include<stdio.h>struct student char name20; int score;void main() struct student boy3; int i; char ch; for(i=0;i<3;i+) printf(&q

12、uot;請輸入姓名:"); gets(); printf("請輸入成績:"); scanf("%d",&boyi.score); printf("n"); printf(" 姓名 成績 n "); for(i=0;1<3;i+) printf(" %s %d",,boyi.score);如運行調試圖片所示:當第二i+之后,一回車就直接到達成績輸入了,這就將導致無法正常數據輸入。問題出現原因:在后面該輸入的時候直接跳過的原因是,在結束前一

13、個scanf輸入時輸入的回車被后一個gets輸入時接受,也就是說前一個地方輸入的“數據+回車”分別被兩個地方接受。解決方法: scanf("%c",&a);getchar();gets(S);就是將一個空把那兩個函數隔斷,這樣就是的前兩個接受“數據+回車”,這樣對第三個就沒有影響了。3.1.6完善方向:本程序界面美觀,通過程序優化,在輸入菜單選擇項時即使輸入的是很長的混亂字符,程序也會提示你輸入錯誤,不會發生程序崩潰的現象。同理,輸入學生人數也一樣,保證了程序的穩定可靠。如果程序可以中途停止,并自動保存剛輸入的數據,待下次運行時正常調出,則程序將更加完整,更具有實用

14、性。3.2 打字軟件(A2)3.2.1設計題目及要求 題目:打字程序 要求:(1)隨即產生一字符串,每次產生的字符串內容、長度都不同; (2)根據(1)的結果,輸入字符串,判斷輸入是否正確,輸出正確率; (3)具有輸入輸出界面。3.2.2設計思想及程序流程框圖設計思想:先設計一個歡迎進入打字程序的菜單,然后就由程序隨機產生一個任意長度的字符串(大小寫的英文字母),然后由用戶輸入字符串里顯示的字母,輸入完后按enter結束輸入,最后程序輸出用戶打字的正確率。接著一個選項,詢問用戶是否繼續進行打字練習。選擇是則打字練習繼續上述的操作;選擇退出程序則退出程序。程序流程框圖: 開 始輸出歡迎菜單輸出隨

15、機產生的字符串輸入字符串輸出打字正確率輸入選項輸出yes or no1 ch 結 束yesno3.2.3邏輯功能程序/*-程序名稱:打字程序要求:(1)隨機產生一字符串,每次產生的字符串內容、長度都不同;(2)根據(1)的結果,輸入字符串,判斷輸入是否正確,輸出正確率;(3)具有輸入輸出界面。-*/#include<stdio.h>#include<stdlib.h>#include<string.h>#include<ctime>#include<math.h>#define N 20 /定義產生的字符串最長為10個字符int i,

16、j,length; char ch,aN,bN; /aN為輸入, bN為隨機產生 void menu();void choose();void right(char *a,char *b,int length);void input(char *a,int length);void found(char *b,int length);void main()menu();srand(time(NULL);length=1+rand()%N;while(1) choose();printf("nt請繼續選擇:"); /*菜單*/void menu() printf("

17、 n");printf(" 打字程序 n");printf(" n");printf(" 產生隨機字符串-請輸入:1 n"); printf(" 輸入產生字符串-請輸入:2 n"); printf(" 正確率計算輸出-請輸入:3 n");printf(" 退 出 程 序-請輸入:4 n"); printf("t請正確選擇(如:1,2,3或則4):");/*選擇*/void choose() char choos;do scanf("%c

18、",&choos);while(choos<'1'|choos>'4');switch(choos) case '1': found(b,length);break; case '2': input(a,length);break; case '3': right(a,b,length);break; case '4': printf("n");exit(1); /*產生隨機字符串序列*/void found(char *b,int length)p

19、rintf("t"); for(i=0;i<length;i+) int element;doelement=65+rand()%(122-65+1); while(element>90&&element<97);ch=element;bi=ch;printf("%c",element);/*輸入*/void input(char *a,int length)printf("t請輸入上面的字符串:");fflush(stdin); /清理緩沖區for(j=0;j<length;j+)scanf(

20、"%c",&aj);/*計算輸入正確率*/void right(char *a,char *b,int length)int numbers=0;double rate;for(i=0;i<length;i+) if(ai-bi)=0)numbers=numbers+1;rate=100.0*numbers/length;printf("t正確率為:%4.2f%",rate);3.2.4結果及完善方向運行結果:3.2.5:編程時候遇到的問題及解決方案問題:/*輸入*/void input(char *a,int length)printf(

21、"t請輸入上面的字符串:");for(j=0;j<length;j+)scanf("%c",&aj);/*計算輸入正確率*/void right(char *a,char *b,int length)int numbers=0;double rate;for(i=0;i<length;i+) if(ai-bi)=0)numbers=numbers+1;rate=100.0*numbers/length;printf("t正確率為:%4.2f%",rate);運行的時候總是出現計算正確率為0.00%,如圖所示。問題原

22、因:在輸入字符串前沒有清空緩沖區,這倒是出現錯誤。解決方案:在輸入scanf函數前先清空緩沖區,保證讀入無誤。3.2.6完善方向: 這個程序在編寫做成中遇到的麻煩不只是這一個,但是最值得注意的就是在輸入字符串之前要清空緩沖區。除此之外,對函數參數傳值也是一個應該注意的地方。程序比較簡明,邏輯嚴明,界面美觀,可以通過宏定義控制N來調節輸入的長度。3.3 文本編輯器(A3)3.3.1設計題目及要求 題目:文本編輯器 要求:(1)編輯文本; (2)保存、打開指定位置的文本文件; (3)具有輸入輸出界面。3.3.2設計思想及程序流程框圖設計思想:先顯示一個功能菜單。然后由用戶選擇是編輯文本還是讀取文本

23、或者退出程序。如果選擇編輯文本的話就在某位置建立一個文本文檔,然后向文本文件里寫入你要寫的東西。讀文本文件的話就在見文本的位置讀該文本,先判斷文本是否存在,如果不存在則顯示打開文本失敗;如果存在則讀取文本中的信息。選擇退出程序則退出程序。程序流程框圖: 開 始 輸出功能菜單 輸入n n231輸入文件名輸入文件名 結 束輸入文件名讀取文本編輯文本建立文本3.3.3邏輯功能程序/*-程序名稱:文本編輯器要求:(1)編輯文本;(2)保存、打開指定位置的文本文件;(3)具有輸入輸出界面。-*/#include<stdio.h>#include<stdlib.h> #includ

24、e<string.h>void menu();void create_file(FILE *fp,char *fname);void write_file(FILE *fp,char *fname);void read_file(FILE *fp,char *fname);int main()FILE *fp;int count=0;char num100;int flag1,flag2,flag3;char F_name20;while(1)menu();printf("t請選擇你要進行的文件操作:");scanf("%s",num);ge

25、tchar(); while(strlen(num)>1|num0<49|num0>52)printf("t輸入錯誤!請重新輸入:");scanf("%s",num);getchar();switch(num0)case '1': flag1=1;flag1=0;create_file(fp,F_name); break;case '2': flag2=1;flag2=0;write_file(fp,F_name); break;case '3': flag3=1;flag3=0;read

26、_file(fp,F_name); break;case '4': printf("t"); exit(0); return 0; void menu()getchar();printf(" n");printf(" 文本編輯器 n");printf(" nn");printf(" 建立文本-請輸入:1 n"); printf(" 編輯文本-請輸入:2 n"); printf(" 讀取文本-請輸入:3 n");printf(" 退

27、出程序-請輸入:4 nn"); void write_file(FILE *fp,char *fname) char ch;printf("t請鍵入編輯的文件名(如D:name.txt):nt"); gets(fname); if(fp=fopen(fname,"w")=NULL)printf("t不能打開文件!n");exit(0);printf("t請輸入內容(以#號鍵結束):nt");ch=getchar();while(ch!='#')fputc(ch,fp);ch=getchar

28、();printf("nn");getchar();fclose(fp);void create_file(FILE *fp,char *fname)printf("t請鍵入新建的文件名(如D:name.txt):nt");gets(fname);if(fp=fopen(fname,"w+")=NULL)printf("t不能打開文件!n");exit(0);printf("t%s文件已經創建好!nn",fname);fclose(fp);void read_file(FILE *fp,char

29、 *fname)char ch;printf("t請鍵入讀取的文件名(如D:name.txt):nt");gets(fname);if(fp=fopen(fname,"r")=NULL)printf("t不能打開文件!n");exit(0);printf("t");while(ch=fgetc(fp)!=EOF)putchar(ch);printf("tnn");fclose(fp);3.3.4結果及完善方向運行結果:3.3.5:編程時候遇到的問題及解決方案 編寫這個程序還比較順利,沒有遇到困難

30、,因為里面就是文件的讀、寫,注意細節,唯一注意的是:題目要求的是.dat文檔(xp系統的文本文檔),而我的電腦室win7,里面的文本文檔后綴是.txt,其他的沒什么大問題。 3.3.6 完善方向:本程序界面美觀,通過程序優化,在輸入菜單選擇項時即使輸入的是很長的混亂字符,程序也會提示你輸入錯誤,不會發生程序崩潰的現象。本程序可以根據指定文件名進行建立文件、讀取文件、編輯文件等操作。 文本再次編輯時,將覆蓋上次編輯的內容,可以設計將這一點完善。可以用循環函數設計編輯文本。3.4 加密軟件(A4)3.4.1設計題目及要求 題目:加密 要求:(1)輸入任意一段明文M,以及密鑰K; (2)根據以下公式

31、將其轉換為密文C。 Ci = mi + K ,其中i = 0,1,n-1 , K 為密鑰; (3)具有輸入輸出界面。3.4.2設計思想及程序流程框圖 設計思想:先設計一個功能菜單,然后由用戶選擇。如果選擇加密功能這請用戶輸入一段明文然后輸入密鑰,最后顯示明文和轉換成的密文。若選擇解密功能則請用戶輸入一段密文然后輸入密鑰,最后顯示密文和解密后的明文。選擇退出程序則退出程序。程序流程框圖: 開 始 輸出功能菜單輸入n num3 2結 束1輸入密文C和密鑰k輸入明文m和密鑰k mi=Ci-kCi=mi+k輸出密文C和明文m輸出m和密文C3.4.3邏輯功能程序/*-程序名稱:加密要求:(1)輸入任意一

32、段明文M,以及密鑰K;(2)根據以下公式將其轉換為密文C。 Ci = mi + K ,其中i = 0,1,n-1 , K 為密鑰;(3)具有輸入輸出界面。-*/#include<stdio.h>#include<stdlib.h> #include<string.h> void dis_menu();void set_menu();void encryption(char *m, char *c, char *key); void decryption(char *m, char *c, char *key); int main()while(1)dis_m

33、enu(); set_menu();return 0;void dis_menu()printf(" n");printf(" 加密解密程序 n");printf(" nn");printf(" 加密請輸入:1 nn"); printf(" 解密請輸入:2 nn"); printf(" 退出請輸入:3 nn");printf("tt請選擇你要進行的操作:");void set_menu() char m100="" char c100=

34、"" char key100="" char n100; scanf("%s",n); if(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);

35、 break; default: printf("t輸入錯誤!請重新輸入:"); set_menu(); break; void encryption(char *m, char *c, char *key)printf(" - n");printf(" | 加密環節 | n");printf(" - nn"); printf("t請輸入需加密的明文:");scanf("%s",m);printf("t請輸入密鑰:");scanf("%s&quo

36、t;,key); while(strlen(key)>1)printf("t輸入密鑰有誤,請重輸:"); scanf("%s",key);int i,length;length=strlen(m);printf("t你輸入的明文為:");printf("%sn",m); for(i=0;i<length;i+)ci=mi+key0-'0'printf("t轉換后的碼文為:");printf("%snn",c);void decryption(cha

37、r *m, char *c, char *key)printf(" - n");printf(" | 解密環節 | n");printf(" - nn"); printf("t請輸入需解密的密文:");scanf("%s",c);printf("t請輸入密鑰:");scanf("%s",key); while(strlen(key)>1)printf("t輸入密鑰有誤(應輸入一個字符),請重輸:"); scanf("%s

38、",key);int i,length;length=strlen(c);printf("t你輸入的密文為:");printf("%sn",c); for(i=0;i<length;i+)mi=ci-(key0-'0');printf("t破解后的明文為:");printf("%snn",m);3.4.4結果及完善方向運行結果:3.4.5 程序完善方向基本功能都能實現。本程序界面美觀,通過程序優化,在輸入菜單選擇項時即使輸入的是很長的混亂字符,程序也會提示你輸入錯誤,不會發生程序崩潰

39、的現象。若能夠做出用戶圖形界面。則本程序將更加具有實用性。3.5 進制轉換器(A5)3.5.1設計題目及要求 題目:進制轉換器(10)要求:(1)可輸入二進制、八進制、十進制、十六進制數; (2)將已輸入的數轉換成其余進制的數; (3)具有輸入輸出界面。3.5.2設計思想及程序流程框圖設計思想:先顯示一個功能菜單供用戶選擇。程序設計兩個函數,分別是十進制的數轉化成其他進制數程序,及其他程序轉換成十進制的程序。如果二進制、八進制、十進制、十六進制要轉換成其他進制的數,首先要判斷他們是否是輸入正確的特定進制的數,然后轉換成十進制,再由十進制轉換成其他進制。程序流程框圖 開 始輸出功能菜單 輸入nu

40、m num123 4 5輸入str 結 束輸入str輸入str輸入str十進制十六進制八進制二進制錯誤nnny ynny y轉成十進制十進制轉換成其他進制3.5.3邏輯功能程序/*-程序名稱:進制轉換器要 求:(1)可輸入二進制、八進制、十進制、十六進制數; (2)將已輸入的數轉換成其余進制的數; (3)具有輸入輸出界面。-*/#include<stdlib.h>#include<stdio.h>#include<math.h>#include<string.h>void menu(); /菜單void choose(); /菜單設置void o

41、utput(int num,int n); /十進制轉換為其他進制int input(int n); /其他進制轉換成十進int main()while(1)menu();choose();return 0; /*菜單*/void menu()printf(" n");printf(" 進制轉換程序 n");printf(" n");printf(" 輸入 二 進制-請輸入:1 n"); printf(" 輸入 八 進制-請輸入:2 n"); printf(" 輸入 十 進制-請輸入:

42、3 n");printf(" 輸入 十六進制-請輸入:4 n");printf(" 退 出 程 序-請輸入:5 n");printf(" 請選擇操作:"); void choose()int num;char n500;scanf("%s",n);printf("n");if(strlen(n)>1)printf("t輸入錯誤!請重新輸入:"); choose();elseswitch(*n)case '1': num=input(2); ou

43、tput(num,8); printf("t轉換10進制輸出為:%dn",num); output(num,16); printf("tn"); break;case '2': num=input(8); output(num,2); printf("t轉換10進制輸出為:%dn",num); output(num,16); printf("tn"); break;case '3': num =input(10); output(num,2); output(num,8); outp

44、ut(num,16); printf("tn"); break;case '4': num=input(16); output(num,2); output(num,8); printf("t轉換10進制輸出為:%dn",num); printf("tn"); break;case '5': printf("t"); exit(1); break;default: printf("t輸入錯誤!請重新輸入:"); choose(); break; void outp

45、ut(int num,int n)char num_tp100;int i=0;printf("t轉換%d進制輸出為:",n);if(n<16)while(num!=0)num_tpi='0'+num%n;num=num/n;i+;num_tpi='0' while(i!=0)putchar(num_tp-i);elsewhile(num!=0)if(num%16>9&&num%16<16)num_tpi='A'+(num%16-10);elsenum_tpi='0'+num%

46、16;num=num/16;i+;num_tpi='0'while(i!=0)putchar(num_tp-i);printf("n");int input(int n)char temp100,ch,m;int num=0,i=0,flag=1,count=0;while(flag)i=0;flag=0;count=0;fflush(stdin); /清空輸入緩沖區,確保讀入無錯printf("t請輸入%d進制數:",n); m=48+n-1;if(n<16)while(ch=getchar()!='n')if(ch<'0'|ch>m)printf("t輸入數字有誤!n");flag=1;break;tempi=ch;count+;i+;tempi='0'/ 輸入正確八進制結束for(i=0;i<count;i+)num=num+(tempi-'0')*(int)pow(n,(count-i-1);/計算值 else while(ch=getchar()!=&#

溫馨提示

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

評論

0/150

提交評論