数据结构结业课程设计--运动会计分系统
/* 参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20)【基本要求】
(1)可以输入各个项目的前三名或前五名的成绩;
(2)能统计各学校总分,
(3)可以按学校编号或名称、学校总分、男女团体总分排序输出;
(4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
(5)存储结构自选,但要求运动会的相关数据存入并能随时查询
(6)规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称
(7)输出形式:有中文提示,各学校分数为整形
(8)界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。*/
直接上代码:
# include <stdio.h>
# include <stdlib.h>
# define N 12 //大学和项目名称的长度=汉字个数*sizeof(char)
# define M 20 //大学的数量
# define Q 20 //项目的数量
# define H 5 //调整每一行输出的学校或项目数量 现在一行输出5个
# define MIN(a,b) (a)<(b)?(a):(b)
const char wenjian[]="out.bin";//文件名
typedef struct link
{
int gram[3][Q]; //每一个项目gram[0]存男生,gram[1]存女生,gram[2]存这个学校中男女在此项目上的总分
int sum[3];
} AA,*Aa;
typedef struct HEAD
{
int b[4]; //b[0-3]依次为(学校个数,项目个数,男生项目个数,女生项目个数
char xuexiao[M][N+1]; //M个学校的名称
int sex[M]; //sex[i]//录入性别,0为男,1为女
struct link spot[M]; //接上M个学校的信息
char xiangmu[Q][N+1]; //Q个项目的名称
int power[Q]; //每一个项目都有选择前三名或前五名的机会 POW存 3 或者 5
int cun[Q][5]; //M个项目的学校编号排名1--3 或者 1--5
} HEAD;
char sex[][3]= {"男","女"};
int power[][5]= {
{5,3,2,0,0},{7,5,3,2,1}}; //积分
char ss[][5]= {"男团","女团","学校"};
int gainchar(char A[],int min,int max); //输入字符串的字节范围[min,max]
int gainint(int *p,int a,int b);//输入int *p直至满足[a,b]输入结束,并返回*p的位数
int BF(char a[],char b[]);//BF算法 a为主串,b为被检验的串`返回b在a中的第一个下标 若无返回0
void record(char school[][N+1],char game[][N+1],int b[],HEAD *temp);//记录数据最重要的一个函数,a为项目数组,b为记录,c为学校,Temp结构体
int jiemian();//用户显示界面
int jianyan(char b[],int T);//检验b[]是否符合实际,T=0检验当前字符串是否全为汉字 T=1检验学校,T=2检验比赛 检验符合返回0
void xuanzepai(HEAD *temp,int select);//选择排序
/*下面是检查用的数组 用在jianyan 函数中*/
char key[][3]= {"!","。","?","《","》",",","{","}","(",")","¥","‘","’",":",";","—","”","“","、","·","~","\0"};
char school[][5]= {"大学","学院","华侨","校区","政法","管理","经济","科学","理工","科技","技术","职业","师范","中国","海洋","石油","分区","分校","建筑"