Ciao a tutti, eccomi ancora qua, stò continuando ad imparare a "programmare"(permettetemi la parola, anche se sono agli albori, ma fà molto figo!!!). CERTO CHE LE SCLERATE FANNO PARTE DEL PROGRAMMATORE, NEVVERO???
A questo giro mi sono imbattuto in programma di anagrafe, ovvero ho la possibilità di inserire un n. prefissato di persone, cancellarle dall'elenco e ricercare UNA data persona nell'elenco o addirittura visionare tutta l'anagrafe.
Ok. Il fatto, è che all'atto dell'esecuzione, se inserisco una persona da ricercare nell'elenco delle persone da me inserite manualmente, il programma va in blocco, non fa niente, è probabile che la funzione creata per la ricerca faccia si che mandi in loop il tutto e quindi un'ipotesi.... Ma ancora non ne sono convinto
Sono qua....mi rimetto alla clemenza della corte!!!
C'è qualcuno che mi riesce a dare una dritta????
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXELE 30
#define DIM 31
#define MENU 0
#define INS 1
#define CAN 2
#define RIC 3
#define VIS 4
#define OUT 100
/*STRUTTURA CHE MODELLA UNA PERSONA*/
struct per{
char cognome[DIM];
char nome[DIM];
char ind[DIM];
int eta;
};
/* VETTORE PERSONE*/
struct per anag[MAXELE];
/* NUMERO DI ELEMENTI ALLOCATI NEL VETTORE ANAG*/
int index=0;
int men_per(void);
int ins_per(int);
struct per *cer_per(char*,char*,int);
void eli_per(struct per *);
void can_per(void);
void ric_per(void);
void vis_per(struct per *);
void vis_anagrafe (void);
/*PRESENTA IL MENU' E LANCIA LA FUNZIONE SCELTA*/
void main() /* è possibile che il void davanti al main sia opzionale*/
{
int scelta=MENU;
while(scelta!=OUT){
switch(scelta){
case MENU:
scelta = men_per();
if(scelta==MENU)
scelta=OUT;
break;
case INS:
index=ins_per(index);
scelta=MENU;
break;
case CAN:
can_per();
scelta=MENU;
break;
case RIC:
ric_per();
scelta=MENU;
break;
case VIS:
vis_anagrafe();
scelta=MENU;
break;
}
}
system("pause");
}
/* Menù di selezione*/
int men_per(void)
{
int scelta;
char invio;
int true=1;
while(true){
printf("\n\n\n\n\n\\n\n\n\n\n\n\n\n");
printf("\t\t\t\t ANAGRAFE");
printf("\n\n\n\t\t\t 1. Immissione Persona: ");
printf("\n\n\n\t\t\t 2. Cancellazione Persona: ");
printf("\n\n\n\t\t\t 3. Ricerca Persona: ");
printf("\n\n\n\t\t\t 4. Visualizza Anagrafe: ");
printf("\n\n\n\t\t\t 0. Fine");
printf("\n\n\n\t\t\t Scegliere un'opzione: ");
scanf("%d", &scelta);
scanf("%c",&invio);
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n");
switch(scelta) {
case 0:
case 1:
case 2:
case 3:
case 4:
return (scelta);
default:
break;
}
}
return(0);
}
/* INSERISCE PERSONA NELL'ANAGRAFE*/
int ins_per(int pos)
{
char invio;
if(pos>=MAXELE) {
printf("Non si possono inserire altri nomi.");
scanf("%c",&invio);
return(pos);
}
printf("\n\t\tINSERIMENTO PERSONA");
printf("\n Cognome: ");
gets(anag[pos].cognome);
printf("\n Nome:");
gets(anag[pos].nome);
printf("\n Indirizzo:");
gets(anag[pos].ind);
printf("\n Età :");
scanf("%d",&anag[pos].eta);
scanf("%c",&invio);
pos++;
return(pos);
}
/* cancella persona dall'anagrafe se presente*/
void can_per (void)
{
char pausa;
char cognome[DIM],nome[DIM];
int eta;
struct per *ps;
printf("\n\n\n\\t\t\t CANCELLA PERSONA");
printf("\n\n-----\t\t");
printf("\nCognome: ");
gets(cognome);
printf("\nNome: ");
gets(nome);
printf("\n Età: ");
scanf("%d",&eta);
scanf("%d",&pausa);
/*invoca la ricerca della persona*/
ps=cer_per(cognome,nome,eta);
if(ps==NULL){
printf("Persona non presente in anagrafe");
scanf("%c",&pausa);
return;
}
/*invoca la visualizzazione della persona*/
vis_per(ps);
printf("\n Confermi Cancellazione? (s/n) ");
scanf("%c",&pausa);
if(pausa=='S'||pausa=='s') {
eli_per(ps);
return;
}
}
/* elimina la persona se presente nell'anagrafe*/
void eli_per(struct per *p)
{
strcpy(p->cognome, "");
strcpy(p->nome, "");
strcpy(p->ind, "");
p->eta=0;
}
/*scansione sequenziale del vettore anag alla ricerca di una persona
che abbia determinati cognome nome ed età */
struct per *cer_per(char *cg,char *nm, int et)
{
int i=0;
for(i=0;i<=index;i++){
if(strcmp(cg,anag[i].cognome)==0)
if(strcmp(nm,anag[i].nome)==0)
if(et==anag[i].eta)
return(&anag[i]);
}
return(NULL);
}
/*ricerca persona se presente nell'anagrafe*/
void ric_per(void)
{
char pausa;
char cognome[DIM],nome[DIM];
int eta;
struct per *ps;
/*inserimento dati persona da ricercare*/
printf("\n\n\n\\t\t\t RICERCA PERSONA");
printf("\n\n-----\t\t\n");
printf("\nCognome: ");
gets(cognome);
printf("\nNome: ");
gets(nome);
printf("\n Età: ");
scanf("%d",&eta);
scanf("%d",&pausa);
/*INVOCA LA FUNZIONE DI SCANSIONE SEQUENZIALE*/
ps=cer_per(cognome,nome,eta);
if(ps==NULL) {
printf("\n Persona non presnte in anagrafe ");
scanf("%c",&pausa);
return;
}
vis_per(ps);
scanf("%c",&pausa);
}
/*visualizza persona*/
void vis_per(struct per *p)
{
printf("\n\n\n--------------\n");
printf("\n\n\tCognome: %s",p->cognome);
printf("\n\n\tnome: %s",p->nome);
printf("\n\n\tEtà: %d",p->eta);
printf("\n\n\n--------------\n");
}
/*visualizza anagrafe completa*/
void vis_anagrafe(void)
{
int i;
char pausa;
struct per *ps=&anag[0];
for(i=0;i<=index;i++){
vis_per(ps++);
scanf("%c",&pausa);
}
}