
KWESTIE OGLNE
==============

+ Funkcjonalno i zaoenia

1. Zakres podstwowej funkcjonalnoci programu:

    a) odczytywanie danych z plikw KEDU
    b) odczytywanie danych z klawiatury
    c) zapis danych do plikw KEDU

Przez ,,dane'' rozumie si dane zawarte w dokumentach ZUS,
analogicznie jak w programie Patnik

2. Istotna funkcjonalno programu:

    d) drukowanie raportw
    e) obliczanie wartoci w polach zalenych
    f) generowanie raportw RMUA i innych
    g) automatyczne wypenianie formularzy na kolejny miesic

3. Dodatkowa funkcjonalno:

    h) przechowywanie raportw w bazach danych
    i) moliwo pracy sieciowej z GUI
    j) moliwo pracy sieciowej przez przegldark

Funkcjonalno 1 i 2 wystpuje w Patniku.
W pocztkowej fazie projektu zaimplementowanie zostana podstawowa 
funkcjonalno.

4. Zaoenia:

    a) Program powinien by moliwie wieloplatformowy; oficjalnie
    wspiera powinien co najmniej nastpujce platformy:

	+ Linux
	+ Windows
	+ Mac OS 
	+ FreeBSD

    b) Program powinien by moliwie elastyczny, zwaszcza w
    kwestiach:

	i) moliwie szybkiego dostosowania si do zmiany przepisw 
	ii) moliwoci dodawania nowych formularzy (np. PIT)
	iii) moliwo rozbudowy o moduy penego systemu
	finansowo-kadrowego 
	iv) moliwie niewielkiej zalenoci od konkretnej bazy danych,
	interfejsu uytkownika, podsystemu wydruku
	


Reguy sposobu zapisu kodu programw w ramach projektu "Janosik".


A. Reguy niezalene od jzyka programowania

1. Wcicia

Do tworzenia wci obrazujcych struktur programu uywamy wycznie
tabulacji. Ponadto tabulacji uywamy wycznie do tworzenia tyche wci.

Przykad:

def funkcja_1():
<tab>l = ['Dugi napis, ktry nie mieci si w jednym wierszu: %d',
<tab>     'Drugi napis, ju w nowym wierszu']
<tab>return l

Warto przyjrze si trzeciemu wierszowi przykadu. Poziom wcicia jest w nim
taki sam, jak w wierszu drugim, a wic uywamy tej samej liczby tabulacji
(jednej). Rol spacji wystpujcych w trzecim wierszu nie jest stworzenie
wcicia lecz wyrwnanie napisu, tak, aby zapis drugiego element listy
rozpoczyna si w tej samej kolumnie, co zapis elementu pierwszego.

Zwrmy uwag na fakt, e zapisana w ten sposb definicja funkcji zawsze
bdzie wygldaa dobrze (i zgodnie z naszymi intencjami), niezalenie od
rozmiaru tabulacji uywanego przez osob czytajc kod.

2. Separatory

W przypadku wikszoci operatorw dwuargumentowych (wyjtki bd omawiane
indywidualnie) po obu stronach operatora umieszczamy separator, ktrym moe
by spacja lub znak koca wiersza. Regua ta obejmuje rwnie symbole
symbolizujce przypisanie (=, +=, itp.), jeli w danym jzyku nie s one
operatorami.
Na przykad:
x = (a + b) * 3

Na licie jakichkolwiek elementw (np. wyrae) rozdzielonych przecinkami
kady przecinek zapisujemy bezporednio po elemencie poprzedzajcym, za po
przecinku umieszczamy separator, ktrym moe by spacja lub znak koca
wiersza.
Na przykad:
x, y = 1, 2

Przy ujciu jakiegokolwiek elementu (np. wyraenia) w nawiasy, ew. nawiasy
kwadratowe lub klamrowe, nie umieszczamy separatora po nawiasie otwierajcym
ani przed nawiasem domykajcym, chyba, e separatorem tym jest znak koca
wiersza.
Na przykad:
if (x == 1) {

Przed nawiasem otwierajcym, ktry, wraz z odpowiednim domykajcym,
obejmuje argumenty formalne lub biece funkcji, nie umieszczamy separatora.
Na przykad:
oblicz_podatek(12345.0)

Na kocu wiersza nie pozostawiamy adnych separatorw.

3. Identyfikatory

Jako identyfikatorw uywamy zwykle polskich wyrazw, skrtw polskich
wyrazw lub grup zoonych z polskich wyrazw i/lub skrtw wyrazw.
W roli zmiennych pomocniczych (zmienne sterujce w ptlach), czy bardzo
typowych zastosowa, jak np. okrelanie wsprzdnych, uywamy krtkich nazw
symbolicznych, np. i, j czy x, y.
Litery specyficzne dla jzyka polskiego zastpujemy zblionymi literami
aciskimi.

Identyfikatory okrelajce zmienne (rwnie obiekty penice rol zblion
do zmiennych, np. parametry formalne funkcji) zapisujemy uywajc wycznie
maych liter oraz znaku podkrelenia, ktrym rozdzielamy ssiednie wyrazy
(lub ich skrty).
Na przykad:
cena_paliwa *= 1.2

Identyfikatory okrelajce typy (w tym rwnie klasy, czy wyjtki)
zapisujemy uywajc wycznie maych i wielkich liter, przy czym wielkimi
literami zapisujemy wycznie pierwsze litery kolejnych wyrazw (lub ich
skrtw).
Na przykad:
class MojaKlaska:

Identyfikatory okrelajce stae oraz obiekty penice rol staych (jeli
w jzyku stae nie wystpuj) i definicje preprocesora zapisujemy uywajc
wycznie wielkich liter oraz znaku podkrelenia, ktrym rozdzielamy
ssiednie wyrazy (lub ich skrty).
Na przykad:
NUMER_LICENCJI = 'KLJWER01234-LIUERJER-12KJKOH203'


B. Reguy specyficzne dla jzyka Python

Uywamy jzyka Python w wersji 2.2.

1. Literay

Wartoci literaw znakowych ujmujemy, o ile to moliwe, w par apostrofw.
Na przykad:
print 'Hello world!'

2. Dwukropek

Dwukropek w instrukcjach if (else), while (else), for (else),
try (else, finally), def, class umieszczamy jako ostatni znak w wierszu.
Bezporednio przed dwukropkiem nie umieszczamy separatora.
Na przykad:
if ready():
	print 'Ready'
else:
	print 'Not ready'


C. Reguy specyficzne dla jzyka C

Uywamy jzyka ANSI C, zgodnie ze standardem z 1989/1990 roku. Nie uywamy
nowszej wersji standardu ze wzgldu na niewystarczajce jej upowszechnienie.
Tam jednak, gdzie to moliwe, staramy si zachowa zgodno rwnie z ni.

1. Bloki i obejmujce je nawiasy klamrowe

1.1
Kady z nawiasw klamrowych, ktre obejmuj blok funkcji, powinien
samodzielnie wystpowa w wierszu.

1.2
W przypadku instrukcji, ktre zawieraj w sobie bloki, nawiasy klamrowe
zapisujemy nastpujco:

if (wyraenie) {
...
}

if (wyraenie) {
...
} else {
...
}

while (wyraenie) {
...
}

switch (wyraenie) {
...
}

1.3
Instrukcja wchodzca w skad instrukcji zoonej while oraz if (dotyczy to
obu instrukcji podrzdnych) powinna zawsze by blokiem. Istniej dwa wyjtki
od tej reguy. Nie tworzymy bloku:
 - jeli instrukcja podrzdna jest instrukcj pust,
 - w przypadku instrukcji if zawierajcej instrukcj break lub continue i
   nie posiadajcej czci else.

2.
Wewntrz instrukcji switch nie tworzymy dodatkowego poziomu wcicia dla
etykiet case.
Na przykad:
switch (x) {
case 1:
	s = "jeden";
	break;
case 2:
	s = "dwa";
	break;
default:
	s = "";
}

3. Deklaracje

Deklaracje zmiennych naley stara si umieszcza w najbardziej
zagdziedonym bloku, zawierajcym instrukcje, ktre si do nich odwouj.
Ma to jednak charakter zalecenia a nie obowizujcej reguy.

Pomidzy list deklaracji i list instrukcji powinien zosta umieszczony
jeden pusty wiersz.

4.
Wewntrz inicjatorw nie naley umieszcza wyrae, ktrych obliczenie nie
jest moliwe na etapie kompilacji.

5.
Nie uywamy nadmiarowych nawiasw wok zwracanej wartoci w instrukcji
return oraz wok argumentu operatora sizeof.
Jeli wic x jest nazw zmiennej, wwczas piszemy:
	return sizeof x;
Oczywicie nie dotyczy to przypadku, w ktrym po sowie kluczowym sizeof
wystpuje specyfikacja typu, np.
	return sizeof(int);

6.
Wyraenie bdce czci instrukcji if, while lub do powinno wyranie mie
znaczenie logiczne. Regu trudno sformalizowa, wic podajmy kilka
przykadw:

Poprawne:

char *path;
...
if (g_path_is_absolute (path)) {
	...
}

GList *l;
...
for (l = file_names; l != NULL; l = l->next) {
	...
}

Niepoprawne:

GList *l;
...
for (l = file_names; l; l = l->next) {
	...
}

(l jest wskanikiem, nie wartoci logiczn, naley uy "l != NULL")

int i;
...
for (i = 5; i; i--) {
	...
}

(i jest wartoci liczbow, nie logiczn, naley uy "i > 0" lub "i != 0")

PESEL Powszechny Elektroniczny System Ewidencji Ludnoci
--------------------------------------------------------

     Skada si z 11 cyfr, a ostatnia cyfra to liczba kontrolna. Znajdziesz
go m.in. w dowodzie osobistym.

        1.Kad liczb, oprcz ostatniej (liczba kontrolna), mno
ymy przez jej wag. Na przykad dla PESEL 55011402574 bdzie
wyglda to tak:

Wagi                 1    3    7    9    1    3    7    9    1    3
PESEL                5    5    0    1    1    4    0    2    5    7
Wartoci (wynik)     5 + 15 +  0 +  9 +  1 + 12 +  0 + 18 +  5
+ 21 = 86

2.Podziel sum przez liczb 10 i zapamitaj reszt. (86 modulo 10
= 6)
        3.Odejmij od 10 uzyskan liczb 3. (10 - 6 = 4). Otrzymalimy
liczb kontroln.

        4.Pierwsze 6 cyfr to data urodzenia yy-mm-dd, a przedostatnia
liczba PESEL-u mwi o pci osoby: nieparzysta - mczyzna, parzysta - kobieta.

NIP Numer identyfikacji podatkowej
----------------------------------

        1.Kad liczb, oprcz ostatniej (liczba kontrolna), mno
ymy przez jej wag. Na przykad dla NIP 768-000-24-66 bdzie
wyglda to tak:


      Wagi                 6    5    7    2    3    4    5    6    7
      NIP                  7    6    8    0    0    0    2    4    6
      Wartoci (wynik)    42 + 30 + 56 +  0 +  0 +  0 + 10 + 24 + 42 = 204


2. Podziel sum przez liczb 11 i zapamitaj reszt. (204 modulo 11 = 6)

        3. Nic nie odejmujemy. Otrzymalismy liczb kontroln.

REGON Rejestr Gospodarki Narodowej
----------------------------------

1. Kad liczb mnoymy przez jej wag. Na przykad dla REGON
590096454 bdzie wygldac to tak:


      Wagi                 8    9    2    3    4    5    6    7
      REGON                5    9    0    0    9    6    4    5
      Wartoci (wynik)    40 + 81 +  0 +  0 + 36 + 30 + 24 + 35 = 246


2.Podziel sum przez liczb 11 i zapamitaj reszt. (246 modulo 11 = 4)

3.Nic nie odejmujemy. Otrzymalismy liczb kontroln.

KONTO Numer konta bankowego
---------------------------

1.Kad liczb, oprcz ostatniej (liczba kontrolna), mnoymy przez
jej wag. Na przykad dla konta 11401010 bdzie wyglda to tak:

      Wagi                 7    1    3    9    7    11   3
      KONTO                1    1    4    0    1    0    1
      Wartoci (wynik)     7 +  1 + 12 +  0 +  7 +  0 +  3 = 30


2.Podziel sum przez liczb 10 i zapamitaj reszt. (30 modulo 10 = 0)

3.Nic nie odejmujemy. Otrzymalismy liczb kontroln.
--------------------------------------------
        Jacek Tkacz
    Max Elektronik S.A.
e-mail : jacekt@max.com.pl
tel.: 0601 934525
ICQ : 24834693
--------------------------------------------


