运动会分数统计(C/C++)
任务:参加运动会有10个学校,学校编号为1……10。比赛分成18个男子项目,和12个女子项目。项目编号为男子1……18,女子19……30。不同的项目取前三名积分,前三名的积分分别为:5、3、2。
功能要求:
a) 可以输入各个项目的前三名的成绩;
b) 能统计各学校总分;
c) 可以按学校编号或名称、学校总分、男女团体总分排序输出;
d) 数据存入文件并能随时查询 ;
e) 规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称;
输出形式:有中文提示,各学校分数为整型;
存储结构:根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。
源码下载链接:运动会分数统计C/C++
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define L 20//数据最大长度
#define N 10//学校数
#define M 30//项目数
typedef struct RNode{//成绩结点
char Name[L];//运动员姓名
int ProNum;//项目编号
char ProName[L];//项目名称
char School_name[L];//学校名称
int Rank;//排名
char Score[L];//成绩
struct RNode *next;
}Record;
typedef struct{//学校信息
char name[L];//学校名称
int num;//学校编号
Record *RList;//学校成绩表
int Total_score;//总分
int Man_Total_score;//男子团体总分
int Woman_Total_score;//女子团体总分
}School;
typedef struct{//项目
char name[L];//项目名称
int num;//项目编号
Record *First;//第一名成绩信息
Record *Second;//第二名成绩
Record *Third;//第三名成绩
}Project;
typedef struct
{
int num;
int score;
}Pm;
Pm Schoolpm[N];
Pm Manpm[18];
Pm Womanpm[12];
int score[3]={5,3,2};//积分
School Schools[N];
Project Projects[M]={
{"男子50m",1,NULL,NULL,NULL},{"男子100m",2,NULL,NULL,NULL},{"男子200m",3,NULL,NULL,NULL},{"男子400m",4,NULL,NULL,NULL},{"男子800m",5,NULL,NULL,NULL},
{"男子1000m",6,NULL,NULL,NULL},{"男子1500m",7,NULL,NULL,NULL},{"男子2000m",8,NULL,NULL,NULL},{"男子3000m",9,NULL,NULL,NULL},{"男子5000m",10,NULL,NULL,NULL},
{"男子跳高",11,NULL,NULL,NULL},{"男子跳远",12,NULL,NULL,NULL},{"男子4*100接力",13,NULL,NULL,NULL},{"男子实心球",14,NULL,NULL,NULL},{"男子飞饼",15,NULL,NULL,NULL},
{"50米自由泳",16,NULL,NULL,NULL},{"100米自由泳",17,NULL,NULL,NULL},{"男子羽毛球",18,NULL,NULL,NULL},{"女子50m",19,NULL,NULL,NULL},{"女子100m",20,NULL,NULL,NULL},
{"女子200m",21,NULL,NULL,NULL},{"女子400m",22,NULL,NULL,NULL},{"女子800m",23,NULL,NULL,NULL},{"女子1000m",24,NULL,NULL,NULL},{"女子1500m",25,NULL,NULL,NULL},
{"女子2000m",26,NULL,NULL,NULL},{"女子跳高",27,NULL,NULL,NULL},{"女子跳远",28,NULL,NULL,NULL},{"女子4*100接力",29,NULL,NULL,NULL},{"女子羽毛球",30,NULL,NULL,NULL}};
int str_to_int(char A[]){//字符串转数字
int i=0,e=0,flag=1;
if(A[0]=='-'){flag=-1;i++;}
while(A[i]!='\0')
e=e*10+(A[i++]-'0');
return e*flag;
}
void GetName(char Info[]){//将用户输入的字符串处理为文件名
char s[5]=".txt";
int i=0,j=0;
while(Info[i]!='\0')i++;
while(s[j]!='\0')Info[i++]=s[j++];
Info[i]='\0';
}
void qsort(Pm s[], int l, int r){
int i = l, j = r;
Pm tmp;
if(i<j){
tmp = s[i];
while (i < j){
while (i < j && s[j].score <= tmp.score) j--;
s[i] = s[j];
while (i < j && s[i].score >= tmp.score) i++;
s[j] = s[i];
}
s[i] = tmp;
qsort(s, l, i - 1);
qsort(s, i + 1, r);
}
}
bool Empty(){//是否初始化
return !(Schools[0].RList==NULL);
}
int Find(char *Info,char m){//查找学校或项目,两个模式,m:'S':查找学校;'P':查找项目
int