FACULTATEA DE CIBERNETICA, STATISTICA SI INFORMATICA ECONOMICA A.S.E., BUCURESTI
STRUCTURI DE DATE h3y20yr
- PROIECT -
CONTABILITATE PRIMARA
JURNAL DE CUMPARARI
JURNAL DE VANZARI
SI
REGISTRUL JURNAL
Dosar de prezentare
CUPRINS :
1. Introducere (Obiectivul problemei, Necesitatea si Mijloacele de realizare)..
1
2. Enuntul problemei (intrari, iesiri, formule si date de test )……………….
2
3. Modelul problemei ………………………………………………………….
13
4. Algoritmul de rezolvare si structura programului …………………………….
17
5. Descrierea programului ……………………………………………………….
23
6. Concluzii …………………………………………………………………….
25
7. Bibliografie ………………………………………………………………….
26
8. Anexe -; cod sursa …………………………………………………………...
27
1. Obiectivul problemei, Necesitatea si Mijloacele de realizare
Avand in vedere faptul ca evidenta contabila implica numeroase calcule,
atentie deosebita, documente pe masura, un program cu functii specializate poate
facilita indeajuns munca contabilului. In acest scop se realizeaza
o aplicatie C++ care permite realizarea unor situatii contabile specializate.
Lucrul cu calculatorul a devenit esential, preluand o mare parte din munca utilizatorului,
fiind mult mai eficient si mai competitiv intr-un secol al progresului. Aplicatia
de fata se doreste a veni in ajutorul muncii monotone a contabilului prin realizarea
unor principale functii contabile.
Pentru inceput, cheia principala a intregii aplicatii o reprezinta existenta
unei luni curente contabile setate in respectiva aplicatie, care va sta la baza
tuturor operatiilor de raportare,informare.
Obiectivul curentei aplicatii presupune urmatoarele :
- realizarea unor raportari lunare a Jurnalului de Cumparari (totalitatea achizitiilor
firmei din cadrul unei luni, pe baza documenteor aferente) si a Jurnalului de
Vanzari (totalitatea vanzarilor firmei din cadrul unei luni, pe baza documentelor
contabile aferente) ;
- cautarea unor documente de cumparare, respectiv vanzare, dupa numarul acestora;
in cazul regasirii, sunt prezentate utilizatorului principalele date componente
ale acestor documente, inclusiv nota contabila aferenta;
- raportarea situatiilor curente ale furnizorilor/clientilor, prin afisarea
pe ecran a documentelor inregistrate in numele respectivului furnizor/client
cu sume partiale si totale- cumparari/vanzari, precum si plati/incasari;
- realizarea unei situatii contabile absolut necesare intr-o astfel de evidenta,
si anume a Registrului Jurnal corespunzator unei luni existente cerute de utilizator(totalitatea
operatiilor de vanzare, cumparare, plata si incasare aferente unei anumite luni
contabile).
Necesitatea aplicatiei curente o reprezinta nevoia de optimizare a lucrului
contabil, de eficientizare a modalitatilor de inregistrare a datelor reale,
de realizare a unor functii permitand o verificare riguroasa a muncii contabile,
in fapt minimizarea muncii fizice in favoarea efortului intelectual.
Mijloacele de realizare :
Aplicatia a fost realizata folosind mediul de dezvoltare Microsoft Visual C++
6.0.
Biblioteci predefinite utilizate : #include <stdlib.h>
#include <iomanip.h>
#include <iostream.h>
#include <conio.h>
#include <windows.h>
#include <wincon.h>
Biblioteci create :
“structuri.h” -; definirea principalelor structuri de date
(articole, tipuri noi de date)
“fisiere.h” -; in vederea facilitarii lucrului cu fisierele
anterior create
“arbori.h” - module de program ce au la baza lucrul cu arbori binari,
presupunand :
-inserari , stergeri in cadrul arborilor, utilizand chei simple sau multiple;
-traversarea arborilor in cele trei moduri (inordine, preordine, postordine);
-operatii cu elementele acestora (insumari, traversari recursive)
-modalitati de stocare a datelor (alocare, dezalocare).
“conta.cpp” -; modulul principal
2. Enuntul problemei
Se considera un program contabil in cadrul unei intreprinderi. Acesta contine
un meniu ce permite utilizatorului selectarea unei optiuni din mai multe posibile.
Se urmareste ca la executie, programul sa realizeze o serie de functii de raportare,
iesirile prezentandu-se fie sub forma grafica(pe ecran), fie pe suportul fizic(fisier
text).
In privinta intrarilor, principalele date utilizate sunt fisierele existente
stocate pe suportul fizic, 7 la numar, dupa cum urmeaza :
- jurnalc.dat = retine informatii despre documentele referitoare la achizitii
:
- data documentului ;
- tipul documentului de maxim 5 caractere(fact.,contr,bon etc);
- numarul documentului (care trebuie sa fie unic) de max. 8 cifre;
- codul furnizorului;
- totalul facturii de max. 9 cifre;
- valoarea asupra careia nu se aplica taxa pe valoare aduagata;
- contul de furnizor (care se va credita);
- contul corespondent (de cheltuieli, se va debita);
- eventual, explicatii de cumparare (de ex. Ch. Protocol) de max. 20 caractere.
- jurnalv.dat = retine informatii despre documentele referitoare la vanzari
:
- data documentului ;
- tipul documentului de maxim 5 caractere(fact.,contr,bon etc);
- numarul documentului (care trebuie sa fie unic) de max. 8 cifre;
- codul clientului;
- totalul facturii de max. 9 cifre;
- valoarea asupra careia nu se aplica taxa pe valoare aduagata;
- contul de client (care se va debita);
- contul corespondent (de venituri, se va credita);
- eventual, explicatii legate de vanzare(de ex.vz.marfa) de max. 20 caractere.
- plata.dat = retine informatii despre documentele de plata catre furnizori
:
- numarul facturii(de max. 8 cifre) pentru care s-a realizat plata;
- data documentului ;
- tipul documentului de maxim 5 caractere(chit.,cec,bon etc);
- numarul documentului (care trebuie sa fie unic) de max. 8 cifre;
- valoarea totala platita de max. 9 cifre;
- contul care se va credita (A?);
- incasare.dat = retine informatii despre documentele de plata catre furnizori
:
- numarul facturii(de max. 8 cifre) pentru care s-a perceput incasarea;
- data documentului ;
- tipul documentului de maxim 5 caractere(chit.,cec,bon etc);
- numarul documentului (care trebuie sa fie unic) de max. 8 cifre;
- valoarea totala incasata de max. 9 cifre;
- contul care se va debita (A ?);
- furnizor.dat = retine informatii despre furnizori :
- codul furnizorului ;
- denumirea furnizorului, a firmei de maxim 30 caractere;
- codul fiscal de maxim 8 caractere (de ex. R1234567);
- contul bancar al furnizorului, prin intermediul careia se realizeaza platile(cu rol pur informativ).
- client.dat = retine informatii despre clienti :
- codul clientului ;
- denumirea acestuia, a firmei de maxim 30 caractere;
- codul fiscal de maxim 8 caractere (de ex. R1234567);
- contul bancar al clientului, prin intermediul caruia se realizeaza incasarile (cu rol pur informativ).
-generale.dat = fisier ce contine istoricul lunilor contabile inregistrate.
Retine informatii :
- luna curenta/trecuta;
- anul curent/trecut;
- procentul de tva aferent respectivei date;
- contul de tva deductibila din luna respectiva;
- contul de tva colectata.
Pentru fiecare din optiunile/functiile programului se vor prezenta intrarile,
iesirile si formulele de calcul aferente si date de test :
a) Jurnal de cumparari
a.1. Jurnal de cumparari
Intrari :
-jurnalc.dat;
-furnizor.dat;
-luna = variabila indicand luna pentru care se va face raportarea;
-an = anul pentru care se va realiza raportarea, pentru ambele valori existand si functii booleene de validare a valorii lor.
-radjc -; radacina arborelui binar de sortare retinand elemente de tip
articol
(Jc -; date despre NIR-uri;
- radf - radacina arborelui binar de sortare retinand elemente de tip articol
(Furn -; date despre furnizori), arbori creati odata selectata aceasta optiune, dezalocandu-se la revenirea in
meniul principal.
-tva = valoarea procentului de tva aferent lunii si anului citite de la tastatura; in cazul in care luna si anul urmeaza lunii curente, se ia in considerare procentul de tva aferent acestei luni curente.
Formule de calcul :
- calcul baza de impozitare corespunzatoare documentului p->inf.nrc(p=un
nod al arborelui de radacina radjc, la un moment dat) : baza = (p->inf.totc- p->inf.scutc)/(100+tva)*100, cu 0=i=(p->st=NULL
si -; p->dr=NULL indica un nod frunza=nu se merge mai departe)
- calcul tva :
TVA = (p->inf .totc- p->inf.scutc)/(100+tva)*tva, cu 0=i=( p->st=NULL
si -; p->dr=NULL)
Iesiri -; sub forma unui tabel :
Nr. Crt. xxx
Document xxxxxxx
Nr.Document xxxxxxx
Furnizor xxxxxxx
Cod fiscal xxxxxxx
Data Total fc. Valoare scutita de tva Baza Tva Explicatii cump. zz-ll-aaaa xxxxxxx xxxxxxxx xxxxxxx xxxxxxx xxxxxxxxxxxx
Tabel nr. (1)
Date de test :
Luna : 9
Anul : 2004, si atunci :
Tva = 19% (preluat din generale.dat) p->inf.totc=1190000; p->inf.scutc=0;
- baza = (1190000-0)/119*100 = 1000000
- TVA = (1190000-0)/119*19 = 190000
Nr. Crt. 1.
Document FC
Nr.Document 4458961
Furnizor Technosteel Group SA
Cod fiscal R125
Data Total fc. Val. scut.tva Baza Tva Explicatii
30-9-2004 1.190.000 0 1.000.000 190.000 Cf.cnt.1/2004 a.2. Jurnal de cumparari si plati aferente
Lucrurile sunt asemanatoare cu prima optiune a submeniului „Jurnal de
cumparari”, cu diferenta ca rezultate afisate sunt mai complexe, continand
-facturile aferente lunii;
-nota contabila corespunzatoare unei facturi;
-platile inregistrate pe acea factura, fie ca apartin sau nu lunii curente (+nota
contabila )
-soldul corespunzator unei facturi.
Date de test :
JURNAL DE CUMPARARI la data de :
Luna : 11
Anul : 2004
Fig. 1
a.3. Cautare factura cumparare JC
Intrari :
-radjc -; arbore binar de sortare retinand elemente de tip articol Jc,
si un camp de adresare a urmatorului nod;
-nrc = numarul facturii propriu-zise, continand cel mult 8 cifre
Iesiri -; se realizeaza cautarea in cadrul listei cajc a lui nrc (mod
secvential) si in cazul in care valoarea introdusa de la tastatura se regaseste
in cadrul inregistrarilor, raportarea se realizeaza sub forma :
Document : tip_document
Nr. doc. : numar_document
Data | Total fc. | Scut. tva | Baza | Tva | Explicatii zz-ll-aa|xxxxxxxx|xxxxxxxx|xxxxxxx|xxxxxxx|xxxxxxxx
Nota contabila : debit = credit valoare_baza deduct = credit valoare_tva
--------------- tva+baza
Date de test :
Daca se considera un nod p, mergand de la cap la sfarsitul listei, atunci : p->inf.nrc=A4458961,4458962,13,589623,4458632,12S nrc = 13
Document : FC
Nr. doc. : 13
Data | Total fc. | Scut. tva | Baza | Tva | Explicatii
21-10-2004|1456000 |0 |1223529 |232471| Nota contabila :
604 = 401 1223529
4426 = 401 232471
--------------- 1456000
b) Listare Jurnal de vanzari
a.1. Jurnal de vanzari
Intrari :
-jurnalv.dat;
-client.dat;
-luna = variabila indicand luna pentru care se va face raportarea;
-an = anul pentru care se va realiza raportarea, pentru ambele valori existand si functii booleene de validare a valorii lor.
-radjv -; arborebinar de sortare retinand elemente de tip articol (Jv -;
date despre vanzari- sortarea se face dupa doua chei, si anume data
(tripletul zi, luna, an) si numar factuta);
-radc - radacina arborelui binar retinand elemente de tip articol ca informatie utila (Client -; date despre clienti), arbori creati odata selectata aceasta optiune; zonele de memorie se elibereaza
la revenirea in meniul principal(prin proceduri specifice).
-tva = valoarea procentului de tva aferent lunii si anului citite de la tastatura; in cazul in care luna si anul urmeaza lunii curente, se ia in considerare procentul de tva aferent acestei luni curente.
Formule de calcul :
- calcul baza de impozitare corespunzatoare documentului p->inf.nrv (p=nod
al arborelui binar de sortare la un moment dat): baza = (p->inf.totv- p->inf .scutv)/(100+tva)*100, cu rad=p=( p->st=NULL
si -; p->dr=NULL)
- calcul tva :
TVA = (p->inf .totv- p->inf .scutv)/(100+tva)*tva, cu rad=p=( p->st=NULL
si -; p->dr=NULL)
Iesiri -; sub forma unui tabel :
Nr. Crt. xxx
Document xxxxxxx
Nr.Document xxxxxxx
Client xxxxxxx
Cod fiscal xxxxxxx
Data Total fc. Valoare scutita de tva Baza Tva Explicatii vanzare zz-ll-aaaa xxxxxxx xxxxxxxx xxxxxxx xxxxxxx xxxxxxxxxxxx
Tabel nr. (2)
Date de test :
Luna : 11
Anul : 2004
Tva = 19% (preluat din generale.dat -; tva aferent ultimei luni, si anume
10/2004)
P->inf.totv=2560300; p->inf.scutv=0;
- baza = (2560300-0)/119*100 = 2151513
- TVA = (2560300-0)/119*19 = 408787
Nr. Crt. 1.
Document FC
Nr.Document 7958102
Furnizor Claudia Srl
Cod fiscal R121236
Data Total fc. Val. scut.tva Baza Tva Explicatii
1-11-2004 2560300 0 2151513 408787 -
a.2. Jurnal de vanzari si incasari aferente
Lucrurile sunt asemanatoare cu prima optiune a submeniului „Jurnal de
vanzari”, cu diferenta ca rezultatele afisate sunt mai complexe, continand
-facturile aferente lunii si anului introduse valid de la tastatura;
-nota contabila corespunzatoare unei facturi;
-incasarile inregistrate pe acea factura, fie ca apartin sau nu lunii curente
(+nota contabila )
-soldul corespunzator unei facturi(diferenta intre total vanzare si total incasare).
Date de test :
JURNAL DE CUMPARARI la data de :
Luna : 10
Anul : 2004
Fig. 2
a.3. Cautare factura vanzare JV
Intrari :
-rad =arbore binar de sortare continand informatii despre facturile de vanzare;
-nrv = numarul facturii propriu-zise, continand cel mult 8 cifre
Iesiri -; se realizeaza cautarea in cadrul listei dublu inlantuite a lui
nrv si in cazul in care valoarea introdusa de la tastatura se regaseste in cadrul
inregistrarilor, raportarea se realizeaza sub forma :
Document : tip_document
Nr. doc. : numar_document
Data | Total fc. | Scut. tva | Baza | Tva | Explicatii zz-ll-aa|xxxxxxxx|xxxxxxxx|xxxxxxx|xxxxxxx|xxxxxxxx
Nota contabila : debit = credit valoare_baza debit = colect valoare_tva
--------------- tva+baza
Date de test :
Daca se considera un nod p, mergand de la cap la sfarsitul listei, atunci : p->inf.nrc=A7958102,11,7958101S nrc = 7958102
Document : FC
Nr. doc. : 7958102
Data | Total fc. | Scut. tva | Baza | Tva | Explicatii
1-11-2004 | 2560300 |0 |2151513 |408787 | Nota contabila :
411 = 707 2151513
411 = 4427 408787
--------------- 2560300 c) Soldul furnizorului ...
= pe baza codului furnizorului introdus de la tastatura se afiseaza soldul
curent al acestuia, reprezentand totalul facturilor de cumparare :
Intrari : -cod = codul furnizorului introdus de la tastatura de catre utilizator
si validat a.i. sa nu cuprinde mai mult de 3 cifre si sa fie mai mare strict ca zero;
-furnizor.dat -> permite cautarea in cadrul fisierului(secvential) a codului
introdus de la tastatura, iar in momentul in care il gaseste, se trece la construirea
ARBORELUI BINAR DE SORTARE continand pe de o parte informatii despre cumpararile
aferente respectivului furnizor, pe de alta parte platile inregistrate pentru
fiecare factura in parte , de forma :
,unde Jc = articole referitoare la cumparari;
Coresp = articole referitoare la plati;
Plata = retine radacina arborelui continand informatii despre platile aferente
unei facturi(in cazul in care nu s-a inregistrat nici o plata, at. p->plata=NULL);
Formule de calcul :
Totalul achizitiilor : , unde n -; nr. total facturi regasite total_fci -; totalul facturii nr. i
Iesiri -; se realizeaza cautarea in cadrul vectorului pfai a codului cod
si in cazul in care este gasit se va afisa pe ecran un rezultat de tipul :
Denumire : nume_furnizor
Cod fiscal : cod_fiscal
Banca : cont_bancar
Nr.doc.|Doc. |Data | Total fc.| Scut. tva| Baza | Tva |Expl. xxxxxx|xxxxx|zz-ll-aa|xxxxxxx|xxxxxxxx|xxxxxx|xxxxxx|xxxxx
Totalul achizitiilor : xxxxxxx
Date de test : cod=2
Raportarea soldului curent.
Codul furnizorului (max.3 caractere) : 2
Denumire :ROMANIA HIPERMARCHE
Cod fiscal :R1589321
Banca :BCR RO35RNCB5350000013810001
Nr.doc.|Doc. |Data | Total fc.| Scut. tva| Baza | Tva |Expl. |
|Nr.doc.|Doc. |Data plata|Total plata| Sold |
589623| FC|12-10-2004| 4589000| 4589000| 0| 0|CH.PROTOCOL
4458632| FC| 1-11-2004| 2560300| 0| 2151513| 408787|CHIRIE
Sold total final : 7149300
Apasati orice tasta pentru a continua.
d) Soldul Clientului ...
= pe baza codului clientului introdus de la tastatura se afiseaza soldul curent
al acestuia, reprezentand totalul facturilor de vanzare :
Intrari : -cod = codul clientului introdus de la tastatura de catre utilizator
si validat a.i. sa nu cuprinde mai mult de 3 cifre si sa fie mai mare strict ca zero;
-client.dat -> permite cautarea in cadrul fisierului(secvential) a codului
introdus de la tastatura, iar in momentul in care il gaseste, se trece la construirea
ARBORELUI BINAR DE SORTARE continand pe de o parte informatii despre facturile
de vanzare aferente respectivului client, pe de alta parte incasarile inregistrate
pentru fiecare factura in parte , de forma :
,unde Jv = articole referitoare la vanzari;
Coresp = articole referitoare la incasari;
Incas = retine radacina arborelui continand informatii despre incasarile aferente
unei facturi(in cazul in care nu s-a inregistrat nici o plata, at. p->incas=NULL);
Denumire : nume_client
Cod fiscal : cod_fiscal
Banca : cont_bancar
Nr.doc.|Doc. |Data | Total fc.| Scut. tva| Baza | Tva |Expl. xxxxxx|xxxxx|zz-ll-aa|xxxxxxx|xxxxxxxx|xxxxxx|xxxxxx|xxxxx
Date de test : cod=1
Raportarea soldului curent.
Codul clientului (max.3 caractere) : 1
Denumire :RIKAMI SRL
Cod fiscal :R912156
Banca :RO35RNCB15252525
Nr.doc.|Doc. |Data | Total fc.| Scut. tva| Baza | Tva |Expl. |
|Nr.doc.|Doc. |Data plata|Total plata| Sold |
7958099| FC|30- 9-2004| 3986000| 0| 3349580| 636420|OLC#45
|3005896| CEC| 1-10-2004| 2986000| 1000000 |
7958101| FC|28-10-2004| 498000| 0| 418487| 79513|SPAN
Sold total final : 1498000
Apasati orice tasta pentru a continua.
e) Registrul jurnal
= raportare lunara contabila realizata sub forma unui tabel tiparit pe ecran,
si in functie de optiunea utilizatorului se va memora pe suport tehnic, in vederea
unor eventuale prelucrari.
Intrari :
-jurnalc.dat
-jurnalv.dat
-plata.dat
-incasare.dat , pe baza acestor trei structuri de date( Jc, Jv, Coresp) construindu-se un arbore
binar de sortare, continand ca informatie facturi de cumparare/vanzare, respectiv
plati/incasari, in functie de data documentului si numarul acestuia (luate drept
chei de sortare).
-luna = variabila indicand luna pentru care se va face raportarea;
-an = anul pentru care se va realiza raportarea, pentru ambele valori existand si functii booleene de validare a valorii lor.
-tva = valoarea procentului de tva aferent lunii si anului citite de la tastatura
(in cazul in care luna si anul urmeaza lunii curente, se ia in considerare procentul
de tva aferent acestei luni curente);
-cont de tva deductibila/colectata aferente lunii si anului dorite, necesare
in realizarea notelor contabile corespunzatoare.
Formule de calcul :
- calcul baza de impozitare corespunzatoare documentului p->inf.nrc: baza = (p->inf.totv- p->inf .scutv)/(100+tva)*100, cu rad=p=( p->st=NULL
si -; p->dr=NULL);
- calcul taxa pe valoare adaugata :
TVA = (p->inf .totv- p->inf .scutv)/(100+tva)*tva, cu cap=p= ( p->st=NULL
si -; p->dr=NULL).
Iesiri -; se realizeaza cautarea in cadrul jurnalelor a documentelor inregistrate
in luna si anul citite, raportandu-se urmatoarele :
Registrul Jurnal la data luna/an
Nr |Doc. |Nr.doc.| Data | Explicatii |ContDeb|ContCred|Suma deb|Suma cred xx| xxx|xxxxxx| zz-ll-aaaa|xxxxxxxxxxxxxx| xxxx| xxxx| xxxxxxx|xxxxxxx
Date de test :
Luna : 11
Anul : 2004
Tva = 19% (preluat din generale.dat -; tva aferent ultimei luni, si anume
11/2004)
? Registrul Jurnal la data 11/2004 ?
Nr |Doc. |Nr.doc.| Data | Explicatii |ContDeb|ContCred|Suma deb|Suma cred
1| CHIT| 2| 1-11-2004| PLATA| 401| 5311| 1000000| 1000000
2| FC| 12| 1-11-2004| -| 605| 401| 2153782| 2153782
3| FC| 12| 1-11-2004| -| 4426| 401| 409219| 409219
4| CHIT|1254631| 1-11-2004| INCAS| 5311| 411| 650000| 650000
5| FC|4458632| 1-11-2004| CHIRIE| 612| 401| 2151513| 2151513
6| FC|4458632| 1-11-2004| CHIRIE| 4426| 401| 408787| 408787
7| FC|7958102| 1-11-2004| -| 411| 707| 2151513| 2151513
8| FC|7958102| 1-11-2004| -| 411| 4427| 408787| 408787
Doriti salvarea datelor intr-un fisier ? (Y/N) : y
Datele au fost salvate in regjurnal.txt.
Apasati orice tasta pentru a continua
3. Modelul problemei
In rezolvarea acestei probleme au fost alese ca structuri de date articolele
si arborii binari de sortare.In cadrul bibliotecii „structuri.h”
sunt declarate urmatoarele tipuri de articole :
#include <windows.h>
#include <wincon.h>
#include <conio.h>
struct DataAint zi; int luna; int an;S ;
struct CorespA unsigned long nrfc; unsigned long nr;
Data data; char doca5i; float total; unsigned long cont;S ;
//definirea structurii record a elementelor referitoare la procentul de tva,
contul de tva deductibila
//si cel de tva colectata aferente unei anumite luni ( istoric );
struct GeneraleA int tva; int luna; int an; unsigned long deduct; unsigned long colect;S ;
//definirea structurii record a Jurnalului de cumparari;
struct JcA unsigned long nrc; char docca5i;
Data datac; int codf; float totc; float scutc; char explca20i; unsigned long credit; unsigned long debit;S ;
//definirea structurii record a Jurnalului de vanzari;
struct JvA unsigned long nrv; char docva5i;
Data datav; int codc; float totv; float scutv; char explva20i; unsigned long credit; unsigned long debit;S ;
//definirea structurii record a Furnizorilor;
struct FurnA int codf; char denfa30i; char codfisca8i; char bfa50i;S ;
//definirea structurii record a Clientilor;
struct ClientA int codc; char denca30i; char codfisca8i; char bca50i;S ;
/*definirea structurii de arbore, continand ca informatie utila elemente de
tip articol Jc
*/ struct arb1
AJc inf; struct arb1* st,*dr; S ;
//definirea noului tip de date pnod=pointer catre structura de arbore typedef arb1* ptarb1;
struct arb3
AFurn inf; struct arb3* st,*dr; S ;
//definirea noului tip de date pnod=pointer catre structura de arbore typedef arb3* ptarb3;
struct arb2
AJv inf; struct arb2* st,*dr; S ;
//definirea noului tip de date pnod=pointer catre structura de arbore typedef arb2* ptarb2;
struct arb4
AClient inf; struct arb4* st,*dr; S ;
//definirea noului tip de date pnod=pointer catre structura de arbore typedef arb4* ptarb4;
//arbore continand elemente generale tip articol Coresp (plata/incasare) struct arb
ACoresp inf; struct arb* st,*dr; S ;
//definirea noului tip de date pnod=pointer catre structura de arbore typedef arb* ptarb;
struct arbjc
AJc inf; ptarb plata; struct arbjc* st,*dr; S ;
//definirea noului tip de date pnod=pointer catre structura de arbore typedef arbjc* ptarbjc;
struct arbjv
AJv inf; ptarb incas; struct arbjv* st,*dr; S ;
//definirea noului tip de date pnod=pointer catre structura de arbore typedef arbjv* ptarbjv;
struct arbcaut
Aunsigned long nr; int poz; struct arbcaut *st,*dr;S; typedef arbcaut* ptarbc;
//definirea unui arbore de cautare continand numarul facturii(unic), pozitia
in fisier
//pe care se gaseste , in vederea eventualelor rapoarte
struct arbreg
Achar doca5i;
Data data; unsigned long nr; char expla20i; unsigned long credit; unsigned long debit; float suma; unsigned long tvacont; float sumatva; bool deductibila; bool colectata; struct arbreg*st,*dr;S ; typedef arbreg* ptarbreg;
//definirea unui arbore de cautare continand numarul facturii(unic), pozitia
in fisier
//pe care se gaseste , in vederea eventualelor rapoarte
struct arbcautare
Aunsigned long nr; unsigned long cont; struct arbcautare *st,*dr;S; typedef arbcautare* ptarbcautare;
//modalitate de tiparire a unui text pe ecran cand se specifica coordonatele
//simularea lui gotoxy() din BorlandC++ (Graphics.h)
void Afisare(HANDLE Cons,char * Sir,SHORT vPoz, SHORT hPoz);
void clreol(HANDLE Cons,COORD pozitie);
void clrscr(HANDLE Cons);
//tiparirea unui mesaj de eroare cu avertizare sonora void MsgBox(HANDLE Cons, char* Sir);
/*============= antetele programelor de validari==================*/ bool valid_luna(int luna) ;
//validarea lunii introduse de la tastatura bool valid_an(int an) ;
//validarea anului introdus de la tastatura bool Valid_Doc(unsigned long n);
//validarea unui numar de document(maxim 10 caractere) bool Valid_Cod(int n);
//validarea codului unui tert (maxim 3 caractere) void ValidLuna(int &luna) ;
//validarea lunii introduse de la tastatura void ValidAn(int &an) ;
//validarea anului introdus de la tastatura void ValidDoc(unsigned long &n);
//validarea unui numar de document(maxim 10 caractere) void ValidCod(int &n);
//validarea codului unui tert (maxim 3 caractere)
In general, s-au folosit in realizarea rapoartelor contabile cronologic , precum
: ptarbjc radjc=NULL; ptarbjv radjv=NULL; ptarbreg rad=NULL; ptarbcautare caut=NULL; , etc. ,alocarea realizandu-se de felul ptarbore nou = new arbore; unde arbore* ptarbore;
Utilizarea structurilor dinamice de arbori creati/dezalocati la momentul executiei
permite:
- construirea si distrugerea lor pe parcursul rularii programului
- acces rapid la date si existenta temporara (cat este mentinuta o optiune a
meniului)
- o inlantuire arborescenta specifica rapoartelor contabile.
4. Algoritmul de rezolvare si structura programului
Algoritmul reprezinta o descriere a unui proces de calcul care produce date
de iesire pe baza unor date initiale.
Aint opt=-1; do
A Menu(Cons); if (scanf("%d",&opt)) Optiune(&opt);
S while (opt);
, unde Optiune : void Optiune(int *opt)
A switch (*opt)
A
case(1):
//sunt prezentate informatii legate de luna anul curente
//precum si informatii referitoare la procentul de tva
A(Optiunea 1); opt=-1;S case(2):
A(Optiunea 2); opt=-1;S
………………………………………………………………………………………………………………… default :
(Optiunea n);
S
Figura 3. Schema logica pentru incarcarea listei de optiuni
In cadrul bibliotecii „arbori.h” sunt utilizati algoritmi de lucru
cu arbori binari de sortare, dupa cum urmeaza:
1. Adaugarea intr-un arbore binar de sortare a unor elemente de tip articol
(Jc, Furn, uzual Arb si PtArb(Arb*)) -; realizarea se efectueaza in mod
recursiv;
//definirea structurii de arbore, continand ca informatie utila elemente de
tip articol Jc struct Arb
AJc inf; struct Arb* st,*dr; S ;
//definirea noului tip de date pnod=pointer catre structura de arbore typedef Arb* ptArb;
Figura 4. Schema logica pentru inserarea recursiva a unui element intr-un arbore
de sortare, dupa anumite chei (functia Compara)
int ComparaJc(Jc const & art1,Jc const & art2)
Aif (art1.datac.an==art2.datac.an && art1.datac.luna==art2.datac.luna
&& art1.datac.zi==art2.datac.zi) return 0; else if (art1.datac.an<art2.datac.an || (art1.datac.an==art2.datac.an &&
art1.datac.luna<art2.datac.luna) ||
((art1.datac.an==art2.datac.an) && (art1.datac.luna==art2.datac.luna)
&& (art1.datac.zi<=art2.datac.zi))) return -1; return 1;
S
/*se va realiza inserarea in arborele binar tinand cont de doua chei, si anume data facturii si numarul acesteia (cheia este astfel unica)*/ void ArbJc(ptarb1 &r, Jc val)
Aif (!r) A ptarb1 nou=new arb1; nou->st=NULL; nou->dr=NULL; nou->inf=val; r=nou;S else if (ComparaJc(r->inf,val)==-1) ArbJc(r->dr,val); else if (ComparaJc(r->inf,val)==1) ArbJc(r->st,val); else if (r->inf.nrc<val.nrc) ArbJc(r->dr,val); else ArbJc(r->st,val);
S
void StArbJc(ptarb1 &r)
Aif (r)
AStArbJc(r->st); StArbJc(r->dr); delete r;S
S
2. Stergerea totala ( dezalocarea unui arbore binar de sortare). Se va realiza
tot recursiv, ca in schema alaturata :
Figura 5 . Schema logica pentru dezalocarea recursiva a unui arbore
3. Cautarea dupa valoarea cheii intr-un arbore de sortare . Se va realiza tot
recursiv, ca in schema alaturata :
Type = tip oarecare
Compara(x1,x2) = functie de comparare, returnand dupa caz (-1/0/1)
PtArb Cautare(PtArb rad, Type val)
A if (r) if (Compara(rad->inf,val)==0) return rad; else if (Compara(rad->inf,val)>0) return Cautare(rad->st,val); else return Cautare(rad->dr,val); else return NULL;
S
Figura 6 . Schema logica pentru cautarea recursiva in cadrul unui arbore
In vederea realizarii Registrului Jurnal, s-a folosit o structura mai complexa,
de forma :
struct arbreg
Achar doca5i;
Data data; unsigned long nr; char expla20i; unsigned long credit; unsigned long debit; float suma; unsigned long tvacont; float sumatva; bool deductibila; bool colectata; struct arbreg*st,*dr;S ; typedef arbreg* ptarbreg;
//definirea unui arbore de cautare continand numarul facturii(unic), pozitia
in fisier
//pe care se gaseste , in vederea eventualelor rapoarte
struct arbcautare
Aunsigned long nr; unsigned long cont; struct arbcautare *st,*dr;S; typedef arbcautare* ptarbcautare; , in care se retin principalele informatii necesare realizarii unui raport de
acest gen :
-numar, tip, data intocmire document;
-valoarea documentului;
-conturile debitor si creditor;
-eventuale explicatii ale operatiei (vanzare, cumparare, plata sau incasare).
Se citesc apoi din fisierele jurnalc.dat si jurnalv.dat articole, si in functie
de conditia de apartenenta la luna si anul dorite se adauga in arborele de sortare;
apoi folosesc fisiere precum plata.dat si incasare.dat, pentru reactualizarea
arborelui.
Se vor genera apoi note contabile: debit = credit si suma aferenta (baza) pe de alta parte continand nota contabila corespondenta (*) debit / tva_colectata = tva_deductibila / credit si suma aferenta (tva)
Interesant: algoritmul presupune o singura traversare a fisierelor.
pregjurnal cap=NULL; plcautare caut=NULL; unsigned long deduct=PrelCont(luna,an,true), colect=PrelCont(luna,an,false); f=fopen(".\\jurnalc.dat","rb"); g=fopen(".\\jurnalv.dat","rb");
Jc art; freadb(art,f,Jc);
while (!feof(f))
Aif (art.datac.luna==luna && art.datac.an==an)
InsRegJurnale(cap,art.nrc,art.docc,art.datac,art.totc-art.scutc,art.debit,art.credit,art.explc, tva,deduct,true);
InsCaut(caut,art.nrc,art.credit); freadb(art,f,Jc);S
Jv art2; freadb(art2,g,Jv);
while (!feof(g))
Aif (art2.datav.luna==luna && art2.datav.an==an)
InsRegJurnale(cap,art2.nrv,art2.docv,art2.datav,art2.totv-art2.scutv,art2.debit,art2.credit, art2.explv,tva,colect,false);
InsCaut(caut,art2.nrv,art2.debit); freadb(art2,g,Jv);S fclose(f); fclose(g); f=fopen(".\\plata.dat","rb"); g=fopen(".\\incasare.dat","rb");
Coresp art3; freadb(art3,f,Coresp);
while (!feof(f))
Aif (art3.data.luna==luna && art3.data.an==an)
InsRegCoresp(cap,art3.nr,art3.doc,art3.data,art3.total,CautCont(caut,art3.nrfc),art3.cont,"Plata"); freadb(art3,f,Coresp);S freadb(art3,g,Coresp);
while (!feof(g))
Aif (art3.data.luna==luna && art3.data.an==an)
InsRegCoresp(cap,art3.nr,art3.doc,art3.data,art3.total,art3.cont,CautCont(caut,art3.nrfc),"Incasare"); freadb(art3,g,Coresp);S fclose(f); fclose(g); StergCaut(caut);
5. Descrierea programului
Aplicatia descrisa presupune la momentul rularii existenta unei liste de optiuni,
din care utilizatorul poate alege la un moment dat o singura optiune, fiecare
continand o functie :
Figura 7. Meniul principal
1. Generale = afiseaza informatii generale despre luna si anul curente, precum
si procentul de tva aferent, alaturi de contul de tva deductibila si cel de
tva colectata, ceea ce impune realizarea automata a notelor contabile.
2. Jurnal de Cumparari
2.1 Jurnal de cumparari= utilizatorul introduce de la tastatura luna si anul
pentru care se doreste raportarea (luna cuprinsa intre 1 si 12, an format din
4 cifre, peste 1998). Daca exista cel putin o inregistrare, se vor afisa rezultate
corespunzatoare, altfel mesaj de eroare.
Figura 8. Meniul Jurnal de cumparari
2.2 Jurnal de cumparari si plati aferente
2.3Cautare factura cumparare JC= se da posibilitatea consultarii informatiilor
legate de un anumit document de intrare, informatii legate de contravaloare,
de nota contabile aferenta etc.
Se valideaza valoarea introdusa, prin citirea a cel mult 8 cifre.
3.Jurnal de Vanzari
3.1Jurnal de vanzari= utilizatorul introduce de la tastatura luna si anul pentru
care se doreste raportarea (luna cuprinsa intre 1 si 12, an format din 4 cifre,
peste 1998). Daca exista cel putin o inregistrare, se vor afisa rezultate corespunzatoare,
altfel mesaj de eroare.
3.2Jurnal de vanzari si incasari aferente
3.3 Cautare factura vanzare JC
4.Soldul furnizorului = pe baza codului furnizorului existenta sau nu in furnizor.dat,
de maxim 3 cifre, se realizeaza un raport al tuturor facturilor inregistrate
in contul respectivului furnizor, precum si platilor aferente, cu totalizarea
soldurilor partiale in final.
5.Soldul clientului
Figura 9. Raportare sold curent
6. Registrul Jurnal = da posibilitatea vizualizarii acestui document contabil
dintr-o anumita luna, precum si salvarii acestuia intr-un fisier text (regjurnal.txt)
in vederea unor eventuale prelucrari.
7. Gestionarea fisierelor = ne introduce in alt meniu, dupa cum urmeaza :
1.Jurnal de cumparari
2.Jurnal de vanzari
3.Furnizori
4.Clienti
5.Plati
6.Incasari
7.Generale
Aceste 7 functii dau posibilitatea actualizarii fisierelor (adaugare la sfarsit),
cu mentiunea ca nu au loc validari de nici un fel ( A SE RULA PROGRAMUL).
0. Iesire = prin apasarea cifrei “0” se incheie aplicatia.
Apasarea oricarei alte taste genereaza mesaj de eroare si presupune recitirea
unei valori valide.
1. Concluzii
Avantajele curentei aplicatii constau in :
-spre deosebire de liste, parcurgerea secventiala este evitata, (ordonarea
descrescatoare dupa o anumita cheie presupune ca prin parcurgerea arborelui
binar in inordine(SRD) sa se obtina de fapt o lista a elementelor sortate);
- lucrul cu arbori memorati dinamic la momentul executie, dezalocati in momentul
revenirii la meniul principal - gradul de ocupare este maxim, spre deosebire
de cazul alocarii statice cu masive uni/multi-dimensionale ( nu exista in arbore
noduri inutile, ce nu contin informatie);
- odata utilizata o structura arborescenta, ea este dezalocata in mod programat
la iesirea dintr-o anumita functie (eliberarea memoriei);
- se realizeaza selectia din fisiere numai a articolelor indeplinind o anumita
conditie, prelucrarile ulterioare cu ajutorul arborilor vizand numai aceste
elemente (ceea ce reduce timpul de acces si cel necesar prelucrarilor);
- sortarea nu mi este necesara, lucrul acesta asigurandu-se inca din etapa de
creare a arborelui;
-utilizarea arborilor binari de sortare permite o regasire mult mai rapida a
unor elemente aflate in relatie directa ( spre exemplu pentru o factura de cumparare
se retin toate documentele de plata aferente, in ordinea intocmirii, ceea ce
permite realizarea unor raportari prompte si eficiente) , etc.
Dezavantaje :
- memorarea in arbori a unor articole scade gradul de generalitate al codurilor
sursa ;
- de asemenea, omogenitatea are loc la nivel de articol, insa un articol, un
nod al arborelui retine de fapt date eterogene, ce trebuiesc adresate explicit,
in functie de campuri;
-recursivitatea are avantajele ei, insa in lucrul cu arbori, crearea pp. revenirea
pe drumul parcurs si rescrierea tuturor legaturilor pana la nodul initial(radacina).
Ca numar de linii sursa, recursivitatea reprezinta categoric un mare avantaj.
2. Bibliografie
aSMEU02i
Ion SMEUREANU, Marian DARDALA -; “Programarea orientata obiect in
limbajul C++”, Editura Cison, 2002
In aceasta lucrare se descrie modul de lucru cu operatorii new si delete, utilizati
in cadrul aplicatiei mai sus prezentate. In cadrul fiecarei functii a meniului
au fost alocati dinamic vectori de articole, in momentul incheierii efectuandu-se
dezalocarea acestora. Faptul a permis lucrul eficient cu memoria HEAP.
De asemenea, lucrarea a venit si in ajutorul folosirii obiectelor cin si cout,
declararii unor functii constante etc.
aROSC03i
Ion Gh. ROSCA, Bogdan GHILIC-MICU, Catalina-Lucia COCIANU, Marian STOICA, Cristian
USCATU-; “Programarea calculatoarelor -; Stiinta invatarii unui
limbaj de programare”, Editura ASE, Bucuresti, 2003
Lucrarea prezinta : tipuri de date, operatori si expresii, operatori de intrare
/ iesire cu tastatura si monitorul, realizarea structurilor fundamentale de control, pointeri, subprograme,
fisiere de date etc., toate descriind limbajul C.
aTUDO97i
TUDOR Sorin -; “Bazele programarii in C++”, Editura L&S
Infomat, Bucuresti, 1997
aIVAN03i
Ion IVAN, Doru Ungureanu, Adrian Pocovnicu -; “Structuri de date
-; ghid pentru elaborarea proiectelor ”, Editura ASE, Bucuresti,
2003
Lucrarea de fata descrie principalele etape din realizarea unui proiect : definirea
problemei, alegerea structurii de date, construirea algoritmilor, proiectarea si elaborarea
schemelor, scrierea programelor, testarea si implementarea produsului software.
aCAPO02i
Valentina CAPOTA, alina Dancesu, Mirela Dinescu, Daniela Hangan, Roxana Ionescu,
Florin Lixandru, Marinel Manolache -; “Contabilitate -; monografii
contabile ( auxiliar curricular ) ”, Editura Niculescu, Bucuresti, 2002
Se realizeaza descrierea in amanunt a principalelor forme de inregistrare contabila.
3. Anexe -; cod sursa
//structuri.h
#include <windows.h>
#include <wincon.h>
#include <conio.h>
struct DataAint zi; int luna; int an;S ;
struct CorespA unsigned long nrfc; unsigned long nr;
Data data; char doca5i; float total; unsigned long cont;S ;
//definirea structurii record a elementelor referitoare la procentul de tva,
contul de tva deductibila
//si cel de tva colectata aferente unei anumite luni ( istoric );
struct GeneraleA int tva; int luna; int an; unsigned long deduct; unsigned long colect;S ;
//definirea structurii record a Jurnalului de cumparari;
struct JcA unsigned long nrc; char docca5i;
Data datac; int codf; float totc; float scutc; char explca20i; unsigned long credit; unsigned long debit;S ;
//definirea structurii record a Jurnalului de vanzari;
struct JvA unsigned long nrv; char docva5i;
Data datav; int codc; float totv; float scutv; char explva20i; unsigned long credit; unsigned long debit;S ;
//definirea structurii record a Furnizorilor;
struct FurnA int codf; char denfa30i; char codfisca8i; char bfa50i;S ;
//definirea structurii record a Clientilor;
struct ClientA int codc; char denca30i; char codfisca8i; char bca50i;S ;
/*definirea structurii de arbore, continand ca informatie utila elemente de
tip articol Jc
*/ struct arb1
AJc inf; struct arb1* st,*dr; S ;
//definirea noului tip de date pnod=pointer catre structura de arbore typedef arb1* ptarb1;
struct arb3
AFurn inf; struct arb3* st,*dr; S ;
//definirea noului tip de date pnod=pointer catre structura de arbore typedef arb3* ptarb3;
struct arb2
AJv inf; struct arb2* st,*dr; S ;
//definirea noului tip de date pnod=pointer catre structura de arbore typedef arb2* ptarb2;
struct arb4
AClient inf; struct arb4* st,*dr; S ;
//definirea noului tip de date pnod=pointer catre structura de arbore typedef arb4* ptarb4;
//arbore continand elemente generale tip articol Coresp (plata/incasare) struct arb
ACoresp inf; struct arb* st,*dr; S ;
//definirea noului tip de date pnod=pointer catre structura de arbore typedef arb* ptarb;
struct arbjc
AJc inf; ptarb plata; struct arbjc* st,*dr; S ;
//definirea noului tip de date pnod=pointer catre structura de arbore typedef arbjc* ptarbjc;
struct arbjv
AJv inf; ptarb incas; struct arbjv* st,*dr; S ;
//definirea noului tip de date pnod=pointer catre structura de arbore typedef arbjv* ptarbjv;
struct arbcaut
Aunsigned long nr; int poz; struct arbcaut *st,*dr;S; typedef arbcaut* ptarbc;
//definirea unui arbore de cautare continand numarul facturii(unic), pozitia
in fisier
//pe care se gaseste , in vederea eventualelor rapoarte
struct arbreg
Achar doca5i;
Data data; unsigned long nr; char expla20i; unsigned long credit; unsigned long debit; float suma; unsigned long tvacont; float sumatva; bool deductibila; bool colectata; struct arbreg*st,*dr;S ; typedef arbreg* ptarbreg;
//definirea unui arbore de cautare continand numarul facturii(unic), pozitia
in fisier
//pe care se gaseste , in vederea eventualelor rapoarte
struct arbcautare
Aunsigned long nr; unsigned long cont; struct arbcautare *st,*dr;S; typedef arbcautare* ptarbcautare;
//modalitate de tiparire a unui text pe ecran cand se specifica coordonatele
//simularea lui gotoxy() din BorlandC++ (Graphics.h)
void Afisare(HANDLE Cons,char * Sir,SHORT vPoz, SHORT hPoz);
void clreol(HANDLE Cons,COORD pozitie);
void clrscr(HANDLE Cons);
//tiparirea unui mesaj de eroare cu avertizare sonora void MsgBox(HANDLE Cons, char* Sir);
/*=================================================*/
/*antetele programelor de validari*/
bool valid_luna(int luna) ;
//validarea lunii introduse de la tastatura bool valid_an(int an) ;
//validarea anului introdus de la tastatura bool Valid_Doc(unsigned long n);
//validarea unui numar de document(maxim 10 caractere) bool Valid_Cod(int n);
//validarea codului unui tert (maxim 3 caractere) void ValidLuna(int &luna) ;
//validarea lunii introduse de la tastatura void ValidAn(int &an) ;
//validarea anului introdus de la tastatura void ValidDoc(unsigned long &n);
//validarea unui numar de document(maxim 10 caractere) void ValidCod(int &n);
//validarea codului unui tert (maxim 3 caractere)
//structuri.cpp
#include "structuri.h"
#include <string.h>
#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>
//modalitate de tiparire a unui text pe ecran cand se specifica coordonatele
//simularea lui gotoxy() din BorlandC++ (Graphics.h)
void Afisare(HANDLE Cons,char * Sir,SHORT vPoz, SHORT hPoz)
A
COORD poz=AhPoz,vPozS;
SetConsoleCursorPosition(Cons,poz); cout<<Sir<<endl;
S
void clreol(HANDLE Cons,COORD pozitie)
A DWORD dwCaractereScrise;
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(Cons,&csbi);
FillConsoleOutputCharacter(Cons,(TCHAR)' ',csbi.dwSize.X-pozitie.X+1,pozitie,&dwCaractereScrise);
S
//procedura ce simuleaza void clrscr(HANDLE Cons)
A
COORD poz = A 0,0 S;
DWORD dwChrWrite;
CONSOLE_SCREEN_BUFFER_INFO csbi;
DWORD dwDimScreen;
GetConsoleScreenBufferInfo(Cons, &csbi); dwDimScreen = csbi.dwSize.X * csbi.dwSize.Y;
FillConsoleOutputCharacter(Cons, (TCHAR)' ', dwDimScreen,poz, &dwChrWrite);
FillConsoleOutputAttribute(Cons, csbi.wAttributes, dwDimScreen, poz, &dwChrWrite);
SetConsoleCursorPosition(Cons, poz); return;
S
//tiparirea unui mesaj de eroare cu avertizare sonora void MsgBox(HANDLE Cons,char* Sir)
A cout<<"\a";
COORD poz= A0, 22S; clreol(Cons,poz);
Afisare(Cons,Sir,22,0); getch(); clreol(Cons,poz);
S
bool valid_luna(int luna)
//validarea lunii introduse de la tastatura
Areturn ((luna>0) && (luna<13));
S
bool valid_an(int an)
//validarea anului introdus de la tastatura
Achar * aux=new chara100i; itoa(abs(an),aux,10); return (strlen(aux)==4 && an>=1998);
S
bool Valid_Doc(unsigned long n)
//validarea unui numar de document(maxim 10 caractere)
A//char *aux=new chara100i;
//ultoa(abs(n),aux,10);
//return (strlen(aux)<=8); return (n>0);
S
bool Valid_Cod(int n)
//validarea codului unui tert (maxim 3 caractere)
Areturn (n>0);
S
void ValidLuna(int &luna)
//validarea lunii introduse de la tastatura
Achar sa20i; scanf("%s",&s); if ((strlen(s)==1 && (sa0i>='0' && sa0i<='9')) || (strlen(s)==2
&& (sa0i>='0' && sa0i<='9') && (sa1i>='0' &&
sa1i<='9'))) luna=atoi(s); else luna=0;
S
void ValidAn(int &an)
//validarea anului introdus de la tastatura
Aan=0; char sa20i; int er=1; scanf("%s",&s); if (strlen(s)==4)
Afor (int i=0;i<=3;i++) if (saii<'0' || saii>'9') er=0; if (er) an=atoi(s); S
S
void ValidDoc(unsigned long &n)
//validarea unui numar de document(maxim 10 caractere)
An=0; char sa20i; int er=1,i=0; scanf("%s",&s); if (strlen(s)<=8)
Afor (;i<(int)strlen(s);i++) if (saii<'0' || saii>'9') er=0; if (er) n=atol(s); S
S
void ValidCod(int &n)
//validarea codului unui tert (maxim 3 caractere)
An=0; char sa20i; int er=1; scanf("%s",&s); if (strlen(s)<=3)
Afor (int i=0;i<(int)strlen(s);i++) if (!(saii>='0' && saii<='9')) er=0; if (er) n=atoi(s); S
S
//fisiere.h
#include "arbori.h"
void Jurnalc();
//adaugarea in Jurnalul de cumparari
void Jurnalv();
//adaugarea in Jurnalul de vanzari
void Furnizori();
//adaugarea in nomenclatorul de furnizori
void Clienti();
//adaugarea in nomenclatorul de clienti
void Configurare();
/*modificarea lunii si anului curente, precum si a procentului de tva, a conturilor de tva deductibila, respectiv colectata */
void Plati();
//adaugare in fisierul Plata
void Incasari();
//adaugare in fisierul Incasare
//fisiere.cpp
#include "fisiere.h"
#include <conio.h>
#include <stdio.h>
/*lucrul cu fisiere*/
void Jurnalc()
AFILE *f;
Jc x; int n; f=fopen(".\\jurnalc.dat","rb+"); fseek(f,0,2); printf("\n\tNr factura (CTRL-Z pentru terminare): "); scanf("%d",&n);
while (!feof(stdin))
A x.nrc=n; printf("\tTip document :"); fflush(stdin); gets(x.docc); printf("\tData facturii :"); printf("\n\t\t\tZi :"); scanf("%d",&x.datac.zi); printf("\t\t\tLuna :"); scanf("%d",&x.datac.luna); printf("\t\t\tAn :"); scanf("%d",&x.datac.an); printf("\tCod furnizor :"); scanf("%d",&x.codf); printf("\tTotal factura :"); scanf("%f",&x.totc); printf("\tValoare scut.tva :"); scanf("%f",&x.scutc); printf("\tExplicatii cumparare :"); fflush(stdin); gets(x.explc); printf("\tCont creditor (furnizor) :"); scanf("%d",&x.credit); printf("\tCont debitor :"); scanf("%d",&x.debit); fwriteb(x,f,Jc); printf("\n\tNr factura (CTRL-Z pentru terminare): "); scanf("%d",&n);
S fseek(f,0,0); fread(&x,sizeof(Jc),1,f);
while (!feof(f))
Aprintf("\n %s %d %2d-%2d-%4d %d %10.2f",x.docc,x.nrc,x.datac.zi,x.datac.luna,x.datac.an,x.codf,x.totc); fread(&x,sizeof(Jc),1,f);S getch(); fclose(f);
S
void Jurnalv()
AFILE *f;
Jv x; int n; f=fopen(".\\jurnalv.dat","rb+"); fseek(f,0,SEEK_END); printf("\n\tNr factura (CTRL-Z pentru terminare): "); scanf("%d",&n);
while (!feof(stdin))
A x.nrv=n; printf("\tTip document :"); fflush(stdin); gets(x.docv); printf("\tData facturii :"); printf("\n\t\t\tZi :"); scanf("%d",&x.datav.zi); printf("\t\t\tLuna :"); scanf("%d",&x.datav.luna); printf("\t\t\tAn :"); scanf("%d",&x.datav.an); printf("\tCod client :"); scanf("%d",&x.codc); printf("\tTotal factura :"); scanf("%f",&x.totv ); printf("\tValoare scut.tva :"); scanf("%f",&x.scutv
); printf("\tExplicatii vanzare :"); fflush(stdin); gets(x.explv); printf("\tCont debitor (client):"); scanf("%d",&x.debit); printf("\tCont creditor :"); scanf("%d",&x.credit); fwriteb(x,f,Jv); printf("\n\tNr factura (CTRL-Z pentru terminare): "); scanf("%d",&n);
S fseek(f,0,0); fread(&x,sizeof(Jv),1,f);
while (!feof(f))
Aprintf("\n %s %d %2d-%2d-%4d %d %10.2f",x.docv,x.nrv,x.datav.zi,x.datav.luna,x.datav.an,x.codc,x.totv); fread(&x,sizeof(Jv),1,f);S getch(); fclose(f);
S
void Furnizori()
AFILE *f;
Furn x; int n; f=fopen(".\\furnizor.dat","rb+"); fseek(f,0,2); printf("\n\tCod furnizor(CTRL-Z) : "); scanf("%d",&n);
while (!feof(stdin))
A x.codf=n; printf("\tDenumire furnizor :"); fflush(stdin); gets(x.denf); printf("\tCod fiscal :"); fflush(stdin); gets(x.codfisc); printf("\tBanca furnizor :");fflush(stdin); gets(x.bf); fwriteb(x,f,Furn); fflush(stdin); printf("\n\tCod furnizor(CTRL-Z) : "); scanf("%d",&n);
S fclose(f);
S
void Clienti()
AFILE *f;
Client x; int n; f=fopen(".\\client.dat","rb+"); fseek(f,0,2); printf("\n\tCod client(CTRL-Z): "); scanf("%d",&n);
while (!feof(stdin))
A x.codc=n; printf("\tDenumire client :"); fflush(stdin); gets(x.denc); printf("\tCod fiscal :"); fflush(stdin); gets(x.codfisc); printf("\tBanca client :");fflush(stdin); gets(x.bc); fwriteb(x,f,Client); fflush(stdin); printf("\n\tCod client(CTRL-Z): "); scanf("%d",&n);
S fclose(f);
S
void Configurare()
AFILE *f;
Generale x; int n; f=fopen(".\\generale.dat","rb+"); fseek(f,0,2); fflush(stdin); printf("\n\tLuna (CTRL-Z): "); scanf("%d",&n);
while (!feof(stdin))
A x.luna=n; printf("\tAn :"); scanf("%d",&x.an); printf("\tProcent tva :"); scanf("%d",&x.tva); printf("\tTva deductibila :"); scanf("%u",&x.deduct); printf("\tTva colectata :"); scanf("%u",&x.colect); fwriteb(x,f,Generale); printf("\n\tLuna (CTRL-Z): "); scanf("%d",&n);
S fclose(f);
S
void Plati()
AFILE *f;
Coresp x; int n; f=fopen(".\\plata.dat","rb+"); fseek(f,0,2); printf("\n\tNr factura (CTRL-Z pentru terminare): "); scanf("%d",&n);
while (!feof(stdin))
A x.nrfc=n; printf("\tNr document plata : "); scanf("%d",&x.nr); printf("\tTip document :"); fflush(stdin); gets(x.doc ); printf("\tData facturii :"); printf("\n\t\t\tZi :"); scanf("%d",&x.data.zi); printf("\t\t\tLuna :"); scanf("%d",&x.data.luna); printf("\t\t\tAn :"); scanf("%d",&x.data.an); printf("\tTotal plata :"); scanf("%f",&x.total); printf("\tCont creditor (furnizor) :"); scanf("%d",&x.cont); fwriteb(x,f,Coresp); printf("\n\tNr factura (CTRL-Z pentru terminare): "); scanf("%d",&n);
S fseek(f,0,0); fread(&x,sizeof(Coresp),1,f);
while (!feof(f))
Aprintf("\n %d %d %2d-%2d-%4d %10.2f",x.nrfc,x.nr,x.data.zi,x.data.luna,x.data.an,x.total); fread(&x,sizeof(Coresp),1,f);S getch(); fclose(f);
S
void Incasari()
AFILE *f;
Coresp x; int n; f=fopen(".\\incasare.dat","rb+"); fseek(f,0,2); printf("\n\tNr factura (CTRL-Z pentru terminare): "); scanf("%d",&n);
while (!feof(stdin))
A x.nrfc=n; printf("\tNr document plata : "); scanf("%d",&x.nr); printf("\tTip document :"); fflush(stdin); gets(x.doc ); printf("\tData facturii :"); printf("\n\t\t\tZi :"); scanf("%d",&x.data.zi); printf("\t\t\tLuna :"); scanf("%d",&x.data.luna); printf("\t\t\tAn :"); scanf("%d",&x.data.an); printf("\tTotal plata :"); scanf("%f",&x.total); printf("\tCont creditor (furnizor) :"); scanf("%d",&x.cont); fwriteb(x,f,Coresp); printf("\n\tNr factura (CTRL-Z pentru terminare): "); scanf("%d",&n);
S fseek(f,0,0); fread(&x,sizeof(Coresp),1,f);
while (!feof(f))
Aprintf("\n %d %d %2d-%2d-%4d %10.2f",x.nrfc,x.nr,x.data.zi,x.data.luna,x.data.an,x.total); fread(&x,sizeof(Coresp),1,f);S getch(); fclose(f);
S
//arbori.h
#include <stdio.h>
#include "structuri.h"
#define fwriteb(x,f,tip) fwrite(&(x),sizeof(tip),1,(f))
#define freadb(x,f,tip) fread(&(x),sizeof(tip),1,(f))
#define table " Data | Total fc. | Scut. tva | Baza | Tva | Explicatii
"
#define tert "\nNr.doc.|Doc. |Data | Total fc.| Scut. tva| Baza | Tva |Expl.
|"
#define coresp "\n |Nr.doc.|Doc. |Data plata|Total plata| Sold |"
#define jurnal "\nNr |Doc. |Nr.doc.| Data | Explicatii |ContDeb|ContCred|Suma
deb|Suma cred"
/*======ANTETELE SUBPROGRAMELOR UTILIZAND STRUCTURA - ARBORE====*/
int ComparaJc(Jc const & art1,Jc const & art2);
/*Compara 2 articole de tip Jc in functie de data (triplet zi, luna, an)*/
void ArbJc(ptarb1 &r, Jc val);
/*se va realiza inserarea in arborele binar tinand cont de doua chei, si anume data facturii si numarul acesteia (cheia este astfel unica)*/
void StArbJc(ptarb1 &r);
void ArbFurn(ptarb3 &r, Furn val);
void StArbFurn(ptarb3 &r);
ptarb3 CautFurn(ptarb3 r,int val);
void TiparJc(ptarb1 r, ptarb3 f, int tva);
/*Se va realizarea parcurgerea in inordine, cu ecou, a arborelui creat*/
int ComparaJv(Jv const & art1,Jv const & art2);
/*Compara 2 articole de tip Jv in functie de data (triplet zi, luna, an)*/
void ArbJv(ptarb2 &r, Jv val);
/*se va realiza inserarea in arborele binar tinand cont de doua chei, si anume data facturii si numarul acesteia (cheia este astfel unica)*/
void ArbClient(ptarb4 &r, Client val);
ptarb4 CautClient(ptarb4 r,int val);
void TiparJv(ptarb2 r, ptarb4 f, int tva);
/*Se va realizarea parcurgerea in inordine, cu ecou, a arborelui creat*/
void StArbJv(ptarb2 &r);
void StArbClient(ptarb4 &r);
void ArbArbJc(ptarbjc &r, Jc val);
/*se va realiza inserarea in arborele binar tinand cont de doua chei, si anume data facturii si numarul acesteia (cheia este astfel unica)*/
void AfisNota(unsigned long debit, unsigned long credit, float baza, unsigned
long tvacont, float tva, bool deductibila);
/*realizeaza afisarea unei note contabile cu un minim de date de intrare*/
void TiparJcPlata(ptarbjc rad,ptarb3 f, int tva,unsigned long tvacont);
void ArbArbPlata(ptarbjc &rad, ptarb &r, Coresp val);
void CautJcPlata(ptarbjc rad, unsigned long nrfc,ptarbjc &p);
void ArbArbJv(ptarbjv &r, Jv val);
/*se va realiza inserarea in arborele binar tinand cont de doua chei, si anume data facturii si numarul acesteia (cheia este astfel unica)*/
void TiparJvIncas(ptarbjv rad,ptarb4 c, int tva,unsigned long tvacont);
void ArbArbIncas(ptarbjv &rad, ptarb &r, Coresp val);
void CautJvIncas(ptarbjv rad, unsigned long nrfc,ptarbjv &p);
void ArbCautare(ptarbc &r, unsigned long nr, int poz);
ptarbc Cautare(ptarbc r,unsigned long nr);
void StCautare(ptarbc &r);
void TiparPl(ptarb p, float total, float &soldtmp);
void TiparJcPl(ptarbjc rad, float &sold);
void TiparFurnC(ptarbjc r);
void TiparIn(ptarb p, float total, float &soldtmp);
void TiparJvIn(ptarbjv rad, float &sold);
void TiparClientC(ptarbjv r);
int ComparaDate(Data const & art1,Data const & art2);
/*Crearea aborelui ninar de cautare corespunzator inregistrarilor din registrul
jurnal*/ void ArbRegJurnal(ptarbreg &r, char docai, unsigned long nr, Data data,
char explai, unsigned long debit,unsigned long credit, float suma, unsigned long tvacont,
float sumatva,bool deduct, bool colect);
void ArbCautare(ptarbcautare &r, unsigned long nr, unsigned long cont);
ptarbcautare CautCont(ptarbcautare r,unsigned long nr);
void TiparArbRegJurnal(ptarbreg rad);
void TiparRegJurnal(ptarbreg rad);
//salvarea registrului jurnal afisat si pe ecran intr-un fisier text void SalvArbRegJurnal(ptarbreg rad,FILE *h);
void SalvRegJurnal(ptarbreg rad,FILE *h,int luna, int an);
int PrelTva(int luna, int an);
//arbori.cpp
#include "arbori.h"
#include "iomanip.h"
#include "iostream.h"
#include <conio.h>
#include <malloc.h>
#include <stdio.h>
#include <windows.h>
#include <wincon.h>
int ComparaJc(Jc const & art1,Jc const & art2)
Aif (art1.datac.an==art2.datac.an && art1.datac.luna==art2.datac.luna
&& art1.datac.zi==art2.datac.zi) return 0; else if (art1.datac.an<art2.datac.an || (art1.datac.an==art2.datac.an &&
art1.datac.luna<art2.datac.luna) ||
((art1.datac.an==art2.datac.an) && (art1.datac.luna==art2.datac.luna)
&& (art1.datac.zi<=art2.datac.zi))) return -1; return 1;
S
/*se va realiza inserarea in arborele binar tinand cont de doua chei, si anume data facturii si numarul acesteia (cheia este astfel unica)*/ void ArbJc(ptarb1 &r, Jc val)
Aif (!r) A ptarb1 nou=new arb1; nou->st=NULL; nou->dr=NULL; nou->inf=val; r=nou;S else if (ComparaJc(r->inf,val)==-1) ArbJc(r->dr,val); else if (ComparaJc(r->inf,val)==1) ArbJc(r->st,val); else if (r->inf.nrc<val.nrc) ArbJc(r->dr,val); else ArbJc(r->st,val);
S
void StArbJc(ptarb1 &r)
Aif (r)
AStArbJc(r->st); StArbJc(r->dr); delete r;S
S
void ArbFurn(ptarb3 &r, Furn val)
Aif (!r) A ptarb3 nou=new arb3; nou->st=NULL; nou->dr=NULL; nou->inf=val; r=nou;S else if (r->inf.codf<val.codf) ArbFurn(r->dr,val); else ArbFurn(r->st,val);
S
void StArbFurn(ptarb3 &r)
Aif (r)
AStArbFurn(r->st); StArbFurn(r->dr); delete r;S
S
ptarb3 CautFurn(ptarb3 r,int val)
Aif (r) if (r->inf.codf==val) return r; else if (r->inf.codf>val) return CautFurn(r->st,val); else return CautFurn(r->dr,val); else return NULL;
S
void TiparJc(ptarb1 r, ptarb3 f, int tva)
Astatic i=1; if (r)
ATiparJc(r->st,f,tva); cout<<"\n\n "<<i++<<"."<<endl; cout<<" Document : "<<strupr(r->inf.docc)<&