Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme



Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Calculatoare


Index » educatie » » informatica » Calculatoare
» STRUCTURI DE DATE PROIECT - Fisiere de legaturi (fisiere de indexare)


STRUCTURI DE DATE PROIECT - Fisiere de legaturi (fisiere de indexare)




ACADEMIA DE STUDII ECONOMICE

FACULTATEA DE CIBERNETICa, STATISTICa si INFORMATICA ECONOMICA

Structuri de date

PROIECT

Fisiere de legaturi




(fisiere de indexare)

1 Stabilirea Cerintelor

Programul trebuie sa implementeze un sistem prin care sa se poata regasi repede informatii legate de conturi bancare.

Cerinte:

1 Se vor folosi clase pentru a gestiona informatiile

2 Datele se vor salva in fisiere

3 Un utilizator trebuie sa poata adauga, salva, modifica si sterge datele necesare

4 Regasirea informatiilor trebuie sa se desfasoare intr-un timp mai scurt decat cel necesar cautarii liniare intr-un fisier

5 Programul trebuie sa impementeze un meniu prin care utilizatorul sa poata interactiona cu datele

2 Estimarea duratei de realizare

Estimarea se va face pentru fiecare din cerintele de baza ale softului. Astefel:

1 timp de lucru: 1 ora

2 timp de lucru ˝ ore

3 adaugare – ˝ ore

salvare – ˝ ore

modificare – ˝ ore

stergere – 1/6 ore

4 algoritm de cautare: ˝ ore

5 timp de lucur - ˝ ore

Pentru realizarea programului se vor mai aloca 1,5 ore pentru integrarea tuturor componentelor si 2 ore pentru testarea riguroasa a componentelor. In afara implementarii propriuzise, pentru realizarea programului a mai fost necesara 1 ora pentru elaborarea cerintelor (a specificatiilor) si 2 ore (timp acumulat din mai multe zile) pentru a strange informatiile necesare de la „client” (cerintele enuntate de profesor la cursul de Structuri de date precum si idei, sfaturi date de acesta in vederea efectuarii unei munci eficiente).

O data cu terminarea etapei de implementare s-a mai alocat inca o ora pentru a elabora documentatia specifica programului.

Timp total de lucru estimat: 11 ore!

Factori ce au influentat durata de realizare a programului

1 Limbajul de programare ales: c++. Folosind acest limbaj, timpul de lucru este mai mare deoarece se acorda o mai mare atentie zonelor de memorie alocate, eliberarea acestora precum si in cadrum manevrarii pointerilor folositi in cadrul aplicatiei

2 Experienta programatorului: 2 ani ca profesionist. Experienta acumulata in ultimii doi ani mi-a fost de mare ajutor avand in vedere complexitatea redusa a programului ce trebuie implementat.

3 Cerinte noi, revizuire

Pentru a avea date de lucru necesare testarii functionalitatii componentelor, mai este necesara adaugarea unei functii pentru salvarea datelor „hardcoded” la care utilizatorul nu are acces. Acest lucru este necesar pentru a creea o baza de la care sa se poata porni in cadrul procesului de creare a componentelor programului.

Necesitatea acestei functii a parut dupa analizarea erintelor de baza ale proiectului, odata cu inceperea lucrului.

La timpul total necesar implementarii programului s-au mai adaugat astfel ˝ ore necesare implementarii acestei functii precum si a testarii acesteia.

Timp total de lucru estimat: 11,5 ore!

4 Concluzii

Implementarea programului a decurs fara probleme, in timpul estimat.

Motivele pentru care nu s-au inregistrat intarzieri:

Claritatea cerintelor

Complexitatea foarte redusa a programului

Experienta programatorului

Utilizarea unui mediu de programare (Microsoft Visual Studio 2008) ce permite implementarea si testarea codului intr-o maniera asistata vizual

5 Anexa: Cod sursa

#include 'stdio.h'

#include 'stdlib.h'

#include 'conio.h'

#include 'math.h'

#include 'ATLComTime.h'

#include 'iostream'

#include <process.h>

using namespace std;

enum TIP_CONT ;

enum TIP_DOBANDA ;

bool OpenFiles(FILE*& fData, FILE*& fLegaturi, bool ToRead = true)

fLegaturi = fopen('legaturi.txt', ToRead == false? 'w' : 'r');

if(fLegaturi == NULL)

return true;

class Cont

void Cont::SetSuma(unsigned int Suma)

void Cont::SetCNP(unsigned long int CNP)

void Cont::SetDobanda(unsigned int Dobanda)

void Cont::SetTipCont(TIP_CONT TipCont)

void Cont::SetTipDobanda(TIP_DOBANDA TipDobanda)

int Cont::GetSuma()

unsigned int Cont::GetDobada()

unsigned long int Cont::GetCNP()

TIP_CONT Cont::GetTipCont()

TIP_DOBANDA Cont::GetTipDobanda()

COleDateTime Cont::GetDataStart()

void Cont::AplicaDobanda()

this->iSuma += (this->Dobanda/100) * this->iSuma;

void Cont::AdaugaInCont(int Suma)

bool Cont::RetrageDinCont(unsigned int Suma)





this->iSuma -= Suma;

return true;

Cont::Cont()

Cont::Cont(TIP_CONT TipCont, int SumaStart, TIP_DOBANDA TipDobanda, unsigned int Dobanda, unsigned long int CNP)

class Conturi

int NrConturi;

ContNod* start;

ContNod* end;

void Conturi::StergeConturileDinMmorie()

this->start = NULL;

this->end = NULL;

Conturi::Conturi()

Conturi::~Conturi()

this->start = NULL;

this->end = NULL;

int GetLungimeNumar(int Numar)

return lg;

bool Conturi::IncarcaConturi()

fLegaturi = fopen('legaturi.txt', 'r');

if(fLegaturi == NULL)

Cont* pCont = new Cont();

while(fread((void*)pCont, sizeof(Cont), 1, fData) > 0)

}

catch()

bool Conturi::SalveazaConturi()

int pos = 1;

ContNod* s = NULL;

s = this->start;

while(s)

char* Legatura = NULL;

int LungimeLegatura = 0;

int LungimePOS = 0;

LungimeLegatura = GetLungimeNumar(s->pCont->GetCNP());

LungimeLegatura++;//adugam un spatiu alb intre CNP si pozitie

LungimePOS = GetLungimeNumar(pos);

LungimeLegatura += LungimePOS;

if(LungimeLegatura == 0)

LungimeLegatura++; //adaugam spatiu pentru NULL

LungimeLegatura++; //adaugam spatiu pentru new line

Legatura = new char[LungimeLegatura];

if(Legatura == NULL)

itoa(s->pCont->GetCNP(), Legatura, 10);

char *Temp = NULL;

Temp = new char[++LungimePOS];

if(Temp == NULL)

itoa(pos, Temp, 10);

strcat(Legatura, ' ');

strcat(Legatura, Temp);

strcat(Legatura, 'n');

delete[] Temp;

fwrite((void*)Legatura, --LungimeLegatura, 1, fLegaturi);

pos++;

s =s->next;

}

fclose(fData);

fclose(fLegaturi);

}

catch()

return true;

void Conturi::AplicaDobanzi()

Cont* Conturi::GetCont(int index)

else

}

return NULL;

Cont* Conturi::GetCont(unsigned long int CNP)

ContNod* s = this->start;

while(s)

{

if(s->pCont->GetCNP() == CNP)

s=s->next;

}

return NULL;

void Conturi::AdaugaCont(Cont* cont)

if(this->start == NULL)

else

}



void CreeazaContNou(Conturi*& conturi)

while(op != '1' && op != '2');

switch(op)

case '2':

};

op = 0;

do

while(op != '1' && op != '2' && op != '3' && op != '4');

switch(op)

case '2':

case '3':

case '4':

};

op = 0;

char Temp[10];

unsigned long int iTemp = 0;

do

while(iTemp<0);

pcont->SetSuma(iTemp);

iTemp = 0;

cin.get();

do

while(iTemp<0);

pcont->SetDobanda(iTemp);

iTemp = 0;

cin.get();

do

while(iTemp<0);

pcont->SetCNP(iTemp);

conturi->AdaugaCont(pcont);

cout<<endl<<'Contul a fost creeat!';

getch();

cin.get();

void StergeToateConturile(Conturi*& conturi)

fclose(fData);

fclose(fLegaturi);

cout<<'Toate conturile au fost sterse!';

getch();

Cont* GetCont(int CNP, Conturi*& conturi, int& FoundPos)

char line [ 128 ];

char Splitter[] = ' ';

char *pTemp = NULL;

int pos = 0;

unsigned long int fCNP = 0;

while ( fgets ( line, sizeof line, fLegaturi ) != NULL )

}

Temp = new Cont();

if(fread((void*)Temp, sizeof(Cont), 1, fData) == 1)

}

}

}

}

fclose(fData);

fclose(fLegaturi);

return NULL;

void AfiseazaInformatiiCont(Cont* pCont)

cout<<endl;

if(pCont->GetTipCont() == CURENT)

if(pCont->GetTipCont() == ECONOMII)

cout<<'CNP Titualr: '<<pCont->GetCNP()<<endl;

if(pCont->GetTipDobanda() == O_LUNA)

if(pCont->GetTipDobanda() == TREI_LUNI)

if(pCont->GetTipDobanda() == SASE_LUNI)

if(pCont->GetTipDobanda() == UN_AN)

cout<<'Dobanda: '<<pCont->GetDobada()<<endl;

cout<<'Suma: '<<pCont->GetSuma()<<endl;

void AfiseazaCont(Conturi*& conturi)

void SalveazaCont(Cont* pcont,int DataFilePos = 0)

if(fseek(fData, sizeof(Cont) * (DataFilePos -1), SEEK_SET) == 0)

}

fclose(fData);

}

else

fLegaturi = fopen('legaturi.txt', 'r+');

if(fLegaturi == NULL)

}

char line [ 128 ];

char Splitter[] = ' ';

char *pTemp = NULL;

int pos = 0;

unsigned long int fCNP = 0;



while ( fgets ( line, sizeof line, fLegaturi ) != NULL )

if( (pTemp = strstr(line, Splitter)) != NULL)

pos++;

char* Legatura = NULL;

int LungimeLegatura = 0;

int LungimePOS = 0;

LungimeLegatura = GetLungimeNumar(pcont->GetCNP());

LungimeLegatura++;//adugam un spatiu alb intre CNP si pozitie

LungimePOS = GetLungimeNumar(pos);

LungimeLegatura += LungimePOS;

LungimeLegatura++; //adaugam spatiu pentru NULL

LungimeLegatura++; //adaugam spatiu pentru new line

Legatura = new char[LungimeLegatura];

itoa(pcont->GetCNP(), Legatura, 10);

char *Temp = NULL;

Temp = new char[++LungimePOS];

itoa(pos, Temp, 10);

strcat(Legatura, ' ');

strcat(Legatura, Temp);

strcat(Legatura, 'n');

delete[] Temp;

fwrite((void*)Legatura, --LungimeLegatura, 1, fLegaturi);

//fseek(fData, sizeof(Cont) * pos, SEEK_SET);

fwrite((void*)pcont, sizeof(Cont), 1, fData);

fclose(fData);

fclose(fLegaturi);

}

void ModificaCont(Conturi*& conturi)

system('cls');

cout<<'Introduceti CNP-ul titularului de cont'<<endl;

char Temp[20];

cin.get(Temp, 20);

int CNP = atoi(Temp);

cin.get();

Cont* pcont = NULL;

int DataFilePos;

pcont = GetCont(CNP,conturi, DataFilePos);

AfiseazaInformatiiCont(pcont);

cout<<endl<<endl;

char op = 0;

do

while(op != '1' && op != '2');

switch(op)

case '2':

};

op = 0;

do

while(op != '1' && op != '2' && op != '3' && op != '4');

switch(op)

case '2':

case '3':

case '4':

};

op = 0;

unsigned long int iTemp = 0;

do

while(iTemp<0);

pcont->SetSuma(iTemp);

iTemp = 0;

cin.get();

do

while(iTemp<0);

pcont->SetDobanda(iTemp);

iTemp = 0;

cin.get();

SalveazaCont(pcont, DataFilePos);

void Conturi::SalveazaConturileIntroduse()

system('cls');

cout<<'Conturile au fost salvate';

_getch();

this->StergeConturileDinMmorie();

void AfiseazaMeniuPrincipal(void)

case '2':

case '3':

case '4':

case '5':

case '6':

};

goto START;

void main(void)






Politica de confidentialitate


Copyright © 2020 - Toate drepturile rezervate