Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdlib.h>
- #include<stdio.h>
- #include<string.h>
- //struktura towar int numer, double cena, int ilosc, char nazwa[30]
- //plik o nazwie magazyn.txt
- //funkcja dodaj, jezeli istnieje zmien ilosc towaru na nowa, jesli nie istnieje to dodaj
- //funkcja przecena zwraca ilosc strat, przecenia wybrane towary o podany %
- struct towar
- {
- char nazwa[30];
- int numer;
- float cena;
- int ilosc;
- };
- void dodaj(char *nazwa);
- void wyswietl(char *nazwa);
- double przecena(char *nazwa);
- int main(void)
- {
- float tmp;
- char plik[13] = "magaz.txt";
- char c = ' ';
- do
- {
- printf("\n**********\n");
- printf("[d] - dodaj towar do bazy\n");
- printf("[w] - wyswietl liste\n");
- printf("[p] - przecen towary\n");
- printf("[q] - wyjscie\n");
- printf("\n**********\n");
- fflush(stdin);
- scanf("%c", &c);
- switch (c)
- {
- case 'd':
- dodaj(plik);
- break;
- case 'w':
- wyswietl(plik);
- break;
- case 'p':
- tmp = przecena(plik);
- printf("straty wynosza %f", tmp);
- break;
- }
- } while (c != 'q');
- scanf("%d", &c);
- return 0;
- }
- void dodaj(char * nazwa)
- {
- int gotowe;
- gotowe = 0;
- FILE *plik;
- FILE *tmp;
- struct towar zKlawiatury, zPliku;
- int i = 0;
- if ((plik = fopen(nazwa, "r+")) == NULL)
- {
- plik = fopen(nazwa, "w+");
- }
- if ((tmp = fopen("tmp", "r+")) == NULL)
- {
- tmp = fopen("tmp", "w+");
- }
- printf("podaj nazwe towaru\n");
- fflush(stdin);
- scanf("%s", zKlawiatury.nazwa);
- printf("podaj numer\n");
- fflush(stdin);
- scanf("%d", &zKlawiatury.numer);
- printf("podaj cene\n");
- fflush(stdin);
- scanf("%f", &zKlawiatury.cena);
- printf("podaj ilosc\n");
- fflush(stdin);
- scanf("%d", &zKlawiatury.ilosc);
- while (fread(&zPliku, sizeof(struct towar), 1, plik) != 0)
- {
- if ((strcmp(zKlawiatury.nazwa, zPliku.nazwa) == 0) && (zKlawiatury.numer == zPliku.numer) && (zKlawiatury.cena == zPliku.cena))
- {
- zKlawiatury.ilosc = zPliku.ilosc + zKlawiatury.ilosc;
- fwrite(&zKlawiatury, sizeof(struct towar), 1, tmp);
- gotowe = 1;
- }
- else
- {
- fwrite(&zPliku, sizeof(struct towar), 1, tmp);
- }
- }
- if (gotowe == 0)
- {
- fseek(plik, 0, SEEK_END);
- fwrite(&zKlawiatury, sizeof(struct towar), 1, tmp);
- }
- fclose(tmp);
- fclose(plik);
- remove(nazwa);
- rename("tmp", nazwa);
- }
- void wyswietl(char * nazwa)
- {
- int i = 0;
- FILE *plik;
- struct towar m;
- if ((plik = fopen(nazwa, "r+")) == NULL)
- {
- plik = fopen(nazwa, "w+");
- }
- while (fread(&m, sizeof(struct towar), 1, plik) == 1)
- printf("[%d] %s \t %d \t %f \t %d \n", i++, m.nazwa, m.numer, m.cena, m.ilosc);
- fclose(plik);
- }
- double przecena(char * nazwa)
- {
- double sumastrat;
- struct towar wczytany;
- char c = ' ';
- int p;
- FILE *plik;
- FILE *tmp;
- fflush(stdin);
- if ((plik = fopen(nazwa, "r+")) == NULL)
- {
- plik = fopen(nazwa, "w+");
- }
- tmp = fopen("tmp", "w+");
- while (fread(&wczytany, sizeof(struct towar), 1, plik) != 0)
- {
- fflush(stdin);
- printf("czy chcesz przecenic towar %s ? Wcisnij T\n", wczytany.nazwa);
- scanf("%c", &c);
- if ((c == 'T') || (c == 't'))
- {
- do
- {
- printf("o ile procent chcesz przecenic towar %s\n", wczytany.nazwa);
- fflush(stdin);
- scanf("%d", &p);
- } while ((p <= 100) && (p > 0));
- sumastrat += (wczytany.cena * p / 100);
- wczytany.cena = wczytany.cena - (wczytany.cena * p / 100);
- if (!(p == 100))
- {
- fwrite(&wczytany, sizeof(struct towar), 1, tmp);
- }
- }
- else
- {
- fwrite(&wczytany, sizeof(struct towar), 1, tmp);
- }
- c = ' ';
- }
- fclose(tmp);
- fclose(plik);
- remove(nazwa);
- rename("tmp", nazwa);
- return sumastrat;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement