Don't like ads? PRO users don't see any ads ;-)
Guest

rpk

By: a guest on May 26th, 2012  |  syntax: C  |  size: 5.06 KB  |  hits: 17  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include "naglowek.h"
  5.  
  6. struct record *rekord;
  7. struct record *temp;
  8. typedef struct record wpis;
  9. FILE *plik;
  10. char Directory[256]={0};
  11. int ile=0;
  12.  
  13.  
  14. int WczytajBazeZPliku(){
  15. printf("Podaj sciezke do pliku:\n");
  16. scanf("%s", Directory);
  17.  
  18. FILE *plik = fopen(Directory, "r");
  19.  
  20. if(plik==NULL){
  21.         printf("Podany plik nie istnieje\n");
  22.         return -1;}
  23. else{
  24.         printf("Plik otwarty pomyslnie\n");
  25. }
  26.  
  27. int ilosc=0;
  28. int correct=0;
  29. ile=0;
  30. while (correct==0){
  31.         printf("Ile rekordow chcesz wprowadzic do bazy danych?\n");
  32.                 if (0==scanf("%d",&ilosc)){
  33.                         printf("Podales wartosc nieliczbowa\nSproboj ponownie\n");
  34.                         scanf("%*s");}
  35.                 else{
  36.         if(ilosc>0){
  37.                 printf("Do bazy danych zostanie wprowadzone %d rekordow\nJesli podana wartosc przekracza liczbe rekordow  w pliku, wartosc ta zostanie zmniejszona\n",ilosc);
  38.                 correct=1;}
  39.         else   
  40.                 printf("Podales wartosc ujemna, sprobuj ponownie\n");
  41. }}
  42. int a=5;
  43. ile=0;
  44. rekord=(wpis*) malloc((ilosc+1)*sizeof(struct record));
  45. while(!feof(plik) && ile<ilosc && a==5){
  46.         a=fscanf(plik,"%s %f %d %s %s", (rekord[ile].Lokalizacja), (&rekord[ile].RozmiarDzialki), (&rekord[ile].LiczbaPokoi), (rekord[ile].Opis), (rekord[ile].Klasa) );
  47. printf("%d %d ",a ,ile);
  48. printf("%s %f %d %s %s\n", (rekord[ile].Lokalizacja), (rekord[ile].RozmiarDzialki), (rekord[ile].LiczbaPokoi), (rekord[ile].Opis), (rekord[ile].Klasa) );
  49. ile++;
  50.  
  51. if (a!=5) {
  52.         printf("Błąd odczytu w linii %d\nDo bazy wprowadzono %d rekordow\n", ile+1, --ile);
  53. break;
  54. }
  55. }
  56. if (ile<ilosc){
  57.         temp=(wpis*) malloc(ile*sizeof(struct record));
  58.         for (int i=0;i<ile;i++) {
  59.                 strcpy(temp[i].Lokalizacja,rekord[i].Lokalizacja);             
  60.                 temp[i].RozmiarDzialki=rekord[i].RozmiarDzialki;
  61.                 temp[i].LiczbaPokoi=rekord[i].LiczbaPokoi;
  62.                 strcpy(temp[i].Opis,rekord[i].Opis);
  63.                 strcpy(temp[i].Klasa,rekord[i].Klasa);
  64.         }
  65.         rekord=realloc(rekord, ((ile+1)*sizeof(struct record)));
  66.         for (int i=0;i<ile;i++) {
  67.                 strcpy(rekord[i].Lokalizacja,temp[i].Lokalizacja);
  68.                 rekord[i].RozmiarDzialki=temp[i].RozmiarDzialki;
  69.                 rekord[i].LiczbaPokoi=temp[i].LiczbaPokoi;
  70.                 strcpy(rekord[i].Opis,temp[i].Opis);
  71.                 strcpy(rekord[i].Klasa,temp[i].Klasa);
  72.         }
  73.  
  74. }
  75. for (int i=0; i<ile; i++)  {
  76. printf("%d %s %f %d %s %s\n", i, (rekord[i].Lokalizacja), (rekord[i].RozmiarDzialki), (rekord[i].LiczbaPokoi), (rekord[i].Opis), (rekord[i].Klasa) );
  77. }
  78. free(temp);
  79. fclose(plik);
  80. return 0;
  81. }
  82.  
  83. void WyswietlBaze(void) {
  84.  
  85. for (int i=0; i<ile; i++)  {
  86. printf("%s %f %d %s %s\n", (rekord[i].Lokalizacja), (rekord[i].RozmiarDzialki), (rekord[i].LiczbaPokoi), (rekord[i].Opis), (rekord[i].Klasa) );
  87. }
  88. }
  89.  
  90. void DodajRekord() {
  91.  
  92. wpis nowy;
  93.  
  94. printf("Podaj lokalizacje\n");
  95. scanf("%s", nowy.Lokalizacja);
  96. printf("Podaj rozmiar dzialki\n");
  97.  
  98. while(0==scanf("%f", &nowy.RozmiarDzialki)){
  99.         printf("Wartosc niepoprawna");
  100.         scanf("%*s");
  101. }
  102.  
  103. printf("Podaj liczbe pokoi\n");
  104.  
  105. while(0==scanf("%d", &nowy.LiczbaPokoi)){
  106.         printf("Wartosc niepoprawna");
  107.         scanf("%*s");}
  108.  
  109. printf("Podaj opis budynku\n");
  110. scanf("%s", nowy.Opis);
  111. printf("Podaj klase budynku\n");
  112. scanf("%s", nowy.Klasa);
  113.  
  114. temp=(wpis*) malloc(ile*sizeof(struct record));
  115.  
  116. for (int i=0;i<ile;i++) {
  117.         strcpy(temp[i].Lokalizacja,rekord[i].Lokalizacja);             
  118.         temp[i].RozmiarDzialki=rekord[i].RozmiarDzialki;
  119.         temp[i].LiczbaPokoi=rekord[i].LiczbaPokoi;
  120.         strcpy(temp[i].Opis,rekord[i].Opis);
  121.         strcpy(temp[i].Klasa,rekord[i].Klasa);
  122. }
  123.  
  124.  
  125. rekord=realloc(rekord, ((ile+2)*sizeof(struct record)));
  126. for (int i=0;i<ile;i++) {
  127.         strcpy(rekord[i].Lokalizacja,temp[i].Lokalizacja);
  128.         rekord[i].RozmiarDzialki=temp[i].RozmiarDzialki;
  129.         rekord[i].LiczbaPokoi=temp[i].LiczbaPokoi;
  130.         strcpy(rekord[i].Opis,temp[i].Opis);
  131.         strcpy(rekord[i].Klasa,temp[i].Klasa);
  132. }
  133.  
  134. strcpy(rekord[ile].Lokalizacja,nowy.Lokalizacja);
  135. rekord[ile].RozmiarDzialki=nowy.RozmiarDzialki;
  136. rekord[ile].LiczbaPokoi=nowy.LiczbaPokoi;
  137. strcpy(rekord[ile].Opis,nowy.Opis);
  138. strcpy(rekord[ile].Klasa,nowy.Klasa);
  139. ile++;
  140.  
  141. free(temp);
  142. }
  143.  
  144. void UsunRekord (  ){
  145. printf("Podaj numer rekordu ktory chcesz usunac\n");
  146. int numer=0;
  147.  
  148.  
  149. int correct=0;
  150. while(correct==0){
  151.  while(0==scanf("%d", &numer)){
  152.         printf("Wartosc niepoprawna");
  153.         scanf("%*s"); }
  154.        
  155.         if(numer<0 || numer>ile) {
  156.                 correct=0;
  157.                 printf("Wartosc niepoprawna");
  158.         }
  159.         else {
  160.                 correct=1;
  161.         }
  162. }
  163.  
  164. numer--;
  165.  
  166. printf("%d\n %d\n", ile, numer);
  167. int k=0;
  168. temp=(wpis*) malloc((ile+1)*sizeof(struct record));
  169.  
  170. printf("%d", ile);
  171. for(int i=0;k<ile;i++){
  172.         if(i>=numer){
  173.                 k=i+1;
  174.         }else k=i;
  175.         printf("%d %d\n", k, i);
  176.         strcpy(temp[i].Lokalizacja,rekord[k].Lokalizacja);             
  177.         temp[i].RozmiarDzialki=rekord[k].RozmiarDzialki;
  178.         temp[i].LiczbaPokoi=rekord[k].LiczbaPokoi;
  179.         strcpy(temp[i].Opis,rekord[k].Opis);
  180.         strcpy(temp[i].Klasa,rekord[k].Klasa);
  181. }
  182. ile--;
  183. rekord=realloc(rekord, ((ile)*sizeof(struct record)));
  184.  
  185. for(int i=0;i<ile;i++){
  186.         strcpy(rekord[i].Lokalizacja,temp[i].Lokalizacja);
  187.         rekord[i].RozmiarDzialki=temp[i].RozmiarDzialki;
  188.         rekord[i].LiczbaPokoi=temp[i].LiczbaPokoi;
  189.         strcpy(rekord[i].Opis,temp[i].Opis);
  190.         strcpy(rekord[i].Klasa,temp[i].Klasa);
  191.  
  192.  
  193. }
  194. free(temp);
  195. printf("%d\n",ile);
  196. }