Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include<string.h>
- #include<ctype.h>
- struct rekord
- {
- int id;
- char imie[16];
- char nazwisko[32];
- char numer[10];
- char wiek[3];
- char miejscowosc[32];
- char dostawca[16];
- struct rekord *next;
- };
- char dostawcy[4][17];
- struct rekord *poczatek = NULL; //wskaznik na poczatek listy
- //DEKLARACJE FUNKCJI
- void wypisz_dostawcow();
- struct rekord *szukaj_id(int id);
- void wyswietl();
- int dodaj_rekord();
- void usun_wszystko();
- int usun_rekord();
- int edycja_rekordu();
- int zapisz();
- void wypisz_rekord(struct rekord *rekord);
- int koniec();
- int wczytaj();
- void dostaw();
- void usun_dost(int ktory);
- void edycja_dost(int ktory);
- void wyswietl_dost();
- void dodaj_list(struct rekord *rekord);
- int edycja_z_usuwaniem()
- {
- struct rekord *rekord;
- char name[16], surname[32], number[10], age[3], city[32];
- int ids, dost, i=0;
- printf("Podaj id rekordu ktory chcesz edytowac: \n");
- scanf("%d", &ids);
- while(getchar()!='\n');
- rekord = szukaj_id(ids);
- if(rekord == NULL)
- puts("Nie ma takiego rekordu");
- printf("Podaj imie: \n");
- scanf("%s", name); //sprawdz co to znaczy
- while(getchar()!='\n');
- //zabawa z wielkosciami liter
- if( name[i] >= 'a' && name[i] <= 'z') name[i]=toupper(name[i]); //jak pierwsza litera mala to robimy wielka
- for(i=1; i < strlen(name); i++)
- {
- if ( name[i] < 'a' || name[i] > 'z')
- {
- printf("Blednie wpisane dane. \n");
- return 1;
- }
- }
- // NAZWISKO
- i=0;
- printf("Podaj nazwisko: \n");
- scanf("%s", surname); //sprawdz co to znaczy
- while(getchar()!='\n');
- if (surname[i] >= 'a' && surname[i] <= 'z') surname[i]=toupper(surname[i]); //jak pierwsza litera mala to robimy wielka
- /*if (surname[i] < 'A' || surname[i] > 'Z')
- {
- printf("Blednie wpisane dane. 1\n");
- return 1;
- }*/
- for(i=1; i < strlen(surname); i++)
- {
- if ( surname[i] < 'a' || surname[i] > 'z')
- {
- printf("Blednie wpisane dane. 2\n");
- return 1;
- }
- }
- i=0;
- printf("Podaj numer: \n");
- scanf("%s", number); //sprawdz co to znaczy
- while(getchar()!='\n');
- while (i<strlen(number))
- {
- if ( number[i] < '0' || number[i] > '9') //w ASCII oczywiscie
- {
- printf("Blednie wpisane dane. \n");
- return 1;
- }
- i++;
- }
- i=0;
- printf("Podaj wiek: \n");
- scanf("%s", age); //sprawdz co to znaczy
- while(getchar()!='\n');
- while (i<strlen(age))
- {
- if ( age[i] < '0' || age[i] > '9') //w ASCII oczywiscie
- {
- printf("Blednie wpisane dane. \n");
- return 1;
- }
- i++;
- }
- i=0;
- printf("Podaj miejscowosc: \n");
- scanf("%s", city); //sprawdz co to znaczy
- while(getchar()!='\n');
- //zabawa z wielkosciami liter
- if (city[i] >= 'a' && city[i] <= 'z') city[i]=city[i]-32; //jak pierwsza litera mala to robimy wielka
- for (i=1; i < strlen(city); i++)
- {
- if ( city[i] < 'a' || city[i] > 'z')
- {
- printf("Blednie wpisane dane. \n");
- return 1;
- }
- }
- printf("Podaj numer dostawcy:\n");
- wyswietl_dost();
- while(scanf("%d", &dost) != 1 || (dost>4 || dost<1))
- {
- printf("Niepoprwany wybor, jeszcze raz.\n");
- }
- while (getchar()!='\n');
- strncpy(rekord->imie, name, 16);
- strncpy(rekord->nazwisko, surname, 32);
- strncpy(rekord->numer, number, 10);
- strncpy(rekord->wiek, age, 3);
- strncpy(rekord->miejscowosc, city, 32);
- strcpy(rekord->dostawca, dostawcy[dost]);
- return 0;
- }
- int dodaj_rekord()
- {
- char name[16];
- char surname[32];
- char number[10];
- char age[3];
- char city[32];
- int id, dost;
- int i=0;
- printf("Podaj numer identyfikacyjny rekordu: \n");
- printf("Podaj ID: ");
- scanf("%d", &id);
- if (getchar()!='\n')
- {
- while(getchar()!='\n');
- return 1;
- }
- if ( id<0 || id>99999 ) return 1;
- if ( szukaj_id(id)!=NULL){printf("Blad jest takei id"); return 2; }//powtarzanie ID
- printf("Podaj imie: \n");
- scanf("%s", name); //sprawdz co to znaczy
- while(getchar()!='\n');
- //zabawa z wielkosciami liter
- if( name[i] >= 'a' && name[i] <= 'z') name[i]=toupper(name[i]); //jak pierwsza litera mala to robimy wielka
- for(i=1; i < strlen(name); i++)
- {
- if ( name[i] < 'a' || name[i] > 'z')
- {
- printf("Blednie wpisane dane. \n");
- return 1;
- }
- }
- // NAZWISKO
- i=0;
- printf("Podaj nazwisko: \n");
- scanf("%s", surname); //sprawdz co to znaczy
- while(getchar()!='\n');
- if (surname[i] >= 'a' && surname[i] <= 'z') surname[i]=toupper(surname[i]); //jak pierwsza litera mala to robimy wielka
- /*if (surname[i] < 'A' || surname[i] > 'Z')
- {
- printf("Blednie wpisane dane. 1\n");
- return 1;
- }*/
- for(i=1; i < strlen(surname); i++)
- {
- if ( surname[i] < 'a' || surname[i] > 'z')
- {
- printf("Blednie wpisane dane. 2\n");
- return 1;
- }
- }
- i=0;
- printf("Podaj numer: \n");
- scanf("%s", number); //sprawdz co to znaczy
- while(getchar()!='\n');
- while (i<strlen(number))
- {
- if ( number[i] < '0' || number[i] > '9') //w ASCII oczywiscie
- {
- printf("Blednie wpisane dane. \n");
- return 1;
- }
- i++;
- }
- i=0;
- printf("Podaj wiek: \n");
- scanf("%s", age); //sprawdz co to znaczy
- while(getchar()!='\n');
- while (i<strlen(age))
- {
- if ( age[i] < '0' || age[i] > '9') //w ASCII oczywiscie
- {
- printf("Blednie wpisane dane. \n");
- return 1;
- }
- i++;
- }
- i=0;
- printf("Podaj miejscowosc: \n");
- scanf("%s", city); //sprawdz co to znaczy
- while(getchar()!='\n');
- //zabawa z wielkosciami liter
- if (city[i] >= 'a' && city[i] <= 'z') city[i]=city[i]-32; //jak pierwsza litera mala to robimy wielka
- for (i=1; i < strlen(city); i++)
- {
- if ( city[i] < 'a' || city[i] > 'z')
- {
- printf("Blednie wpisane dane. \n");
- return 1;
- }
- }
- printf("Podaj numer dostawcy:\n");
- wyswietl_dost();
- while(scanf("%d", &dost) != 1 || (dost>4 || dost<1))
- {
- printf("Niepoprwany wybor, jeszcze raz.\n");
- }
- while (getchar()!='\n');
- //przydzielanie pamieci, dodawanie rekordu i danych do niego
- struct rekord *nowy_rekord;
- nowy_rekord = (struct rekord *)malloc(sizeof(struct rekord));
- strncpy(nowy_rekord->imie, name, 16);
- strncpy(nowy_rekord->nazwisko, surname, 32);
- strncpy(nowy_rekord->numer, number, 10);
- strncpy(nowy_rekord->wiek, age, 3);
- strncpy(nowy_rekord->miejscowosc, city, 32);
- nowy_rekord->id = id;
- strcpy(nowy_rekord->dostawca, dostawcy[dost-1]);
- nowy_rekord->next=NULL;
- //dolaczanie do listy
- struct rekord *current, *prev;
- current = poczatek;
- if (current == NULL)
- {
- poczatek = nowy_rekord;
- return 0;
- }
- while(current != NULL)
- {
- prev = current;
- current = current->next;
- }
- prev->next = nowy_rekord;
- return 0;
- }
- struct rekord *szukaj_id(int ident)
- {
- //szukanie rekordu po ID
- struct rekord *current;
- current = poczatek;
- while ( current != NULL)
- {
- if( current->id == ident) return current;
- current = current->next;
- }
- return NULL; //jak nie znaleziono
- }
- void usun_wszystko()
- {
- //funkcja usuwajaca wszystkie rekordy
- struct rekord *current, *tymczasowy;
- current = poczatek;
- while (current != NULL)
- {
- tymczasowy = current->next;
- free(current);
- current = tymczasowy;
- }
- poczatek = NULL;
- }
- int usun_rekord() //usuwa tylko po ID, ewentualnie sprawdzic czy musi po kazdym polu
- {
- struct rekord *current, *tmp, *tmp1;
- int id;
- printf("Wpisz numer id jakiego chcesz usunac");
- scanf("%d", &id);
- while(getchar() != '\n');
- current = szukaj_id(id);
- tmp = NULL;
- tmp1 = poczatek;
- if(poczatek->next == NULL) //lista pusta
- {
- free(current);
- poczatek=NULL;
- }
- else if (current == poczatek)
- {
- poczatek = current->next;
- free(current);
- return 0;
- }
- else if (current == NULL)
- {
- printf("BLad");
- return 2;
- }
- else
- {
- while(1)
- {
- if(tmp1 == current)
- {
- tmp->next = tmp1->next;
- free(tmp1);
- return 0;
- }
- tmp = tmp1;
- tmp1 = tmp->next;
- }
- }
- return 0;
- }
- void wypisz_rekord(struct rekord *rekord)
- {
- if (rekord == NULL) printf("\n***NULL");
- else printf("\n %s %s | %d | %s | %s | %s | %s", rekord->nazwisko, rekord->imie, rekord->id, rekord->wiek, rekord->numer, rekord->miejscowosc, rekord->dostawca);
- }
- int main()
- {
- strcpy(dostawcy[0], "Idea");
- strcpy(dostawcy[1], "Era");
- strcpy(dostawcy[2], "Play");
- strcpy(dostawcy[3], "Plus");
- strcpy(dostawcy[4], "Tmobile");
- puts("**********************");
- puts(" SPIS TELEFONOW ");
- puts(" TOMASZ CHRZANOWSKI ");
- puts("**********************");
- char menu;
- while(1)
- {
- puts("\nMENU");
- puts("1 Dodaj rekord");
- puts("2 Zmien dane");
- puts("3 Usun rekord");
- puts("4 Wyswietl rekordy");
- puts("5 Usun wszystko");
- puts("6 Edytuj dostawcow");
- puts("s Zapisz");
- puts("o Wczytaj");
- puts("q Zakoncz");
- scanf("%c", &menu);
- if(getchar() == '\n') switch ((int)menu)
- {
- case '1':
- dodaj_rekord();
- break;
- case '2':
- edycja_z_usuwaniem();
- break;
- case '3':
- usun_rekord();
- break;
- case '4':
- wyswietl();
- break;
- case '5':
- usun_wszystko();
- break;
- case '6':
- dostaw();
- break;
- case 's':
- zapisz();
- break;
- case 'o':
- wczytaj();
- break;
- case 'q':
- if(koniec()) return 0;
- break;
- }
- }
- return 0;
- }
- int koniec()
- {
- char tn;
- puts("Czy na pewno chcesz zakonczyc program?");
- tn = getchar();
- if (tn == 't' || tn == 'T') return 1;
- if ( tn != '\n') while ( getchar() != '\n');
- return 0;
- }
- void wyswietl()
- {
- if( poczatek == NULL)
- {
- printf("Baza jest pusta!\n");
- return;
- }
- struct rekord *current;
- current = poczatek;
- printf("\n ______________________________________________");
- printf("\n| Nazwisko i imie . ID . Wiek . Nr Telefonu . Miejscowosc . Dostawca|");
- while(current != NULL)
- {
- printf("\n %-9s %-12s | %03d | %-4s | %-10s | %-10s | %-10s", current->nazwisko, current->imie, current->id, current->wiek, current->numer, current->miejscowosc, current->dostawca);
- current = current->next;
- }
- printf("\n ______________________________________________");
- }
- int zapisz()
- {
- if(poczatek == NULL) {printf("Nie udalo sie odczytac"); return 1; } //nie ma co zapisywac, wychodzimy wypisujemy blad
- char nazwa[16];
- FILE *plik;
- struct rekord *current;
- printf("Podaj nazwe pliku \n");
- scanf("%15s", nazwa);
- while(getchar() != '\n');
- plik = fopen(nazwa, "w");
- int i=0;
- for( i=0; i<5; i++)
- {
- fprintf(plik, "%s\n", dostawcy[i]);
- }
- current = poczatek;
- while(current != NULL)
- {
- fprintf(plik, "%d\n%s\n%s\n%s\n%s\n%s\n%s\n", current->id, current->imie, current->nazwisko, current->wiek, current->numer, current->miejscowosc, current->dostawca);
- current = current->next;
- }
- fclose(plik);
- return 0;
- }
- int wczytaj()
- {
- FILE *plik;
- struct rekord *record;
- char nazwa[16];
- //int i=0, liczba=0;
- printf("Podaj nazwe pliku do odczytania: \n");
- scanf("%15s", nazwa);
- while(getchar() != '\n');
- plik = fopen(nazwa, "r");
- if (plik == NULL)
- {
- printf("Nie udalo sie odczytac pliku \n");
- return 7;
- }
- int id;
- char imie[16], nazwisko[32], numer[10], wiek[3], miejscowosc[32], dostawca[17];
- fscanf(plik, "%s", dostawcy[0]);
- fscanf(plik, "%s", dostawcy[1]);
- fscanf(plik, "%s", dostawcy[2]);
- fscanf(plik, "%s", dostawcy[3]);
- fscanf(plik, "%s", dostawcy[4]);
- while(!feof(plik))
- {
- fscanf(plik, "%d", &id);
- fscanf(plik, "%s", imie);
- fscanf(plik, "%s", nazwisko);
- fscanf(plik, "%s", wiek);
- fscanf(plik, "%s", numer);
- fscanf(plik, "%s", miejscowosc);
- fscanf(plik, "%s", dostawca);
- record = (struct rekord *)malloc(sizeof(struct rekord));
- record->id = id;
- strcpy(record->imie, imie);
- strcpy(record->nazwisko, nazwisko);
- strcpy(record->wiek, wiek);
- strcpy(record->numer, numer);
- strcpy(record->miejscowosc, miejscowosc);
- strcpy(record->dostawca, dostawca);
- record->next = NULL;
- dodaj_list(record);
- }
- fclose(plik);
- return 0;
- }
- void dodaj_list(struct rekord *rekord)
- {
- struct rekord *current, *prev;
- current = poczatek;
- if (current == NULL)
- {
- poczatek = rekord;
- return;
- }
- while(current != NULL)
- {
- prev = current;
- current = current->next;
- }
- prev->next=rekord;
- return;
- }
- void wyswietl_dost()
- {
- int i;
- for(i=0; i<5; i++)
- {
- if(dostawcy[i]!=0)
- printf("%s\n", dostawcy[i]);
- }
- }
- int licz_dost()
- {
- int licznik=0, i=0;
- for(i=0; i<5; i++)
- {
- if(dostawcy[i] != 0) licznik++;
- }
- return licznik;
- }
- void usun_dost(int ktory)
- {
- strcpy(dostawcy[ktory], "0");
- }
- void edycja_dost(int ktory)
- {
- char nowy[17];
- printf("Wpisz nazwe nowego dostawcy");
- scanf("%s", nowy);
- while (getchar()!='\n');
- strcpy(dostawcy[ktory-1], nowy);
- }
- void dostaw()
- {
- int wybor;
- puts("1 Wyswietlanie dostawcow");
- puts("2 Edycja/dodawanie dostawcy");
- puts("3 Usuwanie dostawcy");
- while(scanf("%d", &wybor) != 1 && (wybor>4 || wybor<1))
- {
- printf("Niepoprwany wybor, jeszcze raz.\n");
- }
- while (getchar()!='\n');
- switch(wybor)
- {
- case 1:
- {
- wyswietl_dost();
- break;
- }
- case 2:
- {
- int ktory;
- printf("Ktorego dostawce chcesz edytowac?\n");
- scanf("%d", &ktory);
- while (getchar()!='\n');
- edycja_dost(ktory);
- break;
- }
- case 3:
- {
- int ktor;
- printf("Ktorego dostawce chcesz usunac? \n");
- scanf("%d", &ktor);
- while (getchar()!='\n');
- usun_dost(ktor);
- break;
- }
- }
- }
Add Comment
Please, Sign In to add comment