📄 sport.h
字号:
/****************************************************************************
Copyleft!
FileName: Sport.h
Author: cjhacker
Version: 1.0
Description: Basic Function Of Sports Meet Statistic System
Function List:
Status SchooLIDMin( SqList L ); //返回school_id中的最小值
Status SchooLIDMax( SqList L ); //返回school_id中的最大值
Status ReadFormFile( SqList &L ); //从文件读入信息
int GetFromKey( SqList &L ); //从键盘输入信息
void OutSchoolScore( SqList L ); //输出各学校成绩单
void OutTotleTable( SqList L ); //输出各学校总成绩
int Menu( void ); //显示主菜单
****************************************************************************/
#include <stdio.h>
#include <conio.h>
#include "Gdefine.h"
#include "Sqlist.h"
/*Function Declaration*/
Status SchooLIDMin( SqList L ); //返回school_id中的最大值
Status SchooLIDMax( SqList L ); //返回school_id中的最大值
Status ReadFormFile( SqList &L ); //从文件读入信息
int GetFromKey( SqList &L ); //从键盘输入信息
void OutSchoolScore( SqList L ); //输出各学校成绩单
void OutTotleTable( SqList L ); //输出各学校总成绩
int Menu( void ); //显示主菜单
/********************************
功能:返回school_id中的最小值
参数:线形表结构L
返回:返回school_id中的最小值
********************************/
Status SchooLIDMin( SqList L )
{
int i, sh_id_min;
sh_id_min = L.elem[ 0 ].school_id;
for( i = 0; i < L.length; i++ )//循环查找学校最小编号
{
if ( L.elem[ i ].school_id < sh_id_min )
{
sh_id_min = L.elem[ i ].school_id;
}
}
return sh_id_min;
}
/********************************
功能:返回school_id中的最大值
参数:线形表结构L
返回:返回school_id中的最大值
********************************/
Status SchooLIDMax( SqList L )
{
int i, sh_id_max;
sh_id_max = L.elem[ 0 ].school_id;
for( i = 0; i < L.length; i++ )//循环查找学校最小编号
{
if ( L.elem[ i ].school_id > sh_id_max )
{
sh_id_max = L.elem[ i ].school_id;
}
}
return sh_id_max;
}
/************************
参数:线形表结构L
功能:从文件读入信息
************************/
Status ReadFormFile( SqList &L )
{
FILE *fp;
char filename[ 40 ];
int i = 1;
ElemType temp;
fp = fopen( "data.txt", "r" );//当前目录下的date.txt
while ( !fp )//当在d:\\c\\找不到date.txt文件时,指定文件与路径
{
printf( "please input your date filename and director:\n" );
scanf( "%s", filename );
if ( !filename )
{
printf( "No such file.Please input the data filename and director again!\n" );
scanf( "%s", filename );
}
fp = fopen( filename, "r" );
}
while ( !feof( fp ) )
//若读date.txt文件时将文件的最后一行多读一次,有可能是文件的最后一行有换行,将光标退格到最后一个字,再将文件另存一下date1.txt。
{
//读入项目编号,名次,姓名,校编号,得分
fscanf( fp, "%d %d %d %s %d %d", &temp.item, &temp.item_Od, &temp.order, temp.name, &temp.school_id, &temp.score );
ListInsert_Sq( L, i, temp ); //利用顺序表的插入操作
i++;
}
fclose( fp );
return OK;
}
/************************************
参数:线形表结构L
功能:从键盘输入信息
返回:返回最后输入记录的项目编号
************************************/
int GetFromKey( SqList &L )
{
int i = 0;
ElemType temp;
printf( "item number(0 to end input)\n" );
printf( "item number(item number is even get 5 ,odd get 3):" );
scanf( "%d", &temp.item );
if ( !temp.item )
{
return ERROR;
}
while (temp.item)
{
printf( "item_order:(5 / 3)" );
scanf( "%d", &temp.item_Od );
printf( "order:(1--10)" );
scanf( "%d", &temp.order );
if ( temp.item % 2 != 0 ) //项目编号为奇数的项目取前五名
{
switch ( temp.order )
{
case 1: temp.score=7; break; //第一名得7分
case 2: temp.score=5; break; //第二名得5分
case 3: temp.score=3; break; //第三名得3分
case 4: temp.score=2; break; //第四名得2分
case 5: temp.score=1; break; //第五名得1分
}
}
else //否则,项目编号为偶数的项目取前三名
{
switch ( temp.order )
{
case 1: temp.score=5; break; //第一名得5分
case 2: temp.score=3; break; //第二名得3分
case 3: temp.score=2; break; //第三名得2分
}
}
printf( "school_id:" );
scanf( "%d", &temp.school_id );
printf( "name(NO blank ):" );
scanf( "%s", temp.name );
getchar( );
ListInsert_Sq( L, L.length + 1, temp );
printf( "item number:" );
scanf( "%d", &temp.item );
if ( !temp.item )
{
break;
}
i++;
}
return i;
}
/***************************
参数:线形表结构L
功能:输出各学校成绩单
***************************/
void OutSchoolScore( SqList L )
{
int sh_id_min, sh_id_max, i, j;
sh_id_min = SchooLIDMin( L );//sh_id_min是school_id的最小值
sh_id_max = SchooLIDMax( L );//sh_id_max是school_id的最大值
printf( "学校编号 项目编号 类型符 名次 名字 得分\n" );
for ( i = sh_id_min; i <= sh_id_max; i++ )
{
for ( j = 0; j < L.length; j++ )
{
if( L.elem[ j ].school_id == i )
{
Print( L, j );
}
}
}
}
/***************************
参数:线形表结构L
功能:输出各学校总成绩
***************************/
void OutTotleTable( SqList L )
{
int sh_id_min, sh_id_max, i, j, boyscore = 0, girlscore = 0;
sh_id_min = SchooLIDMin( L );//sh_id_min是school_id的最小值
sh_id_max = SchooLIDMax( L );//sh_id_max是school_id的最大值
printf( "学校编号 男子总份 女子总分 团体总分\n" );
for ( i = sh_id_min; i <= sh_id_max; i++ )
{
for ( j = 0; j < L.length; j++ )
if ( L.elem[ j ].school_id == i )
{
if (L.elem[ j ].item_Od == 5 )
{
boyscore += L.elem[ j ].score;
}
if ( L.elem[ j ].item_Od == 3 )
{
girlscore += L.elem[ j ].score;
}
}
printf( "%-12d %-8d %-8d %-8d\n", i, boyscore, girlscore, boyscore + girlscore );
}
}
/********************
功能:显示主菜单
********************/
int Menu( void )
{
int number;
printf( "\n main menu \n" );
printf( "1. input date from file\n" );
printf( "2. input date by KeyBord\n" );
printf( "3. output school grade table\n" );
printf( "4. output group sum total table\n" );
printf( "5. put date to file\n" );
printf( "0. exit\n");
printf( "-----------------------\n" );
printf( "Input Select(1,2,3,4,...,0)" );
scanf( "%d", &number );
getchar( );
return number; //获得选择
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -