38

问答题 38 /50

网球中心共有100个网球场,每个单位可以来申请1到100的场地,申请的场地编号必须是连续的,如果场地已经被其他单位占用,就不能再次使用,而且单位在使用完场地后必须归还。请设计一个完整的系统。

参考答案

Tennis.h
struct TennisGround
{
int num;
char *agentName;
};
 
typedef struct TennisGround TG;
  
void mallocTG(TG *total);
void freeTG(TG *total);
Tennis.c
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>

#include "Tennis.h"
void mallocTG( TG *total )
{
    int size, start, count = 0;
    char    *agentName = (char *) malloc( sizeof(char) * 10 );


    printf( "Please input your agentName:" );
    scanf( "%s", agentName );
    printf( "Please input the size of the TennisGround:" );
    scanf( "%d", &size );
    printf( "Please input the TennisGround number you want to start:" );
    scanf( "%d", &start );
    if ( (total + start)->agentName != " " )
    {
        printf( "malloc failed!\n" );
        exit( -1 );
    }else  {
        while ( count < size )
        {
            (total + start + count)->agentName = agentName;
            count++;
        }
    }
}

void freeTG( TG* total )
{
    char *an = (char *) malloc( sizeof(char) * 10 );
    printf( "please input agentName you want to free:" );
    scanf( "%s", an );
    int count = 0;
    while ( count < 100 )
    {
        if ( strcmp( (total + count)->agentName, an ) == 0 )
            (total + count)->agentName = " ";
        count++;
    }
}

int main()
{
    int i;
    int sw;
    TG  *total = (TG *) malloc( sizeof(TG) * 100 );

    for ( i = 0; i < 100; i++ )
    {
        (total + i)->num    = i;
        (total + i)->agentName  = " ";
    }

    while ( 1 )
    {
        printf( "*******Tennis Ground Mallocation******************\n" );
        for ( i = 0; i < 100; i++ )
        {
            printf( "%d(%s) ", (total + i)->num, (total + i)->agentName );
            if ( i % 5 == 0 )
                printf( "\n" );
        }
        printf( "\n" );
        printf( "**************************************************\n" );
        printf( "Please input your choosen:(1-malloc,2-free):" );
        scanf( "%d", &sw );
        if ( sw == 1 )
            mallocTG( total );
        else
            freeTG( total );
    }
}