Newsgroup: it.comp.lang.c
Titolo: Codice agenda elettronica

Ciao a Tutti
Avrei bisogno del codice sorgente di una rubrica telefonica in c/c++
eseguibile sotto dos.
Qualcuno sa dove trovarlo in rete.
Sergio



ehi ma è per caso quel progetto che devi presentare entro il 14 marzo?

eseguibile sotto dos.
Postato il 29 giugno del 1999 su questo stesso gruppo, prova a testare
il codice per bene, è probabile che vi sia qualche bug.
/***********************************************
 * RUBRICA.C  
 * --------------------------------------------
 * Gestione di una piccola rubrica di contatti.
 ***********************************************/
#include <stdio.h>
#include <string.h>
typedef enum { FALSO, VERO } flag  ;
typedef struct {
                 flag cancellato ;
                 char nome      [20] ;
                 char cognome   [30] ;
                 char indirizzo [50] ;
                 char telefono  [20] ;
               } tipo_contatto ;
static char leggi_car( void ) ;
static void leggi_stringa( char *, unsigned ) ;
static void chiedi_contatto( tipo_contatto * ) ;
static void visualizza_contatto( tipo_contatto ) ;
static void inserimento_nuovo_contatto( void ) ;
static void modifica_contatto( void ) ;
static void visualizzazione_contatti( void ) ;
static FILE * rubrica ;
char leggi_car()
{
    int c = getchar() ;
    if ( c != '\n' ) while ( getchar() != '\n' ) ;
    return c ;
}
void leggi_stringa( char * s, unsigned l )
{
     fgets( s, l, stdin ) ;
     s [strlen( s )-1] = '\0' ;
}
void chiedi_contatto( tipo_contatto * Cp )
{
     puts( "\nRichiesta contatto :\n " ) ;
     printf( "Nome......: " ) ;
     leggi_stringa( Cp->nome, sizeof Cp->nome ) ;
     printf( "Cognome...: " ) ;
     leggi_stringa( Cp->cognome, sizeof Cp->cognome ) ;
     printf( "Indirizzo.: " ) ;
     leggi_stringa( Cp->indirizzo, sizeof Cp->indirizzo ) ;
     printf( "Telefono..: " ) ;
     leggi_stringa( Cp->telefono, sizeof Cp->telefono ) ;
     Cp->cancellato = FALSO ;
}
void visualizza_contatto( tipo_contatto C )
{
     printf ( "\nNome......: %s\n", C.nome ) ;
     printf ( "Cognome...: %s\n", C.cognome ) ;
     printf ( "Indirizzo.: %s\n", C.indirizzo ) ;
     printf ( "Telefono..: %s\n", C.telefono ) ;
     printf ( "-----------\n" ) ;
}
void inserimento_nuovo_contatto()
{
     tipo_contatto C ;
     chiedi_contatto( &C ) ;
     fseek( rubrica, 0L, SEEK_END ) ;
     fwrite( &C, sizeof C, 1, rubrica ) ;
}
void modifica_contatto()
{
     tipo_contatto C ;
     int r ;
     unsigned long pos = 0L ;
     while ( fread ( &C, sizeof C, 1, rubrica ) )
           if ( C.cancellato == FALSO )
           {
                 visualizza_contatto ( C ) ;
                 printf ( "\nda modificare (s/n) ?" ) ;
                 r = leggi_car() ;
                 if ( r == 's' )
                 {
                    printf ("\nda cancellare (s/n) ?" ) ;
                    r = leggi_car() ;
                    if ( r == 's' )
                       C.cancellato = VERO ;
                    else
                       chiedi_contatto( &C ) ;
                    fseek( rubrica, pos, SEEK_SET ) ;
                    fwrite( &C, sizeof C, 1, rubrica ) ;
                    break ;
                 }
                 pos += sizeof C ;
           }
}
void visualizzazione_contatti()
{
     tipo_contatto C ;
     while ( fread ( &C, sizeof C, 1, rubrica ) )
           if ( C.cancellato == FALSO )
           {
              visualizza_contatto ( C ) ;
              printf ( "premi INVIO per continuare...\n" ) ;
              leggi_car() ;
           }
}
int main()
{
    char r ;
    if ( ( rubrica = fopen ( "rubrica.dat", "r+b" ) ) == NULL )
    {
       puts( "\aArchivio inesistente...costruzione in corso..." ) ;
       rubrica = fopen ( "rubrica.dat", "w+b" ) ;
    }
    do
    {
       puts( "\nGestione di una rubrica - Menu principale" ) ;
       puts( "-------------------------------------------\n" ) ;
       puts( "Scegli l'operazione da compiere :\n" ) ;
       puts( "  1 - Inserimento Nuovo Contatto" ) ;
       puts( "  2 - Modifica/Cancellazione Contatto" ) ;
       puts( "  3 - Visualizzazione Contatti" ) ;
       puts( "  9 - Uscita\n" ) ;
       printf ( ">" ) ; r = leggi_car() ;
       switch ( r )
       {
            case '1' : inserimento_nuovo_contatto() ;
                     rewind ( rubrica ) ;
                     break ;
            case '2' : modifica_contatto() ;
                     rewind ( rubrica ) ;
                     break ;
            case '3' : visualizzazione_contatti() ;
                     rewind ( rubrica ) ;
                     break ;
       }
    } while ( r != '9' ) ;
    fclose( rubrica ) ;
    return 0 ;
}
-- 
Andrea Laforgia
#exclude <windows.h>

 ha scritto nel messaggio
news:7ln23vslqs27s6p3l...@4ax.com...

AHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAH.......
...c***o mi rido.... ho ancora quel problema col compilatore....
HEEEEEEEEEEEEEEELPPPPPPPPPPPPPPPPPP!!!!

Questo non lo aiutera' certo ad imparare il C
Ph.

Questo non lo aiutera' certo ad imparare il C
Problemi suoi, non miei.


     printf( "Nome......: " ) ;
forse qui non ci starebbe male 
fflush(stdout);
analogamente gli altri senza i '\n'
Cmq sembra bello

fflush(stdout);
No, non serve.
