#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "naglowek.h"
struct record *rekord;
struct record *temp;
typedef struct record wpis;
FILE *plik;
char Directory[256]={0};
int ile=0;
int WczytajBazeZPliku(){
printf("Podaj sciezke do pliku:\n");
scanf("%s", Directory);
FILE *plik = fopen(Directory, "r");
if(plik==NULL){
printf("Podany plik nie istnieje\n");
return -1;}
else{
printf("Plik otwarty pomyslnie\n");
}
int ilosc=0;
int correct=0;
ile=0;
while (correct==0){
printf("Ile rekordow chcesz wprowadzic do bazy danych?\n");
if (0==scanf("%d",&ilosc)){
printf("Podales wartosc nieliczbowa\nSproboj ponownie\n");
scanf("%*s");}
else{
if(ilosc>0){
printf("Do bazy danych zostanie wprowadzone %d rekordow\nJesli podana wartosc przekracza liczbe rekordow w pliku, wartosc ta zostanie zmniejszona\n",ilosc);
correct=1;}
else
printf("Podales wartosc ujemna, sprobuj ponownie\n");
}}
int a=5;
ile=0;
rekord=(wpis*) malloc((ilosc+1)*sizeof(struct record));
while(!feof(plik) && ile<ilosc && a==5){
a=fscanf(plik,"%s %f %d %s %s", (rekord[ile].Lokalizacja), (&rekord[ile].RozmiarDzialki), (&rekord[ile].LiczbaPokoi), (rekord[ile].Opis), (rekord[ile].Klasa) );
printf("%d %d ",a ,ile);
printf("%s %f %d %s %s\n", (rekord[ile].Lokalizacja), (rekord[ile].RozmiarDzialki), (rekord[ile].LiczbaPokoi), (rekord[ile].Opis), (rekord[ile].Klasa) );
ile++;
if (a!=5) {
printf("Błąd odczytu w linii %d\nDo bazy wprowadzono %d rekordow\n", ile+1, --ile);
break;
}
}
if (ile<ilosc){
temp=(wpis*) malloc(ile*sizeof(struct record));
for (int i=0;i<ile;i++) {
strcpy(temp[i].Lokalizacja,rekord[i].Lokalizacja);
temp[i].RozmiarDzialki=rekord[i].RozmiarDzialki;
temp[i].LiczbaPokoi=rekord[i].LiczbaPokoi;
strcpy(temp[i].Opis,rekord[i].Opis);
strcpy(temp[i].Klasa,rekord[i].Klasa);
}
rekord=realloc(rekord, ((ile+1)*sizeof(struct record)));
for (int i=0;i<ile;i++) {
strcpy(rekord[i].Lokalizacja,temp[i].Lokalizacja);
rekord[i].RozmiarDzialki=temp[i].RozmiarDzialki;
rekord[i].LiczbaPokoi=temp[i].LiczbaPokoi;
strcpy(rekord[i].Opis,temp[i].Opis);
strcpy(rekord[i].Klasa,temp[i].Klasa);
}
}
for (int i=0; i<ile; i++) {
printf("%d %s %f %d %s %s\n", i, (rekord[i].Lokalizacja), (rekord[i].RozmiarDzialki), (rekord[i].LiczbaPokoi), (rekord[i].Opis), (rekord[i].Klasa) );
}
free(temp);
fclose(plik);
return 0;
}
void WyswietlBaze(void) {
for (int i=0; i<ile; i++) {
printf("%s %f %d %s %s\n", (rekord[i].Lokalizacja), (rekord[i].RozmiarDzialki), (rekord[i].LiczbaPokoi), (rekord[i].Opis), (rekord[i].Klasa) );
}
}
void DodajRekord() {
wpis nowy;
printf("Podaj lokalizacje\n");
scanf("%s", nowy.Lokalizacja);
printf("Podaj rozmiar dzialki\n");
while(0==scanf("%f", &nowy.RozmiarDzialki)){
printf("Wartosc niepoprawna");
scanf("%*s");
}
printf("Podaj liczbe pokoi\n");
while(0==scanf("%d", &nowy.LiczbaPokoi)){
printf("Wartosc niepoprawna");
scanf("%*s");}
printf("Podaj opis budynku\n");
scanf("%s", nowy.Opis);
printf("Podaj klase budynku\n");
scanf("%s", nowy.Klasa);
temp=(wpis*) malloc(ile*sizeof(struct record));
for (int i=0;i<ile;i++) {
strcpy(temp[i].Lokalizacja,rekord[i].Lokalizacja);
temp[i].RozmiarDzialki=rekord[i].RozmiarDzialki;
temp[i].LiczbaPokoi=rekord[i].LiczbaPokoi;
strcpy(temp[i].Opis,rekord[i].Opis);
strcpy(temp[i].Klasa,rekord[i].Klasa);
}
rekord=realloc(rekord, ((ile+2)*sizeof(struct record)));
for (int i=0;i<ile;i++) {
strcpy(rekord[i].Lokalizacja,temp[i].Lokalizacja);
rekord[i].RozmiarDzialki=temp[i].RozmiarDzialki;
rekord[i].LiczbaPokoi=temp[i].LiczbaPokoi;
strcpy(rekord[i].Opis,temp[i].Opis);
strcpy(rekord[i].Klasa,temp[i].Klasa);
}
strcpy(rekord[ile].Lokalizacja,nowy.Lokalizacja);
rekord[ile].RozmiarDzialki=nowy.RozmiarDzialki;
rekord[ile].LiczbaPokoi=nowy.LiczbaPokoi;
strcpy(rekord[ile].Opis,nowy.Opis);
strcpy(rekord[ile].Klasa,nowy.Klasa);
ile++;
free(temp);
}
void UsunRekord ( ){
printf("Podaj numer rekordu ktory chcesz usunac\n");
int numer=0;
int correct=0;
while(correct==0){
while(0==scanf("%d", &numer)){
printf("Wartosc niepoprawna");
scanf("%*s"); }
if(numer<0 || numer>ile) {
correct=0;
printf("Wartosc niepoprawna");
}
else {
correct=1;
}
}
numer--;
printf("%d\n %d\n", ile, numer);
int k=0;
temp=(wpis*) malloc((ile+1)*sizeof(struct record));
printf("%d", ile);
for(int i=0;k<ile;i++){
if(i>=numer){
k=i+1;
}else k=i;
printf("%d %d\n", k, i);
strcpy(temp[i].Lokalizacja,rekord[k].Lokalizacja);
temp[i].RozmiarDzialki=rekord[k].RozmiarDzialki;
temp[i].LiczbaPokoi=rekord[k].LiczbaPokoi;
strcpy(temp[i].Opis,rekord[k].Opis);
strcpy(temp[i].Klasa,rekord[k].Klasa);
}
ile--;
rekord=realloc(rekord, ((ile)*sizeof(struct record)));
for(int i=0;i<ile;i++){
strcpy(rekord[i].Lokalizacja,temp[i].Lokalizacja);
rekord[i].RozmiarDzialki=temp[i].RozmiarDzialki;
rekord[i].LiczbaPokoi=temp[i].LiczbaPokoi;
strcpy(rekord[i].Opis,temp[i].Opis);
strcpy(rekord[i].Klasa,temp[i].Klasa);
}
free(temp);
printf("%d\n",ile);
}