《C語(yǔ)言課程設(shè)計(jì) 歌手比賽系統(tǒng)》由會(huì)員分享,可在線閱讀,更多相關(guān)《C語(yǔ)言課程設(shè)計(jì) 歌手比賽系統(tǒng)(13頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、
XXXXXXXXXXXX
本 科 課 程 設(shè) 計(jì)
課程:C語(yǔ)言程序設(shè)計(jì)
題目:歌手比賽系統(tǒng)
學(xué)院:XXXXXXXXXXXXXXXXXX
專業(yè)班級(jí):XXXXXXX
學(xué)號(hào):XXXXXXXX
學(xué)生姓名:XXXXXXX
合作人:XXXXXXXXXXXX
指導(dǎo)教師:XXXXXX
2、
2011年10月15日
目錄
1、引言
2、系統(tǒng)設(shè)計(jì)
2.1、設(shè)計(jì)分析
2.1.1、項(xiàng)目描述
2.2、程序結(jié)構(gòu)
2.2.1、程序劃分
2.2.2、程序結(jié)構(gòu)流程圖
3、系統(tǒng)實(shí)現(xiàn)
3.1、各模塊的功能及程序說(shuō)明
3.2、系統(tǒng)各模塊的運(yùn)行效果圖
4、設(shè)計(jì)體會(huì)
5、參考文獻(xiàn)
6、系統(tǒng)完整源程序
引言
C語(yǔ)言是一門(mén)計(jì)算機(jī)高級(jí)語(yǔ)言,它在Microsoft開(kāi)發(fā)的
3、軟件Visual C++ 6.0中執(zhí)行,C語(yǔ)言具有很多優(yōu)點(diǎn):
1.C語(yǔ)言具有豐富的數(shù)據(jù)類(lèi)型,眾多的運(yùn)算符,體現(xiàn)結(jié)構(gòu)化程序設(shè)計(jì)的優(yōu)良控制結(jié)構(gòu),具有抽象功能及體現(xiàn)信息隱蔽思想的函數(shù)。
2.C語(yǔ)言的應(yīng)用幾乎遍及了程序的各個(gè)領(lǐng)域,如科學(xué)家,系統(tǒng)程序設(shè)計(jì),字處理軟件和電子表格軟件的開(kāi)發(fā),信息管理,計(jì)算機(jī)輔助設(shè)計(jì),等方面。
3.C語(yǔ)言簡(jiǎn)潔,為完成某一功能所寫(xiě)的源程序代碼往往比其他語(yǔ)言寫(xiě)得短,便利程序輸入工作量減少。
4.若程序員在書(shū)寫(xiě)過(guò)程時(shí)嚴(yán)格遵循ANSI C標(biāo)準(zhǔn),則其源代碼可不作修改,即可用于各種型號(hào)的計(jì)算機(jī)和各種操作系統(tǒng),因此,C語(yǔ)言具有良好的可移植性。
本次實(shí)踐我們選擇了使用
4、C語(yǔ)言編寫(xiě)基于鏈表的程序,不僅使大家對(duì)程序設(shè)計(jì)、編程方法有了進(jìn)一步提高,而且掌握了使用C語(yǔ)言動(dòng)態(tài)內(nèi)存分配及數(shù)據(jù)結(jié)構(gòu)等方面的知識(shí)。
一、系統(tǒng)設(shè)計(jì)
2.1設(shè)計(jì)分析
2.1.1 項(xiàng)目描述
1.項(xiàng)目名稱:歌手打分系統(tǒng)
2.功能描述:
(1)生成字符界面的功能菜單
**************************************
* 1.輸入歌手成績(jī) *
* 2.插入新歌手 *
* 3.刪除退賽歌手
5、 *
* 4.歌手成績(jī)排名 *
* 5.輸出歌手分?jǐn)?shù) *
* 6.輸出歌手排名 *
* 7.退出系統(tǒng) *
**************************************
(2)通過(guò)輸入菜單項(xiàng)的序號(hào)啟動(dòng)相應(yīng)模塊的功能
① 能夠根據(jù)輸入的選手人數(shù)創(chuàng)建鏈表;
② 錄入9名評(píng)委給選手的打分,并存儲(chǔ)到文件singerOriginal.dat中;
③ 按照去掉一個(gè)最高分和去掉一個(gè)最低分的原則求每名選手
6、的平均分;
④ 按平均分由高到低的順序?qū)x手進(jìn)行排序;
⑤ 把排名后的數(shù)據(jù)存儲(chǔ)到文件singerFianl.dat中;
⑥ 把原始數(shù)據(jù)和最終的結(jié)果輸出到屏幕;
⑦ 在第②步中保存singerOriginal.dat文件之前,可根據(jù)情況修改數(shù)據(jù),例如:插入或刪除歌手。
2.2 程序結(jié)構(gòu)
2.2.1程序劃分
將歌手打分系統(tǒng)程序進(jìn)行系統(tǒng)模塊劃分,共分為九部分,分別是:
1.定義結(jié)構(gòu)體
2.創(chuàng)建鏈表函數(shù)
3.輸入數(shù)據(jù)函數(shù)
4.計(jì)算函數(shù)
5.排序函數(shù)
6.輸出數(shù)據(jù)函數(shù)
7.輸出最終數(shù)據(jù)
8.刪除函數(shù)
9.插入函數(shù)
10.主函數(shù)
2.2.2 程序結(jié)構(gòu)流程圖
mai
7、n
輸出數(shù)據(jù)
存儲(chǔ)數(shù)據(jù)
排序
求平均分
得分維護(hù)
得分錄入
創(chuàng)建鏈表
輸入成績(jī)
三、系統(tǒng)實(shí)現(xiàn)
3.1 各模塊的功能及程序說(shuō)明
創(chuàng)建鏈表:使用尾插法插入數(shù)據(jù);
輸入選手信息:包括選手信息的輸入,選手成績(jī)的輸入,去掉一個(gè)最高分和最低分,并將其余評(píng)委的評(píng)分求出平均值。
輸出選手排名:包括選手成績(jī)排名。
刪除和插入選手信息:將退賽選手和新參加的比賽的選手進(jìn)行刪除和插入。
主函數(shù):將所有函數(shù)實(shí)現(xiàn)。
3.2 系統(tǒng)主要功能模塊的運(yùn)行效果圖
程序的運(yùn)行效果圖:
8、
四、設(shè)計(jì)體會(huì)
在本次的C語(yǔ)言實(shí)踐中,讓我們受益匪淺,通過(guò)本次的實(shí)踐,讓我們更深入的了解了C語(yǔ)言這門(mén)計(jì)算機(jī)語(yǔ)言,也明白了軟件開(kāi)發(fā)的相關(guān)流程和基本步驟,也明白了團(tuán)隊(duì)精神的重要性,一項(xiàng)工作如果是靠一個(gè)人的力量是遠(yuǎn)遠(yuǎn)不夠的。雖然在設(shè)計(jì)軟件中遇到了很多問(wèn)題,我們所有組員通力合作,積極討論,翻閱資料,最終完成了這次實(shí)踐,也許我們的程序還存在些許問(wèn)題,也許還不完美,但是我相信在以后的學(xué)習(xí)中我們會(huì)繼續(xù)改進(jìn)的。也希望老師可以給我們提出您的寶貴意見(jiàn)。
五、參考文獻(xiàn)
編程入門(mén)網(wǎng):
六、源程序代碼
#include
#include
9、>
#include
#include
#define N 3
#define M 10
int add = N-1;
int sum[N]={0},Max[N],Min[N];
float aver[N]={0};
struct player
{int num;
char name[8];
int score[M];
};
void Inistplayer(struct player a[],int n)
{int i;
for(i=0;i
10、;
}
void Inputscore(int score[],int n)
{int i;
for(i=0;ib[j]) k=j;
if(k!=i)
{temp=b[i];
b[i]=b[k];
11、
b[k]=temp;
strcpy(str,a[i].name);
strcpy(a[i].name,a[k].name);
strcpy(a[k].name,str);
t=a[i].num;
a[i].num=a[k].num;
a[k].num=t;
}
}
}
void main()
{int flag=1,n,i,m,j;
FILE *fp;
fp = fopen("data.txt","w+");
struct player a[20];
printf("**********1.輸入選手?jǐn)?shù)據(jù)***********\n");
printf("****
12、******2.評(píng)委打分***************\n");
printf("**********3.成績(jī)排序***************\n");
printf("**********4.數(shù)據(jù)查詢***************\n");
printf("**********5.追加學(xué)生數(shù)據(jù)***********\n");
printf("**********6.寫(xiě)入數(shù)據(jù)文件***********\n");
printf("**********7.退出系統(tǒng)***************\n");
while(flag)
{printf("你想進(jìn)行的操作:");
scanf
13、("%d",&n);
switch(n)
{
case 1:Inistplayer(a,N);break;
case 2:srand((unsigned)time(NULL));
for(i=0;i
14、 break;
case 3:for(i=0;ia[i].score[j]) Min[i]=a[i].score[j];
}
15、 aver[i]=(float)(sum[i]-Max[i]-Min[i])/(M-2);
}
sort(a,aver,N);
for(i=0;i
16、 printf("%d號(hào)選手%s總分:%d,最高分%d,最低分%d,平均分%5.2f",a[i].num,a[i].name,sum[i],Max[i],Min[i],aver[i]);
printf("\n");
}
break;
case 5:printf("請(qǐng)輸入要追加的選手?jǐn)?shù)據(jù):\n");
add += 1;
scanf("%d %s",&a[add].num,&a[add].name);
break;
case 6:printf("將數(shù)據(jù)寫(xiě)入文件中:\n");
for (i = 0 ; i < add+1 ; i++)
{
fprintf(fp,"%d ",a[i].num);
fprintf(fp,"%s ",a[i].name);
fprintf(fp,"%d\n",a[i].score);
}
break;
case 7:exit(0);
break;
default:flag=0;
}
}
}