歌唱比賽評(píng)分系統(tǒng)設(shè)計(jì)C語言完整版_第1頁
歌唱比賽評(píng)分系統(tǒng)設(shè)計(jì)C語言完整版_第2頁
歌唱比賽評(píng)分系統(tǒng)設(shè)計(jì)C語言完整版_第3頁
歌唱比賽評(píng)分系統(tǒng)設(shè)計(jì)C語言完整版_第4頁
歌唱比賽評(píng)分系統(tǒng)設(shè)計(jì)C語言完整版_第5頁
已閱讀5頁,還剩60頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、軟件設(shè)計(jì)實(shí)踐報(bào)告學(xué) 院: 中北大學(xué)信息商務(wù)學(xué)院 專 業(yè): 通信工程專業(yè) 題 目: 歌唱比賽評(píng)分系統(tǒng) 1305044142 王 澤 學(xué)生姓名: 1305044138 郭世杰 1305044149 賀 鑫 完成時(shí)間: 2016年1月18日 指導(dǎo)教師: 魯旭濤 姚愛琴 李沅 目錄課程設(shè)計(jì)任務(wù)書41需求分析51.1題目分析51.2系統(tǒng)分析52設(shè)計(jì)概要63程序設(shè)計(jì)及模塊分工明細(xì)73.1人員模塊分工73.2人員模塊分工明細(xì)74測(cè)試結(jié)果354.1調(diào)試與測(cè)試354.2測(cè)試結(jié)果截圖36設(shè)計(jì)總結(jié)42致 謝43參考文獻(xiàn)44附錄45課程設(shè)計(jì)任務(wù)書1 設(shè)計(jì)目的C語言是通信工程專業(yè)一門重要的專業(yè)技術(shù)課程,它是一門實(shí)踐性很

2、強(qiáng)的課程。軟件設(shè)計(jì)實(shí)踐課程是為配合c語言課程,對(duì)學(xué)生進(jìn)行全面綜合訓(xùn)練、與課堂教學(xué)、作業(yè)練習(xí)題、上機(jī)實(shí)驗(yàn)相輔的必不可少的一個(gè)教學(xué)環(huán)節(jié)。利用所學(xué)的C語言知識(shí)及其編程方法:結(jié)構(gòu)程序設(shè)計(jì)、數(shù)組、指針、結(jié)構(gòu)體、文件操作等內(nèi)容,通過布置具有一定難度的實(shí)際程序設(shè)計(jì)題目,要求學(xué)生獨(dú)立完成所布置題目。在分析設(shè)計(jì)過程中,要求學(xué)生養(yǎng)成良好的編程習(xí)慣,學(xué)會(huì)分析解決簡單的實(shí)際問題,學(xué)會(huì)C語言的實(shí)際調(diào)試技巧和方法,要求學(xué)生在教師的指導(dǎo)下逐步完成應(yīng)用程序的設(shè)計(jì)2 設(shè)計(jì)內(nèi)容和要求有十個(gè)選手參加歌唱比賽,十個(gè)裁判對(duì)每個(gè)選手的演唱進(jìn)行打分,去掉一個(gè)最高分,去掉一個(gè)最低分,剩下分?jǐn)?shù)的平均值作為每位選手最后的成績。要求:(1)采用結(jié)

3、構(gòu)體定義每個(gè)選手的參賽編號(hào),姓名以及十個(gè)裁判打出的分?jǐn)?shù);(2)從鍵盤輸入每個(gè)選手的相關(guān)信息:參賽編號(hào),姓名和十個(gè)得分;(3)計(jì)算每位選手的最后得分,并按分?jǐn)?shù)由高到低排序;(4)查詢功能:輸入?yún)①愡x手的編號(hào)或姓名,便可輸出該選手的得分以及排名;以上功能采用菜單操作方式,即從鍵盤輸入1到3這三個(gè)數(shù),分別完成以上(2)到(4)的功能。3 設(shè)計(jì)工作任務(wù)及工作量的要求u 每個(gè)組員完成自己的模塊設(shè)計(jì)。u 完成一份設(shè)計(jì)說明書。u 有正確的運(yùn)行結(jié)果及結(jié)果分析1 需求分析1.1 題目分析軟件設(shè)計(jì)實(shí)踐課程是為配合c語言課程,對(duì)學(xué)生進(jìn)行全面綜合訓(xùn)練、與課堂教學(xué)、作業(yè)練習(xí)題、上機(jī)實(shí)驗(yàn)相輔的必不可少的一個(gè)教學(xué)環(huán)節(jié)。利用

4、所學(xué)的C語言知識(shí)及其編程方法:結(jié)構(gòu)程序設(shè)計(jì)、數(shù)組、指針、結(jié)構(gòu)體、文件操作等內(nèi)容,通過布置具有一定難度的實(shí)際程序設(shè)計(jì)題目,要求學(xué)生獨(dú)立完成所布置題目。在分析設(shè)計(jì)過程中,要求學(xué)生養(yǎng)成良好的編程習(xí)慣,學(xué)會(huì)分析解決簡單的實(shí)際問題,學(xué)會(huì)C語言的實(shí)際調(diào)試技巧和方法來解決實(shí)際問題。1.2 系統(tǒng)分析歌唱比賽評(píng)分系統(tǒng)包括:u 菜單:系統(tǒng)以菜單方式工作,界面友好,易于操作。u 錄入:在每個(gè)輸入前都有詳細(xì)分類和提示,簡單明了,根據(jù)提示輸入?yún)①愡x手號(hào)數(shù),姓名,各個(gè)評(píng)委打分成績。u 查詢:用戶輸入查詢條件,系統(tǒng)規(guī)則地在界面顯示查詢結(jié)果,不光可以輸入號(hào)數(shù),查詢到該選手信息,每位評(píng)委打分;還可以選擇排名查詢,顯示的數(shù)據(jù)全面

5、。u 修改:在已有數(shù)據(jù)的基礎(chǔ)上實(shí)現(xiàn)對(duì)每位選手的信息,以及評(píng)分的修改。u 排名:利用冒泡程序?qū)?shù)組進(jìn)行排序,刪除一個(gè)最高與最低然后進(jìn)行講剩下的值平均,得出選手最終得分,再根據(jù)分?jǐn)?shù)高低排名。u 儲(chǔ)存:對(duì)于已經(jīng)輸入的數(shù)據(jù),已文檔的信息儲(chǔ)存到電腦硬盤中,實(shí)現(xiàn)永久儲(chǔ)存。系統(tǒng)的程序設(shè)計(jì)環(huán)境:本系統(tǒng)使用Visual C+ 作為程序開發(fā)工具。Visual C+是基于對(duì)象的快速應(yīng)用程序開發(fā)工具,是當(dāng)今最強(qiáng)大、最靈活的應(yīng)用程序開發(fā)工具之一,具有良好的可視化應(yīng)用程序開發(fā)環(huán)境和強(qiáng)大的可擴(kuò)展數(shù)據(jù)庫功能。利用Visual C+提供的可視化組件庫進(jìn)行編程,可以快速、高效地開發(fā)出基于Windows環(huán)境的各類應(yīng)用程序。Visu

6、al C+語言的特點(diǎn)是面向?qū)ο笤O(shè)計(jì)的程序語言,Visual C+的基礎(chǔ)編程語言是具有面向?qū)ο筇匦缘恼Z言,具有代碼穩(wěn)定、可讀性好、編譯速度快等優(yōu)點(diǎn),并將面向?qū)ο蟮母拍钜浦驳搅薈語言中,使這種基礎(chǔ)語言有了新的發(fā)展空間。與其它編程軟件相比,特別是在數(shù)據(jù)庫和網(wǎng)絡(luò)應(yīng)用方面,Visual C+具有簡便易用、靈活高效的特點(diǎn)。開發(fā)軟件通常要經(jīng)過修改源代碼、編譯、測(cè)試、再修改、再編譯、再測(cè)試等操作,這些操作形成了一個(gè)開發(fā)循環(huán),所以快速的編譯器可以大大地降低開發(fā)周期。Visual C+正是建立在這種高效編譯器的基礎(chǔ)之上,是針對(duì)Windows的最快的高級(jí)語言代碼編譯器,因此生成的代碼十分精練高效,使Visual C

7、+程序的運(yùn)行速度更快。這也是使用Visual C+作為程序設(shè)計(jì)開發(fā)語言的重要原因。2 設(shè)計(jì)概要總體設(shè)計(jì)目標(biāo):使用者可以利用本系統(tǒng)進(jìn)行對(duì)選手信息以及評(píng)委評(píng)分的各項(xiàng)運(yùn)算操作,如根據(jù)需求添加選信息,刪除選手信息,對(duì)選手得分進(jìn)行排名等。最后清晰完整的結(jié)果于屏幕中。方便了評(píng)分操作,不僅節(jié)省時(shí)間,而且提高準(zhǔn)確性,可以達(dá)到事半功倍的效果。總體設(shè)計(jì)策略:本系統(tǒng)采用的是自頂向下、層次化的模塊結(jié)構(gòu)。對(duì)高層模塊,采用以事務(wù)為中心的設(shè)計(jì)策略,把一個(gè)大的模塊逐步分解成較小的相對(duì)簡單的模塊。對(duì)低層模塊,采用以變換為中心的設(shè)計(jì)策略。為了提高每個(gè)模塊的內(nèi)聚性、降低模塊間的耦合性,將每個(gè)模塊設(shè)計(jì)成具有單一功能的模塊(即功能內(nèi)聚

8、),使模塊間的聯(lián)系完全是通過主模塊的控制和調(diào)用來實(shí)現(xiàn)(即非直接耦合)。結(jié)合上述分析該系統(tǒng)應(yīng)包括以下模塊:選手信息瀏覽,選手信息錄入,選手信息保存,選手成績查詢,選手信息修改,選手信息刪除。選手?jǐn)?shù)據(jù):編號(hào)、姓名、成績、平均成績。圖1.總體結(jié)構(gòu)圖3 程序設(shè)計(jì)及模塊分工明細(xì)3.1 人員模塊分工王 澤:瀏覽選手?jǐn)?shù)據(jù)browse();查詢選手成績search();查詢選手信息print()。郭世杰:菜單函數(shù)menu_select(); 修改函數(shù)update(); 保存函數(shù)save()。賀 鑫: 參賽選手信息錄入creat();成績排序rank();刪除函數(shù)del();公共模塊:color()、quit(

9、)、welcome()。3.2 人員模塊分工明細(xì)l 瀏覽選手?jǐn)?shù)據(jù)browse()分析:實(shí)際為鏈表的遍歷,將頭節(jié)點(diǎn)的指針給予臨時(shí)節(jié)點(diǎn)p1,用while語句實(shí)現(xiàn)鏈表的遍歷。STARTEND申明指針變量IF (head = NULL && tail = NULL)當(dāng)前信息記錄為空表頭WHILE p1 !=空輸出選手信息圖2.瀏覽選手?jǐn)?shù)據(jù)模塊/*- browse函數(shù) -*/void browse() SONGER_MESSAGE *p1; if(head = NULL && tail = NULL) printf("n-當(dāng)前信息記錄為空-n"); e

10、lse printf("n-你要瀏覽的選手信息如下-n"); printf("-|-n"); printf(" 編號(hào) | 姓名 n"); p1=head; while(p1 != NULL) printf("-|-n"); printf(" %-9d%-6sn",p1->num,p1->name); p1=p1->next; printf("-|-n"); l 查詢選手成績search()分析:提供詳細(xì)成績查詢,排名查詢的函數(shù)調(diào)用。其中各功能均采用菜單選擇的

11、方式。STARTEND定義變量c,并賦值SWITCH (c)輸入1跳轉(zhuǎn)到詳細(xì)成績查詢Break輸入2排名查詢Break圖3.查詢選手成績/*- search函數(shù)-*/void search() int c; printf("n請(qǐng)選擇查詢內(nèi)容:n"); printf("1.選手詳細(xì)成績查詢 2.選手排名查詢n請(qǐng)輸入您的選擇:"); scanf("%d",&c); switch(c) case 1: system("cls"); print(); break; case 2: system("cls&

12、quot;); rank(); break; l 查詢選手信息print()分析:實(shí)際為輸出鏈表中的某個(gè)某個(gè)節(jié)點(diǎn),輸出某個(gè)選手的編號(hào)與姓名較為好實(shí)現(xiàn),輸出10位評(píng)委成績則用的for語句來實(shí)現(xiàn)。STARTEND輸入要查找的選手編號(hào)IF head = NULL && tail = NULL當(dāng)前記錄為空輸出表頭WHILE (p1 != NULL)IF (p1->num = seeknum)輸出編號(hào)姓名FOR (i=0; i<N; i+)輸出每個(gè)評(píng)委的分?jǐn)?shù)平均分Return指向鏈表的下一個(gè)IF head != NULL && check = 0選手成績不存在

13、Enter圖4.查詢選手信息模塊/*- print函數(shù) -*/void print() SONGER_MESSAGE * p1=(SONGER_MESSAGE *)malloc(LEN); int check=0,i; long seeknum; printf("n請(qǐng)輸入要查找的選手編號(hào):"); scanf("%d",&seeknum); if(head = NULL && tail = NULL ) printf("n對(duì)不起,當(dāng)前記錄為空!n"); else p1=head; printf("n-你

14、要找的選手的成績?nèi)缦?n");/在這里找到了要查找的選手成績 printf("-|-|-|-|-|-|-|-|-|-|-|-|-|-|-n"); printf(" 編號(hào) | 姓名 | 成績| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 平均成績n"); printf("-|-|-|-|-|-|-|-|-|-|-|-|-|-|-n"); while(p1 != NULL) if(p1->num = seeknum) printf(" %-7d%-6s",p1-&g

15、t;num,p1->name); printf(" "); for(i=0; i<N; i+) printf(" %.1f ",p1->gradesi); printf(" %-6.2lfn",p1->ave); check=1; getchar(); return; else p1=p1->next; if(head != NULL && check = 0) printf("n對(duì)不起,你查看的選手成績不存在!n"); getchar();l 菜單函數(shù)menu_sel

16、ect()分析:菜單主函數(shù)要求設(shè)計(jì)比較簡潔,只提供設(shè)輸入,處理和輸出部分的函數(shù)調(diào)用。其中各功能模塊用菜單方式選擇。STARTEND定義變量 char s100; int c; WHILE(1)利用atoi()函數(shù)將所接收的字符串轉(zhuǎn)換成數(shù)值,提供給if語句判斷IF (c < 1 | c >7)輸入有誤BreakSWITCH (c)1信息瀏覽Break2信息錄入Break3信息保存Break4成績查詢Break5信息修改Break6信息刪除Break7退出系統(tǒng)ReturnBreakdefaultBreakCode圖5菜單模塊/*- menu_select函數(shù) -*/void menu_

17、select() char s100; int c; gets(s); /不管用戶輸入的是數(shù)字鍵或是字母鍵使用gets都能將輸入作為字符串接收 while(1) /限定用戶輸入的數(shù)值必須在1-7之間才有效,否則要求重新輸入 c = atoi(s); /利用atoi()函數(shù)將所接收的字符串轉(zhuǎn)換成數(shù)值,提供給if語句判斷 if(c < 1 | c >7) printf("您的輸入有誤,請(qǐng)重新輸入:"); gets(s); else break; switch(c) case 1: system("cls"); /清屏 browse(); /選手信

18、息瀏覽 break; 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

19、7: system("cls"); quit(); /退出系統(tǒng) return; break; default: break; getchar(); system("cls"); menu(); menu_select();l 修改函數(shù)update()分析;實(shí)現(xiàn)選手信息的修改,核心內(nèi)容為鏈表的遍歷。找出要修改的選手,修改其個(gè)人信息。STARTEND輸入要修改的選手編號(hào):IF (head = NULL && tail = NULL)當(dāng)前信息記錄為空p1=headWHILE (p1 != NULL)IF (p1->num = update

20、num)修改信息Returnp1=p1->next;指向下一個(gè)節(jié)點(diǎn)IF (head != NULL && check = 0)選手信息不存在NOgetchar();圖6.修改模塊/*- update函數(shù) -*/void update() SONGER_MESSAGE *p1;/=(SONGER_MESSAGE *)malloc(LEN); int check=0; /用來進(jìn)行判斷,是否找到了要修改的信息 long updatenum; printf("n請(qǐng)輸入要修改的選手編號(hào):"); scanf("%d",&updatenu

21、m);/查找到要修改的選手 if(head = NULL && tail = NULL) printf("n-當(dāng)前信息記錄為空-n"); else p1=head; while(p1 != NULL) if(p1->num = updatenum) printf("n-你要修改的選手信息如下-n"); printf("-|-n"); printf(" 編號(hào) | 姓名 n"); printf("-|-n"); printf(" %-9d%-6sn",p1-

22、>num,p1->name); printf("-|-n"); printf("n-請(qǐng)重新寫入此選手信息:-n"); check=1;/從新寫入修改項(xiàng)目 printf("n修改選手編號(hào)為:"); scanf("%d",&p1->num); printf("n修改選手姓名為:"); scanf("%s",p1->name); return; else p1=p1->next; if(head != NULL && check

23、 = 0) printf("n對(duì)不起,你要修改的選手信息不存在!n"); getchar();l 保存函數(shù)save()分析:保存文件的流程。使用fopen()函數(shù)打開txt文件,“w”參數(shù)代表打開只寫文件,再利用fprintf()函數(shù)寫入選手內(nèi)容,最后用fclose()函數(shù)關(guān)閉文件。STARTEND打開一個(gè)文件,并寫入格式數(shù)據(jù)WHILE (p1 != NULL)向文件寫入“編號(hào)”, “姓名”關(guān)閉文件圖7.保存模塊/*- save函數(shù) -*/void save()/將數(shù)據(jù)保存到文件 FILE *fp; SONGER_MESSAGE *p1;/=(SONGER_MESSAGE

24、*)malloc(LEN); p1=head; fp=fopen("參賽選手名單.txt","w"); fprintf(fp,"-|-n"); fprintf(fp," 編號(hào) | 姓名 n"); while(p1 != NULL) fprintf(fp,"-|-n"); fprintf(fp," %-9d%-6sn",p1->num,p1->name); p1=p1->next; fprintf(fp,"-|-n"); fclose(fp

25、); printf("nt文件已將保存到"參賽選手名單.txt"");l 參賽選手信息錄入creat()分析:錄入信息表現(xiàn)為創(chuàng)建鏈表節(jié)點(diǎn)并給節(jié)點(diǎn)的元素賦值,然后對(duì)評(píng)委的分?jǐn)?shù)進(jìn)行排序(鏈表的排序),排序選擇冒泡排序法,最后去掉一個(gè)最高分去掉一個(gè)最低分。STARTEND定義變量 int i,j; float t; char c='y'WHILE (c = 'y' | c = 'Y')錄入選手信息:編號(hào),姓名FOR(i=0; i<N; i+)輸入10位評(píng)委點(diǎn)評(píng)成績FOR (i=0; i<N-1; i+

26、)FOR (j=0; j<N-1-i; j+)IF (p1->gradesj>p1->gradesj+1)交換數(shù)的位置去掉一個(gè)最高分,去掉一個(gè)這一低分,得出最后的平均分IF (p1=NULL) 內(nèi)存分配失敗IF (head = NULL && tail = NULL)創(chuàng)建節(jié)點(diǎn)選手信息錄入成功如果當(dāng)前還有節(jié)點(diǎn)則插入到尾部是否繼續(xù)(Y/N)圖7.參賽選手信息錄入模塊/*- creat函數(shù) -*/void creat() int i,j; float t; char c='y' while(c = 'y' | c = '

27、Y') SONGER_MESSAGE *p1=(SONGER_MESSAGE *)malloc(LEN); printf("n請(qǐng)輸入要錄入的選手信息:n"); printf("n選手編號(hào):"); scanf("%d",&p1->num); printf("n選手姓名:"); scanf("%s",p1->name); printf("n請(qǐng)輸入10位評(píng)委點(diǎn)評(píng)成績:"); p1->ave = 0; for(i=0; i<N; i+) sca

28、nf("%f",&(p1->gradesi); /runtime error p1->ave += p1->gradesi; for(i=0; i<N-1; i+) /冒泡排序法讓那個(gè)成績從小到大排列,然后選出最大值是最后一個(gè),最小值是第一個(gè) for(j=0; j<N-1-i; j+) if(p1->gradesj>p1->gradesj+1) t=p1->gradesj; p1->gradesj=p1->gradesj+1; p1->gradesj+1=t; p1->ave=(p1-&g

29、t;ave-(p1->grades0+p1->grades9)/8;/去掉一個(gè)最高分,去掉一個(gè)這一低分,得出最后的平均分 p1->next=NULL; if(p1=NULL) printf("n內(nèi)存分配失敗n"); n=n-1; if(head = NULL && tail = NULL) /當(dāng)前沒有結(jié)點(diǎn),創(chuàng)建第一個(gè)結(jié)點(diǎn) head=p1; head->next=NULL; tail=head; printf("n-選手信息錄入成功-n"); else /如果當(dāng)前還有節(jié)點(diǎn)則插入到尾部 tail->next=p1

30、; tail=p1; tail->next=NULL; printf("n-選手信息錄入成功-n"); printf("是否繼續(xù)(Y/N):"); getchar(); scanf("%c",&c); l 成績排序rank()分析:用冒泡排序的方法對(duì)平均成績(鏈表)進(jìn)行排序。STARTEND定義指針變量 *p1,*p2,*endpt,*p; p1=head;IF (head = NULL && tail = NULL)當(dāng)前信息記錄為空為p1分配內(nèi)存,p1->next = head; head = p

31、1;FOR (endpt=NULL; endpt!=head; endpt=p)FOR (p=p1=head; p1->next->next!=endpt; p1=p1->next)IF (p1->next->ave < p1->next->next->ave)兩節(jié)點(diǎn)的順序交換把p1的信息去掉 ,head指向排序后的第一個(gè)節(jié)點(diǎn)釋放p1 并將p1重新指向頭指針WHILE(p1 != NULL)輸出選手排名加上表尾部getchar();圖8.成績排序模塊/*- rank函數(shù) -*/void rank() SONGER_MESSAGE *p1,*

32、p2,*endpt,*p; / *endpt/*控制循環(huán)比較*/ *p/*臨時(shí)指針變量*/ n=0; p1=head; if(head = NULL && tail = NULL) printf("n-當(dāng)前信息記錄為空-n"); else p1 = (SONGER_MESSAGE *)malloc(LEN); p1->next = head; /*注意理解:我們?cè)黾右粋€(gè)節(jié)點(diǎn),放在第一個(gè)節(jié)點(diǎn)的前面,主要是為了便于比較。因?yàn)榈谝粋€(gè)節(jié)點(diǎn)沒有前驅(qū),我們不能交換地址。*/ head = p1; /*讓head指向p1節(jié)點(diǎn),排序完成后,我們?cè)侔裵1節(jié)點(diǎn)釋放掉*/

33、for(endpt=NULL; endpt!=head; endpt=p) /*結(jié)合第6點(diǎn)理解*/ for(p=p1=head; p1->next->next!=endpt; p1=p1->next) if(p1->next->ave < p1->next->next->ave) /*如果前面的節(jié)點(diǎn)鍵值比后面節(jié)點(diǎn)的鍵值小,則交換*/ p2 = p1->next->next; /1、排序后q節(jié)點(diǎn)指向p節(jié)點(diǎn),在調(diào)整指向之前,我們要保存原p的指向節(jié)點(diǎn)地址,即:p2=p1->next->next p1->next-&g

34、t;next = p2->next; /2、順著這一步一步往下推,排序后p1->next->next要指的是p2->next,所以p1->next->next=p2->next p2->next = p1->next; /3、p2->next原是q發(fā)出來的指向,排序后q的指向要變?yōu)橹赶騪的,而原來p1->next是指向p的,所以p2->next=p1->next p1->next = p2; /4、p1->next原是指向p的,排序后圖16中p1->next要指向q,原來p1->next-&g

35、t;next(即p2)是指向q的,所以p1->next=p2 p = p1->next->next; /5、至此,完成了相鄰兩節(jié)點(diǎn)的順序交換 p1 = head; /*把p1的信息去掉*/ head = head->next; /*讓head指向排序后的第一個(gè)節(jié)點(diǎn)*/ free(p1); /*釋放p1*/ printf("n-選手成績排名信息如下-n"); printf("-|-|-|-n"); printf(" 編號(hào) | 姓名 |平均成績| 名次 n"); p1=head; while(p1 != NULL)

36、 printf("-|-|-|-n"); printf(" %-9d%-9s%-9.1lf%-5dn",p1->num,p1->name,p1->ave,n+1); n+; p1=p1->next; printf("-|-|-|-n"); getchar();l 刪除函數(shù)del()分析:節(jié)點(diǎn)的刪除較為繁瑣。第一種情況:數(shù)據(jù)在鏈表頭部,并且只有一個(gè)結(jié)點(diǎn)。第二種情況:數(shù)據(jù)在鏈表頭部 ,頭結(jié)點(diǎn)。第三種情況:數(shù)據(jù)在鏈表中間,中間節(jié)點(diǎn)。第四種情況:數(shù)據(jù)在鏈表尾部,尾部節(jié)點(diǎn)。STARTEND定義變量 , 輸入要?jiǎng)h除的選手的

37、編號(hào)&del_numIF (head = NULL && tail =NULL)信息記錄為空,刪除失敗!node=head; p1=head;WHILE (node != NULL)IF (node->num = del_num) 輸出要?jiǎng)h除的選手信息IF (node = head && head->next = NULL) 刪除唯一的節(jié)點(diǎn)IF (node = head && head->next != NULL)刪除頭節(jié)點(diǎn)IF (node ->next != NULL)中間節(jié)點(diǎn)刪除成功IF if(node->

38、;next = NULL)刪除尾節(jié)點(diǎn)getchar();Returnp1=node; node=node->next;IF (head != NULL && check = 0)要?jiǎng)h除的選手信息不存在!圖9.刪除模塊/*- del函數(shù) -*/void del() SONGER_MESSAGE *node;/=(SONGER_MESSAGE *)malloc(LEN); SONGER_MESSAGE *p1; int check=0; /用來進(jìn)行判斷,是否找到了要?jiǎng)h除的信息 long del_num; printf("n請(qǐng)輸入要?jiǎng)h除的選手的編號(hào):");

39、scanf("%d",&del_num); if(head = NULL && tail =NULL) printf("n當(dāng)前信息記錄為空,刪除失敗!n"); else node=head; p1=head; while(node != NULL) if(node->num = del_num) printf("n-要?jiǎng)h除的選手信息-n"); printf("-|-n"); printf(" 編號(hào) | 姓名 n"); printf("-|-n")

40、; printf(" %-9d%-6sn",node->num,node->name); /在這里找到了要?jiǎng)h除的選手信息 printf("-|-n"); check=1; /找到要?jiǎng)h除的信息,賦為真 if(node = head && head->next = NULL) /是頭結(jié)點(diǎn),并且只有一個(gè)結(jié)點(diǎn) head=NULL; tail=head; free(node); printf("n-刪除信息成功-n"); /刪除唯一的節(jié)點(diǎn) else if(node = head && head-

41、>next != NULL) /刪除頭節(jié)點(diǎn) node=head; head=head->next; free(node); printf("n-刪除信息成功-n"); /頭節(jié)點(diǎn)刪除成功 n=n-1; else if(node ->next != NULL) /刪除中間節(jié)點(diǎn) p1->next=node->next; free(node); printf("n-刪除信息成功-n"); /中間節(jié)點(diǎn)刪除成功 n=n-1; else if(node->next = NULL) /刪除尾節(jié)點(diǎn) p1->next=NULL; tail=p1; free(node); printf("n-刪除信息成功-n"); /尾節(jié)點(diǎn)刪除成功 n=n-1; getchar(); return; else p1=node; node=node->next; if(head != NULL && check = 0) printf("n對(duì)不起,你要?jiǎng)h除的選手信息不存在!n"); getchar();u 公共模塊l 顏色控制函數(shù)color()分析:為了使程序看起來更美觀,所以引入windows api來控

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論