匿名用户
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();
}