View difference between Paste ID: qBE5Fz8J and 9vaaJxvd
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
};