PDA

Visualizza la versione completa : [C] Programma gestione archivio


morbidoso
13-07-2012, 08:43
Dovrei scrivere un programma C per la gestione dell’archivio dei soci di un club di macchine d'epoca. In particolare, i dati da mantenere per ciascun associato sono i seguenti:Cognome (stringa di massimo 20 caratteri, può contenere spazi al suo interno),Nome (stringa di massimo 20 caratteri, può contenere spazi al suo interno),Codice fiscale,Indirizzo e-mail,Vetture possedute.Ogni vettura è caratterizzata da:Marca,modello,anno di produzione.definire le seguenti funzioni:Socio: funzione che ha come parametri i dati di una persona e li inserisce nella struttura dati atta a memorizzarli: essa deve leggere le informazioni da standard input ed inserirle in modo ordinato rispetto al cognome e nome; Email: funzione che, accettando in ingresso un modello di vettura ed un periodo temporale definito da due anni, visualizzi su standard output gli indirizzi e-mail di tutti i soci che possiedono una vettura del tipo definito e prodotta nel periodo dato in input;Vettura:funzione che accettando in ingresso il codice fiscale di un socio, permette di aggiungere una vettura a lui associata; main: all’interno del main predisporre un opportuno menu che permetta di scegliere e far eseguire le diverse funzioni implementate.
Allora inizio cosi:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 21

typedef struct *lpointer;
typedef struct {
char marca [MAX];
char modello [MAX];
int anno;
}vet;

typedef struct {
char cognome [MAX];
char nome [MAX];
codfis [MAX];
email [MAX];
vet auto;
lpointer next;
}user;
lpointer entryp=NULL

void socio();
void email();
void vettura ();
void aggiungi(lpointer pn);
lpointer* cerca (lpointer* inizio, char us);
void inserisci(*lpointer*pins,lpointer pnodo);

main (){
int scelta;
for(;; ) {
printf("\nMenù archivio soci");
printf("n1) Aggiunta di un socio ");
printf("n2) Email soci che possiedono una vettura specifica");
printf("n3) Aggiunta vettura socio ");
prinft("n0) Fine");
printf("\nScelta operazione (1,2,3,0) ");
scanf("%d", &scelta)
if(!scelta)
break;
switch (scelta) {
case 1:
socio ();
break;
case 2:
email():
break;
case 3:
vettura ();
}
}
return 0;
}
void socio () {
lpointer nuovo;
nuovo=(lpointer) malloc (size of (user));
if (nuovo==NULL){
printf ("\nMemoria insufficente");
}else{
printf("\nInserimento nuovo Socio");
printf ("\nInserisci nome : );
gets(nuovo->nome);
printf(\nInserisci cognome : )
gets(nuovo->cognome);
prinf(\nInserisci email : );
gets(nuovo->email);
printf(\nInserisci codice fiscale : );
gets(nuovo->codfis);
printf(\nInserisci vettura : );
adesso come inserisco la vettura?
poi continuando
aggiungi(nuovo);
}
}
void aggiungi(lpointer pn) {
lpointer *posins;
posins=cerca(&entryp,pn->cognome);
inserisci(posins,pn);
lpointer* cerca(lpointer*inizio, char us)
if(*inizio==NULL)
return inizio;
if(strcmp((*inizio)->cognome,us)>0))
return inizio;
inizio=cerca (&((*inizio)->next),us);
return inizio;
}
void inserisci(*lpointer*pins,lpointer pnodo){
pnodo->next=*pins;
*pins=pnodo;
}
è giusto? come scrivo le altre 2 funzioni? vi ringrazio in anticipo buona giornata[CODE]

MegaAlchimista
13-07-2012, 10:46
Ogni socio dovrebbe avere un vettore di vetture (o una lista, o un altro container a tuo piacimento) , in questo modo tu puoi aggiungergli tutte le vetture che vuoi quando chiami la funzione apposita.
Per come hai fatto adesso invece il socio possiede una ed una sola vettura

morbidoso
13-07-2012, 11:42
Quindi modifico con
vet auto [5]?
E poi la richiamo con:
printf("\ninserisci modello : )
gets(nuovo->modello)?

MegaAlchimista
13-07-2012, 13:18
Originariamente inviato da morbidoso
Quindi modifico con
vet auto [5]?
E poi la richiamo con:
printf("\ninserisci modello : )
gets(nuovo->modello)?

No il vettore auto sarebbe meglio che fosse dinamico, altrimenti ti devi ricordare quante auto ci hai inserito, per ogni utente (per esempio in user aggiungi un int che è il numero di auto possedute, e quando aggiungi una nuova auto lo incrementi).
Per inserirne uno nuovo fai inserire da tastiera modello marca e anno e lo metti come ultimo


{
//...
vet* auto;
}user

void tuaFunzione(char marca[MAX], char modello[MAX], int anno){
//crei un oggetto vettura con marca, modello, anno di ingresso
//all'ultimo indice di auto inserisci la vettura appena creata
}

Loading