Sistem Informatic Pentru Gestiunea Financiara a Unei Societati Comerciale

=== L ===

CUPRINS

INTRODUCERE

Odată cu evoluția economiei mondiale, afacerile au început să devină tot mai complexe, și astfel volumul de date ce trebuiau prelucrate a crescut într-un ritm accelerat. Evoluția tehnologiei informației și posibilitățile pe care aceasta le oferă au dus la apariția imediată a produselor software de analiză și gestiune a datelor, ca soluție la această problemă, cele mai multe aplicații de acest gen folosind bazele de date relaționale, ca modalitate de stocare a informației. În prezent, desfășurarea oricărei activități economice, financiare sau bancare nu se poate imagina fără utilizarea unui puternic suport informatic care să asigure avantajul concurențial în raport cu ceilalți competitori de pe piață.

Lucrarea de față prezintă modalitățile de definire și utilizare a bazelor de date folosind limbajul SQL și este însoțită pentru exemplificare de aplicația de gestiune financiară GeFinSQL. Pentru dezvoltarea programului a fost folosit limbajul de programare C#, și sistemul de gestiune a bazelor de date MySQL.

Printre funcțiile aplicației GeFinSQL se numără stocarea informațiilor privind furnizorii și clienții unei societăți comerciale, a datelor legate de salariații acesteia, simularea calculului salariilor și a contribuțiilor individuale ale angajaților, gestiunea intrărilor și ieșirilor contabile, precum și realizarea unei situații generale a conturilor. Aplicația este de tip multi-user, multi-societate, deci se pot stoca informații de la mai multe societăți comerciale, accesul la date fiind restricționat de drepturile pe care il are fiecare utilizator asupra societății respective.

Motivul alegerii acestei teme a fost posibilitatea îmbinării lucrului cu baze de date, utilizarea unui limbaj de programare orientat-obiect și aplicarea și aprofundarea cunoștințelor din domeniului financiar-contabil.

Lucrarea este structurată pe 3 capitole, acoperind atât noțiuni teoretice cât și aspecte legate de modul de realizare a aplicației GeFinSQL.

În primul capitol sunt prezentate câteva aspecte legate de gestiunea financiară a societăților comerciale.

În capitolul al doilea sunt prezentate soluțiile software existente pe piață pentru dezvoltarea de aplicații windows și gestiune a bazelor de date relaționale. Sunt descrise mai detaliat limbajul SQL și soluțiile alese pentru dezvoltarea aplicației GeFinSQL, MySQL și limbajului de programare C#.

Al treilea capitol cuprinde o descriere a etapelor de analiză și proiectare a structurii bazei de date folosite precum și aspecte ale interfeței, incluzând aici tipurile de obiecte, funcții și alte componente ale limbajului C# ce au fost utilizate, precum și modul de realizare a conexiunii cu baza de date, tabelele, tipurile de date folosite și instrucțiunile ce stau la baza dezvoltării bazei de date și interogării acesteia. Tot acest capitol tratează aspecte legate de funcționalitatea programului GeFinSQL pe fiecare modul. În continuare se va face o descriere în detaliu a modului în care datele sunt introduse în baza de date folosind interfața grafică, exemplificând prin introducerea de date fictive, folosind interfața grafică. Prin popularea bazei de date și crearea mai multor utilizatori cu drepturi diferite de acces, se va evidenția faptul că prin intermediul aplicației există un control total al datelor. Fiecare utilizator are acces numai la informațiile care îl privesc, atfel asigurăndu-se securitatea tuturor datelor stocate pe server.

În secțiunea Anexe sunt cuprinse fragmente mai relevante din codul sursă, capturi de ecran și alte figuri care ajută la prezentarea anumitor aspecte ale aplicației.

CAPITOLUL 1

GESTIUNEA FINANCIARĂ A SOCIETĂȚILOR COMERCIALE

Gestiunea finaciară poate fi definită ca un ansamblu de activități care concură la realizarea și ajustarea fluxului financiar și a fondurilor precum și la buna administrare a resurselor financiare ale firmei. Domeniul gestiunii este foarte întins. Obiectivul gestiunii îl reprezintă menținerea echilibrului fluxurilor financiare și a unui nivel minim al rentabilității utilizării fondurilor.

Noțiuni generale privind societățile comerciale

Societățile comerciale sunt grupări de persoane constituite pe baza unui contract de societate și beneficiind de personalitate juridică, în care asociații înțeleg să pună în comun anumite bunuri, pentru exercitarea unor fapte de comerț, în scopul realizării și împărțirii beneficiilor rezultate.

În România, conform Legii numărul 31/1990, publicată în Monitorul Oficial al României, numerele 126 – 127 din 17 noiembrie 1990, persoanele juridice își pot desfășura afacerile într-o varietate de forme, toate fiind, conform legii, forme legale.

Astfel, legea definește cinci diferite tipuri de societăți comerciale ce pot fi constituite:

Societăți în nume colectiv

Societăți în comandită simplă

Societăți în comandită pe acțiuni

Societăți pe acțiuni

Societăți cu răspundere limitată

Elemente definitorii ale societății comerciale ca persoană juridică:

Societatea comercială dobândește personalitate juridică din momentul constituirii cu îndeplinirea tuturor formalităților stabilite de lege. Astfel conform articolului 1 din legea 31/1990 pentru efectuarea de acte de comerț, persoanele fizice și juridice se pot asocia și constitui societăti comerciale cu respectarea dispozitiilor acestei legi. Societățile comerciale cu sediul juridic în România sunt persoane juridice române. Elementele constitutive ale societăților comerciale impuse de lege sunt:

organizare de sine-stătătoare

un patrimoniu propriu

un scop determinat

Aceste elemente evidențiază personalitatea juridică a societăților comerciale, personalitate ce le conferă acestora calitatea de a fi titulare de drepturi și obligații. Prin dobândirea personalității juridice, societatea comercială are și o voință proprie care exprimă voințele individuale ale asociaților, o capacitate care îi permite să dobândească drepturi și să își asume obligații precum și dreptul de a sta în justiție având calitatea de reclamantă sau pârâtă. Societatea comercială are un anumit statut care cuprinde anumite elemente de identificare a subiectului de drept:

firma

sediul

naționalitatea

Funcția financiară a întreprinderii și principii de organizare a activității financiare

Funcția financiară rezultă din convergența unor factori de ordin teoretic și practic. Dezvoltarea tehnicilor manageriale și a teoriei financiare a permis depășirea cadrului contabil și juridic tradițional. În prezent funcția financiară dispune de o doctrină coerentă, iar politica financiară se sprijină pe concepte specifice.

Funcția financiară este integrată în cea de conducere generală, cele mai multe informații fiind furnizate de sistemul informațional contabil. Finanțele firmei ramân strâns legate de cadrul juridic în care se înscriu relațiile cu mediul exterior. Funcția financiară are un rol operațional, un rol funcțional și unul politic.

Rolul operațional implică luarea unor decizii cu privire la colectarea capitalurilor. Acest rol vizează asigurarea fluxurilor financiare în strânsă legătură cu mediul înconjurător. Cuprinde încasarea creanțelor și plata furnizorilor, gestiunea trezoreriei și negocierea creditelor bancare.

Rolul funcțional constă în participarea la tratarea informațiilor necesare gestiunii și acordarea de asistență celorlalte funcții ale firmei.

Rolul politic constă în integrarea constrângerilor și a restricțiilor externe care influențează activitatea firmei și de care depinde autonomia acesteia.

În mod sintetic, activitatea firmei poate fi redată prin următoarele funcții :

1. Funcția de producție

2. Funcția de comercializare

3. Funcția financiară

Aceste 3 funcții asigură legaturile materiale și financiare cu mediul extern.

Funcția financiară implică efectuarea a două categorii de activități : activități cu efecte directe asupra capitalurilor (emitere de acțiuni și obligațiuni, contractarea si rambursarea creditelor, etc.), activități cu efecte indirecte asupra capitalului (lucrări de contabilitate, analiză și control) care au însă un rol important în conducerea firmei definind cadrul de acțiune al tuturor celorlalte funcții ale firmei.

Ca agent economic întreprinderea intră în relații cu alți agenți economici pe care îi întâlnește pe diferite piețe în care se schimbă bunuri și servicii. Aceste schimburi aparțin universului financiar care apare odată cu universul economic. Agenții economici care se întâlnesc pe diferite piețe constituie contextul social în care funcționează întreprinderea.

Acești agenți pot fi grupați în funcție de piețe în :

furnizori – sunt întâlniți pe piețele de materii prime și servicii

clienți – pe piețele de produse și servicii

salariați – cei care intră în relația cerere-ofertă pe piața muncii

Totalitatea raporturilor ce apar în cadrul activității economice, financiare și sociale la nivelul întreprinderii reprezintă esența finanțelor întreprinderii. În plan suprastructural finanțele întreprinderii se prezintă ca o ramură a științei financiare.

Pe baza informațiilor financiare se pot efectua analize de eficiență în urma cărora se pot lua decizii pentru îmbunătățirea activității întreprinderii.

Analiza economico-financiară

Analiza economico-financiară reprezintă un ansamblu de concepte, metode, tehnici, procedee și instrumente care asigură tratarea informațiilor interne și externe în vederea:

formulării unor aprecieri pertinente referitoare la situația economico-financiară a unei firme

identificării factorilor, cauzelor și condițiilor care au determinat acea situație economică a firmei

identificării rezervelor interne de îmbunătățire a activității acesteia, din punct de vedere al utilizării eficiente a resurselor umane, materiale si financiare

Analiza rezultatelor activității de producție și comercializare

În activitatea practică a societăților comerciale principalii indicatori de măsurare a activității de producție și comercializare sunt: cifra de afaceri, producția marfă fabricată, producția exercițiului (producția globală), valoarea adăugată.

1. Cifra de afaceri reflectă performanța comercială a întreprinderii și reprezintă suma veniturilor realizate din vânzările de mărfuri și executarea de lucrări și prestări servicii.

2. Producția marfă fabricată – exprimă valoarea produselor fabricate, lucrărilor executate și serviciilor prestate destinate vânzării.

3. Producția exercițiului sau producția globală reflectă în expresie valorică volumul total al activității de producție desfășurată de firmă pe o perioadă determinată, de obicei un an. Producția exercitiului este formată din producția vândută, variația producției stocate și producția realizată în scopuri proprii și capitalizată.

4. Valoarea adăugată reprezintă surplusul de venituri peste valoarea consumurilor provenind de la terți, bogația creată prin valorificarea resurselor tehnice, umane și financiare ale întreprinderii. Valoarea adăugată este un indicator de performanță al firmei dar și un indicator în sistemul fiscalității.

Analiza dinamicii activității de producție și comercializare se realizează cu scopul de a pune în evidență:

obiectivele stabilite în raport cu realizările perioadelor precedente

gradul de realizare a obiectivelor stabilite prin planul de afaceri

cauzele care pot determina anumite abateri

măsurile ce se impun pentru corectarea situațiilor nefavorabile intervenite

Analiza situației concrete într-o întreprindere se realizează în raport cu corelațiile normale care trebuie să existe între indicatorii valorici, corelații care se bazează pe teoria indicilor statistici.

Analiza cheltuielilor firmei

Cheltuielile reprezintă sumele sau valorile plătite sau de plătit pentru:

consumuri, lucrări executate și serviciile prestate de terți

remunerarea personalului

executarea unor obligații legale sau contractuale

constituirea amortizărilor și provizioanelor

consumuri excepționale

Costurile reprezintă totalitatea consumurilor exprimate în formă bănească pe care le efectuează firma în vederea realizării unei anumite producții sau a unui singur produs.

Criterii de clasificare a cheltuielilor:

A. După natura lor:

cheltuieli de exploatare (cheltuieli cu materii prime și materiale consumabile, cheltuieli cu lucrările și serviciile executate de terți, cheltuieli cu personalul, cheltuieli cu amortizarea și provizioanele aferente exploatării, alte cheltuieli de exploatare)

cheltuieli financiare (pierderi din creanțe legate de participații, cheltuieli privind investițiile financiare cedate, diferențe nefavorabile de curs valutar, dobânzile aferente creditelor atrase, privind exercițiul financiar în curs, sconturi acordate clienților)

cheltuieli extraordinare legate de evenimente excepționale (pierderi din calamități, debitori diverși)

B. După comportamentul față de volumul producției:

cheltuieli variabile care sunt dependente de volumul de activitate (cheltuieli cu materii prime și materiale aferente obținerii producției, cheltuieli cu salariile personalului productiv, cheltuieli cu servicii și lucrări prestate de terți în scopul obținerii producției)

cheltuieli fixe care sunt constante, pe termen limitat, în raport cu volumul de activitate, dar dependente de capacitatea de producție și distribuție (amortizare, cheltuieli cu caracter fix)

C. După conținutul lor:

cheltuieli materiale care cuprind consumuri de resurse materiale și amortizarea mijloacelor fixe

cheltuieli cu salariile și aferente utilizării personalului (asigurări si protecție socială)

Cheltuielile și veniturile întreprinderii reflectă o arie largă de fenomene economico-financiare legate de consumul și utilizarea factorilor de exploatare (de producție), natura, munca și capitalul, respectiv de recuperarea resurselor utilizate.

Problemele de bază ale diagnosticării cheltuielilor se referă, pe de o parte, la cheltuielile aferente veniturilor întreprinderii (în mod deosebit cele de exploatare), iar pe de altă parte, la eficiența diferitelor categorii ale acestora (variabile, fixe, directe, indirecte, materiale, salariale, cu dobanzile, etc.).

Cheltuielile totale ale întreprinderii sunt grupate în cadrul contului de profit și pierdere, în cheltuieli de exploatare, cheltuieli financiare si cheltuieli extraordinare. Corespunzător acestor categorii de cheltuieli, veniturile totale ale întreprinderii se grupează în: venituri din exploatare (venituri din vânzarea produselor, mărfurilor, executarea lucrărilor și prestarea serviciilor, venituri din producția stocată și venituri din producția de imobilizări), venituri financiare (dobânzi încasate, venituri din titluri de plasament, diferențe favorabile de curs valutar, venituri din participații) și respectiv venituri extraordinare (venituri cu caracter conjunctural).

Cheltuielile din exploatare sunt aferente ciclului de exploatare, dețin ponderea cea mai mare în totalul cheluielilor firmei și cuprind ansamblul următoarelor operațiuni: aprovizionarea cu materii prime și materiale, depozitarea acestora, folosirea lor în cadrul procesului de producție, stocarea semifabricatelor, produselor finite și vânzarea acestora, pecum și achiziționarea de mărfuri și ambalaje și vânzarea lor.

Cheltuielile materiale dețin o pondere mai mare sau mai mică în totalul cheluielior de exploatare, în funcție de profilul de activitate al întreprinderii. Aceste cheltuieli cuprind consumurile de resurse materiale și a prestărilor de servicii și însumează cheltuielile cu materiile prime și materialele, cheltuielile cu combustibilii, energia și apa, cheltuielile cu amortizarea, cheltuielile cu obiectele de inventar, cheltuielile cu lucrările și serviciile prestate de terți, și alte cheltuieli materiale.

Folosirea planului de conturi pentru evidența operațiilor economice

Cel mai utilizat instrument pentru a ține evidența operațiilor economice ale unei întreprinderi este contul contabil.

Planul de conturi reprezintă un sistem de clasificare constând dintr-o listă a tuturor conturilor folosite de o entitate economică, ordonate după conținutul economic și funcția contabilă.

Sistemul conturilor

Standardele internaționale de contabilitate cercetează și argumentează științific evenimentele și soluțiile corespunzătoare, evident într-un câmp de rezoluții alternative, așa că atunci când trecem la utilizarea practică a conturilor trebuie să avem în vedere că orice cont se circumscrie într-un anume perimetru, într-un "cadru general" denumit și "Plan contabil general", construit și el după o serie de reguli specifice care țin seama de funcționalitatea conturilor, de conținutul lor economic, de acoperirea necesităților de informare, de calcul și control economic etc. În cadrul standardelor de contabilitate, planul contabil general reprezintă "platforma" de lansare a întregului mecanism de reprezentare și calcul al situației patrimoniale și al rezultatelor obținute. Fiecare cont dimensionat în cadrul planului se delimitează ca o pistă pe care aleargă datele în vederea constituirii indicatorilor economici și financiari necesari în gestiune și comunicare, în măsurarea poziției financiare și a performanțelor. În structura sa cea mai generală conturile sunt sistematizate, înainte de toate, pe clase omogene cu o adresă clar delimitată. Dacă analizăm această structură așa cum este ea reglementată în România, în consens cu normele internaționale de contabilitate, constatăm următorul tablou al conturilor (valabil pentru orice tip de persoană juridică, eventualele paricularități regăsindu-se în interiorul claselor):

clasa 1: Conturi de capitaluri (inclusiv rezultate)

clasa 2: Conturi de active imobilizate

clasa 3: Conturi de stocuri și producție în curs de execuție

clasa 4: Conturi de terți (decontări),

clasa 5: Conturi de trezorerie

clasa 6: Conturi de cheltuieli

clasa 7: Conturi de venituri

clasa 8: Conturi speciale

clasa 9: Conturi interne de gestiune

Contul contabil

Contul contabil este instrumentul cu ajutorul căruia se ține evidența operațiilor economice. Cu ajutorul contului se urmărește operativ existența și mișcarea elementelor patrimoniale. Exprimarea se realizează în etalon bănesc (bani) cu ajutorul cărora se evaluează bunurile, datoriile și tranzacțiile economice. Prin prisma principiului dublei înregistrări a informațiilor, contul contabil se prezintă ca o balanță, sau sub forma literei T, partea stângă purtând numele de Debit, iar partea dreaptă purtând numele de Credit. Într-o parte a contului se înregistrează creșterile iar în cealaltă parte se înregistrează scăderile. Lista conturilor folosite de o entitate se numeste Plan de conturi.

Debitul și creditul nu au aceeași semnificație (înțeles) pentru toate conturile; semnificația debitului și creditului trebuie apreciată în funcție de conținutul economic al elementului urmărit prin cont.

Explicația sumelor înregistrate în cont este necesară pentru a face raportarea la documentul justificativ și a verifica corectitudinea înregistrărilor efectuate. Explicația se poate prezenta în două variante:

explicația descriptivă – în acest caz se descrie pe scurt operațiunea economică precizându-se data, felul și numărul documentului justificativ

explicația contabilă – în acest caz în dreptul sumei înscrise în cont se precizează denumirea sau simbolul contului utilizat pentru înregistrarea aceleiași operațiuni conform principiului dublei înregistrări

Soldul reprezintă existentul la un moment dat al elementului pentru care s-a deschis contul. Soldul se stabilește ca diferență între totalul sumelor debitoare și totalul sumelor creditoare.

Pot să apară trei situații:

atunci când totalul sumelor debitoare este mai mare decât totalul sumelor creditoare, contul prezintă sold debitor (SD)

atunci când totalul sumelor creditoare este mai mare decât totalul sumelor debitoare, contul prezintă sold creditor (SC)

atunci când totalul sumelor debitoare este egal cu totalul sumelor creditoare, contul nu are sold și poartă denumirea de cont "soldat" sau "balansat". La un moment dat un cont nu poate avea decât un singur fel de sold, fie debitor, fie creditor. Conturile balansate nu se înscriu în bilanț deși conținutul lor are o valoare informativă

Soldul stabilit la sfârșitul unei perioade de gestiune poartă numele de sold final (SF). Acesta apare la începutul perioadei următoare de gestiune drept sold inițial (SI).

Obiectivul lucrării

Scopul lucrării de față este proiectarea unui sistem informatic care să permită centralizarea datelor atât financiar-contabile cât și de altă natură din cadrul unei societăți comerciale, pentru a veni în sprijinul analizei economico-financiare. Centralizarea datelor financiare ajută factorii de decizie să obțină o imagine de ansamblu asupra întregii organizații și să satisfacă cerințele financiare ale persoanelor din conducere. Astfel, se pot lua decizii pentru eficientizarea activității și creșterea performanțelor întreprinderii (maximizarea profitului).

Sistemul informatic va avea ca finalitate aplicația de gestiune GeFinSQL. Această aplicație va ține o evidență a următoarelor aspecte:

Intrări și ieșiri de natură financiar-contabilă (gestiunea se va face pe un plan de conturi simplificat)

Furnizori și clienți ai societății comerciale și contractele acestora

Agenți de transport

Angajați

Planul de conturi

CAPITOLUL 2

TEHNOLOGII ȘI LIMBAJE DE PROGRAMARE PENTRU APLICAȚII WINDOWS ȘI GESTIUNEA BAZELOR DE DATE

Tehnologia .NET Framefork

După mai mulți ani de inactivitate pe piața compilatoarelor, Microsoft apare cu o tehnologie nouă, .Net (dot net), încercâd să reducă cât de cât popularitea crescândă a platformei Java pentru soluțiile Enterprise. Astfel, Visual Studio.NET preia podiumul pentru următoarea decadă. Microsoft Visual Studio.NET este cel mai cuprinzător mediu de programare pentru crearea și integrarea rapidă a serviciilor web (Web Services) și al aplicațiilor, mărind productivitatea dezvoltatorilor.

Spre deosebire de versiunea Visual Studio 6 când fiecare software inclus (C++, VB, ASP) avea câte un mediu de dezvoltare de sine stătător acum toate au un mediu de dezvoltare comun, deci, în același mediu de dezvoltare, se pot dezvolta C++, VB.NET, C# cu condiția ca acestea să fie instalate în sistem. Din punct de vedere al tehnologiei, este de spus că pachetul Visual Studio .NET vine cu o tehnologie nouă și anume .NET. Această tehnologie este implementată pe un nou framework, și anume framework-ul .NET.

Proiectat cu o integrare adâncă a standardelor și protocoalelor folosite în Internet, ca de exemplu XML (Extensible Markup Language) și SOAP (Simple Object Access Protocol), Visual Studio.NET scurtează dramatic ciclul de proiectare al aplicațiilor.

O dată cu lansarea .NET-ului, se pun bazele unei platforme care să fie atât de nivel jos, pentru a fi performantă și pentru a ușura portabilitatea, cât și de nivel inalt pentru a permite utilizarea tuturor conceptelor avansate de programare (obiecte, servicii, securitate, etc.).
Ultimele două decenii au aparținut limbajelor C și C++. Ambele furnizează programatorului un control fin, însă acest lucru are un preț în productivitate. În comparație cu alte limbaje cum ar fi Microsoft Visual Basic, aceleași aplicații dezvoltate în C și C++ necesitau mai mult timp pentru a fi realizate. Datorită complexității și timpului îndelungat asociat acestor limbaje, mulți programatori au căutat limbaje care să le ofere un mai bun echilibru între putere și productivitate.

În ziua de azi există limbaje de programare cu productivitate ridicată, însă cu sacrificarea flexibilității cu care erau obișnuiți programatorii de C și C++. Asemenea soluții reprezită constrângeri pe care dezvoltatorii nu le acceptă ușor.

Mediul Visual Studio .NET

Visual Studio este un mediu de dezvoltare integrat (IDE – Integrated Development Environment) produs de Microsoft. Poate fi folosit pentru dezvoltarea de interfețe consolă și grafice cu utilizatorul, precum și dezvoltarea de aplicații windows (folosind windows forms), aplicații web, site-uri web, pentru toate platformele suportate de Microsoft Windows, Windows Mobile, Windows CE, .NET Framework, .NET Compact Framework și Microsoft Silverlight.

Visual Studio.NET dispune de un editor complex de cod, care se folosește pentru crearea, modificarea și depanarea codului aplicației (poate fi vorba de cod Visual Basic.NET, Visual C#.NET etc.). De asemenea, oferă un set de obiecte și instrumente cu ajutorul cărora se pot realiza cu ușurință interfețe cu utilizatorul pentru Windows, Web, servicii WEB etc. O facilitate a editorului de cod din pachetul Microsoft Visual Studio, foarte utilă programatorilor, este „IntelliSense”. Aceasta implementează autocompletarea codului scris de programator (prin combinația de taste CTRL+Spațiu, sau în diverse momente ale scrierii codului sursă), servind de asemenea ca documentație pentru numele variabilelor, funcțiilor, metodelor, etc.

Visual Studio deține anumite servicii lingvistice, care permit orice limbaj de programare pentru a fi suportat (în diferite măsuri), de editorul de cod și depanator. Limbajele de programare integrate includ C / C++ (prin intermediul Visual C++ ), VB.NET (prin Visual Basic .NET ), and C# (prin Visual C# ). Suport pentru alte limbaje, cum ar fi F #, M, Python, și Ruby, printre altele, a fost pus la dispoziție prin intermediul serviciilor de limbaj care trebuie să fie instalat separat. De asemenea, suportă XML / XSLT, HTML / XHTML, JavaScript și CSS. Există și pachete individuale conținând diferite versiuni ale limbajelor din Visual Studio, cum ar fi Microsoft Visual Basic, Visual J#, Visual C#, și Visual C++.

Pe parcursul timpului au existat mai multe versiuni ale mediului Visual Studio:

Visual Studio 97. Microsoft a lansat primul Visual Studio, în 1997, grupând pentru prima dată mai multe din instrumentele sale de programare într-un singur pachet. Visual Studio 97 a fost lansat in doua editii, Professional si Enterprise. Acesta includea Visual Basic 5.0 și Visual C++ 5.0, în primul rând pentru programarea aplicațiilor Windows; Visual J++ 1.1 pentru Java și Visual FoxPro 5.0 pentru baze de date. It introduced Visual InterDev for creating dynamically generated web sites using Active Server Pages . A fost introdus Visual InterDev pentru crearea de site-uri web generate dinamic, utilizând Active Server Pages.

Visual Studio 97 a fost prima încercare de folosire a aceluiași mediu de dezvoltare pentru mai multe limbaje de programare. Visual C++, Visual J++, InterDev, și MSDN Library foloseau același mediu, numit Developer Studio. Visual Basic și Visual FoxPro utilizau medii separate.

Visual Studio 6.0. A doua versiune, versiunea 6.0, a fost lansată în iunie 1998 și este ultima versiune care rulează pe platforma Windows 9x. Versiunile tuturor componentelor sale s-au mutat la 6.0, inclusiv Visual J + +, care a sărit de la 1.1, și Visual InterDev care a fost modificat de la 1.0. Această versiune a fost baza de dezvoltare a sistemului de la Microsoft pentru următorii patru ani, Microsoft concentrându-și eforturile pentru dezvoltarea tehnologiei .NET Framework.

Visual Studio 6.0 a fost ultima versiune pentru a include pachetele Visual Basic bazate pe COM; versiunile ulterioare vor include versiuni ale limbajului bazate pe tehnologia .NET. A fost, de asemenea, ultima versiune care include Visual J++, acesta fiind eliminat, ca urmare a unei înțelegeri cu Sun Microsystems, care solicită companiei Microsoft încetarea producerii de instrumente de programare bazate pe mașina virtuală Java Virtual Machine.

Visual Basic, Visual C++, Visual FoxPro aveau medii de programare separate, în timp ce Visual J++ și Visual InterDev împărțeau un nou mediu comun. Visual Studio 6.0 a fost, de asemenea, ultima versiune care include Visual FoxPro.

Visual Studio .NET. Microsoft a lansat Visual Studio. NET, cod Rainier (de la Muntele Rainier din Washington) în februarie 2002 (în versiune beta a fost lansat în 2001). Cea mai mare schimbare a fost introducerea unui mediu de dezvoltare bazat pe cod gestionat, utilizând. NET Framework. Programele dezvoltate folosind. NET nu sunt compilate în limbaj de mașină (la fel ca în C++, de exemplu), ci folosind un limbaj intermediar (CIL – Common Intermediate Language). În această formă aplicația este apoi trimisă procesorului virtual (CLR) care realizează traducerea în cod mașină și execută aplicația.

Visual Studio. NET 2002 a fost lansat în patru ediții: Academic, Professional, Enterprise Developer, și Enterprise Architect. Microsoft a introdus C# (C Sharp), un nou limbaj de programare,pe platforma .NET. De asemenea, aceasta a introdus succesorul lui Visual J++ denumit Visual J#. Programele dezvoltate cu Visual J# folosesc sintaxa limbajului Java. Cu toate acestea, spre deosebire de programele concepute în Visual J++, aplicațiile Visual J# au ca țintă tehnologia .NET Framework, și nu Java Virtual Machine ca toate celelalte instrumente Java.

Visual Basic a fost radical schimbat pentru a se potrivi cu noul framework, și noua versiune a fost numită Visual Basic .NET. Microsoft de asemenea adaugă extensii la C++, numite Managed Extensions for C++, astfel încât programatori C++ să poată dezvolta programe pe platforma .NET.

Toate limbajele sunt unite, folosind un singur mediu, interfața este mult îmbunătățită facilitând o mai bună gestionare a resurselor.

Visual Studio .NET 2003.

În aprilie 2003, Microsoft a introdus un upgrade minor la Visual Studio .NET numit Visual Studio .NET 2003, cod Everett (de la orașul cu același nume). Acesta include un upgrade la .NET Framework, versiunea 1.1, și este prima lansare care suportă dezvoltarea de programe pentru dispozitive mobile, utilizând fie ASP.NET sau .NET Compact Framework.

Visual Studio. NET 2003 a fost lansat în aceleași patru ediții: Academic, Professional, Enterprise Developer, și Enterprise Architect.

Visual Studio 2005. Visual Studio 2005, cod Whidbey (o referire la Insula Whidbey), a fost lansat on-line, în octombrie 2005 și la magazine, cu câteva săptămâni mai târziu. Microsoft a scos titulatura ". NET" de la Visual Studio 2005 (precum și de la orice alt produs .NET), dar este încă bazat pe platforma .NET Framework, care a fost actualizată la versiunea 2.0. Aceasta este ultima versiune disponibilă pentru Windows 2000. Microsoft a lansat Service Pack 1 pentru Visual Studio 2005 pe 14 decembrie 2006. Un alt update pentru Service Pack 1, care oferă compatibilitate Windows Vista a fost făcut disponibil pe 3 iunie 2007.

Visual Studio 2005 a fost actualizat pentru a sprijini toate noile facilități introduse în .NET Framework 2.0, inclusiv genericele și ASP.NET 2.0. Facilitatea IntelliSense caracteristică în Visual Studio a fost actualizată pentru generice și noi tipuri de proiecte au fost adăugate pentru a sprijini ASP.NET Web Services. Visual Studio 2005 include, de asemenea, un server web local, separat de IIS, care poate fi folosit pentru a găzdui aplicații ASP.NET în perioada de dezvoltare și testare. De asemenea, suportă toate bazele de date SQL Server 2005. Instrumentele de dezvoltare pentru baze de date s-au actualizat pentru a sprijini ADO.NET 2.0, care este inclus în .NET Framework 2.0. Visual Studio 2005 adăugat de asemenea, suport pentru aplicații pe 64 de biți.

Visual Studio 2008. Visual Studio 2008, cod Orcas, a fost lansat pentru abonații MSDN pe 19 noiembrie 2007, alături de .NET Framework 3.5. Numele de cod Orcas este, la fel ca Whidbey, o trimitere la o insulă în Puget Sound, Orcas Island. Codul sursă pentru Visual Studio 2008 va fi disponibil sub licență unora din partenerii Microsoft. Microsoft a lansat Service Pack 1 pentru Visual Studio 2008, la 11 august 2008.

Visual Studio, adaugă o nouă versiune a Microsoft Foundation Classes (MFC 9.0), care adaugă suport pentru stilurile vizuale și interfața utilizator ale Windows Vista.

În depanatorul Visual Studio 2008 sunt incluse facilități ce permit depanarea aplicațiilor multi-thread.

Visual Studio 2010. Visual Studio 2010, cod "Hawaii", este în curs de dezvoltare.

Limbajul Visual Basic

Visual Basic (VB) este un limbaj de programare produs de Microsoft, care a fost derivat din limbajul Basic. VB este popular datorită interfeței grafice pe care o folosește, interfață relativ simplu de utilizat.

Visual Basic face parte din pachetul Visual Studio al companiei Microsoft și este axat pe componenta de interfață a programului, programatorul putând realiza cu ușurință interfețe standardizate de tip Windows (ferestre, butoane, liste etc.) fără a fi nevoie de scrierea de cod pentru acest lucru. Visual Basic deține o bibliotecă de componente vizuale (liste, calendare, meniuri etc.) a căror componente (grafică și funcțională) sunt deja implementate, având posibilitatea ca programatorul să introducă și să folosească componente proprii sau realizate de alți programatori.

Visual Basic este un limbaj pur orientat pe obiecte (OO), având deja implementată o listă de clase cu utilizare generală. Până la versiunea 6, VB putea utiliza și dezvolta componente COM/COM+ și ActivX dar și librării clasice de funcții tip DLL. Odată cu apariția versiunii 7, adică odată cu apariția tehnologiei .NET, VB (acum VB .NET) poate utiliza și crea și componente .NET cu toate avantajele pe care acestea le aduc. VB este un limbaj de nivel înalt având implementate mai multe niveluri de abstractizare a dezvoltării unei aplicații dar și posibilitatea de compilare în formatul Windows EXE sau DLL de 16 și 32 biți.

Unul dintre punctele forte ale libajului VB este acela că se pot realiza într-un timp relativ scurt aplicații complexe și se pot utiliza relativ simplu sisteme informatice dedicate (cum ar fi bazele de date – VB poate utiliza toate sistemele de gestiune a bazelor de date cunoscute, direct sau prin intermediul ODBC).

Utilizarea limbajului VB este una generală, putând fi folosit la crearea de programe simple, educaționale dar și la crearea de aplicații complexe.

Limbajul C++

Visual C++ este un mediu de programare integrat pentru limbajul C++, produs de Microsoft.

Odată cu acceptarea beneficiilor aduse de interfața grafică a MS Windows (GUI) programarea pentru acest mediu a devenit foarte căutată. Programarea pentru Windows este diferită de cea orientată pe tranzacții (old-style batch). O diferență esențială între cele două este că un program rulat sub Windows procesează informațiile utilizatorului cu ajutorul mesajelor de la sistemul de operare, pe când un program MS-DOS folosește sistemul de operare pentru a furniza informațiile. Visual C++, produs de firma Microsoft, este un limbaj textual ce folosește un program de construit interfețe grafice pentru a ușura munca programatorului ce are de construit interfețe decente.

C++ este una dintre componentele Visual C++. Totuși, compilatorul poate procesa atât cod sursă C cât și C++ iar versiunea 4.0 compilează si Fortran. Visual C++ include de asemenea o colecție mare și elaborată de unelte de dezvoltare software (software development tools) toate folosite printr-o interfață cu ferestre.

Unelte ale limbajului:

Microsoft Foundation Classes (MFC) – o bibliotecă de clase C++ ce ușurează crearea de aplicații Windows.

App Wizard – un generator de cod ce creează un schelet funcțional al unei aplicații Windows cu trăsături, nume de clase și nume de surse de cod. Ajută la programarea rapidă a unei aplicații.

Class Wizard – un program ce generează cod pentru o nouă clasă sau funcție. Scrie prototipurile, corpurile funcțiilor și codul pentru a conecta mesajele de scheletul aplicației.

App Studio – editor de meniuri și cutii de dialog în format WYSIWYG (what you see is what you get – ceea ce vezi este ceea ce primești).

Limbajul Borland Delphi

Mediul de dezvoltare Delphi al firmei Borland a apărut, în prima lui versiune (Delphi 1) în anul 1992, ca o aplicație pe 16 biți lucrând sub sistemele de operare Windows 3.1 și 3.11. Își are originea în produsul Borland Pascal with Objects, versiunea 7.0 (aplicație DOS ce permitea dezvoltarea atât a aplicațiilor DOS, cât și a celor Windows pe 16 biți). Începând cu versiune a doua, Delphi 2, mediul devine o aplicație Windows destinată atât dezvoltării aplicațiilor Windows pentru sistemele de operare pe 32 de biți cât și aplicațiilor de tip consolă. Este primul mediu de dezvoltare care introduce conceptul de Two way programming prin care codul sursă se poate genera atât prin introducere de la tastatură cât și prin operații grafice în interfața aplicației (concept utilizat astăzi în quasi-totalitatea mediilor de dezvoltare a aplicațiilor). Începând cu versiunea Delphi 5 este posibilă dezvoltarea aplicațiilor pe dublă platformă (cross-platform), Windows și Linux. Până la versiunea Delphi 8, numerele versiunile au fost succesive. Versiunea Delphi 8 a fost succedată de versiunea Delphi 2005. Începând cu versiunea a Delphi 8, aplicațiile se pot dezvolta și pe platformă .NET utilizând fie ierarhia nativă de obiecte (clase) ale Delphi, fie cea furnizată de către .NET Framework.
De menționat că începând cu versiunea Delphi 3, firma Borland a început sa livreze și produsul C++ Builder care utilizează, în esență, aceeași ierarhie de clase ca în Delphi dar utilizează ca limbaj de lucru C++, în loc de Object Pascal. De altfel, aproape toți dezvoltatorii de componente își livrează componentele concomitent pentru Delphi și C++ Builder. Versiunile .NET ale lui C++ Builder utilizează limbajul C# și poartă numele de Borland C# Builder.

Ca și o caracterizare succintă a produsului, se poate spune că el este apropiat (prin modelul obiectual) de limbajul Java, prin facilitățile lui de dezvoltare rapidă a aplicațiilor (datorate mediului de dezvoltare) de produsul Visual Basic și, prin ambele caracteristici enumerate anterior, de produsul C# din Visual Studio .NET (de altfel, șeful proiectului C# la Microsoft și unii dintre proiectanții lui .NET Framework, Anders Hejlsberg, a fost anterior șeful proiectului Delphi la Borland).

Limbajul C#

Limbajul C# este un limbaj simplu, modern, orientat pe obiecte conceput pentru a dezvolta aplicații care să ruleze pe platforma .Net Framework. Combină productivitatea limbajelor de dezvoltare rapidă a aplicațiilor cu puterea brută a limbajului C++.
Codul C# este compilat ca și cod de bază, ceea ce înseamnă că beneficiază de serviciile CLR. Aceste servicii includ interoperabilitea limbajelor, garbage collector, securitate ridicată și suportul versiunilor imbunătățite. Printre avantajele limbajului C# mai amintim:

Dezvoltare rapidă de aplicații. Unul din cele mai importante obiective ale Microsoft pentru C# este suport pentru RAD (Rapid Application Development). În timp ce VB și Delphi exceleaza în aceste domenii, C++ nu a fost tocmai un succes. Limbajul în sine este complex și greu de mânuit, și puține biblioteci C++ oferă interfețe simple. În plus, managementul manual al memoriei și modelul de type-casting complex fac depanarea la C++ foarte dificilă.

Simplicitate. C# simplifică mult scrierea de programe, limbajul preluând din munca programatorului, față de C++, limbaj destul de greu e mânuit. De asemenea, gradul de învățare a limbajului este foarte ridicat.

Suport pentru COM si .Net. Pentru a sprijini atât platforma COM, cât și .Net, C# include o importantă facilitate a limbajului, numită atribute. Un atribut este de fapt o clasă C# care <> codul sursă pentru a oferi metainformatie. Atributele facilitează suportul oferit de C# unor tehnologii specifice precum COM sau .Net fără a îngreuna specificațiile limbajului în sine.

Accesul aplicatiei la resurse specifice platforme. Spre deosebire de mașina virtuală Java, .Net runtime oferă acces programatic la resursele specifice platformei. Un program C# poate folosi, de exemplu, Windows API pentru a rula ca o aplicație completă sub Windows 2000. Același program poate rula pe un PDA folosind subsetul Windows CE API. Bineințeles, nu toate serviciile pe care aplicația le așteaptă vor fi disponibile pe toate mașinile.

Deoarece am ales limbajul C# pentru realizarea aplicației GeFinSQL, voi face o caracterizare mai amănunțită a acestuia:

În C#, tipurile de date se împart în două categorii principale: tipuri valoare și tipuri referință. Diferența dintre ele este că variabilele de tip referință conțin referințe (pointeri) spre datele propriu-zise, care se află în heap, pe când variabilele de tip valoare conțin valorile efective. Această deosebire se observă, de exemplu, la atribuiri sau la apeluri de funcții.
La o atribuire care implică tipuri referință, referința spre un obiect din memorie este duplicată, dar obiectul în sine este unul singur (are loc fenomenul de aliasing – mai multe nume pentru același obiect). La o atribuire care implică tipuri valoare, conținutul variabilei este duplicat în variabila destinație. Tipurile valoare sunt structurile (struct) și enumerările (enum). Tipuri referință sunt clasele (class), interfețele (interface), tablourile și delegările (delegate).
Poate părea surprinzător, dar unele din tipurile "primitive" cu care suntem obișnuiți din C (int, de exemplu), sunt tot structuri. Altele, cum ar fi string, sunt clase. Singurul lucru care le face mai speciale în C# este faptul că, la compilare, textul din codul sursă este identificat și convertit automat în instanțe ale acestor tipuri. În plus, pentru aceste tipuri, există cuvinte cheie C# prin care sunt descrise, dar și clase .NET care reprezintă implementarea propriu-zisă.

Un tablou este o structură de date care conține un număr de variabile numite elemente, accesate prin intermediul unuia sau mai multor indici întregi. Tablourile sunt tipuri referință, iar pentru a crea un tablou trebuie alocat explicit spațiu cu operatorul new. În acest caz, un tablou este efectiv creat, iar valorile elementelor sunt inițializate cu valoarea implicită a tipului. Pentru a crea un tablou de obiecte (tipuri referință), trebuie creat întâi tabloul, elementele acestuia vor fi inițializate implicit cu null, după care tabloul trebuie parcurs și elementele sale inițializate explicit de către programator cu valori diferite de null.

O clasă este o structură de date care poate conține date (variabile și constante) și cod (metode, proprietăți, evenimente, operatori, constructori și destructori). Clasele pot fi derivate din alte clase, prin acest mecanism clasele derivate putând extinde, specializa sau modifica comportamentul clasei de bază.

Clasele reprezintă piatra de temelie a programării pe obiecte. Acest concept pornește de la aserțiunea că datele sunt strâns legate de codul care le prelucrează și că gruparea lor într-o structură comună (spre deosebire de limbajele procedurale, în care datele sunt separate de cod) duce la o proiectare, implementare, testare și întreținere mai simplă.
Clasele sunt tipuri referință, ceea ce înseamnă că datele membru ale instanțelor se află în heap și programul are acces la ele prin referințe. Referințele sunt păstrate corespunzător de runtime și în cazul în care nu mai există referințe spre o instanță, memoria folosită de aceasta este recuperată automat.

Sunt eliminate astfel o serie întreagă de defecte software legate de dealocarea memoriei – în C++ pot apărea situații în care memoria nu este dealocată și este pierdută pâna la oprirea programului sau situații în care memoria este dealocată de o componentă dar altă componentă încearcă ulterior să scrie la acea adresă pentru că are un pointer pe care îl crede valid.

Membrii unei clase pot fi statici; în acest caz, există o singură instanță a lor care este accesibilă din toate instanțele clasei respective; în situația în care membri statici sunt și publici, ei vor fi accesibili din alte clase fără a avea nevoie de o instanță a clasei respective. Mai mult, ei nu pot fi accesați prin intermediul unor instanțe, ci numai folosind numele clasei.
De asemenea, pot fi definite metode statice. În mod similar, acestea aparțin clasei și nu instanțelor acesteia și pot fi apelate folosind numele clasei. În general, acționează asupra membrilor statici sau efectuează operații pentru care nu este necesară o instanță a clasei.

Încapsularea reprezintă un aspect esențial al programării pe obiecte și înseamnă, pe scurt, posibilitatea de a separa implementarea unui obiect de funcționalitatea pe care acesta o pune la dispoziție utilizatorilor săi. Prin implementarea unui obiect ne referim, în general, la variabilele membru ale obiectului respectiv și la metodele interne, care contribuie la realizarea funcționalității obiectului, dar care nu sunt necesare utilizatorilor obiectului respectiv.
Drepturile de acces reprezintă modalitatea prin care putem ascunde de utilizatorii clasei detaliile de implementare ale acesteia. Cei cinci specificatori de acces în C# și semnificația lor sunt:

private – Membrii privați sunt accesibili numai din clasa în care sunt declarați

internal – Membrii interni sunt accesibili numai din clase care fac parte din același assembly cu clasa în care sunt declarați

protected – Membrii protejați sunt accesibili din clasa în care sunt declarați și din clasele derivate din aceasta

protected internal – Membrii interni și protejați sunt accesibili din clasa în care sunt declarați, din clasele care fac parte din același assembly și din clasele derivate, indiferent în ce assembly sunt acestea

public – Membrii publici sunt accesibili din orice clasă

Dacă specificatorul de acces lipsește, membrii unei clase sunt implicit privați.

În C#, moștenirea se realizeaza punând „:” după numele clasei, urmat de numele clasei de bază. O clasă poate avea o singură clasă de bază. Dacă o clasă nu este derivată explicit din nici o clasă, compilatorul o face implicit să fie derivată din object. Object este rădăcina ierarhiei de clase din .NET.

În C#, este posibil, ca și în C++ sau Java să avem mai multe metode cu același nume în cadrul aceleiași clase. În C#, la supraîncarcare se ține cont de numele metodei, de tipul argumentelor, de categoria lor (de intrare, intrare-iesire, iesire), de numărul și de ordinea lor. Semnătura unei metode nu include tipul returnat, numele argumentelor sau argumentele variabile de la sfârșitul listei de argumente.

Supraîncărcarea metodelor și operatorilor se mai numește și polimorfism static, deoarece putem obține comportamente diferite prin același apel de funcție, dar comportamentul este totuși bine determinat la compilare.

Tehnologia JAVA

Java este un limbaj de programare orientat-obiect, puternic tipat, conceput de Sun Microsystems la începutul anilor 90.

Un program Java compilat, corect scris, poate fi rulat fără modificări pe orice computer (PC, PDA, etc.) pe care e instalată o mașină virtuală Java (JVM = Java Virtual Machine). Acest nivel de portabilitate (inexistent pentru limbaje mai vechi cum ar fi C) este posibil deoarece sursele Java sunt compilate într-un format standard numit cod de octeți (byte-code) care este intermediar între codul mașină (dependent de tipul computerului) și codul sursă.

Mașina virtuală Java este mediul în care se execută programele Java. În prezent, există mai mulți furnizori de JVM, printre care Sun, IBM, Bea, Oracle, FSF. În 2006, Sun a anunțat că face disponibilă varianta sa de JVM ca open-source.

Există 3 platforme Java furnizate de Sun Microsystems:

Java Platform, Micro Edition (Java ME) – pentru hardware cu resurse limitate, gen PDA sau telefoane mobile

Java Platform, Standard Edition (Java SE) – pentru sisteme gen workstation, este ceea ce se gaseste pe PC-uri

Java Platform, Enterprise Edition (Java EE) – pentru sisteme de calcul mari, eventual distribuite

Caracteristici ale limbajului JAVA

Simplicitate. Nici un limbaj de programare nu este simplu, dar Java este considerat ca fiind mai simplu și mai ușor din punct de vedere al folosirii limbajului de programare orientat pe obiecte, atunci când este comparat cu cel mai popular limbaj de programare, C++. Parțial modelată dupa C++, Java a înlocuit complexitatea moștenirii multiple din C++ cu o structură simpla numită interfață (interface), și de asemenea folosirea pointer-ilor. Motivul pentru care Java este mai simplă decat C++ este faptul că Java folosește alocare automată de memorie și Garbage Collector (dealocarea memoriei), pe cand în C++ acestea sunt făcute explicit de către user.

Limbaj orientat pe obiecte. Programarea pe obiecte modelează lumea reală. Totul poate fi modelat ca și un obiect. Java este orientată pe obiecte deoarece programarea în Java este centrată pe crearea de obiecte, manipularea și comunicarea lor. Un obiect are anumite propietăți și comportamente. Proprietățile sunt descrise folosind datele și comportamentul folosind metodele. Definirea obiectelor se face folosind clasele Java. Există seturi de clase predefinite, numite pachete care pot fi importate în programe. Programarea orietată pe obiecte oferă flexibilitate mai mare, modularitate și reutilizabilitate.

Portabilitate. Un program portabil este un program care rulează oriunde (independent de platformă). Java rulează pe aproape orice platformă hardware și software. Apleturile java sunt suportate de toate browser-ele compatibile Java. Odată cu trecerea de la un software existent la Java, se va face și compatibilitatea cu aceste platforme software. Programele Java devin din ce în ce mai portabile, fiind șterse dependențele hardware și ale Sistemului de Operare.

Translatorul Java. Este nevoie de un Translator Java pentru a putea rula programele. Programele sunt compilate de o mașină virtuală Java (Java Virtual Machine) în bytecode. Acesta este independent de mașină și poate rula pe orice mașină care are un Translator Java. În mod normal, un compilator va translata un program dintr-un limbaj de nivel înalt în cod mașina și acest cod este capabil să ruleze pe mașina nativă. Dacă programul este rulat pe alte mașini, el trebuie recompilat pe aceea mașină. Cu Java acest lucru nu mai este necesar.

Securitate. Java este unul dintre limbajele de programare care consideră securitatea ca și parte din model. Compilatorul, translatorul și browser-ele compatibile Java conțin câteva nivele de măsuri de securitate pentru reducerea riscului de compromitere a securității, de pierdere a datei și de distrugere a sistemului.

Mașina virtuală Java (JVM).JVM execută codul java și garanteaza anumite comportamente cu privire la execuția pe alte platforme hardware sau software. JVM folosește politici de securitate, limitând ceea ce poate face un program Java.

Internetul. Java Beans – face ușoară scrierea unor componente reutilizabile care pot fi folosite împreună cu un minim de cod adițional. Oferă un mecanism promițător pentru construirea de componente logice reutilizabile cu modificări minime.

Multithread. Prin multithread se înțelege capacitatea unui program de a trata mai multe sarcini simultan. În Java, programarea multithread (concurentă) este integrată acesteia, pe când în alte limbaje de programare, se apelează proceduri specifice sistemului de operare pentru aceasta. Tehnica multithread este folosită în special pentru Interfața Grafică Utilizator (Graphical User Interface – GUI) și programarea în rețea.

Limbajul SQL pentru baze de date relaționale

SQL este acronimul de la Structural Query Language. Este limbajul standard pentru accesarea sistemelor de gestiune a bazelor de date relaționale (SGBDR). SQL este folosit pentru a stoca și regăsi datele în și dintr-o bază de date. Este utilizat în sisteme de baze de date cum sunt MySQL, Oracle, Microsoft SQL Server și altele.

SQL conține atât facilități de descriere a datelor (DDL) cât și facilități de manipulare a datelor (DML).

Inserarea datelor în baza de date. Instrucțiunea INSERT se poate folosi pentru a introduce linii în baza de date. Operatorul SQL pentru inserare este INSERT INTO și prezintă două variante:

– inserare simplă: pentru inserarea unei tuple individuale

– inserare multiplă: pentru inserarea mai multor tuple

Comanda pentru inserare simplă are sintaxa:

INSERT INTO nume_relație (nume_atribut…) VALUES (valoare…)

Între valori și numele de atribute trebuie să existe o corespondență unu la unu. Pentru atributele care acceptă valoarea NULL specificarea unei valori în comanda de inserare este opțională. Acestea vor fi omise din lista de atribute și vor lua implicit valoarea NULL, eventual, urmând a fi modificate ulterior când valorile lor vor fi cunoscute. Valorile din lista de valori pot fi ori literale, ori expresii aritmetice.

Comanda pentru inserare multiplă are sintaxa:

INSERT INTO nume_relație (nume_atribut…) construcție_SELECT și permite adăugarea la relația specificată a unei mulțimi de tuple (relație) care se obține ca rezultat al unei construcții SELECT.

Actualizarea înregistrărilor din baza de date. Update este instrucțiunea care permite actualizarea înregistrărilor unei baze de date. Forma obișnuită a unei instrucțiuni UPDATE este:

UPDATE nume_tabela SET colona1 = expresie1 , coloana2 = expresie2, … [WHERE condiție] [LIMIT număr]

Ștergerea de înregistrări din baza de date. Operatorul SQL pentru efectuarea operațiilor de ștergere este DELETE FROM a cărui sintaxă completă este :

DELETE FROM nume_relație [WHERE calificator ]

Formularea interogărilor în limbajul SQL. Instrumentul de bază al SQL este instrucțiunea SELECT. Este folosită pentru a regăsi datele dintr-o bază de date prin selectarea acelor linii din tabelă care corespund criteriului specificat. Forma de bază a instrucțiunii SELECT este:

SELECT [DISTINCT] nume_atribut1 nume_atribut2 … FROM nume_relație …… [WHERE calificator1] …. [GROUP BY nume_atribut2 ….. [HAVING calificator2]] [ORDER BY nume_atribut3 [ASC|DESC]…]

Definirea datelor în SQL. Teoretic, comenzile pentru definirea datelor fac parte din modulul corespunzător componentei DDL al SGBD-ului. Totuși, în majoritatea implementărilor SQL comenzile de definire a datelor sunt prelucrate de același interpretor care rezolvă interogările și celelalte operații de manipulare a datelor prezentate mai sus. Așadar, componentele DML și DDL ale SGBD-ului sunt implementate prin același modul software.

Crearea / ștergerea tabelelor (relațiilor). Definirea unei relații se poate face prin comanda CREATE TABLE. Relațiile definite prin această comandă sunt numite relații de bază. Definiția acestor relații este automat memorată într-un dicționar de date numit și catalogul sistem.

Sintaxa comenzii pentru definirea relațiilor este:

CREATE TABLE nume_relație ( nume_atribut1 tip_dată [NOT NULL] [, nume_atribut2 tip_dată [NOT NULL]]…)

Comanda specifică numele relației care se creează precum și una sau mai multe descrieri de atribute.Descrierea fiecăru atribut specifică numele atributului și tipu de dată corespunzător (CHAR, INTEGER etc.) împreună cu dimensiunea asociată.

Comanda simetrică celei de creare a unei relații este DROP TABLE care are ca efect eliminarea din catalogul sistem a relației specificate. După executarea acestei comenzi nu se mai pot face nici un fel de referiri la relația în cauză, descrierea acesteia împreună cu informațiile conținute fiind șterse.Sintaxa comenzii este:

DROP TABLE nume_relație Funcții de agregare

Funcțiile de agregare efectuează un anumit calcul asupra unui set de valori și returnează ca rezultat o singură valoare. Funcțiile de agregare sunt adesea folosite împreună cu clauza GROUP BY pentru a calcula valori agregate la nivelul grupurilor de tuple. Principalele funcții de agregare disponibile în SQL Server sunt :

AVG([ALL | DISTINCT] expresie numerică) media valorilor unui grup

COUNT({[ALL | DISTINCT] expresie }|*)) numărul de elemente ale unui grup

MAX([ALL | DISTINCT ] expresie maximul dintr-un grup de valori

MIN([ALL | DISTINCT ] expresie minimul dintr-un grup de valori

SUM([ALL | DISTINCT] expresie_numerică) suma valorilor unui grup

STDEV(expresie_numerică) returnează deviația standard pentru valorile expresiei dată ca argument

STDEVP(expresie_numerică) returnează deviația standard pentru populația tuturor valorilor expresiei dată ca argument

VAR(expresie_numerică) returnează variația statistică pentru valorile expresiei dată ca argument

VARP(expresie_numerică) returnează variația statistică pentru populația tuturor valorilor expresiei dată ca argument

Oracle

Oracle, este un sistem de baze de date relaționale , unul dintre cele mai puternice și sigure la ora actuală. Oracle oferă un set complet de constructori de aplicații și produse pentru utilizatori, căutând să asigure soluții complete în tehnologia informației.

Aplicațiile Oracle sunt portabile peste un număr mare de stații de lucru și sisteme de operare, de la calculatoare personale la procesoare paralele.

Oracle este înzestrat cu un flexibil Sistem de Management al Bazelor de Date (DBMS) – Serverul Oracle – pentru stocarea și managementul informației utilizate de aplicații.

Ultimul server Oracle, ORACLE 7, conduce o bază de date cu toate avantajele unei structuri relaționale, având în plus capacitatea de a stoca și executa obiecte de tip bază de date precum proceduri și mecanisme de siguranță.

Serverul Oracle cuprinde un DBMS care controlează:

Stocarea de date în sfera bazelor de date dedicate

Recuperarea de date pentru aplicații utilizând tehnici de optimizare adecvate

Securitatea bazelor de date și a taskurilor permise pentru anumiți utilizatori

Consistența și protecția datelor, incluzând arhivarea taskurilor și mecanisme de căutare

Comunicarea și integritatea informațiilor, când bazele de date sunt distribuite într-o rețea.

Aplicațiile Oracle trebuiesc rulate pe același computer la fel ca și Serverul Oracle.

Alternativ, aplicațiile și utilitarele utilizate de ele pot fi rulate pe un sistem local pentru utilizator (sistemul 'client'), în timp ce Oracle DBMS rulează pe un altul (sistemul 'server').

În acest mediu 'client-server', un număr mare de resurse de calcul pot fi rulate. De exemplu, o aplicație 'Oracle Forms' poate rula pe un computer personal client, în timp ce accesarea datelor este condusă convențional de un Server Oracle pe un computer central.

SQL, SQL*PLUS și PL/SQL sunt facilitățile Oracle care vor fi discutate în acest curs. Este important de înțeles în fiecare caz diferențele lor, rolul și locul lor în familia Oracle.

SQL este limbajul utilizat pentru a accesa o bază de date relațională, inclusiv Oracle și poate fi utilizat de fiecare instrument Oracle, când accesul la baza de date este necesar.

PL/SQL este limbajul Procedural al lui Oracle pentru scrierea aplicațiilor și pentru manipularea datelor în afara bazei de date. Poate include un subset al comenzilor SQL, când accesul la baza de date este cerut și este accesibil în fiecare din produsele CDE.

SQL*Plus este un produs Oracle în care limbajele SQL și PL/SQL pot fi utilizate. De asemenea are propriul limbaj de comandă pentru controlul comportării produsului și pentru formatarea rezultatelor interogărilor SQL.

SQL Server

SQL Server este un DBMS (Data Base Management System) – sistem pentru gestiunea bazelor de date, produs de Microsoft. Suportă versiunea Microsoft de SQL (Structured Query Language) – limbaj structurat de interogări, cel mai comun limbaj pentru bazele de date. Este un sistem din clasa Enterprise ce se poate aplica bazelor de date de dimensiuni foarte mari.

Scurta istorie. Codul de bază pentru Microsoft SQL Server își are originile in Sybase SQL Server și a reprezentat intrarea Microsoft pe piața bazelor de date la nivel enterprise, concurând cu Oracle, IBM și Sybase. Microsoft, Sybase și Ashton-Tate s-au unit pentru a crea și a scoate pe piață prima versiune numită SQL Server 4.2 pentru Win OS/2. Mai târziu Microsoft a negociat pentru drepturi de exclusivitate la toate versiunile de SQL Server scrise pentru sistemele de operare Microsoft. Sybase și-a schimbat ulterior numele în Adaptive Server Enterprise pentru a se evita confuzia cu Microsoft SQL Server.

SQL Server 7.0 a fost primul server de baze de date bazat pe GUI. O varianta de SQL Server 2000 a fost prima variantă comercială pentru arhitecura Intel. Ultima versiune apărută este Microsoft SQL Server 2008.

Descriere. Microsoft SQL Sever folosește o variantă de SQL numită T-SQL, sau Transact-SQL, o implementare de SQL-92 (standardul ISO pentru SQL) cu unele extensii. T-SQL în principal adaugă sintaxa adițională pentru procedurile stocate și pentru tranzactii. Standardele SQL necesită ACID – patru condiții pentru orice tranzactie, sintetizate prin acronimul ACID: atomicitate, consistență, izolare, durabilitate. MS SQL Server suportă ODBC (Open Database Connectivity).

MySQL

MySQL este cel mai popular server de baze de date “open source”, folosit de mai bine de 8 milioane de utilizatori, de la corporații mari până la mici aplicații, toți aleg această variantă ieftină și ușor de utilizat.

MySQL este organizat din două componente:

MySQL server: este considerat un program care se ocupă cu salvarea și organizarea bazei de date.

MySQL client programs: Programe client, care oferă interfețe prin care se pot executa comenzi SQL

Caracteristicile cele mai importante sunt:

Performanța sporită – folosește cu ușurință mai multe procesoare, este multi-threaded folosind threaduri kernel.

Ușor de utilizat, rapid și flexibil

Securitate și flexibilitate – MySQL oferă privilegii și parole pentru a asigura securitatea și flexibilitatea. Parolele sunt sigure deoarece tot traficul parolat este criptat atunci când ne conectăm la server.

Instalarea acestui server de baze de date nu presupune și instalarea automată a unui tool grafic care să ușureze controlul clientului asupra serverului. La instalare MySql pune la dispozitie un tool care funcționează de la linia de comandă și se numeste MySql Command Line Client. Cel mai utilizat tool grafic pentru MySQL este MySQL-Front. Permite coordonarea și administrarea bazelor de date prin intermediul unei interfețe Window.

Deși este folosit foarte des împreună cu limbajul de programare PHP, cu MySQL se pot construi aplicații în orice limbaj major. Există multe scheme API disponibile pentru MySQL ce permit scrierea aplicațiilor în numeroase limbaje de programare pentru accesarea bazelor de date MySQL, cum are fi: C, C++, C#, Borland Delphi, Java, Perl, PHP, Python, FreeBasic, etc., fiecare dintre acestea folosind un tip spefic API. O interfață de tip ODBC denumită MyODBC permite altor limbaje de programare ce folosesc această interfață, să interacționeze cu bazele de date MySQL cum ar fi ASP sau Visual Basic. În sprijinul acestor limbaje de programare, unele companii produc componente de tip COM/COM+ sau .NET (pentru Windows) prin intermediul cărora respetivele limbaje să poată folosi acest SGBD mult mai ușor decât prin intermediul sistemului ODBC. Aceste componente pot fi gratuite (ca de exemplu MyVBQL) sau comerciale.

Licența GNU GPL nu permite încorporarea MySQL în softuri comerciale; cei care doresc să facă acest lucru pot achiziționa, contra cost, o licență comercială de la compania producătoare, MySQL AB.

MySQL este componentă integrată a platformelor LAMP sau WAMP (Linux/Windows-Apache-MySQL-PHP/Perl/Python). Popularitatea sa ca aplicație web este strâns legată de cea a PHP-ului care este adesea combinat cu MySQL și denumit Duo-ul Dinamic. În multe cărți de specialitate este precizat faptul ca MySQL este mult mai ușor de invățat și folosit decât multe din aplicațiile de gestiune a bazelor de date, ca exemplu comanda de ieșire fiind una simplă și evidentă: „exit” sau „quit”.

Pentru a administra bazele de date MySQL se poate folosi modul linie de comandă sau, prin descărcare de pe internet, o interfață grafică: MySQL Administrator și MySQL Query Browser. Un alt instrument de management al acestor baze de date este aplicația gratuită, scrisă în PHP, phpMyAdmin.

MySQL poate fi rulat pe multe dintre platformele software existente: AIX, FreeBSD, GNU/Linux, Mac OS X, NetBSD, Solaris, SunOS, Windows 9x/NT/2000/XP/Vista.

Visual FoxPro

Plecând de la originile sale ca FoxBASE, produs de Fox Sftware, ”Fox” cum este denumit în comunitatea internațională a programatorilor, a fost cunoscut întotdeauna pentru viteza, flexibilitatea și eficacitatea sa ca produs de programare pentru bazele de date.

La sfârșitul anilor ’80, FoxBASE a apărut pe piață ca o copie a produsului dBASE, fiind proiectat să fie mai rapid și mai bun decât dBASE și mai ales, compatibil cu dBASE III.
FoxPro 1.0 a marcat desprinderea de dBASE. A introdus noi concepte în proiectarea interfeței grafice cu utilizatorul (GUI) și a unor metode noi de dezvoltare a programelor, care l-au propulsat în fața dBASE-ului.

FoxPro și-a dobândit adevărata identitate odată cu versiunea 2.0. Odată cu această versiune au fost incluse câteva tehnologii noi, care au revoluționat piața dezvoltării bazelor de date pentru calculatoarele personale.

Introducerea algoritmului Rushmore a avut un efect neașteptat. Dintr-o dată, tabele de milioane de înregistrări puteau fi implementate în sistemele de baze de date pentru PC fără a recurge la alte tehnologii mai costisitoare.

Instrucțiunile SQL au fost un alt element revoluționar. Pentru prima dată, utilizatorii de Fox foloseau instrucțiuni singulare care înlocuiau proceduri întregi. SQL era, și încă este, limbajul datelor.

Foxpro 2.0 a mai adăugat o modalitate de realizare a rapoartelor și afișărilor prin adăugarea proiectanților de rapoarte și de desenare. Screen Designer genera cod sursă, dar deschidea o nouă cale în dezvoltarea interfețelor GUI într-un mediu bazat pe text.
În concluzie, FoxPro 2.0 a fost apariția hotărâtoare care a dus la posibilitățile de azi ale Visual FoxPro. Caracteristicile care îl făceau puternic erau: modul de proiectare a interfeței cu utilizatorul, limbajul SQL și viteza mare de acces la date.

Suportul pentru Windows a fost introdus odată cu FoxPro 2.5. Suportul pentru schimbul dinamic de date (Dynamic Data Exchange) era în curs de implementare dar, așa cum o pot confirma cei care au lucrat cu el, FoxPro 2.5 pentru Windows era mai degrabă o aplicație DOS, cu aspect de Windows.

Următoarea revoluție majoră a trebuit să aștepte apariția versiunii 3.0 a Visual FoxPro. Încă o dată, Fox a revoluționat lumea programării bazelor de date. Versiunea 3.0 a adăugat o serie de caractersitici, dintre care enumerăm câteva:

Containerul de baze de date (Database Container – DBC) care aducea suportul pentru proceduri memorate, reguli atașate la tabel și o mulțime de funcții suplimentare pentru lucrul cu datele.

Vizualizările (Views) care sunt cursoare SQL actualizabile. Acestea au introdus o metodă cu totul nouă de acces la date în vederea prelucrării, a reprezentării GUI și a realizării rapoartelor. Erau două tipuri de vizualizări, locale și îndepărtate. O vizualizare locală este bazată pe orice sursă de date ODBC, inclusiv SQL Server, Oracle, Acces etc. Această implementare revoluționară a făcut din Visual FoxPro instrumentul cel mai de seamă în accesul la datele locale și îndepărtate. Crearea aplicațiilor la nivel de întreprindere, cu utilizarea datelor din surse îndepărtate, devenise acum o sarcină la fel de ușoară ca și utilizarea tabelelor proprii programului Visual FoxPro.

O implementare robustă, deplină, a orientării spre obiect a deschis calea utilizării din ce în ce mai largi a acestui mod de programare, bazat pe modelul-obiect și pe posibilitatea construirii propriilor clase și subclase.

Versiunea 5.0 era o actualizare a versiunii 3.0, cu rezolvarea multor nereguli și conținând trăsături noi și interesante. S-a introdus posibilitatea creării și utilizării serverelor COM. S-au adăugat câteva comenzi și funcții noi și se pot observa începuturile legării mediului Visual FoxPro de facilitățile Internetului.

Microsoft Access

Microsoft Access 2003 este aplicația de management al bazelor de date pusă la dispoziție de suita Microsoft Office. Access este folosită pentru gestiunea bazelor de date de dimensiuni mici.

Utilitarele de asistență din aplicația Access asigură un proces simplu, pas cu pas, de configurare a tabelelor, formularelor, paginilor de acces la date, rapoartelor și interogărilor.

Alte baze de date

DB2. Este realizat de firma IBM. Sistemul respectă teoria relațională, este robust și se bazează pe SQL standard. Permite lucrul distribuit și are modul de optimizare a regăsirii.

Informix. Este realizat de firma Informix, respectă teoria relațională și permite lucru distribuit.

Progress. Este realizat de firma Progress Software. Are limbaj propriu (Progress 4GL) dar suportă și SQL. Rulează pe o gamă largă de calculatoare sub diferite sisteme de operare.

Ingress II. Este realizat de firma Computer Associates. Este un SGBDR complet, implementează două limbaje relaționale (întâi QUEL și apoi SQL) și este suportat de diferite sisteme de operare (Windows, UNIX). Lucrează distribuit în arhitectura client/server, are extensie cu facilități orientate obiect și permite aplicații de tip Internet. Organizarea fizică a tabelelor se face prin sistemul de operare.

Paradox. Este realizat de firma Borland. Are limbaj procedural propiu (PAL) și suportă SQL.

Motivul alegerii soluțiilor C# și MySQL

Avănd o tendință de creștere a popularității pe piața limbajelor de programare, C# este o soluție care mi s-a părut a fi eficientă, sigură și care mă va ajuta și în viitor. Asemănarea cu limbajul C++ pe care l-am folosit până recent m-a făcut să aleg această variantă, în dauna limbajelor Delphi și Visual Basic.

Printre motivele care m-au făcut sa aleg limbajul C# în dezvoltarea aplicației mai menționez:

Limbajul facilitează dezvoltarea rapidă de aplicații

Facilitatea garbage collector ușurează mult alocarea de memorie

Tehnologia java este orientată mai mult spre dezvoltarea de aplicații web

MySQL este o soluție pe care am folosit-o în ultimii ani, în primul rând datorită costurilor acesteia (este gratuită). De asemenea, MySQL este ușor de utilizat, rapid și flexibil și permite crearea și gestionarea bazelor de date prin intermediul limbajului SQL.

Există multe scheme API disponibile pentru MySQL ce permit scrierea aplicațiilor în numeroase limbaje de programare pentru accesarea bazelor de date MySQL, cum este și C#.

CAPITOLUL 3

APLICAȚIA DE GESTIUNE FINANCIARĂ GEFINSQL

ANALIZĂ ȘI PROIECTARE

Analiza de sistem

Scopul analizei de sistem este de a evidenția cerințele aplicației și resursele utilizate (studiul), precum și de a evalua aceste cerințe prin modelare.

Definirea cerințelor

Se dorește realizarea unui produs program pentru evidența financiară a intrărilor și iesirilor de produse și marfă și gestiunea acestora într-un plan de conturi. De asemenea se dorește menținerea unor evidențe privind alte aspecte ale unei societăți comerciale, cum ar fi salariații, agenții, furnizorii și clienții acesteia. Programul trebuie sa țină evidența mai multor societatăți simultan.

Datele și evenimentele aplicației

Pornind de la cerințele aplicației se identifică entitățile ce vor fi incluse în proiectarea programului: fenomene, procese, obiecte concrete sau abstracte. Evenimentele principale ce vor fi incluse în proiectarea aplicației sunt următoarele:

Adăugarea unei intrări

Pe baza analizelor făcute anterior, când firma are nevoie de o anumită marfa/produs se produce o intrare în gestiune, adica o comandă către un furnizor. Se verifică daca există un contract valabil cu furnizorul respectiv și dacă acesta este expirat, se face prelungirea contractului.

Datele evenimentului:

Despre intrare: numărul documentului, furnizorul, valoarea intrării

Despre furnizor: nume, contul pe care se face intrarea în contabilitate, adresa furnizorului, codul unic de înregistrare, data expirării contractului și contul pe care se va efectua plata

Adăugarea unei ieșiri

Ieșirile în gestiunea firmei se referă la comenzile de marfă/produse pe care societatea le primește de la diferiți clienți. La adăugarea unei ieșiri,se verifică daca există un contract valabil cu clientul respectiv și dacă acesta este expirat, se face prelungirea contractului.

Datele evenimentului:

Despre ieșire: numărul documentului, clientul, valoarea ieșirii

Despre client: nume, contul pe care se face ieșirea din contabilitate, adresa clientului, codul unic de înregistrare, data expirării contractului și contul pe care se va efectua încasarea

Adăugarea/ștergerea articolelor pe/de pe un document

Fiecare document intrare/ieșire poate conține unul sau mai multe articole (marfă/produse). Valoarea cumulată a acestor articole va constitui valoarea totala a documentului. La adăugarea unui articol se verifică dacă s-a efectuat deja intrarea documentului în contabilitate, caz în care nu este permisă modificarea conținutului intrării/ieșirii respective.

Datele evenimentului:

Despre document: numărul documentului, starea documentului

Despre articol: denumirea articolului, contul contabil, cantitatea, prețul, valoarea TVA-ului

Validarea unei intrări/ieșiri

La efectuarea operației de validare, documentul va intra în gestiunea contabilă la valoarea curentă. Se verifică daca documentul conține cel puțin o înregistrare. Dacă intrarea/ieșirea este vidă, validarea nu este posibilă. Înregistrarea contabilă se va face pe fiecare articol al documentului în parte. De asemenea se verifică daca documentul nu a fost deja validat. Starea documentului se va modifica în „validat”, permițând efectuarea plății/încasării.

Datele evenimentului:

Despre document: numărul documentului, starea documentului

Despre client/furnizor: numele clientului/furnizorului, contul furnizorului/clientului

Despre articol: valoare articol, cont articol

Efectuarea plății/încasării unei intrări/ieșiri

La efectuarea operației de plată/încasare, documentul va intra în gestiunea contabilă la valoarea curentă ca achitat. Se verifică daca documentul a fost validat, urmând ca starea acestuia să se modifice în „achitat”.

Datele evenimentului:

Despre document: numărul documentului, valoarea documentului

Despre client/furnizor: numele clientului/furnizorului, contul furnizorului/clientului

Devalidarea unei intrări/ieșiri

La efectuarea operației de devalidare, documentul va fi șters din gestiunea contabilă. Se verifică starea documentului, iar dacă acesta a fost introdus în contabilitate, va fi șters, însa comanda va rămăne în gestiunea intrărilor/ieșirilor ca nevalidat. Vor fi șterse atăt valorile de intrare căt și valoarea achitată a documentului, dacă acest lucru a fost realizat.

Datele evenimentului:

Despre document: numărul documentului, starea documentului

Adăugarea/ștergerea articolelor contabile

Se pot efectua și modificări în gestiunea contabilă pentru alte conturi decât cele de inrări/ieșiri de mărfuri/produse.

Datele evenimentului:

Despre articolul contabil: numărul documentului, contul de debit, contul de credit și valoarea înregistrării

Alocarea agenților pe comenzi

La alocarea unui agent pe o comandă se verifică mai întâi dacă agentul este disponibil (dacă nu este deja angajat în transportul altei comenzi) și apoi dacă s-a efectuat încasarea documentului comenzii. Dacă una din cele doua cerințe nu este îndeplinită, alocarea nu se poate face.

Datele evenimentului:

Despre document: numărul documentului, starea documentului

Despre agent: nume, telefon, CI, autovehicul, stare agent

Calcul salarii

Pe baza salariului brut/net al unui angajat se pot efectua calcule privind contribuțiile individuale ale salariaților.

Datele evenimentului:

Despre angajat: salariul brut/net

Analiza structurală

Analiza structurală evidențiază, la nivel conceptual, modul de structurare a datelor și a legăturilor dintre ele. Cea mai utilizată tehnică este entitate-asociere.

Identificarea entităților și a atributelor acestora

Pe baza analizelor anterioare au fost identificate următoarele entități care vor forma o bază de pornire pentru structura proiectului:

Intrări: nr. document, valoare, furnizor, stare document

Ieșiri: nr. document, valoare, client, stare document

Articole: nume articol, cont articol

Articole contabile: nr. document, valoare, cont credit, cont debit

Furnizori: nume, adresă, cont analitic, CUI, IBAN, data exp. contr

Clienți: nume, adresă, cont analitic, CUI, IBAN, data exp. contr

Salariați: nume, funcție, data angajării, norma, salariu, adresă, date personale

Agenți: nume, stare agent, autovehicul, CI, telefon

Urmând cerințele aplicației, vom adăuga entitatea societăți cu atributele nume, adresa, cod fiscal, nr. registrul comerțului, capital social, telefon. Aceasta va satisface cerința obținerii unei evidențe pentru mai multe societăți comerciale.

Pentru a putea identifica mai ușor înregistrările fiecărei entități și a diferenția înregistrările cu atribute similare, se vor introduce atribute de identificare unică pentru fiecare entitate (codIntrare, codArticol, etc.).

Diagrama E/R

Pe baza analizei structurale si a analizei de sistem se poate întocmi o diagramă preliminară entitate-asociere (entity-relationship). Pornind de la o astfel de diagramă, se pot construi, în actvitatea de proiectare, schemele relațiilor (tabelelor).

Fig. 3.1 Diagrama E-R preliminară

Analiza dinamică

Analiza dinamică evidențiază comportamentul elementelor sistemului la anumite evenimente.

Componenta Ieșiri

Identificarea stărilor:

Ieșire nouă

Verificare client

Înregistrare ieșire

Validare ieșire

Încasare ieșire

Devalidare ieșire

Alocare agent

Identificarea componentelor externe:

Clienți, articole contabile

Urmărind stările și componentele externe putem face modelarea dinamică:

Fig. 3.2 Diagrama de tranziție pentru componenta ieșiri

Componenta Intrări

Identificarea stărilor:

Intrare nouă

Verificare furnizor

Înregistrare intrare

Validare intrare

Încasare intrare

Devalidare intrare

Identificarea componentelor externe:

Furnizori

Articole contabile

Urmărind stările și componentele externe putem face modelarea dinamică:

Fig. 3.3 Diagrama de tranziție pentru componenta intrări

Componenta Salariați

Identificarea stărilor:

Cerere calcul salariu

Verificare salariat selectat

Așteptare date noi

Calcul salariu

Urmărind stările și componentele externe putem face modelarea dinamică:

Fig. 3.4 Diagrama de tranziție pentru componenta salariați

Analiza funcțională

Această etapă de analiză evidențiază modul de asigurare a cerințelor informaționale (fluxul prelucrărilor) din cadrul sistemului. Cea mai utilizată tehnică este diagrama de flux al datelor. Pentru întocmirea acesteia este nevoie de identificarea în prealabil a actroilor care produc sau consumă date, a proceselor/operațiilor la care sunt supuse datele și a depozitelor unde sunt memorate date pentru accesul ulterior.

Pentru aplicația GeFinSQL vom realiza diagrama de flux al datelor pentru următoarele componente:

Componenta ieșiri

Identificarea actorilor:

Firmă

Agent

Identificarea operațiilor:

Înregistrare ieșire

Determinare număr ieșire

Verificare contract client

Validare ieșire

Încasare ieșire

Alocare agent

Verificare agenți

Identificarea depozitelor de date:

Articole contabile

Agenți

Clienți

Ieșiri

Pe baza operațiilor și actorilor stabiliți anterior se poate realiza modelul funcțional:

Fig. 3.5 Diagrama flux de date pentru componenta ieșiri

Componenta intrări

Componenta intrări este similară celei de ieșiri, singura diferență fiind că nu se face alocarea pe agenți.

Identificarea actorilor:

Societate

Identificarea operațiilor:

Înregistrare intrare

Determinare număr intrare

Verificare contract furnizor

Validare intrare

Încasare intrare

Identificarea depozitelor de date:

Articole contabile

Furnizori

Intrări

Pe baza operațiilor și actorilor stabiliți anterior se poate realiza modelul funcțional:

Fig. 3.6 Diagrama flux de date pentru componenta intrări

Componenta clienți

Identificarea actorilor:

Firmă

Ieșire

Identificarea operațiilor:

Înregistrare client

Verificare client

Identificarea depozitelor de date:

Clienți

Componenta furnizori

Identificarea actorilor:

Societate

Intrare

Identificarea operațiilor:

Înregistrare furnizor

Verificare furnizor

Identificarea depozitelor de date:

Furnizori

Pe baza analizei realizate pentru componentele clienți și furnizori vom realiza o singură diagramă flux de date având în vedere similaritățile dintre acestea.

Fig. 3.7 Diagrama flux de date pentru componentele clienți/furnizori

Componenta articole contabile

Identificarea actorilor:

Ieșire

Intrare

Identificarea operațiilor:

Înregistrare articol contabil

Validare

Achitare/încasare

Identificarea depozitelor de date:

Articole contabile

Fig. 3.8 Diagrama flux de date pentru componenta articole contabile

Componenta agenți

Identificarea actorilor:

Ieșire

Agent

Identificarea operațiilor:

Înregistrare agent

Verificare agenți

Alocare agent

Identificarea depozitelor de date:

Agenți

Fig. 3.9 Diagrama flux de date pentru componenta articole contabile

Proiectarea de sistem

Se importă toate diagramele realizate în faza de analiză și în faza de proiectare de sistem.

Construirea arhitecturii sistemului

Pentru a trece mai departe la construirea arhitecturii sistemului se vor alege sistemul de gestiune al bazelor de date si interfața grafică cu utilizatorul. Am ales MySQL ca SGBD si C# pentru dezvoltarea interfeței.

În alegerea arhitecturii am ținut cont de facilitățile pe care le oferă limbajul C#, astfel că fiecare clasă de baza (intrări, ieșiri, agenți, etc.) va fi înglobată într-o clasa de tip windows form, pentru a evita simplifica structura proiectului. Așadar, sistemul va avea două componente: clase de interfețe grafice (care vor conține toate funcțiile celor de bază) și clase de acces la bazele de date.

Fig. 3.10 Arhitectura sistemului

Detalierea modelului obiectual

În această etapă a proiectării se va reface structura modelului obiectual realizat anterior, prin includerea unor aspecte care nu au fost atinse în faza de analiză, sau se pot modifica componente deja existente pentru a optimiza structura sistemului.

Implementarea accesului restricționat la date se va face prin adăugarea a trei tabele noi în baza de date, și anume utilizatori, drepturi și drepturifis cu următoarele funcții:

Tabela „utilizatori” va ține o evidență a utilizatorilor care se pot loga la aplicație și va stoca câteva date personale pentru aceștia. Programul va conține un modul separat pentru manipularea utilizatorilor, acces la această secțiune va avea numai administratorul aplicației.

Tabela „drepturi” va conține drepturile de acces utilizatorilor la societățile din gestiune, dar nu și asupra componentelor individuale ale programului.

Tabela „drepturifis” va conține drepturile de acces pentru fiecare modul al aplicației, acestea vor fi împărțite în drepturi de citire și drepturi de modificare.

Din tabela „agenți” va fi scos atributul „autovehicul”, care va constitui o tabelă separată. De asemenea, tot din „agenți” se va elimina atributul „stare” prin care se făcea verificarea existenței unei comenzi deja alocate pentru un agent. Pentru aceasta, tabela „comenziclienti” va fi creată, conținând informații atât despre agentul alocat, cât și despre comandă (ieșire). Atributele tabelei pot fi vizualizate în diagrama E/R finală.

Se va crea o nouă tabelă „gestiunearticole” care va constitui tipul (cheie externă) pentru „articole”.

Gestiunea articolelor din componentele „intrări” și „ieșiri” se va face prin două tabele noi, „intrăriarticole” și „ieșiriarticole”. Acestea vor ține o gestiune a tuturor articolelor incluse pe documentele contabile de tip „intrare” și „ieșire”.

Pe baza noilor modificări la modelul obiectual, diagrama E/R va fi reconstruită (a se vedea anexa 1).

Modelul de comunicare între clase

Acest model evidențiază relațiile și interacțiunile dintre componentele generale ale sistemului.

Componentele clasei de interfețe grafice va conține clasele:

Intrări/Ieșiri

Furnizori/Clienți

Agenți

Autovehicule

Articole contabile

Societăți

Utilizatori

Articole

Gestiune articole

Salariați

Fișe conturi

Clasa fișe conturi va face o centralizare a tuturor documentelor contabile emise, și nu se va constitui într-o tabelă separată în baza de date. Pe baza informațiilor din faza de analiză și proiectare de sistem se poate întocmi diagramade comunicare între clase:

Fig. 3.11 Diagrama de comunicare între clase

Definirea interfețelor

Principalele operații pentru componentele clasei de interfețe:

Operații intrări/ieșiri:

Adăugare intrare/ieșire

Modificare intrare/ieșire

Ștergere intrare/ieșire

Validare

Achitare/Încasare

Devalidare

Pentru articole: Adăugare, Modificare, Ștergere

Operații furnizori/clienți:

Adăugare furnizor/client

Modificare furnizor/client

Ștergere furnizor/client

Prelungește contract

Operații agenți:

Adăugare agent

Modificare agent

Ștergere agent

Alocare agent-comandă

Operații autovehicule:

Adăugare autovehicul

Modificare autovehicul

Ștergere autovehicul

Operații salariați:

Adăugare salariat

Modificare salariat

Ștergere salariat

Calcul salariu/contribuții

Operații articole:

Adăugare articol

Modificare articol

Ștergere articol

Operații gestiune articole:

Adăugare tip articol

Modificare tip articol

Ștergere tip articol

Operații articole contabile:

Adăugare articol contabil

Modificare articol contabil

Ștergere articol contabil

Operații societăți:

Adăugare societate

Modificare societate

Ștergere societate

Operații utilizatori:

Adăugare utilizator

Modificare utilizator

Ștergere utilizator

Acordare drepturi

Alaturi de cele nouă componente ale clasei de interfețe, se mai alătură și clasa fișe conturi, care nu are nicio operație atribuită, aceasta fiind doar de vizualizare și sintetizare a datelor.

Modelarea secvenței de ferestre

Fig. 3.12 Diagrama secvenței de ferestre

Proiectarea obiectuală

Plecând de la modelarea problemei realizata în etapa de analiza si de la planul stabilit în etapa de proiectare de sistem, proiectarea obiectuala definitiveaza clasele si asocierile, interfetele si algoritmii utilizati pentru implementarea operatiilor.

Proiectarea bazei de date

Conform rezultatelor obținute în etapele de analiză și proiectare am ajuns la o configurație finală a bazei de date. Aceasta va conține 17 tabele, după cum urmează:

Tabela societăți conține datele societăților aflate în gestiune. Aproape toate celelalte tabele sunt legate de ea printr-o cheie externă. Astfel, selecția se face în funcție de drepturile fiecărui utilizator, pe societăți.

Atributele tabelei societăți:

Atribute de identificare unică: cod, nume

Atribute reprezentând date fiscale: codFiscal, nrRegCom, micro, codCAEN, capSoc, cont1, cont2, banc1, banc2, filiala1, filiala2

Atribute reprezentând adresa: loc, jud, sect, str, nrStr, codPostal, bl, sc, et, apt

Alte atribute: tel, email

Secvența de cod SQL prin care se creează tabela societăți este următoarea:

CREATE TABLE societati (cod INT(4) NOT NULL PRIMARY KEY,

nume VARCHAR(20) NOT NULL UNIQUE KEY, codFiscal VARCHAR(25), nrRegCom VARCHAR(25), micro VARCHAR(3), codCAEN VARCHAR(5),

capSoc VARCHAR(10), loc VARCHAR(25), jud VARCHAR(25), sect VARCHAR(2), str VARCHAR(25), nrStr VARCHAR(5), codPostal VARCHAR(25), bl VARCHAR(10), sc VARCHAR(10), et VARCHAR(3), apt VARCHAR(4),

tel VARCHAR(25), email VARCHAR(25), cont1 VARCHAR(25),

banc1 VARCHAR(25), filiala1 VARCHAR(25), cont2 VARCHAR(25),

banc2 VARCHAR(25), filiala2 VARCHAR(25));

Secvențele de cod asociate celorlalte tabele sunt listate in secțiunea anexe (a se vedea anexa 2).

Tabela utilizatori ține evidența persoanelor care folosesc aplicația. Aici sunt memorate date prin intermediul cărora se face logarea.

Atributele tabelei utilizatori:

Atribute de identificare unică: cod, nume

Atribute reprezentând date de logare: nume, pass

Atribute reprezentând date personale: numen, prenumen, ci, cnp

Tabela drepturi oferă date prin care se restricționează accesul la societățile din gestiune.

Atributele tabelei drepturi:

Atribute de identificare unică: codUtilizator, codSocietate

Atribute cheie externă: codUtilizator, codSocietate

Atribute reprezentând restricții de acces la citire: dRread

Atribute reprezentând restricții de acces la modificare: dRwrite, dRadmin

Tabela drepturifis oferă date prin care se restricționează accesul la componentele aplicației.

Atributele tabelei drepturifis:

Atribute de identificare unică: codUtilizator

Atribute cheie externă: codUtilizator

Atribute reprezentând restricții de acces la citire: clRead, agRead, artRead, gestRead, autoRead, salRead, intrRead, iesRead, bdRead, fisecontRead, artcontRead

Atribute reprezentând restricții de acces la modificare: clWrite, fzWrite, agWrite, artWrite, gestWrite, autoWrite, salWrite, intrWrite, iesWrite, bdWrite, fisecontWrite, artcontWrite

Tabela salariați conține date despre angajații societății din gestiune.

Atributele tabelei salariați:

Atribute de identificare unică: cod

Atribute cheie externă: codSocietate

Atribute reprezentând date personale: nume, prenume, CNP, judet, adresa, telefon A

Atribute reprezentând date de angajare: functie, dataAngajarii, norma, salariu, contract

Tabela furnizori ține o evidență a firmelor cu care societatea din gestiune colaborează din punct de vedere al aprovizionării.

Atributele tabelei furnizori:

Atribute de identificare unică: cod, nume

Atribute cheie externă: codSocietate

Atribute reprezentând datele firmei: CUI, contAnalitic, judet, adresa, IBAN, dataExp

Tabela clienți ține o evidență a firmelor cu care societatea din gestiune colaborează din punct de vedere al desfacerii.

Atributele tabelei clienți:

Atribute de identificare unică: cod, nume

Atribute cheie externă: codSocietate

Atribute reprezentând datele firmei: CUI, contAnalitic, judet, adresa, IBAN, dataExp

Tabela intrări conține toate comenzile societăților din gestiune către furnizorii acestora.

Atributele tabelei intrări:

Atribute de identificare unică: nrDoc

Atribute cheie externă: codFurnizor, furnizor, codSocietate

Atribute reprezentând datele comenzii: tip, valoare, TVA, total, neachitat, status

Tabela intrări conține toate comenzile primite de societățile din gestiune de la clienții acestora.

Atributele tabelei intrări:

Atribute de identificare unică: nrDoc

Atribute cheie externă: codClient, client, codSocietate

Atribute reprezentând datele comenzii: tip, valoare, TVA, total, neachitat, status

Tabela intrăriarticole conține toate articolele de pe documentele de tip intrare și valorile individuale ale acestora.

Atributele tabelei intrăriarticole:

Atribute de identificare unică: codArt

Atribute cheie externă: tip, articol, codArticol, UM, TVA, codSocietate

Atribute reprezentând datele comenzii: cantitate, pret, valoare, TVAtot, total, contArticol

Tabela ieșiriarticole conține toate articolele de pe documentele de tip ieșire și valorile individuale ale acestora.

Atributele tabelei ieșiriarticole:

Atribute de identificare unică: codArt

Atribute cheie externă: tip, articol, codArticol, UM, TVA, codSocietate

Atribute reprezentând datele comenzii: cantitate, pret, valoare, TVAtot, total, contArticol

Tabela gestiunearticole ține evidența tipurilor de articole ce pot intra în gestiune.

Atributele tabelei gestiunearticole:

Atribute de identificare unică: cod, nume

Atribute cheie externă: codSocietate

Atribute reprezentând datele tipului de articol: contArticol, contVen, contCh

Tabela articole ține evidența articolelor din gestiune.

Atributele tabelei articole:

Atribute de identificare unică: cod, nume

Atribute cheie externă: tip, codSocietate

Atribute reprezentând datele articolului: UM, TVA, pretVanzare, pvTVA, stocMinim

Tabela articolecontabile ține evidența contabilă a intrărilor și ieșirilor, precum și a altor tipuri de documente.

Atributele tabelei articolecontabile:

Atribute de identificare unică: nrDoc, codArt

Atribute cheie externă: nrDoc, codSocietate

Atribute reprezentând datele articolului contabil: contDeb, contCr, suma, explicatie, valid

Tabela agenți conține date despre agenții de transport ai societăților din gestiune.

Atributele tabelei agenți:

Atribute de identificare unică: cod, nume

Atribute cheie externă: autovehicul, codSocietate

Atribute reprezentând datele agentului: telefon, ci

Tabela autovehicule reține date despre parcul auto al societăților din gestiune.

Atributele tabelei autovehicule:

Atribute de identificare unică: cod, numarInmatriculare

Atribute cheie externă: codSocietate

Atribute reprezentând datele autovehiculului: tipVehicul, marca, combustibil

Tabela comenziclienți conține toate ieșirile din contabilitate odată ce au fost efectuate încasările pentru acestea.

Atributele tabelei comenziclienți:

Atribute de identificare unică: cod

Atribute cheie externă: codIeșire, numeClient, codAgent ,codSocietate

Atribute reprezentând datele autovehiculului: termen

Implementarea claselor de bază

Clasa GeFinSQL este clasa de bază a aplicației, prin care se face logarea și se stabilește baza de date care va fi utilizată.

Clasa are două atribute care rețin datele de logare cum ar fi numele utilizatorului, societatea prin care s-a logat și baza de date.

public BDparam BDpar;

public USRparam USRpar;

Clasele BDparam și USRparam au următoarea structură:

public class BDparam

{

public string bd;

public string server;

public string uid;

public string password;

}

public class USRparam

{

public string user;

public int codUser;

public string password;

public struct drepturi

{

public string dRread;

public string dRwrite;

public string dRadmin;

}

public drepturi drp;

public string societate;

public int codSoc;

}

Secvențe relevante din funcțiile clasei:

Crearea bazei de date în cazul lipsei acesteia:

MySqlConnection conNewDb = new MySqlConnection("Data Source = " + BDpar.server + "; Persist Security Info = yes;" + " UserId = " + BDpar.uid + "; PWD = " + BDpar.password + ";");

conNewDb.Open();

MySqlCommand commandNew = conNewDb.CreateCommand();

commandNew.CommandText = "create database " + BDpar.bd;

commandNew.ExecuteNonQuery();

Verificarea existenței tabelelor:

for (int i = 0; i < 17; i++)

{

if (indx[i] == 0)

{

result = MessageBox.Show("Lipseste tabela " + bazeD[i] + ". Doriti sa o creati acum?", "Baza date incompleta!", MessageBoxButtons.YesNo);

if (result == DialogResult.Yes)

{

conn.Open();

command.CommandText = BDcomm[i];

command.ExecuteNonQuery();

conn.Close();

}

}

}

conNewDb.Close();

Bdcomm este un obiect de tip arraylist care preia comenzile de creare a tabelelor dintr-un fișier extern „constr.dat”, iar indx și bazed sunt vectori formați in urma executării query-ului „show tables”. Conexiunea și executarea unui query pe baza de date se realizează folosind următoarea secvență de cod:

MySqlConnection connection_1 = new MySqlConnection(connectString); MySqlCommand command_1 = connection_1.CreateCommand(commandString);

connection_1.Open();

command_1.ExecuteNonQuery();

connection_1.Close();

Apelarea constructorior pentru celelalte clase de interfață:

private void utilizatoriToolStripMenuItem_Click(object sender, EventArgs e)

{

Utilizatori UTI = new Utilizatori(this);

UTI.MdiParent = this;

UTI.Show();

}

Toate celelalte 9 clase de interfață sunt apelate în mod similar. După cum se poate observa, toate celelalte clase primesc ca parametru clasa de bază GeFinSQL, astfel facilitându-se accesul la toate atributele generale ale aplicației.

Datorită similarităților dintre tabelele intrări și ieșiri, am implementat o clasă de interfață comună, și anume clasa IntrăriIeșiri. Pentru a face diferența între cele două tabele, clasa primește ca parametru variabila table FC, prin care se face inițializarea atributului propriu cu același nume. Valoarea parametrului poate fi „intrări” sau „ieșiri”.

Interogarea bazei de date se face cu ajutorul unei variabile de tipul MySqlDataReader.

MySqlDataReader reader;

command.CommandText = "select * from " + tableFC + " where societate = " + parentForm.USRpar.codSoc.ToString();

conn.Open();

reader = command.ExecuteReader();

while (reader.Read())

{

ListViewItem lvi = new ListViewItem(reader[0].ToString());

lvi.SubItems.Add(reader[1].ToString());

lvi.SubItems.Add(reader[2].ToString());

lvi.SubItems.Add(reader[3].ToString());

lvi.SubItems.Add(reader[4].ToString());

lvi.SubItems.Add(reader[5].ToString());

lvi.SubItems.Add(reader[6].ToString());

lvi.SubItems.Add(reader[7].ToString());

listaIOLv.Items.Add(lvi);

}

Pentru a evita prăbușirea aplicației am folosit instrucțiunile try – catch pentru tratarea excepțiilor.

Am folosit pentru validarea de date o funcție pe care am inclus-o in clasa de bază:

public class Validare

{

public bool isDouble(string dbl)

{

bool b = true;

try

{

Convert.ToDouble(dbl);

}

catch

{

b = false;

}

return b;

}

}

Clasa validare mai conține 3 funcții de genul isDouble, și anume isDate, isCNP și isContract care sunt concepute in mod similar.

Generarea codului unic de înregistrare la adăugarea unei intrări/ieșiri noi se face prin intermediul următoarei secvențe de cod:

command.CommandText = "select nrDoc from " + tableFC;

reader = command.ExecuteReader();

//generare cod

int cod = 0;

ArrayList arr = new ArrayList();

while (reader.Read()) arr.Add(Convert.ToInt32(reader[0].ToString()));

for (int i = 0; i < (arr.Count – 1); i++)

for (int j = i + 1; j < arr.Count; j++)

if ((int)arr[i] > (int)arr[j])

{

int aux = (int)arr[i];

arr[i] = arr[j];

arr[j] = aux;

}

cod = 1;

for (int j = 0; j < arr.Count; j++) if (cod != (int)arr[j]) break;

else cod++;

reader.Close();

Pentru ștergerea unei înregistrări se folosesc următoarele comenzi:

command.CommandText = "delete from " + tableFC + " where nrDoc = " + listaIOLv.SelectedItems[0].Text + " and societate = " + parentForm.USRpar.codSoc.ToString();

command.ExecuteNonQuery();

Pentru modificarea unei înregistrări se folosește următoarea secvență de cod:

command.CommandText = "select cod from " + fzcl + " where nume = '" + IOFzClCb.Text + "' and societate = " + parentForm.USRpar.codSoc.ToString();

reader = command.ExecuteReader(); reader.Read(); string rdr = reader[0].ToString();

if (tableFC == "iesiri") fzcl = "client"; else fzcl = "furnizor";

command.CommandText = "update " + tableFC + " set nrDoc = '" + IONrDocTb.Text + "', tip = '" + IOTipCb.Text + "', cod = '" + rdr + "', " + fzcl + " = '" + IOFzClCb.Text + "' where nrDoc = " + listaIOLv.SelectedItems[0].Text + " and societate = " + parentForm.USRpar.codSoc.ToString();

reader.Close();

command.ExecuteNonQuery();

Pentru adăugarea unei înregistrări se folosesc următoarele comenzi:

command.CommandText = "insert into " + tableFC + " values(" + IONrDocTb.Text + ", '" + IOTipCb.Text + "', '" + rdr + "', '" + IOFzClCb.Text + "', '0', '0', '0', '0', '0', " + parentForm.USRpar.codSoc.ToString() + ")";

command.ExecuteNonQuery();

Tot in clasa IntrăriIeșiri se efectuează adăugarea de articole pe documentele deja intrate în gestiune. Mai întâi se verifică dacă este selectat un document folosind optiunea selecteditems a obiectului de tip listview listaIOLv și pe urmă se pot introduce datele noului articol.

Afișarea articolelor deja introduse pentru un anumit document se realizează la schimbarea selecției pe obiectul listaIOLv, folosind eventul selectedIndexChanged. La apariția acestui eveniment, articolele sunt introduse inntr-un alt obiect de tip listview, listaIOArtLv.

Celelalte clase de interfață sunt implementate în mod asemănător, având aproximativ aceleași funcții pentru realizarea adăugării, modificării sau ștergerii de înregistrări (se folosesc instrucțiunile SQL insert, update și delete ca și aici). În general am utilizat evenimentele diferitelor obiecte ale formului pentru a interoga sau modifica baza de date.

Particularități ale claselor:

Pentru afișarea și modificarea drepturilor de acces la societăți și modulele aplicației am folosit 4 vectori de obiecte de tip checkbox pe care le-am creat în funcție de numărul de societăți existente, folosind următoarea funcție:

public void dinamChb(CheckBox[] chb, ListView lst, int x, int y, int z)

{

for (int i = 0; i < lst.Items.Count; i++)

{

chb[i] = new CheckBox();

this.Controls.Add(chb[i]);

chb[i].Location = new Point(lst.Location.X + lst.Columns[0].Width + x, lst.Location.Y + (i * y) + z);

chb[i].BringToFront();

chb[i].BackColor = lst.BackColor;

chb[i].Text = "";

chb[i].Size = new Size(15, 15);

chb[i].Enabled = false;

chb[i].CheckedChanged += new EventHandler(Utilizatori_CheckedChanged);

}

}

Pentru clasa societăți am utilizat un obiect de tip panel pentru afișarea volumului mare de date aparținând societăților. Pentru aceasta m-am folosit de evenimentul selectedIndexChanged:

MySqlDataReader reader;

command.CommandText = "select * from societati where cod = " + socLv.SelectedItems[0].Text;

conn.Open();

reader = command.ExecuteReader();

reader.Read();

if (reader[4].ToString() == "yes") microintrepChb.Checked = true;

else microintrepChb.Checked = false;

codCAENCb.Items.Add(reader[5].ToString());

codCAENCb.Text = reader[5].ToString();capSocTb.Text = reader[6].ToString(); adrLocTb.Text = reader[7].ToString(); adrJudCb.Text = reader[8].ToString();

adrSecTb.Text = reader[9].ToString();adrStrTb.Text = reader[10].ToString(); adrNTb.Text = reader[11].ToString();adrCodPTb.Text = reader[12].ToString();

adrBlTb.Text = reader[13].ToString(); adrScTb.Text = reader[14].ToString(); adrEtTb.Text = reader[15].ToString(); adrApTb.Text = reader[16].ToString();

adrTlTb.Text = reader[17].ToString();adrEmlTb.Text = reader[18].ToString(); cont1Ct.Text = reader[19].ToString();cont1Bc.Text = reader[20].ToString();

cont1Fil.Text = reader[21].ToString();cont2Ct.Text = reader[22].ToString(); cont2Bc.Text = reader[23].ToString();cont2Fil.Text = reader[24].ToString();

conn.Close();

Fragmente din codul sursă mai sunt listate în secțiunea anexe (a se vedea anexa 3).

Prezentarea aplicației GeFinSQL

În acest capitol se va face o prezentare a părții funcționale a aplicației, evidențiind cu câteva exemple modul în care se realizează comunicarea cu baza de date.

Logarea și stabilirea conexiunii la baza de date

La pornirea aplicației, va apărea o fereastră de login care conține 3 câmpuri ce trebuiesc completate cu datele utilizatorului: nume utilizator, parola și societatea pe care se va lucra.

Fig. 3.13 Fereastra de logare

La bifarea opțiunii „Reține utilizatorul și parola”, datele de logare vor fi reținute într-un fișier extern, și la o pornire ulterioară a aplicației aceste date vor fi introduse automat de către program.

La accesarea secțiunii „Verifică setările de conexiune”, fereastra se va lărgi, permițând introducerea datelor privind conexiunea la baza de date prin intermediul a trei câmpuri: UID, parola și baza de date. Ultimul din acestea este format din serverul unde este localizată baza de date, caracterul „/” și numele bazei de date.

La apăsarea butonului „Acceptă”, în cazul în care baza de date specificată nu există, aplicația va afișa un mesaj anunțând acest lucru, și daca este selectată opțiunea „yes”, aceasta va fi generată automat. De asemenea, dacă baza de date este incompletă, pentru fiecare tabelă lipsă se va proceda similar, acestea fiind generate automat la cererea utilizatorului.

Fig. 3.14 Secțiunea „Verifică setările de conexiune”

Fig. 3.15 Mesaj de eroare

Dacă toate câmpurile sunt completate corect, se va efectua logarea și va apărea meniul principal în partea de sus a ferestrei de bază.

Meniul principal

Meniul principal conține patru opțiuni: „Fișiere”, „Operații/Listări”, „Administrare” și „Ajutor”:

Fig. 3.16 Meniul principal

Meniul „Administrare”

Vom trata mai întâi meniul „administrare” deoarece de aici se efectuează operații low-level asupra societăților, utilizatorilor și a bazei de date. La accesarea meniului, va apărea submeniul acestuia.

Unele opțiuni pot fi inactive, în funcție de drepturile pe care le are fiecare utilizator. Opțiunile DE configurare societăți, utilizatori și cele de backup și încărcare a fișierelor de backup pentru baza de date sunt accesibile numai utilizatorului de tip admin, iar opțiunea „Consultare BD” este activă numai utilizatorilor care au acest drept în tabela drepturifis. Celelalte două opțiuni de schimbare a societății sau a parolei sunt accesibile tuturor userilor, acestea nemodificănd decât într-o mică măsură înregistrările din baza de date.

Meniul „Administrare” în cele două variante, activ și parțial restricționat arată în felul următor:

Fig. 3.17 Meniul „Administrare”

Fereastra „Configurare societăți”

Configurarea datelor necesare programului, pentru fiecare societate în parte este extrem de importantă pentru funcționarea corectă a programului. Ecranul de configurare și modul în care acesta este structurat vă este prezentat în imaginea de mai jos:

Fig. 3.18 Fereastra de configurare a societăților

După cum se observă, la selectarea unei societăți, toate datele acesteia apar în câmpurile ferestrei, însa informațiile nu se pot modifica direct, ci doar prin apăsarea butonului „Modifică”.

Informațiile solicitate în această fereastră la crearea unuei noi societăți prin accesarea butonului „Adaugă”, sunt:

Cod – fiecărei societăți nou create i se va asocia un cod. Implicit, programul generează coduri începând cu 0001.

Denumirea societății

Codul unic de identificare (CUI)

Nr.registrul comerțului – se va trece numărul de înregistrare de la oficiul registrului comerțului. Acesta se va înscrie sub forma Jcj/nnnn/aaaa. Un exemplu de astfel de înregistrare este J40/1234/2006.

La societățile existente deja se vor putea modifica denumirea, codul fiscal și/sau numărul de înmatriculare prin accesarea butonului „Modifică”. La o societate deja creată nu se va putea modifica defel codul intern al acesteia, acesta fiind unic pentru fiecare societate în parte.

La adăugarea/modificarea unei societăți noi, va apărea un panel unde se pot introduce denumirea, CUI și nr. de întregistrare, iar celelalte controale își vor modifica starea, permițând introducerea informațiilor (adresa și unitățile bancare).

Fig. 3.19 Câmpurile care apar la modificarea/adăugarea unei societăți

Daca se selectează butonul „Renunță”, nu se va efectua nicio modificare asupra bazei de date, chiar daca au fost introduse informații în câmpurile aferente societății. Dacă se apasă butonul „Salvează”, societatea va fi introdusă în baza de date.

La ștergerea unei înregistrări, programul avertizează utilizatorul de operația pe care urmează să se efectueze, pentru a evita ștergerile din greșeală. În gestiune trebuie să existe cel puțin o societate, programul nu mai permite ștergerea dacă a rămas o singură societate listată.

Fereastra „Utilizatori”

În concepția programului există două tipuri de utilizatori:

1. Administrator

2. Utilizator normal

Programul vine cu utilizatorul ADMIN, utilizator de tip Administrator, creat implicit. Nu se pot crea alți utilizatori cu drepturi de administrator. Utilizatorul ADMIN trebuie să fie unic. Se pot crea oricâți alți utilizatori normali ai programului, aceștia avand implicit parola DEFAULT, pe care aceștia o pot modifica ulterior.

Drepturile utilizatorilor sunt de acces sau modificare și se împart în drepturi firmă și drepturi fișiere. La bifarea optiunii de modificare pentru o firmă/un fișier, se bifează automat și opțiunea de citire.

La ștergerea unei înregistrări, programul avertizează utilizatorul de operația pe care urmează să o efectueze, pentru a evita ștergerile din greșeală. Utilizatorul ADMIN nu poate fi șters.

Ecranul de configurare a utilizatorilor (useri) este următorul:

Fig. 3.20 Fereastra „Utilizatori”

Panelul de date de intrare pentru utilizatori este vizibil numai după apăsarea butoanelor „Adaugă” sau „Modifică”. Când se introduce sau modifică un utilizator butoanele de manipulare sunt inactive, la fel și lista cu utilizatori.

Fereastra „Consultare BD”

Submeniul „Consultare BD” permite efectuarea de selecții din baza de date, însă numai pe societatea curentă.

Selecțiile din baza de date (selecții SQL) reprezintă o opțiune care necesită cunoștințe medii despre baze de date și despre sintaxa limbajului SQL. SQL – Structured Query Language, permite utilizatorilor ca prin anumite comenzi aplicate asupra bazelor de date să extragă din acestea informații, seturi sau subseturi de date.

În principiu ecranul pus la dispoziție de către opțiunea „Consultare BD”, vă permite construirea de asemenea fraze, instrucțiuni, de selecție a datelor, în mod asistat, prin parcurgerea a mai multor etape:

Selectarea tabelei din care se va face extragerea de informații

Selectarea câmpurilor și a funcțiilor care vor fi afișate

Scrierea condițiilor de bază

Scrierea condițiilor de grupare

Scrierea condițiilor suplimentare

Scrierea condițiilor de ordonare

După ce au fost introduse toate datele de selecție, prin apăsarea butonului „Execută” se face interogarea bazei de date și comanda SQL este afișată pe ecran împreună cu rezultatele selecției, în cazul unei interogări reușite. Dacă datele nu au fost introduse corect, se va afișa un mesaj de eroare.

Fereastra „Consultare BD” este următoarea:

Fig. 3.21 Fereastra „Consultare BD”

Opțiunile „Schimbare parolă” și „Schimbare societate”

Schimbarea parolei pentru orice utilizator se poate face accesând submeniul „Schimbare parolă”. Pentru aceasta, programul solicită mai întâi parola veche și apoi afișează fereastra de logare, însă numai cu câmpul parola activ. La fel și pentru schimbarea societății, cu precizarea că selectarea unei societăți asupra căreia nu există drepturi de acces nu este permisă. Prezentarea mai detaliată a acestor aspecte este realizată în secțiunea anexe (a se vedea anexa 4).

Opțiunile „Backup BD” și „Încarcă fișierele de backup”

Prin intremediul acestor submeniuri se generează fișiere externe cu toate datele bazei de date, care pot fi încărcate ulterior în cazul pierderii de informații parțiale sau totale. La încărcarea fișierelor într-o altă baze de date care are deja înregistrări efectuate, datele existente vor fi suprascrise.

Meniul „Fisiere”

Prin intermediul meniului „Fișiere” se manipulează date privind gestiunea terților societății, a agenților, articolelor și salariaților. Unele opțiuni pot fi inactive, în funcție de drepturile pe care le are fiecare utilizator.

Tot de aici se poate închide aplicația.

La accesarea meniului „Fișiere” va apărea submeniul acestuia.

Vom prezenta în continuare mai în detaliu numai ferestrele „Clienți” și „Salariați”, iar pentru celelalte componente vom trece în revistă numai funcțiile mai importante, prezentări vizuale pentru acestea fiind listate în secțiunea anexe (a se vedea anexa 5).

Meniul „Fișiere are următoarea configurație:

Fig. 3.22 Meniul „Fișiere”

Fereastra „Clienți”

Pentru gestiunea clienților există patru operații: adăugare, modificare, ștergere și prelungire contract.

La adăugarea sau modificarea unui client, va apărea panelul cu câmpurile pentru introducerea informațiile privind clientul. Atât timp cat acest panel este vizibil, celelalte funcții ale aplicației, precum și lista clienților vor fi inactive. Acestea vor putea fi din nou accesate după efectuarea operației de salvare sau renunțare.

Fig. 3.23 Fereastra „Clienți”

Prin accesarea funcției de prelungire a contactului, data expirării acestuia va fi prelungită cu un an. Dacă un contract cu un client nu mai este în vigoare, nu se pot înregistra ieșiri pentru acel client.

Fereastra furnizori prezintă exact aceleași caracteristici, cu diferența că informațiile sunt memorate în baza de date în tabela „furnizori”.

Ferestrele „Autovehicule”, „Articole” și „Gestiune articole”

Aceste ferestre sunt pur și simplu de gestiune, neavând funcții suplimentare, decât pe cele de adăugare, modificare și ștergere de înregistrări.

Fereastra „Autovehicule” gestionează parcul auto al societății, având o referință externă în fereastra „Agenți” (fiecare agent are în gestiune un autovehicul înregistrat aici).

Fereastra „Gestiune articole” înregistrează tipurile de articole ce pot intra în gestiune, având o referință externă în fereastra „Articole” (fiecare articol este inclus într-o categorie/clasă de articole din tabela „gestiunearticole”). La rândul ei, fereastra „Articole” are o referință externă în fereastrele „Intrări” și „Ieșiri”.

Fereastra „Agenți”

Fereastra „Agenți” conține, pe lângă funcțiile de bază, operația de alocare a agentului pe o anumită comandă. Comenzile sunt venite de la clienți prin intermediul documentelor de tip ieșire. După ce ieșirile sunt încasate, acestea pot fi alocate agentilor disponibili. Dacă un agent este deja alocat altei comenzi, butonul „Alocați agentul” devine inactiv. După expirarea termenului de livrare, agentul va fi eliberat, permițând alocarea lui pentru o altă comandă. Dacă se dorește renunțarea la operației de alocare, se va selecta prima înregistrare a obiectului de tip combobox (înregistrare vidă) și se va apăsa din nou butonul „Alocați agentul”.

Fig. 3.24 Fereastra „Agenți”

Fereastra „Salariați”

Pentru această fereastră, voi prezenta numai funcția „Simulare calcul salarii” care poate fi accesată apăsȃnd butonul cu același nume. La apăsarea butonului, va apărea pe ecran o nouă fereastră:

Fig. 3.25 Fereastra „Simulare calcul salarii”

În această fereastră, câmpurile care se pot modifica sunt „Cursul valutar utilizat”, „Salariu net” și „Salariu brut”. Dacă înaintea accesării butonului de calcul salarii a fost selectat un angajat din lista salariaților, câmpul „Salariu net” va fi completat cu salariul acestuia. Realizarea calculelor se face la schimbarea selecției pe cele trei câmpuri.

Meniul „Operații/listări”

Prin intermediul meniului „Operații/listări” se manipulează date privind gestiunea articolelor contabile, a intrărilor și ieșirilor și se poate realiza fișa conturilor. Unele opțiuni pot fi inactive, în funcție de drepturile pe care le are fiecare utilizator.

La accesarea meniului „Fișiere” va apărea submeniul acestuia.

Fig. 3.26 Meniul „Operații/Listări”

Fereastra „Articole contabile”

Fereastra „Articole contabile” permite adăugarea, modificarea sau ștergerea articolelor contabile, inclusiv a articolelor contabile generate la validarea documentelor introduse în secțiunea „Intrări/Ieșiri”. Adăugarea, modificarea și/sau ștergerea sunt operații standard și se realizează similar celorlate componente ale aplicației.

Datele solicitate la introducerea unui articol contabil sunt:numărul documentului, cont debit, cont credit și suma. Explicația pentru toate articolele se generează automat.

Prezentarea vizuală a acestei ferestre este realizată în secțiunea anexe (a se vedea anexa 6).

Ferestrele „Intrări” și „Ieșiri”

Operațiile de cumpărare și vânzare se introduc în program, utilizând ecranele funcționale pentru intrări și ieșiri. Ecranele funcționale pentru operarea cumpărărilor și vânzărilor, conțin două tabele (zone) pentru introducerea datelor:

1. Tabelul care conține datele pentru antetul documentelor

2. Tabelul pentru detaliile documentelor

Adăugarea, modificarea și/sau ștergerea sunt operații standard și se realizează similar celorlate componente ale aplicației, numai că aceste operații se efectuează atât pentru documente, cât și pentru articolele incluse pe fiecare document.

Fig. 3.27 Fereastra „Ieșiri”

Pentru introducerea unei cumpărări/vânzări mai întâi se introduce documentul în prima zonă, urmând sa se adauge, pe rând articolele pentru fiecare document.

Operația de validare generează noi înregistrări în tabela „gestiunearticole”. Contul de credit va fi contul clientului/furnizorului pentru care s-a introdus documentul, iar contul de debit va fi contul articolului, pentru fiecare articol de pe document. Validarea nu este permisȃ pentru documente vide.

Operația de încasare/plată, de asemenea generează noi înregistrări în tabela „gestiunearticole”. Contul de credit va fi contul de casă, iar contul de debit va fi contul clientului/furnizorului pentru care s-a introdus documentul. Prin această operație se introduc înregistrări și în tabela „comenziclienți”.

Operația de devalidare șterge toate înregistrările efectuate în tabela „gestiunearticole” pentru documentul devalidat.

Fereastra „Fișe conturi”

Permite listarea fișei de cont pentru un cont ales din listă. Datele sunt preluate din tabela „articolecontabile”. Pentru fiecare cont sunt afișate și date agregate.

Fig. 3.28 Fereastra „Fișe conturi”

Fereastra „Fișe conturi” nu are înglobată nicio funcție, scopul acesteia fiind doar de analiză și sinteză.

ANEXE

Anexa nr. 1

Diagrama E/R finală

Anexa nr. 2

Secvența de cod pentru generarea tabelelot

CREATE TABLE utilizatori (cod INT(4) NOT NULL PRIMARY KEY,

nume VARCHAR(20) UNIQUE,

pass VARCHAR(20),

numen VARCHAR(20),

prenumen VARCHAR(20), ci VARCHAR(8),

cnp VARCHAR(14));

CREATE TABLE drepturi (codUtilizator INT(4) NOT NULL,

codSocietate INT(4) NOT NULL,

dRread VARCHAR(3) DEFAULT "yes" NOT NULL,

dRwrite VARCHAR(3) DEFAULT "no" NOT NULL,

dRadmin VARCHAR(3) DEFAULT "no" NOT NULL);

CREATE TABLE societati (cod INT(4) NOT NULL PRIMARY KEY,

nume VARCHAR(20) NOT NULL UNIQUE KEY,

codFiscal VARCHAR(25),

nrRegCom VARCHAR(25),

micro VARCHAR(3),

codCAEN VARCHAR(5),

capSoc VARCHAR(10),

loc VARCHAR(25),

jud VARCHAR(25),

sect VARCHAR(2),

str VARCHAR(25),

nrStr VARCHAR(5),

codPostal VARCHAR(25),

bl VARCHAR(10),

sc VARCHAR(10),

et VARCHAR(3),

apt VARCHAR(4),

tel VARCHAR(25),

email VARCHAR(25),

cont1 VARCHAR(25),

banc1 VARCHAR(25),

filiala1 VARCHAR(25),

cont2 VARCHAR(25),

banc2 VARCHAR(25),

filiala2 VARCHAR(25));

CREATE TABLE drepturifis (codUtilizator INT(4) NOT NULL,

clRead VARCHAR(3) NOT NULL, clWrite VARCHAR(3) NOT NULL,

fzRead VARCHAR(3) NOT NULL, fzWrite VARCHAR(3) NOT NULL,

agRead VARCHAR(3) NOT NULL, agWrite VARCHAR(3) NOT NULL,

artRead VARCHAR(3) NOT NULL, artWrite VARCHAR(3) NOT NULL,

gestRead VARCHAR(3) NOT NULL, gestWrite VARCHAR(3) NOT NULL,

autoRead VARCHAR(3) NOT NULL, autoWrite VARCHAR(3) NOT NULL,

salRead VARCHAR(3) NOT NULL, salWrite VARCHAR(3) NOT NULL,

intrRead VARCHAR(3) NOT NULL, intrWrite VARCHAR(3) NOT NULL,

iesRead VARCHAR(3) NOT NULL, iesWrite VARCHAR(3) NOT NULL,

bdRead VARCHAR(3) NOT NULL, bdWrite VARCHAR(3) NOT NULL,

fisecontRead VARCHAR(3) NOT NULL, fisecontWrite VARCHAR(3) NOT NULL,

artcontRead VARCHAR(3) NOT NULL, artcontWrite VARCHAR(3) NOT NULL);

CREATE TABLE furnizori (cod INT(4) NOT NULL PRIMARY KEY,

nume VARCHAR(20) UNIQUE,

CUI VARCHAR(9),

contAnalitic VARCHAR(85),

judet VARCHAR(20),

adresa VARCHAR(40),

IBAN VARCHAR(24),

dataExp VARCHAR(10),

societate INT(4));

CREATE TABLE clienti (cod INT(4) NOT NULL PRIMARY KEY,

nume VARCHAR(20) UNIQUE,

CUI VARCHAR(9),

contAnalitic VARCHAR(85),

judet VARCHAR(20),

adresa VARCHAR(40),

IBAN VARCHAR(24),

dataExp VARCHAR(10),

societate INT(4));

CREATE TABLE autovehicule (cod INT(4) NOT NULL PRIMARY KEY,

numarInmatriculare VARCHAR(10) UNIQUE,

tipVehicul VARCHAR(30),

marca VARCHAR(30),

combustibil VARCHAR(8),

societate INT(4));

CREATE TABLE agenti (cod INT(4) NOT NULL PRIMARY KEY,

nume VARCHAR(20) UNIQUE,

telefon VARCHAR(25), CI VARCHAR(8),

autovehicul VARCHAR(10),

societate INT(4));

CREATE TABLE gestiunearticole (cod INT(4) NOT NULL PRIMARY KEY,

nume VARCHAR(20) UNIQUE,

contCh VARCHAR(85),

contVen VARCHAR(85),

contArticol VARCHAR(85),

societate INT(4));

CREATE TABLE articole (cod INT(4) NOT NULL PRIMARY KEY,

nume VARCHAR(20) UNIQUE,

UM VARCHAR(10),

TVA VARCHAR(10),

tip VARCHAR(20),

pretVanzare VARCHAR(15),

pvTVA VARCHAR(15),

stocMinim VARCHAR(20),

societate INT(4));

CREATE TABLE salariati (cod INT(4) NOT NULL PRIMARY KEY,

nume VARCHAR(20),

prenume VARCHAR(20),

functie VARCHAR(20),

dataAngajarii VARCHAR(10),

norma VARCHAR(2),

salariu VARCHAR(15),

CNP VARCHAR(13),

judet VARCHAR(20),

adresa VARCHAR(40),

telefon VARCHAR(25),

contract VARCHAR(15),

societate INT(4));

CREATE TABLE intrari (nrDoc INT(4) NOT NULL,

tip VARCHAR(20),

cod VARCHAR(4),

furnizor VARCHAR(20),

valoare VARCHAR(15),

TVA VARCHAR(15),

total VARCHAR(15),

neachitat VARCHAR(15),

status CHAR(1),

societate INT(4));

CREATE TABLE iesiri (nrDoc INT(4) NOT NULL,

tip VARCHAR(20),

cod VARCHAR(4),

client VARCHAR(20),

valoare VARCHAR(15),

TVA VARCHAR(15),

total VARCHAR(15),

neachitat VARCHAR(15),

status CHAR(1),

societate INT(4));

CREATE TABLE intrariarticole (nrDoc INT(4) NOT NULL,

tip VARCHAR(20),

articol VARCHAR(20),

cod VARCHAR(4),

UM VARCHAR(10),

TVA VARCHAR(15),

cantitate VARCHAR(15),

pret VARCHAR(15),

valoare VARCHAR(15),

TVATot VARCHAR(15),

total VARCHAR(15),

cont VARCHAR(85),

codArt INT(4) NOT NULL,

societate INT(4));

CREATE TABLE iesiriarticole (nrDoc INT(4) NOT NULL,

tip VARCHAR(20),

articol VARCHAR(20),

cod VARCHAR(4),

UM VARCHAR(10),

TVA VARCHAR(15),

cantitate VARCHAR(15),

pret VARCHAR(15),

valoare VARCHAR(15),

TVATot VARCHAR(15),

total VARCHAR(15),

cont VARCHAR(85),

codArt INT(4) NOT NULL,

societate INT(4));

CREATE TABLE articolecontabile (nrDoc INT(4) NOT NULL,

contDeb VARCHAR(85),

contCr VARCHAR(85),

suma VARCHAR(20),

explicatie VARCHAR(85),

valid CHAR(1),

codArt INT(4) NOT NULL,

societate INT(4));

CREATE TABLE comenziclienti (cod INT(4) NOT NULL PRIMARY KEY,

codiesire INT(4),

numeClient VARCHAR(20),

codAgent INT(4),

termen VARCHAR(10),

societate INT(4));

Anexa nr. 3

Alte fragmente de cod

//Preluarea Conturilor din fisierul extern Conturi.dat

FileStream FILE2 = new FileStream("Conturi.dat", FileMode.Open, FileAccess.ReadWrite);

StreamReader sr2 = new StreamReader(FILE2);

while (sr2.Peek() >= 0) listaConturiLv.Items.Add(sr2.ReadLine());

FILE2.Close();

sr2.Close();

//functia de validare de date – CNP

public bool isCNP(string cnp)

{

bool b = true;

try

{

b = isDate(cnp[5].ToString() + cnp[6].ToString() + "." + cnp[3].ToString() + cnp[4].ToString() + "." + cnp[1].ToString() + cnp[2].ToString() + "11");

if ((cnp[0] != '1') && (cnp[0] != '2')) b = false;

Convert.ToInt32(cnp[7].ToString() + cnp[8].ToString());

Convert.ToInt32(cnp[9].ToString() + cnp[10].ToString());

Convert.ToInt32(cnp[11].ToString() + cnp[12].ToString());

}

catch

{

b = false;

}

return b;

}

//calcul contributii pe baza salariului net

private void simSalNetTb_Leave(object sender, EventArgs e)

{

Validare vld = new Validare();

if (vld.isDouble(simSalNetTb.Text) == false)

{

MessageBox.Show("Nu ati introdus salariul net corect!", "Atentie!");

goto sfarsit;

}

double dbl = 0;

double total = 0;

dbl = (100 * Convert.ToDouble(simSalNetTb.Text)) / 70.14; dbl = Math.Round(dbl, 2);

simSalBrutTb.Text = dbl.ToString();

dbl = 0.105 * Convert.ToDouble(simSalBrutTb.Text); total += dbl; dbl = Math.Round(dbl, 2);

simCASTb.Text = dbl.ToString();

dbl = 0.055 * Convert.ToDouble(simSalBrutTb.Text); total += dbl; dbl = Math.Round(dbl, 2);

simSanTb.Text = dbl.ToString();

dbl = 0.005 * Convert.ToDouble(simSalBrutTb.Text); total += dbl; dbl = Math.Round(dbl, 2);

simSomTb.Text = dbl.ToString();

dbl = 0.16 * (Convert.ToDouble(simSalBrutTb.Text) – total); total += dbl; dbl = Math.Round(dbl, 2);

simImpTb.Text = dbl.ToString(); total = Math.Round(total, 2);

simTCSTb.Text = total.ToString();

if (vld.isDouble(simCursValTb.Text) == true)

{

dbl = Convert.ToDouble(simSalNetTb.Text) / Convert.ToDouble(simCursValTb.Text); dbl = Math.Round(dbl, 2);

simSalNetEuroTb.Text = dbl.ToString();

dbl = Convert.ToDouble(simSalBrutTb.Text) / Convert.ToDouble(simCursValTb.Text); dbl = Math.Round(dbl, 2);

simSalBrutEuroTb.Text = dbl.ToString();

}

else

{

simSalNetEuroTb.Text = "0";

simSalBrutEuroTb.Text = "0";

}

sfarsit:

vld.isDouble(simCASTb.Text);

}

//functia de trecere din modul adaugare/modificare in modul vizualizare si invers

public void switchAdMod()

{

listaSalLv.Enabled = !listaSalLv.Enabled;

adSalBtn.Enabled = !adSalBtn.Enabled;

modSalBtn.Enabled = !modSalBtn.Enabled;

stgSalBtn.Enabled = !stgSalBtn.Enabled;

panelSal.Visible = !panelSal.Visible;

simSalBtn.Visible = !simSalBtn.Visible;

salNumTb.Clear(); salPrenTb.Clear(); salFctTb.Clear(); salDataTb.Clear(); salNormTb.Clear(); salSalTb.Clear(); salCNPTb.Clear(); salJudCb.Text = ""; salAdrTb.Clear(); salTelTb.Clear(); salContrTb.Clear();

listaSalLv.SelectedItems.Clear();

}

//verificarea drepturilor pentru consultarea BD

command.CommandText = "select * from drepturifis where codUtilizator = " + parentForm.USRpar.codUser.ToString();

reader = command.ExecuteReader();

reader.Read();

if (reader[1].ToString() == "yes") listaTabLv.Items.Add("clienti");

if (reader[3].ToString() == "yes") listaTabLv.Items.Add("furnizori");

if (reader[5].ToString() == "yes") listaTabLv.Items.Add("agenti");

if (reader[7].ToString() == "yes") listaTabLv.Items.Add("articole");

if (reader[9].ToString() == "yes")

listaTabLv.Items.Add("gestiunearticole");

if (reader[11].ToString() == "yes") listaTabLv.Items.Add("autovehicule");

if (reader[13].ToString() == "yes") listaTabLv.Items.Add("salariati");

if (reader[15].ToString() == "yes")

{

listaTabLv.Items.Add("intrari");

listaTabLv.Items.Add("intrariarticole");

}

if (reader[17].ToString() == "yes")

{

listaTabLv.Items.Add("iesiri");

listaTabLv.Items.Add("iesiriarticole");

}

if (reader[23].ToString() == "yes")

listaTabLv.Items.Add("articolecontabile");

Anexa nr. 3

Prezentarea opțiunilor de schimbare parolă și societate

Schimbarea societății

Schimbarea parolei

Anexa nr. 5

Prezentarea ferestrelor „Autovehicule”, „Articole” și „Gestiune articole”

Fereastra „Autovehicule”

Fereastra „Articole”

Fereastra „Gestiune articole” în modul adăugare/modificare

Fereastra „Gestiune articole” în modul vizualizare

Anexa nr. 6

Prezentarea ferestrei „Articole contabile”

Fereastra „Articole contabile” la ștergerea unei înregistrări

Fereastra „Gestiune articole” în modul adăugare/modificare

BIBLIOGRAFIE

Similar Posts