Newsgroup: it.comp.programmare
Titolo: programmino in C: ciack 2, si gira :-)

 Alla fine il programma per rinominare i file me lo sono scaricato già 
fatto... :-|
Ma a questo punto non mi do x vinto! :-)
Visto che quello era un codice che andava oltre le mie conoscenze, mi sono 
chiesto: perchè non creare un programino adeguato alle mie conoscenze?
A questo punto ho preso un programmino che avevo fatto qualche mese fa', una 
rubrica telefonica!
Il programma funziona perfettamente, ho il mio menu con 7 opzioni e di volta 
in volta scelgo che operazioni fare.
Ma se adesso volessi fare un programma che utilizza questo codice ma che 
abbia una interfaccia, cosa bisogna fare!?
-- 
Cicerone
*********************
Il primo Newsgroup sulla Balbuzie
http://www.newsland.it/nr/browse/it-alt.salute.balbuzie/
**********************
C.I.B. Comunità Italiana Balbuzienti
www.balbuzienti.altervista.org/md-pro/index.php
**********************

 codice ma che abbia una interfaccia, cosa bisogna fare!?
Direttamente? Dubito ci si riesca. Cosa bisogna fare? Studiare. 
Fai un corso, acquista un libro, cerca sul Web. Ma non ci si 
improvvisa programmatori.
Stefano. 

 improvvisa programmatori.
Beh, non voglio improvvisare, ma vorrei sapere come si associa una 
interfaccia ad un codice. Esistono dei programmi fatti proprio per questo o 
cos'altro?
Gli unici "programmi" con interfaccia che ho fatto sono in Acces, ma lì è 
più semplice, basta vreare pulsanti, elenchi, ed altro ed associare agli 
eventi (click, doppio click, ...) il codice VBA.
Ma se voglio fare girare un programma in C ed associarlo ad una interfaccia, 
cosa bisogna fare?
Questo è il codice:
/* RUBRICA CON UTILIZZO DELLE LISTE */
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"malloc.h"
typedef struct{
        char nome[20];
        unsigned numero;
        }Dati;
typedef struct elem{
        Dati info;
        struct elem*next;
        }Elista,*Tlista;
int null(Tlista L){
    return (L==NULL);
    }
int consI(Tlista*PL,Dati x){
    Tlista aux,P,Q;
    aux=(Tlista)malloc(sizeof(Elista));
    if(aux==NULL) return 0;
    aux->info=x;
    /*inserimento in testa*/
    if(null(*PL) || strcmp((*PL)->info.nome,x.nome)>0){
       aux->next=*PL;
       *PL=aux;
       }
    /*inserimento non in testa*/
    else{
       Q=*PL;
       P=(*PL)->next;
       while(P!=NULL && strcmp(P->info.nome,x.nome)<0){
          Q=P;
          P=P->next;
          }
       Q->next=aux;
       aux->next=P;
       }
    return 1;
    }
void car(Tlista L){
     int i=1;
     if(null(L)){
       printf("\nNessun elemento in rubrica!");
       return;
       }
     while(L!=NULL){
       printf("\n%d)\nNome-> %s",i,L->info.nome);
       printf("Num -> %u\n",L->info.numero);
       L=L->next;
       i++;
       }
     return;
     }
Tlista cerca(Tlista L,char*nome){
       while(L!=NULL){
          if(strcmp((L->info.nome),nome)==0)
             return L;
          L=L->next;
          }
       return NULL;
       }
void cdr(Tlista *L,Dati x){
     Tlista aux,P,Q;
     /*cancella elemento in testa*/
     if(strcmp(((*L)->info.nome),x.nome)==0){
        aux=*L;
        (*L)=(*L)->next;
        free(aux);
        }
     /*cancella elemento non in testa*/
     else{
        Q=*L;
        P=(*L)->next;
        while(P!=NULL && strcmp((P->info.nome),x.nome)<0){
           Q=P;
           P=P->next;
           }
        Q->next=P->next;
        free(P);
        }
     }
void cancella(Tlista *L){
     Tlista aux;
     while(*L!=NULL){
        aux=*L;
        (*L)=(*L)->next;
        free(aux);
        }
     }
int menu();
void caricafile(char*,Tlista*);
void salva(char*,Tlista);
int main(){
    int scelta=0,verifica;
    char nome[20],scelgo;
    Dati x;
    Tlista PL=NULL,punt;
    caricafile("Rubrica.txt",&PL);
    while(scelta!=-1){
        switch(scelta){
           case 0:
                scelta=menu();
                if (scelta==7){
                   printf("\n\n**************** 7. Esci 
*********************");
                   printf("\n\nProgramma ideato e realizzato da Astrovic.");
                   scelta=-1;
                   printf("\n\n**********************************************\n");
                   }
                break;
           case 1:
                printf("\n\n**************** 1. Aggiungi numero 
**********");
                printf("\n\nInserisci nome: ");
                fgets(x.nome,19,stdin);
                printf("\nInserisci numero: ");
                scanf("%u",&x.numero);
                if((verifica=consI(&PL,x))==0)
                   printf("\nErrore in scrittura!");
                printf("\n\n**********************************************\n");
                scelta=0;
                break;
           case 2:
                printf("\n\n***************** 2. Cancella numero 
*********");
                if(null(PL)){
                   printf("\n\nNessun elemento in rubrica!");
                   printf("\n\n**********************************************\n");
                   scelta=0;
                   break;
                   }
                printf("\n\nInserisci nome: ");
                fgets(nome,20,stdin);
                punt=cerca(PL,nome);
                if(punt==NULL)
                   printf("\nNon presente in rubrica!");
                else{
                   x=punt->info;
                   cdr(&PL,x);
                   }
                printf("\n\n**********************************************\n");
                scelta=0;
                break;
           case 3:
                printf("\n\n***************** 3. Cancella rubrica 
*********");
                if(null(PL)){
                   printf("\n\nNessun elemento in rubrica!");
                   printf("\n\n**********************************************\n");
                   scelta=0;
                   break;
                   }
                printf("\n\nVuoi eliminare definitifamente tutti i dati? 
(S/N): ");
                scanf("%c",&scelgo);
                if(scelgo=='S' || scelgo=='s'){
                   cancella(&PL);
                   printf("\nRubrica cancellata con successo dalla lista!");
                   }
                printf("\n\n**********************************************\n");
                scelta=0;
                break;
           case 4:
                printf("\n\n**************** 4. Ricerca numero 
***********\n\n");
                if(null(PL)){
                   printf("Nessun elemento in rubrica!");
                   printf("\n\n**********************************************\n");
                   scelta=0;
                   break;
                   }
                printf("\nInserisci nome: ");
                fgets(nome,20,stdin);
                punt=cerca(PL,nome);
                if(punt==NULL)
                   printf("\nNon presente in rubrica!");
                else{
                     printf("\n%s",punt->info.nome);
                     printf("%u",punt->info.numero);
                     }
                printf("\n\n**********************************************\n");
                scelta=0;
                break;
           case 5:
                printf("\n\n**************** 5. Visualizza rubrica 
*******\n\n");
                car(PL);
                printf("\n\n**********************************************\n");
                scelta=0;
                break;
           case 6:
                printf("\n\n**************** 6. Salva su file 
************\n\n");
                if(null(PL)){
                   printf("Nessun elemento in rubrica!");
                   printf("\n\n**********************************************\n");
                   scelta=0;
                   break;
                   }
                salva("Rubrica.txt",PL);
                printf("\nOperazione effettuata con successo!");
                printf("\n\n**********************************************\n");
                scelta=0;
                break;
        }
    }
    getchar();
    }
int menu(void){
    int scelgo;
    char pausa;
    /*Ripeto il ciclo finchè il vallore immesso è esatto*/
    while(1){
       printf("\n\n\n\n\t\t***** RUBRICA TELEFONICA *****");
       printf("\n\t\t*                            *");
       printf("\n\t\t*    1. Aggiungi numero      *");
       printf("\n\t\t*    2. Cancella numero      *");
       printf("\n\t\t*    3. Cancella rubrica     *");
       printf("\n\t\t*    4. Ricerca numero       *");
       printf("\n\t\t*    5. Visualizza rubrica   *");
       printf("\n\t\t*    6. Salva su file        *");
       printf("\n\t\t*    7. Esci                 *");
       printf("\n\t\t*                            *");
       printf("\n\t\t******************************");
       printf("\n\nScegli opzione: ");
       scanf("%d",&scelgo);
       scanf("%c",&pausa);
       switch(scelgo){
           case 0:
           case 1:
           case 2:
           case 3:
           case 4:
           case 5:
           case 6:
           case 7:
              return (scelgo);
           default:
              printf("\n\nOpzione errata!!!");
              break;
           }
       }
    }
void caricafile(char*s,Tlista *L){
     Dati x;
     FILE*F;
     if((F=fopen(s,"r"))==NULL){
        printf("\nErrore in scrittura!");
        return;
        }
     while(fgets(x.nome,20,F) && fscanf(F,"%d\n\n",&x.numero))
        consI(L,x);
     fclose(F);
     }
void salva(char*s,Tlista L){
     Dati x;
     FILE*F;
     if((F=fopen(s,"w"))==NULL){
        printf("\nErrore in scrittura!");
        return;
        }
     while(L!=NULL){
        x=L->info;
        fprintf(F,"%s",x.nome);
        fprintf(F,"%u\n\n",x.numero);
        L=L->next;
        }
     fclose(F);


 una interfaccia, cosa bisogna fare?
Questo te l'ho già suggerito nel mio post precedente.
Stefano. 

 dall'ambiente.
Ma infatti è quello che cercavo anche io... in tal caso, anzicchè utilizzare 
il codice come un unico programma a blocchi, potrei spezzettare le varie 
funzioni ed associarle a diversi pulsanti o altro, no?
Esiste dunque la possibilità di fare qualcosa del genere col linguaggio C? 
Se si, come?


 progetto?
Non conosco Dev.
Scusami, ma evidentemente non riesco a spiegarmi.
Stefano. 

 Scusami, ma evidentemente non riesco a spiegarmi.
Direi che la cosa è reciproca...
Mi spiego meglio:
prima ti ho parlato di Acces e VBA, giusto?
Ecco, esiste un modo per creare progetti tipo quelli fatti in acces (con 
pulsanti, elenchi a varie altre cose a cui associare il codice) che però 
funzioni con il linguaggio C, ovvero esistono programmi che mi fanno creare 
pulsanti ed altri oggetti i cui eventi sono generati da un codice in C?


 pulsanti ed altri oggetti i cui eventi sono generati da un codice in C?
Particamente tutti i moderni linguaggi C++
-- 
Watch out for off-by-one errors.
News 2002 [v 2.07] / StopDialer / PopDuster - 
http://www.socket2000.com
Akapulce portal: 
http://www.akapulce.net

 Particamente tutti i moderni linguaggi C++
Scusa, io ho usato il Borland Turbo C (se ricordo bene) ed attualmente uso 
il Dev-C++ e non mi pare che esista un modo per farlo, o per lo meno per 
farlo semplicemente senza bisogno di usare solo ed esclusivamente il 
codice....
Conoscerai certamente le maschere di access, no? Ecco, io cerco qualcosa del 
genere, vorrei cioè creare una interfaccia ("tipo" la maschera per access) 
che però utilizzi come codice il C.
Dici che i programmi attuali lo fanno? Io no ne conosco... allora dimmi il 
nome di qualcuno di questi programmi eventualmente.


 eventualmente.
OK, allora in via del tutto eccezionale aggiungo un ultimo post.
C++Builder: 
http://www.borland.com/us/products/cbuilder/index.html
Stefano. 

 pulsanti ed altri oggetti i cui eventi sono generati da un codice in C?
se non sbaglio puoi farlo anche con dev, se non sono gia incluse devi 
scaricarti dal sito della m$ l'sdk, configurare header, librerie e altra 
roba... ma prima di tutto procurati il programming windows di petzold e 
studiatelo per bene ;-)
ciao
-- 
********************************************************************
McGyver non si scarica gli MP3, se li scrive in esadecimale.
********************************************************************