Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pch.h"
- #include <iostream>
- #include <fstream>
- #include <string>
- using namespace std;
- struct dane
- {
- int godzina1;///<godziny trwania zajęć
- int minuta1;///<godziny trwania zajęć
- int godzina2;///<godziny trwania zajęć
- int minuta2;///<godziny trwania zajęć
- string dzien;///<dzień tygodnia
- string grupa;///<numer grupy
- string nazwisko;
- string przedmiot;///<przedmiot prowadzącego
- dane *nastepny;
- dane();
- };
- struct prowadzacy
- {
- string nazwisko;
- prowadzacy *next;
- dane *pierwszy;
- prowadzacy();
- };
- dane::dane() {
- nastepny = nullptr;
- }
- prowadzacy::prowadzacy() {
- pierwszy = nullptr;
- next = nullptr;
- }
- // rozbija na godziny i minuty
- //converty działają poprawnie
- int convert1(string s1)
- {
- string temp = s1.erase(2, 9);
- int i = atoi(temp.c_str());
- return i;
- }
- int convert2(string s1)
- {
- string temp = s1.erase(0, 3);
- temp = temp.erase(2, 6);
- int i = atoi(temp.c_str());
- return i;
- }
- int convert3(string s1)
- {
- string temp = s1.erase(0, 6);
- temp = temp.erase(2, 3);
- int i = atoi(temp.c_str());
- return i;
- }
- int convert4(string s1)
- {
- string temp = s1.erase(0, 9);
- int i = atoi(temp.c_str());
- return i;
- }
- //to jest do sortowania(póki co nie ważne)
- int convert5(string s1)
- {
- if (s1 == "pn") s1 = "1";
- if (s1 == "wt") s1 = "2";
- if (s1 == "sr") s1 = "3";
- if (s1 == "cz") s1 = "4";
- if (s1 == "pt") s1 = "5";
- if (s1 == "sb") s1 = "6";
- if (s1 == "nd") s1 = "7";
- cout << "convert5" << endl;
- int i = atoi(s1.c_str());
- return i;
- }
- //jeżeli nazwisko z listy prowadzących jest takie samo jak nazwisko z pliku zwraca true, jak nie to false
- bool przeszukaj_prowadzacy1(prowadzacy*head_prow,string nazwisko)
- {
- while(head_prow)
- {
- if(head_prow->nazwisko==nazwisko)
- {
- cout << "Return true" << endl;
- return true;
- }
- else
- head_prow = head_prow->next;
- }
- cout << "Return false" << endl;
- return false;
- }
- //przeszukuje listę prowadzących, jak nazwisko prowadzącego jest takie samo jak nazwisko z pliku zwraca wskaźnik na ten element(head)
- prowadzacy *przeszukaj_prowadzacy2(prowadzacy*head_prow, string nazwisko)
- {
- while (head_prow)
- {
- if (head_prow->nazwisko ==nazwisko)
- {
- cout << "Return head_prow" << endl;
- return head_prow;
- }
- else
- head_prow = head_prow->next;
- }
- cout << "Return nullptr" << endl;
- return nullptr;
- }
- //dodaje na poczatek dane, tu się pewnie sypie
- dane* dodaj_dane(/*head_prow->pierwszy*/dane*&glowa_dane,int godzina1,int minuta1,int godzina2,int minuta2,string dzien,string grupa,string przedmiot)
- {
- //gdzies tu lezy problem - możliwe że glowa_dane
- //nowe dane
- dane*nowy = new dane;
- nowy->godzina1 = godzina1;
- nowy->minuta1 = minuta1;
- nowy->godzina2 = godzina2;
- nowy->minuta2= minuta2;
- nowy->dzien = dzien;
- nowy->grupa = grupa;
- nowy->przedmiot = przedmiot;
- if (glowa_dane==nullptr)
- {
- nowy->nastepny = nullptr;
- glowa_dane = nowy;
- }
- else
- {
- nowy->nastepny = glowa_dane;
- glowa_dane = nowy;
- }
- cout << "Dodaj dane" << endl;
- return nowy;
- }
- //dodaje prowadzącego na początek listy, dla prowadzących działa ok, dla danych nie
- void dodaj_prowadzacego(prowadzacy*&head_prow/*,dane*&glowa_dane*/, int godzina1, int minuta1, int godzina2, int minuta2,string dzien,string grupa,string nazwisko,string przedmiot)
- {
- prowadzacy *nowy = new prowadzacy;//nowy prowadzacy
- nowy->nazwisko = nazwisko;//nowe nazwisko
- nowy->pierwszy = dodaj_dane(/*glowa_dane,*/ godzina1, minuta1, godzina2, minuta2, dzien, grupa, przedmiot);
- if (head_prow == nullptr)
- {
- nowy->next = nullptr;
- head_prow = nowy;
- }
- else
- {
- nowy->next = head_prow;
- head_prow = nowy;
- }
- cout << "Dodaj prowadzacego" << endl;
- }
- //sprawdzałem czy dobrze czytało z pliku do tablicy
- void wyswietlanie(string tabword[])
- {
- for (int i = 0; i < 5; i++)
- {
- cout<<i<<" "<< tabword[i] << endl;
- }
- }
- //to wiadomo
- void wyswietlanie_danych(dane*glowa_dane)
- {
- while (glowa_dane)
- {
- cout << "***" << glowa_dane->godzina1 << ":" << glowa_dane->minuta1 << "-" << glowa_dane->godzina2 << ":" << glowa_dane->minuta2;
- cout << "***" << glowa_dane->dzien;
- cout << "***" << glowa_dane->grupa;
- cout << "***" << glowa_dane->przedmiot << endl;
- glowa_dane = glowa_dane->nastepny;
- }
- }
- //to wiadomo
- void wyswietlanie_listy(prowadzacy*head_prow,dane*glowa_dane)
- {
- while(head_prow)
- {
- cout <<'*'<< head_prow->nazwisko << endl;
- wyswietlanie_danych(glowa_dane);
- head_prow = head_prow->next;
- }
- }
- //to wiadomo
- void usun_dane(dane*&glowa_dane)
- {
- while(glowa_dane)
- {
- dane*nast = glowa_dane->nastepny;
- delete glowa_dane;
- glowa_dane = nast;
- }
- }
- //to wiadomo
- void usun_prowadzacego(prowadzacy*&head_prow)
- {
- while (head_prow)
- {
- prowadzacy*nast = head_prow->next;
- delete head_prow;
- head_prow = nast;
- }
- }
- //czyta z pliku
- void czytaj(prowadzacy *&head_prow/*,dane*&glowa_dane*/)
- {
- fstream file;
- file.open("dane.txt", ios::in);
- if (!file.is_open())
- {
- cout << "Nie mozna otworzyc pliku." << endl;
- }
- string word;
- string tabword[5];//tablica stringów
- int licznik_odczyt=0;
- while (file >> word)//póki w pliku istnieje słowo do odczytania
- {
- tabword[licznik_odczyt] = word;//przypisuje sobie słowo
- licznik_odczyt++;//inkrementuje licznik
- if (licznik_odczyt % 5 == 0)//jeśli będzie 5 słów(tyle jest w lini), przejdź dalej
- {
- //wyswietlanie(tabword);
- cout << "_____________Czytaj" << endl;
- licznik_odczyt = 0;
- if (head_prow == nullptr)//jesli nic w niej nie ma
- {
- //tu jest tak dużo zmiennych bo rozbijam osobno na godziny i miunty
- dodaj_prowadzacego(head_prow/*,glowa_dane*/,convert1(tabword[0]), convert2(tabword[0]), convert3(tabword[0]), convert4(tabword[0]),tabword[1],tabword[2],tabword[3],tabword[4]);
- cout << "Pierwsze nazwisko" << endl;
- }
- else if (przeszukaj_prowadzacy1(head_prow, tabword[3]) == false)//jesli nazwiska tam nie ma
- {
- dodaj_prowadzacego(head_prow, /*glowa_dane,*/ convert1(tabword[0]), convert2(tabword[0]), convert3(tabword[0]), convert4(tabword[0]), tabword[1], tabword[2], tabword[3], tabword[4]);
- cout << "Nowe nazwisko niepowtorzone" << endl;
- }
- else if (przeszukaj_prowadzacy1(head_prow, tabword[3]) == true) //jesli nazwisko tam jest
- {
- prowadzacy*pom = head_prow;
- przeszukaj_prowadzacy2(head_prow, tabword[3])->pierwszy=glowa_dane;
- dodaj_dane(glowa_dane, convert1(tabword[0]), convert2(tabword[0]), convert3(tabword[0]), convert4(tabword[0]), tabword[1], tabword[2], tabword[4]);
- head_prow = pom;
- cout << "Nazwisko jest w liscie" << endl;
- }
- }
- }
- file.close();
- }
- //póki co nie działa dobrze
- void zapisz(prowadzacy*&head_prow,dane*&glowa_dane)// to sie nie wykonuje
- {
- fstream plik;
- while(head_prow)
- {
- dane*temp = glowa_dane;
- plik.open(head_prow->nazwisko + " .txt", ios::out | ios::trunc);
- while (temp)
- {
- plik << temp->godzina1 << ":";
- plik << temp->minuta1 << "-";
- plik << temp->godzina2 << ":";
- plik << temp->minuta2 << " ";
- plik << temp->dzien << " ";
- plik << temp->grupa << " ";
- plik << temp->przedmiot << endl;
- temp = temp ->nastepny;
- cout << "Ciach" << endl;
- }
- glowa_dane = temp;
- plik.close();
- head_prow=head_prow->next;
- cout << "Mach" << endl;
- }
- }
- int main()
- {
- //wydaje mi się że mi tworzy 1 listę danych, a wskaźnik prowadzącego na 1 element danych się nadpisuje z każdym dodanym elementem
- prowadzacy*phead_prow = nullptr;
- dane*pglowa_dane = nullptr;
- czytaj(phead_prow, pglowa_dane);
- wyswietlanie_listy(phead_prow,pglowa_dane);
- zapisz(phead_prow, pglowa_dane);
- usun_dane(pglowa_dane);
- usun_prowadzacego(phead_prow);
- cout << "Koniec";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement