一、题目要求
1.题目描述 从100名优秀运动员中评选出10名最佳运动员。具体规则如下。 (1)运动员号按1、2、3…..顺序编号; (2)由键盘接受所收到的选票,每张选票至多可写10个不同的编号; (3)对应名次的运动员编号可以有空缺,但必须用0表示; (4)若编号超出规定的范围,或编号出现重复,作废选票; (5)按选票中所列最佳运动员顺序给他们计分,计分标准如下:从第1名至第10名所得分数依次为:15,12,9,7,6,5,4,3,2,1; (6)按各运动员所得分数高低进行排队,列出前十名最佳运动员排名,格式为: 名次 运动员编号 合计得分 合计得票数 如果得分相同,则得票多者在前,如果得分与票数都相同,则编号小的在前。 要求每个功能模块用一个函数实现。 2.设计提示 (1)评选过程分为3个步骤:输入选票、读取选票及选票检查(即看是否为废票)、有效票统计。 (2)程序功能由4个函数完成。 Main()主函数:调用input()函数输入选票,再调用check()函数进行废票检查,调用count()函数进行统计得分与排名,最后输出总选票数、有效票数和前十名运动员的排行榜。 input()函数:将所有选票全部录入到文件vote.txt中,可以用运动员编号为 -1来标识每张选票的结束。 check()函数: 从文件vote.txt中读取选票信息,对每张选票进行检查,看是否有效,对出现编号重复或编号超出范围则作废处理,不予登记; count()函数:统计总选票数和有效票的数量;统计每个运动员的总得票数和总分,然后排出名次;
二、源代码
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#define N 100
#define zifu0 " ********* \n "
#define zifu1 "**************************************************\n"
#define zifu2 "| 名次 | 学生编号 | 合计得分 | 合计得票数 |\n"
#define zifu3 "***********************************************\n"
#define zifu4 " ********* \n"
#define zifu5 " 请选择你的操作【1-3】\n\n"
#define zifu6 " ***** \n"
#define zifu7 " ********* \n\n"
#define zifu8 " ********* \n"
#define zifu9 " ***** \n"
#define zifu10 " 1.打开输入表格\n\n"
#define zifu11 " 2.打开显示结果\n\n"
#define zifu12 " 3.退出 \n\n"
#define zifu13 " *******选票已完毕********\n"
#define zifu14 " 请您输入“2”来打开最后选票结果\n"
int check(
void);
void conut(
int ,
int);
void input(
int );
int abandon=
0;
int tun=
0;
struct student
{
int score;
int vote;
int n;
};
struct student number[
100];
int vote[
10]={
0};
int main()
{
int i=
0;
int j=
0;
int f=
0;
int k=
0;
int p=
0;
int q=
0;
int count=
1;
int tally=
1;
system(
"color 70");
printf(zifu5);
printf(zifu6);
printf(zifu7);
printf(zifu10);
printf(zifu11);
printf(zifu12);
printf(zifu8);
printf(zifu9);
while(
scanf(
"%d",&q))
{
if(
1==q)
{
system(
"cls");
system(
"color 70");
printf(
"正在尝试打开输入表格,稍等....");
for(p=
1;p<=
100;p++)
{
printf(
"=",p);
printf(
"%%");
Sleep(
50);
printf(
"\b\b\b\b");
}
for(i=
1;i<=
100;i++)
number[i-
1].n=i;
for(k=
0;k!=
1;)
{
printf (
"\n\n\n请你在第%d张选票里选[0~100]号码\n",count);
for(j=
0,tally=
1;j<=
9;j++,tally++)
{
printf(
"%d号:",tally);
input(j);
if(-
1==vote[j])
{
k=
1;
break;
}
}
count++;
f=check();
conut(k,f);
if(
0==abandon||
2==tun)
{
printf(
"\n\n废票");
k=
0;
continue;
}
}
if(
1==k)
{
break;
}
}
else if(
2==q)
{
printf(
"还没有选票,无法显示选票结果\n");
}
else if(
3==q)
{
return;
}
else
{
printf(
"请输入【1-3】!");
}
}
printf(zifu13);
printf(zifu14);
while(
scanf(
"%d",&q))
{
if(
2==q)
{
system(
"cls");
printf(
"正在尝试打开统计结果,稍等....");
for(p=
1;p<=
100;p++)
{
printf(
"=",p);
printf(
"%%");
Sleep(
50);
printf(
"\b\b\b\b");
}
printf(
"\n统计结果揭晓:\n");
printf(zifu0);
printf(zifu1);
printf(zifu2);
for(i=
0;i<=
9;i++)
{
printf(
"]ddd\n",i+
1,number[i].n,number[i].score,number[i].vote);
}
printf(zifu3);
printf(zifu4);
printf(
"\n恭喜以上10位同学拔得头筹!!!");
}
else
{
printf(
"请重新输入,并输入“2”\n");
}
}
return 0;
}
void input(
int j)
{
FILE *fp;
if((fp=fopen(
"d:\\vote.txt",
"a"))==NULL)
{
printf(
"open error!");
exit(
1);
}
scanf(
"%d",&vote[j]);
fprintf(fp,
"%d",vote[j]);
fclose(fp);
}
int check()
{
int i,j;
tun=
0;
for(i=
0;i<=
9;i++)
{
if(vote[i]==-
1)
{
return 1;
}
for(j=i+
1;j<=
9;j++)
{
if(vote[i]==vote[j])
{
tun=
2;
return 1;
}
}
if(vote[i]>
100||vote[i]<-
1||vote[i]==
0)
{
tun=
2;
return 1;
}
}
abandon++;
return 0;
}
void conut(
int x,
int y)
{
int i;
int j;
int t;
int k;
if(
0==y)
{
for(i=
0;i<
10;i++)
{
k=vote[i];
if(
0==vote[i])
{
continue;
}
else
{
number[k-
1].vote++;
switch(i+
1)
{
case 1: number[k-
1].score=number[k-
1].score+
15;
break;
case 2: number[k-
1].score=number[k-
1].score+
12;
break;
case 3: number[k-
1].score=number[k-
1].score+
9;
break;
case 4: number[k-
1].score=number[k-
1].score+
7;
break;
case 5: number[k-
1].score=number[k-
1].score+
6;
break;
case 6: number[k-
1].score=number[k-
1].score+
5;
break;
case 7: number[k-
1].score=number[k-
1].score+
4;
break;
case 8: number[k-
1].score=number[k-
1].score+
3;
break;
case 9: number[k-
1].score=number[k-
1].score+
2;
break;
case 10: number[k-
1].score=number[k-
1].score+
1;
break;
}
}
}
}
if(x==
1)
{
for(j=
0;j<
10;j++)
for(i=j+
1;i<
100;i++)
{
if(number[j].score<number[i].score)
{
t=number[j].vote;
number[j].vote=number[i].vote;
number[i].vote=t;
t=number[j].score;
number[j].score=number[i].score;
number[i].score=t;
t=number[j].n;
number[j].n=number[i].n;
number[i].n=t;
}
else if(number[j].score==number[i].score)
{
if(number[j].vote<number[i].vote)
{
t=number[j].vote;
number[j].vote=number[i].vote;
number[i].vote=t;
t=number[j].score;
number[j].score=number[i].score;
number[i].score=t;
t=number[j].n;
number[j].n=number[i].n;
number[i].n=t;
}
}
else if(number[j].score==number[i].score&&number[j].vote==number[i].vote)
{
if(number[j].n<number[i].n)
{
if(number[j].vote<number[i].vote)
{
t=number[j].vote;
number[j].vote=number[i].vote;
number[i].vote=t;
t=number[j].score;
number[j].score=number[i].score;
number[i].score=t;
t=number[j].n;
number[j].n=number[i].n;
number[i].n=t;
}
}
}
}
}
}
三、效果图
*注:未经同意,该篇不得转载
转载请注明原文地址: https://ju.6miu.com/read-20129.html