Dei varias arrumadas no código, muitas delas foram falta de atenção como: Ausência de alguns protótipos de função; Trocar uma letra de uma variável; Declarar funçãoes que recebem o tipo de argumento errado; Algumas palavras do C++ escritas errado; E por último voce declarou uma constante como VERDADEIRO, e usou "verdadeiro" em minusculo no programa. Mas não consegui arrumar a função "void ImprimirData( int x, int y )".
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#include <dos.h>
#define FALSO 0
#define VERDADEIRO 1
#define br 32
#define cabtela " CADASTRO DE ATLETAS "
/**********************************/
/** Definições dos Tipos Globais **/
/**********************************/
typedef char str2 [ 3],
str6 [ 7],
str12[13],
str20[21],
str25[26],
str40[41];
typedef struct
{
int codigo;
str25 nome;
str2 nacional;
float pobtidos;
} tm;
typedef tm tv[50];
/*******************************************/
/** Declaração dos protótipos das Funções **/
/*******************************************/
void DefinirCores (void);
void ImprimirTelaBasica( void );
void ImprimirMsg( int beep, int x, int y, char *msg );
void PressionarTecla( void );
int Confirma( int tam, str40 msg );
char *Maiuscula( char *cadeia );
char *Completa( str25 cadeia, int tam );
void InicializarTabAtletas( str12 nomearq, int *ultimo, tv tab );
void MenuPrincipal( char* op );
void MenuListar( char *op );
void ImprimirTelaAtletas( int codigo );
void ExibirAtletas( tm atleta );
int LCod( void );
void ObterInclusao( tm *atleta, int *ultimo );
void IncluirAtletas( int *ultimo, tv tab );
void ObterAlteracao( tm *atleta );
void AlterarAtletas( int ultimo, tv tab );
void ConsultarAtletas( int ultimo, tv tab );
void CompletaZeroDireita (char chave1[], char chave2[]);
void OrdenarTatleta( int tipo, int ultimo, tv tatleta );
void ImprimirCabListagem( void );
void ImprimirTatleta( int ultimo, tm *tatleta );
void ListarAtletas( int ultimo, tv tatleta );
void GravarTabAtletas( str12 nomearq, int ultimo, tv tab );
void ExcluirAtletas( int ultimo, tv tab );
void ImprimirData( int x, int y );
/***************************************************************************/
void LimparArea (int x, int y, int z, int w);
void ImprimirBorda(int x, int y, int z, int w);
void ImprimirLinha(char ch, int x, int y, char n);
/* ************************************/
/* ******** Programa Principal ********/
/* ************************************/
int main( int argc, char *argv[] )
{
if (argc == 3)
{
FILE *arq;
char op, nomearq[ 13 ];
int ultimo=0;
tm tatleta[50];
/* float x = acos( 60 ); Floating Point Format not Linked */
DefinirCores();
ImprimirTelaBasica();
InicializarTabAtletas( argv[1], &ultimo, tatleta );
MenuPrincipal(&op);
while( op != 9 )
{
switch( op )
{
case '1':
IncluirAtletas( &ultimo, tatleta );
case '2':
AlterarAtletas( ultimo, tatleta );
case '3':
ExcluirAtletas( ultimo, tatleta );
case '4':
ConsultarAtletas( ultimo, tatleta );
case '5':
ListarAtletas( ultimo, tatleta );
case '9': break;
default:
ImprimirMsg( VERDADEIRO, 5, 22,
"Opcao invalida..." );
PressionarTecla();
break;
}
MenuPrincipal( &op );
}
GravarTabAtletas( argv[2], ultimo, tatleta );
textbackground( BLACK );
textcolor( WHITE );
clrscr();
printf ("Fim programa");
}
else
{
printf ("\n Erro nos Parametros ! Digite: prog file-in file-out");
}
}
/*
** Definição das Funções
*/
void ImprimirTelaBasica( void )
{
LimparArea( 5, 9, 50, 13 );
ImprimirBorda( 1, 1, 80, 3 );
ImprimirBorda( 1, 7, 80, 19 );
ImprimirBorda( 1, 20, 80, 24 );
ImprimirLinha( 219, 3, 2, 15 );
gotoxy( 30, 2 );
highvideo();
printf( cabtela );
lowvideo();
ImprimirData( 70, 1 );
}
void ImprimirMsg( int beep, int x, int y, char *msg )
{
gotoxy( x, y );
if( beep )
printf( "%c %s", 7, msg );
else
printf( msg );
}
void PressionarTecla( void )
{
ImprimirMsg( VERDADEIRO, 15, 22, "Pressione uma tecla para continuar..." );
getch();
LimparArea( 2, 11, 79, 20 );
}
int Confirma( int tam, str40 msg )
{
char resp;
gotoxy( 5, 22 );
printf( "%s", msg );
resp = toupper( getch() );
while( ( resp != 'S' ) && ( resp != 'N' ) )
{
gotoxy( 5 + tam, 22 );
printf( "%s", msg );
resp = toupper( getch() );
}
if( resp == 'S' )
return VERDADEIRO;
else
return FALSO;
}
char *Maiuscula( char *cadeia )
{
}
char *Completa( str25 cadeia, int tam )
{
int i;
for( i = ( strlen( cadeia ) + 1 ); i <= tam; i++ )
strcat( cadeia, " " );
return cadeia;
}
void NomeArquivo( str12 nomearq, str20 cabini )
{
LimparArea( 2, 5, 79, 18 );
LimparArea( 2, 21, 79, 23 );
gotoxy( 30, 4 );
printf( "%s", cabini );
gotoxy( 23, 10 );
highvideo();
printf( "Entre com o nome do arquivo < nome.ext >" );
lowvideo();
gotoxy( 35, 13 );
scanf( "%s", nomearq ); fflush (stdin);
PressionarTecla();
}
void InicializarTabAtletas( str12 nomearq, int *ultimo, tv tab )
{
FILE *arq;
char c;
int i = 0;
if ((arq = fopen( nomearq, "r" )) == NULL)
{
printf ("Erro na abertura do arquivo de entrada");
*ultimo = -1;
}
else
{
fscanf( arq, "%d", &tab[i].codigo );
while( tab[i].codigo != 0 )
{
fscanf( arq,"%c%25c%c%2c%f",&c,tab[i].nome,&c,tab[i].nacional,
&tab[i].pobtidos );
tab[i].nome[25] = '\0';
tab[i].nacional[2] = '\0';
i++;
fscanf( arq, "%d", &tab[i].codigo );
}
*ultimo = i - 1;
fclose( arq );
}
}
void GravarTabAtletas( str12 nomearq, int ultimo, tv tab )
{
FILE *arq;
int cod;
arq = fopen( nomearq, "w" );
for( cod = 0; cod <= ultimo; cod++ )
fprintf( arq, "%d%c%s%c%s%c%9.2f\n",
tab[cod].codigo, br,tab[cod].nome, br,
tab[cod].nacional, br, tab[cod].pobtidos );
fprintf( arq, "%s%c%s%c%s%c%f","0000",br,"xxxxxxxxxxxxxxxxxxxxxxxxx",
br,"xx",br,0.00 );
fclose( arq );
}
void MenuPrincipal( char * op )
{
LimparArea( 2, 5, 79, 18 );
LimparArea( 2, 22, 79, 23 );
gotoxy( 30, 4 );
printf( " MENU PRINCIPAL " );
gotoxy( 32, 8 );
highvideo();
lowvideo();
printf( " - Incluir Atleta" );
gotoxy( 32, 9 );
highvideo();
printf( "2" );
lowvideo();
printf( " - Alterar Atleta" );
gotoxy( 32, 10 );
highvideo();
printf( "3" );
lowvideo();
printf( " - Excluir Atleta" );
gotoxy( 32, 10 );
highvideo();
printf( "4" );
lowvideo();
printf( " - Consultar Atleta" );
gotoxy( 32, 12 );
highvideo();
printf( "5" );
lowvideo();
printf( " - Listar Atleta" );
gotoxy( 32, 15 );
highvideo();
printf( "9" );
lowvideo();
printf( " - Fim" );
gotoxy( 5, 17 );
ImprimirMsg( FALSO, 5, 12, "Escolha uma opcao: " );
*op = getch();
}
void ImprimirTelaAtletas( int codigo )
{
LimparArea( 2, 5, 79, 18 );
LimparArea( 2, 21, 79, 23 );
gotoxy( 24, 10 );
printf( "Codigo.........: %d", codigo );
gotoxy( 24, 12 );
printf( "Nome...........: " );
gotoxy( 24, 10 );
printf( "Nacionalidade..: " );
gotoxy( 24, 16 );
printf( "Pontos Obtidos.: " );
}
void ExibirAtletas( tm atleta)
{
gotoxy( 42, 12 );
printf( "%s", atleta.nome );
gotoxy( 42, 14 );
printf( "%s", atleta.nacional );
gotoxy( 42, 16 );
printf( "%9.2f", atleta.pobtidos );
}
int LCod( void )
{
int codigo = 0;
LimparArea( 2, 5, 79, 18 );
LimparArea( 2, 21, 79, 23 );
gotoxy( 22, 10 );
printf( "Entre com o Codigo do Atleta: " );
scanf( "%d", &codigo ); fflush (stdin);
return codigo;
}
void ObterInclusao( tm *atleta, int *ultimo )
{
atleta->codigo = *ultimo + 1;
gotoxy( 42, 12 );
gets( atleta->nome );
Completa( Maiuscula( atleta->nome ), 25 );
atleta->nome[25] = '\0';
gotoxy( 42, 12 );
printf( atleta->nome );
gotoxy( 42,14 );
gets( atleta->nacional );
Completa( Maiuscula( atleta->nacional ), 2 );
atleta->nacional[2] = '\0';
gotoxy( 42,14);
printf( atleta->nacional );
gotoxy( 42, 16 );
scanf( "%f", &atleta->pobtidos ); fflush (stdin);
gotoxy( 42, 16 );
printf( "%9.2f", atleta->pobtidos );
}
void IncluirAtletas( int * ultimo, tv tab )
{
do
{
gotoxy( 30, 9 );
printf( " I N C L U S A O " );
LimparArea( 2, 5, 79, 18 );
LimparArea( 2, 21, 79, 23 );
*ultimo= *ultimo;
ImprimirTelaAtletas( *ultimo + 1);
ObterInclusao(&tab [*ultimo], ultimo);
ExibirAtletas (tab [*ultimo] );
PressionarTecla();
}
while ( Confirma( 40, "Deseja incluir outro atleta (s/n)? " ) );
}
void ObterAlteracao( tm atleta )
{
str25 nomalt;
str2 nacalt;
str6 pobalt;
float pobalt1;
gotoxy(42,12);
gets(nomalt);
if( strlen( nomalt ) > 0 )
{
Completa( Maiuscula( nomalt ), 25 );
gotoxy( 42, 12 );
printf( "%s", nomalt );
}
gotoxy( 42, 14 );
gets(nacalt);
if( strlen( nacalt ) > 0 )
{
Completa( Maiuscula( nacalt ), 2 );
gotoxy( 42,14 );
printf( "%s", nacalt );
}
gotoxy( 42, 16 );
gets( pobalt );
if( pobalt > 0 )
pobalt1 = atof( pobalt );
gotoxy( 42, 16 );
printf( "%9.2f", pobalt1 );
if( Confirma( 40, "Dados Ok (s/n) ? " ) )
{
if( strlen( nomalt ) > 0 )
strcpy( atleta.nome, nomalt );
if( strlen( nacalt ) > 0 )
strcpy( atleta.nacional, nacalt );
if( strlen( pobalt ) > 0 )
atleta.pobtidos = pobalt1;
}
}
void AlterarAtletas( int ultimo, tv tab )
{
int codigo;
do
{
gotoxy( 30, 4 );
printf(" A L T E R A C A O ");
LimparArea( 2, 5, 79, 18 );
LimparArea( 2, 21, 79, 23 );
codigo = LCod();
if( ( codigo > 0 ) && ( (codigo-1) <= ultimo ) )
{
if( tab[ultimo].nome[1] != '*' )
{
ImprimirTelaAtletas( codigo );
ExibirAtletas( tab[codigo-1]);
ObterAlteracao( &tab[ codigo-1 ] );
}
else
{
ImprimirMsg( VERDADEIRO,5,22,"Atleta Excluido !" );
PressionarTecla();
}
}
else
{
ImprimirMsg( VERDADEIRO, 5, 20, "Atleta não existe !" );
PressionarTecla();
}
}
while ( Confirma( 40, "Deseja alterar outro atleta(s/n) ? " ) );
}
void ExcluirAtletas( int ultimo, tv tab )
{
int codigo;
do
{
gotoxy( 30, 4 );
printf(" E X C L U S A O ");
LimparArea( 2, 5, 79, 18 );
LimparArea( 2, 21, 79, 23 );
codigo = LCod();
if( ( codigo > 0 ) && ( (codigo-1) <= ultimo ) )
{
if( tab[codigo-1].nome[0] != '*' )
{
ImprimirTelaAtletas( codigo );
ExibirAtletas( tab[codigo-1] );
if( Confirma( 31, "Confirma Exclusao (s/n) ? " ) )
tab[codigo-1].nome[0] = '*';
}
else
{
ImprimirMsg( VERDADEIRO, 5, 22,
"Atleta já Excluido !" );
PressionarTecla();
}
}
else
{
ImprimirMsg( VERDADEIRO, 5, 22, "Atleta não Existe !" );
PressionarTecla();
}
}
while ( Confirma( 40, "Deseja excluir outro atleta (s/n) ? ") );
}
void ConsultarAtletas( int ultimo, tv tab )
{
int codigo;
do
{
gotoxy( 30, 4 );
printf( " C O N S U L T A " );
LimparArea( 2, 5, 79, 18 );
LimparArea( 2, 21, 79, 23 );
codigo = LCod();
if( ( codigo > 0 ) && ( (codigo-1) <= ultimo ) )
{
if( tab[ codigo-1 ].nome[ 0 ] != '*' )
{
ImprimirTelaAtletas( codigo );
ExibirAtletas( tab[ codigo-1 ] );
}
else
{
ImprimirMsg( VERDADEIRO, 5, 22, "Atleta Excluido !" );
PressionarTecla();
}
}
else
{
ImprimirMsg( VERDADEIRO, 5, 22, "Atleta não Existe !" );
PressionarTecla();
}
}
while ( Confirma(40, "Deseja consultar outro atleta (s/n) ? " ) );
}
void CompletaZeroDireita (char chave1[], char chave2[])
{
int i,j;
if (strlen(chave1)<strlen(chave2))
for (i=strlen(chave2),j=strlen(chave1); i>=0;i--, j--)
if (j>=0)
chave1[i]=chave1[j];
else
chave1[i]='0';
else
if (strlen(chave1)>strlen(chave2))
for (i=strlen(chave1),j=strlen(chave2); i>=0;i--, j--)
if (j>=0)
chave2[i]=chave2[j];
else
chave2[i]='0';
}
void OrdenarTatleta( int tipo, int ultimo, tv tatleta )
{
int m, k, n, tocou, dec, sign;
tm aux;
str25 chave1, chave2;
m = ultimo - 1;
k = m;
do
{
tocou = FALSO;
for( n = 0; n <= m; n++ )
{
switch( tipo )
{
case 1:
itoa(tatleta[ n ].codigo,chave1,10);
itoa(tatleta[ n + 1 ].codigo,chave2,10);
CompletaZeroDireita (chave1, chave2);
break;
case 2:
strcpy( chave1, tatleta[ n ].nacional );
strcpy( chave2, tatleta[ n + 1 ].nacional );
break;
}
if (strcmp( chave1,chave2 ) > 0 )
{
aux = tatleta[ n ];
tatleta[ n ] = tatleta[ n + 1 ];
tatleta[ n + 1 ] = aux;
tocou = VERDADEIRO;
k = n;
}
}
m = k;
}
while( tocou );
if (tipo == 2)
{
m = ultimo - 1;
k = m;
do
{
tocou = FALSO;
for (n=0; n <= m; n++)
{
if (strcmp(tatleta[n].nacional,tatleta[n+1].nacional) == 0)
{
gcvt(tatleta[ n ].pobtidos, 9, chave1);
gcvt(tatleta[ n + 1 ].pobtidos, 9, chave2);
if (strcmp(chave1, chave2) < 0)
{
aux = tatleta[n];
tatleta[n] = tatleta[n+1];
tatleta[n+1] = aux;
tocou = VERDADEIRO;
k = n;
}
}
}
m = k;
} while ( tocou );
}
}
void ImprimirCabListagem( void )
{
highvideo();
gotoxy( 10, 6 );
printf( "CODIGO" );
gotoxy( 21, 6 );
printf( "NOME DO ATLETA");
gotoxy( 47, 8 );
printf( "PAIS");
gotoxy( 59, 6 );
printf( "PONTOS OBTIDOS" );
ImprimirLinha( '-', 8, 7, 73 );
lowvideo();
}
void ImprimirTatleta( int ultimo, tm *tatleta )
{
int i, vezes;
gotoxy( 30, 4 );
printf( " I M P R E S S A O " );
LimparArea( 2, 5, 79, 18 );
LimparArea( 2, 21, 79, 23 );
ImprimirCabListagem();
i = 0;
while( i <= ultimo )
{
LimparArea( 2, 8, 79, 18 );
vezes = 0;
while( ( i <= ultimo ) && ( vezes < 10 ) )
{
vezes++;
gotoxy( 10, 7 + vezes );
printf( "%4d%s%s%s%s%s%9.2f", tatleta[ i ].codigo,
" ", tatleta[ i ].nome, " ",
tatleta[i].nacional, " ",
tatleta[ i ].pobtidos );
i++;
}
PressionarTecla();
}
}
void ListarAtletas( int ultimo, tv tatleta )
{
OrdenarTatleta (2, ultimo, tatleta);
ImprimirTatleta(ultimo, tatleta);
OrdenarTatleta (1, ultimo, tatleta);
}
/* ************************************************************
** Funções destinadas a interface gráfica utilizadas (telas) **
** ************************************************************/
/*
** Funcão ImprimirData
** Imprimi a Data corrente do sistema
*/
void ImprimirData( int x, int y )
{
struct date data_sistema;
char *mes[] = { "Jan", "Fev", "Mar", "Abr", "Mai", "Jun",
"Jul", "Ago", "Set", "Out", "Nov", "Dez" };
getdate( &data_sistema );
gotoxy( x, y );
cprintf( "%d %s %d", data_sistema.da_day, mes[data_sistema.da_mon - 1 ],
data_sistema.da_year );
}
/*
** Função ImprimirLinha
** Preenche uma linha com uma sequencia de caracteres
*/
void ImprimirLinha( char ch, int x, int y, int n )
{
int i;
for( i = x; i <= n; i++ )
{
gotoxy( i, y );
cprintf( "%c", char );
}
}
/*
** Função ImprimirBorda
** Imprimi uma Borda na tela
*/
void ImprimirBorda( int x, int y, int z, int w )
{
int i;
gotoxy( x, y );
cprintf( "%c", 201 );
gotoxy( x, w );
cprintf( "%c", 200 );
gotoxy( z, y );
cprintf( "%c", 187 );
gotoxy( z, w );
cprintf( "%c", 188 );
for( i = ( x + 1 ); i <= ( z - 1 ); i++ )
{
gotoxy( i, y );
cprintf( "%c", 205 );
gotoxy( i, w );
cprintf( "%c", 205 );
}
for( i = ( y + 1 ); i <= ( w - 1 ); i++ )
{
gotoxy( x, i );
cprintf( "%c", 186 );
gotoxy( z, i );
cprintf( "%c", 186 );
}
}
/*
** Função LimparArea
** Limpa a Area corrente
*/
void LimparArea( int x, int y, int z, int w )
{
int i, j;
for( i = y; i <= w; i++ )
{
gotoxy( x, i );
for( j = x; j <= z; j++ )
cprintf( "%c", 32 );
}
}
/*
** Função DefinirCores
** Função que defini as cores do sistema
*/
void DefinirCores( void )
{
int corchar, corfun, i;
char c;
textbackground( WHITE );
clrscr();
textcolor( LIGHTBLUE );
ImprimirBorda( 1, 1, 80, 24 );
textcolor( RED );
gotoxy( 10, 3 );
cprintf( "ESCOLHA DE CORES PARA O PROGRAMA " );
textcolor( LIGHTBLUE );
gotoxy( 53, 4 );
cprintf( "FUNDO" );
ImprimirBorda( 50, 5, 60, 14 );
for( i = 0; i <= 7; i++ )
{
textbackground( i );
gotoxy( 51, 6 + i );
cprintf( " " );
textbackground( WHITE );
cprintf( "%3d", i );
}
gotoxy( 64, 4 );
cprintf( "CARACTER" );
ImprimirBorda( 63, 5, 73, 22 );
for( i = 0; i <= 15; i++ )
{
textcolor( i );
gotoxy( 64, 6 + i );
cprintf( "%c%c%c%c%c", 219, 219, 219, 219, 219 );
textcolor( LIGHTBLUE );
cprintf( "%3d", i );
}
gotoxy( 11, 7 );
cprintf( "Quer alterar as cores (s/n)?" );
c = toupper( getch() );
while( ( c != 'S' ) && ( c != 'N' ) )
{
gotoxy( 41, 7 );
cprintf( "%c", 7 );
c = toupper( getch() );
}
if( c = 'S' )
{
gotoxy( 17, 12 );
cprintf( "FUNDO : " );
cscanf( "%d", &corfun );
gotoxy( 17, 15 );
cprintf( "CARACTER: " );
cscanf( "%d", &corchar );
textbackground( corfun );
textcolor( corchar );
while (getch()!=13);
}
}
Espero ter ajudado...