歌手評分系統(tǒng)(完整的C語言設(shè)計流程包含源程序)_第1頁
歌手評分系統(tǒng)(完整的C語言設(shè)計流程包含源程序)_第2頁
歌手評分系統(tǒng)(完整的C語言設(shè)計流程包含源程序)_第3頁
歌手評分系統(tǒng)(完整的C語言設(shè)計流程包含源程序)_第4頁
歌手評分系統(tǒng)(完整的C語言設(shè)計流程包含源程序)_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、*C語言課程實踐報告 題目:歌手評分系統(tǒng) 學(xué)院:計算機工程學(xué)院 班級:*指導(dǎo)教師:* 學(xué)生姓名*同組人: *組長:*完成日期:*年*月* 目 錄1 引言2 系統(tǒng)設(shè)計2.1設(shè)計分析2.1.1 項目描述2.2程序結(jié)構(gòu)(畫流程圖)2.2.1 程序劃分2.2.2 程序結(jié)構(gòu)流程圖3 系統(tǒng)實現(xiàn)3.1各模塊的功能及程序說明3.2 系統(tǒng)主要功能模塊的運行效果圖(截圖)4 設(shè)計體會(結(jié)論)5 參考文獻附錄A:系統(tǒng)完整源程序(組長給出) (注:正文內(nèi)容宋體、五號)第一章 引言C語言是一門計算機高級語言,它在Microsoft開發(fā)的軟件Visual C+ 6.0中執(zhí)行,C語言具有很多優(yōu)點:1.C語言具有豐富的數(shù)據(jù)類

2、型,眾多的運算符,體現(xiàn)結(jié)構(gòu)化程序設(shè)計的優(yōu)良控制結(jié)構(gòu), 具有抽象功能及體現(xiàn)信息隱蔽思想的函數(shù)。2.C語言的應(yīng)用幾乎遍及了程序的各個領(lǐng)域,如科學(xué)家,系統(tǒng)程序設(shè)計,字處理軟件和電子表格軟件的開發(fā),信息管理,計算機輔助設(shè)計,等方面。3.C語言簡潔,為完成某一功能所寫的源程序代碼往往比其他語言寫得短,便利程序輸入工作量減少。4.若程序員在書寫過程時嚴格遵循ANSI C標準,則其源代碼可不作修改,即可用于各種型號的計算機和各種操作系統(tǒng),因此,C語言具有良好的可移植性。 本次實踐我們選擇了使用C語言編寫基于鏈表的程序,不僅使大家對程序設(shè)計、編程方法有了進一步提高,而且掌握了使用C語言動態(tài)內(nèi)存分配及數(shù)據(jù)結(jié)構(gòu)等

3、方面的知識。第二章 系統(tǒng)設(shè)計2.1系統(tǒng)設(shè)計2.1設(shè)計分析2.1.1 項目描述1項目名稱:歌手打分系統(tǒng)2.功能描述:(1)生成字符界面的功能菜單* 1.輸入歌手成績 * 2.插入新歌手 * 3.刪除退賽歌手 * 4.歌手成績排名 * 5.輸出歌手分數(shù) * 6.輸出歌手排名 * 7.退出系統(tǒng) *(2)通過輸入菜單項的序號啟動相應(yīng)模塊的功能 能夠根據(jù)輸入的選手人數(shù)創(chuàng)建鏈表; 錄入9名評委給選手的打分,并存儲到文件singerOriginal.dat中; 按照去掉一個最高分和去掉一個最低分的原則求每名選手的平均分; 按平均分由高到低的順序?qū)x手進行排序; 把排名后的數(shù)據(jù)存儲到文件singerFianl

4、.dat中; 把原始數(shù)據(jù)和最終的結(jié)果輸出到屏幕; 在第步中保存singerOriginal.dat文件之前,可根據(jù)情況修改數(shù)據(jù),例如:插入或刪除歌手。2.2 程序結(jié)構(gòu)2.2.1程序劃分將歌手打分系統(tǒng)程序進行系統(tǒng)模塊劃分,共分為九部分,分別是:1.定義結(jié)構(gòu)體2.創(chuàng)建鏈表函數(shù)3.輸入數(shù)據(jù)函數(shù)4.計算函數(shù)5.排序函數(shù)6.輸出數(shù)據(jù)函數(shù)7.輸出最終數(shù)據(jù)8.刪除函數(shù)9.插入函數(shù)10.主函數(shù)2.2.2 程序結(jié)構(gòu)流程圖main輸出數(shù)據(jù)存儲數(shù)據(jù)排序求平均分得分維護得分錄入創(chuàng)建鏈表輸入成績第三章 系統(tǒng)實現(xiàn)3.1 各模塊的功能及程序說明創(chuàng)建鏈表:使用尾插法插入數(shù)據(jù);輸入選手信息:包括選手信息的輸入,選手成績的輸入,

5、去掉一個最高分和最低分,并將其余評委的評分求出平均值。輸出選手排名:包括選手成績排名。刪除和插入選手信息:將退賽選手和新參加的比賽的選手進行刪除和插入。主函數(shù):將所有函數(shù)實現(xiàn)。3.2 系統(tǒng)主要功能模塊的運行效果圖程序的運行效果圖: 第四章 設(shè)計體會在本次的C語言實踐中,讓我們受益匪淺,通過本次的實踐,讓我們更深入的了解了C語言這門計算機語言,也明白了軟件開發(fā)的相關(guān)流程和基本步驟,也明白了團隊精神的重要性,一項工作如果是靠一個人的力量是遠遠不夠的。雖然在設(shè)計軟件中遇到了很多問題,我們所有組員通力合作,積極討論,翻閱資料,最終完成了這次實踐,也許我們的程序還存在些許問題,也許還不完美,但是我相信在

6、以后的學(xué)習(xí)中我們會繼續(xù)改進的。也希望老師可以給我們提出您的寶貴意見。第五章 程序源代碼/* 創(chuàng)建鏈表* */#include<stdio.h>#include<stdlib.h>typedef struct Singer char name20;int number; /編號char sex;float score9;/打分(九名評委)float average;/平均分struct Singer *next;/指向下一個元素的指針 SINGER; SINGER* CreateLink(int number)SINGER *head;/頭節(jié)點SINGER *tail;/

7、尾節(jié)點SINGER *NewNode=NULL;/創(chuàng)建新的節(jié)點FILE *fp;int n;/循環(huán)用head=(SINGER *)malloc(sizeof(SINGER);/動態(tài)內(nèi)存分配head->next=NULL;tail=head;/用頭節(jié)點給尾節(jié)點賦值fp=fopen("singerOriginal.dat","wb");for(n=0;n<number;n+)/創(chuàng)建鏈表,number為用戶輸入的歌手個數(shù)NewNode=(SINGER *)malloc(sizeof(SINGER);/為新節(jié)點動態(tài)分配內(nèi)存NewNode->ne

8、xt=NULL;tail->next=NewNode;/將新節(jié)點插入隊尾tail=NewNode;/更新尾節(jié)點位置fwrite(NewNode,sizeof(SINGER),1,fp);NewNode=NULL;/NewNode指針指向空,防止誤操作fclose(fp);return head;/返回頭指針/*輸入數(shù)據(jù)函數(shù)InputData()*/void InputData(SINGER *s)FILE *fp;int n;/評委打分循環(huán)用int m;/記第m名選手用SINGER *h=s->next;/定義新的頭指針,以免原頭指針移動m=1;fp=fopen("sin

9、gerOriginal.dat","wb");while(1)if(h=NULL)/只有鏈表結(jié)束時才結(jié)束本函數(shù)return;printf("請輸入第%d個選手的信息:n",m);printf("請輸入姓名:");scanf("%s",h->name);printf("請輸入編號:");scanf("%d",&(h->number);getchar();printf("請輸入成績:n");for(n=0;n<9;n+)pr

10、intf("請輸入第%d個評委的打分:",n+1);scanf("%f",&(h->scoren);printf("*n");printf("*n");h=h->next;/移動指針m+;fwrite(s,sizeof(SINGER),1,fp);fclose(fp);/*計算函數(shù)CalculateData()*/void CalculateData(SINGER *s)int n;/循環(huán)用float min;/記錄最小值float max;/記錄最大值SINGER *h=s->next;

11、/定義新的頭指針,以免原頭指針移動while(1)if(h=NULL)/只有鏈表結(jié)束時才結(jié)束本函數(shù)return;max=h->score0;/初始化maxmin=max;/初始化minh->average=0;/初始化averagefor(n=0;n<9;n+)/求出最大值,最小值if(h->scoren>max)max=h->scoren;if(h->scoren<min)min=h->scoren;for(n=0;n<9;n+)/計算總分(h->average)+=(h->scoren);h->average=(

12、float)(h->average-max-min)/7.0);/計算平均分h=h->next;/*排序函數(shù)SortData()*/void SortData(SINGER *s,int number)SINGER *head,*tail;/定義頭尾節(jié)點指針SINGER *p,*p1,*p2,*p3;/定義四個指針,其中p為尋找尾節(jié)點用,p1,p2,p3為排序用int n;/循環(huán)用tail=(SINGER *)malloc(sizeof(SINGER);/尾尾節(jié)點分配空間head=s;/為head賦值p=s->next;/初始化pwhile(p->next!=NULL)

13、/p找尾節(jié)點p=p->next;p->next=tail;/找到后尾節(jié)點的next存tailtail->next=NULL;/tail中的next存空,防止出錯for(n=0;n<number-1;n+)/循環(huán)number-1次,排序p3=head;/為p3初始化到頭節(jié)點p1=p3->next;/為p1初始化到頭節(jié)點的下一個p2=p1->next;/為p2初始化到p1的下一個while(p2!=tail)/p2未到底后if(p1->average)<(p2->average)/交換p1->next=p2->next;p2->

14、;next=p1;p3->next=p2;p3=p2;p2=p1->next;elsep3=p1;p1=p2;p2=p2->next;p=s->next;while(p->next!=tail)/將p重新定義到尾p=p->next;p->next=NULL;/next存空,防出錯/*輸出數(shù)據(jù)源函數(shù)OutputSource()*/void OutputSource(SINGER *s)SINGER *h=s->next;/定義新的頭指針,以免原頭指針移動int n;/循環(huán)用printf("下面輸出原始成績:n");printf(

15、"選手編號 姓名 評委打分n");while(1)if(h=NULL)return;printf(" %d %s ",h->number,h->name);for(n=0;n<9;n+)printf("%.3f ",h->scoren);printf("n");h=h->next;/移動指針/*輸出最終數(shù)據(jù)OutputFinal()*/void OutputFinal(SINGER *s)FILE *fp;SINGER *h=s->next;/定義新的頭指針,以免原頭指針移動in

16、t n=1;/排名用printf("下面輸出最終成績:n");printf("名次 選手編號 姓名 得分 n");fopen("singerFinal.dat","wb");while(1)if(h=NULL)return;printf(" %d %d %s %.3f",n,h->number,h->name,h->average);n+;printf("n");h=h->next;fclose(fp);/*刪除數(shù)據(jù)Delete()*/SINGER*

17、Delete(SINGER *s)int SN;/刪除用SINGER *p1=NULL;/存空SINGER *p2=NULL;/存空p1=s->next;printf("請輸入您想刪除的歌手的編號");scanf("%d",&SN);/讀入想刪除的編號while(SN!=p1->number&&p1->next!=NULL)/p1中的number不為SNp2=p1;/移動p1=p1->next;/移動if(p1->number=SN)if(p1=s->next)/當(dāng)要改數(shù)據(jù)為頭節(jié)點時s=p1;/

18、更新頭節(jié)點p1=NULL;/防止誤操作elsep2->next=p1->next;free(p1);return s;elseprintf("無此名歌手!n");return s;/返回頭指針/*插入數(shù)據(jù)insert()*/void insert(SINGER *head,SINGER *p)SINGER *s = (SINGER*)malloc(sizeof(SINGER);for(s=head;s->next!=NULL;)s=s->next;s->next=p;p->next=NULL;/*主函數(shù)main()*/int main(v

19、oid)SINGER *head;/頭指針int SingerNumber;/學(xué)生人數(shù)int instruct;/輸入指令用int n;printf("*n");printf("*n");printf("歌手評分系統(tǒng)n");printf("nn");printf("下面開始創(chuàng)建歌手信息n");printf("請輸入歌手人數(shù):");scanf("%d",&SingerNumber);head=CreateLink(SingerNumber);/調(diào)用創(chuàng)

20、建鏈表函數(shù)printf("下面請輸入歌手信息n");InputData(head);/調(diào)用輸入函數(shù)OutputSource(head);/調(diào)用輸出源數(shù)據(jù)函數(shù)printf("*n");printf("*n");printf("請輸入操作指令:n");while(1)printf("插入個人信息請按:“1”n");printf("刪除個人信息請按:“2”n");printf("計算成績請按: “3”n");printf("計算排名請按: “4”n&q

21、uot;);printf("輸出最終成績請按:“5”n");printf("退出請按: “6”n");printf("請輸入操作指令:");scanf("%d",&instruct);/錄入指令if(instruct=1)/指令1SINGER * p = (SINGER*)malloc(sizeof(SINGER);printf("請輸入要插入的歌手的信息");printf("請輸入姓名:");scanf("%s",p->name);printf("請輸入編號:");scanf("%d",&(p->number);getchar();insert(head,p);/調(diào)用插入函數(shù)SingerNumber+;printf("請輸入成績:n");for(n=0;n<9;n+)printf("請輸入第%d個評委的打分:",n+1);scanf("%f",&(p->scoren);printf("插入

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論