ecco l'intero progetto (divertitevi
)
codice:
/*-----------------------------<| H e a d e r |>-----------------------------*/
#include <stdio.h> // Per le funzioni Input/Output
#include <string.h> // Per le funzioni gets e strcmp
#define MAXREC 30 // Numero massimo di record
#define MAXCHAR 31 // Lunghezza massima dati record
#define MENU 0 // Opzioni del menu equivalgono-
#define INS 1 // a costanti. Ad ogni costante viene-
#define CAN 2 // assegnata un operazione (case).
#define RIC 3 // Vengono definite nel caso si vogliano-
#define VIS 4 // modificare i valori delle costanti-
#define OUT 100 // assegnate ad ogni operazione.
struct record
{
char nome [MAXCHAR];
char cognome [MAXCHAR];
char indirizzo [MAXCHAR];
int eta;
};
// Vettore anagrafico di MAXREC record
struct record rubrica[MAXREC];
// Inizializza anagrafico
int indice = 0;
// Dichiarazione funzioni
int menu(void); // Visualizza il menu
int inserisci(int); // Inserisci un record
void ricerca(void); // Ricerca un record
struct record *scansione(char *, char *, int); // Avvia ricerca
void elimina(struct record *); // Elimina un record
void cancella(void); // Avvia cancellazione
void vedirecord(struct record *); // Visualizza un record
void vedirubrica(void); // Visualizza la rubrica
/*-----------------------------<| S o u r c e |>-----------------------------*/
#include "header.h" // Include il file header dove sono dichiarate le fx
// MENU - Visualizza il menu
int menu(void)
{
int scelta;
char invio;
printf("\n\n\n\n\n\n\n");
printf(" ******** RUBRICA ********");
printf("\n -------------------------");
printf("\n\n 1. Inserisci un record");
printf("\n\n 2. Cancella un record");
printf("\n\n 3. Ricerca un record");
printf("\n\n 4. Visualizza la rubrica");
printf("\n\n 0. Esci");
printf("\n\n\n -> Scegliere un opzione: ");
scanf("%d", &scelta);
scanf("%c", &invio);
printf("\n");
switch(scelta)
{
case 0:
case 1:
case 2:
case 3:
case 4:
return(scelta);
default:
break;
}
}
// INSERISCI - Inserisci un record
int inserisci(int pos)
{
char invio;
if(pos>=MAXREC)
{printf(" Anagrafe pieno");
scanf("%c", &invio);
return(pos);
}
printf("\nINSERIMENTO RECORD");
printf("\n------------------\n\n");
printf("\nCognome : ");
gets(rubrica[pos].cognome);
printf("\nNome : ");
gets(rubrica[pos].nome);
printf("\nIndirizzo : ");
gets(rubrica[pos].indirizzo);
printf("\nEta' : ");
scanf("%d", &rubrica[pos].eta);
scanf("%c", &invio);
pos++;
return(pos);
}
// CANCELLA - Elimina un record
void cancella(void)
{
char pausa;
char cognome[MAXCHAR];
char nome[MAXCHAR];
int eta;
struct record *RECORD;
printf("\n\t\tCANCELLA RECORD");
printf("\n\t\t------\n\n");
printf("\nCognome : ");
gets(cognome);
printf("\nNome : ");
gets(nome);
printf("\nEta' : ");
scanf("%d", &eta);
scanf("%c", &pausa);
RECORD = scansione(cognome, nome, eta);
if(RECORD == NULL)
{printf("\nRecord non presente nella rubrica");
scanf("%c", &pausa);
return;
}
// VEDIRECORD - Visualizza un record
vedirecord(RECORD);
printf("\nConfermi cancellazione? (S/N) ");
scanf("%c", &pausa);
if(pausa=='S' || pausa=='s')
{elimina(RECORD); // Elimina un record
return;
}
}
// ELIMINA - Elimina un record
void elimina(struct record *p)
{
strcpy(p->cognome, "");
strcpy(p->nome, "");
strcpy(p->indirizzo, "");
p->eta = 0;
}
// RICERCA - Ricerca record se presente
void ricerca(void)
{
char pausa;
char cognome[MAXCHAR];
char nome[MAXCHAR];
int eta;
struct record *RECORD;
printf("\n\t\tRICERCA RECORD");
printf("\n\t\t------\n\n");
printf("\nCognome : ");
gets(cognome);
printf("\nNome : ");
gets(nome);
printf("\nEta' : ");
scanf("%d", &eta);
scanf("%c", &pausa);
RECORD = scansione(cognome, nome, eta);
if(RECORD == NULL) //Condizione If
{printf("\nRecord non presente nella rubrica");
scanf("%c", &pausa);
return;
}
vedirecord(RECORD);
scanf("%c", &pausa);
}
// SCANSIONE - Ricerca record con scansione vettoriale
struct record *scansione(char *COGNOME, char *NOME, int ETA)
{
int INDICE;
for (INDICE=0; INDICE<=indice; INDICE++)
{if(strcmp(COGNOME, rubrica[INDICE].cognome)==0)
if(strcmp(COGNOME, rubrica[INDICE].nome)==0)
if(ETA == rubrica[INDICE].eta)
return(&rubrica[INDICE]);
}
return(NULL);
}
// VEDIRECORD - Visualizza un record
void vedirecord(struct record *p)
{
printf("\n\n------------------\n");
printf("\n\t\tCognome : %s", p->cognome);
printf("\n\t\tNome : %s", p->nome);
printf("\n\t\tIndirizzo : %s", p->indirizzo);
printf("\n\t\tEta' : %d", p->eta);
printf("\n\n------------------\n");
}
// VEDIRUBRICA - Visualizza l'intera rubrica
void vedirubrica(void)
{
int INDICE;
char pausa;
struct record *RECORD = &rubrica[0];
for(INDICE=0; INDICE<indice; INDICE++)
{vedirecord(RECORD++);
scanf("%c", pausa);
}
}
/*-------------------------------<| M a i n |>-------------------------------*/
#include <stdio.h> // I/O
#include <string.h> // Per le funzioni gets e strcmp
#include "header.h" // Include il file header dove sono dichiarate le fx
main()
{
int scelta = MENU; // Dichiara scelta uguale a 0
while(scelta!=OUT) // Quando scelta diverso da 100
{
switch(scelta)
{
case MENU: // Caso 0 (Fine)
scelta = menu();
if(scelta == MENU) // Se scelta uguale a 0
{scelta = OUT; } // Scelta diventa uguale a 100
break;
case INS: // Caso 1 (Inserisci)
indice = inserisci(indice);
scelta = MENU; // Scelta azzerato
break;
case CAN: // Caso 2 (Cancella)
cancella();
scelta = MENU; // Scelta azzerato
break;
case RIC: // Caso 3 (Ricerca)
ricerca();
scelta = MENU; // Scelta azzerato
break;
case VIS: // Caso 4 (Visualizza rubrica)
vedirubrica();
scelta = MENU; // Scelta azzerato
break;
} // Fine switch
} // Fine while
}
Originariamente inviato da unit1
e se modifichi una delle due: INDICE e indice. potrebbe essere questo...
naaaa, il c in teoria distingue Maiuscole/Minuscole. Non credo...