歌唱比賽評分系統設計(C語言完整版_第1頁
歌唱比賽評分系統設計(C語言完整版_第2頁
歌唱比賽評分系統設計(C語言完整版_第3頁
歌唱比賽評分系統設計(C語言完整版_第4頁
歌唱比賽評分系統設計(C語言完整版_第5頁
已閱讀5頁,還剩90頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、軟件設計實踐 報告學院:中北大學信息商務學院題目:歌唱比賽評分系統1305044142王澤下載可編輯學生姓名 :1305044138郭世杰1305044149賀鑫完成時間 :2016 年1月18日指導教師 :魯旭濤 姚愛琴李沅.專業 .整理 .下載可編輯目錄課 程 設 計 任 務 書 .41需求分析 .61.1題目分析 .61.2系統分析 .62設計概要 .73程序設計及模塊分工明細 .83.1人員模塊分工 .83.2人員模塊分工明細 .84測試結果 .474.1調試與測試 .474.2測試結果截圖 .48設計總結 .55致 謝.56參考文獻 .57附錄 .58.專業 .整理 .下載可編輯課程

2、設計任務書1 設計目的C 語言是通信工程專業一門重要的專業技術課程,它是一門實踐性很強的課程。軟件設計實踐課程是為配合c 語言課程 ,對學生進行全面綜合訓練、與課堂教學 、作業練習題 、上機實驗相輔的必不可少的一個教學環節。利用所學的C 語言知識及其編程方法:結構程序設計 、數組 、指針 、結構體 、文件操作等內容 ,通過布置具有一定難度的實際程序設計題目,要求學生獨立完成所布置題目。在分析設計過程中 ,要求學生養成良好的編程習慣,學會分析解決簡單的實際問題,學會 C 語言的實際調試技巧和方法,要求學生在教師的指導下逐步完成應用程序的設計2 設計內容和要求有十個選手參加歌唱比賽,十個裁判對每個

3、選手的演唱進行打分,去掉一個最高分,去掉一個最低分 ,剩下分數的平均值作為每位選手最后的成績。要求 :( 1)采用結構體定義每個選手的參賽編號,姓名以及十個裁判打出的分數 ;( 2)從鍵盤輸入每個選手的相關信息:參賽編號 ,姓名和十個得分 ;( 3)計算每位選手的最后得分 ,并按分數由高到低排序 ;( 4)查詢功能 :輸入參賽選手的編號或姓名,便可輸出該選手的得分以及排名;以上功能采用菜單操作方式,即從鍵盤輸入1 到 3 這三個數 ,分別完成以上 ( 2)到( 4)的功能 。3 設計工作任務及工作量的要求每個組員完成自己的模塊設計。.專業 .整理 .下載可編輯完成一份設計說明書。有正確的運行結

4、果及結果分析.專業 .整理 .下載可編輯1 需求分析1.1題目分析軟件設計實踐課程是為配合c 語言課程 ,對學生進行全面綜合訓練 、與課堂教學 、作業練習題 、上機實驗相輔的必不可少的一個教學環節。利用所學的 C 語言知識及其編程方法:結構程序設計 、數組 、指針 、結構體 、文件操作等內容 ,通過布置具有一定難度的實際程序設計題目,要求學生獨立完成所布置題目。 在分析設計過程中 ,要求學生養成良好的編程習慣,學會分析解決簡單的實際問題,學會 C 語言的實際調試技巧和方法來解決實際問題。1.2系統分析歌唱比賽評分系統包括 :菜單:系統以菜單方式工作,界面友好 ,易于操作 。錄入 :在每個輸入前

5、都有詳細分類和提示,簡單明了 ,根據提示輸入參賽選手號數,姓名,各個評委打分成績 。查詢:用戶輸入查詢條件,系統規則地在界面顯示查詢結果,不光可以輸入號數,查詢到該選手信息 ,每位評委打分 ;還可以選擇排名查詢,顯示的數據全面 。修改:在已有數據的基礎上實現對每位選手的信息,以及評分的修改 。排名:利用冒泡程序對數組進行排序,刪除一個最高與最低然后進行講剩下的值平均,得出選手最終得分 ,再根據分數高低排名 。儲存:對于已經輸入的數據,已文檔的信息儲存到電腦硬盤中,實現永久儲存 。系統的程序設計環境 :本系統使用 Visual C+作為程序開發工具 。 Visual C+是基于對象的快速應用程序

6、開發工具 ,是當今最強大、最靈活的應用程序開發工具之一,具有良好的可視化應用.專業 .整理 .下載可編輯程序開發環境和強大的可擴展數據庫功能。 利用 Visual C+提供的可視化組件庫進行編程,可以快速 、高效地開發出基于Windows環境的各類應用程序。Visual C+ 語言的特點是面向對象設計的程序語言, Visual C+ 的基礎編程語言是具有面向對象特性的語言,具有代碼穩定、可讀性好 、編譯速度快等優點,并將面向對象的概念移植到了C 語言中 ,使這種基礎語言有了新的發展空間。與其它編程軟件相比,特別是在數據庫和網絡應用方面 , Visual C+具有簡便易用、靈活高效的特點。開發軟

7、件通常要經過修改源代碼、編譯 、測試 、再修改 、再編譯 、再測試等操作,這些操作形成了一個開發循環,所以快速的編譯器可以大大地降低開發周期。 VisualC+ 正是建立在這種高效編譯器的基礎之上,是針對 Windows 的最快的高級語言代碼編譯器 ,因此生成的代碼十分精練高效,使 Visual C+程序的運行速度更快。這也是使用Visual C+作為程序設計開發語言的重要原因。2設計概要總體設計目標:使用者可以利用本系統進行對選手信息以及評委評分的各項運算操作,如根據需求添加選信息,刪除選手信息,對選手得分進行排名等。最后清晰完整的結果于屏幕中。方便了評分操作,不僅節省時間,而且提高準確性,

8、可以達到事半功倍的效果。總體設計策略:本系統采用的是自頂向下、層次化的模塊結構。對高層模塊 ,采用以事務為中心的設計策略,把一個大的模塊逐步分解成較小的相對簡單的模塊。對低層模塊 ,采用以變換為中心的設計策略。為了提高每個模塊的內聚性、降低模塊間的耦合性,將每個模塊設計成具有單一功能的模塊(即功能內聚 ),使模塊間的聯系完全是通過主模塊的控制和調用來實現(即非直接耦合)。結合上述分析該系統應包括以下模塊:選手信息瀏覽,選手信息錄入 ,選手信息保存,選手成績查詢 ,選手信息修改,選手信息刪除 。.專業 .整理 .下載可編輯選手數據 :編號 、姓名 、成績 、平均成績 。歌唱比賽評分系統選選選選選

9、選手手手手手手信信信成信信息息息績息息瀏錄保查修刪覽入存詢改除圖 1.總體結構圖3 程序設計及模塊分工明細3.1人員模塊分工王澤:瀏覽選手數據browse() ;查詢選手成績search() ;查詢選手信息print() 。郭世杰 :菜單函數menu_select();修改函數update();保存函數save()。賀鑫 : 參賽選手信息錄入creat (); 成績排序rank() ;刪除函數del() ;公共模塊 : color() 、 quit() 、welcome() 。3.2人員模塊分工明細瀏覽選手數據browse()分析:實際為鏈表的遍歷 ,將頭節點的指針給予臨時節點p1,用 whi

10、le 語句實現鏈表的遍歷 。.專業 .整理 .下載可編輯START申明指針變量IF (head = NULL & tail = NULL)表頭當前信息記錄為空WHILE p1 != 空輸出選手信息END圖 2.瀏覽選手數據模塊/*- browse函數 -*/void browse ()SONGER_MESSAGE*p1 ;if (head =NULL &tail = NULL)printf (n-當前信息記錄為空 -n);elseprintf (n-你要瀏覽的選手信息如下-n);.專業 .整理 .下載可編輯printf (-|-n);printf (編號 |姓名n );p1 = head ;w

11、hile (p1 != NULL)printf (-|-n);printf (%-9d%-6sn,p1 - num ,p1 - name );p1 =p1 - next ;printf (-|-n);查詢選手成績search()分析 :提供詳細成績查詢,排名查詢的函數調用。其中各功能均采用菜單選擇的方式。.專業 .整理 .下載可編輯START定義變量 c,并賦值SWITCH (c)輸入1輸入2跳轉到詳細成績查詢排名查詢BreakBreakEND圖 3.查詢選手成績/*- search函數 -*/void search ()int c;printf (n請選擇查詢內容 : n );printf

12、(1.選手詳細成績查詢2.選手排名查詢 n請輸入您的選擇 :);scanf(%d ,& c);switch (c)case 1:.專業 .整理 .下載可編輯system (cls);print ();break ;case 2:system (cls);rank ();break ;.專業 .整理 .下載可編輯查詢選手信息print()分析 :實際為輸出鏈表中的某個某個節點,輸出某個選手的編號與姓名較為好實現,輸出 10位評委成績則用的for 語句來實現 。START輸入要查找的選手編號IF head = NULL & tail = NULL當前記錄為空輸出表頭WHILE (p1 != NUL

13、L)IF (p1-num = seeknum)輸出編號姓名指向鏈表的下一個FOR (i=0; i num= seeknum )printf ( %-7d%-6s,p1 - num ,p1 - name );printf ();for (i= 0; i grades i);printf (%-6.2lfn,p1 - ave);check = 1;getchar ();return ;elsep1 = p1 - next ;if (head != NULL &check=0).專業 .整理 .下載可編輯printf (n對不起 ,你查看的選手成績不存在!n);getchar ();.專業 .整理

14、.下載可編輯菜單函數 menu_select()分析 :菜單主函數要求設計比較簡潔,只提供設輸入,處理和輸出部分的函數調用。其中各功能模塊用菜單方式選擇。START定義變量char s100; int c;WHILE (1 )利用 atoi() 函數將所接收的字符串轉換成數值,提供給if 語句判斷IF (c 7)輸入有誤BreakSWITCH (c)1234567default信息瀏覽信息錄入信息保存成績查詢信息修改信息刪除退出系統BreakBreakBreakBreakBreakBreakBreakReturnBreakCodeEND圖 5 菜單模塊/*- menu_select函數-*/v

15、oidmenu_select ()char s 100 ;int c ;.專業 .整理 .下載可編輯gets (s);/ 不管用戶輸入的是數字鍵或是字母鍵使用gets 都能將輸入作為字符串接收while (1)/ 限定用戶輸入的數值必須在1-7 之間才有效 ,否則要求重新輸入c = atoi (s);/ 利用 atoi() 函數將所接收的字符串轉換成數值,提供給 if 語句判斷if (c 7)printf ( 您的輸入有誤,請重新輸入 : );gets (s);else break ;switch (c)case 1:system (cls );/ 清屏browse ();/ 選手信息瀏覽br

16、eak ;case 2:system (cls );.專業 .整理 .下載可編輯creat ();/ 選手信息錄入break ;case 3:system (cls );save();/ 選手信息保存break ;case 4:system (cls );search ();/ 選手成績查詢break ;case 5:system (cls );update ();/ 選手信息修改break ;case 6:system (cls );del ();/ 選手信息刪除break ;case 7:system (cls );quit ();/ 退出系統return ;.專業 .整理 .下載可編輯b

17、reak ;default :break ;getchar ();system (cls );menu ();menu_select ();.專業 .整理 .下載可編輯修改函數 update()分析;實現選手信息的修改 ,核心內容為鏈表的遍歷 。找出要修改的選手 ,修改其個人信息 。START輸入要修改的選手編號:IF (head = NULL & tail = NULL)當前信息記錄為空p1=headWHILE (p1 != NULL)IF (p1-num = updatenum)修改信息p1=p1-next;指向下一個節點ReturnIF (head != NULL & check = 0

18、)選手信息不存在NOgetchar();END圖 6.修改模塊/*- update函數-*/voidupdate ().專業 .整理 .下載可編輯SONGER_MESSAGE *p1 ;/=(SONGER_MESSAGE *)malloc(LEN);int check = 0; / 用來進行判斷 ,是否找到了要修改的信息long updatenum;printf (n請輸入要修改的選手編號:);scanf (%d ,& updatenum);/ 查找到要修改的選手if (head =NULL & tail=NULL )printf (n-當前信息記錄為空-n);elsep1 = head ;w

19、hile (p1 != NULL )if (p1 - num= updatenum)printf (n-你要修改的選手信息如下-n);printf (-|-n);printf (編號|姓名printf (-|-nprintf (%-9d%-6snn););,p1 - num ,p1 - name );.專業 .整理 .下載可編輯printf (-|-n);printf (n-請重新寫入此選手信息:-n);check = 1;/ 從新寫入修改項目printf (n修改選手編號為: );scanf (%d ,& p1 - num );printf (n修改選手姓名為: );scanf (%s ,p

20、1 - name );return ;elsep1 = p1 - next ;if (head != NULL &check=0)printf (n對不起 ,你要修改的選手信息不存在!n);getchar ();.專業 .整理 .下載可編輯保存函數 save()分析:保存文件的流程 。使用 fopen() 函數打開 txt 文件,“w ”參數代表打開只寫文件,再利用 fprintf() 函數寫入選手內容,最后用 fclose ()函數關閉文件。START打開一個文件,并寫入格式數據WHILE (p1 != NULL)向文件寫入 “編號 ”,姓“名 ”關閉文件END圖 7.保存模塊/*- sav

21、e函數-*/voidsave ()/ 將數據保存到文件FILE *fp ;SONGER_MESSAGE *p1 ;/=(SONGER_MESSAGE *)malloc(LEN);p1 = head ;fp = fopen (參賽選手名單.txt ,w );.專業 .整理 .下載可編輯fprintf(fp ,-|-n);fprintf(fp ,編號 |姓名n);while (p1 != NULL )fprintf(fp ,-|-n);fprintf(fp ,%-9d%-6sn,p1 - num ,p1 - name );p1 = p1 - next ;fprintf(fp ,-|-n);fclo

22、se (fp );printf(nt文件已將保存到 參賽選手名單 .txt );參賽選手信息錄入creat ()分析 :錄入信息表現為創建鏈表節點并給節點的元素賦值,然后對評委的分數進行排序(鏈表的排序 ),排序選擇冒泡排序法,最后去掉一個最高分去掉一個最低分。.專業 .整理 .下載可編輯START定義變量int i,j; float t; char c=y;WHILE (c = y | c = Y)錄入選手信息:編號,姓名FOR(i=0; iN; i+)輸入 10 位評委點評成績FOR (i=0; iN-1; i+)FOR (j=0; jgradesjp1-gradesj+1)交換數的位置去

23、掉一個最高分,去掉一個這一低分,得出最后的平均分IF (p1=NULL)內存分配失敗IF (head = NULL & tail = NULL)創建節點如果當前還有節點則插入到尾部選手信息錄入成功是否繼續 (Y/N)END圖 7.參賽選手信息錄入模塊/*- creat函數-*/.專業 .整理 .下載可編輯voidcreat ()int i ,j;floatt ;char c = y ;while (c =y | c =Y)SONGER_MESSAGE * p1 =( SONGER_MESSAGE *)malloc (LEN);printf (n請輸入要錄入的選手信息: n );printf (

24、n選手編號 :);scanf (%d ,& p1 - num );printf (n選手姓名 :);scanf (%s ,p1 - name );printf (n請輸入 10 位評委點評成績: );p1 - ave = 0;for (i= 0; i grades i);/runtime error.專業 .整理 .下載可編輯p1 - ave += p1 - grades i;for (i= 0; i N - 1; i+)/ 冒泡排序法讓那個成績從小到大排列,然后選出最大值是最后一個,最小值是第一個for (j= 0; j grades j p1 - grades j+ 1)t= p1 - g

25、rades j;p1 - grades j= p1 - grades j+ 1;p1 - grades j+ 1= t;p1 - ave=( p1 - ave -( p1 - grades 0+ p1 - grades 9)/ 8;/ 去掉一個最高分,去掉一個這一低分 ,得出最后的平均分p1 - next = NULL ;if (p1 = NULL )printf (n內存分配失敗 n );n= n- 1;.專業 .整理 .下載可編輯if (head =NULL &tail =NULL ) / 當前沒有結點,創建第一個結點head = p1 ;head - next = NULL ;tail

26、= head ;printf (n-選手信息錄入成功-n);else/ 如果當前還有節點則插入到尾部tail - next = p1 ;tail = p1 ;tail - next = NULL ;printf (n-選手信息錄入成功-n);printf (是否繼續 (Y/N): );getchar ();scanf (%c ,& c);成績排序 rank()分析 :用冒泡排序的方法對平均成績(鏈表 )進行排序 。.專業 .整理 .下載可編輯START定義指針變量*p1,*p2,*endpt,*p; p1=head;IF (head = NULL & tail = NULL)當前信息記錄為空為

27、 p1 分配內存, p1-next = head; head = p1;FOR (endpt=NULL; endpt!=head; endpt=p)FOR (p=p1=head; p1-next-next!=endpt; p1=p1-next)IF (p1-next-ave next-next-ave)兩節點的順序交換把 p1 的信息去掉, head 指向排序后的第一個節點釋放 p1 并將 p1 重新指向頭指針WHILE(p1 != NULL)輸出選手排名加上表尾部getchar();END圖 8.成績排序模塊/*- rank函數-*/voidrank ()SONGER_MESSAGE *p1

28、 ,*p2 ,*endpt ,*p;/*endpt/*控制循環比較*/*p/* 臨時指針變量 */n= 0;.專業 .整理 .下載可編輯p1 = head ;if (head =NULL & tail=NULL )printf (n-當前信息記錄為空-n);elsep1 = ( SONGER_MESSAGE *) malloc (LEN);p1 - next = head ;/* 注意理解 :我們增加一個節點,放在第一個節點的前面,主要是為了便于比較。因為第一個節點沒有前驅,我們不能交換地址。 */head = p1 ;/* 讓 head 指向 p1 節點 ,排序完成后 ,我們再把p1 節點釋放掉 */for (endpt = NULL; endpt != head ; endpt = p) /* 結合第 6 點理解 */for (p = p1 = head ; p1 - next - next != endpt ; p1 = p1 - next )if (p1

溫馨提示

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

評論

0/150

提交評論