Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <fstream>
- #include <cstdlib>
- #include "struktury2.h"
- #include "funkcje2.h"
- #include <crtdbg.h>
- #include <conio.h>
- #define _CRTDBG_MAP_ALLOC
- #define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
- bool PorownywanieLekcji(lekcja* obecna, lekcja* nowa)
- {
- if (obecna->dayofweek > nowa->dayofweek) return true;
- else if (obecna->dayofweek < nowa->dayofweek) return false;
- else // ten sam dzien tygodnia
- if (obecna->godz_rozp > nowa->godz_rozp) return true;
- else if (obecna->godz_rozp < nowa->godz_rozp) return false;
- else // ta sama godzina rozpoczecia
- if (obecna->min_rozp > nowa->min_rozp) return true;
- else if (obecna->min_rozp < nowa->min_rozp) return false;
- else return false;
- }
- void Tworzenie_Lekcji(lekcja* &pHead2, int godz_rozp, int min_rozp, int godz_zak, int min_zak, dzien dzien_dzien, std::string grupa, std::string przedmiot)
- {
- //wyciek pamieci
- lekcja* nowa = new lekcja{ godz_rozp, min_rozp, godz_zak, min_zak, dzien_dzien, grupa, przedmiot, nullptr };
- // dla pustej listy
- if (pHead2 == nullptr)
- pHead2 = nowa;
- else {
- lekcja* obecna = pHead2;
- lekcja* poprzednia = nullptr;
- while (obecna != nullptr)
- {
- if (PorownywanieLekcji(obecna, nowa))
- {
- break;
- }
- else
- {
- poprzednia = obecna;
- obecna = obecna->pNext2;
- }
- }
- if (obecna == pHead2) // element jako pGlowa (gdzie lista niepusta)
- {
- nowa->pNext2 = pHead2;
- pHead2 = nowa;
- }
- else // element po pGlowie (gdzie lista niepusta)
- {
- nowa->pNext2 = obecna;
- poprzednia->pNext2= nowa;
- }
- }
- }
- void DodajProwadzacych(prowadzacy*& pHead, std::string nameoffile)
- {
- std::fstream plik;
- char porzuc;
- int hourofstart;
- int minofstart;
- int hourofend;
- int minofend;
- std::string surname;
- std::string day;
- std::string group;
- std::string subject;
- dzien dzien_dzien;
- plik.open(nameoffile, std::ios::in);
- if (plik.good() == true)
- {
- while (!plik.eof())
- {
- plik >> hourofstart;
- plik >> porzuc;
- plik >> minofstart;
- plik >> porzuc;
- plik >> hourofend;
- plik >> porzuc;
- plik >> minofend;
- plik >> day;
- if (day == "pn")
- dzien_dzien = dzien::pn;
- else if (day == "wt")
- dzien_dzien = dzien::wt;
- else if (day == "sr")
- dzien_dzien = dzien::sr;
- else if (day == "cz")
- dzien_dzien = dzien::cz;
- else if (day == "pt")
- dzien_dzien = dzien::pt;
- else if (day == "sb")
- dzien_dzien = dzien::sb;
- else if (day == "nd")
- dzien_dzien = dzien::nd;
- else
- {
- std::cout << "W pliku jest niepoprawna nazwa dnia tygodnia" << std::endl;
- break;
- }
- plik >> group;
- plik >> surname;
- plik >> subject;
- if (not pHead) // lista pusta
- {
- pHead = new prowadzacy{ surname, nullptr, nullptr};
- Tworzenie_Lekcji(pHead->pH, hourofstart, minofstart, hourofend, minofend, dzien_dzien, group, subject );
- }
- else
- {
- int end = 1;
- prowadzacy* temp = pHead;
- while (temp != nullptr)
- {
- if (temp->nazwisko == surname)
- {
- end = 0;
- break;
- }
- temp = temp->pNext;
- }
- if (end == 0)
- {
- Tworzenie_Lekcji(temp->pH, hourofstart, minofstart, hourofend, minofend, dzien_dzien, group, subject);
- }
- else {
- auto p = pHead;
- if (pHead) {
- while (p->pNext)
- p = p->pNext;
- }
- if (p) {
- p->pNext = new prowadzacy{ surname, nullptr, nullptr };
- Tworzenie_Lekcji(p->pNext->pH, hourofstart, minofstart, hourofend, minofend, dzien_dzien, group, subject);
- }
- }
- }
- } plik.close();
- }
- else std::cout << "Nie udalo sie otworzyc pliku" << std::endl;
- }
- void WpiszPlanDoPliku(prowadzacy* &pHead)
- {
- prowadzacy* p = pHead;
- while (p)
- {
- lekcja* p2 = p->pH;
- while (p2)
- {
- std::string nameoffile = p->nazwisko + ".txt";
- std::ofstream plik;
- plik.open(nameoffile, std::ios::app);
- if (plik.good() == true)
- {
- if (p2->godz_rozp < 10)
- plik << "0" << p2->godz_rozp << ":";
- else
- plik << p2->godz_rozp << ":";
- if (p2->min_rozp < 10)
- plik << "0" << p2->min_rozp << "-";
- else
- plik << p2->min_rozp << "-";
- if (p2->godz_zak < 10)
- plik << "0" << p2->godz_zak << ":";
- else
- plik << p2->godz_zak << ":";
- if (p2->min_zak < 10)
- plik << "0" << p2->min_zak << " ";
- else
- plik << p2->min_zak << " ";
- if (p2->dayofweek == dzien::pn)
- plik << "pn" << " ";
- else if (p2->dayofweek == dzien::wt)
- plik << "wt" << " ";
- else if (p2->dayofweek == dzien::sr)
- plik << "sr" << " ";
- else if (p2->dayofweek == dzien::cz)
- plik << "cz" << " ";
- else if (p2->dayofweek == dzien::pt)
- plik << "pt" << " ";
- else if (p2->dayofweek == dzien::sb)
- plik << "sb" << " ";
- else if (p2->dayofweek == dzien::nd)
- plik << "nd" << " ";
- plik << p2->grupa << " " << p2->przedmiot << std::endl;
- p2 = p2->pNext2;
- plik.close();
- }
- else std::cout << "Nie udalo sie otworzyc pliku";
- }
- p = p->pNext;
- }
- }
- void UsunListy(prowadzacy*& pHead)
- {
- while(pHead){
- while (pHead->pH)
- {
- auto p = pHead->pH->pNext2;
- delete pHead->pH;
- pHead->pH = p;
- }
- auto p = pHead->pNext;
- delete pHead;
- pHead = p;
- }
- }
- int main(int argc, char** argv)
- {
- std::string param = "-i";
- std::string nazwaplikuwejsciowego;
- // nazwaplikuwejsciowego = "plan2.txt";
- int end = 0;
- if (argc == 3)
- {
- for (int i = 0; i < argc; i++)
- {
- if (param == argv[i])
- {
- i++;
- nazwaplikuwejsciowego = argv[i];
- end = 0;
- break;
- }
- else end = 1;
- }
- if (end)
- {
- std::cout << "podaj poprawne przelaczniki" << std::endl;
- return 0;
- }
- }
- else
- {
- std::cout << "podaj poprawna liczbe przelacznikow" << std::endl;
- return 0;
- }
- prowadzacy* pGlowa = nullptr;
- DodajProwadzacych(pGlowa, nazwaplikuwejsciowego);
- WpiszPlanDoPliku(pGlowa);
- UsunListy(pGlowa);
- delete pGlowa;
- std::cout << "----" << std::endl;
- std::cout<< _CrtDumpMemoryLeaks();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement