cartea de probleme word

Download Cartea de Probleme Word

If you can't read please download the document

Upload: alina-rusnac

Post on 18-Nov-2015

21 views

Category:

Documents


3 download

DESCRIPTION

carte

TRANSCRIPT

UNIVERSITATEA DE STAT TIRASPOLCOLEGIUL FINANCIAR - BANCARSilviu GNCU Metodologia rezolvriiproblemelor de informatic n stilul orientat pe obiecteCopie autorizata pentru studenii CFBCAprobat de Senatul Universitii de Stat TiraspolRecenzeni: Andrei Braicov, doctor, confereniar universitar, USTAlexandru Lazari, doctor, lector superior, USMDESCRIEREA CIP A CAMEREI NAIONALE A CRIIGncu, Silviu. Metodologia rezolvrii problemelor de informatic n stilul orientat peobiecte / Silviu Gncu; Univ. de Stat Tiraspol, Catedra Informatic i TehnologiiInformaionale. Ch. : Univ. de Stat Tiraspol, 2012. 112 p. (Informatica). 60 ex. ISBN 978-9975-76-085-0.37.016.046:004G 57ISBN 978-9975-76-085-0. Silviu Gncu, 2012Prefa Pentru a rezolva problemetrebuie s rezolvi probleme Stilul de programare orientat pe obiecte (POO) este utilizat pentru rezolvareaproblemelor de informatic cu un grad sporit de dificultate. Conform acestui stilprogramul const dintr-o colecie de obiecte, uniti individuale de cod careinteracioneaz ntre ele. Elaborarea unui program n stilul POO presupune a organiza codul acestuia nuniti de program care s opereze cu obiecte. n acest sens elaborarea programuluiconst n prelucrarea obiectelor existente sau crearea lor n dependen de specificulproblemei. Prezenta lucrare tiinifico-didactic cuprinde o gam variat de programerezolvate i o serie de probleme pentru rezolvare independent. Este o continuare aghidului de iniiere Borland C++ Builder (lucrarea 2 din referinele bibliografice). Este adresat studenilor specialitii informatic, profesorilor de informaticct i tuturor celor care sunt interesai de tehnologia POO. Problemele rezolvate au ca scop prezentarea principalelor concepte care stau labaza POO. n baza acestora este prezentat metodologia de creare a unei clase; dedefinirea datelor i prelucrarea metodelor; de iniializare a datelor obiectului prinintermediul constructorului; de creare a relaiilor dintre clase (motenire) i arelaiilor dintre obiecte (agregare). Programele sunt rezolvate n baza limbajului deprogramare C++, limbaj ce se afl la temelia mai multor medii de programare vizual(C++ Builder, Visual C++, etc.). Un salt important n dezvoltarea tehnologiilor informaionale s-a produs odatcu apariia mediilor de programare vizual orientate pe obiecte. Pentru formareadeprinderilor de realizare a aplicaiilor Windows orientate pe obiecte sunt prezentateo serie de aplicaii care ilustreaz modalitatea de gestionare a componentelor, deutilizare a elementelor de grafic, de creare a noi tipuri de date i de utilizare a lorntr-un mediu de programare vizual. Drept mediu de programare este utilizatplatforma Borland C++ Builder. Pentru dezvoltarea abilitilor de programare, recomand cititorilor rezolvarea act mai multe probleme.Autorul3Sugestii metodologice 1. Modelul orientat pe obiecte Conform Grady Booch tehnologia orientat pe obiecte a fost conceput nbaza principiilor de abstractizare, incapsulare, modularitate, ierarhizare, tipizare,paralelilism i persisten. Ceea ce este important const n faptul c aceste principiise regsesc n modelul orientat pe obiecte.[4, p.25]. 1. Abstractizare - procesul care capteaz caracteristicile eseniale ale unuiobiect, caracteristici ce difereniaz acest obiect de toate celelalte tipuri de obiecte.Prin abstractizare se rezolv problemele cu un grad sporit de complexitate.Abstractizarea se manifest prin determinarea similaritii dintre anumite obiecte,situaii sau procese din lumea real i n luarea deciziilor, ignornd pentru momentdeosebirile dintre obiecte; 2. Incapsulare - procesul mental executat pe o abstractizare n care elementelestructurale ale abstractizrii sunt izolate de cele ce constituie comportamentul su.Servete la separarea interfeei vizibile a unei abstractizri de implementarea sa; 3. Modularitate - procesul de divizare a unui sistem complex n pri (module)manevrabile. Modularitatea este caracteristica de divizare a programului n mai multeuniti care sunt compilate separat, dar simultan i comunic ntre ele; 4. Ierarhizare - procesul de clasificare pe nivele de abstractizare; 5. Tipizare reprezint un mod de protejare a obiectelor. Prin intermediultipizrii se face distincie dintre obiectele diferitor clase, astfel obiectele nu pot fischimbate sau, n unele cazuri, aceast schimbare este limitat; 6. Concurena (paralelism) este o proprietate, prin intermediul creia sepermite ca mai multe obiecte diferite s fie n execuie n acelai timp. Sistemele careimplic concurena sunt sisteme cu procesoare multiple, n care mai multe procesesau thread-uri (fire de execuie) pot fi executate concurent pe procesoare diferite. 7. Persistena este proprietatea obiectelor care implic existena acestora idup ncetarea procesului care le-a creat. Starea obiectului i codul corespunztormetodelor sunt memorate n baza de date. Tipurile obiectelor pot fi declaratepersistente prin folosirea cuvntului cheie persistent la momentul declarrii, variabilafiind i ea constrns la un tip persistent. Eseniale pentru limbajele de programare orientate pe obiect sunt primele patrucaracteristici. Un limbaj de programare este orientat pe obiecte dac susine primelepatru caracteristici. 2. Caracteristici ale programrii orientate pe obiecte Din perspectiva programrii, rezolvarea unei probleme se poate face pe 3direcii:4 a) Rezolvarea orientat pe algoritm; b) Rezolvarea orientat pe date; c) Rezolvarea orientat pe obiect, combin tendinele primelor dou abordri. Programarea orientat pe obiecte POO presupune unirea datelor cusubprogramele care prelucreaz aceste date ntr-un tot ntreg, numit obiect. Acest stilde scriere a codului, numit tehnologie, ofer posibiliti de modelare a obiectelor, aproprietilor i a relaiilor dintre ele, dar i posibilitatea de a descompune o problemn componentele sale (soft mai mentenabil, adaptabil, reciclabil). Acest mod de rezolvare se bazeaz pe crearea de obiecte i pe interaciuneadintre ele. Cele mai importante caracteristici ale tehnologiei orientate pe obiecte sunt: Obiectul asociaz datele mpreun cu operaiile necesare prelucrrii. Datele suntinformaii de structur descrise de o mulime de atribute ale obiectului, iar operaiile(metodele) acioneaz asupra atributelor obiectului i eventual, asupra altor obiecte; Clasa reunete o colecie de obiecte care partajeaz aceeai list de atributeinformaionale i comportamentale; Incapsularea principiul care se bazeaz pe combinarea datelor cu operaiile degestionare a obiectului i proprietatea obiectelor de a ascunde datele i operaiileproprii fa de alte obiecte; Instanierea operaia prin care se creeaz un obiect i apoi se iniializeaz cu datespecifice; Motenirea principiul prin care putem reutiliza i extinde clasele existente.Acest mecanism permite unei noi clase s beneficieze de atributele i metodeledefinite ntr-o clas deja existent; Agregarea operaiile cu ajutorul crora clasele sunt descompuse n uniti maimici, care la fel sunt clase. O clas agregat este o clas ale crei obiecte conin alteobiecte. Polimorfismul posibilitatea de a putea aplica n moduri diferite o aceeaioperaie mai multor clase. Prin operaie nelegem orice metod sau operator.Polimorfismul reprezint abilitatea unor obiecte similare de a rspunde la acelaimesaj n moduri diferite. 3. Limbaje de programare orientate pe obiecte Un limbaj de programare reprezint un set de specificaii necesare reprezentriialgoritmilor. Dezvoltarea limbajelor de programare a cunoscut n timp mai multegeneraii. Prima generaie a limbajelor de programare o constituie perioada 1954-1958.Limbajele din aceast generaie au fost concepute pentru a simplifica complexitateaformulelor matematice. Sunt caracteristice limbajele: FORTRAN I, ALGOL-58,Flowmatic i IPL V.5 A doua generaie dateaz anilor 1959-1961 i se caracterizeaz princoncentrarea ateniei asupra abstraciunilor algoritmice. n acea perioadcalculatoarele au devenit mai puternice, ele fiind utilizate n soluionarea problemelorde ordin economic, de eviden a personalului, etc. Sunt utilizate limbajele:FORTRAN II, ALGOL-60, COBOL, Lisp. Odat cu apariia tranzistoarelor, costul unui calculator a sczut considerabil,astfel producerea lor a crescut esenial. Creterea productivitii acestora a dus laapariia unei noi generaii a limbajelor de programare n perioada 1962-1970. Auaprut limbaje precum: PL/I, ALGOL-68, Pascal, Simula. Aceste limbaje secaracterizeaz prin faptul c ofer un alt nivel de abstractizare a datelor, oferindprogramatorului posibilitatea de a crea noi tipuri de date. Perioada 1970-1980 se caracterizeaz prin apariia mai multor limbaje deprogramare, care nu au fcut fa cerinelor pieii. Problema abstractizrii obiectelor afost caracteristic perioadei 1970-1980, astfel au aprut limbajul Simula, iar n bazaacestuia i altele precum Smalltalk, Object Pascal, C++, CLOS, Ada i Eiffel. Acestelimbaje au fost numite orientate pe obiecte. Lansarea sistemului de operare Windows a impus firmele specializate sdezvolte produse noi, destinate implementrii pe calculator a unor programeconcepute n baza unui limbaj de programare. Astfel au aprut mai multe medii deprogramare vizual, destinate dezvoltrii rapide a aplicaiilor Windows orientate peobiecte. Mediile de programare conin o gam larg de biblioteci, care sunt compusedin clase. Spre exemplu, mediul de programare C++ Builder conine biblioteca VCL(Visual Componente Library) format din clase, funcii i variabile necesare pentruelaborarea de aplicaii. O clas, n mediul de programare vizual, este completatcu dou elemente noi: Proprieti reprezint starea unui obiect, din punct de vedere sintactic dateleunui obiect sunt transformate n proprieti, care au ataat n fa cuvntul cheie__property. Evenimente reprezint o legtur dintre o aciune n sistem (apsarea uneitaste, deplasarea maus-ului, etc.) i o secven de cod care rspunde la aciuneaefectuat. Instanele unor astfel de clase sunt numite componente. O component estedefinit ca fiind o clas ce deriv direct sau indirect din clasa TComponent. [5, p.17] Unitatea de baz a unei aplicaii Windows o constituie componentele. Acesteapot fi grupate n: Componente container pot conine pe suprafaa lor alte componente. Deexemplu: Form, GroupBox, etc.; Componente de aciune destinate prelucrrii unei aciuni (efectuarea unui6click, etc.). De exemplu: Button i alte derivate ale acesteia; Componente valoare prin intermediul crora este prezentat o informaie. Deexemplu: Label, Edit, etc.; Componente de selecie (CheckBox, RadioButton, etc); Componente de listare (ListBox, MonthCalendar, etc.); Componente pentru prelucrarea grafic (Obiectul Canvas), etc. Prin intermediul componentelor un mediu de programare ofer posibilitateautilizatorului de a dezvolta aplicaii Windows orientate pe obiecte. 4. Tendine n prezent tehnologiile informaionale se afl n continu cretere. Astfel, auaprut noi platforme de dezvoltare. Concomitent cu acestea s-au dezvoltat i mediilede programare vizual orientate pe obiecte. Ele ofer posibilitatea de a elaboradiverse produse software. Prin intermediul lor se pot realizeaz: a) aplicaii Windows orientate pe obiecte; b) aplicaii Windows pentru gestiunea bazelor de date; c) aplicaii Windows pentru lucru n reea; d) aplicaii pentru gestiunea paginilor web, etc. Elaborare unei aplicaii Windows orientat pe obiecte presupune: 1. A gestiona componentele oferite de ctre mediul de programare utilizat. Unmediu de programare vizual orientat pe obiecte conine o gam larg de componentedestinate procesrii datelor. Pentru gestiunea lor, sunt necesare cunotine n ceea ceprivete structura obiectelor. Aceasta presupune a studia proprietile, metodele ievenimentele caracteristice unei componente i modalitate de modificare a lor ndependen de specificul problemei. 2. A elabora componente noi. n cazul n care mediul de programare nu ofersuficiente componente, apare tendina de elaborare a lor. Observm necesitatea studierii programrii orientate pe obiecte n ambelecazuri. 5. Dificulti n nsuirea programrii orientate pe obiecte n prezent conform literaturii de specialitatea din domeniu [3],[4],[10], etc., i aplanurilor de nvmt ale universitilor din Republica Moldova i nu numai,tehnologia programrii orientat pe obiecte este format n baza: a) unui limbaj de programare de uz general, cele mai frecvent utilizate fiind Object Pascal, C++, C#; b) unui mediu de programare cu elemente de programare vizual, cele mai frecvent utilizate fiind: Borland Delphi/Builder, Java, Visual C++, Visual Basic, etc.7 n timp s-a observat c studenii ntmpin mai multe dificulti n nsuireadeprinderilor de utilizare a tehnologiei orientate pe obiecte. De cele mai multe oriacestea se datoreaz: 1. Lipsei unui model, care s se expun asupra coninuturilor i asuprametodelor de predare/nvare. 2. Insuficienei de probleme rezolvate, prin intermediul crora s se prezintemodalitatea de elaborare a unui program n stilul de programare orientat pe obiecte. 3. Gradului sporit de dificultate al problemelor propuse spre rezolvare n cadrulorelor de laborator, etc. 6. Reflecii privind coninutul i organizarea procesului de instruire Pentru nlturarea dificultilor ntlnite n procesul de studiu al POO serecomand: 1. A utiliza modelul moderat de formare a competenelor, elaborat de ctre ungrup de cercettori din Belgia (X. Rogiers, J.-M. De Ketele, F.-M. Grard). Conformmodelului formarea competenei se realizeaz n trei etape: a) Structurare a resurselor. Aceast etap presupune studierea materialului teoretic, concepte, noiuni, definiii, etc.; b) Integrare a resurselor. Resursele teoretice sunt integrate prin prisma exemplelor. Fiecare dintre exemple avnd drept scop final prezentarea unei sau a mai multor caracteristici ale POO. c) Transfer sau adaptarea la noi situaii. n cadrul acestei etape sunt propuse probleme care difer, dar nu considerabil de problemele din cadrul etapei a doua. Astfel dac problema este rezolvat atunci transferul este realizat. 2. De a realiza un studiu de caz asupra unui proiect. Astfel vor fi prezentateavantajele oferite de ctre POO comparativ cu alte stiluri de programare. 3. A propune spre rezolvare la orele de laborator un set de probleme astfelnct: a) Gradul de dificultate al problemelor s nu fie foarte ridicat; b) Problemele propuse spre rezolvare s cuprind majoritatea conceptelor POO studiate; c) Problemele propuse s ofere continuitate n procesul de studiu; d) S realizeze un proiect care s cuprind n structura sa mai multe module.8Capitolul I Limbajul C++ C++ (pronunat n romn C plus plus i n englez si plas plas) este unlimbaj de programare orientat pe obiecte. A fost creat de ctre Bjarne Stroustrup,lansarea comercial datnd anului 1985. n 1990 devine unul dintre cele mai popularelimbaje de programare comerciale.1. Crearea de obiecte Problem exemplu. Creai obiectul dreptunghi date: lungimile laturilor; metode: citire, afiare, iniializare, determinare a perimetrului i ariei. Se vor introduce datele despre dou dreptunghiuri i se vor afia datele despredreptunghiul cu suprafaa maxim i dreptunghiul cu perimetrul minim.Rezolvare :#includeclass dreptunghi{ double lung,lat; public: void citire();//pentru citirea datelor void afisare();//pentru afisare double arie(); double perimetru(); void init(double a, double b){lung=a;lat=b;}};void dreptunghi::citire(){ coutFileName;if(nume.Length()>3){ DBImage1->Picture->LoadFromFile(nume); DBImage1->CopyToClipboard(); DBImage1->PasteFromClipboard();}Prelucrm evenimentul: Button2Clickdouble d;if(ad){ Table1->MoveBy(index-1); Table1->Edit(); d=Table1->FieldValues["Cantitate"]; Table1->FieldValues["Cantitate"]= d+Edit1->Text.ToDouble();}else{Table1->Edit(); Table1->FieldValues["Cantitate"]=Edit1->Text.ToDouble();}Table1->Post();Edit1->Clear();Prelucrm evenimentul: Adaugaprodusnou1ClickTable1->Insert();AnsiString s=InputBox("Adaugare produs","Specificati numeleprodusului","");ComboBox1->Items->Add(s);Table1->FieldValues["Nume produs"]=s;ad=false;Prelucrm evenimentul: Button3Clickdouble c;Table1->MoveBy(index-1);Table1->Edit();if(Table1->FieldValues["Cantitate"]Text.ToDouble())Edit1->Text=Table1->FieldValues["Cantitate"];c=Table1->FieldValues["Cantitate"]-Edit1->Text.ToDouble();Table1->FieldValues["Cantitate"]=c;suma=suma+Table1->FieldValues["pret"]*Edit1->Text.ToDouble();Label6->Caption="Spre achitare:="+AnsiString(suma);Edit1->Clear(); Table1->First();while(!Table1->Eof){ if(Table1->FieldValues["Cantitate"]==0) Table1->Delete(); Table1->Next();}83Prelucrm evenimentul: Table1AfterDeleteAnsiString s;Table1->First();ComboBox1->Clear();while(!Table1->Eof){ s=AnsiString(Table1->FieldValues["Nume produs"]); ComboBox1->Items->Add(s); Table1->Next();} Problema2 Evidena crilor Elaborai un proiect BCB prin intermediul cruia se va duce evidena crilorunei biblioteci, dac schema bazei de date are urmtoarea structur: Realizare:Creem prin intermediul utilitarului Database Desktop tabelele de mai sus. n cadrulacestei aplicaii vom utiliza mai multe forme. Pe forma principal plasmcomponentele:ADOConnection1 facem conexiunea cu baza de date i setm proprietateaConnected cu valoarea true;ADOTable1 setm urmtoarele proprieti: Connection= ADOConnection1; TableName=Carti; Active=true; Name=Carti;Procedm similar i n cazul componentelor ADOTable2, ADOTable3, ADOTable4modificnd proprietile Name i TableName corespunztor n Autori, Edituri, Limbi;DataSource1 setm urmtoarele proprieti: DataSet=Carti, modificm valoarea proprietii Name cu Carte, procedmsimilar i n cazul urmtoarelor componente DataSource2, DataSource3,DataSource4 cu valorile proprietii Name corespunztor Autor, Editura, Limba;Image1 setm urmtoarele proprieti: Picture ncrcm o imagine;84 Stretch=true; Align=alClient;ADOQuery1 setm urmtoarele proprieti: Connection= ADOConnection1; Name=Query;Pentru forma principal setm urmtoarele proprieti:Name=Main;Align=alClient;mai adugm n proiect nc 7 forme, modificnd proprietile Name corespunztor:Ad_autor, Ad_carte, Ad_limba, Ad_editura, Admin, Raport;Setm Position=poScreenCenter pentru toate formele; Includem n antetul fiecrui fiier *.cpp fiierele header (unit1.h unit8.h),dup necesitate; n fiierul Unit1.h la seciunea public: declarm variabilaAnsiString sql; Prelucrm evenimentul OnCreate al formei:sql="SELECT Carti.titlu, Carti.pret, Carti.pagini,Carti.data, Editura.nume,Autori.nume, Autori.prenume, Limba.limba FROM Autori,Carti,Editura,LimbaWHERE (Carti.id_autor = Autori.id_autor) AND (Editura.id_editura =Carti.id_editura) AND (Limba.id_limba = Carti.id_limba)";MainMenu1 meniul va conine urmtoarele opiuni: AdaugaCautaTiparAdministrare CarteDupa titluToate cartile AutorDupa limba Liste cu autori EdituraDupa pret LimbaDupa data Se va plasa componenta PopupMenu1 cu opiunea Adauga autor,DBLookupComboBox1:DataSource=Main->Carte; DataField=id_autor; ListSource=Main->Autor;ListField=nume; KeyField=id_autor;PopupMenu=PopupMenu1; Se va plasa componenta PopupMenu2 cu opiunea Adauga limba;DBLookupComboBox2:DataSource=Main->Carte; DataField=id_limba; ListSource=Main->limba;ListField=limba; KeyField=id_limba;PopupMenu=PopupMenu2; Se va plasa componenta PopupMenu3 cu opiunea Adauga editura;DBLookupComboBox3: DataSource=Main->Carte; DataField=id_editura;ListSource=Main->editura;ListField=nume;KeyField=id_editura;PopupMenu=PopupMenu3;85DateTimePicker1: - pentru selectarea datei.FORMULARUL cauta Pe suprafaa acestei forme vom crea un meniu principal numit Tipar(componenta MainMenu1), DBNavigator1, DBGrid1. Plasm componentaTabbedNotebook1 i crem 4 pagini. Prima pagina cutare dup titlu, vom utiliza componentele: Label1, Edit1,Button1;Pagina doi cutare dup limb, vom utiliza componentele: ComboBox1; Pagina trei cutare dup pre, vom utiliza componentele: RadioGroup1,Edit2, Button2;86 Pagina patru cutare dup data publicrii, vom utiliza componentele:RadioGroup2, DateTimePicker1, BitBtn1;FORMULARUL Ad_carteFORMULARUL Ad_autor Pe suprafaa formei AD_autor plasm componentele:DBEdit1: DataSource=Main->Autor; DataField=nume;DBEdit2: DataSource=Main->Autor; DataField=prenume;DBImage1: DataSource=Main->Autor; DataField=foto;DBNavigator1:DataSource=Main->Autor;87FORMULARUL Ad_limba Pe suprafaa formei AD_limba plasm componentele:Label1: Caption=Specificati limba;DBEdit1: DataSource=Main->Limba; DataField=limba;DBNavigator1: DataSource=Main->Limba;FORMULARUL Ad_editura Pe suprafaa formei Ad_editura plasm componentele:DBEdit1: DataSource=Main->Editura;DataField=nume;DBMemo1: DataSource=Main->Editura; DataField=adresa;DBMemo2: DataSource=Main->Editura; DataField=contact;DBNavigator1:DataSource=Main->Editura;Label1, Label2, Label3 corespunztor imaginiiFORMULARUL Administrare88Pe suprafaa formei Admin plasm componentele:RadioGroup1: Columns=3; Caption=Indica numele tabelei;Items adugm cmpurile corespunztor figurii;DBNavigator1, DBGrid1 FORMULARUL Raport Pe forma Raport plasm componenta QuickRep1, modificm proprietateaName n Lista_carti. Scriem textul interogrii n cadrul componentei Query de peforma principal (n cadrul proprietii SQL scriem interogarea, dup care setmActive=true;Quickrep1: Dataset=Main->Query;Bands->HasTitle=true;Bands->HasColumnHeader=true;Bands->HasDetail=true;Pe banda Title plasm componenta QRLabel1 i atribuim proprietii Caption textulLista carti;Procedm similar i n cazul benzii Column Header;Pe banda Detail plasmcomponentele:QRDBText1: Dataset=Main->Query;DataField=titlu;QRDBText2: Dataset=Main->Query; DataField=limba;QRDBText3: Dataset=Main->Query; DataField=pagini;QRDBText4: Dataset=Main->Query; DataField=pret;QRDBText5: Dataset=Main->Query; DataField=nume;QRDBText6: Dataset=Main->Query; DataField=editura;QRDBText7: Dataset=Main->Query; DataField=data. n cadrul acestei forme urmeaz a fi create mai multe rapoarte, plasmcomponenta Quickrep2 pe form, iar pe suprafaa acesteia:89Quickrep2: Dataset=Main->Autori, Name=Lista_autori,Bands->HasTitle=true,Bands->HasColumnHeader=true, Bands->HasDetail=true;Pe banda Title plasm componenta QRLabel1 i atribuim proprietii Caption textulLista autori;Procedm similar i n cazul benzii Column Header;Pe banda Detail plasm componentele:QRDBText1: Dataset=Main->Autori;DataField=nume;QRDBText2: Dataset=Main->Autori; DataField=prenume;QRDImage1: Dataset=Main->Autori; DataField=foto;Codul surs: Unit1.cpp fiierul formei principale (Main)#include #pragma hdrstop#include "Unit1.h"#include "Unit2.h"#include "Unit3.h"#include "Unit4.h"#include "Unit5.h"#include "Unit6.h"#include "Unit7.h"#include "Unit8.h"#pragma package(smart_init)#pragma resource "*.dfm"TMain *Main;__fastcall TMain::TMain(TComponent* Owner): TForm(Owner){sql="SELECT Carti.titlu, Carti.pret,Carti.pagini, Carti.data,Editura.nume, Autori.nume, Autori.prenume, Limba.limba FROMAutori,Carti,Editura,Limba WHERE (Carti.id_autor =Autori.id_autor) AND (Editura.id_editura = Carti.id_editura) AND(Limba.id_limba = Carti.id_limba)";}void __fastcall TMain::Carte1Click(TObject *Sender){ Ad_carte->Show();}90void __fastcall TMain::Editura1Click(TObject *Sender){ Ad_editura->Show();}void __fastcall TMain::Autor1Click(TObject *Sender){ Ad_autor->Show();}void __fastcall TMain::Limba1Click(TObject *Sender){ Ad_limba->Show();}void __fastcall TMain::Vizualizare1Click(TObject *Sender){ Admin->Show();}void __fastcall TMain::Dupatitlu1Click(TObject *Sender){ Cauta->Show(); Cauta->TabbedNotebook1->PageIndex=0;}void __fastcall TMain::Dupalimba1Click(TObject *Sender){ Cauta->Show(); Cauta->TabbedNotebook1->PageIndex=1;}void __fastcall TMain::Dupapret1Click(TObject *Sender){ Cauta->Show(); Cauta->TabbedNotebook1->PageIndex=2;}void __fastcall TMain::Cautadupadata1Click(TObject *Sender){ Cauta->Show(); Cauta->TabbedNotebook1->PageIndex=3;}void __fastcall TMain::Toatecartile1Click(TObject *Sender){ Query1->Close(); Query1->SQL->Text=sql; Query1->Open();Raport->Lista_carti->Preview();}void __fastcall TMain::Listadeautori1Click(TObject *Sender){ Raport->Lista_autori->Preview();}Unit2.cpp fiierul formularului Adaug carte#include "Unit1.h"#include "Unit2.h"#include "Unit3.h"#include "Unit4.h"#include "Unit5.h"#pragma package(smart_init)#pragma resource "*.dfm"TAd_carte *Ad_carte;__fastcall TAd_carte::TAd_carte(TComponent* Owner):TForm(Owner){}void __fastcall TAd_carte::DateTimePicker1Change(TObject *Sender){ Main->Carti->FieldValues["data"]=DateTimePicker1->Date;}void __fastcall TAd_carte::Adaugaautor1Click(TObject *Sender){ Ad_autor->Show();}void __fastcall TAd_carte::Adaugaeditura1Click(TObject *Sender){ Ad_editura->Show();}void __fastcall TAd_carte::Adaugalimba1Click(TObject *Sender){ Ad_limba->Show();}91Unit3.cpp fiierul formularului Adaug autor#include "Unit1.h"#include "Unit2.h"#include "Unit3.h"#include "Unit4.h"#include "Unit5.h"TAd_autor *Ad_autor;__fastcall TAd_autor::TAd_autor(TComponent* Owner): TForm(Owner){}void __fastcall TAd_autor::Label3Click(TObject *Sender){ OpenPictureDialog1->Execute(); AnsiString s=OpenPictureDialog1->FileName; if(s.Length()>1){ DBImage1->Picture->LoadFromFile(s); DBImage1->CopyToClipboard(); DBImage1->PasteFromClipboard(); }}void __fastcall TAd_autor::DBImage1Click(TObject *Sender){Label3Click(Sender);}Unit4.cpp fiierul formularului Adaug editur#include #pragma hdrstop#include "Unit1.h"#include "Unit2.h"#include "Unit3.h"#include "Unit4.h"#include "Unit5.h"#pragma package(smart_init)#pragma resource "*.dfm"TAd_editura *Ad_editura;__fastcall TAd_editura::TAd_editura(TComponent* Owner):TForm(Owner){}Unit5.cpp fiierul formularului Adaug limba#include "Unit2.h"#include "Unit3.h"#include "Unit4.h"#include "Unit5.h"#pragma package(smart_init)#pragma resource "*.dfm"TAd_limba *Ad_limba;__fastcall TAd_limba::TAd_limba(TComponent* Owner):TForm(Owner){}Unit6.cpp fiierul formularului Caut#include#include#include#include#include"Unit1.h""Unit2.h""Unit3.h""Unit4.h""Unit5.h"92#include "Unit6.h"#include "Unit8.h"TCauta *Cauta;TDateTime d;int nr;void __fastcall TCauta::Button2Click(TObject *Sender){ AnsiString s[10];double q; s[0]=Main->sql+"AND (Carti.pret :a)"; s[2]=Main->sql+"AND (Carti.pret = :a)"; Main->Query1->Close(); Main->Query1->SQL->Text=s[nr]; q=Edit2->Text.ToDouble(); Main->Query1->ParamByName("a")->AsFloat=q; Main->Query1->Open();}void __fastcall TCauta::RadioGroup1Click(TObject *Sender){ nr=RadioGroup1->ItemIndex;}void __fastcall TCauta::FormShow(TObject *Sender){ AnsiString s; ComboBox1->Clear(); Main->Limba->First(); while(!Main->Limba->Eof){ s= AnsiString(Main->Limba->FieldValues["Limba"]); ComboBox1->Items->Add(s); Main->Limba->Next(); }}void __fastcall TCauta::Button1Click(TObject *Sender){ Main->Query1->Close(); Main->Query1->SQL->Text=Main->sql+"AND (Carti.titlu like :a)"; Main->Query1->ParamByName("a")->AsString="%"+Edit1->Text+"%"; Main->Query1->Open();}void __fastcall TCauta::Edit1Change(TObject *Sender){ Button1Click(Sender);}void __fastcall TCauta::ComboBox1Change(TObject *Sender){ Main->Query1->Close(); Main->Query1->SQL->Text=Main->sql+"AND (Limba.limba like :a)"; Main->Query1->ParamByName("a")->AsString="%"+ ComboBox1->Items->Strings[ComboBox1->ItemIndex]+"%"; Main->Query1->Open();}void __fastcall TCauta::BitBtn1Click(TObject *Sender){ AnsiString s[10]; s[0]=Main->sql+"AND (Carti.data =:a)"; s[2]=Main->sql+"AND (Carti.pret = :a)"; Main->Query1->Close(); Main->Query1->SQL->Text=s[nr]; Main->Query1->ParamByName("a")->AsDateTime=d; Main->Query1->Open();}void __fastcall TCauta::DateTimePicker1Change(TObject *Sender){ 93d=DateTimePicker1->DateTime;}void __fastcall TCauta::RadioGroup2Click(TObject *Sender){nr=RadioGroup2->ItemIndex;}void __fastcall TCauta::Tipar1Click(TObject *Sender){ Raport->Lista_carti->Preview();}Unit7.cpp fiierul formularului Administrare#include "Unit7.h"#include "Unit1.h"TAdmin *Admin;__fastcall TAdmin::TAdmin(TComponent* Owner):TForm(Owner){}void __fastcall TAdmin::RadioGroup1Click(TObject *Sender){ int n=RadioGroup1->ItemIndex; switch(n){ case 0: DBGrid1->DataSource=Main->Carte; DBNavigator1->DataSource=Main->Carte;break; case 1: DBGrid1->DataSource=Main->Autor; DBNavigator1->DataSource=Main->Autor;break; case 2: DBGrid1->DataSource=Main->Editure; DBNavigator1->DataSource=Main->Editure;break; case 3: DBGrid1->DataSource=Main->Limbi; DBNavigator1->DataSource=Main->Limbi;break; case 4: Main->Query1->Close(); Main->Query1->SQL->Text=Main->sql; Main->Query1->Open(); DBGrid1->DataSource=Main->Interogare; DBNavigator1->DataSource=Main->Interogare; break; }}Unit8.cpp fiierul pentru formularul destinat rapoartelor#include #pragma hdrstop#include "Unit1.h"#include "Unit8.h"#pragma package(smart_init)#pragma resource "*.dfm"TRaport *Raport;__fastcall TRaport::TRaport(TComponent* Owner):TForm(Owner){}94Probleme pentru rezolvare independent1. Utilitarul Database Desktop1. Creai tabelul tari.db cu urmtoarele cmpuri :a) Setai proprietile cmpurilor astfel nct s nu fie posibil introducerea valorilor negative n cmpurile cu valori numerice, iar valoarea implicit a lor s fie 0.b) Introducei 10 nregistrri i salvai tabelul.c) n baza tabelului tari.db creai tabelul orase.db cu urmtoarele proprietid) Introducei 10 nregistrri i salvai tabelul. 2. n baza tabelelor create s se creeze fiiere sql care vor conine urmtoareleinterogri: a) interog1 va afia din tabelul tari toate cmpurile; b) interog2 va afia din tabelul tari cmpurile Nume, Suprafata i Populatie, unde Suprafata>2000; c) interog3 va afia din tabelele tari i orase nregistrrile unde cmpul Suprafata este cuprins ntre 1000 i 10000. 3. n baza tabelului tari.db, s se creeze fiiere sql care vor conine urmtoareleinterogri: a) interog1 va afia numele rii i densitatea populaiei acesteia; b) interog2 va afia numele rii cu densitatea populaiei maxim; c) interog3 va afia numele rii cu densitatea populaiei minim;954. Creai tabelul angajati.db cu urmtoarele cmpuri :a) Setai proprietile cmpurilor astfel nct s nu fie posibil introducerea valorilor negative n cmpurile cu valori numerice, iar valoarea implicit a lor s fie 0.b) Introducei 20 de nregistrri i salvai tabelul. 5. Creai dou fiiere sql n baza tabelului angajati.db, care va permite afiareaurtoarele date: a) Cmpurile Nume, Prenume, Salariu, unde Salariu >1500. Datele vor fi afiate descresctor dup salariu; b) Lista angajailor cu o vechime n munc mai mare dect 5 ani, din data curent. Se vor afia cmpurile ID, Nume, Prenume, Data_angajarii, unde Salariu maimic dect1500. Datele vor fi afiate descresctor corespunztor stagiului de munc.2. Aplicaii cu Tabele 1. Elaborai o aplicaie care va permite afiarea datelor din tabelele tari.db,orae.db, angajati.db. Numele tabelelor vor fi scrise ntr-o lista cu opiuni(ComboBox). La selectarea uneia dintre opiuni se va afia pe suprafaa formeitabelul cu datele respective. La elaborarea aplicaiei se va utiliza cte o singurcomponet de tipul : TTable, TDataSource, TDBGrid. 2. Elaborai o aplicaie care va afia ntr-o component de tip TDBGridurmtoarele coloane din tabelul angajai.db a aliasului BCDEMOS: a) coloana Nume, fonul de culoare roie, culoarea textului de culoare alb, limea 80; b) coloana Prenume, fonul de culoare galben, culoarea textului de culoare verde, limea 50; c) coloana Telefon, fonul de culoare verde, culoarea textului de culoare alb, limea 60; d) coloana Data_angajarii, fonul de culoare roie, culoarea textului de culoare alb, limea 50; e) coloana salariu, fonul de culoare roie, culoarea textului de culoare alb, limea 50.96 3. Elaborai o aplicaie care n baza datelor din tabelul angajati.db, va permiteafiarea banilor cheltuii pentru salarizare timp de un an. Anul se va indica prinintermediul unei componente de tip TComboBox. Dup selectarea anului prinintermediul unei componente de tip TLabel va fi afiat suma de bani. 4. Elaborai o aplicaie care n baza datelor din tabelul angajati.db va permiteafiarea: a) celui mai tnr angajat (numele, prenumele, data naterii); b) angajatul cu salariu maxim (numele, prenumele, salariul); c) angajatul cu salariu minim (numele, prenumele, salariul); d) numrul de salariai al cror salariu depete salariul mediu. 5. Creai o copie a tabelului angajati.db. Redenumii tabelul n salariati.db. nbaza acestui tabel, elaborai o aplicaie care va permite majorarea salariului cu 15%,20%, 25% 50%. Procentul de majorare a salariului va fi indicat prin intermediulcomponentelor de tip TRadioGroup. Se va permite doar o singur majorare. 6. Creai o copie a tabelului angajati.db. Redenumii tabelul n salariati.db. nbaza acestui tabel, elaborai o aplicaie care va permite excluderea a maximum 15angajai. Se vor exclude angajaii cu cel mai mare salariu. Numrul de angajai careurmeaz a fi exclus va fi indicat prin intermediul unei componente de tipTComboBox. Se va permite excluderea repetat doar dac numrul total de angajaice au fost exclui sau urmeaz a fi exclui nu este mai mic ca 15. 7. Creai o copie a tabelului angajati.db. Redenumii tabelul n salariati.db. nbaza acestui tabel elaborai o aplicaie care va permite adugarea de noi angajai. Pesuprafaa formei se va afia: a) numrul total de angajai; b) numele i salariul angajatului cu cel mai mare salariu; c) numele i salariul angajatului cu cel mai mic salariu; d) salariul mediu caracteristic tuturor angajailor. 8 Creai tabelul salariati.db, n baza tabelului angajati.db utiliznd utilitarulDatabase Desktop. Elaborai o aplicaie prin intemediul creia din tabelul angajati.dbvor fi copiai n tabelul salariati.db 5 angajai cu cel mai mare salariu i 5 angajai cucel mai mic salariu. 9. Elaborai o aplicaie care n baza datelor din tabelul angajati.db va permitecutarea unui salariat dup nume. Numele va fi introdus de ctre utilizator prin97intermediul unei componente de tip TEdit. Dac n tabel va exista o persoan cunumele introdus se va afia un mesaj corespunztor. Utilizatorului i se va oferiposibilitatea de a modifica propriul nume. 10. S se creeze tabelul studenti.db cu cmpurile nume, prenume, grupa, anul,media, bursa. De completat toate cmpurile cu date cu excepia Cmpului bursa. Sevor introduce cel puin 20 de nregistrri. Prin intermediul cutiilor de editare de tipTEdit se vor introduce numrul maxim de studeni care pot avea burs de gradul 1(500 lei), 2 (400 lei) i 3 (300 lei) ct i media minim a notelor pentru fiecarecategorie. Prin intermediul butonului bursa se va completa Cmpul bursacorespunztor. 11. Utiliznd tabelul studenti.db creat n exemplul 10, Creai tabelul bursieri.dbi prin intermediul butonul completare, s se completeze tabelul bursieri cu datelecorespunztoare. 12. Utiliznd tabelul studenti.db creat n exemplul 10, Creai tabelulgrupa_mea.db n care se vor scrie studenii grupei din care suntei. Scrierea datelor seva efectua prin intermediul butonului completare. 13. Utiliznd tabelul studenti.db creat n exemplul 10, Creai tabelul stud_18.dbn care se vor scrie toi studeni cu vrsta de 18 ani. Scrierea datelor se va efectua prinintermediul butonului completare. 14. Elaborai o aplicaie prin intermediul creia se va crea un formular devizualizare a datelor tabelului tari.db. Se recomand ca formularul s fie deurmtoarea form: 15. Creai o aplicaie prin intermediul creia se va oferi posibilitateautilizatorului de a vizualiza toate datele din tabelul tari.db, ct i efectuarea operaiilorde adugare, eliminare i modificare a unei nregistrri (formularul nu va coninecomponente de tip TDBGrid). Vor fi create dou diagrame (una dreptunghiular, iar98alta circular). Diagramele vor fi create n baza datelor din cmpurile Suprafata iPopulatie. 16. Elaborai o aplicaie ar-Capital. ntr-o component de tip TComboBoxse vor scrie numele rilor din tabelul tari.db. Pe suprafaa formei va fi plasat ocomponent de tip TRadioGroup. n cadrul acestei componente vor fi scrise 4 numede orae (dintre care unul este capitala rii selectate). La efectuarea unui click pe unadintre opiuni va fi afiat un mesaj cu indicarea corectitudinii rspunsului. Verificarearspunsului se va efectua n baza datelor din tabelul tari.db. 17. Elaborai o aplicaie care va permite nregistrarea participanilor laconcursul de Informatic. La concurs particip concureni din Republica Moldova,Romnia i Ucraina. Din Republica Moldova vin participani din oraele: Chiinu,Bli, Orhei, Soroca, Cahul, Edine. Din Romnia vin participani din oraele: Iai,Vaslui, Suceava, Botoani, Galai. Din Ucraina vin participani din oraele: Odesa,Donek, Herson, Hotin. Datele despre participani se vor salva n tabelulconcurenti.db. Tabelul va conine urmtoarele cmpuri:Nume cimpnumeprenumedata nasteriitaraorasultipulStringStringDataStringStringDespre fiecare cmpUtilizatorul va scrie numele (DBEdit)Utilizatorul va scrie prenumele (DBEdit)Utilizatorul va alege data naterii (DateTimePicker)Utilizatorul va alege ara (DBListBox)Utilizatorul va alege ara (DBComboBox) Datele despre participani vor fi afiate prin intermediul componentei de tipulTDBGrid, iar prin intermediul unui meniu se va afia: a) numrul total de participani; b) numrul de participani pentru fiecare ar. 18. Elaborai un proiect prin intermediul cruia se va efectua o eviden astudenilor n baza urmtoarei relaii:99Pentru acest proiect vor fi elaborate urmtoarele formulare: a) Formular de adugare prin intermediul acestuia se vor introduce datele despre studeni n baza relaiei de mai sus. Cmpul bursa se va completa automat la introducerea valorilor n Cmpul media n modul urmtor: Dac media 7.5 n Cmpul bursa se va scrie valoarea 0; Dac 7.5 < media 8.5 n Cmpul bursa se va scrie valoarea 500; Dac 8.5 < media 9.5 n Cmpul bursa se va scrie valoarea 800; Dac 9.5 < media n Cmpul bursa se va scrie valoarea 1000. b) Formular de vizualizare (acest formular nu va conine componente de tipul TDBGrid) prin intermediul acestuia se vor afia: Datele despre toi studenii; Numrul de studeni bursieri i suma de bani ce necesit a fi achitat pentru bursa acestora; Cel mai bun student; Numrul de studeni cu media mai mic ca 5; Afiarea numrului de studeni pentru fiecare secie. c) Formular de excludere prin intermediul acestuia se va permite: Excluderea unui student; Excluderea unei secii (excluderea unei secii, presupune excluderea tuturor studenilor din secia respectiv). d) Formular pentru efectuarea de operaii prin intermediul acestuia se va permite: Modificarea datelor personale despre student (nume, prenume, secia,media. Modificarea mediei presupune i modificarea Cmpului bursa, n bazapunctului a); Modificarea datelor tabelului sectie; Transferarea unui student de la o secie la alta.n cadrul proiectului vor fi introduse minim 15 nregistrri. 19. Elaborai un proiect prin intermediul cruia se va efectua o eviden acrilor n baza urmtoarei relaii:Pentru acest proiect vor fi elaborate urmtoarele formulare:100 a) Formular de adugare prin intermediul acestuia se vor introduce datele despre cri n baza relaiei de mai sus. b) Formular de vizualizare (acest formular nu vor conine componente de tipul TDBGrid) prin intermediul acestuia se vor afia: Datele despre toate crile, despre toi autorii; Autorul cu cele mai multe cri; Cartea cea mai scump; Numrul de cri cu o vechime mai mare de 10 ani. c) Formular de excludere prin intermediul acestuia se va permite: Excluderea unei cri; Excluderea unui autor (excluderea unui autor presupune excluderea tuturor crilor unde figureaz autorul dat); Excluderea unei limbi (excluderea unei limbi presupune excluderea tuturor crilor unde figureaz limba dat). d) Formular pentru efectuarea de operaii prin intermediul acestuia se va permite: Modificarea datelor despre o carte; Modificarea datelor unui autor; Modificarea limbii de ediie a unei cri.n cadrul proiectului vor fi introduse minim 15 nregistrri. 20. Elaborai un proiect prin intermediul cruia se va efectua o eviden aautomobilelor n baza urmtoarei relaii:Pentru acest proiect vor fi elaborate urmtoarele formulare: a) Formular de adugare prin intermediul acestuia se vor introduce datele despre automobile n baza relaiei de mai sus. b) Formular de vizualizare (aceste formulare nu vor conine componente de tipul TDBGrid) prin intermediul acestuia se vor afia: Datele despre toate automobilele; Automobilul cel mai scump; Numrul de automobile cu o vechime nu mai mare de 5 ani.101 c) Formular de excludere prin intermediul acestuia se va permite: Excluderea unui automobil; Excluderea unei mrci (excluderea unei mrci presupune excludereatuturor automobilelor de marca respectiv); Excluderea unui tip (excluderea unui tip presupune excluderea tuturorautomobilelor de tipul respectiv). d) Formular pentru efectuarea de operaii prin intermediul acestuia se va permite: Modificarea datelor despre un automobil; Modificarea mrcii unui automobil; Modificarea tipului.n cadrul proiectului vor fi introduse minim 15 nregistrri.3. Aplicaii cu Interogri 1. Elaborai o aplicaie cu interogri n baza tabelului tari.db. Se vor afia:a) Toate cmpurile;b) Cmpurile Nume, Suprafata i Populatie, unde Suprafata>2000;c) nregistrrile unde densitatea populaiei este mai mare dect 100. 2. Elaborai o aplicaie cu interogri n baza tabelului angajati.db, care vapermite afiarea urmtoarelor date: a) Cmpurile Nume, Prenume, Salariu, unde Salariu >2500. Datele s fie aranjate dup Cmpul Nume; b) Cmpurile Nume, Prenume, Salariu, unde Salariu