歌手比赛评分系统程序设计
- 格式:docx
- 大小:1.06 MB
- 文档页数:32
计通学院
课程设计报告
课程名称___高级程序设计语言 __
题目名称___歌唱比赛评分系统_ __
学生学院_ 计通学院_ __ __
专业班级_ 软件181 _
学 号
学生姓名
指导教师_____ __ ____
2019年1月7号 目录
1. 设计目的与要求…………………………………………3
1.1 题目与设计要求……………………………………3
1.2 本程序涉及的知识点………………………………3
2.功能设计………………………………………………3
2.1总体设计……………………………………………3
2.2详细设计……………………………………………4
3. 程序实现……………………………………………27
3.1程序实现时应考虑的问题…………………………27
3.2 XX模块核心代码…………………………………27
4.测试分析……………………………………………32
4.1 测试结果及分析…………………………………32
5. 总结…………………………………………………35
参考文献………………………………………………35
1. 设计目的与要求
1.1题目与设计要求
题目:歌手比赛评分系统
设计要求:有十个选手参加歌唱比赛,十个裁判对每个选手的演唱进行打分,去掉一个最高分,去掉一个最低分,剩下分数的平均值作为每位选手最后的成绩。
功能要求:
(1)采用结构体定义每个选手的参赛编号,姓名以及十个裁判打出的分数;
(2)从键盘输入每个选手的相关信息:参赛编号,姓名和十个得分;
(3)计算每位选手的最后得分,并按分数由高到低排序;
(4)查询功能:输入参赛选手的编号或姓名,便可输出该选手的得分以及排名;
以上功能采用菜单操作方式,即从键盘输入1到3这三个数,分别完成以上(2)到(4)的功能。
1.2本程序设计的知识点
结构体、数组、指针、文件操作。
2.功能设计
2.1总体设计
○1选手信息浏览,○2选手信息录入,○3选手信息保存,○4选手成绩查询,○5选手信息修改,○6选手信息删除,○7选手数据:编号、姓名、成绩、平均成绩。
2.2详细设计
○1浏览选手数据browse()
分析:实际为链表的遍历,将头节点的指针给予临时节点p1,用while语句实现链表的遍历。
void browse()
{
SONGER_MESSAGE *p1;
if(head==NULL&&tail==NULL)
{
printf("\n--------当前信息记录为空--------\n");
}
else
{
printf("\n-----------你要浏览的选手信息如下---------\n");
printf("--------|--------\n");
printf(" 编号 | 姓名 \n"); p1=head; while(p1!=NULL)
{
printf("--------|--------\n");
printf("%-9d%-6s\n",p1->num,p1->name);
p1=p1->next;
}
printf("--------|--------\n");
}
}
○2查询选手成绩search()
分析:提供详细成绩查询,排名查询的函数调用。其中各功能均采用菜单选择的方式。
void search()
{
int c;
printf("\n请选择查询内容:\n");
printf("1.选手详细成绩查询 2.选手排名查询\n请输入您的选择:"); scanf("%d",&c);
switch(c)
{
case1:
system("cls");
print();
break;
case2:
system("cls");
rank();
break;
}
}
○3查询选手信息print()
分析:实际为输出链表中的某个节点,输出某个选手的编号与姓名较为好实现,输出10位评委成绩则用的for语句来实现。
void print()
{
SONGER_MESSAGE *p1=(SONGER_MESSAGE *)malloc(LEN);
int check=0,i;
long seeknum;
printf("\n请输入要查找的选手编号:");
scanf("%d",&seeknum);
if(head==NULL&&tail==NULL )
{
printf("\n对不起,当前记录为空!\n");
}
else
{
p1=head;
printf("\n-----------你要找的选手的成绩如下---------\n");//在这里找到了要查找的选手成绩
printf("------|------|-----|----|----|----|----|----|----|----|----|----|----|----------|--------\n");
printf(" 编号 | 姓名 | 成绩| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 平均成绩\n");
printf("------|------|-----|----|----|----|----|----|----|----|----|----|----|----------|--------\n");
while(p1 != NULL)
{
if(p1->num==seeknum)
{
printf("%-7d%-6s",p1->num,p1->name);
printf(" ");
for(i=0;i
{
printf("%.1f",p1->grades[i]);
}
printf("%-6.2lf\n",p1->ave);
check=1;
getchar();
return;
}
else
{
p1=p1->next;
}
}
}
if(head!=NULL&&check==0)
{
printf("\n对不起,你查看的选手成绩不存在!\n");
} getchar();
}
○4选手信息录入creat()
分析:录入信息表现为创建链表节点并给节点的元素赋值,然后对评委的分数进行排序(链表的排序),排序选择冒泡排序法,最后去掉一个最高分去掉一个最低分。
void creat()
{
int i,j;
float t;
char c='y'; while(c=='y’||c=='Y')
{
SONGER_MESSAGE *p1=(SONGER_MESSAGE *)malloc(LEN);
printf("\n请输入要录入的选手信息:\n");
printf("\n选手编号:");
scanf("%d",&p1->num);
printf("\n选手姓名:");
scanf("%s",p1->name);
printf("\n请输入10位评委点评成绩:");
p1->ave =0;
for(i=0;i
{
scanf("%f",&(p1->grades[i])); //runtime error//
p1->ave+=p1->grades[i];
}
for(i=0; i
//冒泡排序法让那个成绩从小到大排列,然后选出最大值是最后一个,最小值是第一个//
for(j=0;j
if(p1->grades[j]>p1->grades[j+1])
{
t=p1->grades[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=head;
printf("\n------选手信息录入成功------\n");
}
Else //如果当前还有节点则插入到尾部//
{
tail->next=p1;
tail=p1;