Sunteți pe pagina 1din 10

PROIECT „ALGORITMI SI

TEHNICI DE
PROGRAMARE”
-Stefanescu Mircea 1144 ID-

Realizati aplicatia care sa gestioneze automobilele unui parc auto.


Se cere sa se creeze un meniu pentru a putea selecta urmatoarele
functii:

-creare fisier
-adaugare automobile
-modificare automobile
-stergere automobile
-listare automobile
-listare selectiva automobile (criteriul-vechime in munca mai mare de
6 ani)
-afisare pe ecran date automobile

Programul a fost realizat in Visual Studio;

A fost conceput in urmatorul mod:


-a fost construita o structura denumita „Auto” cu mai multe campuri:
capacitateCilindree, marcaAuto, codUnicAuto, ModelAuto, viteza,
vechime, isEmpty;

-fiecare cerinta a fost facuta ca un subprogram:

creareFisier -creeaza un fisier, denumirea este preluata de la


tastatura;

adaugare-adauga un automobil, un articol in fisier, completandu-se


toate campurile structurii „Auto”;

stergere-sterge un articol din fisier in functie de cod-ul unic al


automobilului introdus de la tastatura;
modificare -modifica un articol in functie de cod-ul cod-ul unic al
automobilului care este introdus de la tastatura;

listaAutomobile -creeaza un fisier text cu automobilele introduse;

lista2-creeaza un fisier cu automobilele care corespund criteriului


„vechime in munca mai mare de 6 ani”;

afisare -afiseaza pe ecran datele unui automobil in functie de cod-ul


automobilului introdus de la tastatura;

-un alt subprogram a fost folosit pentru a determina dimensiunea


fisierelor –„ dimensiuneFisier”;

-in „main” s-a folosit o structra de tip „switch case” pentru a construi
un meniu cu 7 variante de a alege;

-fisierul este organizat relativ;

-cheia relativa a fisierului este „cod”;

-„ isEmpty”-indicatorul de stare, ne arata daca un articol este gol sau


nu;

Programul se poate folosi pentru a gestiona o baza de date cu


automobilele unui parc auto dar se pot adauga mai multe campuri in
functie de nevoia societatii.
Se pot modifica criteriile de selectie pentru subprogramul „lista2” in
functie de necesitati.

Codul sursa:

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>

struct Auto {
int capacitateCilindree;
char marcaAuto[20];
char codUnicAuto[13];
char ModelAuto[20];
int viteza;
int vechime;
int isEmpty;
};

char numeFisier[100];

int dimensiuneFisier(char* numeFisier, int l)


{
FILE* f = NULL;
long p;
int n; p = ftell(f);
fseek(f, 0, 2);
n = ftell(f) / l;
fseek(f, p, 0);
return n;
}

FILE* creareFisier(char *numeFisier)


{
FILE* f;
printf("Specificati numele fisierului...");
char a;
printf("\nFisier: ");
scanf("%s", numeFisier);
f = fopen(numeFisier, "wb+");
if (f == NULL)
{
printf("Se creaza fisierul cu numele %nume?", numeFisier);
a = _getch();
if (toupper(a) == 'D')
{
f = fopen(numeFisier, "wb");
fclose(f);
fopen(numeFisier, "rb+");
}
} return f;
}
FILE* adaugare(char* numeFisier)
{
FILE* f = NULL;
struct Auto a;
int i, cod;
printf("\t\t--------------------");
printf("\t\tAdaugare Automobil nou");
printf("\t\t--------------------");
printf("\n Cod Unic Automobil: ");
fwrite(&cod,sizeof(a),1,f);
while (!feof(stdin))
{
if (cod >= dimensiuneFisier(f, sizeof(a)))

a.isEmpty = 0;
fseek(f, 0, 2);
for (i = dimensiuneFisier(f, sizeof(a)); i <= cod; i++)

fwrite(&a, sizeof(a), 1, f);


fseek(f, cod * sizeof(a), 0);
fread(&a, sizeof(a), 1, f);

if (a.isEmpty)
{
printf("\nExista deja un automobil cu acest cod");

}else {
printf("Cod unic automobil: ");
fwrite(&a, sizeof(a.codUnicAuto), 1, f);
fflush(a.codUnicAuto);

printf("Marca Automobil: ");


fwrite(&a, sizeof(a.marcaAuto), 1, f);
fflush(a.marcaAuto);

printf("Model Automobil: ");


fwrite(&a, sizeof(a.ModelAuto), 1, f);
fflush(a.ModelAuto);

printf("Vechime:");
fwrite(&a, sizeof(a.vechime), 1, f);
fflush(a.vechime);

printf("Viteza automobil:");
fwrite(&a, sizeof(a.viteza), 1, f);
fflush(a.viteza);

a.isEmpty = 1;
a.capacitateCilindree = cod;
fwrite(&a, sizeof(a), 1, f);
}
printf("\nCod unic: ");
fwrite(&a, sizeof(a), 1, f);
fclose(f);
} return f;

}
FILE* modificare(char* numeFisier)
{
FILE* f = NULL;
struct Auto a;
int CodModificat = 0;
printf("\n Introduceti codul unic al automobilului pe care doriti sa il
modificati: ");
fwrite(&a, sizeof(CodModificat), 1, f);
fseek(f, CodModificat * sizeof(a), 0);
fread(&a, sizeof(a), 1, f);
if (CodModificat != 1) {
printf("\nNu exista automobil cu acest cod...");
}
else
{
printf("Cod unic automobil: ");
fwrite(&a,sizeof(a.codUnicAuto),1,f);
fflush(a.codUnicAuto);

printf("Marca automobil: ");


fwrite(&a, sizeof(a.marcaAuto), 1, f);
fflush(a.marcaAuto);

printf("Model automobil: ");


fwrite(&a, sizeof(a.ModelAuto), 1, f);
fflush(a.ModelAuto);
printf("Vechime automobil:");
fwrite(&a, sizeof(a.viteza), 1, f);
fflush(a.vechime);

printf("Viteza automobil:");
fwrite(&a, sizeof(a.viteza), 1, f);
fflush(a.viteza);

fseek(f, CodModificat * sizeof(a), 0);


fwrite(&a, sizeof(a), 1, f);
printf("\nAutomobilul cu codul %d a fost modificat...",
CodModificat);
}
return f;
}
FILE* stergere(char* numeFisier)
{
FILE* f = NULL;
struct Auto a;
int CodStergere = 0;
printf("\n Introduceti codul unic auto pe care doriti sa il stergeti: ");
fwrite(&a, sizeof(CodStergere), 1, f);
fseek(f, CodStergere * sizeof(a), 0);
fread(&a, sizeof(a), 1, f);
if (a.capacitateCilindree != 1) {
printf("\nNu exista automobil cu acest cod...");
}
else
{
a.isEmpty = 0;
fseek(f, CodStergere * sizeof(a), 0);
fwrite(&a, sizeof(a), 1, f);
printf("Automobilu cu codul %d a fost sters din baza de date...",
CodStergere);
}
return f;
}

void listaAutomobile(char* numeFisier)


{
FILE* f = NULL;
struct Auto a;
fseek(f, 0, 0);
f = fopen(numeFisier, "wt");
fprintf(f, "\t\tLista automobile din parcul auto\n");
fseek(f, 0, 0);
fread(&a, sizeof(a), 1, f);
while (!feof(f))
{
if (a.isEmpty == 1)
{
fprintf(f, "&d &s &d &s &s &f &d",
a.capacitateCilindree, a.codUnicAuto, a.isEmpty,
a.marcaAuto, a.ModelAuto, a.viteza, a.vechime);
} fread(&a, sizeof(a), 1, f);
}
fclose(f);
}
void lista2(char* numeFisier)
{
FILE* f = NULL;
struct Auto a;
fseek(f, 0, 0);
f = fopen("lista.bin", "wb");
fprintf(f, "\t\tLista automobilele cu vechime mai mare de 6 ani");
fseek(f, 0, 0);
fread(&a, sizeof(a), 1, f);
while (!feof(f))
{
if (a.isEmpty == 1 && a.vechime >= 6)
{
fprintf(f, "&d &s &d &s &s &f &d",
a.capacitateCilindree, a.codUnicAuto, a.isEmpty,
a.marcaAuto, a.ModelAuto, a.viteza, a.vechime);
} fread(&a, sizeof(a), 1, f);
}
fclose(f);

}
void afisare(char* numeFisier)
{
FILE* f = NULL;
struct Auto a;
int CodAfisare = 0;
printf("\n Introduceti codul unic al automobilului pe care doriti sa il
afisati: ");
fwrite(&a, sizeof(CodAfisare), 1, f);
fseek(f, CodAfisare * sizeof(a), 0);
fread(&a, sizeof(a), 1, f);
if (CodAfisare != 1) {
printf("\nNu exista automobil cu acest cod...");
}
else
{
fseek(f, 0, 1);
printf("\n&d &s &d &s &s &f &d",
a.capacitateCilindree, a.codUnicAuto, a.isEmpty,
a.marcaAuto, a.ModelAuto, a.viteza, a.vechime);
}
}
void main()
{
FILE* f = NULL;
int opt = 1;
while (opt != 0)
{
system("cls");
printf("Date tehnice automobile din parcul auto\n");
printf("\n Alegeti o optiune:\n ");
printf("\n1. Alegere fisier de lucru\n");
printf("\n2. Adaugare automobil in baza de date\n");
printf("\n3. Modificare automobil din baza de date\n");
printf("\n4. Stergere automobil din baza de date\n");
printf("\n5. Generare raport cu automobilele actuale\n");
printf("\n6. Generare raport angajati cu vechime mai mare de 5
ani\n");
printf("\n7. Afisare date automobil\n");
printf("\n0. Iesire\n\n");

scanf("%d", &opt);
switch (opt)
{
case 1:
{
f = creareFisier(numeFisier);
}
break;
case 2:
{
if (f == NULL)
{
printf("\n NU ATI ALES FISIERUL DE LUCRU");
_getch();
}
else f = adaugare(numeFisier);
}
break;
case 3:
{
if (f == NULL)
{
printf("\n NU ATI ALES FISIERUL DE LUCRU");
_getch();
}
else {
modificare(numeFisier);
_getch();
}
}
break;
case 4:
{
if (f == NULL)
{
printf("\n NU ATI ALES FISIERUL DE LUCRU");
_getch();
}
else { f = stergere(numeFisier);
_getch(); }
}
break;
case 5:
{
if (f == NULL)
{
printf("\n NU ATI ALES FISIERUL DE LUCRU");
_getch();
}
else {
listaAutomobile(numeFisier);
_getch(); }
}
break;
case 6:
{
if (f == NULL)
{
printf("\n NU ATI ALES FISIERUL DE LUCRU");
_getch();
}
else
lista2(numeFisier);
}
break;
case 7:
{
if (f == NULL)
{
printf("\n NU ATI ALES FISIERUL DE LUCRU");
_getch();
}
else
afisare(numeFisier);
}
break;
}
}
fclose(f);
}

S-ar putea să vă placă și