Capitolul prezint un model de aplicaie care simuleaz activitatea informaional la nivelul unei organizaii economico-sociale de dimensiuni medii. Din perspectiv sistemic, orice organizaie poate fi privit ca o component a unui sistem superior cum ar fi sistemul de subramur, sistemul de ramur etc. La rndul su, privit cel puin din perspectiva funciunilor manageriale ale ntreprinderii, orice organizaie constituie un sistem format din subsisteme corespunztoare departamentelor aprovizionare, desfacere, financiar, contabilitate, resurse umane, marketing etc. n direcia eficientizrii activitii fiecrui subsistem al organizaiei socio-economice, conducerea are la dispoziie cel mai performant instrument existent astzi pe pia instrumentul informatic. n acest context, rezolvarea unei probleme cu ajutorul calculatorului electronic este o activitate complex, care presupune o abordare sistematic, bazat pe o succesiune de operaii, pentru realizarea crora se folosesc tehnici i instrumente specifice. n practica proiectrii aplicaiilor informatice se utilizeaz o serie de concepte de baz: Proiect informatic denumire generic referitoare la realizarea sistemelor informatice, a aplicaiilor informatice sau a unor probleme independente. Sistem informatic ansamblu structurat de elemente intercorelate funcional, pentru automatizarea procesului de culegere i prelucrare a datelor, n vederea obinerii informaiilor pentru fundamentarea deciziilor. n general, sistemele informatice reprezint componente ale sistemelor informaionale din organizaiile socio-economice. Aplicaie informatic denumire generic pentru problemele de informatic de dimensiuni relativ reduse, care vizeaz un domeniu de activitate strict delimitat. Metodologie n sens informatic, definete succesiunea etapelor de parcurs pentru conceperea i realizarea proiectelor informatice. O metodologie poate cuprinde mai multe metode. Metod (tehnic) o mulime de pai, aplicai ntr-o succesiune logic asupra unei mulimi de date de intrare, care conduce la obinerea rezultatelor. Aplicaiile informatice acoper o gam larg de probleme 1 , ale cror extreme pot fi caracterizate astfel: a) existena unui volum relativ redus de date de intrare i ieire, dublat de calcule laborioase (aplicaii tehnico-inginereti, care conduc la aplicaii bazate pe aproximri succesive, exprimate matematic prin ecuaii algebrice i transcendente, sisteme de ecuaii liniare, ecuaii difereniale, integrale, adic ntr-o formulare global, aplicaii bazate pe metode de calcul numeric). b) existena unui volum mare de date de intrare i ieire, asociate uzual unor calcule cu complexitate redus (evidena materialelor, evidena personalului i
1 Capitolul 4 Etapele rezolvrii problemelor cu calculatorul, n lucrarea Algoritmi n programare, B. Ghilic-Micu (coord.), Ed. ASE, Bucureti 2002, pg. 65 Algoritmi n programare. Aplicaii calculul salariilor, evidena mijloacelor fixe, urmrirea realizrii produciei, a contractelor de aprovizionare/desfacere etc., adic, n general, aplicaii de gestiune economic). ntre aceste extreme exist o diversitate de aplicaii, dintre care unele presupun att volume mari de date ct i modele economico-matematice bazate pe calcule laborioase: gestiunea stocurilor, programarea produciei, probleme de transport, croire, alocare a resurselor etc. Realizarea proiectelor informatice este un proces complex, structurat n mai multe etape, cu obiective specifice. Modul de realizare a acestor etape, resursele implicate i durata lor total depind de varianta de soluie aleas, pe de o parte, i de nivelul de abordare (aplicaie, sistem informatic, problem), pe de alt parte. n funcie de complexitatea problemelor abordate n vederea rezolvrii cu calculatorul, din perspectiva programelor care vor fi elaborate, soluiile proprii pot conduce la una din situaiile: sisteme de programe realizate la nivelul unor aplicaii informatice, abordate independent sau ca parte a unor sisteme informatice; unul sau mai multe programe, n cazul unor probleme de dimensiuni reduse.
9.1. Etapele de realizare a proiectelor informatice
Realizarea proiectelor informatice presupune parcurgerea urmtoarelor etape: formularea cerinelor, analiza, concepia 2 i finalizarea 3 . Pentru realizarea unui proiect informatic se recomand constituirea unei echipe de analiz- concepie-programare. Numrul membrilor echipei va fi stabilit n funcie de dimensiunea i complexitatea proiectului, precum i de resursele disponibile. n acest sens, exist mai multe modele de organizare a activitii de analiz-concepie- programare: organizare democratic (deschis), echipa programatorului ef (CPT Chief Programmers Team), echipa chirurgical etc. Organizarea democratic este cel mai simplu model de conducere a proiectelor, n care: ntreaga echip are ca scop unic reuita proiectului i nu scopuri individuale, nlturarea erorilor i nu ascunderea lor; definirea soluiei de realizare a proiectului se face n colectiv; realizarea sarcinilor se distribuie ntre membrii echipei iar rolul conductor poate fi jucat de orice membru al echipei, prin rotaie. Echipa programatorului ef (CPT) presupune existena unui numr de programatori dintre care unul este conductor, iar procesul de realizare a proiectelor trebuie structurat precis, pe sarcini care se vor distribui membrilor echipei. Programatorul ef este conductorul tehnic al ntregii echipe, realiznd i legtura cu beneficiarii produsului. De asemenea, programatorul ef trebuie s fie un bun manager i un bun analist-programator. Avantajul principal al acestui model de organizare este c activitatea poate fi riguros planificat i urmrit, att sub aspectul sarcinilor de executat, ct i al resurselor i termenelor stabilite.
2 n literatura de specialitate, etapa de concepie se regsete sub numele de proiectare i conine dou subetape: proiectarea de ansamblu (logic) i proiectarea de detaliu (fizic). 3 Finalizarea, conform metodologiilor existente, cuprinde fazele de testare de ansamblu, implementare i evaluare a produsului informatic. Aplicaie informatic cu prelucrare de fiiere Modelul echipei chirurgicale presupune o specializare mai accentuat a membrilor echipei de analiz-concepie-programare. Astfel, va exista un manager care va fi ajutat de un administrator i un secretar, iar ceilali membri ai echipei vor fi repartizai pe diverse sarcini: formalizarea matematic, proiectarea algoritmilor, stabilirea instrumentelor de programare, elaborarea documentaiei, determinarea necesarului de hardware i software, codificarea i implementarea, testarea i depanarea programelor, crearea interfaelor om-calculator etc. Indiferent de modelul ales pentru organizarea activitii echipei de analiz- concepie-programare, acesta trebuie s asigure controlul proiectului n sensul atingerii obiectivelor privind calitatea produselor software, utilizarea eficient a resurselor alocate, ncadrarea n costurile alocate i respectarea termenelor stabilite. Principalele etape de realizare a proiectelor informatice sunt:
1. Formularea cerinelor pentru proiect. Realizarea unui proiect presupune, nc de la nceput, formularea clar, complet i corect a problemei, ca o cerin important pentru desfurarea cu bune rezultate a activitii de concepie i finalizare a proiectelor. Cerinele sunt formulate de beneficiarul proiectului. Dup formularea cerinelor se va stabili echipa de analiz-concepie-programare, pentru fiecare membru al echipei atribuindu-se responsabiliti n procesul de realizare a proiectului informatic, pornind de la un model de organizare.
2. Analiza. n aceast faz, plecnd de la formularea cerinelor informaionale exprimate concret n date de ieire, echipa de analiz-proiectare va identifica transformrile i prelucrrile necesare pentru obinerea acestora. n funcie de natura aplicaiei, se vor stabili formulele matematice i metodele numerice corespunztoare. Aparatul matematic folosit va fi argumentat teoretic n documentaia care trebuie s nsoeasc proiectul informatic n forma final. Pe baza exprimrii matematice a prelucrrilor i transformrilor identificate n proiect se vor stabili datele de intrare 4 necesare. De asemenea, se vor pune n eviden condiiile iniiale i restriciile referitoare la soluie. La finalul fazei, membrii echipei vor angaja discuii n urma crora se poate reveni pentru eventuale corectri i detalieri, nainte de trecerea la faza urmtoare.
3. Concepia proiectului (proiectarea aplicaiei). Pe baza datelor de intrare/ieire i prelucrrilor stabilite n cadrul analizei se proiecteaz formatele 5 de intrare, formatele de ieire, codurile i algoritmii, se definesc coleciile de date i
4 Determinarea datelor de intrare pornind de la transformrile necesare pentru obinerea datelor de ieire se realizeaz utiliznd tehnica analizei concordanei ieiri-intrri (intrrile sunt condiionate de ieiri). 5 n acest context, prin format se nelege modul n care vor fi reprezentate extern (pe ecran sau pe hrtie) cmpurile pentru citirea datelor de intrare i cele pentru afiarea rezultatelor. De asemenea, formatele de intrare/ieire sunt parte integrant din interfaa aplicaiei informatice cu utilizatorul, n proiectarea creia trebuie s fie luate n calcul i elemente de estetic i ergonomie vizual (sarcina responsabilului cu proiectarea interfeei). Algoritmi n programare. Aplicaii se stabilesc modulele proiectului care urmeaz s fie programate (structurarea proiectului). Formatele de intrare se vor constitui n ferestre individualizate de preluare a datelor i vor conine cmpuri dedicate. Formatele de ieire trebuie s fie sugestive, s evidenieze rezultatele (datele de ieire) i s ofere, eventual, posibiliti de imprimare. Formatele de intrare/ieire trebuie s fie descrise i n documentaia proiectului. Proiectarea codurilor reprezint o activitate cu implicaii importante asupra funcionrii produselor informatice. Codul reprezint o combinaie de simboluri elementare (sau semnale), mpreun cu o serie de reguli de combinare a lor, atribuit univoc unei entiti reale, pentru a o identifica fr nici un dubiu. ntre cod i entitatea real exist o relaie de asociere biunivoc. Simplificnd, codurile pot fi vzute ca porecle unice atribuite unor entiti din cadrul proiectelor informatice. Cel mai cunoscut exemplu este codul numeric personal, format din 13 caractere: unul pentru sex, ase pentru data naterii (an, lun, zi), cinci din registrul de eviden a populaiei i o cifr de control. Codificarea este activitatea de stabilire a codurilor. Datele care stau la baza obinerii rezultatelor (informaiilor de ieire) vor fi grupate n colecii, care vor concretiza sistemul de fiiere sau baza de date. Pot fi identificate urmtoarele tipuri de colecii de date: de baz, pentru tranzacii, intermediare, colecii de date statistice, colecii de date istorice. Se identific funciile de prelucrare, care vor fi grupate n entiti numite module. Pentru aceasta pot fi utilizate tehnicile de proiectare top-down i modularizat 6 . Etapa se finalizeaz cu elaborarea schemei de sistem, care ilustreaz modulele de prelucrare, coleciile de date folosite i legturile dintre module i colecii. Proiectarea algoritmilor este o etap complex, care presupune analiza riguroas a problemei i a formalizrii ei matematice. Tehnicile top-down i modularizat pot fi adoptate i n proiectarea algoritmilor. Etapa trebuie ncheiat, obligatoriu, cu testarea algoritmilor. Odat cu elaborarea algoritmilor se stabilesc resursele de calcul necesare: echipamentele periferice, limbajele de programare care vor fi utilizate, seturile de date care vor fi folosite la testare, necesarul de memorie intern etc. Necesarul de resurse va trebui s fie trecut n form explicit n documentaie, astfel nct s se poat realiza o exploatare ulterioar corect a produsului program. Codificarea algoritmilor poate fi realizat dup elaborarea algoritmilor sau n paralel, cnd se lucreaz n echip. Scrierea programelor trebuie s se fac respectnd algoritmii (eventual se pot face modificri i detalieri ale acestora) urmrindu-se, n acelai timp, optimizarea utilizrii resurselor calculatorului (timp unitate central, memorie intern i periferice) i realizarea interfeelor deja conturate n etapele anterioare.
6 Paragraful 3.8 Proiectarea algoritmilor, n lucrarea Algoritmi n programare, B. Ghilic- Micu (coord.), Ed. ASE, Bucureti 2002, pg. 60 Aplicaie informatic cu prelucrare de fiiere n documentaia proiectului vor aprea n form explicit detaliile legate de limbajul de programare ales, de versiunea acestuia, de sistemul de operare sub care poate rula produsul informatic.
4. Finalizarea proiectului. Odat realizat, proiectul este testat n ansamblu pe baza unor seturi de date de control prestabilite. Produsele program se consider corecte dac rezultatele obinute sunt cele scontate (pentru datele de test, programatorii trebuie s determine apriori rezultatele valorile i forma lor de prezentare). Programele se testeaz att independent, ct i n corelaie cu cele care se execut n amonte sau n aval. Implementarea aplicaiei informatice presupune asigurarea exploatrii sale n condiii reale la beneficiar, furnizorul livrnd produsul la cheie (programe n form executabil, care pot fi exploatate conform manualului de utilizare/ exploatare).
5. Evaluarea proiectelor. La baza elaborrii proiectelor informatice st conceptul de eficien economic, respectiv compararea efectelor obinute cu cheltuielile necesare pentru funcionarea sistemului/aplicaiei n cauz. n acest sens s-au formulat mai multe teorii i concepte care privesc evaluarea eficienei proiectelor informatice, i care se pot clasifica n trei grupe: 1. teorii i metode bazate pe utilitatea proiectelor eficiena lor nu poate fi pus n discuie ct timp acestea nu servesc cerinelor informaionale ale utilizatorului final; 2. teorii i concepte bazate pe valoarea informaiilor furnizate prin proiectele informatice realizate eficiena lor rezult din impactul pe care l au sistemele/ aplicaiile respective asupra activitii de conducere a organizaiilor economico- sociale; 3. teorii i concepte pentru care eficiena economic se poate evalua prin contribuia produselor informatice realizate la sporirea eficienei activitilor cu caracter tehnic, de producie, economic sau social, numrul indicatorilor utilizai fiind limitat: coeficientul de satisfacere a cerinelor informaionale, coeficientul timpului de rspuns, coeficientul timpului de recuperare, coeficientul economiei de personal, coeficientul eficienei economice, coeficientul tehnico-economic.
6. Exploatarea i mentenana. Dup punerea la punct, produsele intr n utilizare, fiind urmrite n vederea depistrii unor erori care nu au putut fi sesizate anterior. Aceast faz asigur meninerea n funciune i dezvoltarea produselor informatice, proces care poate s continue pe tot parcursul utilizrii lor i care poate conduce la dezvoltarea de noi versiuni, bazate pe informaii despre comportarea produsului la utilizatorul final.
7. Documentarea. Dei nu este o etap distinct n procesul de realizare a proiectelor informatice (documentarea se asigur n cadrul fiecrei etape parcurse), pentru a-i sublinia importana i pentru a crea reflexul ntocmirii ei, o punctm Algoritmi n programare. Aplicaii metodologic i separat. Documentarea corect a proiectului informatic face posibil exploatarea, dezvoltarea i adaptarea produselor, mai ales dac fac parte dintr-un sistem informatic, precum i comercializarea lor ctre diveri utilizatori. Documentaia proiectului (manuale de prezentare i utilizare/exploatare), cuprinde: descrierea problemei (rezultatele, datele de intrare, procesul de prelucrare, formalizarea matematic i modelul matematic, precizia algoritmilor etc.); descrierea resurselor necesare i a restriciilor de utilizare; schema de sistem a proiectului (organigrama modulelor); schema tehnologic a proiectului (modul de punere n funciune a modulelor); reprezentarea algoritmilor pentru fiecare modul (schem logic, pseudocod etc.); modul de apel al procedurilor/funciilor i structura datelor/parametrilor care se transfer ntre apelator i apelat; instruciuni de utilizare (procedura de punere n lucru, lista i forma ntrebrilor i rspunsurilor n conversaia cu utilizatorii etc.); exemple de utilizare. Documentaia proiectului poate fi tehnoredactat folosind instrumente informatice specifice: editoare de texte; editoare grafice; editoare de ecuaii etc. Trebuie menionat, n special pentru dezvoltrile ulterioare, utilitatea autodocumentrii proiectelor, realizat sub forma unor comentarii intercalate n programe.
Evoluia rapid n domeniul tehnologiei informaiei a condus la elaborarea de noi metodologii pentru realizarea proiectelor informatice. n cazul unui proiect real, de mari dimensiuni (sistem informatic/produs program) este bine ca echipa de analiz-concepie-programare s utilizeze o metodologie de proiectare (consacrat sau proprie). Exist o multitudine de metodologii de analiz-proiectare, ncepnd cu cele structurate i continund cu metodologiile orientate obiect. n abordarea structurat, cele mai reprezentative metodologii sunt: SSADM (Structured Systems Analysis and Design Method elaborat n Marea Britanie la nceputul anilor 80), MERISE (Frana), Yourdon&Constantine, Jackson, SA/SD (Structured Analysis/Structured Design), HIPO (Hierarchycal Input Proces Output) etc. Metodologiile de analiz i proiectare a sistemelor informatice au cunoscut o mbuntire remarcabil datorit dezvoltrii programrii orientate obiect. Analiza i proiectarea orientate obiect reprezint un nou mod de abordare a problemelor, bazat pe concepte din lumea real. Modelele orientate obiect constituie reprezentri abstracte ale sistemelor reale. Dintre cele mai cunoscute metodologii de analiz-proiectare orientate obiect fac parte: OOSE (Object Oriented Software Engineering Ivar Jacobson), OMT (Object Modelling Technique), OOSA (Object Oriented System Analysis - Shlaer&Mellor), OOA (Object Oriented Analysis - Coad&Yourdon) etc. Aplicaie informatic cu prelucrare de fiiere Pentru analiza i proiectarea aplicaiilor informatice exist o serie de instrumente software (medii integrate de dezvoltare software), care asist echipa de analiz-proiectare pe tot parcursul elaborrii proiectelor. Astfel de instrumente sunt produsele CASE (Computer Aided Software Engineering), care ofer posibiliti grafice i de editare, generarea de cod n diferite limbaje de programare, autodocumentarea proiectelor, conexiuni Internet etc.
Proiectele reale nu pot fi realizate fr un suport adecvat de baze de date sau sisteme de fiiere, deoarece presupun memorarea strii iniiale a sistemului i actualizarea lui n timp. Pentru exemplificare am ales o problem a crei rezolvare utilizeaz un sistem de fiiere binare i text, simulnd metodele de organizare relativ i indexat.
Formularea cerinelor pentru proiect S se realizeze un proiect de aplicaie informatic utiliznd limbajul Pascal pentru gestiunea activitii de nchiriere a autoturismelor pentru o societate comercial din domeniu. Aplicaia va evidenia aspectele legate de parcul auto, de gestiunea clienilor, contractelor de nchiriere i a facturilor emise. De asemenea, principalele funciuni ale aplicaiei se vor regsi n urmtoarele operaii, dintre care unele situaii se vor obine la cerere: nregistrri/achiziii auto; nchirieri auto; reealonarea tarifelor auto; radieri auto; emiterea automat a facturilor; plata facturilor emise i scadente; prezentarea ofertei auto pe tipuri de autoturisme; calculul venitului societii pe fiecare main.
Analiza Echipa de analiz-concepie-programare a identificat, pe baza cerinelor formulate n proiect, datele de ieire i principalele prelucrri necesare pentru obinerea acestor date. Datele de ieire: a) facturile emise ca urmare a scadenei contractelor de nchiriere auto; b) oferta integral a societii (prezentat pe tipuri de autoturisme); c) venitul nregistrat pe fiecare main din parcul auto. Prelucrri: a) compararea datei curente din sistem cu data scadenei contractelor neonorate, calculul valorii facturii emise lund n calcul numrul de kilometri parcuri de client de la momentul nchirierii auto; de asemenea, la calculul valorii facturate se va ine cont de fidelitatea clientului; b) ordonarea alfabetic a datelor despre autoturismele din parcul auto n funcie de tipul acestora (problem cu control dup caracteristic); c) calculul valorii nchirierilor auto pentru fiecare main din parcul auto. De asemenea, au fost stabilite condiiile iniiale i restriciile referitoare la soluie: - o main nu poate fi nchiriat dac apare ntr-un contract neonorat; Algoritmi n programare. Aplicaii - unicitatea numerelor de nmatriculare auto; - o main poate fi radiat dac nu face obiectul unui contract de nchiriere neonorat; - valoarea facturat este calculat cu o precizie de dou zecimale; - oferta auto a societii va fi afiat pe ecran i va fi memorat ntr-un fiier text. Pe baza prelucrrilor, pentru obinerea datelor de ieire, au fost definite urmtoarele date de intrare: informaiile despre o main (numr auto, marca, anul fabricaiei, tariful la 100 km, starea, numrul de km la bord). Alte date de intrare, care particip la obinerea datelor de ieire vor fi construite (introduse) interactiv i constau din informaiile despre clieni (cod, nume, adresa, numr de contracte ncheiate), contracte i facturi.
Concepia proiectului (proiectarea aplicaiei) Plecnd de la analiza proiectului, n aceast etap au fost definite formatele de intrare/ieire, s-au proiectat codurile, coleciile de date i modulele aplicaiei, precum i algoritmii care vor fi programai. De asemenea, au fost elaborate schema de sistem a proiectului i schema tehnologic de punere n funciune a modulelor. Formatele de intrare au fost proiectate pornindu-se de la datele de intrare identificate. Pentru crearea fiierelor cu date despre parcul auto, clieni, contracte i facturi, a fost realizat un program independent (creare), care realizeaz crearea fr articole a fiierelor. Pentru toate situaiile formulate n problem au fost proiectate formate de ieire care ofer posibilitatea obinerii rezultatelor n fiiere text i/sau pe ecran. Fiierele rezultate vor avea nume sugestive, n funcie de cerinele solicitate de utilizator, i pot fi vizualizate n orice editor de texte. Coninuturile fiierelor de ieire vor fi prezentate n documentaia proiectului. Corespunztor situaiilor prezentate, au fost proiectate opt module specializate, apelate din modulul principal al proiectului. Pe baza modulelor proiectate, au fost definitivate schema de sistem a proiectului i schema tehnologic de punere n lucru a modulelor. Activitatea de codificare vizeaz caracteristicile mainilor din parcul auto, informaiile despre clieni, atributele contractelor de nchiriere i informaiile dintr- o factur. Codificarea va ajuta i la definirea coleciilor de date. Coleciile de date externe alese sunt fiiere binare, cte unul pentru maini, clieni, contracte i facturi. Structura logic a articolelor din fiecare fiier este descris n manualul de prezentare: Algoritmii s-au realizat folosind metoda proiectrii structurate, iar pentru implementarea acestora s-a utilizat limbajul Pascal. n cadrul algoritmilor nu au fost proiectate secvene de validare 7 . Descrierea detaliat a algoritmilor poate fi studiat n documentaia proiectului. De asemenea, primitivele folosite n lucrul cu
7 Pentru validare a se vedea capitolul 11 Validarea datelor, din lucrarea Algoritmi n programare, B. Ghilic-Micu (coord.), Ed. ASE, Bucureti 2002, pg. 183 Aplicaie informatic cu prelucrare de fiiere fiiere relative (clienti.dat) i fiiere indexate (auto.dat) sunt prezentate detaliat n capitolele 7 i 8 ale acestei lucrri). Diferenele fa de unitile relativ.tpu i indexate.tpu constau n structura articolelor (tabelul 9.1).
Tabelul 9.1. Diferene fa de unitile din capitolele 7 i 8 UNIT Indexate; INTERFACE TYPE TipCheie= string[7]; TipArt=RECORD nrm:TipCheie;
marca:string[15]; an:word; tarif:real; stare:0..1; nrkm:longint end; TipFis=FILE OF TipArt; UNIT Relativ; INTERFACE TYPE tipa=RECORD is:BYTE; nume:string[40]; adr:string[30]; nrc:byte; END; tipf=FILE of tipa;
Finalizarea proiectului Pentru aceast faz, proiectul a fost testat n ansamblu, verificndu-se astfel funcionalitatea acestuia. Testarea s-a realizat utiliznd date de test. Dup testare, proiectul informatic este livrat beneficiarului, unde va fi implementat i pregtit pentru exploatare.
Exploatarea i mentenana Aplicaia va fi exploatat la beneficiar, urmrindu-se comportamentul acesteia pe parcursul utilizrii.
Documentarea Documentaia proiectului cuprinde manualele de prezentare i de utilizare/exploatare. Pentru tehnoredactarea acestora a fost folosit editorul de texte Microsoft Word 2002, editorul de ecuaii Microsoft Equation 3.0 i editorul grafic Microsoft Word Picture 2002.
Algoritmi n programare. Aplicaii 9.2. Dosarul de prezentare a aplicaiei
Aplicaia realizat permite gestiunea activitii de nchiriere a autoturismelor pentru o societate comercial din domeniu. Aplicaia evideniaz aspectele legate de parcul auto, de gestiunea clienilor, contractelor de nchiriere i a facturilor emise. Principalele funciuni ale aplicaiei sunt urmtoarele: A. nregistrri/achiziii auto; B. nchirieri auto; C. actualizarea tarifelor auto; D. radieri auto; E. emiterea automat a facturilor; F. plata facturilor emise i scadente; G. prezentarea ofertei auto pe tipuri de autoturisme; H. calculul venitului societii pe fiecare main. Aplicaia simulare este scris n Limbajul Pascal, versiunea 6.0, fiind structurat n opt module, cte unul pentru fiecare funciune. Punerea n execuie a modulelor aplicaiei se realizeaz conform schemei de sistem (figura 9.1).
Meniu principal G funcia 1 A funcia 2 B funcia 3 C funcia 4 D funcia 5 E funcia 6 F funcia 7 G funcia 8 H
Fig. 9.1. Schema de sistem a proiectului Aplicaie informatic cu prelucrare de fiiere Prelucrrile aplicaiei folosesc patru coleciile de date externe (fiiere binare), cte unul pentru maini, clieni, contracte i facturi. Structura logic a articolelor din fiecare fiier este: Fiierul auto.dat, organizat indexat dup cheia primar nrauto:
Semnificaie numrul de nmatriculare auto (cheia primar) tipul auto, marca anul de fabricaie tariful la 100 km starea mainii: nchiriat sau nu numr de km la bord Codificare nrm marca an tarif stare nrkm Tip string[7] string[15] word real 0..1 longint
Fiierul clienti.dat, organizat relativ dup cheia relativ codclient:
Semnificaie codul clientului (cheia relativ) indicatorul de stare a articolului numele i prenumele clientului adresa clientului numr de contracte ncheiate Codificare codc is nume adr nrc Tip word byte string[40] string[30] byte
Fiierul contr.dat, organizat secvenial:
Semnificaie numrul contractului codul clientului numrul auto al mainii nchiriate data ncheierii contractului numr de km parcuri data stingerii contractului starea contractului: n derulare sau stins Codificare nrc codc nrm dataem nrkm scadenta on Tip word word string[7] data* longint data* 0..1 * a fost definit tipul data, de forma: an (word), luna (1..12), zi (1..31).
Fiierul facturi.dat, organizat secvenial:
Semnificaie numrul facturii numrul contractului numele clientului numrul auto al mainii nchiriate numr de km parcuri valoarea facturii starea facturii: achitat sau nu Codificare nrf nrc nume nrm nrkm val achitat Tip word word string[40] string[7] longint real 0..1
Pentru memorarea datelor din fiierele aplicaiei au fost definite, ca structuri de date interne, urmtoarele tipuri de articole:
Simultan cu crearea fiierului indexat (de date) auto.dat se creeaz automat i fiierul secvenial auto.idx care va conine tabela de indexuri asociat. Structura articolului tabelei de indexuri este prezentat n capitolul 8. Pentru fiecare modul au fost proiectate seturi de date de test, modulele fiind testate att individual, ct i n inter-funcionalitatea lor. Structura sistemului de fiiere a fost proiectat astfel nct s simuleze funcionarea unei baze de date relaionale (figura 9.2). Pentru funciunea G a aplicaiei se creeaz un fiier temporar de manevr pe baza cruia se obine oferta de maini grupate dup cmpul marca. Structura logic a articolelor din fiierul de manevr este urmtoarea:
AUTO.DAT CLIENTI.DAT CONTR.DAT FACTURI.DAT MENIU PRINCIPAL nrm MANEVRA.TMP OFERTA.TXT codc nrc nume
Fig. 9.2. Relaiile dintre fiierele aplicaiei
Descrierea algoritmilor pe funciuni
1. Modulul functia1 (funciunea A) este o operaie de adugare n acces direct n fiierul indexat auto.dat. Se folosesc primitivele openold, start, writekeyrec i closefis din unitatea indexate. Dac valoarea cheii primare (nrm) introdus de la tastatur este valid se realizeaz preluarea cmpurilor din structura articolului, se seteaz starea pe valoarea 0 (nenchiriat) i se scrie articolul n fiier. Fiierul conductor este tastatura, iar n caz de cheie invalid se semnaleaz eroare. 2. Modulul functia2 (funciunea B) const n mai multe operaii: - introducerea de la tastatur a tipului de main pe care dorete s o nchirieze clientul (marca); - cutare n acces secvenial n fiierul indexat auto.dat utiliznd primitiva readseqrec din unitatea indexate; cutarea se face cu selecie dup dou criterii (marca i starea); - afiarea ofertei disponibile pentru marca cutat; - alegerea mainii care va face obiectul unui nou contract de nchiriere (prin introducerea de la tastatur a cheii primare corespunztoare mainii din oferta afiat la pasul anterior); - introducerea datelor despre client cu validarea cheii relative (codc) din fiierul clienti.dat (se folosete primitiva writed din unitatea relativ); - n cazul n care clientul exist se realizeaz operaia de modificare a numrului de contracte de nchiriere (sporul de fidelitate); Algoritmi n programare. Aplicaii - adugare n acces secvenial n fiierul contr.dat dup ce sunt completate celelalte cmpuri ale articolului i starea contractului ia valoarea 0 (contract n derulare). 3. Modulul functia3 (funciunea C) realizeaz reealonarea tarifelor prin creterea acestora cu 10% i const n operaia de modificare n acces secvenial a articolelor din fiierul auto.dat, utiliznd primitivele readseqrec i rewriterec din unitatea indexate. 4. Modulul functia4 (funciunea D) realizeaz tergerea n acces direct a articolelor din fiierul indexat auto.idx pentru cheile primare citite de la tastatur. Radierea unei maini se poate face doar dac nu exist contracte neonorate pentru maina respectiv. Aceast verificare se face comparnd data curent din sistem (citit cu procedura getdate din unitatea DOS a mediului Pascal) cu data de scaden a contractelor neonorate, folosindu-se o funcie special construit dme. 5. Modulul functia5 (funciunea E) realizeaz adugarea n acces secvenial la sfritul fiierului facturi.dat. O factur este emis automat dac n fiierul de contracte se gsete o nregistrare care are ca dat de scaden data curent din sistem. n momentul emiterii facturii are loc calculul valorii acesteia pe baza numrului de kilometri parcuri de la momentul ncheierii contractului de nchiriere. n cazul n care clientul este fidel (numrul de contracte ncheiate este de cel puin cinci), aplicaia permite acordarea unui discount de 10%. De asemenea, odat cu emiterea facturii se modific n acces direct i starea mainii din fiierul auto.dat. 6. Modulul functia6 (funciunea F) cuprinde dou operaii de modificare: modificarea strii facturii dup achitare i modificarea strii contractului aferent (stingerea acestuia). 7. Modulul functia7 (funciunea G) constituie un model de problem cu control dup caracteristic (marca). Astfel, pe baza fiierului indexat auto.dat se creeaz un fiier temporar (manevra.tmp) care este ters fizic la ieirea din aceast funciune. Fiierul temporar este ordonat dup caracteristica de grupare marca, obinndu-se apoi pe ecran i n lista oferta.txt oferta de maini. 8. Modulul functia6 (funciunea H) este o operaie de consultare n acces secvenial a fiierului facturi.dat, dup o validare prealabil a cheii primare nrm (introdus de la tastatur) n fiierul indexat auto.dat. n cazul cnd cheia exist se realizeaz totalul facturilor achitate n urma stingerii contractelor de nchiriere care au avut ca obiect maina cu numrul auto corespunztor cheii.
Instalarea produsului informatic
La instalarea produsului, beneficiarul va lansa n execuie programul creare.exe, care realizeaz crearea fiierelor aplicaiei fr articole. Utilizatorul va trebui s furnizeze de la tastatur numele asociate fiierelor fizice pe disc. Aplicaie informatic cu prelucrare de fiiere Urmeaz punerea n execuie a aplicaiei simulare, n urma creia va fi afiat meniul principal al aplicaiei.
Utilizatorul poate alege una din cele opt opiuni, iar pentru fiecare opiune se deschide un ecran special n care sunt preluate datele de intrare i sunt afiate rezultatele. Dac este aleas opiunea 2 i clientul care urmeaz s nchirieze maina este nou (nu exist n fiierul clienti.dat), ecranul aplicaiei va arta astfel:
Dac este aleas opiunea 5 i exist facturi scadente la momentul apelrii opiunii, se emite automat o factur de urmtoarea form:
Algoritmi n programare. Aplicaii
Pentru opiunea 7 rezultatul este afiat pe ecran, dar va fi salvat i ntr-un fiier text numit oferta.txt.
Aplicaie informatic cu prelucrare de fiiere DOSAR DE PREZENTARE
Anexa A: fiierul surs creare.pas
program creare; uses crt, relativ, indexate; type data=record an:word; luna:1..12; zi:1..31 end; contr=record nrc:word; codc:word; nrm:tipcheie; dataem:data; nrkm:longint; scadenta:data; on:0..1 end; facturi=record nrf:word; nrc:word; nume:string[40]; nrm:tipcheie; nrkm:longint; val:real; achitat:0..1 end; var f:tipfis; g:tipf; h1:file of contr; h2:file of facturi; numef,numeg,numeh1,numeh2:string; ivk:boolean; begin clrscr; write('Numele fisierului de masini:'); readln(numef); opennew(f,numef,ivk); write('Numele fisierului de clienti:'); readln(numeg); open(g,numeg,0,ivk); write('Numele fisierului de contracte:'); readln(numeh1); assign(h1,numeh1); rewrite(h1); write('Numele fisierului de facturi:'); readln(numeh2); assign(h2,numeh2); rewrite(h2); end.
Algoritmi n programare. Aplicaii DOSAR DE PREZENTARE
Anexa B: fiierul surs simulare.pas
program simulare; uses dos,crt,relativ,indexate; type data=record an:word; luna:word; zi:word end; contr=record nrc:word; codc:word; nrm:tipcheie; dataem:data; nrkm:longint; scadenta:data; on:0..1 end; facturi=record nrf:word; nrc:word; nume:string[40]; nrm:tipcheie; nrkm:longint; val:real; achitat:0..1 end; manevra=record nrauto:string[7]; marca:string[15]; tarif:real; nrkm:longint end; const numef:string='auto.dat'; numeg:string='clienti.dat'; numeh1:string='contr.dat'; numeh2:string='facturi.dat'; var f:tipfis; g:tipf; h1:file of contr; h2:file of facturi; m:file of manevra; l:text; a:tipart; b:tipa; c:contr; d:facturi; t,z:manevra; ivk,sf,vb:boolean; opt:0..8; i:byte; datas:data; codc,sapt:word; nrm_t:tipcheie; c1,marca_t:string[15]; r:char; n:longint; tot:real; procedure meniu; begin reset(input); clrscr; gotoxy(30,7); write('Aplicatie multifunctionala RENT A CAR'); gotoxy(26,9); write('1. Achizitie auto'); gotoxy(26,10); write('2. Inchiriere auto'); gotoxy(26,11); write('3. Cresterea pretului carburantului cu 10%'); gotoxy(26,12); write('4. Radiere auto'); gotoxy(26,13); write('5. Emitere automata factura'); Aplicaie informatic cu prelucrare de fiiere gotoxy(26,14); write('6. Plata factura'); gotoxy(26,15); write('7. Oferta auto pe tipuri de masini'); gotoxy(26,16); write('8. Valoarea inchirierilor pe masina'); gotoxy(20,18); write('Functia aleasa (sau 0):'); gotoxy(46,18); readln(opt); end; procedure functia1; begin clrscr; checkeof:=true; openold(f,numef,ivk); if ivk then writeln('Fisier inexistent!') else begin gotoxy(20,2); write('Nr. de inmatriculare (exp: B92BGM) sau ^Z:'); while not eof do begin gotoxy(20,42); readln(nrm_t); for i:=1 to length(nrm_t) do nrm_t[i]:=upcase(nrm_t[i]); start(f,nrm_t,ivk); if not ivk then begin gotoxy(26,18); writeln('Nr. deja existent!'); gotoxy(26,18); readln; clreol end else begin writeln; a.nrm:=nrm_t; write('Marca :'); readln(a.marca); for i:=1 to length(a.marca) do a.marca[i]:=upcase(a.marca[i]); write('Anul fabricatiei :'); readln(a.an); write('Tarif la 100 km :'); readln(a.tarif); write('Nr. km la bord :'); readln(a.nrkm); a.stare:=0; writekeyrec(f,a,nrm_t,ivk) end; writeln; write('Nr. de inmatriculare (exp: B92BGM) sau ^Z:') end end; closefile(f) end; procedure functia2; begin clrscr; checkeof:=true; assign(h1,numeh1); reset(h1); seek(h1,filesize(h1)); assign(g,numeg); reset(g); write('Marca sau ^Z:'); while not eof do begin openold(f,numef,ivk); readln(marca_t); for i:=1 to length(marca_t) do marca_t[i]:=upcase(marca_t[i]); Algoritmi n programare. Aplicaii sf:=false; vb:=false; i:=0; readseqrec(f,a,sf); while not sf do begin if (a.marca=marca_t) and (a.stare=0) then begin inc(i); gotoxy(10,2+i); write(a.nrm,' ',a.marca, ' ',a.nrkm:5,' km la bord'); vb:=true end; readseqrec(f,a,sf) end; readln; if not vb then begin gotoxy(26,18); writeln('Marca de masina inexistenta sau alocata!'); gotoxy(26,18); readln; clrscr end else begin writeln; write('Nr. de inmatriculare din oferta:'); readln(nrm_t); for i:=1 to length(nrm_t) do nrm_t[i]:=upcase(nrm_t[i]); readkeyrec(f,a,nrm_t,ivk); if ivk then writeln('Nr. de inmatriculare introdus gresit!') else begin a.stare:=1; rewriterec(f,a,ivk); closefile(f); c.nrm:=a.nrm; c.nrc:=filesize(h1)+1; c.nrkm:=a.nrkm; getdate(c.dataem.an,c.dataem.luna,c.dataem.zi,sapt); write('Codul clientului:'); readln(codc); readd(g,b,codc,ivk); if ivk then begin writeln('Client nou!'); write('Nume:'); readln(b.nume); write('Adresa:'); readln(b.adr); b.nrc:=1; writed(g,b,codc,ivk) end else begin b.nrc:=b.nrc+1; writed(g,b,codc,ivk) end; writeln('Data scadentei contractului:'); write('Anul:'); readln(c.scadenta.an); write('Luna:'); readln(c.scadenta.luna); write('Ziua:'); readln(c.scadenta.zi); Aplicaie informatic cu prelucrare de fiiere c.on:=0; write(h1,c); clrscr end end; write('Marca sau ^Z:') end; close(h1); close(g) end; procedure functia3; begin openold(f,numef,ivk); clrscr; writeln('Tarifele la inchirieri auto vor creste cu 10%'); sf:=false; readseqrec(f,a,sf); while not sf do begin a.tarif:=a.tarif*1.1; rewriterec(f,a,ivk); readseqrec(f,a,sf) end; gotoxy(20,20); write('Sfarsit de operatie. Apasati ENTER'); readln; closefile(f) end; function dme(var d1,d2:data):boolean; begin if d1.an>=d2.an then if (d1.an=d2.an) and (d1.luna>=d2.luna) then if (d1.an=d2.an) and (d1.luna=d2.luna) and (d1.zi>=d2.zi) then dme:=true else dme:=false end; procedure functia4; begin clrscr; checkeof:=true; openold(f,numef,ivk); write('Nr. de inmatriculare al masinii de radiat sau ^Z:'); while not eof do begin readln(nrm_t); for i:=1 to length(nrm_t) do nrm_t[i]:=upcase(nrm_t[i]); readkeyrec(f,a,nrm_t,ivk); if ivk then begin gotoxy(26,18); writeln('Masina neinmatriculata sau radiata!'); gotoxy(26,18); readln; clrscr end else begin if a.stare=1 then writeln('Pentru masina cu numarul ', nrm_t,' exista contracte neonorate!') else begin writeln; writeln('Nr. de inmatriculare: ',a.nrm); writeln('Marca: ',a.marca); writeln('Anul fabricatiei: ',a.an); writeln('Tarif la 100 km: ',a.tarif:6:0,' USD'); Algoritmi n programare. Aplicaii writeln; write('Confirmati radierea (d/n)?'); readln(r); if upcase(r)='D' then deletekeyrec(f,nrm_t,ivk) end end; write('Nr. inmatriculare al masinii de radiat sau ^Z:') end; closefile(f) end; procedure functia5; begin clrscr; assign(h2,numeh2); reset(h2); seek(h2,filesize(h2)); assign(h1,numeh1); reset(h1); assign(g,numeg); reset(g); openold(f,numef,ivk); getdate(datas.an,datas.luna,datas.zi,sapt); while not eof(h1) do begin vb:=false; read(h1,c); if (dme(datas,c.scadenta)) and (c.on=0) then begin vb:=true; d.nrf:=filesize(h2)+1; d.nrc:=c.nrc; readd(g,b,c.codc,ivk); d.nume:=b.nume; d.nrm:=c.nrm; writeln('Factura aferenta contractului nr. ',d.nrc, ' pentru masina ',d.nrm); repeat write('Nr. de km: '); readln(n); if n<c.nrkm then writeln('Km mai putini decat la ' 'inchiriere!') until n>=c.nrkm; d.nrkm:=n; readkeyrec(f,a,c.nrm,ivk); d.val:=(d.nrkm-c.nrkm)*a.tarif/100; if b.nrc>=5 then d.val:=0.9*d.val; d.achitat:=0; write(h2,d); readkeyrec(f,a,d.nrm,ivk); a.stare:=0; rewriterec(f,a,ivk); clrscr; gotoxy(20,2); write('FACTURA FISCALA nr. ',d.nrf:5); gotoxy(15,4); write('S.C. RENT A CAR S.R.L. BUCURESTI'); gotoxy(12,7); write('Contravaloarea contractului nr. ', d.nrc:6); gotoxy(12,8); write('Numele clientului: ',d.nume); gotoxy(12,9); write('Nr. masinii inchiriate: ',d.nrm); gotoxy(12,11); write('Valoare factura: ',d.val:10:2, ' USD'); Aplicaie informatic cu prelucrare de fiiere gotoxy(20,15); write('Emitent'); gotoxy(50,15); write('Beneficiar'); readln; clrscr end end; if not vb then writeln('Nu sunt contracte scadente astazi!'); readln; closefile(f); close(g); close(h1); close(h2) end; procedure functia6; begin clrscr; assign(h2,numeh2); reset(h2); assign(h1,numeh1); reset(h1); openold(f,numef,ivk); while not eof(h2) do begin read(h2,d); vb:=false; if d.achitat=0 then begin vb:=true; writeln('Nr. factura: ',d.nrf); writeln('Nr. contract: ',d.nrc); writeln('Nr. auto: ',d.nrm); writeln('Valoare: ',d.val:10:2,' USD'); writeln; write('Platiti factura (d/n)?'); readln(r); if upcase(r)='D' then begin d.achitat:=1; seek(h2,filepos(h2)-1); write(h2,d); reset(h1); while not eof(h1) do begin read(h1,c); if c.nrc=d.nrc then begin c.on:=1; seek(h1,filepos(h1)-1); write(h1,c) end end end end end; if not vb then writeln('Nu exista facturi de platit!'); readln; closefile(f); close(h1); close(h2) end;
Algoritmi n programare. Aplicaii procedure functia7; begin openold(f,numef,ivk); assign(m,'manevra.tmp'); rewrite(m); readseqrec(f,a,sf); while not sf do begin if a.stare=0 then begin t.nrauto:=a.nrm; t.marca:=a.marca; t.tarif:=a.tarif; t.nrkm:=a.nrkm; write(m,t) end; readseqrec(f,a,sf) end; closefile(f); {sortarea dupa marca} repeat vb:=false; for i:=1 to filesize(m)-1 do begin seek(m,i-1); read(m,t,z); if t.marca>z.marca then begin seek(m,i-1); write(m,z,t); vb:=true end end until not vb; {obtinerea ofertei} assign(l,'oferta.txt'); rewrite(l); clrscr; seek(m,0); writeln(l,' Oferta de masini'); writeln(l,'_____________________________________'); writeln(l,'| Nr. auto | Tarif | Nr. km la bord |'); writeln(l,'_____________________________________'); writeln(' Oferta de masini'); writeln('_____________________________________'); writeln('| Nr. auto | Tarif | Nr. km la bord |'); writeln('_____________________________________'); sf:=false; fillchar(t.nrauto,8,' '); read(m,t); while not sf do begin c1:=t.marca; writeln(l,c1); writeln(c1); while (not sf) and (t.marca=c1) do Aplicaie informatic cu prelucrare de fiiere begin t.nrauto[0]:=#7; writeln(l,'|',t.nrauto,' |',t.tarif:7:2,'|', t.nrkm:16,'|'); writeln('|',t.nrauto,' |',t.tarif:7:2,'|', t.nrkm:16,'|'); fillchar(t.nrauto,8,' '); {$I-} read(m,t) {$I+}; if ioresult<>0 then sf:=true end; writeln(l,'_____________________________________'); writeln('_____________________________________') end; close(m); erase(m); close(l); readln end; procedure functia8; begin clrscr; checkeof:=true; openold(f,numef,ivk); assign(h2,numeh2); reset(h2); write('Nr. de inmatriculare al masinii sau ^Z:'); while not eof do begin readln(nrm_t); for i:=1 to length(nrm_t) do nrm_t[i]:=upcase(nrm_t[i]); start(f,nrm_t,ivk); if ivk then begin gotoxy(26,18); writeln('Masina neinmatriculata sau radiata!'); gotoxy(26,18); readln; clrscr end else begin seek(h2,0); tot:=0; while not eof(h2) do begin read(h2,d); if (d.nrm=nrm_t) and (d.achitat=1) then tot:=tot+d.val end; writeln('Masina ',nrm_t:7,' a inregistrat o valoare a'+ ' inchirierilor de ',tot:7:2,' USD'); readln end; write('Nr. de inmatriculare sau ^Z:') end; closefile(f); close(h2) end; Algoritmi n programare. Aplicaii {programul principal} begin meniu; while opt<>0 do begin case opt of 1: functia1; 2: functia2; 3: functia3; 4: functia4; 5: functia5; 6: functia6; 7: functia7; 8: functia8 end; meniu end end.
9.3. Dosarul de utilizare/exploatare a aplicaiei
Pentru exploatarea corect a produsului informatic proiectat, beneficiarul trebuie s asigure un minim de resurse hardware i software, care const n: - calculator IBM-PC sau compatibil; - microprocesor 80386, frecvena de 166 MHz; - memorie RAM 16 Mb; - monitor VGA; - sistem de operare MS-DOS, versiunea 6.2; - limbajul de programare Pascal, versiunea 6.0; - un editor de texte.
Etape n utilizarea produsului simulare:
1. Lansarea n execuie a aplicaiei creare.exe, pentru crearea, fr articole, a fiierelor referitoare la parcul auto (auto.dat i auto.idx), la clieni (clienti.dat), la contracte (contr.dat) i la facturi (facturi.dat). 2. Lansarea n execuie a aplicaiei simulare.exe, care execut urmtorii pai: 2.1. afieaz meniul principal; 2.2. execut funciunile din meniul principal dac pasul 1 s-a realizat corect (n soluia adoptat, numele fiierelor sunt stabilite n aplicaia simulare n seciunea const). 3. Utilizatorul va solicita execuia uneia din opiunile meniului. 4. Dup execuia fiecrei opiuni, simulare revine n meniul principal. 5. Terminarea execuiei se poate realiza prin alegerea opiunii 0 din meniu.