Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <ctype.h>
- #include <stdlib.h>
- typedef struct nodo{
- char codice[50];
- char nome[50];
- char cognome[50];
- char data[50];
- char via[50];
- char citta[50];
- int cap;
- int dataformattata;
- struct nodo* next;
- }anagrafica,*link;
- int formattadata(char *data);
- void strtolower(char *parola);
- link creanodo(anagrafica struttura, link next);
- link inseriscinodo(link nodo, anagrafica struttura);
- void stampalista(link head);
- anagrafica acquisiscinodotastiera(void);
- void acquisiscinodofile(link *head);
- typedef enum
- {
- acquisisci_tastiera,acquisisci_file,ricerca,cancellazione_codice,cancellazione_date,stampa_file,errore
- }comandi;
- comandi leggicomando();
- int main() {
- int flag=0;
- anagrafica temporanea;
- link head=NULL;
- while(flag==0)
- {
- switch (leggicomando()) {
- case acquisisci_tastiera:
- temporanea=acquisiscinodotastiera();
- head=inseriscinodo(head,temporanea);
- break;
- case acquisisci_file:
- acquisiscinodofile(&head);
- break;
- case ricerca:
- break;
- case cancellazione_codice:
- break;
- case cancellazione_date:
- break;
- case stampa_file:
- stampalista(head);
- break;
- case errore:
- printf("Comando sbagliato,esco dal programma\n");
- flag=1;
- break;
- }
- }
- return 0;
- }
- int formattadata(char *data)
- {
- int anno,mese,giorno;
- int ris;
- sscanf(data,"%d/%d/%d",&giorno,&mese,&anno);
- ris=giorno+(mese*100)+(anno*10000);
- return ris;
- }
- comandi leggicomando()
- {
- char parola[30];
- comandi c;
- char tabella[6][30]={"acquisisci_tastiera","acquisisci_file","ricerca","cancellazione_codice","cancellazione_date","stampa_file"};
- printf("Inserisci il comando che vuoi tra:\n");
- printf("Acquisisci_tastiera per aggiungere alla lista un dato item da tastiera\n");
- printf("Acquisisci_file per aggiungere alla lista un dato item da file\n");
- printf("Ricerca per cercare un elemento con il codice\n");
- printf("Cancella_codice per cancellare un elemento dalla lista con il codice desiderato\n");
- printf("Cancella_date per eliminare tutti gli elementi della lista compresi fra due date\n");
- printf("Stampa_file per stampare la lista\n\n");
- scanf("%s",parola);
- strtolower(parola);
- c=acquisisci_tastiera;
- while (c<errore && strcmp(tabella[c],parola)!=0)
- {
- c++;
- }
- return c;
- }
- void strtolower(char *parola)
- {
- int i;
- for (i=0;i<strlen(parola);i++)
- parola[i]=tolower(parola[i]);
- return;
- }
- link creanodo(anagrafica struttura, link next)
- {
- link x;
- x=(anagrafica*)malloc(sizeof(anagrafica));
- if(x==NULL)
- {
- return NULL;
- }
- else
- {
- strcpy(x->nome,struttura.nome);
- strcpy(x->cognome,struttura.cognome);
- strcpy(x->codice,struttura.codice);
- x->cap=struttura.cap;
- strcpy(x->citta,struttura.citta);
- strcpy(x->data,struttura.data);
- strcpy(x->via,struttura.via);
- x->dataformattata=formattadata(struttura.data);
- x->next=next;
- }
- return x;
- }
- anagrafica acquisiscinodotastiera(void)
- {
- anagrafica base;
- printf("Inserisci nome:\n");
- scanf("%s",base.nome);
- printf("Inserisci cognome:\n");
- scanf("%s",base.cognome);
- printf("Inserisci via:\n");
- scanf("%s",base.via);
- printf("Inserisci codice:\n");
- scanf("%s",base.codice);
- printf("Inserisci cap:\n");
- scanf("%d",&base.cap);
- printf("Inserisci citta:\n");
- scanf("%s",base.citta);
- printf("Inserisci data in formato gg/mm/aaaa:\n");
- scanf("%s",base.data);
- base.dataformattata=formattadata(base.data);
- return base;
- }
- link inseriscinodo(link nodo, anagrafica struttura)
- {
- link x,p,tmp;
- if (nodo==NULL)
- {
- return creanodo(struttura,nodo);
- }
- for(x=nodo->next,p=nodo;x->next!=NULL;p=x,x=x->next)
- {
- if(p->dataformattata<struttura.dataformattata && struttura.dataformattata<x->dataformattata)
- {
- tmp=creanodo(struttura,p->next);
- p->next=tmp;
- }
- }
- return nodo;
- }
- void stampalista(link head)
- {
- if(head==NULL)
- {
- return;
- }
- printf("%s %s %s %s %d %s %s\n ",head->nome,head->cognome,head->via,head->codice,head->cap,head->citta,head->data);
- stampalista(head->next);
- return;
- }
- void acquisiscinodofile(link *head)
- {
- char nomefile[50];
- FILE* fp;
- anagrafica tmp;
- printf("Inserisci il nome del file\n");
- scanf("%s",nomefile);
- fp=fopen(nomefile,"r");
- if(fp==NULL)
- {
- printf("File non letto\n");
- return;
- }
- while (fscanf(fp,"%s %s %s %s %d %s %s",tmp.nome,tmp.cognome,tmp.via,tmp.codice,&tmp.cap,tmp.citta,tmp.data)!=EOF)
- {
- tmp.dataformattata=formattadata(tmp.data);
- (*head)= inseriscinodo(*head,tmp);
- }
- fclose(fp);
- return;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement