⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sport.h

📁 这是我的数据结构作业<运动会分数统计系统>的代码,可读性很好.大家可以做为参考.cjhacker.
💻 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 + -