Documente Academic
Documente Profesional
Documente Cultură
Lucrare de an
La disciplina Structuri de date si algoritmi. TEMA: Crearea unei baze de date a unei farmacii
A efectuat: A verificat:
Chiinu 2013
Cuprins
Lucrul cu listele dublu inlantuite ____________________________8 Listingul programului Schema bloc ___________________________________16
I* I,' -D.C/ /
1* &pari)ia 0i e+olu)ia limba1ului C
Apari"ia limba#ului C a fost precedat i anun"at de di$erse incercri de a construi un limba# care s corespund cerin"elor aprute o dat cu dez$oltarea calculatoarelor% portabilitate& uurin" in folosire& libertate de e'primare& te't surs compact etc( Motorul cercetrilor a fost dez$oltarea unui nou sistem de operare% )N*+( ,$olu"ia limba#ului i a sistemului de operare a a$ut loc in paralel& fiecare impulsionand dez$oltarea celuilalt( Se consider c C a fost creat special pentru sistemele de operare din familia )N*+( De fapt C este un rezultat al e'perien"ei acumulate in aceste cercetri& c-iar dac este considerat un limba# de autor( *n 1./. a fost lansat limba#ul BCPL 0Basic Combined Programming Language)& conceput la )ni$ersitatea Cambridge( ,ra un limba# dependent de structura mainii pe care era folosit i nu a$ea conceptul de tip de dat 1 datele se reprezentau binar& pe cu$inte de memorie. *n multe cercuri anul 1./. este considerat anul apari"iei limba#ului C( *n 1.23 a aprut o form mai a$ansat& limba#ul B& utilizat sub sistemul de operare al calculatoarelor D,C PDP( Numele limba#ului este o prescurtare a acronimului 4CP5( *n 1.26 Dennis 7itc-ie i 4rian 8ernig-an i9au finalizat cercetrile publicand The C Programming Language 05imba#ul de programare C)& care este limba#ul cunoscut astzi( 5imba#ul a fost denumit astfel pentru c C este litera care urmeaz dup B( 5ucrarea lui 8ernig-an i 7itc-ie este considerat momentul oficial al apari"iei limba#ului C( Dup apari"ia limba#ului C au e'istat incercri de imbunt"ire& dar fr ca $reuna s produc un impact asemntor( Dennis 7itc-ie a propus di$erse $ariante& mulate pe noile $ersiuni de )N*+ 0intre acestea K&R C& creat pentru sistemul )N*+ de pe mainile D,C PDP)( *n perioada urmtoare& pornind de la specifica"iile limba#ului& s9au creat numeroase compilatoare C& fiecare aducand propriile diferen"e fa" de limba#ul ini"ial& a#ungandu9se la $ariante foarte mult diferite unele fa" de altele( *n acest fel s9a pus in pericol ideea ini"ial de portabilitate( Ca urmare& in 1.66 Comitetul pentru limba#ul C al *nstitutului Na"ional de Standardizare al S)A 0ANS*) a impus un standard cunoscut drept AN ! C( Acesta este implementat in toate $ersiunile de compilatoare ulterioare( : dat cu acest standard legtura implicit cu sistemul )N*+ a disprut& limba#ul fiind disponibil pe orice platform( *n paralel cu acti$itatea comitetului ANS* C& au e'istat i alte dez$oltri( 4#arne Stroustrup de la A ; a propus e'tensia C"" 0C imbunt"it& e'tinzand semnifica"ia operatorului de incrementare << din C)( *mpactul e'tensiei este aproape la fel de mare ca al limba#ului ini"ial& astfel incat ea a de$enit cea mai
=
popular form a limba#ului& fiind prezent in toate implementrile curente( Pornind de la C"" s9au incercat i alte e'tensii( >oel ,( 7ic-ardson&Mic-ael >( Carre? i Daniel ( Sc-u- de la )ni$ersitatea @isconsin Madison au propus limba#ul #( Acesta este proiectat pentru crearea de programe de sistem& in general& i de sisteme de gestiune a bazelor de date& in particular( A$entura dez$oltrii limba#elor de programare continu(
II*Descrierea procedurilor
Descrierea Aunc"iilor C $unc%iile de !&# se pot clasifica dup di$erse criterii( Astfel& e'ist func"ii
de citireBscriere la ni$el de caractere 0octet)& la ni$el ir de caractere 0linie de te't)& func"ii de *B, cu con$ersie de format& func"ii la ni$el de Cnregistrri 0fr de con$ersie de format)& func"ii pentru acces direct etc( 5imba#ul C i9a propus s asigure un set de func"ii care s fie uor de implementet pe orice sistem& respectCnd aceeai sinta'( *ndependen"a total de sistemul de operare nu se realizeaz toteauna 0la MS9Dos e'ist& de e'emplu& anumite detalii de implimentare care nu pot fi ocolite& cum ar fi modul te'tBmodul binar)& dar o bun parte din func"ii este uni$ersal 0e'ist Cn orice implimentare)( ,'ist dou clase mari de func"ii de *B, numite func"ii standarte i func"ii de sistem( Prototipul func"iilor de bibliotec sunt cuprinse Cn 'i(ier header cu nume predefinite(
Declararea structurilor
*nformatia prelucrata de programe este in general comple'a& iar tipurile de date predefinite sunt adesea insuficiente pentru o reprezentare si prelucrare eficienta a acestei informatii( De aceea& apare ideea de grupare a datelor in multimi ordonate de elemente& care sa permita atat prelucrarea la ni$el de element cat si prelucrarea la ni$el global a multimii de elemente( )n e'emplu cunoscut de grupare a datelor este tabloul( Datele dintr9un tablou sunt insa toate de acelasi tip( )neori este util ca datele grupate sa fie de tipuri diferite( )n astfel de JconglomeratJ de tipuri de date formeaza o structura& realizand o JincapsulareJ a datelor ce pot fi initializate& transmise unei functii& prelucrate intr9 un anumit fel& etc(
tructura este o grupare de una sau mai multe $ariabile de tipuri diferite&
identificata printr9un singur nume( )n anumit tip de structura se defineste prin% struct tip6structura7declaratii de /ariabile83 Pentru a lucra mai comod cu di$erse tipuri de $ariabile introduse de programator se utilizeaza declaratia t9pede' prin intermediul careia se asociaza un nume tipului de date( Sinta'a este urmatoarea% t9pede' de'initie6tip nume6tip3 De asemenea& o structura poate fi atribuita unei alte structuri de acelasi tip( Din punct de $edere al claselor de alocare si al domeniului de $izibilitate& structurile pastreaza caracteristicile celorlalte $ariabile& adica%
structurile sunt globale daca se declara in afara oricarei functii structurile sunt automatice daca se declara in corpul unei functii structurile sunt statice daca declaratia incepe cu cu$antul static
zero& pentru structuri globale sau statice necunoscute& pentru structuri automatice (
prin transmiterea 'iecarui camp 0se contrazice ideea de a utiliza global o colectie de date) prin transmiterea intregii structuri 0la ni$el global)L daca structura este mare se ocupa multa memorie si se reduce timpul de calcul prin intermediul unui pointer spre structura 0cea mai eficienta pentru ca se transmite pointerul si nu structura intreaga)(
Aunctiile pot returna% un singur element al structurii o structura 0la ni$el global) un pointer catre o structura
Definirea functiilor
Definirea unei functii are in $edere%
precizarea antetului cu numele functiei& lista parametrilor formali si a tipului $aloarii returnate de functie& scrierea corpului functiei& in conformitate cu urmatoarea sinta'a% MtipN numeOfunctie0Mlista parametrilor formaliN) P corp functie Q
:tip; este tipul rezultatului intors de functie( Poate fi orice tip de date cu e'ceptia tipului tablou( Daca functia nu returneaza nimic se foloseste cu$antul c-eie /oid& iar daca nu este specificat& se considera implicit tipul int( :lista parametrilor 'ormali; aceasta declaratie se face printr9o succesiune de forma%
2
tip1 $ar1& tip2 $ar2& (( & tipn $arn iar pentru o functie care nu primeste parametri se recomanda utilizarea cu$antului /oid( <bser/atii= a) *n C& spre deosebire de PASCA5& nu se pot defini functii in interiorul altor functii( oate functiile sunt $izibile intre ele si au acelasi statut& de unde decurge ideea ca toate functiile pot comunica intre ele( ,le sunt declarate la fel si sunt $izibile una din alta ( b) nu este permis saltul dintr9o functie in alta folosind instructiunea goto3 c) $ariabilele definite intr9o functie sunt recunoscute doar in cadrul acelei functii& fiind nerecunoscute in programul apelant sau in alte functii( Aceste $ariabile se numesc /ariabile locale sau automatice si pentru ele compilatorul nu rezer$a memorie& practic nu e'ista la compilare( ,le au sens doar la e'ecutie& atunci cand la apelul functiei se rezer$a memorie pentru $ariabilele din cadrul functiei intr9o zona speciala numita sti$a( 5a re$enirea din functie sti$a se elibereaza& iar $ariabilele locale dispar& astfel se spune ca Jdurata lor de $iataJ este limitata la durata de e'ecutie a functiei din care fac parte(
Apelul functiilor
Apelul unei functii se realizeaza prin numele ei si precizarea $alorilor parametrilor formali( 5a apel& $alorile parametrilor efecti$i se incarca in zona de memorie alocata parametrilor formali& moti$ pentru care apelul este prin $aloare( Parametrii formali sunt $ariabile specifice functiei si cu durata de e'istenta data de durata de e'ecutie a functiei& din cauza ca ei sunt memorati pe sti$a( Sti$a cu $alorile ce se transmit functiilor se creeaza la apel si se distruge la re$enire& astfel ca modificarile asupra parametrilor formali nu afecteaza parametrii efecti$i( Apelul prin /aloare asigura deci imunitatea parametrilor e'ecti/i la modificari din gresala in cadrul functiei(
3 3
adr prec informatia utila adr
urm
Conform celor enuntate anterior memorarea si prelucrarea acestor structuri de date este similara cu cea a listelor liniare simplu inlantuite& ba c-iar unele prelucrari 0cum ar fi stergerea si inserarea inainte se simplifica a$and intr9un mod facil acces la componenta anterioara) Se poate defini un tip de date structurat numit nod& ale carui campuri le numim info pentru informatia utila, next pentru adresa urmatoare si back pentru adresa precedenta( De e'emplu& pentru o lista de numere intregi& putem defini%
struct nod {int info; nod * next,* back;};
Componentele listei se $or aloca dinamic( Prelucrarea listei se $a face tot prin intermediul a doi pointeri care acceseaza primul si respecti$ ultimul element al listei unde <peratiile care se pot face utilizand liste dublu inlantuite sunt% crearea listei 9adaugarea unui element la inceputul listei 9adaugarea unui element la sfarsitul listei 9adaugarea unui element in interiorul listei 9stergerea elementului de la inceputul listei 9stergerea elementului de la sfarsitul listei 9stergerea unui element din interiorul listei 9tra$ersarea listei& cu prelucrarea elementelor acesteia& intr9un HsensF sau celalalt *ata o solutie de implementare a functiilor de creare 0 si adaugare) si de parcurgere stanga9dreapta si dreapta9stanga(%
RincludeSiostream(-T RincludeSconio(-T struct Nod Pint infoL Nod Une't&UbacVL QL Nod Uprim& UultimL $oid creareOlista0) PNod UcL cWneG NodL .
coutSSJinfo JL cinTTc9TinfoL if0Xprim) PprimWcL prim9Tne'tW3L prim9TbacVW3L ultimWprimL Q else Pultim9Tne'tWcL c9TbacVWultimL ultimWcL ultim9Tne'tW3L Q Q $oid listareOstangaOdreapta0) PNod UcL cWprimL G-ile0c) PcoutSSc9TinfoSSJ JL cWc9Tne'tLQ Q $oid listareOdreaptaOstanga0) PNod UcL cWultimL G-ile0c) PcoutSSc9TinfoSSJ JL cWc9TbacVLQ Q $oid main0) Pint n&iL clrscr0)L coutSSJcate elemente $a a$ea listaYJL cinTTnL for0iW1LiSWnLi<<) creareOlista0)L coutSSendlSSJ,lementele listei de la stanga la dreapta sunt%JSSendlL listareOstangaOdreapta0)L coutSSendlSSJ,lementele listei de la dreapta la stanga sunt%JSSendlL listareOdreaptaOstanga0)L getc-0)L Q
Aplicatie% Sa se implementeze operatiile cu liste liniare dublu inlantuite( Se $a realiza cate o functie pentru fiecare operatie( Probleme propuse% 1( Sa se memoreze intr9o lista dubla n numere intregi( Care este primul element palindrom din dreaptaY 2( Sa se memoreze intr9o lista dubla n numere intregi( Sa se intersc-imbe primul element cu ultimul& al doilea cu penultimul etc( 0informatiile utile)( !( Sa se stearga prima si ultima $aloare egala cu ' dintr9o lista dubla =( Sa se insereze intre oricare doua elemente suma celorlalte
13
D(
: lista dubla retine caractere( Sa se determine daca sirul retinut de lista este palindrom( Se citeste un caracter V( Sa se insereze acest caracter inainte de fiecare $ocala( /( fis1(t't si fis2(t't retin doua numere foarte mari sa se determine suma celor doua numere( 2( Sa se determine cea mai lunga sec$enta crescatoare dintr9o lista dubla( Dupa afisare se $a sterge aceasta sec$enta 6( Sa se afiseze o lista ca perec-i de numere% primul cu ultimul& al doilea cu penultimul s(a(m(d( pana la #umatate .( Aie o lista dubla( Sa se afiseze lista stanga9dreapta si dreapta stanga 0icepand de la primul apoi de la ultimul)( Se cunoaste adresa unui element oarecare din lista( 13( Sa se mute zerourile la sfarsitul unei liste duble( Nu se $a folosi o lista intermediara
5istele dublu inlantuite sunt structuri de date dinamice omogene( ,le au aceleasi caracteristici de baza ca si listele simplu inlantuite( Diferenta fata de acestea consta in faptul ca& pentru fiecare nod& se retine si adresa elementului anterior& ceea ce permite tra$ersarea listei in ambele directii( 5ista dublu inlantuita poate fi reprezentata grafic astfel%
1* Structura listei Structura folosita este similara cu cea de la liste simple( Pentru a asigura un grad mai mare de generalitate listei a fost creat un alias pentru datele utile 0in cazul nostru un intreg)%
// Datele asociate unui // element dintr-o lista
typedef int Date; *n cazul in care se doreste memorarea unui alt tip de date& trebuie sc-imbata doar declaratia aliasului Date( Pentru memorarea listei se foloseste o structura autoreferita( Acesta structura $a a$ea forma%
// Structura unui element 11
// dintr-o lista dublu inlantuita struct Element { // datele efective memorate Date valoare; // legatura catre nodul urmator Element urmator, anterior; };
*n cazul in care elemenul este ultimul din lista& pointerul urmator $a a$ea $aloarea N)55( Pentru primul element& pointerul anterior $a a$ea $aloarea N)55( Declararea listei se face sub forma%
// declarare lista vida
Element cap ! "#$$; *n cazul in care se doreste crearea unei liste circulare& pointerul urmator al ultimului element $a referi primul element al listei& iar pointerul anterior al primului element $a referi ultimul element( 2* -peratii cu liste duble Principalele operatii cu liste sunt% 2*1 2arcurgere si a"isare lista 5ista este parcursa pornind de la pointerul spre primul element si a$ansand folosind pointerii din structura pana la sfarsitul listei 0pointer N)55)(
// %arcurgere si afisare lista dubla void &fisare'Element cap( { // cat timp mai avem elemente // in lista )*ile 'cap +! "#$$( { // afisea,a elementul curent cout -- cap-.valoare -- endl;
Pentru parcurgerea in$ersa a listei se $a porni cu un pointer catre ultimul element al listei& iar a$ansarea se $a face folosind sec$enta cap ! cap.anterior; / 2*2 Inserare element *nserarea unui element se poate face la inceputul sau la sfarsitul listei( a) *nserare la inceput Acesta este cazul cel mai simplu% trebuie doar alocat elementul& legat de primul element din lista si repozitionarea capului listei%
// 0nserare element la inceputul unei liste dublu inlantuite void 0nserare0nceput'Element 1cap, Date val( { // &locare nod si initiali,are valoare Element elem ! ne) Element; 12
elem-.valoare ! val; elem-.anterior ! "#$$; // legare nod in lista elem-.urmator ! cap; if 'cap +! "#$$( cap-.anterior ! elem; // mutarea capului listei cap ! elem; }
b) *nserare la sfarsitul listei *n acest caz trebuie intai parcursa lista si dupa aceea adaugat elementul si legat de restul listei( De asemenea& trebuie a$ut in $edere cazul in care lista este $ida(
// 0nserare element la sfarsitul unei liste dublu inlantuite void 0nserareSfarsit'Element 1cap, Date val( { // &locare si initiali,are nod Element elem ! ne) Element; elem-.valoare ! val; elem-.urmator ! "#$$; elem-.anterior ! "#$$; // daca avem lista vida if 'cap !! "#$$( // doar modificam capul listei cap ! elem; else { // parcurgem lista pana la ultimul nod Element nod ! cap; )*ile 'nod-.urmator +! "#$$( nod ! nod-.urmator; // adaugam elementul nou in lista nod-.urmator ! elem; elem-.anterior ! nod; } } c) inserare dupa un element dat void 0nserare0nterior'Element 1cap, Element p, Date val( { // &locare si initiali,are nod Element elem ! ne) Element; elem-.valoare ! val; elem-.urmator ! "#$$; elem-.anterior ! "#$$; // lista vida if 'cap !! "#$$( { cap ! elem; return; } // inserare la inceputul listei if 'cap !! p( { elem-.urmator ! cap; 1!
cap-.anterior ! elem; cap ! elem; return; } // inserare in interior elem-.urmator ! p-.urmator; elem-.anterior ! p; p-.urmator-.anterior ! elem; p-.urmator ! elem; }
2*# Cautare element Cautarea unui element dintr9o lista presupune parcurgerea listei pentru identificarea nodului in functie de un criteriu( Cele mai uzuale criterii sunt cele legate de pozitia in cadrul listei si de informatiile utile continute de nod( 7ezultatul operatiei este adresa primului element gasit sau N)55( a) Cautarea dupa pozitie Se a$anseaza pointerul cu numarul de pozitii specificat%
// 2autare element dupa po,itie Element 2autare%o,itie'Element cap, int po,itie( { int i ! 3; // po,itia curenta // parcurge lista pana la // po,itia ceruta sau pana la // sfarsitul listei )*ile 'cap +! "#$$ 11 i - po,itie( { cap ! cap-.urmator; i44; } // daca lista contine elementul if 'i !! po,itie( return cap; else return "#$$; } b) Cautarea dupa $aloare // 2autare element dupa valoare Element 2autare5aloare'Element cap, Date val( { // parcurge lista pana la gasirea elementului sau epui,area listei )*ile 'cap +! "#$$ 11 cap-.valoare +! val( cap ! cap-.urmator; return cap; }
2*4 Stergere element a) Stergerea unui element din interiorul listei 0diferit de capul listei)
// sterge un element din interiorul listei primind ca parametru adresa elementului
void StergereElement0nterior'Element
elem( 1=
b) Stergerea unui element de pe o anumita pozitie Daca elementul este primul din lista& atunci se modifica capul listei& altfel se cauta elementul si se sterge folosind functia definita anterior%
void Stergere%o,itie'Element 1cap, int po,itie( { // daca lista e vida nu facem nimic if 'cap !! "#$$( return; // daca este primul element, atunci il stergem si mutam capul if 'po,itie !! 3( { Element deSters ! cap; cap ! cap-.urmator; cap-.anterior ! "#$$; delete deSters; return; } // daca este in interor, atunci folosim functia de stergere Element elem ! 2autare%o,itie'cap, po,itie(; StergereElement0nterior'elem(; }
// daca este primul element, atunci il stergem si mutam capul if 'cap-.valoare !! val( { Element deSters ! cap; cap ! cap-.urmator; cap-.anterior ! "#$$; delete deSters; return; } // cautam elementul Element elem ! 2autare5aloare'cap, val(; // daca a fost gasit, atunci il stergem if 'elem-.urmator +! "#$$( StergereElement0nterior'elem(; 1D
Listingul programului
RincludeSstdio(-T RincludeSconio(-T RincludeSstdlib(-T RincludeSalloc(-T RincludeSstring(-T t?pedef struct nodPc-ar DenumM23NL int pretL c-ar codM23NL c-ar taraM23NL int cantL struct nod Une'tLQN:DL t?pedef struct nPc-ar DenumM23NL int pretL c-ar codM23NL c-ar taraM23NL int cantLQNL A*5, UfL N:D Up&Uc&U-L $oid intrOstruct0int)L $oid afisOstruct0)L $oid sortarea0)L $oid adaugare0)L $oid stergerea0)L $oid Denum0)L $oid cautare0)L $oid pret0)L $oid cant0)L $oid afisOfis0)L $oid sa$e0)L $oid cod0)L $oid cantitate0)L $oid tara0)L $oid main0) Pint c&gL te'tbacVground01)L clrscr0)L te'tcolor0/)L cprintf0JZn *ntroduceti numarul de Produse%J)L scanf0JZt [dJ&;g)L te'tcolor013)L clrscr0)L 1/
G-ile01) P clrscr0)L te'tcolor01!)L printf0JZn J)L cprintf0JZr Zn5ucrare de an la disciplina SDA al studentului gr(*S4M9321 Aurtuna Denisii J)L cprintf0JZr Zn J)L cprintf0JZr Zn J)L te'tcolor016)L cprintf0JZr Zn STSTSTSTSTSTSTSTSTST M,N*) STSTSTSTSTSTSTSTSTSTJ)L te'tcolor01=)L cprintf0JZr Zn 99999999999999999999999999999999999999999999999ZnJ)L te'tcolor01/)L cprintf0JZr Zn U U U U U J)L te'tcolor016)L cprintf0JZr Zn UUUUUUUUUUU AS A * UUUUUUUUUUUUUJ)L te'tcolor0=)L cprintf0JZr Zn UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUJ)L te'tcolor016)L cprintf0JZr Zn U19PBu a introduce datele UU J)L te'tcolor0=)L cprintf0JZr Zn UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUJ)L te'tcolor016)L cprintf0JZr Zn U29PBu a afisa datele despre Produsele introduseUJ)L te'tcolor0=)L cprintf0JZr Zn UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUJ)L te'tcolor016)L cprintf0JZr Zn U!9PBu a afisa datele din fisier UUJ)L te'tcolor0=)L cprintf0JZr Zn UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUJ)L te'tcolor016)L cprintf0JZr Zn U=9PBu a sorta Produsele UUJ)L te'tcolor0=)L cprintf0JZr Zn UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUJ)L te'tcolor016)L cprintf0JZr Zn UD9PBu a adauga Produse noi UUJ)L te'tcolor0=)L cprintf0JZr Zn UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUJ)L te'tcolor016)L cprintf0JZr Zn U/9PBu a sterge unele Produse UUJ)L te'tcolor0=)L cprintf0JZr Zn UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUJ)L te'tcolor016)L cprintf0JZr Zn U29PBu a efectua cautarea UUJ)L te'tcolor0=)L cprintf0JZr Zn UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUJ)L te'tcolor016)L cprintf0JZr Zn U69PBu a sal$a datele in fisier UUJ)L te'tcolor0=)L cprintf0JZr Zn UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUJ)L te'tcolor016)L cprintf0JZr Zn U.9PBu a iesi din program UUJ)L 12
te'tcolor0=)L cprintf0JZr Zn UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUZnJ)L scanf0JZn [dJ&;c)L sGitc-0c) P case 1%PintrOstruct0g)LbreaVLQ case 2%PafisOstruct0)LbreaVLQ case !%PafisOfis0)LbreaVLQ case =%Psortarea0)LbreaVLQ case D%Padaugare0)LbreaVLQ case /%Pstergerea0)LbreaVLQ case 2%Pcautare0)LbreaVLQ case 6%Psa$e0)LbreaVLQ case .%Pe'it03)LbreaVLQ Q Q Q $oid intrOstruct0int V) P static int i&pret&cant&nW3L clrscr0)L cWpW-WN)55L if0cWWN)55) P cW0N:DU)malloc0sizeof0N:D))L te'tcolor011)L cprintf0JZr Zn *ntroduceti denumirea Produsului 91 ZnJ)L scanf0JZr [sJ&;c9TDenum)L cprintf0JZr Zn *ntroduceti pretul Produsului0lei) 91 ZnJ)L scanf0JZr [dJ&;c9Tpret)L cprintf0JZr Zn *ntroduceti codul Produsului 91 ZnJ)L scanf0JZr [sJ&;c9Tcod)L cprintf0JZr Zn *ntroduceti tara producatoare a Produsului 91 Zn J)L scanf0JZr [sJ&;c9Ttara)L cprintf0JZr Zn *ntroduceti cantitatea Produsului 91 ZnJ)L scanf0JZr [dJ&;c9Tcant)L c9Tne'tWN)55L -WcL Q for0iW2LiSWVLi<<) P pW0N:DU)malloc0sizeof0N:D))L te'tcolor0/<i)L cprintf0JZr Zn *ntroduceti denumirea Produsului 9[d% Zn J&i)L scanf0JZr [sJ&;p9TDenum)L cprintf0JZr Zn *ntroduceti pretul Produsului 9[d ZnJ&i)L scanf0JZr [dJ&;p9Tpret)L cprintf0JZr Zn *ntroduceti codul Produsului 9[d Zn J&i)L scanf0JZr [sJ&;p9Tcod)L cprintf0JZr Zn *ntroduceti tara producatoare a Produsului 9[d Zn J&i)L scanf0JZr [sJ&;p9Ttara)L cprintf0JZr Zn *ntroduceti cantitatea Produsului 9[d ZnJ&i)L 16
scanf0JZr [dJ&;p9Tcant)L p9Tne'tWN)55L c9Tne'tWpL cWpL Q Q BB[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[ $oid sa$e0) P N au'L pW-L fWfopen0Jd%ZZproiect(t'tJ&JGbJ)L G-ile0p) P strcp?0au'(Denum&p9TDenum)L au'(pretWp9TpretL strcp?0au'(cod&p9Tcod)L strcp?0au'(tara&p9Ttara)L au'(cantWp9TcantL fGrite0;au'&sizeof0au')&1&f)L pWp9Tne'tL Q fclose0f)L printf0JDatele au fost sal$ate cu succes%)J)L afisOfis0)L getc-0)L Q BB[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[ $oid afisOstruct0) P int mW1L int ?W1L te'tcolor0/)L P cprintf0JZrZn cprintf0JZrZn cprintf0JZrZn cprintf0JZrZn cprintf0JZrZn pW-L \]]]]]]]]]]]]]]]]]]]]]]]]]^ J)L _ Afisarea datelor _ J)L \]]`]]]]]]]]]]]`]]]]]]a]]]]]]`]]]]]]]]]]]]]`]]]]a]]]]]]`]]]]]]]]]]]]]]^J)L _Nr_ Denum _ Pret0lei) _ Cod _ araOprod _ Cantitatea _J)L b]]I]]]]]]]]]]]I]]]]]]]]]]]]]I]]]]]]]]]]]]]I]]]]]]]]]]]I]]]]]]]]]]]]]]cJ)L
G-ile0pXWN)55) P cprintf0JZrZn _[d _[913s _[9.d _[913s _[913s _[913d _ J&?<<&p9TDenum&p9Tpret&p9 Tcod&p9Ttara&p9Tcant)L pWp9Tne'tL Q cprintf0JZrZn d]]a]]]]]]]]]]]a]]]]]]]]]]]]]a]]]]]]]]]]]]]a]]]]]]]]]]]a]]]]]]]]]]]]]]e J)L Q 1.
getc-0)L Q BB[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[ $oid afisOfis0) P int iW3L N au'L pWcWpWN)55L fWfopen0Jd%ZZproiect(t'tJ&JrbJ)L G-ile0fread0;au'&sizeof0au')&1&f)WW1) P if0iWW3) P cW0N:DU)malloc0sizeof0N:D))L strcp?0c9TDenum&au'(Denum)L c9TpretWau'(pretL strcp?0c9Tcod&au'(cod)L strcp?0c9Ttara&au'(tara)L c9TcantWau'(cantL i<<L c9Tne'tWN)55L -WcL Q else P pW0N:DU)malloc0sizeof0N:D))L strcp?0p9TDenum&au'(Denum)L p9TpretWau'(pretL strcp?0p9Tcod&au'(cod)L strcp?0p9Ttara&au'(tara)L p9TcantWau'(cantL p9Tne'tWN)55L c9Tne'tWpL cWpL Q Q fclose0f)L afisOstruct0)L getc-0)L Q BB[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[ $oid cod0) P c-ar DenumM23N&codM23N&taraM23NL int cant&pretL c-ar cM23NL int nW3L te'tcolor01!)L cprintf0JZr Zn *ntroduceti codul Produsului cautat% ZnJ)L cscanf0JZr [sJ&;c)L 23
pW-L G-ile0pXWN)55) P if0strcmp0p9Tcod&c)WW3) P te'tcolor0/)L cprintf0JZrZn \]]]]]]]]]]]]]]]]]]]]]]]]]^ J)L cprintf0JZrZn _ Afisarea datelor _ J)L cprintf0JZrZn \]]]]]]]]]]]`]]]]]]a]]]]]]`]]]]]]]]]]]]]`]]]]a]]]]]]`]]]]]]]]]]]]]]^J)L cprintf0JZrZn _ Denum _ Pret0lei) _ Ccod _ araOprod _ Cantitatea _J)L cprintf0JZrZn b]]]]]]]]]]]I]]]]]]]]]]]]]I]]]]]]]]]]]]]I]]]]]]]]]]]I]]]]]]]]]]]]]]cJ)L cprintf0JZrZn _[913s _ [913d _ [913s _ [913s_ [913d _ ZnJ&p9TDenum&p9Tpret&p9Tcod&p9 Ttara&p9Tcant)L nW1L Q pWp9Tne'tL Q if0nWW3) P te'tcolor0=)L cprintf0JZr Zn Podus cu astfel de cod nu a fost gasitJ)L getc-0)L Q Q BB[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[ $oid tara0) P c-ar DenumM23N&codM23N&taraM23NL int cant&pretL c-ar ssM23NL int nW3L te'tcolor01!)L cprintf0JZr Zn *ntroduceti tara producatoare a Produsului cautat% ZnJ)L cscanf0JZr [sJ&;ss)L pW-L G-ile0pXWN)55) P if0strcmp0p9Ttara&ss)WW3) P te'tcolor0/)L cprintf0JZrZn \]]]]]]]]]]]]]]]]]]]]]]]]]^ J)L cprintf0JZrZn _ Afisarea datelor _ J)L cprintf0JZrZn \]]]]]]]]]]]`]]]]]]a]]]]]]`]]]]]]]]]]]]]`]]]]a]]]]]]`]]]]]]]]]]]]]]^J)L cprintf0JZrZn _ Denum _ Pret0lei) _ Cod _ ara _Cantitatea _J)L cprintf0JZrZn b]]]]]]]]]]]I]]]]]]]]]]]]]I]]]]]]]]]]]]]I]]]]]]]]]]]I]]]]]]]]]]]]]]cJ)L cprintf0JZrZn _[913s _ [913d _ [913s _ [913s_ [913d _ ZnJ&p9TDenum&p9Tpret&p9Tcod&p9 Ttara&p9Tcant)L nW1L Q pWp9Tne'tL 21
Q if0nWW3) P te'tcolor0=)L cprintf0JZr Zn Produs din astfel de tara nu a fost gasitJ)L getc-0)L Q Q BB[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[ $oid Denum0) P c-ar DenumM23N&codM23N&taraM23NL int cant&pretL c-ar M23NL int nW3L te'tcolor01!)L cprintf0JZr Zn *ntroduceti denumirea produsului cautat% ZnJ)L cscanf0JZr [sJ&; )L pW-L G-ile0pXWN)55) P if0strcmp0p9TDenum& )WW3) P te'tcolor0/)L cprintf0JZrZn \]]]]]]]]]]]]]]]]]]]]]]]]]^ J)L cprintf0JZrZn _ Afisarea datelor _ J)L cprintf0JZrZn \]]]]]]]]]]]`]]]]]]a]]]]]]`]]]]]]]]]]]]]`]]]]a]]]]]]`]]]]]]]]]]]]]]^J)L cprintf0JZrZn _ Denum _ Pret0lei) _ Cod _ sef _ Cantitatea _J)L cprintf0JZrZn b]]]]]]]]]]]I]]]]]]]]]]]]]I]]]]]]]]]]]]]I]]]]]]]]]]]I]]]]]]]]]]]]]]cJ)L cprintf0JZrZn _[913s _ [913d _ [913s _ [913s_ [913d _ ZnJ&p9TDenum&p9Tpret&p9Tcod&p9 Ttara&p9Tcant)L nW1L Q pWp9Tne'tL Q if0nWW3) P te'tcolor0=)L cprintf0JZr Zn Astfel de Produs nu a fost gasitJ)L getc-0)L Q Q BB[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[ $oid pret0) P c-ar M23N&coM23N&sM23NL int pr&canL pW-L cWp9Tne'tL G-ile0cXWN)55) 22
P if0p9TpretTc9Tpret) P strcp?0 &p9TDenum)L prWp9TpretL strcp?0co&p9Tcod)L canWp9TcantL strcp?0s&p9Ttara)L strcp?0p9TDenum&c9TDenum)L p9TpretWc9TpretL strcp?0p9Tcod&c9Tcod)L p9TcantWc9TcantL strcp?0p9Ttara&c9Ttara)L strcp?0c9TDenum& )L c9TpretWprL strcp?0c9Tcod&co)L c9TcantWcanL strcp?0c9Ttara&s)L Q cWc9Tne'tL if0cWWN)55) P pWp9Tne'tL cWp9Tne'tL Q Q afisOstruct0)L getc-0)L Q BB[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[ $oid cant0) P c-ar M23N&coM23N&sM23NL int pr&canL pW-L cWp9Tne'tL G-ile0cXWN)55) P if0p9TcantTc9Tcant) P strcp?0 &p9TDenum)L prWp9TpretL strcp?0co&p9Tcod)L canWp9TcantL strcp?0s&p9Ttara)L strcp?0p9TDenum&c9TDenum)L p9TpretWc9TpretL strcp?0p9Tcod&c9Tcod)L p9TcantWc9TcantL strcp?0p9Ttara&c9Ttara)L strcp?0c9TDenum& )L 2!
c9TpretWprL strcp?0c9Tcod&co)L c9TcantWcanL strcp?0c9Ttara&s)L Q cWc9Tne'tL if0cWWN)55) P pWp9Tne'tL cWp9Tne'tL Q Q afisOstruct0)L getc-0)L fclose0f)L Q BB[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[ $oid sortarea0) P int G&mW1L clrscr0)L printf0JZn Dupa care criteriul doriti sa efectuati sortarea Zn J)L G-ile0m) P cprintf0JZr Zn J)L cprintf0JZr Zn J)L te'tcolor016)L cprintf0JZr Zn STSTSTSTSTSTSTSTSTS)4 M,N*)STSTSTSTSTSTSTSTST ZnJ)L te'tcolor0=)L cprintf0JZr Zn 999999999999999999999999999999999999999999999J)L cprintf0JZr Zn J)L te'tcolor01/)L cprintf0JZr Zn U U U U U J)L cprintf0JZr Zn J)L cprintf0JZr Zn J)L te'tcolor0=)L cprintf0JZrZn UUUUUUUUUUUUUUUUUUUUUUUUUUUUUU J)L te'tcolor016)L cprintf0JZr Zn U19Dupa cimpul fpretf UJ)L te'tcolor0=)L cprintf0JZr Zn UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUJ)L te'tcolor016)L cprintf0JZr Zn U29Dupa cimpul fcantf UJ)L te'tcolor0=)L cprintf0JZr Zn UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUJ)L te'tcolor016)L cprintf0JZr Zn U!9Meniu principal UUJ)L te'tcolor0=)L cprintf0JZr Zn UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUJ)L cprintf0JZr Zn J)L cprintf0JZr Zn J)L 2=
te'tcolor01D)L cprintf0JZr Zn *ntroduceti numarul criteriului dorit%J)L scanf0J[dJ&;G)L sGitc-0G) P case 1%Ppret0)LbreaVLQ case 2%Pcant0)LbreaVLQ case !%PmW3LbreaVLQ Q Q Q BB[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[ $oid adaugare0) P int i&d&rW1L te'tcolor023)L cprintf0JZr Zn Cite Produse doriti sa adaugatiYJ)L scanf0J[dJ&;d)L fWfopen0Jd%ZZproiect(t'tJ&JabJ)L cW-L G-ile0c9Tne'tXWN)55) P cWc9Tne'tL Q for0iW1LiSWdLi<<) P pW0N:DU)malloc0sizeof0N:D))L te'tcolor01!)L cprintf0JZr Zn *ntroduceti denumirea Produsului [d ce doriti sa9l adaugati% J&r)L cscanf0JZr Zn [sJ&;p9TDenum)L cprintf0JZr Zn *ntroduceti pretul Produsului [d J&r)L scanf0J[dJ&;p9Tpret)L cprintf0JZr Zn *ntroduceti codul Produsului [d J&r)L scanf0J[sJ&;p9Tcod)L cprintf0JZr Zn *ntroduceti tara producatoare a Produsului [d J&r)L scanf0J[sJ&;p9Ttara)L cprintf0JZr Zn *ntroduceti cantitatea Produsului [d J&r)L scanf0J[dJ&;p9Tcant)L p9Tne'tWN)55L c9Tne'tWpL cWpL r<<L Q BBsa$e0)L getc-0)L fclose0f)L Q BB[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[ $oid stergerea0) P 2D
int r&i&G&aL aWGW1L G-ile0G) P iW2L afisOstruct0)L te'tcolor01!)L cprintf0JZr Zn *ntroduceti numarul Produsului ce doriti sa9l stergetiJ)L cscanf0JZr Zn [dJ&;r)L cW-L pWc9Tne'tL if0rWW1) P cWc9Tne'tL free0-)L -WcL Q else G-ile0a) P if0iWWr) P c9Tne'tWp9Tne'tL free0p)L aW3L Q cWc9Tne'tL pWp9Tne'tL i<<L Q te'tcolor016)L cprintf0JZr Zn Doriti sa mai stergeti $re9o ProdusYJ)L cprintf0JZr Zn Daca da tastati99991J)L cprintf0JZr Zn Daca nu tastati99993J)L cscanf0JZr Zn [dJ&;G)L Q Q BB[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[ $oid cautare0) P int G&mW1L clrscr0)L cprintf0JZn Ce doriti sa indeplinitiY J)L G-ile0m) P cprintf0JZr Zn J)L cprintf0JZr Zn J)L te'tcolor016)L cprintf0JZr Zn STSTSTSTSTSTSTSTS)4 M,N*)STSTSTSTSTST ZnJ)L te'tcolor0=)L cprintf0JZr Zn UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUJ)L cprintf0JZr Zn J)L 2/
te'tcolor01/)L cprintf0JZr Zn cprintf0JZr Zn J)L te'tcolor0=)L cprintf0JZrZn te'tcolor016)L cprintf0JZr Zn te'tcolor0=)L cprintf0JZr Zn te'tcolor016)L cprintf0JZr Zn te'tcolor0=)L cprintf0JZr Zn te'tcolor016)L cprintf0JZr Zn te'tcolor0=)L cprintf0JZr Zn te'tcolor016)L cprintf0JZr Zn te'tcolor0=)L cprintf0JZr Zn te'tcolor016)L cprintf0JZr Zn J)L cprintf0JZr Zn J)L cprintf0J Zr Zn scanf0J[dJ&;G)L sGitc-0G)
U U U U U J)L UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU J)L U19Cautarea dupa cimpul fDenumiref UUJ)L UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUJ)L U29Cautarea dupa cimpul fCodf UUJ)L
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUJ)L
P case 1%PDenum0)LbreaVLQ case 2%Pcod0)LbreaVLQ case !%Ptara0)LbreaVLQ case =%PmW3LbreaVLQ Q Q Q BB[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[
22
Schema logica*
Start
26
63Aunctia de adaugare3
stergere*+3
6)Aunctia de cautare
2.
cautare*+3
Descrierea programului
In programul dat se con"in diferite func"ii destinate prelucrrii irurilor de ca9 ractere( Aceste func"ii sunt standarte& adic declarate cu prototip Cntr9o bibliotec special( oate func"iile sunt declarate Cn biblioteca% Sstring(-T( In timpul rezol$rii acestei lucrri ne9am Cntglnit cu situa"ii cgnd era necesar prelucrarea i pstrarea unei informa"ii mai comple'e care con"inea date de diferite tipuri( hruparea acestor date Cntr9o $ariabil comple' a fost posibil datorit tipului de date Structur( De asemenea trebuie de men"ionat faptul c un rol important Cn aceast lucrare au a$ut9o func"iile i fiierele Cn C( Aunc"iile le9am folosit Cn scopul e$iden"ierii unor sarcini concrete i Cncapsularea lor Cn module aparte& pentru a pre$eni probabilitatea de apari"ie a erorilor atgt logice cgt i sintactice( Deci acum $oi Cncerca pe scurt s descriu programul pe care l9am realizat% Aunctia principala constituie un operator & adica aceasta apeleaza succesi$ functiile de sortare in dependenta de $aloarea $ariabilei caracteriale c citite de la tastatura( Aunctiile de tipul $oid din program nu returneaza in functia principala nici o $aloare& deoarece acstea prelucreaza datele ce se contin in $ariabile globale & adica functiile nu necesita parametri formali &acestea fiind deasemenia de tip $oid */oid '*/oid+3+. Prin intermediul ciclului 5hile* + asigura afisarea meniului la monitor cu apelare ulturmatoare a functiilor de prelucrare a structurii si cu alternarea dintre desc-iderea si inc-iderea fisierului destinatie ( *esirea din ciclul 5hile* + se poate face doar in cazul cind se tasteaza tasta cifra > care e'ecuta iesirea cu succes din program prin apelul functiei e?it*4+3. Programul afisat mai sus are urmatorul prototip functional =
!3
4unctia /oid main*+ ne a"isea!a un meniu care permite( 1)*ntroducerea datelor de la tastatura%9intr6struct*+3 2)Afisarea datelor despre Numele introduse de#a%9a'is6struct*+3 !)Afisarea datelor din fisier%9a'is6'is*+3 =)Sortarea studentilor%9sortarea*+3 D)Adaugarea unor ,le$ilor noi%9adaugare*+3 /)Stergerea unor ,le$i%9stergerea*+3 2) ,fectuarea cautarii%9cautare*+3 6) Sal$area datelor in fisier%9sa/e*+3 .)*esirea din program%9e?it*4+3
-alloc.h).
*ntroducerea datelor in lista are loc printr9un ciclu 'or*+ 2care se realizeaza de un numar de n ori &unde n9este numarul de noduri pe care le $a contine lista(
!1
- e?presia const).
inta?a= sGitc-0e'presie) Pcase e'presie const1%P instructiunea 1LbreaVLQ ((( case e'presie constN%P instructiunea NLbreaVLQ default%instructiuneL Q
Aceasta functie realizeaza adaugarea datelor noi in fisierul -proiect). Adaugarea se efectuiaza prin intermediul functiilor -print'*+) si -scan').Adaugarea datelor in fisier se contine intr9un ciclu -'or=) 'or*i143i.1d3i""+)2unde d9este numarul de Studentului ce dorim sa adaugam in fisier(Ciclul -'or) se contine intr9un alt ciclu -5hile)2care se e'ecuta atit timp ci este ade$arata e'presia =) 5hile*cB0ne?t@1NALL+). Aisierul cu numele -proiect )se desc-ide cu a#utorul instructiunii -'1'open*-proiect)2)a)+) 2unde litera Ea) indica faptul ca fisierul este desc-is pentru a se adauga din el(Apoi fisierul este inc-is prin intermediul instructiunii -'close*'+3).
- e?presia const).
inta?a= sGitc-0e'presie) Pcase e'presie const1%P instructiunea 1LbreaVLQ ((( case e'presie constN%P instructiunea NLbreaVLQ default%instructiuneL Q
134unctia de
!!
!=
;II*$ibliogra"ie(
1*Sergiu <* Istrati 6Limba1ele de programareC=C>>% Chisinau 299# 2*$u!urniuc ?te"an 6Ini)iere @n lima1ul C % Chi0inAu 2994
!/
#*Dr*Bris Camsa5Lars Clander 6'otul despre C si C>>% $ucuresti 2991 4* Constantin &* Se+ici 62rogramarea @n C% $ucure0ti 1885
Conclu!ie(
5ucrarea data reprezinta un model de prelucrare a informatiei unei baze de date ce contine date despre studentii unei grupe( *nformatia despre studenti se introduce cu a#utorul unei liste& lista la rindul sau este sal$ata in sructura si pastrata in fisier& informatia este prelucrata prin intermediul tablourelor unidimensionale si cu a#utorul listelor dublu inlantuite& *nformatia se pastreaza in fisierul% Hproiect(t'tF si este manipulata cu a#utorul meniului( 5a efectuarea acestui proect de an am capatat capacitati de elaborare a unei baze de date atit practice cit si teoretice &care ne a#uta sa corectam usor erorile pe care poate sa le admita programul(
!2