十佳运动员C语言编程,谁能帮我用C语言设计一个有奖评选程序?题目是:十佳运动员评选活动(一、功能要求...

匿名用户

1级

2009-06-26 回答

#include "stdio.h"

#include "string.h"

#include "stdlib.h"

#define N 50

#define M 500

struct sporter

{

int num;

char name[20];

int vote_num;

}spt[N]; /* spt[N]中每个数组元素对应一个运动员信息,vote_num记录得票数目.*/

struct vote

{

char id[10];

char name[20];

char address[20];

int a[10];

int score_order;/*次序分 */

int score_hit;/*命中分*/

int score_sum;

}vot[M]; /* vot[M]中每个数组元素对应一张选票信息,score_sum记录该票命中率*/

void printf_back();

void menu();

void menu_vote();

int save_spt();

void printf_onevote(int j);

int load_vote();

void search_vote();

void search_vote()

{

int m,i,flag=0;

char vs[20];

printf("Please input vote_id:\n");

scanf("%s",&vs);

m=load_vote();

for(i=0;i

{

if(strcmp(vs,vot[i].id)==0)

{

flag=1;

printf_onevote(i);

}

}

if(flag==1)

printf("Found!");

else

printf("Not found!");

printf_back();

}

/*1_1. 加载候选运动员记录并可以计算记录个数的函数*/

int load_sporter() /*加载记录并可以计算记录个数的函数*/

{FILE *fp;

int i;

if((fp=fopen("sporter.txt","r"))==NULL) /*以输出打开方式,在此前的记录被覆盖*/

{printf("\nCannot open file\n");

return 0;

}

for(i=0;!feof(fp);i++)

fscanf(fp,"%d%s",&spt[i].num,&spt[i].name);

fclose(fp);

return(i); /*返回记录个数*/

}

/*1_2. 显示一个运动员记录的函数*/

void printf_one(int i)

{

printf("%2d %-17s %d \n",spt[i].num,spt[i].name,spt[i].vote_num);

}

/*1_3. 显示n个运动员记录的函数*/

void printf_n(int n)

{int j;

for(j=0;j

{

if(j%10==0)

{ printf("\n\nPass any key to contiune . . .");

getchar();

puts("\n\n");

}

printf_one(j);

}

getchar();

}

/*1_4. 加载候选选票记录并可以计算记录个数的函数*/

int load_vote()

{FILE *fp;

int i,j;

if((fp=fopen("vote.txt","r"))==NULL)

{printf("\nCannot open file\n");

return 0;

}

for(i=0;!feof(fp);i++)

{ fscanf(fp,"%s%s%s%",&vot[i].id,&vot[i].name,&vot[i].address);

for(j=0;j<10;j++)

fscanf(fp,"%d",&vot[i].a[j]);

}

fclose(fp);

return(i); /*返回记录个数*/

}

/*1_5. 显示一张彩票记录的函数*/

void printf_onevote(int j)

{

int i;

printf("vote_id:%s\n",vot[j].id);

printf("vote_name:%s vote_address:%s\n",vot[j].name,vot[j].address);

printf("vote_sporter:");

for(i=0;i<10;i++)

printf("%d, ",vot[j].a[i]);

printf("\n\n");

}

/*1_6. 显示n张彩票记录的函数*/

void printf_n_vote(int m)

{int j;

for(j=0;j

{

if(j%10==0)

{ printf("\nPass any key to contiune . . .");

getchar();

puts("\n\n");

}

printf_onevote(j);

}

getchar();

}

/*1_7. 唱票函数*/

void stat_vote(int m)

{

int i,j,k;

for(i=0;i<=m;i++)

{

for(j=0;j<10;j++)

for(k=0;k<20;k++)

if(vot[i].a[j]==spt[k].num)spt[k].vote_num++;

}

}

/*1_8. 依据得票数排序函数,使用选择排序法*/

void order_by_vote(int m)

{

int i,j,k;

struct sporter s;

for(i=0;i

{ k=i;

for(j=i+1;jspt[k].vote_num)k=j;

s=spt[i]; spt[i]=spt[k]; spt[k]=s;

}

}

/*1_9. 显示10佳信息及输出到文件函数*/

void print_spt10()

{

int i;

printf("\n\nThe 10 best sporter is:\n");

printf("order, num, name, vote_num\n");

for(i=0;i<10;i++)

{

printf("%5d: %3d, %10s, %d \n",i+1,spt[i].num,spt[i].name,spt[i].vote_num);

}

getchar();

save_spt();

}

/*1_10. 保存函数*/

int save_spt() /*保存函数,保存10佳运动员记录*/

{FILE *fp1;

int i;

if((fp1=fopen("spt10.txt","w"))==NULL) /*以输出打开方式,在此前的记录被覆盖*/

{printf("\nCannot open file\n");

return 0;

}

for(i=0;i<10;i++)

fprintf(fp1,"%d %s %d\n",spt[i].num,spt[i].name,spt[i].vote_num);

fclose(fp1);

return 1;

}

/*1_11. 计算命中率函数*/

int calc_hit(int m)

{FILE *fp;

int i,j,k;

struct sporter s[10];

for(i=0;i<10;i++)

{

s[i]=spt[i];

}

for(i=0;i

for(j=0;j<10;j++)

for(k=0;k<10;k++)

{

if(vot[i].a[j]==s[j].num) vot[i].score_order+=9-j; /*次序分*/

if(vot[i].a[j]==s[k].num) vot[i].score_hit+=10; /*命中分*/

vot[i].score_sum=vot[i].score_hit+vot[i].score_order;

}

if((fp=fopen("hit.txt","w"))==NULL)

{printf("\nCannot open file\n");

return 0;

}

for(i=0;i

fprintf(fp,"%s %d %d %d\n",vot[i].id,vot[i].score_order,vot[i].score_hit,vot[i].score_sum);

fclose(fp);

return 1;

}

/*1_12. 依据命中率对选票排序函数,使用选择排序法*/

void sort_vote(int m)

{

int i,j,k;

struct vote v;

for(i=0;i

{ k=i;

for(j=i+1;jvot[k].score_sum)k=j;

v=vot[i]; vot[i]=vot[k]; vot[k]=v;

}

}

/*1_13. 显示前10名获奖参选者信息函数*/

void print_vot10()

{

int i;

printf("\n\nThe 10 best voter is:\n");

printf("order, id, name, vote_sum\n");/*名次 选票号 姓名 命中率*/

for(i=0;i<10;i++)

{

printf("%5d: %s, %10s, %d \n",i+1,vot[i].id,vot[i].name,vot[i].score_sum);

}

getchar();

}

/*1_14. 保存前10名获奖参选者信息到文件的函数*/

int save_vot10()

{FILE *fp1;

int i;

if((fp1=fopen("vot10.txt","w"))==NULL) /*以输出打开方式,在此前的记录被覆盖*/

{printf("\nCannot open file\n");

return 0;

}

for(i=0;i<10;i++)

fprintf(fp1,"%5d: %s, %10s, %d \n",i+1,vot[i].id,vot[i].name,vot[i].score_sum);

fclose(fp1);

return 1;

}

int n,m;

/*1_15. 从文件读入运动员及选票记录*/

void readfiles()

{

n=load_sporter();/*从文件读入候选运动员记录*/

printf_n(n);/* 显示候选运动员记录*/

m=load_vote();/*从文件读入选票记录*/

}

/*1_16. 计算10佳运动员*/

void calctensp()

{

stat_vote(m); /*唱票*/

order_by_vote(n); /*依据得票数对运动员记录排序*/

print_spt10();/*输出10佳运动员信息*/

}

/*1_17. 计算10个获奖参选者*/

void stattenvoter()

{

calc_hit(m); /*计算选票的命中率*/

sort_vote(m); /*依据命中率对选票记录排序*/

print_vot10();/*显示10个获奖参选者信息*/

save_vot10();/*输出10个获奖参选者信息到文件*/

}

/*1_18. 统计函数*/

void stat()

{

readfiles();

calctensp();

stattenvoter();

}

/*2_1. 浏览选票函数*/

void browse_vote()

{

int k;

k=load_vote();

printf_n_vote(k);

printf_back();

}

/*2_2. /*查找选票函数*/

/

/*2_3. 核对选票函数*/

void check()

{

int n,w;

/*变量n保存选择菜单数字,w判断输入的数字是否在功能菜单对应数字范围内*/

do

{

puts("\t\t*********************MENU*********************\n\n");

puts("\t\t\t\t 1.browse_vote"); /*浏览所有彩票*/

puts("\t\t\t\t 2.search_vote");/*输入彩票号码查找该彩票信息*/

puts("\t\t\t\t 3.back");/*返回*/

puts("\n\n\t\t **********************************************\n");

printf("Choice your number(1-3): [ ]\b\b");

scanf("%d",&n);

if(n<1||n>3) /*对选择的数字作判断*/

{

w=1;

getchar();

}

else {w=0;}

}while(w==1);

/*选择功能*/

switch(n)

{case 1:browse_vote();break; /*统计模块*/

case 2:search_vote();break; /*查找选票模块*/

case 3:menu(); /*退出*/

}

}

/*公共函数*/

/*(1)任务结束时的选择退出还是返回*/

void printf_back()

{int w;

printf("\n\n\tSuccessful. ^_^\n\n");

printf("What do you want to do? \n\n\t1).Exit\t2).Back: [ ]\b\b");

scanf("%d",&w);

if(w==1) exit(0);

else menu_vote();

}

/*(2)任务结束时的选择退出还是返回主菜单*/

void menu()

{

int n,w;

/*变量n保存选择菜单数字,w判断输入的数字是否在功能菜单对应数字范围内*/

do

{

puts("\t\t*********************MENU*********************\n\n");

puts("\t\t\t\t 1.statistic"); /*统计*/

puts("\t\t\t\t 2.check_vote");/*核对选票*/

puts("\t\t\t\t 3.exit");/*退出*/

puts("\n\n\t\t **********************************************\n");

printf("Choice your number(1-3): [ ]\b\b");

scanf("%d",&n);

if(n<1||n>3) /*对选择的数字作判断*/

{

w=1;

getchar();

}

else w=0;

}

while(w==1);

/*选择功能*/

switch(n)

{case 1:stat();break; /*统计模块*/

case 2:check();break; /*核对选票模块*/

case 3:exit(0); /*退出*/

}

}

/*(3)任务结束时的选择退出还是返回核对彩票菜单*/

void menu_vote()

{

int n,w;

/*变量n保存选择菜单数字,w判断输入的数字是否在功能菜单对应数字范围内*/

do

{

puts("\t\t*********************MENU*********************\n\n");

puts("\t\t\t\t 1.browse_vote"); /*浏览所有彩票*/

puts("\t\t\t\t 2.search_vote");/*输入彩票号码查找该彩票信息*/

puts("\t\t\t\t 3.esc");/*返回*/

puts("\n\n\t\t **********************************************\n");

printf("Choice your number(1-3): [ ]\b\b");

scanf("%d",&n);

if(n<1||n>3) /*对选择的数字作判断*/

{

w=1;

getchar();

}

else {w=0;}

}while(w==1);

/*选择功能*/

switch(n)

{case 1:browse_vote();break; /*统计模块*/

case 2:search_vote();break; /*查找选票模块*/

case 3:exit(0); /*退出*/

}

}

main() /*****************主函数****************/

{

menu();

}

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
针对投票系统源代码 仅供参考 一、课程设计目的和任务 为完成对十佳运动员的选拔,故设计程序通过众人对20位候选人的投票表决,选出其中票数最高的前十位,定为十佳运动员。这就要求程序要能够录入20位候选人的名单,包括起编号和姓名,然后程序可以接受用户的投票,并且自动作出票数统计并输出最后的票数由高到低的排序结果。 二、分析与设计 1.程序的基本功能: (1)查看十佳运动员的候选名单。 (2) 接受用户的投票。 (3) 自动统计用户投票并输出排序结果。 (4) 添加一个管理员,可以录入候选者名单。 (5) 退出程序。 2.系统总框图: 3.定义的函数及说明: 本程序由11个函数构成 back_sel()---用来返回用户菜单 display1()------用来显示用户菜单 f_read()-------用来读出候选人名单 admirin_save()-----管理员输入数据并将数据存盘 admirin()------管理员录入数据界面 admir()——管理员界面登录 paixv()-----查看十佳候选人排名,票数由高到低 write()------调用此函数来写入票数 voting()------投票界面,进行对候选者的投票 select()-------首页界面选择 Main()---主函数。 4.算法设计: 本程序主要运用线性表的顺序存储结构,从而很容易的对数组进行操作。同时对于票数的统计排序方面采用比较经典的“冒泡法”来完成,从而优化了整个程序体,降低时间复杂度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值