This repository was archived by the owner on Jan 8, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBusPark.cpp
More file actions
103 lines (102 loc) · 2.83 KB
/
BusPark.cpp
File metadata and controls
103 lines (102 loc) · 2.83 KB
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
#include "BusPark.h"
/// <summary>
/// Â êîíñòðóêòîðå èíèöèàëèçèðóþòñÿ ñïèñêè àâòîáóñîâ
/// </summary>
BusPark::BusPark()
{
bus_depot = new LinkedList<BusInfo>();
bus_route = new LinkedList<BusInfo>();
}
/// <summary>
/// Äîáàâëåíèå àâòîáóñà â ñïèñîê
/// <para/>Åñëè àâòîáóñ íå ñîñòîèò íè â îäíîì ñïèñêå(id == -1) - èñïîëüçóåòñÿ ìåòîä add
/// <para/>Èíà÷å èñïîëüçóåòñÿ ìåòîä insert - àòîáóñ ñîõðàíÿåò ñâîé id
/// <para/>Ïîñëå äîáàâëåíèÿ ìåòîäîì add àâòîáóñ çàïèñûâàåò ñåáå íîâûé id
/// <para/>Åñëè ïîñëå äîáàâëåíèÿ ó àâòîáóñà id == -1, çíà÷èò ïðîèçîøëà îøèáêà
/// </summary>
/// <param name="bus">Óàçàòåëü íà ýêçåìïëÿð àâòîáóñà </param>
/// <param name="from_in">Åñëè true - ïðîèñõîäèò äîáàâëåíèå â bus_depot, èíà÷å - â bus_route</param>
void BusPark::add_bus(BusInfo* bus, bool from_in)
{
LinkedList<BusInfo>* list = from_in ? this->bus_depot : this->bus_route;
int id = -1;
if (bus->id == -1)
{
id = list->add(bus);
}
else
{
id = list->insert(bus->id, bus) ? bus->id : -1;
}
if (id == -1)
{
throw new std::exception("BusPark add_bus error");
}
else
{
bus->id = id;
}
bus->is_in_depot = from_in;
}
/// <summary>
/// Óäàëåíèå àâòîáóñà èç âñåõ ñïèñêîâ
/// <para/>Åñëè àâòîáóñ íå áûë íàéäåí íè â îäíîì - îøèáêà
/// </summary>
/// <param name="bus">Àâòîáóñ, êîòîðûé íóæíî óäàëèòü</param>
void BusPark::remove_bus(BusInfo* bus)
{
if (!bus_depot->remove(bus->id) && !bus_route->remove(bus->id))
{
throw new std::exception("BusPark remove_bus error");
}
}
/// <summary>
/// Âîçâðàùàåò óêàçàòåëü íà ýêçåìïëÿð àâòîáóñà ïî åãî id
/// </summary>
/// <param name="id">id äëÿ ïîèñêà</param>
BusInfo* BusPark::select_bus(int id)
{
BusInfo* res = bus_depot->find(id);
return res == nullptr ? bus_route->find(id) : res;
}
/// <summary>
/// Åñëè óêàçàòåëü list_marker ïóñòîé - âûâîäèò îáà ñïèñêà àâòîáóñîâ
/// <para/>Åñëè ðàçûìåíîâàííîå çíà÷åíèå list_marker == true âûâîäèò ñïèñîê bus_depot
/// <para/>Èíà÷å âûâîäèò ñïèñîê bus_route
/// </summary>
/// <param name="list_marker">óêàçàòåëü, îáîçíà÷àþùèé, êàêîé ñïèñîê âûâîäèòü</param>
void BusPark::print(bool* list_marker)
{
if (list_marker == nullptr)
{
print_list(bus_depot);
print_list(bus_route);
}
else if((*list_marker))
{
print_list(bus_depot);
}
else
{
print_list(bus_route);
}
}
/// <summary>
/// Ïå÷àòàåò ñïèñîê ñëåäóùèì îáðàçîì:
/// <para/>Ïîëó÷àåò ïåðâûé ýëåìåíò ñïèñêà
/// <para/>Ïå÷àòàåò åãî
/// <para/>Ïî id ïîëó÷àåò ñëåäóþùèé ýëåìåíò ñïèñêà
/// <para/>Ïå÷àòàåò åãî
/// <para/>Çàïèñûâàåò ýòîò ýëåìåíò íà ìåñòî ñòàðòîâîãî
/// <para/>Òàêèì îáðàçîì ïðîèçâîäèòñÿ îáðàáîòêà ñïèñêà, ïîêà ïî id âîçìîæíî ïîëó÷èòü ñëåäóþùèé ýëåìåíò
/// </summary>
/// <param name="list">Ñïèñîê, êîòîðûé íóæíî âûâåñòè</param>
void BusPark::print_list(LinkedList<BusInfo>* list)
{
BusInfo* bus = list->find_first();
while (bus != nullptr)
{
printf("%s\n", bus->to_string().c_str());
bus = list->find_next(bus->id);
}
}