SHOW:
|
|
- or go back to the newest paste.
1 | PRACOWNIK.CPP | |
2 | ||
3 | #include "Pracownik.h" | |
4 | ||
5 | using namespace std; | |
6 | ||
7 | Pracownik::Pracownik(const char* imie, const char* nazwisko, int dzien, int miesiac, int rok) : m_DataUrodzenia(dzien, miesiac, rok), m_Imie(imie), m_Nazwisko(nazwisko), m_nIDZatrudnienia(m_nIDZatrudnienia) | |
8 | { | |
9 | } | |
10 | ||
11 | Pracownik::Pracownik(const Pracownik &wzor) : m_nIDZatrudnienia(m_nIDZatrudnienia + 1), m_Imie(wzor.m_Imie), m_Nazwisko(wzor.m_Nazwisko), m_DataUrodzenia(wzor.m_DataUrodzenia) | |
12 | { | |
13 | } | |
14 | ||
15 | Pracownik::~Pracownik() | |
16 | { | |
17 | } | |
18 | ||
19 | const char* Pracownik::Imie() const | |
20 | { | |
21 | return m_Imie.Zwroc(); | |
22 | } | |
23 | ||
24 | const char* Pracownik::Nazwisko() const | |
25 | { | |
26 | return m_Nazwisko.Zwroc(); | |
27 | } | |
28 | ||
29 | void Pracownik::Imie(const char* nowe_imie) | |
30 | { | |
31 | m_Imie.Ustaw(nowe_imie); | |
32 | } | |
33 | ||
34 | void Pracownik::Nazwisko(const char* nowe_nazwisko) | |
35 | { | |
36 | m_Nazwisko.Ustaw(nowe_nazwisko); | |
37 | } | |
38 | ||
39 | void Pracownik::DataUrodzenia(int nowy_dzien, int nowy_miesiac, int nowy_rok) | |
40 | { | |
41 | m_DataUrodzenia.Ustaw(nowy_dzien, nowy_miesiac, nowy_rok); | |
42 | } | |
43 | ||
44 | void Pracownik::Wypisz() const | |
45 | { | |
46 | m_Imie.Wypisz(); | |
47 | cout << '\t'; | |
48 | m_Nazwisko.Wypisz(); | |
49 | cout << '\t'; | |
50 | m_DataUrodzenia.Wypisz(); | |
51 | } | |
52 | ||
53 | void Pracownik::Wpisz() | |
54 | { | |
55 | cout << "Podaj imie : "; | |
56 | m_Imie.Wpisz(); | |
57 | ||
58 | cout << "Podaj nazwisko : "; | |
59 | m_Nazwisko.Wpisz(); | |
60 | ||
61 | cout << "Podaj date urodzenia" << endl; | |
62 | m_DataUrodzenia.Wpisz(); | |
63 | //cout << endl; | |
64 | } | |
65 | ||
66 | int Pracownik::SprawdzImie(const char* por_imie) const | |
67 | { | |
68 | return m_Imie.SprawdzNapis(por_imie); | |
69 | } | |
70 | ||
71 | int Pracownik::SprawdzNazwisko(const char* por_nazwisko) const | |
72 | { | |
73 | return m_Nazwisko.SprawdzNapis(por_nazwisko); | |
74 | } | |
75 | ||
76 | int Pracownik::Porownaj(const Pracownik& wzorzec) const | |
77 | { | |
78 | if (wzorzec.SprawdzNazwisko(m_Nazwisko.Zwroc()) == 0) | |
79 | { | |
80 | if (wzorzec.SprawdzNazwisko(m_Nazwisko.Zwroc()) == 0) | |
81 | { | |
82 | if (wzorzec.m_DataUrodzenia.Porownaj(m_DataUrodzenia) == 0) | |
83 | { | |
84 | return 0; | |
85 | } | |
86 | else | |
87 | { | |
88 | if (wzorzec.m_DataUrodzenia.Porownaj(m_DataUrodzenia) > 0) | |
89 | { | |
90 | return 1; | |
91 | } | |
92 | else | |
93 | { | |
94 | return -1; | |
95 | } | |
96 | } | |
97 | } | |
98 | else | |
99 | { | |
100 | if (wzorzec.SprawdzNazwisko(m_Nazwisko.Zwroc()) > 0) | |
101 | { | |
102 | return 1; | |
103 | } | |
104 | else | |
105 | { | |
106 | return -1; | |
107 | } | |
108 | } | |
109 | } | |
110 | else | |
111 | { | |
112 | if (wzorzec.SprawdzNazwisko(m_Nazwisko.Zwroc()) > 0) | |
113 | { | |
114 | return 1; | |
115 | } | |
116 | else | |
117 | { | |
118 | return -1; | |
119 | } | |
120 | } | |
121 | } | |
122 | ||
123 | Pracownik& Pracownik::operator=(const Pracownik &wzor) | |
124 | { | |
125 | if (this == &wzor) | |
126 | return *this; | |
127 | m_DataUrodzenia = wzor.m_DataUrodzenia; | |
128 | m_Imie = wzor.m_Imie; | |
129 | m_Nazwisko = wzor.m_Nazwisko; | |
130 | } | |
131 | ||
132 | bool Pracownik::operator == (const Pracownik &wzor) const | |
133 | { | |
134 | if (this == &wzor) | |
135 | return true; | |
136 | if (this->Porownaj(wzor) == 0) | |
137 | return true; | |
138 | else | |
139 | return false; | |
140 | } | |
141 | ||
142 | ostream &operator<<(ostream& wy, const Pracownik &p) | |
143 | { | |
144 | wy << p.m_Imie << endl << p.m_Nazwisko << endl << p.m_DataUrodzenia; | |
145 | return wy; | |
146 | } | |
147 | ||
148 | istream &operator >> (istream& we, Pracownik &p) | |
149 | { | |
150 | we >> p.m_Imie >> p.m_Nazwisko >> p.m_DataUrodzenia; | |
151 | return we; | |
152 | } | |
153 | void Pracownik::WypiszDane() | |
154 | { | |
155 | m_Imie.Wypisz(); | |
156 | cout << ' '; | |
157 | m_Nazwisko.Wypisz(); | |
158 | cout << ' '; | |
159 | m_DataUrodzenia.Wypisz(); | |
160 | } | |
161 | ||
162 | Pracownik* Pracownik::KopiaObiektu() | |
163 | { | |
164 | Pracownik* nowyPracownik; | |
165 | nowyPracownik = new Pracownik(*this); | |
166 | return nowyPracownik; | |
167 | } | |
168 | ||
169 | /////////////////////////////////////////////////// | |
170 | ||
171 | PRACOWNIK.H | |
172 | ||
173 | #pragma once | |
174 | #include "Napis.h" | |
175 | #include "Data.h" | |
176 | #include <iostream> | |
177 | ||
178 | class Pracownik | |
179 | { | |
180 | private: | |
181 | Napis m_Imie; | |
182 | Napis m_Nazwisko; | |
183 | Data m_DataUrodzenia; | |
184 | const int m_nIDZatrudnienia; | |
185 | public: | |
186 | Pracownik(const char* imie = "", const char* nazwisko = "", int dzien = 1, int miesiac = 1, int rok = 2000); | |
187 | Pracownik(const Pracownik &wzor); | |
188 | ~Pracownik(); | |
189 | Pracownik *m_pNastepny; | |
190 | const char* Imie() const; | |
191 | const char* Nazwisko() const; | |
192 | void Imie(const char* nowe_imie); | |
193 | void Nazwisko(const char* nowe_nazwisko); | |
194 | void DataUrodzenia(int nowy_dzien, int nowy_miesiac, int nowy_rok); | |
195 | void Wypisz() const; | |
196 | void Wpisz(); | |
197 | int SprawdzImie(const char* por_imie) const; | |
198 | int SprawdzNazwisko(const char* por_nazwisko) const; | |
199 | int Porownaj(const Pracownik& wzorzec) const; | |
200 | Pracownik &operator=(const Pracownik &wzor); | |
201 | bool operator == (const Pracownik &wzor) const; | |
202 | friend ostream &operator<<(ostream& wy, const Pracownik &p); | |
203 | friend istream &operator >> (istream& we, Pracownik &p); | |
204 | virtual void WypiszDane(); // wypisuje na ekranie wszystkie dane o pracowniku | |
205 | virtual Pracownik* KopiaObiektu(); // zwraca nowo stworzonego obiektu | |
206 | ||
207 | }; | |
208 | ||
209 | ||
210 | //////////////////////////////////////////////////////////////////////////////////////////////////// | |
211 | ||
212 | NAPIS.CPP | |
213 | ||
214 | #define _CRT_SECURE_NO_WARNINGS | |
215 | #include "Napis.h" | |
216 | ||
217 | using namespace std; | |
218 | ||
219 | Napis::Napis(const char* napis) | |
220 | { | |
221 | m_nDl = strlen(napis) + 1; | |
222 | m_pszNapis = new char[m_nDl]; | |
223 | strcpy(m_pszNapis, napis); | |
224 | } | |
225 | ||
226 | Napis::Napis(const Napis &wzor) | |
227 | { | |
228 | m_nDl = wzor.m_nDl; | |
229 | m_pszNapis = new char[m_nDl]; | |
230 | strcpy(m_pszNapis, wzor.m_pszNapis); | |
231 | } | |
232 | ||
233 | Napis::~Napis() | |
234 | { | |
235 | delete[] m_pszNapis; | |
236 | } | |
237 | ||
238 | const char* Napis::Zwroc() const | |
239 | { | |
240 | return m_pszNapis; | |
241 | } | |
242 | ||
243 | void Napis::Ustaw(const char* nowy_napis) | |
244 | { | |
245 | m_nDl = strlen(nowy_napis) + 1; | |
246 | m_pszNapis = new char[m_nDl]; | |
247 | strcpy(m_pszNapis, nowy_napis); | |
248 | } | |
249 | ||
250 | void Napis::Wypisz() const | |
251 | { | |
252 | cout << m_pszNapis; | |
253 | } | |
254 | ||
255 | void Napis::Wpisz() | |
256 | { | |
257 | string napis; | |
258 | cin >> napis; | |
259 | Ustaw(napis.c_str()); | |
260 | } | |
261 | ||
262 | int Napis::SprawdzNapis(const char* por_napis) const | |
263 | { | |
264 | return strcmp(m_pszNapis, por_napis); | |
265 | } | |
266 | ||
267 | Napis & Napis::operator=(const Napis & wzor) | |
268 | { | |
269 | if (this == &wzor) | |
270 | return *this; | |
271 | m_nDl = wzor.m_nDl; | |
272 | m_pszNapis = new char[m_nDl]; | |
273 | strcpy(m_pszNapis, wzor.m_pszNapis); | |
274 | return *this; | |
275 | } | |
276 | ||
277 | bool Napis::operator ==(const Napis & wzor) const | |
278 | { | |
279 | if (this == &wzor) | |
280 | return true; | |
281 | if (m_nDl == wzor.m_nDl && strcmp(m_pszNapis, wzor.m_pszNapis) == 0) | |
282 | return true; | |
283 | else | |
284 | return false; | |
285 | } | |
286 | ||
287 | ostream & operator << (ostream& wy, const Napis & p) | |
288 | { | |
289 | wy << p.m_pszNapis; | |
290 | return wy; | |
291 | } | |
292 | ||
293 | istream &operator >> (istream &we, Napis &p) | |
294 | { | |
295 | string str; | |
296 | we >> str; | |
297 | p.m_nDl = str.length() + 1; | |
298 | p.m_pszNapis = new char[p.m_nDl]; | |
299 | strcpy(p.m_pszNapis, str.c_str()); | |
300 | return we; | |
301 | } | |
302 | ||
303 | ///////////////////////////////////////////////////////////////////////////////////////////// | |
304 | ||
305 | NAPIS.H | |
306 | ||
307 | #pragma once | |
308 | #include <iostream> | |
309 | #include <string> | |
310 | ||
311 | using namespace std; | |
312 | ||
313 | class Napis | |
314 | { | |
315 | private: | |
316 | char* m_pszNapis; | |
317 | int m_nDl; | |
318 | public: | |
319 | Napis(const char* napis = ""); | |
320 | Napis(const Napis &wzor); | |
321 | ~Napis(); | |
322 | const char* Zwroc() const; | |
323 | void Ustaw(const char* nowy_napis); | |
324 | void Wypisz() const; | |
325 | void Wpisz(); | |
326 | int SprawdzNapis(const char* por_napis) const; | |
327 | Napis & operator=(const Napis & wzor); | |
328 | bool operator ==(const Napis & wzor) const; | |
329 | friend ostream & operator << (ostream& wy, const Napis & p); | |
330 | friend istream &operator >> (istream &we, Napis &p); | |
331 | }; | |
332 | ||
333 | ///////////////////////////////////////////////////////////////////////////// | |
334 | ||
335 | LISTA PRACOWNIKÓW.CPP | |
336 | ||
337 | #include "ListaPracownikow.h" | |
338 | ||
339 | #include<fstream> | |
340 | ||
341 | ListaPracownikow::ListaPracownikow() | |
342 | { | |
343 | m_nLiczbaPracownikow = 0; | |
344 | m_pPoczatek = nullptr; | |
345 | } | |
346 | ||
347 | ||
348 | ListaPracownikow::~ListaPracownikow() | |
349 | { | |
350 | } | |
351 | ||
352 | void ListaPracownikow::Dodaj(Pracownik& p) | |
353 | { | |
354 | Pracownik* aktualny = m_pPoczatek; | |
355 | Pracownik* nastepny; | |
356 | int licznik = 0; | |
357 | if (m_nLiczbaPracownikow == 0) | |
358 | { | |
359 | m_pPoczatek = &p; | |
360 | p.m_pNastepny = nullptr; | |
361 | m_nLiczbaPracownikow++; | |
362 | return; | |
363 | } | |
364 | else if (m_nLiczbaPracownikow == 1) | |
365 | { | |
366 | if (aktualny->SprawdzNazwisko(p.Nazwisko()) > 0) | |
367 | { | |
368 | m_pPoczatek = &p; | |
369 | p.m_pNastepny = aktualny; | |
370 | m_nLiczbaPracownikow++; | |
371 | return; | |
372 | } | |
373 | else if (aktualny->SprawdzNazwisko(p.Nazwisko()) < 0) | |
374 | { | |
375 | aktualny->m_pNastepny = &p; | |
376 | p.m_pNastepny = nullptr; | |
377 | m_nLiczbaPracownikow++; | |
378 | return; | |
379 | } | |
380 | } | |
381 | else | |
382 | { | |
383 | nastepny = aktualny->m_pNastepny; | |
384 | if (aktualny->SprawdzNazwisko(p.Nazwisko()) > 0) | |
385 | { | |
386 | m_pPoczatek = &p; | |
387 | p.m_pNastepny = aktualny; | |
388 | m_nLiczbaPracownikow++; | |
389 | return; | |
390 | } | |
391 | while (licznik <= m_nLiczbaPracownikow) | |
392 | { | |
393 | if (nastepny->SprawdzNazwisko(p.Nazwisko()) > 0) | |
394 | { | |
395 | aktualny->m_pNastepny = &p; | |
396 | p.m_pNastepny = nastepny; | |
397 | m_nLiczbaPracownikow++; | |
398 | return; | |
399 | } | |
400 | else if (nastepny->SprawdzNazwisko(p.Nazwisko()) < 0) | |
401 | { | |
402 | aktualny = nastepny; | |
403 | nastepny = aktualny->m_pNastepny; | |
404 | licznik++; | |
405 | } | |
406 | ||
407 | if (nastepny == nullptr) | |
408 | { | |
409 | aktualny->m_pNastepny = &p; | |
410 | p.m_pNastepny = nullptr; | |
411 | m_nLiczbaPracownikow++; | |
412 | return; | |
413 | } | |
414 | } | |
415 | } | |
416 | } | |
417 | ||
418 | void ListaPracownikow::Usun(const Pracownik& wzorzec) | |
419 | { | |
420 | Pracownik* aktualny = m_pPoczatek; | |
421 | Pracownik* poprzedni = nullptr; | |
422 | if (m_nLiczbaPracownikow == 0) | |
423 | { | |
424 | std::cout << "Brak pracownikow!" << std::endl; | |
425 | } | |
426 | else | |
427 | { | |
428 | for (int i = 0; i <= m_nLiczbaPracownikow; i++) | |
429 | { | |
430 | if (aktualny->Porownaj(wzorzec) == 0) | |
431 | { | |
432 | if (aktualny == m_pPoczatek) | |
433 | { | |
434 | m_pPoczatek = aktualny->m_pNastepny; | |
435 | m_nLiczbaPracownikow--; | |
436 | return; | |
437 | } | |
438 | else | |
439 | { | |
440 | poprzedni->m_pNastepny = aktualny->m_pNastepny; | |
441 | m_nLiczbaPracownikow--; | |
442 | return; | |
443 | } | |
444 | ||
445 | } | |
446 | else | |
447 | { | |
448 | poprzedni = aktualny; | |
449 | aktualny = aktualny->m_pNastepny; | |
450 | } | |
451 | } | |
452 | std::cout << "Nie znaleziono podanego pracownika na liscie!" << std::endl; | |
453 | } | |
454 | } | |
455 | ||
456 | void ListaPracownikow::WypiszPracownikow() const | |
457 | { | |
458 | Pracownik* aktualny = m_pPoczatek; | |
459 | if (m_nLiczbaPracownikow == 0) | |
460 | { | |
461 | std::cout << "Lista pracownikow jest pusta!" << std::endl; | |
462 | } | |
463 | else | |
464 | { | |
465 | for (int i = 1; i <= m_nLiczbaPracownikow; i++) | |
466 | { | |
467 | std::cout << "Pracownik #" << i << ": "; | |
468 | aktualny->Wypisz(); | |
469 | aktualny = aktualny->m_pNastepny; | |
470 | } | |
471 | } | |
472 | } | |
473 | ||
474 | const Pracownik* ListaPracownikow::Szukaj(const char* nazwisko, const char* imie) const | |
475 | { | |
476 | Pracownik* aktualny = m_pPoczatek; | |
477 | if (m_nLiczbaPracownikow == 0) | |
478 | { | |
479 | std::cout << "Lista pracownikow jest pusta!" << std::endl; | |
480 | return nullptr; | |
481 | } | |
482 | else | |
483 | { | |
484 | for (int i = 1; i <= m_nLiczbaPracownikow; i++) | |
485 | { | |
486 | if ((aktualny->SprawdzImie(imie) == 0) && (aktualny->SprawdzNazwisko(nazwisko) == 0)) | |
487 | { | |
488 | std::cout << "Znaleziono pracownika!" << std::endl; | |
489 | aktualny->Wypisz(); | |
490 | return aktualny; | |
491 | } | |
492 | else | |
493 | { | |
494 | aktualny = aktualny->m_pNastepny; | |
495 | } | |
496 | } | |
497 | return nullptr; | |
498 | } | |
499 | } | |
500 | ||
501 | void ListaPracownikow::ZapisDoPliku()const | |
502 | { | |
503 | ofstream plik; | |
504 | plik.open("lista.dat", fstream::out); | |
505 | if (!plik.good()) | |
506 | { | |
507 | cout << "Problem z otwarciem pliku docelowego!" << endl; | |
508 | } | |
509 | else | |
510 | { | |
511 | Pracownik* aktualny = m_pPoczatek; | |
512 | for (int i = 0; i < m_nLiczbaPracownikow; i++) | |
513 | { | |
514 | if (aktualny != nullptr) | |
515 | { | |
516 | plik << *aktualny << endl; | |
517 | } | |
518 | aktualny = aktualny->m_pNastepny; | |
519 | } | |
520 | } | |
521 | plik.close(); | |
522 | } | |
523 | ||
524 | void ListaPracownikow::WczytajZPliku() | |
525 | { | |
526 | ifstream plik; | |
527 | plik.open("lista.dat", fstream::in); | |
528 | if (!plik.good()) | |
529 | { | |
530 | cout << "Plik z danymi nie istnieje!" << endl; | |
531 | } | |
532 | else | |
533 | { | |
534 | m_nLiczbaPracownikow = 0; | |
535 | m_pPoczatek = nullptr; | |
536 | Pracownik* temp = new Pracownik(); | |
537 | while (plik >> *temp) | |
538 | { | |
539 | Dodaj(*temp); | |
540 | temp = new Pracownik(); | |
541 | } | |
542 | } | |
543 | } | |
544 | ||
545 | /////////////////////////////////////////////////////////////////////////////////// | |
546 | ||
547 | LISTA PRACOWNIKÓW.H | |
548 | ||
549 | #pragma once | |
550 | #include "Pracownik.h" | |
551 | #include <iostream> | |
552 | ||
553 | using namespace std; | |
554 | ||
555 | class ListaPracownikow | |
556 | { | |
557 | public: | |
558 | ListaPracownikow(); | |
559 | ~ListaPracownikow(); | |
560 | ||
561 | void Dodaj(Pracownik& p); | |
562 | void Usun(const Pracownik& wzorzec); | |
563 | void WypiszPracownikow() const; | |
564 | const Pracownik* Szukaj(const char* nazwisko, const char* imie) const; | |
565 | void ZapisDoPliku()const; | |
566 | void WczytajZPliku(); | |
567 | private: | |
568 | Pracownik* m_pPoczatek; | |
569 | int m_nLiczbaPracownikow; | |
570 | }; |