/* kentta.cpp */ /****************************************************************************/ /* ** K E N T T A . C P P ** ** Abstrakti luokka yleiselle tietueen kentälle: cKentta ** sekä cKentasta perittyjä luokkia ** ** ** Tekijät: Vesa Lappalainen ** Ohjelmointikurssi 1996 ** Tehty: 07.01.1996 ** Kommentit ja päivityshistoria ks. kentta.h ** */ #include #include #include using namespace std; #include "kentta.h" #include "muunnos.h" #include "pvm.h" //============================================================================ // Kenttien metodeja: //============================================================================ //============================================================================ // Yleisiä apualiohjelmia: //============================================================================ cKenttavirhe hetu_tarkistus(string &jono,const char *sa,int yks) { string s(sa); const char *sc = s.c_str(); jono_isoksi(s); poista_tyhjat(s); jono = s; // Tyhjä sotu hyväksytään! if ( s == "" ) { return KENTTA_OK; } // Jo päivämäärä väärin, hylätään. if ( tarkista_sotu_pvm(sc) ) { return cKenttavirhe(KENTTA_MUUTETTU_KYSY,"Hetussa päivämäärä väärin!"); } // Pelkkä syntymäaika hyväksytään! if ( s.length() == 6 ) { return yks ? KENTTA_OK_VAROITA_MUUT : KENTTA_OK; } // Enää kelpaa muoto ppkkvv+/-nnnT if ( s.length() != 11 ) { return cKenttavirhe(KENTTA_MUUTETTU_KYSY, "Hetussa pitää olla 11 merkkiä!"); } if ( !strchr(HETUVALI,s[6]) ) { // Pitää olla + tai - return cKenttavirhe(KENTTA_MUUTETTU_KYSY,"Hetussa pitää syntymäajan ja " "tunnuksen välillä olla jokin merkeistä:" HETUVALI ); } // Loppu ei numeerinen if ( !( isdigit(s[7]) && isdigit(s[8]) && isdigit(s[9]) ) ) { return cKenttavirhe(KENTTA_MUUTETTU_KYSY, "Tunnusosan kaikki merkit eivät ole numeroita"); } // Enää tarkistusmerkin oikeellisuus jäljellä! long int alku,loppu; sscanf(sc,"%6ld",&alku); sscanf(sc+7,"%3ld",&loppu); char tm = HETUTARK[(int)((alku*1000+loppu) % 31)]; if ( s[10] != tm ) { s[10] = tm; jono = s; return cKenttavirhe(KENTTA_MUUTETTU_KYSY,"Tarkistusmerkki muutettu!"); } return yks ? KENTTA_OK_ONKO_AINOA : KENTTA_OK; }