Referat, comentariu, eseu, proiect, lucrare bacalaureat, liceu si facultate
Top referateAdmitereTesteUtileContact
      
    


 


Ultimele referate adaugate

Adauga referat - poti sa ne ajuti cu un referat?

Politica de confidentialitate



Ultimele referate descarcare de pe site
  CREDITUL IPOTECAR PENTRU INVESTITII IMOBILIARE (economie)
  Comertul cu amanuntul (economie)
  IDENTIFICAREA CRIMINALISTICA (drept)
  Mecanismul motor, Biela, organe mobile proiect (diverse)
  O scrisoare pierduta (romana)
  O scrisoare pierduta (romana)
  Ion DRUTA (romana)
  COMPORTAMENT PROSOCIAL-COMPORTAMENT ANTISOCIAL (psihologie)
  COMPORTAMENT PROSOCIAL-COMPORTAMENT ANTISOCIAL (psihologie)
  Starea civila (geografie)
 

Ultimele referate cautate in site
   domnisoara hus
   legume
    istoria unui galban
   metanol
   recapitulare
   profitul
   caract
   comentariu liric
   radiolocatia
   praslea cel voinic si merele da aur
 
despre:
 
STRUCTURI DE DATE proiect - contabilitate primara
Colt dreapta
Vizite: ? Nota: ? Ce reprezinta? Intrebari si raspunsuri
 
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)<&


Colt dreapta
Creeaza cont
Comentarii:

Nu ai gasit ce cautai? Crezi ca ceva ne lipseste? Lasa-ti comentariul si incercam sa te ajutam.
Esti satisfacut de calitarea acestui referat, eseu, cometariu? Apreciem aprecierile voastre.

Nume (obligatoriu):

Email (obligatoriu, nu va fi publicat):

Site URL (optional):


Comentariile tale: (NO HTML)


Noteaza referatul:
In prezent referatul este notat cu: ? (media unui numar de ? de note primite).

2345678910

 
Copyright© 2005 - 2024 | Trimite referat | Harta site | Adauga in favorite
Colt dreapta