Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

kako da uradim validaciju maticnog broja [C++ Builder]

[es] :: C/C++ programiranje :: kako da uradim validaciju maticnog broja [C++ Builder]

[ Pregleda: 3575 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
95.180.190.*



+3 Profil

icon kako da uradim validaciju maticnog broja [C++ Builder]04.06.2010. u 18:07 - pre 168 meseci
Kako da uradim validaciju maticnog broja. Unesujem ga u edit. Primer...kada bi neko upisao 290210XXXXXXXX da izadje da unos nije validan. Potocno taj edit da povezem sa kalendarom od Win (ne znam dal moze samo pretpostavljam). Mogu to srediti ali trebam ja rurno uneti svaku godinu i svaki mesec, mislim da postoi kraci put. Ako neko znam molim da mi kaze kako bi se rto uradilo. Hvala vam.
Kude tumbe i tri bandere
 
Odgovor na temu

BinaryRuler

Član broj: 73518
Poruke: 189
*.dynamic.isp.telekom.rs.



+3 Profil

icon Re: kako da uradim validaciju maticnog broja [C++ Builder]05.06.2010. u 20:27 - pre 168 meseci
http://sh.wikipedia.org/wiki/Jedinstveni_mati%C4%8Dni_broj_gra%C4%91ana
 
Odgovor na temu

Mali Misha
Mihajlo Anđelković
NBGD

Član broj: 79396
Poruke: 379
92.244.138.*

ICQ: 195487525
Sajt: cpptea.com


+1 Profil

icon Re: kako da uradim validaciju maticnog broja [C++ Builder]05.06.2010. u 21:09 - pre 168 meseci
Kontrolu datuma valjda znaš da uradiš. :) Uradi i kontrolu mogućih mesta rođenja, te kontrolu preko kontrolnog broja.
Ipak se ++uje.
 
Odgovor na temu

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
95.180.190.*



+3 Profil

icon Re: kako da uradim validaciju maticnog broja [C++ Builder]05.06.2010. u 22:46 - pre 168 meseci
To mi problem, kotrolu datuma, kao sto sam naveo gore...Kontrolu ostalih mesta mi zavisi od unetih mesta rodjnja, pol...




Kude tumbe i tri bandere
 
Odgovor na temu

RF MasterX
RS

Član broj: 258871
Poruke: 197

Sajt: www


+16 Profil

icon Re: kako da uradim validaciju maticnog broja [C++ Builder]06.06.2010. u 02:52 - pre 168 meseci
Pomenuti problem mozes resiti na 1001 nacin a mozda i vise.

Za proveru datuma recimo ovako:

Code:



BOOL ProveraDatuma ( char * datum )
{
     unsigned char dan, mesec;
     int brDuzina;

     char temp[6];

    // Ako argument 'datum' nije alociran prekini izvrsavanje funkcije
    // i 'kazi' da datum nije validan

     if (!datum)
        return FALSE;

     brDuzina = (int) strlen( datum );

     // Ako argument nema potreban broj karaktera prekini izvrsavanje funkcije

     if ( brDuzina != 7 )
        return FALSE;
     
     // Ako argument ne sadrzi iskljucivo brojeve prekini izvrsavanje funkcije

     for ( int i = 0; i<7; i++ )
        {
          if (!isdigit(datum[i]))
             return FALSE;
        }


     // Ako je dan u formatu "00" prekini izvrsavanje funkcije

     if ( (datum[0]=='0')||(datum[1]=='0') )
        return FALSE;

     // Ako je mesec u formatu "00" prekini izvrsavanje funkcije

     if ( (datum[2]=='0')||(datum[3]=='0'))
        return FALSE;


          //ubacivanje datuma u 'temp'

          memcpy ( temp, datum, 2 );
          memcpy ( temp+3, datum+2, 2 );


          temp[2] = NULL; temp[5] = NULL;

          dan     = (unsigned char) atoi ( temp );
          mesec = (unsigned char) atoi ( temp+3 );


     // Ako je broj dana veci od 31 prekini izvrsavanje funkcije

     if ( dan > 31 )
        return FALSE;

     // Ako je broj meseca veci od 12 prekini izvrsavanje funkcije

     if ( mesec > 12 )
        return FALSE;

     // Ako je broj dana u februaru veci od 29 prekini izvrsavanje funkcije

     if ( atoi(temp+4) == 2 )
        {
           if ( dan > 29 )
              return FALSE;
        }

    // Ako su sve provere prosle uspesno rezultat funkcije bice 'TRUE'

    return TRUE;
}




Ova funkcija proverava sve osim jednog, a to je:
provera dali je ispravan dan u februaru kada je prestupna godina
a to mozes i sam dodati.

Nadam se da ce ti ovo pomoci.
 
Odgovor na temu

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
95.180.190.*



+3 Profil

icon Re: kako da uradim validaciju maticnog broja [C++ Builder]06.06.2010. u 03:09 - pre 168 meseci
Citat:

if ( (datum[0]=='0')||(datum[1]=='0') )
return FALSE;

// Ako je mesec u formatu "00" prekini izvrsavanje funkcije

if ( (datum[2]=='0')||(datum[3]=='0'))
return FALSE;


Ovde u uslovu mislim da je &&. Izgleda ja sam pravio gresku, kako program deklarise tekst od edita...kao nizu od karaktera ili string...kao sto sam vido ja string..Jer sam ja pokuso uzeti karakter od taj string i ne daje mi...kada kopajliram program (pokrene se program) unesem 32, i izadje kao ne moze da procita red . Hvala ti na pomoc
Kude tumbe i tri bandere
 
Odgovor na temu

RF MasterX
RS

Član broj: 258871
Poruke: 197

Sajt: www


+16 Profil

icon Re: kako da uradim validaciju maticnog broja [C++ Builder]06.06.2010. u 03:32 - pre 168 meseci
Uh izvini ja sam se zeznuo, bio sam poceo funkciju drugacije a zaboravio
sam da to izmenim a nisam je ni isprobao.

Evo ti ispravljena i poboljsana verzija koja radi.


Code:

BOOL ProveraDatuma ( char * datum )
{
     unsigned char dan, mesec;
     int brDuzina;

     char temp[6];

    // Ako argument 'datum' nije alociran prekini izvrsavanje funkcije
    // i 'kazi' da datum nije validan

     if (!datum)
        return FALSE;

     brDuzina = (int) strlen( datum );

     // Ako argument nema potreban broj karaktera prekini izvrsavanje funkcije

     if ( brDuzina != 7 )
        return FALSE;
     
     // Ako argument ne sadrzi iskljucivo brojeve prekini izvrsavanje funkcije

     for ( int i = 0; i<7; i++ )
        {
          if (!isdigit(datum[i]))
             return FALSE;
        }


     // Ako je dan u formatu "00" prekini izvrsavanje funkcije

     if ( (datum[0]=='0')&&(datum[1]=='0') )
        return FALSE;

     // Ako je mesec u formatu "00" prekini izvrsavanje funkcije

     if ( (datum[2]=='0')&&(datum[3]=='0'))
        return FALSE;


          //ubacivanje datuma u 'temp'

          memcpy ( temp, datum, 2 );
          memcpy ( temp+3, datum+2, 2 );


          temp[2] = NULL; temp[5] = NULL;

     if ( temp[0] == '0' )
        {
          temp[0] = temp[1];
          temp[1] = NULL;
        } 
     if ( temp[3] == '0' )
        {
          temp[3] = temp[4];
          temp[4] = NULL;
        } 

          dan     = (unsigned char) atoi ( temp );
          mesec = (unsigned char) atoi ( temp+3 );


     // Ako je broj dana veci od 31 prekini izvrsavanje funkcije

     if ( dan > 31 )
        return FALSE;

     // Ako je broj meseca veci od 12 prekini izvrsavanje funkcije

     if ( mesec > 12 )
        return FALSE;

     // Ako je broj dana u Januaru veci od 31 prekini izvrsavanje funkcije

     if ( mesec == 1 )
        {
           if ( dan > 31 )
              return FALSE;
        }

     if ( mesec == 2 )
        {
           if ( dan > 29 )
              return FALSE;
        }

     if ( mesec == 3 )
        {
           if ( dan > 31 )
              return FALSE;
        }

     if ( mesec == 4 )
        {
           if ( dan > 30 )
              return FALSE;
        }

     if ( mesec == 5 )
        {
           if ( dan > 31 )
              return FALSE;
        }

     if ( mesec == 6 )
        {
           if ( dan > 30 )
              return FALSE;
        }

     if ( mesec == 7 )
        {
           if ( dan > 31 )
              return FALSE;
        }

     if ( mesec == 8 )
        {
           if ( dan > 31 )
              return FALSE;
        }

     if ( mesec == 9 )
        {
           if ( dan > 30 )
              return FALSE;
        }

     if ( mesec == 10 )
        {
           if ( dan > 31 )
              return FALSE;
        }

     if ( mesec == 11 )
        {
           if ( dan > 30 )
              return FALSE;
        }

     if ( mesec == 12 )
        {
           if ( dan > 31 )
              return FALSE;
        }


    // Ako su sve provere prosle uspesno rezultat funkcije bice 'TRUE'

    return TRUE;
}



Evo setih se jos necega, da nebi morao u tvom kodu dodavati jos jedan
temp kako bi obezbedio tacno 7 kataktera u argumentu funkcije
mozes kao argument staviti ceo maticni broj samo moras izmeniti
broj gde se vrsi provera duzine stringa u ovoj funkciji

Code:

     if ( brDuzina != 7 )
        return FALSE;


znaci umesto ovoga stavis ovako:

Code:

     if ( brDuzina != 13 )
        return FALSE;


i to je to.



[Ovu poruku je menjao RF MasterX dana 06.06.2010. u 04:56 GMT+1]
 
Odgovor na temu

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
95.180.190.*



+3 Profil

icon Re: kako da uradim validaciju maticnog broja [C++ Builder]06.06.2010. u 03:51 - pre 168 meseci
Opet hvala....samo pitam ovo....zasto funkcija...zar ne moze da se uzme taj tekst napisan u editu kao string...ta vredost se dodeli promenlivi "X"...i tako da resis ovo?
Kude tumbe i tri bandere
 
Odgovor na temu

RF MasterX
RS

Član broj: 258871
Poruke: 197

Sajt: www


+16 Profil

icon Re: kako da uradim validaciju maticnog broja [C++ Builder]06.06.2010. u 04:00 - pre 168 meseci
Ah to oko stringa

ja ne koristim Borland C++ Builder vec Micro$oft Visual C++ i Dev C

ali nema veze instaliracu sutra tj. danas taj C++Builder pa cu videti

o cemu se tu radi.

Ali cekaj sad se setih o cemu se radi char* mozes dobiti pozivanjem

GetDlgItemText

ona izgleda ovako:

Code:

UINT GetDlgItemText(
  HWND hDlg,       // handle of dialog box
  int nIDDlgItem,  // identifier of control
  LPTSTR lpString, // address of buffer for text
  int nMaxCount    // maximum size of string
);




znaci stavis ovako:
Code:

 char mBroj[128]; // naprimer 128 a mozes staviti ....
//ovde el znas kako da nadjesh HWND argumenat 
//recimo 
GetDlgItemText (  Form1.Handle, brojID, mBroj, 128 );
// ovaj id je ID tog tvog TextBoxa


[Ovu poruku je menjao RF MasterX dana 06.06.2010. u 05:11 GMT+1]

i jos nesto da dodam ako neznas kako da dobijes ID tvog textboxa

evo npr. ovako:

Code:

int txtbID;

txtbID = GetDlgCtrlID( TextBox1.Handle)


i ima jos nesto u funkciji se vec pri dobijanju broja u variabli 'dan'
vrshi provera dal je vece od 31 pa zato iz funkcije trebas izbaciti
provere u mesecima koji imaju 31 dan a ostavis samo proveru za
februar i mesece koji imaju 30 dana.

Ovo nije nesto kriticno al' cisto da se ne duplira kod, a takve ili
slicne nezgodancije se obicno desavaju kada
program pises u 04:00:00 Ujutru a to ces i sam videti u
daljem radu.





[Ovu poruku je menjao RF MasterX dana 06.06.2010. u 12:43 GMT+1]
 
Odgovor na temu

[es] :: C/C++ programiranje :: kako da uradim validaciju maticnog broja [C++ Builder]

[ Pregleda: 3575 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.