📄 sports.c
字号:
/*运动会分数统计*/
/*本程序在Microsoft Visual C++ 6.0运行通过*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define M_NUM 1 /*男子项目编号*/
#define W_NUM 1 /*女子项目编号*/
#define S_NUM 3 /*学校数目*/
void input();
void pritotal();
void count();
void Sort_menu();
void Search_sch();
void Search_pro();
void Sort_sch();
void Sort_total();
void Sort_man();
void Sort_woman();
void Save();
void Load();
void Exit();
struct project /*项目的结构体数组*/
{
char school_name[10][10]; /*获奖学校名*/
char name[10]; /*项目名*/
int flag; /*flag为0,取前五名;否则取前三名*/
}pArray[M_NUM+W_NUM];
struct school /*学校的结构体数组*/
{
char name[10];
int total; /*学校总分*/
int m_total; /*男子团体总分*/
int w_total; /*女子团体总分*/
}sArray[S_NUM];
int school_num = 0;
int s_array1[5] = {7,5,3,2,1}; /*取前五名时的各名次得分情况*/
int s_array2[3] = {5,3,2}; /*取前三名时的各名次得分情况*/
/*主菜单*/
void main_menu()
{
while(1)
{
int key;
system("cls");
printf("运动会分数统计系统主菜单\n");
printf("\n1.输入数据\n");
printf("2.保存数据\n");
printf("3.载入数据\n");
printf("4.统计各学校总分\n");
printf("5.各种排序\n");
printf("6.查询某个学校在某个项目获奖情况\n");
printf("7.查询某个项目获奖情况\n");
printf("8.退出\n\n");
scanf("%d",&key);
switch(key) {
case 1:input();break;
case 2:Save();break;
case 3:Load();break;
case 4:pritotal();break;
case 5:Sort_menu();break;
case 6:Search_sch();break;
case 7:Search_pro();break;
case 8:Exit();break;
default:printf("输入错误,请输入1~8的数字!\n");
getch();break;
}
}
}
/*排序菜单*/
void Sort_menu()
{
while(1) {
int key;
system("cls");
printf("\n1.根据学校编号排序\n");
printf("2.根据学校总分排序\n");
printf("3.根据男子团体总分排序\n");
printf("4.根据女子团体总分排序\n");
printf("5.返回主菜单\n\n");
scanf("%d",&key);
switch(key) {
case 1:Sort_sch();break;
case 2:Sort_total();break;
case 3:Sort_man();break;
case 4:Sort_woman();break;
case 5:main_menu();break;
default:printf("输入错误,请输入1~5的数字!\n");
getch();break;
}
}
return;
}
/*输入数据*/
void input()
{
int i,j,k,hspos;
system("cls");
for(j=0;j<M_NUM+W_NUM;j++)
{
printf("\n输入编号为%d的项目名称:",j+1);
scanf("%s",pArray[j].name);
printf("该项目取前几名?\n取前五名输入1,取前三名输入0:");
scanf("%d",&pArray[j].flag);
if (pArray[j].flag==1) /*判断该项目取前几名*/
hspos=5;
else hspos=3;
for(i=0;i<hspos;i++)
{
printf("输入获第%d名学校:",i+1);
scanf("%s",pArray[j].school_name[i]);
for(k=0;k<school_num;k++)
{
if(strcmp(pArray[j].school_name[i],sArray[k].name)==0) break;
}
if(k==school_num) {
strcpy(sArray[k].name,pArray[j].school_name[i]);
school_num++;
}
}
}
count();
main_menu();
return;
}
/*保存数据*/
void Save()
{
int i,j,k,hspos;
FILE *fp;
fp=fopen("aaa.txt","w");
for(j=0;j<M_NUM+W_NUM;j++)
{
fprintf(fp,"%s",pArray[j].name);
fprintf(fp,"%d",pArray[j].flag);
if (pArray[j].flag==1) /*判断该项目取前几名*/
hspos=5;
else hspos=3;
for(i=0;i<hspos;i++)
{
fprintf(fp,"%s",pArray[j].school_name[i]);
for(k=0;k<school_num;k++)
{
if(strcmp(pArray[j].school_name[i],sArray[k].name)==0) break;
}
if(k==school_num) {
strcpy(sArray[k].name,pArray[j].school_name[i]);
school_num++;
}
}
}
printf("保存成功!");
getch();
main_menu();
return;
}
/*载入数据*/
void Load()
{
int i,j,k,hspos;
FILE *fp;
if((fp=fopen("aaa.txt","r"))==NULL)
{
printf("找不到文件!\n");
getch();
main_menu();
}
for(j=0;j<M_NUM+W_NUM;j++)
{
fread(pArray[j].name,sizeof(char),4,fp);
fscanf(fp,"%d",&pArray[j].flag);
if (pArray[j].flag==1)
hspos=5;
else hspos=3;
for(i=0;i<hspos;i++)
{
fread(pArray[j].school_name[i],sizeof(char),8,fp);
for(k=0;k<school_num;k++)
{
if(strcmp(pArray[j].school_name[i],sArray[k].name)==0) break;
}
if(k==school_num) {
strcpy(sArray[k].name,pArray[j].school_name[i]);
school_num++;
}
}
}
count();
printf("载入成功!");
getch();
main_menu();
return;
}
/*统计总分*/
void count()
{
int i,j,k,hspos,sc;
for(i=0;i<school_num;i++)
{
sArray[i].total=0;
sArray[i].m_total=0;
sArray[i].w_total=0;
}
for(i=0;i<M_NUM+W_NUM;i++)
{
if(pArray[i].flag==1) hspos=5;
else hspos=3;
for(j=0;j<hspos;j++)
{
for(k=0;k<school_num;k++)
{
if(strcmp(pArray[i].school_name[j],sArray[k].name)==0) break;
}
if(hspos==5) sc=s_array1[j];
else sc=s_array2[j];
sArray[k].total+=sc;
if(i>=M_NUM) sArray[k].w_total+=sc;
else sArray[k].m_total+=sc;
}
}
return;
}
/*显示总分*/
void pritotal()
{
int i;
system("cls");
printf("有%d个学校\n",school_num);
printf("学校名称 学校总分 男子团体 女子团体\n");
for(i=0;i<school_num;i++)
printf("%-12s %-10d %-10d %-4d\n",sArray[i].name,sArray[i].total,sArray[i].m_total,sArray[i].w_total);
getch();
main_menu();
}
/*按学校查找*/
void Search_sch()
{
char s_name[10],p_name[10];
int i,j,hspos;
system("cls");
printf("请输入要查询的学校名称:");
scanf("%s",s_name);
printf("请输入要查询的项目名称:");
scanf("%s",p_name);
for(i=0;i<M_NUM+W_NUM;i++)
{
if(strcmp(pArray[i].name,p_name)==0) break;
}
if(pArray[i].flag==1) hspos=5;
else hspos=3;
if(i==M_NUM+W_NUM) printf("您查找的项目不存在!");
else {
for(j=0;j<hspos;j++)
{
if(strcmp(pArray[i].school_name[j],s_name)==0) break;
}
if(j==hspos) printf("%s在%s项目中没有取到名次!\n",s_name,p_name);
else printf("%s在%s项目中取到第%d名!\n",s_name,p_name,j+1);
}
getch();
main_menu();
}
/*按项目查找*/
void Search_pro()
{
char p_name[10];
int i,j,hspos,flag;
system("cls");
printf("请输入要查询的项目名:");
scanf("%s",p_name);
flag=0;
for(i=0;i<M_NUM+W_NUM;i++)
{
if(strcmp(pArray[i].name,p_name)==0) {
if(i>=M_NUM) printf("\n%s是女子项目!\n\n",p_name);
else printf("\n%s是男子项目!\n\n",p_name);
if(pArray[i].flag==1) hspos=5;
else hspos=3;
for(j=0;j<hspos;j++)
{
printf("第%d名:%s\n",j+1,pArray[i].school_name[j]);
}
flag=1;
}
}
if(flag==0) printf("您查找的项目不存在!");
getch();
main_menu();
}
/*按学校编号排序*/
void Sort_sch()
{
int i;
system("cls");
for(i=0;i<school_num;i++)
{
printf("NO.%d:%s\n",i+1,sArray[i].name);
}
getch();
Sort_menu();
}
/*按总分排序*/
void Sort_total()
{
struct school sArray1[S_NUM];
int i,j;
int total,m_total,w_total;
char name[10];
for(i=0;i<school_num;i++)
{
strcpy(sArray1[i].name,sArray[i].name);
sArray1[i].total=sArray[i].total;
sArray1[i].m_total=sArray[i].m_total;
sArray1[i].w_total=sArray[i].w_total;
}
for(i=0;i<school_num;i++)
for(j=i+1;j<school_num;j++)
{
if(sArray1[i].total<sArray1[j].total) {
total=sArray1[i].total;
m_total=sArray1[i].m_total;
w_total=sArray1[i].w_total;
strcpy(name,sArray1[i].name);
sArray1[i].total=sArray1[j].total;
sArray1[i].m_total=sArray1[j].m_total;
sArray1[i].w_total=sArray1[j].w_total;
strcpy(sArray1[i].name,sArray1[j].name);
sArray1[j].total=total;
sArray1[j].m_total=m_total;
sArray1[j].w_total=w_total;
strcpy(sArray1[j].name,name);
}
}
printf("学校名称 学校总分\n");
for(i=0;i<school_num;i++)
printf("%-12s %-6d\n",sArray1[i].name,sArray1[i].total);
getch();
Sort_menu();
}
/*按男子总分排序*/
void Sort_man()
{
struct school sArray1[S_NUM];
int i,j;
int total,m_total,w_total;
char name[10];
for(i=0;i<school_num;i++)
{
strcpy(sArray1[i].name,sArray[i].name);
sArray1[i].total=sArray[i].total;
sArray1[i].m_total=sArray[i].m_total;
sArray1[i].w_total=sArray[i].w_total;
}
for(i=0;i<school_num;i++)
for(j=i+1;j<school_num;j++)
{
if(sArray1[i].m_total<sArray1[j].m_total) {
total=sArray1[i].total;
m_total=sArray1[i].m_total;
w_total=sArray1[i].w_total;
strcpy(name,sArray1[i].name);
sArray1[i].total=sArray1[j].total;
sArray1[i].m_total=sArray1[j].m_total;
sArray1[i].w_total=sArray1[j].w_total;
strcpy(sArray1[i].name,sArray1[j].name);
sArray1[j].total=total;
sArray1[j].m_total=m_total;
sArray1[j].w_total=w_total;
strcpy(sArray1[j].name,name);
}
}
system("cls");
printf("学校名称 男子总分\n");
for(i=0;i<school_num;i++)
printf("%-12s %-6d\n",sArray1[i].name,sArray1[i].m_total);
getch();
Sort_menu();
}
/*按女子总分排序*/
void Sort_woman()
{
struct school sArray1[S_NUM];
int i,j;
int total,m_total,w_total;
char name[10];
for(i=0;i<school_num;i++)
{
strcpy(sArray1[i].name,sArray[i].name);
sArray1[i].total=sArray[i].total;
sArray1[i].m_total=sArray[i].m_total;
sArray1[i].w_total=sArray[i].w_total;
}
for(i=0;i<school_num;i++)
for(j=i+1;j<school_num;j++)
{
if(sArray1[i].w_total<sArray1[j].w_total) {
total=sArray1[i].total;
m_total=sArray1[i].m_total;
w_total=sArray1[i].w_total;
strcpy(name,sArray1[i].name);
sArray1[i].total=sArray1[j].total;
sArray1[i].m_total=sArray1[j].m_total;
sArray1[i].w_total=sArray1[j].w_total;
strcpy(sArray1[i].name,sArray1[j].name);
sArray1[j].total=total;
sArray1[j].m_total=m_total;
sArray1[j].w_total=w_total;
strcpy(sArray1[j].name,name);
}
}
system("cls");
printf("学校名称 女子总分\n");
for(i=0;i<school_num;i++)
printf("%-12s %-6d\n",sArray1[i].name,sArray1[i].w_total);
getch();
Sort_menu();
}
/*退出*/
void Exit()
{
exit(0);
}
/*主函数*/
int main()
{
main_menu();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -