沈 阳 航 空 航 天 大 学
课程设计
学 号 __2009041101034__
班 级 ____94110102_____
姓 名 __ 刘建生 __
指导教师 __ 徐 晗__
2011年 6月 18日
沈阳航空航天大学
课程设计任务书
系:材料科学与
学院 专业:金属材料工程
班级:94110102 学号:2009041101034 题目:唱歌比赛系统
一、课程设计时间
2010~11第2学期第15周,即6月13日~6月17日,共计1周,20学时。
二、课程设计内容
用C语言编写软件,模拟唱歌比赛评分系统,用户界面中的菜单至少应包括“读取并显示选手名单,”表演与评分“打印最后程序,退出,4项,参赛3名选手名称和出场顺序存放在文件file22.txt中,评委共有7个,每当一个选手表演后,7个评委都分别评分0-10分,而选手的最终得分计算规则为:去掉7个评分的最高分和最低分,取剩下5个的平均值,程序最后打印出3位选手的成绩三、课程设计要求
1. 程序质量:
● 贯彻结构化的程序设计思想。
● 用户界面友好,功能明确,操作方便。
● 用户界面中的菜单至少应包括“读取并显示选手名单”、“表演与评分”、“打印最后成绩”、“退出”4项。
● 代码应适当缩进,并给出必要的注释,以增强程序的可读性。
2. 课程设计
:
课程结束后,上交课程设计说明书和源程序。课程设计说明书的格式和内容参见提供的
。
四、指导教师和学生签字
指导教师:________ 学生签名:________
五、成绩
六、教师评语
目录
一、需求分析 1
二、设计分析 2
三、主要界面截图 9
四、技术要点 10
五、个人总结 12
六、参考文献 12
七、源程序 12
一、需求分析
对程序设计题目的分析可知,整个程序的设计实现大致分为三个模块,其中每一个模块对应一个函数,功能分别是:读取并显示选手名单(duqubingxianshixuanshou),表演与评分(biaoyanyupingfen),打印最后成绩(dayinzuihouchengji)。
1、读取并显示选手名单(duqubingxianshixuanshou)主要是读取选手名单的原始数据存在D盘file22中;
2、表演与评分(biaoyanyupingfen)主要显示评委评分功能;
3、打印最后成绩(dayinzuihouchengji)主要是输出评委打出的分数。
二、设计分析
1、程序总体结构图
2
1
2、读取选手名单
结束
3、显示选手名单
结束
4、评委评分
6
8
结束
三、主要界面截图
四、技术要点
本程序主要由三个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。在这些函数当中,添加及输入数据函数是程序中较核心部分。下面进行关键技术说明:
1、结构体的应用
结构体可以将不同类型的数据组合成一个有机的整体以便于应用。888结构体中包括参赛选手的名字,得分。具体定义如下:
typedef struct competitor{
char name[20]; //名字
int order; //顺序
float score;
}competitor;
2、文件操作
包括写入和读出,此处只有读出,如下:
(fp=fopen("file22.txt","r")打开文件
fclose(fp)关闭文件
3求总分和平均分
评委打分,累加分数为总分,求平均分时,首先要找到最高分和最低分,去掉之后再求。例如:
for(j=1;j<7;j++){ //查找最高分和最低分
if(min>score[j])min=score[j];
if(max
#include
typedef struct competitor{
char name[20]; //名字
int order; //顺序
float score;
}competitor;
competitor compet[3]; //用来存储3个参赛者的信息
void readFile(){
FILE *fp;
int i=0;
int order;
if((fp=fopen("file22.txt","r"))==NULL){ //打开选手文件
printf("打开选手信息文件失败!");
exit(0);
}
//读取3个选手信息到 compet[3] 中
for(i=0;i<3;i++){
fscanf(fp,"%d",&order);
fscanf(fp,"%s",&compet[order-1].name);
compet[order-1].order=order;
}
fclose(fp);
}
void menu(){
printf("按‘1’读取并显示选手名单\n");
printf("按‘2’表演与评分\n");
printf("按‘3’打印最后成绩\n");
printf("按‘4’退出\n");
printf("请选择操作:");
}
void printCompetitorInf(){
int i=0;
printf("\n\t选手名称\t出场顺序\t\n");
for(i=0;i<3;i++){
printf("\t%s\t %d\t\n",compet[i].name,compet[i].order);
}
printf("\n\n");
}
void performAndGrade(){
int i=0,j=0;
float min,max;
float score[7];
printf("\n\t\t选手们开始比赛了\n");
for(i=0;i<3;i++){
printf("第%d号选手%s完成了比赛,请裁判给予评分\n",compet[i].order,compet[i].name);
for(j=0;j<7;j++){
printf("第%d个裁判评分:",j+1);
scanf("%f",&score[j]);
if(score[j]<0||score[j]>10){
printf("第%d个裁判评分不合法,请重新输入\n",j+1);
j--;
}
}
min=score[0];
max=score[0];
for(j=1;j<7;j++){ //查找最高分和最低分
if(min>score[j])min=score[j];
if(max