-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathStan.cs
134 lines (118 loc) · 4.25 KB
/
Stan.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
using System;
using System.Collections.Generic;
using System.Linq;
// Enumeracija koja definira moguće lokacije stanova
public enum Lokacija
{
Gradsko,
Prigradsko
}
// Apstraktna klasa koja predstavlja opću strukturu stanova
abstract class Stan
{
// Svojstva koja opisuju osnovne karakteristike svakog stana
public int BrojKvadrata { get; }
public Lokacija Lokacija { get; }
public bool Namjesten { get; }
public bool Internet { get; }
// Konstruktor koji postavlja osnovne karakteristike stana
public Stan(int brojKvadrata, Lokacija lokacija, bool namjesten, bool internet)
{
BrojKvadrata = brojKvadrata;
Lokacija = lokacija;
Namjesten = namjesten;
Internet = internet;
}
// Apstraktne metode koje će biti implementirane u podklasama
public abstract void Ispisi();
public abstract decimal ObracunajCijenuNajma();
}
// Konkretna podklasa koja predstavlja nenamješten stan
class NenamjestenStan : Stan
{
// Konstruktor koji poziva konstruktor bazne klase i postavlja dodatne karakteristike nenamještenog stana
public NenamjestenStan(int brojKvadrata, Lokacija lokacija, bool internet)
: base(brojKvadrata, lokacija, false, internet)
{
}
// Implementacija apstraktne metode Ispisi za nenamješten stan
public override void Ispisi()
{
Console.WriteLine($"{BrojKvadrata} {Lokacija} Nenamjesten {Internet}");
}
// Implementacija apstraktne metode ObracunajCijenuNajma za nenamješten stan
public override decimal ObracunajCijenuNajma()
{
decimal osnovnaCijena = Lokacija == Lokacija.Gradsko ? 200 : 150;
decimal cijenaKvadrata = 1;
decimal cijena = osnovnaCijena + BrojKvadrata * cijenaKvadrata;
if (Internet)
{
cijena *= 1.02m;
}
return cijena;
}
}
// Konkretna podklasa koja predstavlja namješten stan
class NamjestenStan : Stan
{
// Dodatna svojstva koja opisuju namješteni stan
public decimal VrijednostNamjestaja { get; }
public int BrojAparata { get; }
// Konstruktor koji poziva konstruktor bazne klase i postavlja dodatne karakteristike namještenog stana
public NamjestenStan(int brojKvadrata, Lokacija lokacija, bool internet, decimal vrijednostNamjestaja, int brojAparata)
: base(brojKvadrata, lokacija, true, internet)
{
VrijednostNamjestaja = vrijednostNamjestaja;
BrojAparata = brojAparata;
}
// Implementacija apstraktne metode Ispisi za namješteni stan
public override void Ispisi()
{
Console.WriteLine($"{BrojKvadrata} {Lokacija} Namjesten {Internet} {VrijednostNamjestaja} {BrojAparata}");
}
// Implementacija apstraktne metode ObracunajCijenuNajma za namješteni stan
public override decimal ObracunajCijenuNajma()
{
decimal osnovnaCijena = Lokacija == Lokacija.Gradsko ? 200 : 150;
decimal cijenaKvadrata = 1;
decimal cijena = osnovnaCijena + BrojKvadrata * cijenaKvadrata;
if (Internet)
{
cijena *= 1.02m;
}
// Dodatno povećanje cijene ovisno o broju aparata u stanu
if (BrojAparata < 3)
{
cijena += 0.01m * VrijednostNamjestaja;
}
else
{
cijena += 0.02m * VrijednostNamjestaja;
}
return cijena;
}
}
// Dodatna klasa koja predstavlja luksuzni apartman, naslijeđuje od namještenog stana
class LuksuzniApartman : NamjestenStan
{
// Lista osoblja koje radi u apartmanu
public List<Osoblje> Osoblje { get; set; }
// Konstruktor koji poziva konstruktor bazne klase i postavlja dodatne karakteristike luksuznog apartmana
public LuksuzniApartman(int brojKvadrata, Lokacija lokacija, bool internet, decimal vrijednostNamjestaja, int brojAparata, List<Osoblje> osoblje)
: base(brojKvadrata, lokacija, internet, vrijednostNamjestaja, brojAparata)
{
Osoblje = osoblje;
}
// Implementacija apstraktne metode Ispisi za luksuzni apartman
public override void Ispisi()
{
// Ispisuje osnovne informacije o stanu i zatim ispisuje osoblje u apartmanu
base.Ispisi();
Console.WriteLine("Osoblje:");
foreach (var osoba in Osoblje)
{
osoba.Ispisi();
}
}
}