PDA

Visualizza la versione completa : [C] Inserimento giorno,mese,anno


Lasentinella
15-05-2005, 10:32
Salve a tutti !
Sto realizzando un programma che calcoli il codice fiscale e vorrei modificare la parte dell'inserimento di giorno,mese e anno...per ora l'ho fatto con 3 scanf, ma vorrei realizzarlo in questo modo :
GG/MM/AAAA .
La mia domanda é : é possibile fare in modo che le sbarrette siano già inserite e l'utente possa mettere i numeri??O devo fare un controllo per vedere se ha messo le sbarrette??? :P
Altra cosa, sapreste dirmi una funzione per controllare se l'anno immesso é bisestile ??
Grazie :ciauz:

Johnny_Depp
15-05-2005, 13:15
utilizza il motore di ricerca di questo forum con le seguenti parole chiave (ne abbiamo parlato diverse volte)

1) x anno bisestile, cerca: anno bisestile

2) x codice fiscale, cerca: codice fiscale

3) x formattare il testo: mettere le "/" devi utilizzare
la funzione (non standard) gotoxy() ed includere <conio.h> (o <conio.c> ... dipende dal compilatore C che stai utilizzando)
cerca: gotoxy

4) x gestire la data/ora di sistema cerca: time.h ora sistema

per maggiori delucidazioni/dettagli, posta un pò di codice...

unit1
16-05-2005, 10:50
E se usassi un po' di grafica? es: API

Lasentinella
16-05-2005, 15:51
Originariamente inviato da unit1
E se usassi un po' di grafica? es: API
non ho idea di come si usi..avresti un link a qualche guida che mi spieghi un po' ??


Per fare un programma che stami questa riga come si fa?

Inserisci la data di nascita : / /
che permetta di mettere i dati negli spazzi appositi...perché ho guardato nei vari thread ma non ho capito molto >_< non ho capito in gotoxy() che valori mettere..come faccio a calcolarli ? Grazie :D
:ciauz:

Lasentinella
16-05-2005, 17:41
Originariamente inviato da Lasentinella
non ho idea di come si usi..avresti un link a qualche guida che mi spieghi un po' ??


Per fare un programma che stami questa riga come si fa?

Inserisci la data di nascita : / /
che permetta di mettere i dati negli spazzi appositi...perché ho guardato nei vari thread ma non ho capito molto >_< non ho capito in gotoxy() che valori mettere..come faccio a calcolarli ? Grazie :D
:ciauz:

Ho capito come si fa a stampare le sbarrette..il problema é come fare in modo che l'utente scriva tra e NON sopra di esse !!Perché se continua a scrivere le cancella :( helpppp :P

unit1
16-05-2005, 19:57
http://www.aleax.it/TutWin32/tc.htm

mi spiego: ti consigliavo di mettere un interfaccia grafica con 3 edit.

Lasentinella
16-05-2005, 21:21
Originariamente inviato da unit1
http://www.aleax.it/TutWin32/tc.htm

mi spiego: ti consigliavo di mettere un interfaccia grafica con 3 edit.

Mmmm ho dato un'occhiatina ma la cosa mi sembra complicata..da quanto ho capito col C non si può fare quello che volevo..
ma é possibile mettere 3 edit come dici te nel codice senza avere 32084732 righe di codice complicatissime ? :P
Grazie ancora per l'aiuto :)

Johnny_Depp
17-05-2005, 09:04
una roba del genere (ovviamente da ottimizzare)

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>

void gotoxy(int x, int y)
{
COORD coor;
HANDLE hOutput;
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
coor.X = x;
coor.Y = y;
SetConsoleCursorPosition(hOutput,coor);
}

int main()
{
char c; // accetta input da tastiera
char j=6; // contatore generico (tiene traccia della colonna in cui ci troviamo)
char g=0, m=0, a=0; // contatori generici (g=giorno, m=mese, a=anno)
char gg[3]="\0"; // cattura il giorno
char mm[3]="\0"; // cattura il mese
char aa[5]="\0"; // cattura l'anno
char sw=1; // muove il cursore: 1=si posiziona sul campo1, 2=...campo2, 3=...campo3

// setto le dimensioni del prompt: 80colonne x 25righe
system("mode con: cols=80 lines=25");

// mi posiziono alla riga24 e scrivo...
gotoxy(0,24);
printf("[TAB] next [BACKSPACE] back [ESC] reset [INVIO] submit");

// mi posiziono alla riga0 e scrivo...
gotoxy(0,0);
printf("DATA: 00/00/0000");

// sposto il cursore alla colonna 6
gotoxy(6,0);

// ciclo infinito
while(1)
{
// accetto l'imput da tastiera (1 char alla volta)
c=getch();

// se è stato premuto il tasto backspace
if(c==8)
{
// se il cursore si trova sulla colonna1 (giorno) resto lì
if(sw==1)
{
gotoxy(6,0);
printf("00");
gotoxy(6,0);
gg[0]='\0';
g=0;
}
// se il cursore si trova sulla colonna2 (mese) mi sposto sulla colonna1 (giorno)
else if(sw==2)
{
gotoxy(6,0);
printf("00");
gotoxy(6,0);
sw=1;
j=6;
gg[0]='\0';
g=0;
}
// se il cursore si trova sulla colonna3 (anno) mi sposto sulla colonna2 (mese)
else if(sw==3)
{
gotoxy(9,0);
printf("00");
gotoxy(9,0);
sw=2;
j=9;
mm[0]='\0';
m=0;
}
}
// se è stato premuto il tasto tab
else if(c==9)
{
// se... cursore colonna1 (gg) mi sposto sulla colonna2 (mm)
if(sw==1)
{
gotoxy(9,0);
printf("00");
gotoxy(9,0);
sw=2;
j=9;
mm[0]='\0';
m=0;
}
// se.. cursore colonna2 (mm) mi sposto sulla colonna3 (aa)
else if(sw==2)
{
gotoxy(12,0);
printf("0000");
gotoxy(12,0);
sw=3;
j=12;
aa[0]='\0';
a=0;
}
// se.. cursore colonna3 (aa) resto lì
else if(sw==3)
{
gotoxy(12,0);
printf("0000");
gotoxy(12,0);
aa[0]='\0';
a=0;
}
}
// se è stato premuto il tasto esc/escape (azzero le variabili e mi posiziono sul campo1 (gg)
else if(c==27)
{
g=m=a=0;
gg[0]='\0';
mm[0]='\0';
aa[0]='\0';
gotoxy(6,0);
printf("00/00/0000");
gotoxy(6,0);
sw=1;
j=6;
}
// se è stato premuto il tasto invio/return (chiudo le variabili ed esco dal ciclo while())
else if(c==13)
{
gg[2]='\0';
mm[2]='\0';
aa[4]='\0';
break;
}
// altrimenti inserisco l'input (c) nelle variabili gg, mm e aa
else
{
// se incontro il primo slash "/" lo salto e mi posiziono sul campo2 (mm)
if(j==8)
{
j=9;
gotoxy(9,0);
}
// se incontro il secondo slash "/" lo salto e mi posiziono sul campo3 (aa)
else if(j==11)
{
j=12;
gotoxy(12,0);
}

// altrimenti sono campi validi quindi li vado a memorizzare nelle variabili

// il cursore (j) si trova all'interno del campo giorno gg
if(j>=6 && j<= 7)
{
sw=1;
gg[g]=c;
printf("%c", gg[g]);
j++;
g++;
}
// il cursore (j) si trova all'interno del campo mese mm
else if(j>=9 && j<= 10)
{
sw=2;
mm[m]=c;
printf("%c", mm[m]);
j++;
m++;
}
// il cursore (j) si trova all'interno del campo anno aa
else if(j>=12 && j<=15)
{
sw=3;
aa[a]=c;
printf("%c", aa[a]);
j++;
a++;
}
}
}

printf("\n\nDati Inseriti: %s/%s/%s\n", gg, mm, aa);
system("pause");
return 0;
}

n.b. se ricevi qualche errore di compilazione (conflitto per via di gotoxy()) togli la parte di codice scritta in verde

Lasentinella
17-05-2005, 12:49
Perfetto !!!!!! Solo 2 domandine :

1)


//setto le dimensioni del prompt: 80colonne x 25righe
system("mode con: cols=80 lines=25");



se lascio questa parte di codice mi da errore..dice "undefined symbol system in module [nomefile]. Devo mettere una qualche libreria ? Perché ho provato a togliere questa parte di codice (che, se ho capito bene, suddivide lo schermo in 80c x 25r)ma sfasa un po' il cursore...

2)

// se è stato premuto il tasto backspace
if(c==8)
{


Come fa ad associare il tasto backspace a c=8 ????Dove glielo dici??Cioé, c non é una semplice variabile???

Lasentinella
17-05-2005, 18:56
upp
johnny rispondi alle mie domande sopraaa grazie :)

:ciauz:

Loading