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>
- struct Data {
- char number[30];
- char name[30];
- char surname[30];
- char group[15];
- };
- struct Element {
- struct Element* next;
- struct Element* last;
- struct Data data;
- };
- void File_error(void) {
- //exit(1);
- printf(" Blad pliku, sprobuj ponownie \n");
- }
- struct Element* New_element(struct Element* last_element) {
- struct Element* new = malloc(sizeof(struct Element));
- new->last = NULL;
- new->next = NULL;
- strcpy(new->data.name, "brak");
- strcpy(new->data.surname, "brak");
- strcpy(new->data.number, "brak");
- strcpy(new->data.group, "brak");
- return new;
- }
- struct Element* Free_element(struct Element* active) {
- struct Element* temp = malloc(sizeof(struct Element));
- temp = active->last;
- free(active);
- return temp;
- }
- void Find(struct Element* active) {
- char find[20], name[30], surname[30];
- char cha;
- char* tab;
- int i = 0;
- struct Element* temp = malloc(sizeof(struct Element));
- temp->last = NULL;
- temp->next = NULL;
- struct Element* temp_active;
- while (1) {
- printf(" Lista znalezionych kontaktow: \n");
- if (i > 0) {
- while (temp->last != NULL) {
- printf(" %s %s %s %s \n", temp->data.name, temp->data.surname, temp->data.number, temp->data.group);
- temp = Free_element(temp);
- }
- }
- printf(" Wpisz dane ktore chcesz wyszukac: \n ");
- cha = _getch(stdin);
- if ( cha == 13) break;
- if ( cha == 8) {
- find[i] = '\o';
- if(i > 0) i--;
- }
- else {
- temp_active = active;
- find[i] = cha;
- for (int j = 0; j <= i; j++) if (find[j] >= 97) find[j] = find[j] - 32; // zamiana malych liter na duze
- while (temp_active->last != NULL) {
- strcpy(name, temp_active->data.name);
- //strcpy(surname, temp_active->data.surname);
- if (strstr(&name, &find) != NULL) {
- printf(" siema \n");
- temp = New_element(temp);
- temp_active->next = temp;
- temp->data = temp_active->data;
- temp->last = temp_active;
- }
- temp_active = temp_active->last;
- }
- for (int k = 0; k <= i; k++) find[k] = find[k] + 32; // zamiana na male litery
- i++;
- }
- for (int l = 0; l < i; l++) {
- printf("%c", find[l]);
- }
- printf("\n");
- }
- while (temp->last != NULL) {
- temp = Free_element(temp);
- }
- free(temp);
- }
- struct Element* Swap(struct Element* Active) {
- if (Active->last != NULL) Active->last->next = Active->next;
- Active->next->last = Active->last;
- Active->last = Active->next;
- Active->next = Active->last->next;
- Active->last->next = Active;
- if (Active->next != NULL) {
- Active->next->last = Active;
- return Active->next;
- }
- else return Active;
- }
- struct Element* Sort(struct Element* Active, int choose) {
- while (Active->last != NULL) {
- int result = 10;
- switch (choose) {
- case 1: {
- result = strcoll(Active->last->data.name, Active->data.name);
- break;
- }
- case 2: {
- result = strcoll(Active->last->data.surname, Active->data.surname);
- break;
- }
- case 3: {
- result = strcoll(Active->last->data.group, Active->data.group);
- break;
- }
- default: {
- printf(" blad strcoll \n");
- break;
- }
- }
- switch ( result ) {
- case 1: {
- Active = Active->last;
- break;
- }
- case -1: {
- Active = Swap(Active->last);
- while (Active->next != NULL) {
- Active = Active->next;
- }
- break;
- }
- case 0: {
- Active = Active->last;
- break;
- }
- default: {
- printf(" blad strcoll \n");
- break;
- }
- }
- }
- while (Active->next != NULL) {
- Active = Active->next;
- }
- return Active;
- }
- void Print_elements(struct Element* active) {
- do {
- printf(" %s %s %s %s \n", active->data.name, active->data.surname, active->data.number, active->data.group);
- active = active->last;
- } while (active->last != NULL);
- printf(" %s %s %s %s \n", active->data.name, active->data.surname, active->data.number, active->data.group);
- }
- struct Element* Add_element(struct Element* active, int sort) {
- struct Element* temp;
- temp = active;
- active = New_element(active);
- temp->next = active;
- active->last = temp;
- printf(" Podaj dane kontaktu \n Imie: \n ");
- scanf(" %s", active->data.name);
- printf(" Nazwisko: \n ");
- scanf(" %s", active->data.surname);
- printf(" Numer: \n ");
- scanf(" %s", active->data.number);
- printf(" Grupa: \n ");
- scanf(" %s", active->data.group);
- if (sort != 0) active = Sort(active, sort);
- return active;
- }
- struct Element* Menu(struct Element* active) {
- int menu = 1, sort_menu, sort = 0;
- while (menu != 0) {
- printf(" Menu \n 1. Wyswietl liste kontaktow \n 2. Sotruj \n 3. Dodaj numer \n 4. Usun kontakt \n 5. Szukaj kontaktu \n 0. Wyjdz \n ");
- if (!scanf(" %d", &menu))
- {
- while ('\n' != getchar());
- }
- else
- {
- switch (menu) {
- case 1: {
- Print_elements(active);
- break;
- }
- case 2: {
- sort_menu = 1;
- while (sort_menu != 0) {
- printf(" Wybierz sposob sortowania: \n 1. Sortowanie wedlug imienia \n 2. Sortowanie wedlug nazwiska \n 3. Sortowanie wedlug grupy \n ");
- if (!scanf(" %d", &sort)) while ('\n' != getchar());
- else {
- if (sort > 0 && sort < 4) {
- active = Sort(active, sort);
- sort_menu = 0;
- }
- else printf("Nie ma takiej mozliwosci, sprobuj ponownie \n ");
- }
- }
- break;
- }
- case 3: {
- active = Add_element(active, sort);
- break;
- }
- case 4: {
- break;
- }
- case 5: {
- Find(active);
- break;
- }
- case 0: {
- break;
- }
- default: {
- printf("Blad switch \n");
- break;
- }
- }
- }
- }
- return active;
- }
- int main() {
- struct Element* active = malloc(sizeof(struct Element));
- active->last = NULL;
- active->next = NULL;
- int i = 0;
- FILE* file = fopen("lista kontaktow.csv", "r");
- if (!file) File_error();
- else {
- while (fscanf(file, " %[^;] ; %[^;] ; %[^;] ; %[^\n] ", active->data.name, active->data.surname, active->data.number, active->data.group) != EOF) {
- struct Element* temp;
- temp = active;
- active = New_element(active);
- temp->next = active;
- active->last = temp;
- }
- fclose(file);
- }
- active->last->next = NULL;
- active = Free_element(active);
- active = Menu(active);
- while (active->last != NULL) {
- active = Free_element(active);
- }
- free(active);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement