Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #define CHMAX 100
- //sublista
- typedef struct model
- {
- char magazin[CHMAX];
- char model[CHMAX];
- int pret;
- struct model *next;
- }model;
- //lista
- typedef struct pian {
- char nume[CHMAX];
- model *sl;
- struct pian *next;
- }pian;
- pian *root = NULL;
- model *creareModel(char *mod, char *mag, int pret)
- {
- model *m = (model*)malloc(sizeof(model));
- strcpy(m->model, mod);
- strcpy(m->magazin, mag);
- m->pret = pret;
- m->next = NULL;
- return m;
- }
- pian *crearePian(char *nume) {
- pian *p = (pian*)malloc(sizeof(pian));
- strcpy(p->nume, nume);
- p->sl = NULL;
- p->next = NULL;
- return p;
- }
- pian *existaPian(char *name) {
- pian *p = root;
- pian *temp = NULL;
- while (p != NULL)
- {
- if (strcmp(p->nume, name) == 0) {
- temp = p;
- return temp;
- }
- p = p->next;
- }
- return temp;
- }
- model *adaugaModel(model *lista, model *x) {
- model *q1, *q2;
- for (q1 = q2 = lista; q1 != NULL && strcmp(q1->model, x->model) > 0; q2 = q1, q1 = q1->next);
- if (q1 == q2) {
- x->next = lista;
- lista = x;
- }
- else {
- q2->next = x;
- x->next = q1;
- }
- return lista;
- }
- pian *adaugaPian(pian *lista, pian *x, model *mod)
- {
- pian *q1, *q2;
- for (q1 = q2 = lista; q1 != NULL && strcmp(q1->nume, x->nume) < 0; q2 = q1, q1 = q1->next);
- if (q1 == q2) {
- x->next = lista;
- lista = x;
- }
- else {
- q2->next = x;
- x->next = q1;
- }
- x->sl = mod;
- return lista;
- }
- pian *inserarePian(pian *p, model *m)
- {
- pian *exPIAN;
- if (root == NULL)
- {
- p->sl = m;
- root = p;
- return root;
- }
- else {
- exPIAN = existaPian(p->nume);
- if (exPIAN != NULL) {
- if (exPIAN->sl == NULL)
- {
- exPIAN->sl = m;
- }
- else {
- exPIAN->sl = adaugaModel(exPIAN->sl, m);
- }
- return root;
- }
- else {
- return adaugaPian(root, p, m);
- }
- }
- }
- void citire()
- {
- char nume[CHMAX], mod[CHMAX], magazin[CHMAX];
- int pret;
- pian *nodPIAN;
- model *nodMODEL;
- FILE *f = fopen("piane.txt", "rt");
- if (!f) {
- fprintf(stderr, "Eroare la deschiderea fisierului!\n");
- exit(EXIT_FAILURE);
- }
- while (!feof(f)) {
- fscanf(f,"%s %s %s %d", nume, magazin, mod, &pret);
- nodMODEL = creareModel(mod, magazin, pret);
- nodPIAN = crearePian(nume);
- root = inserarePian(nodPIAN, nodMODEL);
- }
- fclose(f);
- }
- void afisare()
- {
- pian *pian;
- model *MOD;
- int contor = 1;
- for (pian = root; pian != NULL; pian = pian->next) {
- printf("%d. %s\n", contor++, pian->nume);
- for (MOD = pian->sl; MOD != NULL; MOD = MOD->next) {
- printf("\t%s %s %d\n", MOD->model, MOD->magazin, MOD->pret);
- }
- printf("---------------------------------------\n");
- }
- }
- void afisarePian(char *nume)
- {
- pian *p = existaPian(nume);
- model *m;
- if (!p)
- {
- printf("Nu exista pianul cu numele introdus");
- return;
- }
- else
- {
- printf("%s\n", p->nume);
- for (m = p->sl; m != NULL; m = m->next) {
- printf("\t%s %s %d\n", m->model, m->magazin, m->pret);
- }
- }
- }
- void salvareModele(int info)
- {
- FILE *g;
- pian *p;
- model *m;
- int pret;
- printf("Modelele care au un pret mai mare sau egal cu %d sunt: \n", info);
- for (p = root; p != NULL; p = p->next) {
- for (m = p->sl; m != NULL; m = m->next) {
- pret = m->pret;
- if (pret >= info) {
- printf("%s %s %s %d\n", p->nume, m->magazin, m->model, m->pret);
- }
- }
- }
- g = fopen("expensive.txt", "wt");
- if (g) {
- for (p = root; p != NULL; p = p->next) {
- for (m = p->sl; m != NULL; m = m->next) {
- pret = m->pret;
- if (pret >= info) {
- fprintf(g,"%s %s %s %d\n", p->nume, m->magazin, m->model, m->pret);
- }
- }
- }
- fclose(g);
- }
- }
- int main() {
- int opt;
- char pian[CHMAX];
- int pret;
- do {
- printf("1. Citire din fisier\n");
- printf("2. Afisarea datelor din fisier\n");
- printf("0. Iesire\n");
- printf("Optiunea dumneavoastra: ");
- scanf("%d", &opt);
- switch (opt)
- {
- case 1:
- citire();
- break;
- case 2:
- afisare();
- break;
- case 3:
- printf("Introduceti numele pianului: ");
- scanf("%s", pian);
- afisarePian(pian);
- break;
- case 4:
- printf("Introduceti pretul: ");
- scanf("%d", &pret);
- salvareModele(pret);
- break;
- case 0: exit(0);
- break;
- default: printf("Optiune gresita\n");
- break;
- }
- } while (opt != 0);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement